@ilamy/calendar 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -9
- package/dist/index.d.ts +133 -1
- package/dist/index.js +594 -375
- package/package.json +14 -14
package/dist/index.js
CHANGED
|
@@ -884,7 +884,19 @@ import { useImperativeHandle, useState } from "react";
|
|
|
884
884
|
import { useDraggable } from "@dnd-kit/core";
|
|
885
885
|
import { AnimatePresence, motion } from "motion/react";
|
|
886
886
|
import { memo } from "react";
|
|
887
|
-
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
887
|
+
import { jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
888
|
+
var getBorderRadiusClass = (isTruncatedStart, isTruncatedEnd) => {
|
|
889
|
+
if (isTruncatedStart && isTruncatedEnd) {
|
|
890
|
+
return "rounded-none";
|
|
891
|
+
}
|
|
892
|
+
if (isTruncatedStart) {
|
|
893
|
+
return "rounded-r-md rounded-l-none";
|
|
894
|
+
}
|
|
895
|
+
if (isTruncatedEnd) {
|
|
896
|
+
return "rounded-l-md rounded-r-none";
|
|
897
|
+
}
|
|
898
|
+
return "rounded-md";
|
|
899
|
+
};
|
|
888
900
|
function DraggableEventUnmemoized({
|
|
889
901
|
elementId,
|
|
890
902
|
event,
|
|
@@ -901,14 +913,27 @@ function DraggableEventUnmemoized({
|
|
|
901
913
|
},
|
|
902
914
|
disabled: disableDrag || disableDragAndDrop
|
|
903
915
|
});
|
|
904
|
-
const DefaultEventContent = () =>
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
916
|
+
const DefaultEventContent = () => {
|
|
917
|
+
const enhancedEvent = event;
|
|
918
|
+
const isTruncatedStart = enhancedEvent.isTruncatedStart;
|
|
919
|
+
const isTruncatedEnd = enhancedEvent.isTruncatedEnd;
|
|
920
|
+
return /* @__PURE__ */ jsxs6("div", {
|
|
921
|
+
className: cn(event.backgroundColor || "bg-blue-500", event.color || "text-white", "h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative", getBorderRadiusClass(isTruncatedStart, isTruncatedEnd)),
|
|
922
|
+
style: { backgroundColor: event.backgroundColor, color: event.color },
|
|
923
|
+
children: [
|
|
924
|
+
isTruncatedStart && /* @__PURE__ */ jsx14("div", {
|
|
925
|
+
className: "absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"
|
|
926
|
+
}),
|
|
927
|
+
/* @__PURE__ */ jsx14("p", {
|
|
928
|
+
className: cn("text-[10px] font-semibold sm:text-xs mt-0.5", isTruncatedStart && "pl-1", isTruncatedEnd && "pr-1"),
|
|
929
|
+
children: event.title
|
|
930
|
+
}),
|
|
931
|
+
isTruncatedEnd && /* @__PURE__ */ jsx14("div", {
|
|
932
|
+
className: "absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"
|
|
933
|
+
})
|
|
934
|
+
]
|
|
935
|
+
});
|
|
936
|
+
};
|
|
912
937
|
return /* @__PURE__ */ jsx14(AnimatePresence, {
|
|
913
938
|
mode: "wait",
|
|
914
939
|
children: /* @__PURE__ */ jsx14(motion.div, {
|
|
@@ -936,7 +961,7 @@ var DraggableEvent = memo(DraggableEventUnmemoized, (prevProps, nextProps) => {
|
|
|
936
961
|
});
|
|
937
962
|
|
|
938
963
|
// src/features/month-view/components/all-events-dialog.tsx
|
|
939
|
-
import { jsx as jsx15, jsxs as
|
|
964
|
+
import { jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
940
965
|
var AllEventDialog = ({ ref }) => {
|
|
941
966
|
const [dialogOpen, setDialogOpen] = useState(false);
|
|
942
967
|
const [selectedDayEvents, setSelectedDayEvents] = useState(null);
|
|
@@ -954,7 +979,7 @@ var AllEventDialog = ({ ref }) => {
|
|
|
954
979
|
return /* @__PURE__ */ jsx15(Dialog, {
|
|
955
980
|
open: dialogOpen,
|
|
956
981
|
onOpenChange: setDialogOpen,
|
|
957
|
-
children: /* @__PURE__ */
|
|
982
|
+
children: /* @__PURE__ */ jsxs7(DialogContent, {
|
|
958
983
|
className: "max-h-[80vh] max-w-md overflow-y-auto",
|
|
959
984
|
children: [
|
|
960
985
|
/* @__PURE__ */ jsx15(DialogHeader, {
|
|
@@ -1032,7 +1057,7 @@ function DroppableCell({
|
|
|
1032
1057
|
}
|
|
1033
1058
|
|
|
1034
1059
|
// src/features/month-view/components/day-cell.tsx
|
|
1035
|
-
import { jsx as jsx17, jsxs as
|
|
1060
|
+
import { jsx as jsx17, jsxs as jsxs8, Fragment } from "react/jsx-runtime";
|
|
1036
1061
|
var DayCell = ({
|
|
1037
1062
|
index,
|
|
1038
1063
|
day,
|
|
@@ -1044,7 +1069,8 @@ var DayCell = ({
|
|
|
1044
1069
|
getEventsForDateRange,
|
|
1045
1070
|
currentDate,
|
|
1046
1071
|
firstDayOfWeek,
|
|
1047
|
-
dayMaxEvents = 0
|
|
1072
|
+
dayMaxEvents = 0,
|
|
1073
|
+
t
|
|
1048
1074
|
} = useCalendarContext();
|
|
1049
1075
|
const todayEvents = getEventsForDateRange(day.startOf("day"), day.endOf("day"));
|
|
1050
1076
|
const firstDayOfMonth = currentDate.startOf("month");
|
|
@@ -1064,7 +1090,7 @@ var DayCell = ({
|
|
|
1064
1090
|
const isLastColumn = index === 6;
|
|
1065
1091
|
const hiddenEventsCount = todayEvents.length - dayMaxEvents;
|
|
1066
1092
|
const hasHiddenEvents = hiddenEventsCount > 0;
|
|
1067
|
-
return /* @__PURE__ */
|
|
1093
|
+
return /* @__PURE__ */ jsxs8(Fragment, {
|
|
1068
1094
|
children: [
|
|
1069
1095
|
/* @__PURE__ */ jsx17(DroppableCell, {
|
|
1070
1096
|
id: `day-cell-${day.format("YYYY-MM-DD")}`,
|
|
@@ -1072,7 +1098,7 @@ var DayCell = ({
|
|
|
1072
1098
|
"data-testid": `day-cell-${day.format("YYYY-MM-DD")}`,
|
|
1073
1099
|
date: day,
|
|
1074
1100
|
className: cn("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px]", !isCurrentMonth && "bg-secondary text-muted-foreground", isLastColumn && "border-r-0", className),
|
|
1075
|
-
children: /* @__PURE__ */
|
|
1101
|
+
children: /* @__PURE__ */ jsxs8("div", {
|
|
1076
1102
|
className: "flex flex-col gap-1",
|
|
1077
1103
|
children: [
|
|
1078
1104
|
/* @__PURE__ */ jsx17("div", {
|
|
@@ -1083,7 +1109,7 @@ var DayCell = ({
|
|
|
1083
1109
|
className: "h-[20px] w-full",
|
|
1084
1110
|
"data-testid": event?.title
|
|
1085
1111
|
}, `empty-${rowIndex}`)),
|
|
1086
|
-
hasHiddenEvents && /* @__PURE__ */
|
|
1112
|
+
hasHiddenEvents && /* @__PURE__ */ jsxs8("div", {
|
|
1087
1113
|
className: "text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",
|
|
1088
1114
|
onClick: (e) => {
|
|
1089
1115
|
e.stopPropagation();
|
|
@@ -1101,7 +1127,8 @@ var DayCell = ({
|
|
|
1101
1127
|
children: [
|
|
1102
1128
|
"+",
|
|
1103
1129
|
hiddenEventsCount,
|
|
1104
|
-
"
|
|
1130
|
+
" ",
|
|
1131
|
+
t("more")
|
|
1105
1132
|
]
|
|
1106
1133
|
})
|
|
1107
1134
|
]
|
|
@@ -1117,7 +1144,7 @@ var DayCell = ({
|
|
|
1117
1144
|
// src/features/month-view/components/month-header/month-header.tsx
|
|
1118
1145
|
import { AnimatePresence as AnimatePresence2, motion as motion2 } from "motion/react";
|
|
1119
1146
|
import { useMemo } from "react";
|
|
1120
|
-
import { jsx as jsx18, jsxs as
|
|
1147
|
+
import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1121
1148
|
var MonthHeader = ({ className }) => {
|
|
1122
1149
|
const {
|
|
1123
1150
|
firstDayOfWeek,
|
|
@@ -1141,11 +1168,11 @@ var MonthHeader = ({ className }) => {
|
|
|
1141
1168
|
return { days, shortDays };
|
|
1142
1169
|
}, [firstDayOfWeek, currentLocale]);
|
|
1143
1170
|
return /* @__PURE__ */ jsx18("div", {
|
|
1144
|
-
className: cn("grid grid-cols-7 border-b", stickyViewHeader && "sticky top-0 z-
|
|
1171
|
+
className: cn("grid grid-cols-7 border-b", stickyViewHeader && "sticky top-0 z-20", viewHeaderClassName, className),
|
|
1145
1172
|
"data-testid": "month-header",
|
|
1146
1173
|
children: weekDays.days.map((weekDay, index) => /* @__PURE__ */ jsx18(AnimatePresence2, {
|
|
1147
1174
|
mode: "wait",
|
|
1148
|
-
children: /* @__PURE__ */
|
|
1175
|
+
children: /* @__PURE__ */ jsxs9(motion2.div, {
|
|
1149
1176
|
initial: { opacity: 0, y: -10 },
|
|
1150
1177
|
animate: { opacity: 1, y: 0 },
|
|
1151
1178
|
exit: { opacity: 0, y: -10 },
|
|
@@ -1216,6 +1243,8 @@ var useProcessedWeekEvents = ({
|
|
|
1216
1243
|
const eventEnd = dayjs_config_default.min(event.end.startOf("day"), weekEnd);
|
|
1217
1244
|
const startCol = Math.max(0, eventStart.diff(weekStart, "day"));
|
|
1218
1245
|
const endCol = Math.min(6, eventEnd.diff(weekStart, "day"));
|
|
1246
|
+
const isTruncatedStart = event.start.startOf("day").isBefore(weekStart);
|
|
1247
|
+
const isTruncatedEnd = event.end.startOf("day").isAfter(weekEnd);
|
|
1219
1248
|
let placedSuccessfully = false;
|
|
1220
1249
|
let assignedRow = -1;
|
|
1221
1250
|
for (let row = 0;row < dayMaxEvents; row++) {
|
|
@@ -1242,7 +1271,9 @@ var useProcessedWeekEvents = ({
|
|
|
1242
1271
|
top: DAY_NUMBER_HEIGHT + GAP_BETWEEN_ELEMENTS + assignedRow * (EVENT_BAR_HEIGHT + GAP_BETWEEN_ELEMENTS),
|
|
1243
1272
|
height: EVENT_BAR_HEIGHT,
|
|
1244
1273
|
position: assignedRow,
|
|
1245
|
-
...event
|
|
1274
|
+
...event,
|
|
1275
|
+
isTruncatedStart,
|
|
1276
|
+
isTruncatedEnd
|
|
1246
1277
|
});
|
|
1247
1278
|
placedSuccessfully = true;
|
|
1248
1279
|
}
|
|
@@ -1273,7 +1304,9 @@ var useProcessedWeekEvents = ({
|
|
|
1273
1304
|
top: DAY_NUMBER_HEIGHT + GAP_BETWEEN_ELEMENTS + truncatedAssignedRow * (EVENT_BAR_HEIGHT + GAP_BETWEEN_ELEMENTS),
|
|
1274
1305
|
height: EVENT_BAR_HEIGHT,
|
|
1275
1306
|
position: truncatedAssignedRow,
|
|
1276
|
-
...event
|
|
1307
|
+
...event,
|
|
1308
|
+
isTruncatedStart: true,
|
|
1309
|
+
isTruncatedEnd
|
|
1277
1310
|
});
|
|
1278
1311
|
placedSuccessfully = true;
|
|
1279
1312
|
break;
|
|
@@ -1284,6 +1317,8 @@ var useProcessedWeekEvents = ({
|
|
|
1284
1317
|
for (const event of sortedSingleDay) {
|
|
1285
1318
|
const eventStart = dayjs_config_default.max(event.start.startOf("day"), weekStart);
|
|
1286
1319
|
const col = Math.max(0, eventStart.diff(weekStart, "day"));
|
|
1320
|
+
const isTruncatedStart = false;
|
|
1321
|
+
const isTruncatedEnd = false;
|
|
1287
1322
|
let assignedRow = -1;
|
|
1288
1323
|
for (let row = 0;row < dayMaxEvents; row++) {
|
|
1289
1324
|
if (!grid[row][col].taken) {
|
|
@@ -1299,7 +1334,9 @@ var useProcessedWeekEvents = ({
|
|
|
1299
1334
|
top: DAY_NUMBER_HEIGHT + GAP_BETWEEN_ELEMENTS + assignedRow * (EVENT_BAR_HEIGHT + GAP_BETWEEN_ELEMENTS),
|
|
1300
1335
|
height: EVENT_BAR_HEIGHT,
|
|
1301
1336
|
position: assignedRow,
|
|
1302
|
-
...event
|
|
1337
|
+
...event,
|
|
1338
|
+
isTruncatedStart,
|
|
1339
|
+
isTruncatedEnd
|
|
1303
1340
|
});
|
|
1304
1341
|
}
|
|
1305
1342
|
}
|
|
@@ -1312,7 +1349,7 @@ var WeekEventsLayer = ({ days }) => {
|
|
|
1312
1349
|
const weekStart = days[0];
|
|
1313
1350
|
const processedWeekEvents = useProcessedWeekEvents({ days });
|
|
1314
1351
|
return /* @__PURE__ */ jsx19("div", {
|
|
1315
|
-
className: "relative w-full h-full pointer-events-none z-
|
|
1352
|
+
className: "relative w-full h-full pointer-events-none z-10 overflow-clip",
|
|
1316
1353
|
children: processedWeekEvents.map((event) => {
|
|
1317
1354
|
return /* @__PURE__ */ jsx19("div", {
|
|
1318
1355
|
className: "absolute z-10 pointer-events-auto overflow-clip",
|
|
@@ -1334,7 +1371,7 @@ var WeekEventsLayer = ({ days }) => {
|
|
|
1334
1371
|
};
|
|
1335
1372
|
|
|
1336
1373
|
// src/features/month-view/components/view/month-view.tsx
|
|
1337
|
-
import { jsx as jsx20, jsxs as
|
|
1374
|
+
import { jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1338
1375
|
var MonthView = ({ dayMaxEvents = 3 }) => {
|
|
1339
1376
|
const allEventsDialogRef = React5.useRef(null);
|
|
1340
1377
|
const { currentDate, firstDayOfWeek } = useCalendarContext();
|
|
@@ -1355,7 +1392,7 @@ var MonthView = ({ dayMaxEvents = 3 }) => {
|
|
|
1355
1392
|
}
|
|
1356
1393
|
return days;
|
|
1357
1394
|
}, [adjustedFirstDayOfCalendar]);
|
|
1358
|
-
return /* @__PURE__ */
|
|
1395
|
+
return /* @__PURE__ */ jsxs10("div", {
|
|
1359
1396
|
className: "flex h-full flex-col",
|
|
1360
1397
|
"data-testid": "month-view",
|
|
1361
1398
|
children: [
|
|
@@ -1376,7 +1413,7 @@ var MonthView = ({ dayMaxEvents = 3 }) => {
|
|
|
1376
1413
|
className: "relative grid h-full grid-cols-7 grid-rows-6 overflow-auto flex-1",
|
|
1377
1414
|
"data-testid": "month-calendar-grid",
|
|
1378
1415
|
children: calendarDays.map((days, index) => {
|
|
1379
|
-
return /* @__PURE__ */
|
|
1416
|
+
return /* @__PURE__ */ jsxs10("div", {
|
|
1380
1417
|
className: "relative col-span-7 grid grid-cols-7",
|
|
1381
1418
|
"data-testid": `week-row-${index}`,
|
|
1382
1419
|
children: [
|
|
@@ -1412,7 +1449,7 @@ import weekOfYear2 from "dayjs/plugin/weekOfYear";
|
|
|
1412
1449
|
|
|
1413
1450
|
// src/features/week-view/week-all-day-row.tsx
|
|
1414
1451
|
import { useMemo as useMemo3 } from "react";
|
|
1415
|
-
import { jsx as jsx21, jsxs as
|
|
1452
|
+
import { jsx as jsx21, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1416
1453
|
var WeekAllDayRow = () => {
|
|
1417
1454
|
const { currentDate, getEventsForDateRange, firstDayOfWeek } = useCalendarContext();
|
|
1418
1455
|
const startOfWeek = currentDate.startOf("week").day(firstDayOfWeek);
|
|
@@ -1478,7 +1515,7 @@ var WeekAllDayRow = () => {
|
|
|
1478
1515
|
allDayRowsCount: Math.max(1, rows.length)
|
|
1479
1516
|
};
|
|
1480
1517
|
}, [allDayEvents, adjustedStartOfWeek, endOfWeek]);
|
|
1481
|
-
return /* @__PURE__ */
|
|
1518
|
+
return /* @__PURE__ */ jsxs11("div", {
|
|
1482
1519
|
className: "grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1 relative",
|
|
1483
1520
|
"data-testid": "week-all-day-row",
|
|
1484
1521
|
children: [
|
|
@@ -1518,7 +1555,7 @@ var WeekAllDayRow = () => {
|
|
|
1518
1555
|
|
|
1519
1556
|
// src/features/week-view/week-header.tsx
|
|
1520
1557
|
import { AnimatePresence as AnimatePresence4, motion as motion4 } from "motion/react";
|
|
1521
|
-
import { jsx as jsx22, jsxs as
|
|
1558
|
+
import { jsx as jsx22, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1522
1559
|
var WeekHeader = ({ className }) => {
|
|
1523
1560
|
const {
|
|
1524
1561
|
currentDate,
|
|
@@ -1535,13 +1572,13 @@ var WeekHeader = ({ className }) => {
|
|
|
1535
1572
|
for (let i = 0;i < 7; i++) {
|
|
1536
1573
|
weekDays.push(adjustedStartOfWeek.add(i, "day"));
|
|
1537
1574
|
}
|
|
1538
|
-
return /* @__PURE__ */
|
|
1539
|
-
className: cn("grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1", stickyViewHeader && "sticky top-0 z-
|
|
1575
|
+
return /* @__PURE__ */ jsxs12("div", {
|
|
1576
|
+
className: cn("grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1", stickyViewHeader && "sticky top-0 z-20", viewHeaderClassName, className),
|
|
1540
1577
|
"data-testid": "week-header",
|
|
1541
1578
|
children: [
|
|
1542
1579
|
/* @__PURE__ */ jsx22("div", {
|
|
1543
1580
|
className: "col-span-1 w-14 shrink-0 items-center justify-center border-x border-b p-2",
|
|
1544
|
-
children: /* @__PURE__ */
|
|
1581
|
+
children: /* @__PURE__ */ jsxs12("div", {
|
|
1545
1582
|
className: "flex flex-col items-center justify-center",
|
|
1546
1583
|
children: [
|
|
1547
1584
|
/* @__PURE__ */ jsx22("span", {
|
|
@@ -1559,7 +1596,7 @@ var WeekHeader = ({ className }) => {
|
|
|
1559
1596
|
const isToday = day.isSame(dayjs_config_default(), "day");
|
|
1560
1597
|
return /* @__PURE__ */ jsx22(AnimatePresence4, {
|
|
1561
1598
|
mode: "wait",
|
|
1562
|
-
children: /* @__PURE__ */
|
|
1599
|
+
children: /* @__PURE__ */ jsxs12(motion4.div, {
|
|
1563
1600
|
initial: { opacity: 0, y: -10 },
|
|
1564
1601
|
animate: { opacity: 1, y: 0 },
|
|
1565
1602
|
exit: { opacity: 0, y: -10 },
|
|
@@ -1698,7 +1735,7 @@ var DayEventsLayer = ({
|
|
|
1698
1735
|
const todayEvents = useProcessedDayEvents({ day });
|
|
1699
1736
|
return /* @__PURE__ */ jsx23("div", {
|
|
1700
1737
|
"data-testid": dataTestId,
|
|
1701
|
-
className: "pointer-events-none absolute inset-0 z-
|
|
1738
|
+
className: "pointer-events-none absolute inset-0 z-10",
|
|
1702
1739
|
children: todayEvents.map((event, index) => {
|
|
1703
1740
|
const veryVeryUniqueKey = `event-${event.id}-${index}-${day.format("YYYY-MM-DD")}`;
|
|
1704
1741
|
const isShortEvent = event.end.diff(event.start, "minute") <= 15;
|
|
@@ -1723,10 +1760,10 @@ var DayEventsLayer = ({
|
|
|
1723
1760
|
};
|
|
1724
1761
|
|
|
1725
1762
|
// src/features/week-view/week-day-col.tsx
|
|
1726
|
-
import { jsx as jsx24, jsxs as
|
|
1763
|
+
import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1727
1764
|
var hours = Array.from({ length: 24 }, (_, i) => i).map((hour) => dayjs_config_default().hour(hour).minute(0));
|
|
1728
1765
|
var WeekDayCol = ({ day }) => {
|
|
1729
|
-
return /* @__PURE__ */
|
|
1766
|
+
return /* @__PURE__ */ jsxs13("div", {
|
|
1730
1767
|
"data-testid": `week-day-col-${day.format("YYYY-MM-DD")}`,
|
|
1731
1768
|
className: "col-span-1 relative grid grid-rows-24 border-r",
|
|
1732
1769
|
children: [
|
|
@@ -1739,7 +1776,7 @@ var WeekDayCol = ({ day }) => {
|
|
|
1739
1776
|
date: day,
|
|
1740
1777
|
hour,
|
|
1741
1778
|
"data-testid": `week-time-cell-${cellDate}-${time.format("HH")}`,
|
|
1742
|
-
className: cn("hover:bg-accent relative z-
|
|
1779
|
+
className: cn("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b")
|
|
1743
1780
|
}, `${cellDate}-${time.format("HH")}`);
|
|
1744
1781
|
}),
|
|
1745
1782
|
/* @__PURE__ */ jsx24(DayEventsLayer, {
|
|
@@ -1751,7 +1788,7 @@ var WeekDayCol = ({ day }) => {
|
|
|
1751
1788
|
};
|
|
1752
1789
|
|
|
1753
1790
|
// src/features/week-view/week-time-grid.tsx
|
|
1754
|
-
import { jsx as jsx25, jsxs as
|
|
1791
|
+
import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1755
1792
|
var hours2 = Array.from({ length: 24 }, (_, i) => i).map((hour) => dayjs_config_default().hour(hour).minute(0));
|
|
1756
1793
|
var WeekTimeGrid = () => {
|
|
1757
1794
|
const { currentDate, firstDayOfWeek, currentLocale } = useCalendarContext();
|
|
@@ -1763,7 +1800,7 @@ var WeekTimeGrid = () => {
|
|
|
1763
1800
|
}
|
|
1764
1801
|
const todayIndex = weekDays.findIndex((day) => day.isSame(dayjs_config_default(), "day"));
|
|
1765
1802
|
const isCurrentWeek = todayIndex !== -1;
|
|
1766
|
-
return /* @__PURE__ */
|
|
1803
|
+
return /* @__PURE__ */ jsxs14("div", {
|
|
1767
1804
|
"data-testid": "week-time-grid",
|
|
1768
1805
|
className: "relative h-full grid grid-cols-[auto_repeat(7,1fr)] grid-rows-[repeat(24,minmax(60px, 1fr))]",
|
|
1769
1806
|
children: [
|
|
@@ -1806,17 +1843,17 @@ var WeekTimeGrid = () => {
|
|
|
1806
1843
|
};
|
|
1807
1844
|
|
|
1808
1845
|
// src/features/week-view/view/week-view.tsx
|
|
1809
|
-
import { jsx as jsx26, jsxs as
|
|
1846
|
+
import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1810
1847
|
dayjs_config_default.extend(weekOfYear2);
|
|
1811
1848
|
var WeekView = () => {
|
|
1812
|
-
return /* @__PURE__ */
|
|
1849
|
+
return /* @__PURE__ */ jsxs15("div", {
|
|
1813
1850
|
className: "flex flex-col h-full",
|
|
1814
1851
|
"data-testid": "week-view",
|
|
1815
1852
|
children: [
|
|
1816
1853
|
/* @__PURE__ */ jsx26(WeekHeader, {
|
|
1817
1854
|
className: "h-[5rem]"
|
|
1818
1855
|
}),
|
|
1819
|
-
/* @__PURE__ */
|
|
1856
|
+
/* @__PURE__ */ jsxs15(ScrollArea, {
|
|
1820
1857
|
className: "flex overflow-auto h-[calc(100%-5rem)]",
|
|
1821
1858
|
"data-testid": "week-scroll-area",
|
|
1822
1859
|
children: [
|
|
@@ -1834,7 +1871,7 @@ import { Fragment as Fragment2 } from "react";
|
|
|
1834
1871
|
|
|
1835
1872
|
// src/features/day-view/components/day-all-day-row.tsx
|
|
1836
1873
|
import { useMemo as useMemo5 } from "react";
|
|
1837
|
-
import { jsx as jsx27, jsxs as
|
|
1874
|
+
import { jsx as jsx27, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1838
1875
|
var DayAllDayRow = () => {
|
|
1839
1876
|
const { currentDate, getEventsForDateRange } = useCalendarContext();
|
|
1840
1877
|
const dayEvents = getEventsForDateRange(currentDate.startOf("day"), currentDate.endOf("day"));
|
|
@@ -1874,7 +1911,7 @@ var DayAllDayRow = () => {
|
|
|
1874
1911
|
allDayRowsCount: Math.max(1, rows.length)
|
|
1875
1912
|
};
|
|
1876
1913
|
}, [allDayEvents]);
|
|
1877
|
-
return /* @__PURE__ */
|
|
1914
|
+
return /* @__PURE__ */ jsxs16("div", {
|
|
1878
1915
|
"data-testid": "day-all-day-row",
|
|
1879
1916
|
className: "grid grid-cols-8 border-b border-x",
|
|
1880
1917
|
children: [
|
|
@@ -1911,16 +1948,16 @@ var DayAllDayRow = () => {
|
|
|
1911
1948
|
|
|
1912
1949
|
// src/features/day-view/components/day-header.tsx
|
|
1913
1950
|
import { AnimatePresence as AnimatePresence5, motion as motion5 } from "motion/react";
|
|
1914
|
-
import { jsx as jsx28, jsxs as
|
|
1951
|
+
import { jsx as jsx28, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1915
1952
|
var DayHeader = ({ className }) => {
|
|
1916
1953
|
const { currentDate, stickyViewHeader, viewHeaderClassName } = useCalendarContext();
|
|
1917
1954
|
const isToday = currentDate.isSame(dayjs_config_default(), "day");
|
|
1918
1955
|
return /* @__PURE__ */ jsx28("div", {
|
|
1919
1956
|
"data-testid": "day-header",
|
|
1920
|
-
className: cn("flex items-center justify-center border-b p-2 border-x", stickyViewHeader && "sticky top-0 z-
|
|
1957
|
+
className: cn("flex items-center justify-center border-b p-2 border-x", stickyViewHeader && "sticky top-0 z-20", viewHeaderClassName, className),
|
|
1921
1958
|
children: /* @__PURE__ */ jsx28(AnimatePresence5, {
|
|
1922
1959
|
mode: "wait",
|
|
1923
|
-
children: /* @__PURE__ */
|
|
1960
|
+
children: /* @__PURE__ */ jsxs17(motion5.div, {
|
|
1924
1961
|
initial: { opacity: 0, y: -10 },
|
|
1925
1962
|
animate: { opacity: 1, y: 0 },
|
|
1926
1963
|
exit: { opacity: 0, y: -10 },
|
|
@@ -1968,7 +2005,7 @@ var DayTimeCol = ({ className }) => {
|
|
|
1968
2005
|
};
|
|
1969
2006
|
|
|
1970
2007
|
// src/features/day-view/components/view/day-view.tsx
|
|
1971
|
-
import { jsx as jsx30, jsxs as
|
|
2008
|
+
import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1972
2009
|
var timeSegments = [0, 15, 30, 45];
|
|
1973
2010
|
var hours4 = Array.from({ length: 24 }, (_, i) => i).map((hour) => {
|
|
1974
2011
|
return dayjs_config_default().hour(hour).minute(0);
|
|
@@ -1977,19 +2014,19 @@ var DayView = () => {
|
|
|
1977
2014
|
const { currentDate } = useCalendarContext();
|
|
1978
2015
|
const isToday = currentDate.isSame(dayjs_config_default(), "day");
|
|
1979
2016
|
const cellDate = currentDate.format("YYYY-MM-DD");
|
|
1980
|
-
return /* @__PURE__ */
|
|
2017
|
+
return /* @__PURE__ */ jsxs18("div", {
|
|
1981
2018
|
"data-testid": "day-view",
|
|
1982
2019
|
className: "flex h-full flex-col",
|
|
1983
2020
|
children: [
|
|
1984
2021
|
/* @__PURE__ */ jsx30(DayHeader, {
|
|
1985
2022
|
className: "h-[3rem]"
|
|
1986
2023
|
}),
|
|
1987
|
-
/* @__PURE__ */
|
|
2024
|
+
/* @__PURE__ */ jsxs18(ScrollArea, {
|
|
1988
2025
|
"data-testid": "day-scroll-area",
|
|
1989
2026
|
className: "relative overflow-y-auto h-[calc(100%-3rem)]",
|
|
1990
2027
|
children: [
|
|
1991
2028
|
/* @__PURE__ */ jsx30(DayAllDayRow, {}),
|
|
1992
|
-
/* @__PURE__ */
|
|
2029
|
+
/* @__PURE__ */ jsxs18("div", {
|
|
1993
2030
|
"data-testid": "day-time-grid",
|
|
1994
2031
|
className: "grid grid-cols-8 divide-x border-x",
|
|
1995
2032
|
style: { height: `${hours4.length * 60}px` },
|
|
@@ -1997,7 +2034,7 @@ var DayView = () => {
|
|
|
1997
2034
|
/* @__PURE__ */ jsx30(DayTimeCol, {
|
|
1998
2035
|
className: "col-span-2 h-full md:col-span-1"
|
|
1999
2036
|
}),
|
|
2000
|
-
/* @__PURE__ */
|
|
2037
|
+
/* @__PURE__ */ jsxs18("div", {
|
|
2001
2038
|
"data-testid": "day-events-column",
|
|
2002
2039
|
className: "relative col-span-6 h-full md:col-span-7",
|
|
2003
2040
|
children: [
|
|
@@ -2014,10 +2051,10 @@ var DayView = () => {
|
|
|
2014
2051
|
}),
|
|
2015
2052
|
/* @__PURE__ */ jsx30("div", {
|
|
2016
2053
|
"data-testid": "day-interactive-layer",
|
|
2017
|
-
className: "pointer-events-auto absolute inset-0 z-
|
|
2054
|
+
className: "pointer-events-auto absolute inset-0 z-10",
|
|
2018
2055
|
children: hours4.map((time) => {
|
|
2019
2056
|
const hour = time.hour();
|
|
2020
|
-
return /* @__PURE__ */
|
|
2057
|
+
return /* @__PURE__ */ jsxs18(Fragment2, {
|
|
2021
2058
|
children: [
|
|
2022
2059
|
/* @__PURE__ */ jsx30(DroppableCell, {
|
|
2023
2060
|
id: `time-cell-${cellDate}-${time.format("HH")}-00`,
|
|
@@ -2103,9 +2140,10 @@ var generateRecurringEvents = ({
|
|
|
2103
2140
|
};
|
|
2104
2141
|
const rule = new RRule(ruleOptions);
|
|
2105
2142
|
const overrides = currentEvents.filter((e) => e.recurrenceId && e.uid === event.uid);
|
|
2106
|
-
const
|
|
2143
|
+
const eventDuration = event.end.diff(event.start);
|
|
2144
|
+
const expandedStartDateTime = startDate.subtract(eventDuration, "millisecond").toDate();
|
|
2107
2145
|
const endDateTime = endDate.toDate();
|
|
2108
|
-
const occurrences = rule.between(
|
|
2146
|
+
const occurrences = rule.between(expandedStartDateTime, endDateTime, true);
|
|
2109
2147
|
const recurringEvents = occurrences.map((occurrence, index) => {
|
|
2110
2148
|
const occurrenceDate = dayjs_config_default(occurrence);
|
|
2111
2149
|
const existingOverride = overrides.find((e) => safeDate(e.recurrenceId).isSame(occurrenceDate));
|
|
@@ -2127,12 +2165,15 @@ var generateRecurringEvents = ({
|
|
|
2127
2165
|
return recurringEvent;
|
|
2128
2166
|
}).filter((recurringEvent) => {
|
|
2129
2167
|
const hasExdates = event.exdates && event.exdates.length > 0;
|
|
2130
|
-
if (
|
|
2131
|
-
|
|
2168
|
+
if (hasExdates) {
|
|
2169
|
+
const eventStartISO = recurringEvent.start.toISOString();
|
|
2170
|
+
const isExcluded = event.exdates.includes(eventStartISO);
|
|
2171
|
+
if (isExcluded) {
|
|
2172
|
+
return false;
|
|
2173
|
+
}
|
|
2132
2174
|
}
|
|
2133
|
-
const
|
|
2134
|
-
|
|
2135
|
-
return !isExcluded;
|
|
2175
|
+
const eventSpansRange = recurringEvent.start.isSameOrBefore(endDate) && recurringEvent.end.isSameOrAfter(startDate);
|
|
2176
|
+
return eventSpansRange;
|
|
2136
2177
|
});
|
|
2137
2178
|
return recurringEvents;
|
|
2138
2179
|
} catch (error) {
|
|
@@ -2269,38 +2310,39 @@ var deleteRecurringEvent = ({
|
|
|
2269
2310
|
};
|
|
2270
2311
|
|
|
2271
2312
|
// src/features/recurrence/components/recurrence-editor/recurrence-editor.tsx
|
|
2272
|
-
import { useState as useState2, useEffect as useEffect2 } from "react";
|
|
2313
|
+
import { useState as useState2, useEffect as useEffect2, useMemo as useMemo6 } from "react";
|
|
2273
2314
|
import { RRule as RRule2 } from "rrule";
|
|
2274
|
-
import { jsx as jsx31, jsxs as
|
|
2275
|
-
function getRRuleDescription(rruleOptions) {
|
|
2315
|
+
import { jsx as jsx31, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2316
|
+
function getRRuleDescription(rruleOptions, t) {
|
|
2276
2317
|
if (!rruleOptions) {
|
|
2277
|
-
return "
|
|
2318
|
+
return t("customRecurrence");
|
|
2278
2319
|
}
|
|
2279
2320
|
try {
|
|
2280
2321
|
const rule = new RRule2(rruleOptions);
|
|
2281
2322
|
const naturalText = rule.toText();
|
|
2282
2323
|
if (!naturalText || naturalText.includes("RRule error") || naturalText.includes("Unable to fully convert") || naturalText.toLowerCase().includes("error")) {
|
|
2283
|
-
return "
|
|
2324
|
+
return t("customRecurrence");
|
|
2284
2325
|
}
|
|
2285
2326
|
return naturalText.charAt(0).toUpperCase() + naturalText.slice(1);
|
|
2286
2327
|
} catch {
|
|
2287
|
-
return "
|
|
2328
|
+
return t("customRecurrence");
|
|
2288
2329
|
}
|
|
2289
2330
|
}
|
|
2290
|
-
var WEEK_DAYS = [
|
|
2291
|
-
{ value: RRule2.SU, label: "Sunday", short: "Sun" },
|
|
2292
|
-
{ value: RRule2.MO, label: "Monday", short: "Mon" },
|
|
2293
|
-
{ value: RRule2.TU, label: "Tuesday", short: "Tue" },
|
|
2294
|
-
{ value: RRule2.WE, label: "Wednesday", short: "Wed" },
|
|
2295
|
-
{ value: RRule2.TH, label: "Thursday", short: "Thu" },
|
|
2296
|
-
{ value: RRule2.FR, label: "Friday", short: "Fri" },
|
|
2297
|
-
{ value: RRule2.SA, label: "Saturday", short: "Sat" }
|
|
2298
|
-
];
|
|
2299
2331
|
var RecurrenceEditor = ({
|
|
2300
2332
|
value,
|
|
2301
2333
|
onChange
|
|
2302
2334
|
}) => {
|
|
2335
|
+
const { t } = useCalendarContext();
|
|
2303
2336
|
const [showRecurrence, setShowRecurrence] = useState2(!!value);
|
|
2337
|
+
const WEEK_DAYS = useMemo6(() => [
|
|
2338
|
+
{ value: RRule2.SU, label: t("sunday"), short: t("sun") },
|
|
2339
|
+
{ value: RRule2.MO, label: t("monday"), short: t("mon") },
|
|
2340
|
+
{ value: RRule2.TU, label: t("tuesday"), short: t("tue") },
|
|
2341
|
+
{ value: RRule2.WE, label: t("wednesday"), short: t("wed") },
|
|
2342
|
+
{ value: RRule2.TH, label: t("thursday"), short: t("thu") },
|
|
2343
|
+
{ value: RRule2.FR, label: t("friday"), short: t("fri") },
|
|
2344
|
+
{ value: RRule2.SA, label: t("saturday"), short: t("sat") }
|
|
2345
|
+
], [t]);
|
|
2304
2346
|
const getFrequencyString = (freq) => {
|
|
2305
2347
|
const freqMap = {
|
|
2306
2348
|
[RRule2.DAILY]: "DAILY",
|
|
@@ -2413,13 +2455,13 @@ var RecurrenceEditor = ({
|
|
|
2413
2455
|
}
|
|
2414
2456
|
return "never";
|
|
2415
2457
|
};
|
|
2416
|
-
return /* @__PURE__ */
|
|
2458
|
+
return /* @__PURE__ */ jsxs19(Card, {
|
|
2417
2459
|
"data-testid": "recurrence-editor",
|
|
2418
2460
|
children: [
|
|
2419
|
-
/* @__PURE__ */
|
|
2461
|
+
/* @__PURE__ */ jsxs19(CardHeader, {
|
|
2420
2462
|
className: "pb-3",
|
|
2421
2463
|
children: [
|
|
2422
|
-
/* @__PURE__ */
|
|
2464
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
2423
2465
|
className: "flex items-center space-x-2",
|
|
2424
2466
|
children: [
|
|
2425
2467
|
/* @__PURE__ */ jsx31(Checkbox, {
|
|
@@ -2430,32 +2472,32 @@ var RecurrenceEditor = ({
|
|
|
2430
2472
|
}),
|
|
2431
2473
|
/* @__PURE__ */ jsx31(CardTitle, {
|
|
2432
2474
|
className: "text-sm",
|
|
2433
|
-
children: "
|
|
2475
|
+
children: t("repeat")
|
|
2434
2476
|
})
|
|
2435
2477
|
]
|
|
2436
2478
|
}),
|
|
2437
2479
|
showRecurrence && value && /* @__PURE__ */ jsx31("p", {
|
|
2438
2480
|
className: "text-xs text-muted-foreground",
|
|
2439
|
-
children: getRRuleDescription(value)
|
|
2481
|
+
children: getRRuleDescription(value, t)
|
|
2440
2482
|
})
|
|
2441
2483
|
]
|
|
2442
2484
|
}),
|
|
2443
2485
|
showRecurrence && /* @__PURE__ */ jsx31(CardContent, {
|
|
2444
2486
|
className: "pt-0",
|
|
2445
|
-
children: /* @__PURE__ */
|
|
2487
|
+
children: /* @__PURE__ */ jsxs19("div", {
|
|
2446
2488
|
className: "space-y-4",
|
|
2447
2489
|
children: [
|
|
2448
|
-
/* @__PURE__ */
|
|
2490
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
2449
2491
|
className: "grid grid-cols-2 gap-4",
|
|
2450
2492
|
children: [
|
|
2451
|
-
/* @__PURE__ */
|
|
2493
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
2452
2494
|
children: [
|
|
2453
2495
|
/* @__PURE__ */ jsx31(Label, {
|
|
2454
2496
|
htmlFor: "frequency",
|
|
2455
2497
|
className: "text-xs",
|
|
2456
|
-
children: "
|
|
2498
|
+
children: t("repeats")
|
|
2457
2499
|
}),
|
|
2458
|
-
/* @__PURE__ */
|
|
2500
|
+
/* @__PURE__ */ jsxs19(Select, {
|
|
2459
2501
|
value: getFrequencyString(rruleOptions?.freq ?? RRule2.DAILY),
|
|
2460
2502
|
onValueChange: handleFrequencyChange,
|
|
2461
2503
|
children: [
|
|
@@ -2465,23 +2507,23 @@ var RecurrenceEditor = ({
|
|
|
2465
2507
|
"data-testid": "frequency-select",
|
|
2466
2508
|
children: /* @__PURE__ */ jsx31(SelectValue, {})
|
|
2467
2509
|
}),
|
|
2468
|
-
/* @__PURE__ */
|
|
2510
|
+
/* @__PURE__ */ jsxs19(SelectContent, {
|
|
2469
2511
|
children: [
|
|
2470
2512
|
/* @__PURE__ */ jsx31(SelectItem, {
|
|
2471
2513
|
value: "DAILY",
|
|
2472
|
-
children: "
|
|
2514
|
+
children: t("daily")
|
|
2473
2515
|
}),
|
|
2474
2516
|
/* @__PURE__ */ jsx31(SelectItem, {
|
|
2475
2517
|
value: "WEEKLY",
|
|
2476
|
-
children: "
|
|
2518
|
+
children: t("weekly")
|
|
2477
2519
|
}),
|
|
2478
2520
|
/* @__PURE__ */ jsx31(SelectItem, {
|
|
2479
2521
|
value: "MONTHLY",
|
|
2480
|
-
children: "
|
|
2522
|
+
children: t("monthly")
|
|
2481
2523
|
}),
|
|
2482
2524
|
/* @__PURE__ */ jsx31(SelectItem, {
|
|
2483
2525
|
value: "YEARLY",
|
|
2484
|
-
children: "
|
|
2526
|
+
children: t("yearly")
|
|
2485
2527
|
})
|
|
2486
2528
|
]
|
|
2487
2529
|
})
|
|
@@ -2489,12 +2531,12 @@ var RecurrenceEditor = ({
|
|
|
2489
2531
|
})
|
|
2490
2532
|
]
|
|
2491
2533
|
}),
|
|
2492
|
-
/* @__PURE__ */
|
|
2534
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
2493
2535
|
children: [
|
|
2494
2536
|
/* @__PURE__ */ jsx31(Label, {
|
|
2495
2537
|
htmlFor: "interval",
|
|
2496
2538
|
className: "text-xs",
|
|
2497
|
-
children: "
|
|
2539
|
+
children: t("every")
|
|
2498
2540
|
}),
|
|
2499
2541
|
/* @__PURE__ */ jsx31(Input, {
|
|
2500
2542
|
id: "interval",
|
|
@@ -2508,18 +2550,18 @@ var RecurrenceEditor = ({
|
|
|
2508
2550
|
})
|
|
2509
2551
|
]
|
|
2510
2552
|
}),
|
|
2511
|
-
rruleOptions?.freq === RRule2.WEEKLY && /* @__PURE__ */
|
|
2553
|
+
rruleOptions?.freq === RRule2.WEEKLY && /* @__PURE__ */ jsxs19("div", {
|
|
2512
2554
|
children: [
|
|
2513
2555
|
/* @__PURE__ */ jsx31(Label, {
|
|
2514
2556
|
className: "text-xs",
|
|
2515
|
-
children: "
|
|
2557
|
+
children: t("repeatOn")
|
|
2516
2558
|
}),
|
|
2517
2559
|
/* @__PURE__ */ jsx31("div", {
|
|
2518
2560
|
className: "flex flex-wrap gap-1 mt-1",
|
|
2519
2561
|
children: WEEK_DAYS.map((day, index) => {
|
|
2520
2562
|
const byweekdayArray = Array.isArray(rruleOptions?.byweekday) ? rruleOptions.byweekday : rruleOptions?.byweekday ? [rruleOptions.byweekday] : [];
|
|
2521
2563
|
const isSelected = byweekdayArray.includes(day.value);
|
|
2522
|
-
return /* @__PURE__ */
|
|
2564
|
+
return /* @__PURE__ */ jsxs19("div", {
|
|
2523
2565
|
className: "flex items-center space-x-1",
|
|
2524
2566
|
children: [
|
|
2525
2567
|
/* @__PURE__ */ jsx31(Checkbox, {
|
|
@@ -2538,16 +2580,16 @@ var RecurrenceEditor = ({
|
|
|
2538
2580
|
})
|
|
2539
2581
|
]
|
|
2540
2582
|
}),
|
|
2541
|
-
/* @__PURE__ */
|
|
2583
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
2542
2584
|
children: [
|
|
2543
2585
|
/* @__PURE__ */ jsx31(Label, {
|
|
2544
2586
|
className: "text-xs",
|
|
2545
|
-
children: "
|
|
2587
|
+
children: t("ends")
|
|
2546
2588
|
}),
|
|
2547
|
-
/* @__PURE__ */
|
|
2589
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
2548
2590
|
className: "space-y-2 mt-1",
|
|
2549
2591
|
children: [
|
|
2550
|
-
/* @__PURE__ */
|
|
2592
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
2551
2593
|
className: "flex items-center space-x-2",
|
|
2552
2594
|
children: [
|
|
2553
2595
|
/* @__PURE__ */ jsx31(Checkbox, {
|
|
@@ -2558,11 +2600,11 @@ var RecurrenceEditor = ({
|
|
|
2558
2600
|
/* @__PURE__ */ jsx31(Label, {
|
|
2559
2601
|
htmlFor: "never",
|
|
2560
2602
|
className: "text-xs",
|
|
2561
|
-
children: "
|
|
2603
|
+
children: t("never")
|
|
2562
2604
|
})
|
|
2563
2605
|
]
|
|
2564
2606
|
}),
|
|
2565
|
-
/* @__PURE__ */
|
|
2607
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
2566
2608
|
className: "flex items-center space-x-2",
|
|
2567
2609
|
children: [
|
|
2568
2610
|
/* @__PURE__ */ jsx31(Checkbox, {
|
|
@@ -2573,7 +2615,7 @@ var RecurrenceEditor = ({
|
|
|
2573
2615
|
/* @__PURE__ */ jsx31(Label, {
|
|
2574
2616
|
htmlFor: "after",
|
|
2575
2617
|
className: "text-xs",
|
|
2576
|
-
children: "
|
|
2618
|
+
children: t("after")
|
|
2577
2619
|
}),
|
|
2578
2620
|
getEndType() === "count" && /* @__PURE__ */ jsx31(Input, {
|
|
2579
2621
|
type: "number",
|
|
@@ -2585,11 +2627,11 @@ var RecurrenceEditor = ({
|
|
|
2585
2627
|
}),
|
|
2586
2628
|
/* @__PURE__ */ jsx31("span", {
|
|
2587
2629
|
className: "text-xs",
|
|
2588
|
-
children: "occurrences"
|
|
2630
|
+
children: t("occurrences")
|
|
2589
2631
|
})
|
|
2590
2632
|
]
|
|
2591
2633
|
}),
|
|
2592
|
-
/* @__PURE__ */
|
|
2634
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
2593
2635
|
className: "flex items-center space-x-2",
|
|
2594
2636
|
children: [
|
|
2595
2637
|
/* @__PURE__ */ jsx31(Checkbox, {
|
|
@@ -2600,7 +2642,7 @@ var RecurrenceEditor = ({
|
|
|
2600
2642
|
/* @__PURE__ */ jsx31(Label, {
|
|
2601
2643
|
htmlFor: "on",
|
|
2602
2644
|
className: "text-xs",
|
|
2603
|
-
children: "
|
|
2645
|
+
children: t("on")
|
|
2604
2646
|
}),
|
|
2605
2647
|
getEndType() === "until" && /* @__PURE__ */ jsx31(DatePicker, {
|
|
2606
2648
|
date: rruleOptions?.until,
|
|
@@ -2621,7 +2663,7 @@ var RecurrenceEditor = ({
|
|
|
2621
2663
|
};
|
|
2622
2664
|
|
|
2623
2665
|
// src/features/recurrence/components/recurrence-edit-dialog/recurrence-edit-dialog.tsx
|
|
2624
|
-
import { jsx as jsx32, jsxs as
|
|
2666
|
+
import { jsx as jsx32, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2625
2667
|
function RecurrenceEditDialog({
|
|
2626
2668
|
isOpen,
|
|
2627
2669
|
onClose,
|
|
@@ -2629,59 +2671,51 @@ function RecurrenceEditDialog({
|
|
|
2629
2671
|
operationType,
|
|
2630
2672
|
eventTitle
|
|
2631
2673
|
}) {
|
|
2674
|
+
const { t } = useCalendarContext();
|
|
2632
2675
|
const handleScopeSelect = (scope) => {
|
|
2633
2676
|
onConfirm(scope);
|
|
2634
2677
|
onClose();
|
|
2635
2678
|
};
|
|
2636
|
-
const
|
|
2637
|
-
const actionVerb = operationType === "edit" ? "Edit" : "Delete";
|
|
2679
|
+
const isEdit = operationType === "edit";
|
|
2638
2680
|
return /* @__PURE__ */ jsx32(Dialog, {
|
|
2639
2681
|
open: isOpen,
|
|
2640
2682
|
onOpenChange: onClose,
|
|
2641
|
-
children: /* @__PURE__ */
|
|
2683
|
+
children: /* @__PURE__ */ jsxs20(DialogContent, {
|
|
2642
2684
|
className: "max-w-md",
|
|
2643
2685
|
children: [
|
|
2644
|
-
/* @__PURE__ */
|
|
2686
|
+
/* @__PURE__ */ jsxs20(DialogHeader, {
|
|
2645
2687
|
children: [
|
|
2646
|
-
/* @__PURE__ */
|
|
2647
|
-
children:
|
|
2648
|
-
actionVerb,
|
|
2649
|
-
" recurring event"
|
|
2650
|
-
]
|
|
2688
|
+
/* @__PURE__ */ jsx32(DialogTitle, {
|
|
2689
|
+
children: isEdit ? t("editRecurringEvent") : t("deleteRecurringEvent")
|
|
2651
2690
|
}),
|
|
2652
|
-
/* @__PURE__ */
|
|
2691
|
+
/* @__PURE__ */ jsxs20(DialogDescription, {
|
|
2653
2692
|
children: [
|
|
2654
2693
|
'"',
|
|
2655
2694
|
eventTitle,
|
|
2656
|
-
'"
|
|
2695
|
+
'"',
|
|
2657
2696
|
" ",
|
|
2658
|
-
|
|
2659
|
-
" it?"
|
|
2697
|
+
isEdit ? t("editRecurringEventQuestion") : t("deleteRecurringEventQuestion")
|
|
2660
2698
|
]
|
|
2661
2699
|
})
|
|
2662
2700
|
]
|
|
2663
2701
|
}),
|
|
2664
|
-
/* @__PURE__ */
|
|
2702
|
+
/* @__PURE__ */ jsxs20("div", {
|
|
2665
2703
|
className: "space-y-3",
|
|
2666
2704
|
children: [
|
|
2667
2705
|
/* @__PURE__ */ jsx32(Button, {
|
|
2668
2706
|
variant: "outline",
|
|
2669
2707
|
className: "w-full justify-start h-auto p-4",
|
|
2670
2708
|
onClick: () => handleScopeSelect("this"),
|
|
2671
|
-
children: /* @__PURE__ */
|
|
2709
|
+
children: /* @__PURE__ */ jsxs20("div", {
|
|
2672
2710
|
className: "text-left",
|
|
2673
2711
|
children: [
|
|
2674
2712
|
/* @__PURE__ */ jsx32("div", {
|
|
2675
2713
|
className: "font-medium",
|
|
2676
|
-
children: "
|
|
2714
|
+
children: t("thisEvent")
|
|
2677
2715
|
}),
|
|
2678
|
-
/* @__PURE__ */
|
|
2716
|
+
/* @__PURE__ */ jsx32("div", {
|
|
2679
2717
|
className: "text-sm text-muted-foreground",
|
|
2680
|
-
children:
|
|
2681
|
-
"Only ",
|
|
2682
|
-
actionText,
|
|
2683
|
-
" this specific occurrence"
|
|
2684
|
-
]
|
|
2718
|
+
children: isEdit ? t("onlyChangeThis") : t("onlyDeleteThis")
|
|
2685
2719
|
})
|
|
2686
2720
|
]
|
|
2687
2721
|
})
|
|
@@ -2690,19 +2724,16 @@ function RecurrenceEditDialog({
|
|
|
2690
2724
|
variant: "outline",
|
|
2691
2725
|
className: "w-full justify-start h-auto p-4",
|
|
2692
2726
|
onClick: () => handleScopeSelect("following"),
|
|
2693
|
-
children: /* @__PURE__ */
|
|
2727
|
+
children: /* @__PURE__ */ jsxs20("div", {
|
|
2694
2728
|
className: "text-left",
|
|
2695
2729
|
children: [
|
|
2696
2730
|
/* @__PURE__ */ jsx32("div", {
|
|
2697
2731
|
className: "font-medium",
|
|
2698
|
-
children: "
|
|
2732
|
+
children: t("thisAndFollowingEvents")
|
|
2699
2733
|
}),
|
|
2700
|
-
/* @__PURE__ */
|
|
2734
|
+
/* @__PURE__ */ jsx32("div", {
|
|
2701
2735
|
className: "text-sm text-muted-foreground",
|
|
2702
|
-
children:
|
|
2703
|
-
actionVerb,
|
|
2704
|
-
" this and all future occurrences"
|
|
2705
|
-
]
|
|
2736
|
+
children: isEdit ? t("changeThisAndFuture") : t("deleteThisAndFuture")
|
|
2706
2737
|
})
|
|
2707
2738
|
]
|
|
2708
2739
|
})
|
|
@@ -2711,19 +2742,16 @@ function RecurrenceEditDialog({
|
|
|
2711
2742
|
variant: "outline",
|
|
2712
2743
|
className: "w-full justify-start h-auto p-4",
|
|
2713
2744
|
onClick: () => handleScopeSelect("all"),
|
|
2714
|
-
children: /* @__PURE__ */
|
|
2745
|
+
children: /* @__PURE__ */ jsxs20("div", {
|
|
2715
2746
|
className: "text-left",
|
|
2716
2747
|
children: [
|
|
2717
2748
|
/* @__PURE__ */ jsx32("div", {
|
|
2718
2749
|
className: "font-medium",
|
|
2719
|
-
children: "
|
|
2750
|
+
children: t("allEvents")
|
|
2720
2751
|
}),
|
|
2721
|
-
/* @__PURE__ */
|
|
2752
|
+
/* @__PURE__ */ jsx32("div", {
|
|
2722
2753
|
className: "text-sm text-muted-foreground",
|
|
2723
|
-
children:
|
|
2724
|
-
actionVerb,
|
|
2725
|
-
" the entire recurring series"
|
|
2726
|
-
]
|
|
2754
|
+
children: isEdit ? t("changeEntireSeries") : t("deleteEntireSeries")
|
|
2727
2755
|
})
|
|
2728
2756
|
]
|
|
2729
2757
|
})
|
|
@@ -2734,7 +2762,7 @@ function RecurrenceEditDialog({
|
|
|
2734
2762
|
children: /* @__PURE__ */ jsx32(Button, {
|
|
2735
2763
|
variant: "outline",
|
|
2736
2764
|
onClick: onClose,
|
|
2737
|
-
children: "
|
|
2765
|
+
children: t("cancel")
|
|
2738
2766
|
})
|
|
2739
2767
|
})
|
|
2740
2768
|
]
|
|
@@ -2801,7 +2829,7 @@ function useRecurringEventActions(onComplete) {
|
|
|
2801
2829
|
}
|
|
2802
2830
|
|
|
2803
2831
|
// src/components/event-form/event-form.tsx
|
|
2804
|
-
import { jsx as jsx33, jsxs as
|
|
2832
|
+
import { jsx as jsx33, jsxs as jsxs21, Fragment as Fragment3 } from "react/jsx-runtime";
|
|
2805
2833
|
var colorOptions = [
|
|
2806
2834
|
{ value: "bg-blue-100 text-blue-800", label: "Blue" },
|
|
2807
2835
|
{ value: "bg-green-100 text-green-800", label: "Green" },
|
|
@@ -2833,7 +2861,7 @@ var EventForm = ({
|
|
|
2833
2861
|
closeDialog,
|
|
2834
2862
|
handleConfirm
|
|
2835
2863
|
} = useRecurringEventActions(onClose);
|
|
2836
|
-
const { findParentRecurringEvent } = useCalendarContext();
|
|
2864
|
+
const { findParentRecurringEvent, t } = useCalendarContext();
|
|
2837
2865
|
const start = selectedEvent?.start;
|
|
2838
2866
|
const end = selectedEvent?.end;
|
|
2839
2867
|
const parentEvent = selectedEvent ? findParentRecurringEvent(selectedEvent) : null;
|
|
@@ -2953,70 +2981,70 @@ var EventForm = ({
|
|
|
2953
2981
|
setEndDate(startDate);
|
|
2954
2982
|
}
|
|
2955
2983
|
}, [startDate, endDate]);
|
|
2956
|
-
return /* @__PURE__ */
|
|
2984
|
+
return /* @__PURE__ */ jsxs21(Fragment3, {
|
|
2957
2985
|
children: [
|
|
2958
2986
|
/* @__PURE__ */ jsx33(Dialog, {
|
|
2959
2987
|
open: true,
|
|
2960
2988
|
onOpenChange: onClose,
|
|
2961
2989
|
children: /* @__PURE__ */ jsx33(DialogContent, {
|
|
2962
2990
|
className: "w-[90vw] max-w-[500px] p-4 sm:p-6",
|
|
2963
|
-
children: /* @__PURE__ */
|
|
2991
|
+
children: /* @__PURE__ */ jsxs21("form", {
|
|
2964
2992
|
onSubmit: handleSubmit,
|
|
2965
2993
|
children: [
|
|
2966
|
-
/* @__PURE__ */
|
|
2994
|
+
/* @__PURE__ */ jsxs21(DialogHeader, {
|
|
2967
2995
|
className: "mb-2 sm:mb-4",
|
|
2968
2996
|
children: [
|
|
2969
2997
|
/* @__PURE__ */ jsx33(DialogTitle, {
|
|
2970
2998
|
className: "text-base sm:text-lg",
|
|
2971
|
-
children: selectedEvent?.id ? "
|
|
2999
|
+
children: selectedEvent?.id ? t("editEvent") : t("createEvent")
|
|
2972
3000
|
}),
|
|
2973
3001
|
/* @__PURE__ */ jsx33(DialogDescription, {
|
|
2974
3002
|
className: "text-xs sm:text-sm",
|
|
2975
|
-
children: selectedEvent?.id ? "
|
|
3003
|
+
children: selectedEvent?.id ? t("editEventDetails") : t("addNewEvent")
|
|
2976
3004
|
})
|
|
2977
3005
|
]
|
|
2978
3006
|
}),
|
|
2979
|
-
/* @__PURE__ */
|
|
3007
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
2980
3008
|
className: "grid gap-3 py-2 sm:gap-4 sm:py-4",
|
|
2981
3009
|
children: [
|
|
2982
|
-
/* @__PURE__ */
|
|
3010
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
2983
3011
|
className: "grid gap-2",
|
|
2984
3012
|
children: [
|
|
2985
3013
|
/* @__PURE__ */ jsx33(Label, {
|
|
2986
3014
|
htmlFor: "title",
|
|
2987
3015
|
className: "text-xs sm:text-sm",
|
|
2988
|
-
children: "
|
|
3016
|
+
children: t("title")
|
|
2989
3017
|
}),
|
|
2990
3018
|
/* @__PURE__ */ jsx33(Input, {
|
|
2991
3019
|
id: "title",
|
|
2992
3020
|
name: "title",
|
|
2993
3021
|
value: formValues.title,
|
|
2994
3022
|
onChange: handleInputChange,
|
|
2995
|
-
placeholder: "
|
|
3023
|
+
placeholder: t("eventTitlePlaceholder"),
|
|
2996
3024
|
required: true,
|
|
2997
3025
|
className: "h-8 text-sm sm:h-9"
|
|
2998
3026
|
})
|
|
2999
3027
|
]
|
|
3000
3028
|
}),
|
|
3001
|
-
/* @__PURE__ */
|
|
3029
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3002
3030
|
className: "grid gap-1 sm:gap-2",
|
|
3003
3031
|
children: [
|
|
3004
3032
|
/* @__PURE__ */ jsx33(Label, {
|
|
3005
3033
|
htmlFor: "description",
|
|
3006
3034
|
className: "text-xs sm:text-sm",
|
|
3007
|
-
children: "
|
|
3035
|
+
children: t("description")
|
|
3008
3036
|
}),
|
|
3009
3037
|
/* @__PURE__ */ jsx33(Input, {
|
|
3010
3038
|
id: "description",
|
|
3011
3039
|
name: "description",
|
|
3012
3040
|
value: formValues.description,
|
|
3013
3041
|
onChange: handleInputChange,
|
|
3014
|
-
placeholder: "
|
|
3042
|
+
placeholder: t("eventDescriptionPlaceholder"),
|
|
3015
3043
|
className: "h-8 text-sm sm:h-9"
|
|
3016
3044
|
})
|
|
3017
3045
|
]
|
|
3018
3046
|
}),
|
|
3019
|
-
/* @__PURE__ */
|
|
3047
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3020
3048
|
className: "flex items-center space-x-2",
|
|
3021
3049
|
children: [
|
|
3022
3050
|
/* @__PURE__ */ jsx33(Checkbox, {
|
|
@@ -3027,18 +3055,18 @@ var EventForm = ({
|
|
|
3027
3055
|
/* @__PURE__ */ jsx33(Label, {
|
|
3028
3056
|
htmlFor: "allDay",
|
|
3029
3057
|
className: "text-xs sm:text-sm",
|
|
3030
|
-
children: "
|
|
3058
|
+
children: t("allDay")
|
|
3031
3059
|
})
|
|
3032
3060
|
]
|
|
3033
3061
|
}),
|
|
3034
|
-
/* @__PURE__ */
|
|
3062
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3035
3063
|
className: "grid grid-cols-2 gap-2 sm:gap-4",
|
|
3036
3064
|
children: [
|
|
3037
|
-
/* @__PURE__ */
|
|
3065
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3038
3066
|
children: [
|
|
3039
3067
|
/* @__PURE__ */ jsx33(Label, {
|
|
3040
3068
|
className: "text-xs sm:text-sm",
|
|
3041
|
-
children: "
|
|
3069
|
+
children: t("startDate")
|
|
3042
3070
|
}),
|
|
3043
3071
|
/* @__PURE__ */ jsx33(DatePicker, {
|
|
3044
3072
|
date: startDate,
|
|
@@ -3048,11 +3076,11 @@ var EventForm = ({
|
|
|
3048
3076
|
})
|
|
3049
3077
|
]
|
|
3050
3078
|
}),
|
|
3051
|
-
/* @__PURE__ */
|
|
3079
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3052
3080
|
children: [
|
|
3053
3081
|
/* @__PURE__ */ jsx33(Label, {
|
|
3054
3082
|
className: "text-xs sm:text-sm",
|
|
3055
|
-
children: "
|
|
3083
|
+
children: t("endDate")
|
|
3056
3084
|
}),
|
|
3057
3085
|
/* @__PURE__ */ jsx33(DatePicker, {
|
|
3058
3086
|
date: endDate,
|
|
@@ -3064,15 +3092,15 @@ var EventForm = ({
|
|
|
3064
3092
|
})
|
|
3065
3093
|
]
|
|
3066
3094
|
}),
|
|
3067
|
-
!isAllDay && /* @__PURE__ */
|
|
3095
|
+
!isAllDay && /* @__PURE__ */ jsxs21("div", {
|
|
3068
3096
|
className: "grid grid-cols-2 gap-2 sm:gap-4",
|
|
3069
3097
|
children: [
|
|
3070
|
-
/* @__PURE__ */
|
|
3098
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3071
3099
|
children: [
|
|
3072
3100
|
/* @__PURE__ */ jsx33(Label, {
|
|
3073
3101
|
htmlFor: "start-time",
|
|
3074
3102
|
className: "text-xs sm:text-sm",
|
|
3075
|
-
children: "
|
|
3103
|
+
children: t("startTime")
|
|
3076
3104
|
}),
|
|
3077
3105
|
/* @__PURE__ */ jsx33(Input, {
|
|
3078
3106
|
id: "start-time",
|
|
@@ -3083,12 +3111,12 @@ var EventForm = ({
|
|
|
3083
3111
|
})
|
|
3084
3112
|
]
|
|
3085
3113
|
}),
|
|
3086
|
-
/* @__PURE__ */
|
|
3114
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3087
3115
|
children: [
|
|
3088
3116
|
/* @__PURE__ */ jsx33(Label, {
|
|
3089
3117
|
htmlFor: "end-time",
|
|
3090
3118
|
className: "text-xs sm:text-sm",
|
|
3091
|
-
children: "
|
|
3119
|
+
children: t("endTime")
|
|
3092
3120
|
}),
|
|
3093
3121
|
/* @__PURE__ */ jsx33(Input, {
|
|
3094
3122
|
id: "end-time",
|
|
@@ -3101,17 +3129,17 @@ var EventForm = ({
|
|
|
3101
3129
|
})
|
|
3102
3130
|
]
|
|
3103
3131
|
}),
|
|
3104
|
-
/* @__PURE__ */
|
|
3132
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3105
3133
|
className: "grid gap-1 sm:gap-2",
|
|
3106
3134
|
children: [
|
|
3107
3135
|
/* @__PURE__ */ jsx33(Label, {
|
|
3108
3136
|
className: "text-xs sm:text-sm",
|
|
3109
|
-
children: "
|
|
3137
|
+
children: t("color")
|
|
3110
3138
|
}),
|
|
3111
3139
|
/* @__PURE__ */ jsx33("div", {
|
|
3112
3140
|
className: "flex flex-wrap gap-2",
|
|
3113
3141
|
children: /* @__PURE__ */ jsx33(TooltipProvider, {
|
|
3114
|
-
children: colorOptions.map((color) => /* @__PURE__ */
|
|
3142
|
+
children: colorOptions.map((color) => /* @__PURE__ */ jsxs21(Tooltip, {
|
|
3115
3143
|
children: [
|
|
3116
3144
|
/* @__PURE__ */ jsx33(TooltipTrigger, {
|
|
3117
3145
|
asChild: true,
|
|
@@ -3135,20 +3163,20 @@ var EventForm = ({
|
|
|
3135
3163
|
})
|
|
3136
3164
|
]
|
|
3137
3165
|
}),
|
|
3138
|
-
/* @__PURE__ */
|
|
3166
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3139
3167
|
className: "grid gap-1 sm:gap-2",
|
|
3140
3168
|
children: [
|
|
3141
3169
|
/* @__PURE__ */ jsx33(Label, {
|
|
3142
3170
|
htmlFor: "location",
|
|
3143
3171
|
className: "text-xs sm:text-sm",
|
|
3144
|
-
children: "
|
|
3172
|
+
children: t("location")
|
|
3145
3173
|
}),
|
|
3146
3174
|
/* @__PURE__ */ jsx33(Input, {
|
|
3147
3175
|
id: "location",
|
|
3148
3176
|
name: "location",
|
|
3149
3177
|
value: formValues.location,
|
|
3150
3178
|
onChange: handleInputChange,
|
|
3151
|
-
placeholder: "
|
|
3179
|
+
placeholder: t("eventLocationPlaceholder"),
|
|
3152
3180
|
className: "h-8 text-sm sm:h-9"
|
|
3153
3181
|
})
|
|
3154
3182
|
]
|
|
@@ -3159,7 +3187,7 @@ var EventForm = ({
|
|
|
3159
3187
|
})
|
|
3160
3188
|
]
|
|
3161
3189
|
}),
|
|
3162
|
-
/* @__PURE__ */
|
|
3190
|
+
/* @__PURE__ */ jsxs21(DialogFooter, {
|
|
3163
3191
|
className: "mt-2 flex flex-col-reverse gap-2 sm:mt-4 sm:flex-row sm:gap-0",
|
|
3164
3192
|
children: [
|
|
3165
3193
|
selectedEvent?.id && /* @__PURE__ */ jsx33(Button, {
|
|
@@ -3168,9 +3196,9 @@ var EventForm = ({
|
|
|
3168
3196
|
onClick: handleDelete,
|
|
3169
3197
|
className: "w-full sm:mr-auto sm:w-auto",
|
|
3170
3198
|
size: "sm",
|
|
3171
|
-
children: "
|
|
3199
|
+
children: t("delete")
|
|
3172
3200
|
}),
|
|
3173
|
-
/* @__PURE__ */
|
|
3201
|
+
/* @__PURE__ */ jsxs21("div", {
|
|
3174
3202
|
className: "flex w-full gap-2 sm:w-auto",
|
|
3175
3203
|
children: [
|
|
3176
3204
|
/* @__PURE__ */ jsx33(Button, {
|
|
@@ -3179,13 +3207,13 @@ var EventForm = ({
|
|
|
3179
3207
|
onClick: onClose,
|
|
3180
3208
|
className: "flex-1 sm:flex-none",
|
|
3181
3209
|
size: "sm",
|
|
3182
|
-
children: "
|
|
3210
|
+
children: t("cancel")
|
|
3183
3211
|
}),
|
|
3184
3212
|
/* @__PURE__ */ jsx33(Button, {
|
|
3185
3213
|
type: "submit",
|
|
3186
3214
|
className: "flex-1 sm:flex-none",
|
|
3187
3215
|
size: "sm",
|
|
3188
|
-
children: selectedEvent?.id ? "
|
|
3216
|
+
children: selectedEvent?.id ? t("update") : t("create")
|
|
3189
3217
|
})
|
|
3190
3218
|
]
|
|
3191
3219
|
})
|
|
@@ -3354,29 +3382,29 @@ import { useCallback as useCallback2, useState as useState6 } from "react";
|
|
|
3354
3382
|
// src/components/header/title-content.tsx
|
|
3355
3383
|
import { AnimatePresence as AnimatePresence6, motion as motion6 } from "motion/react";
|
|
3356
3384
|
import { ChevronDown } from "lucide-react";
|
|
3357
|
-
import { useState as useState5 } from "react";
|
|
3358
|
-
import { jsx as jsx34, jsxs as
|
|
3359
|
-
var months = [
|
|
3360
|
-
"January",
|
|
3361
|
-
"February",
|
|
3362
|
-
"March",
|
|
3363
|
-
"April",
|
|
3364
|
-
"May",
|
|
3365
|
-
"June",
|
|
3366
|
-
"July",
|
|
3367
|
-
"August",
|
|
3368
|
-
"September",
|
|
3369
|
-
"October",
|
|
3370
|
-
"November",
|
|
3371
|
-
"December"
|
|
3372
|
-
];
|
|
3385
|
+
import { useMemo as useMemo7, useState as useState5 } from "react";
|
|
3386
|
+
import { jsx as jsx34, jsxs as jsxs22, Fragment as Fragment4 } from "react/jsx-runtime";
|
|
3373
3387
|
var animationVariants = {
|
|
3374
3388
|
initial: { opacity: 0, y: 10 },
|
|
3375
3389
|
animate: { opacity: 1, y: 0 },
|
|
3376
3390
|
exit: { opacity: 0, y: -10 }
|
|
3377
3391
|
};
|
|
3378
3392
|
var TitleContent = () => {
|
|
3379
|
-
const { currentDate, view, setCurrentDate } = useCalendarContext();
|
|
3393
|
+
const { currentDate, view, setCurrentDate, t } = useCalendarContext();
|
|
3394
|
+
const months = useMemo7(() => [
|
|
3395
|
+
t("january"),
|
|
3396
|
+
t("february"),
|
|
3397
|
+
t("march"),
|
|
3398
|
+
t("april"),
|
|
3399
|
+
t("may"),
|
|
3400
|
+
t("june"),
|
|
3401
|
+
t("july"),
|
|
3402
|
+
t("august"),
|
|
3403
|
+
t("september"),
|
|
3404
|
+
t("october"),
|
|
3405
|
+
t("november"),
|
|
3406
|
+
t("december")
|
|
3407
|
+
], [t]);
|
|
3380
3408
|
const [monthPopoverOpen, setMonthPopoverOpen] = useState5(false);
|
|
3381
3409
|
const [yearPopoverOpen, setYearPopoverOpen] = useState5(false);
|
|
3382
3410
|
const [weekPopoverOpen, setWeekPopoverOpen] = useState5(false);
|
|
@@ -3393,15 +3421,15 @@ var TitleContent = () => {
|
|
|
3393
3421
|
setCurrentDate(newDate);
|
|
3394
3422
|
setYearPopoverOpen(false);
|
|
3395
3423
|
};
|
|
3396
|
-
return /* @__PURE__ */
|
|
3424
|
+
return /* @__PURE__ */ jsxs22(Fragment4, {
|
|
3397
3425
|
children: [
|
|
3398
|
-
view !== "year" && /* @__PURE__ */
|
|
3426
|
+
view !== "year" && /* @__PURE__ */ jsxs22(Popover, {
|
|
3399
3427
|
open: monthPopoverOpen,
|
|
3400
3428
|
onOpenChange: setMonthPopoverOpen,
|
|
3401
3429
|
children: [
|
|
3402
3430
|
/* @__PURE__ */ jsx34(PopoverTrigger, {
|
|
3403
3431
|
asChild: true,
|
|
3404
|
-
children: /* @__PURE__ */
|
|
3432
|
+
children: /* @__PURE__ */ jsxs22(Button, {
|
|
3405
3433
|
variant: "ghost",
|
|
3406
3434
|
className: "flex items-center gap-1 px-1! font-semibold",
|
|
3407
3435
|
children: [
|
|
@@ -3436,13 +3464,13 @@ var TitleContent = () => {
|
|
|
3436
3464
|
})
|
|
3437
3465
|
]
|
|
3438
3466
|
}),
|
|
3439
|
-
/* @__PURE__ */
|
|
3467
|
+
/* @__PURE__ */ jsxs22(Popover, {
|
|
3440
3468
|
open: yearPopoverOpen,
|
|
3441
3469
|
onOpenChange: setYearPopoverOpen,
|
|
3442
3470
|
children: [
|
|
3443
3471
|
/* @__PURE__ */ jsx34(PopoverTrigger, {
|
|
3444
3472
|
asChild: true,
|
|
3445
|
-
children: /* @__PURE__ */
|
|
3473
|
+
children: /* @__PURE__ */ jsxs22(Button, {
|
|
3446
3474
|
variant: "ghost",
|
|
3447
3475
|
className: "flex items-center gap-1 px-1! font-semibold",
|
|
3448
3476
|
children: [
|
|
@@ -3477,13 +3505,13 @@ var TitleContent = () => {
|
|
|
3477
3505
|
})
|
|
3478
3506
|
]
|
|
3479
3507
|
}),
|
|
3480
|
-
view === "week" && /* @__PURE__ */
|
|
3508
|
+
view === "week" && /* @__PURE__ */ jsxs22(Popover, {
|
|
3481
3509
|
open: weekPopoverOpen,
|
|
3482
3510
|
onOpenChange: setWeekPopoverOpen,
|
|
3483
3511
|
children: [
|
|
3484
3512
|
/* @__PURE__ */ jsx34(PopoverTrigger, {
|
|
3485
3513
|
asChild: true,
|
|
3486
|
-
children: /* @__PURE__ */
|
|
3514
|
+
children: /* @__PURE__ */ jsxs22(Button, {
|
|
3487
3515
|
variant: "ghost",
|
|
3488
3516
|
className: "flex items-center gap-1 px-1! font-semibold",
|
|
3489
3517
|
children: [
|
|
@@ -3520,7 +3548,7 @@ var TitleContent = () => {
|
|
|
3520
3548
|
setCurrentDate(startOfWeek);
|
|
3521
3549
|
setWeekPopoverOpen(false);
|
|
3522
3550
|
},
|
|
3523
|
-
children: /* @__PURE__ */
|
|
3551
|
+
children: /* @__PURE__ */ jsxs22("div", {
|
|
3524
3552
|
className: "flex w-full items-center justify-between",
|
|
3525
3553
|
children: [
|
|
3526
3554
|
/* @__PURE__ */ jsx34("span", {
|
|
@@ -3538,13 +3566,13 @@ var TitleContent = () => {
|
|
|
3538
3566
|
})
|
|
3539
3567
|
]
|
|
3540
3568
|
}),
|
|
3541
|
-
view === "day" && /* @__PURE__ */
|
|
3569
|
+
view === "day" && /* @__PURE__ */ jsxs22(Popover, {
|
|
3542
3570
|
open: dayPopoverOpen,
|
|
3543
3571
|
onOpenChange: setDayPopoverOpen,
|
|
3544
3572
|
children: [
|
|
3545
3573
|
/* @__PURE__ */ jsx34(PopoverTrigger, {
|
|
3546
3574
|
asChild: true,
|
|
3547
|
-
children: /* @__PURE__ */
|
|
3575
|
+
children: /* @__PURE__ */ jsxs22(Button, {
|
|
3548
3576
|
variant: "ghost",
|
|
3549
3577
|
className: "flex items-center gap-1 px-1! font-semibold",
|
|
3550
3578
|
children: [
|
|
@@ -3583,7 +3611,7 @@ var TitleContent = () => {
|
|
|
3583
3611
|
setCurrentDate(dayDate);
|
|
3584
3612
|
setDayPopoverOpen(false);
|
|
3585
3613
|
},
|
|
3586
|
-
children: /* @__PURE__ */
|
|
3614
|
+
children: /* @__PURE__ */ jsxs22("div", {
|
|
3587
3615
|
className: "flex w-full items-center justify-between",
|
|
3588
3616
|
children: [
|
|
3589
3617
|
/* @__PURE__ */ jsx34("span", {
|
|
@@ -3591,7 +3619,7 @@ var TitleContent = () => {
|
|
|
3591
3619
|
}),
|
|
3592
3620
|
isToday && /* @__PURE__ */ jsx34("span", {
|
|
3593
3621
|
className: "bg-primary text-primary-foreground rounded-sm px-1! text-xs",
|
|
3594
|
-
children: "
|
|
3622
|
+
children: t("today")
|
|
3595
3623
|
})
|
|
3596
3624
|
]
|
|
3597
3625
|
})
|
|
@@ -3609,7 +3637,7 @@ var title_content_default = TitleContent;
|
|
|
3609
3637
|
|
|
3610
3638
|
// src/components/header/view-controls.tsx
|
|
3611
3639
|
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
3612
|
-
import { jsx as jsx35, jsxs as
|
|
3640
|
+
import { jsx as jsx35, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
3613
3641
|
var ViewControls = ({
|
|
3614
3642
|
currentView,
|
|
3615
3643
|
onChange,
|
|
@@ -3620,14 +3648,15 @@ var ViewControls = ({
|
|
|
3620
3648
|
onNext,
|
|
3621
3649
|
onPrevious
|
|
3622
3650
|
}) => {
|
|
3651
|
+
const { t } = useCalendarContext();
|
|
3623
3652
|
const isGrid = variant === "grid";
|
|
3624
3653
|
const getButtonClassName = (viewType) => {
|
|
3625
|
-
return cn(isGrid ? "w-full" : "",
|
|
3654
|
+
return cn(isGrid ? "w-full" : "", currentView === viewType && "bg-primary/80");
|
|
3626
3655
|
};
|
|
3627
3656
|
const getBtnVariant = (viewType) => {
|
|
3628
3657
|
return currentView === viewType ? "default" : "outline";
|
|
3629
3658
|
};
|
|
3630
|
-
return /* @__PURE__ */
|
|
3659
|
+
return /* @__PURE__ */ jsxs23("div", {
|
|
3631
3660
|
className: cn(isGrid ? "grid grid-cols-2 gap-2" : "flex gap-1", className),
|
|
3632
3661
|
children: [
|
|
3633
3662
|
/* @__PURE__ */ jsx35(Button, {
|
|
@@ -3651,41 +3680,41 @@ var ViewControls = ({
|
|
|
3651
3680
|
variant: getBtnVariant("day"),
|
|
3652
3681
|
size,
|
|
3653
3682
|
className: getButtonClassName("day"),
|
|
3654
|
-
children: "
|
|
3683
|
+
children: t("day")
|
|
3655
3684
|
}),
|
|
3656
3685
|
/* @__PURE__ */ jsx35(Button, {
|
|
3657
3686
|
onClick: () => onChange("week"),
|
|
3658
3687
|
variant: getBtnVariant("week"),
|
|
3659
3688
|
size,
|
|
3660
3689
|
className: getButtonClassName("week"),
|
|
3661
|
-
children: "
|
|
3690
|
+
children: t("week")
|
|
3662
3691
|
}),
|
|
3663
3692
|
/* @__PURE__ */ jsx35(Button, {
|
|
3664
3693
|
onClick: () => onChange("month"),
|
|
3665
3694
|
variant: getBtnVariant("month"),
|
|
3666
3695
|
size,
|
|
3667
3696
|
className: getButtonClassName("month"),
|
|
3668
|
-
children: "
|
|
3697
|
+
children: t("month")
|
|
3669
3698
|
}),
|
|
3670
3699
|
/* @__PURE__ */ jsx35(Button, {
|
|
3671
3700
|
onClick: () => onChange("year"),
|
|
3672
3701
|
variant: getBtnVariant("year"),
|
|
3673
3702
|
size,
|
|
3674
3703
|
className: getButtonClassName("year"),
|
|
3675
|
-
children: "
|
|
3704
|
+
children: t("year")
|
|
3676
3705
|
}),
|
|
3677
3706
|
/* @__PURE__ */ jsx35(Button, {
|
|
3678
3707
|
onClick: onToday,
|
|
3679
3708
|
variant: "outline",
|
|
3680
3709
|
size,
|
|
3681
|
-
children: "
|
|
3710
|
+
children: t("today")
|
|
3682
3711
|
})
|
|
3683
3712
|
]
|
|
3684
3713
|
});
|
|
3685
3714
|
};
|
|
3686
3715
|
var view_controls_default = ViewControls;
|
|
3687
3716
|
// src/components/header/base-header.tsx
|
|
3688
|
-
import { jsx as jsx36, jsxs as
|
|
3717
|
+
import { jsx as jsx36, jsxs as jsxs24, Fragment as Fragment5 } from "react/jsx-runtime";
|
|
3689
3718
|
var Header = ({ className = "" }) => {
|
|
3690
3719
|
const {
|
|
3691
3720
|
view,
|
|
@@ -3695,6 +3724,7 @@ var Header = ({ className = "" }) => {
|
|
|
3695
3724
|
today,
|
|
3696
3725
|
openEventForm,
|
|
3697
3726
|
headerComponent,
|
|
3727
|
+
headerClassName,
|
|
3698
3728
|
rawEvents
|
|
3699
3729
|
} = useCalendarContext();
|
|
3700
3730
|
const [mobilePopoverOpen, setMobilePopoverOpen] = useState6(false);
|
|
@@ -3725,7 +3755,7 @@ var Header = ({ className = "" }) => {
|
|
|
3725
3755
|
};
|
|
3726
3756
|
const NewEventButton = useCallback2(() => /* @__PURE__ */ jsx36("div", {
|
|
3727
3757
|
className: "flex items-center gap-2",
|
|
3728
|
-
children: /* @__PURE__ */
|
|
3758
|
+
children: /* @__PURE__ */ jsxs24(Button, {
|
|
3729
3759
|
onClick: () => openEventForm(),
|
|
3730
3760
|
variant: "default",
|
|
3731
3761
|
size: "sm",
|
|
@@ -3735,7 +3765,7 @@ var Header = ({ className = "" }) => {
|
|
|
3735
3765
|
className: "h-4 w-4"
|
|
3736
3766
|
}),
|
|
3737
3767
|
/* @__PURE__ */ jsx36("span", {
|
|
3738
|
-
className: "hidden
|
|
3768
|
+
className: "hidden @4xl:inline",
|
|
3739
3769
|
children: "New"
|
|
3740
3770
|
})
|
|
3741
3771
|
]
|
|
@@ -3745,124 +3775,127 @@ var Header = ({ className = "" }) => {
|
|
|
3745
3775
|
return headerComponent;
|
|
3746
3776
|
}
|
|
3747
3777
|
return /* @__PURE__ */ jsx36(Fragment5, {
|
|
3748
|
-
children: /* @__PURE__ */
|
|
3749
|
-
className:
|
|
3778
|
+
children: /* @__PURE__ */ jsx36("div", {
|
|
3779
|
+
className: "@container/base-header w-full",
|
|
3750
3780
|
"data-testid": "calendar-header",
|
|
3751
|
-
children:
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3781
|
-
|
|
3782
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
})
|
|
3792
|
-
]
|
|
3793
|
-
}),
|
|
3794
|
-
/* @__PURE__ */ jsxs23("div", {
|
|
3795
|
-
className: "flex items-center justify-end gap-1 sm:hidden",
|
|
3796
|
-
children: [
|
|
3797
|
-
/* @__PURE__ */ jsx36(NewEventButton, {}),
|
|
3798
|
-
/* @__PURE__ */ jsxs23(Popover, {
|
|
3799
|
-
open: mobilePopoverOpen,
|
|
3800
|
-
onOpenChange: setMobilePopoverOpen,
|
|
3801
|
-
children: [
|
|
3802
|
-
/* @__PURE__ */ jsx36(PopoverTrigger, {
|
|
3803
|
-
asChild: true,
|
|
3804
|
-
children: /* @__PURE__ */ jsx36(Button, {
|
|
3805
|
-
variant: "outline",
|
|
3806
|
-
size: "sm",
|
|
3807
|
-
children: /* @__PURE__ */ jsx36(Menu, {
|
|
3808
|
-
className: "h-4 w-4"
|
|
3809
|
-
})
|
|
3781
|
+
children: /* @__PURE__ */ jsxs24("div", {
|
|
3782
|
+
className: cn("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2 border-b", className, headerClassName),
|
|
3783
|
+
children: [
|
|
3784
|
+
/* @__PURE__ */ jsxs24("div", {
|
|
3785
|
+
className: "flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",
|
|
3786
|
+
children: [
|
|
3787
|
+
/* @__PURE__ */ jsx36(CalendarIcon2, {
|
|
3788
|
+
className: "h-5 w-5"
|
|
3789
|
+
}),
|
|
3790
|
+
/* @__PURE__ */ jsx36(title_content_default, {})
|
|
3791
|
+
]
|
|
3792
|
+
}),
|
|
3793
|
+
/* @__PURE__ */ jsxs24("div", {
|
|
3794
|
+
className: "flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",
|
|
3795
|
+
children: [
|
|
3796
|
+
/* @__PURE__ */ jsxs24("div", {
|
|
3797
|
+
className: "hidden @md/base-header:flex items-center justify-start gap-1",
|
|
3798
|
+
children: [
|
|
3799
|
+
/* @__PURE__ */ jsx36(view_controls_default, {
|
|
3800
|
+
currentView: view,
|
|
3801
|
+
onChange: setView,
|
|
3802
|
+
onToday: today,
|
|
3803
|
+
onNext: nextPeriod,
|
|
3804
|
+
onPrevious: prevPeriod,
|
|
3805
|
+
variant: "default",
|
|
3806
|
+
className: "justify-end"
|
|
3807
|
+
}),
|
|
3808
|
+
/* @__PURE__ */ jsx36(NewEventButton, {}),
|
|
3809
|
+
/* @__PURE__ */ jsxs24(Button, {
|
|
3810
|
+
onClick: handleExport,
|
|
3811
|
+
variant: "outline",
|
|
3812
|
+
size: "sm",
|
|
3813
|
+
className: "flex items-center gap-1",
|
|
3814
|
+
children: [
|
|
3815
|
+
/* @__PURE__ */ jsx36(Download, {
|
|
3816
|
+
className: "h-4 w-4"
|
|
3817
|
+
}),
|
|
3818
|
+
/* @__PURE__ */ jsx36("span", {
|
|
3819
|
+
className: "hidden @4xl/base-header:inline",
|
|
3820
|
+
children: "Export"
|
|
3810
3821
|
})
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
|
|
3828
|
-
|
|
3829
|
-
|
|
3830
|
-
/* @__PURE__ */ jsx36("div", {
|
|
3831
|
-
className: "pt-2 border-t",
|
|
3832
|
-
children: /* @__PURE__ */ jsxs23(Button, {
|
|
3833
|
-
onClick: handleExport,
|
|
3834
|
-
variant: "outline",
|
|
3835
|
-
size: "sm",
|
|
3836
|
-
className: "w-full flex items-center gap-2",
|
|
3837
|
-
children: [
|
|
3838
|
-
/* @__PURE__ */ jsx36(Download, {
|
|
3839
|
-
className: "h-4 w-4"
|
|
3840
|
-
}),
|
|
3841
|
-
"Export Calendar (.ics)"
|
|
3842
|
-
]
|
|
3843
|
-
})
|
|
3822
|
+
]
|
|
3823
|
+
})
|
|
3824
|
+
]
|
|
3825
|
+
}),
|
|
3826
|
+
/* @__PURE__ */ jsxs24("div", {
|
|
3827
|
+
className: "flex items-center justify-end gap-1 @md/base-header:hidden",
|
|
3828
|
+
children: [
|
|
3829
|
+
/* @__PURE__ */ jsx36(NewEventButton, {}),
|
|
3830
|
+
/* @__PURE__ */ jsxs24(Popover, {
|
|
3831
|
+
open: mobilePopoverOpen,
|
|
3832
|
+
onOpenChange: setMobilePopoverOpen,
|
|
3833
|
+
children: [
|
|
3834
|
+
/* @__PURE__ */ jsx36(PopoverTrigger, {
|
|
3835
|
+
asChild: true,
|
|
3836
|
+
children: /* @__PURE__ */ jsx36(Button, {
|
|
3837
|
+
variant: "outline",
|
|
3838
|
+
size: "sm",
|
|
3839
|
+
children: /* @__PURE__ */ jsx36(Menu, {
|
|
3840
|
+
className: "h-4 w-4"
|
|
3844
3841
|
})
|
|
3845
|
-
|
|
3842
|
+
})
|
|
3843
|
+
}),
|
|
3844
|
+
/* @__PURE__ */ jsx36(PopoverContent, {
|
|
3845
|
+
align: "end",
|
|
3846
|
+
className: "w-[240px] p-2",
|
|
3847
|
+
children: /* @__PURE__ */ jsxs24("div", {
|
|
3848
|
+
className: "space-y-2",
|
|
3849
|
+
children: [
|
|
3850
|
+
/* @__PURE__ */ jsx36("h3", {
|
|
3851
|
+
className: "mb-1 text-sm font-medium",
|
|
3852
|
+
children: "View & Navigation"
|
|
3853
|
+
}),
|
|
3854
|
+
/* @__PURE__ */ jsx36(view_controls_default, {
|
|
3855
|
+
currentView: view,
|
|
3856
|
+
onChange: (newView) => handleViewChange(newView, true),
|
|
3857
|
+
onToday: handleNavigation.today,
|
|
3858
|
+
onNext: handleNavigation.next,
|
|
3859
|
+
onPrevious: handleNavigation.previous,
|
|
3860
|
+
variant: "grid"
|
|
3861
|
+
}),
|
|
3862
|
+
/* @__PURE__ */ jsx36("div", {
|
|
3863
|
+
className: "pt-2 border-t",
|
|
3864
|
+
children: /* @__PURE__ */ jsxs24(Button, {
|
|
3865
|
+
onClick: handleExport,
|
|
3866
|
+
variant: "outline",
|
|
3867
|
+
size: "sm",
|
|
3868
|
+
className: "w-full flex items-center gap-2",
|
|
3869
|
+
children: [
|
|
3870
|
+
/* @__PURE__ */ jsx36(Download, {
|
|
3871
|
+
className: "h-4 w-4"
|
|
3872
|
+
}),
|
|
3873
|
+
"Export Calendar (.ics)"
|
|
3874
|
+
]
|
|
3875
|
+
})
|
|
3876
|
+
})
|
|
3877
|
+
]
|
|
3878
|
+
})
|
|
3846
3879
|
})
|
|
3847
|
-
|
|
3848
|
-
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
|
|
3852
|
-
|
|
3853
|
-
|
|
3854
|
-
|
|
3880
|
+
]
|
|
3881
|
+
})
|
|
3882
|
+
]
|
|
3883
|
+
})
|
|
3884
|
+
]
|
|
3885
|
+
})
|
|
3886
|
+
]
|
|
3887
|
+
})
|
|
3855
3888
|
})
|
|
3856
3889
|
});
|
|
3857
3890
|
};
|
|
3858
3891
|
var base_header_default = Header;
|
|
3859
3892
|
// src/features/year-view/view/year-view.tsx
|
|
3860
3893
|
import { AnimatePresence as AnimatePresence7, motion as motion7 } from "motion/react";
|
|
3861
|
-
import { jsx as jsx37, jsxs as
|
|
3894
|
+
import { jsx as jsx37, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
3862
3895
|
var YearView = () => {
|
|
3863
|
-
const { currentDate, selectDate, events, setView, getEventsForDateRange } = useCalendarContext();
|
|
3896
|
+
const { currentDate, selectDate, events, setView, getEventsForDateRange, t } = useCalendarContext();
|
|
3864
3897
|
const year = currentDate.year();
|
|
3865
|
-
const
|
|
3898
|
+
const months = Array.from({ length: 12 }, (_, i) => {
|
|
3866
3899
|
const monthDate = dayjs_config_default().year(year).month(i).startOf("month");
|
|
3867
3900
|
return {
|
|
3868
3901
|
date: monthDate,
|
|
@@ -3871,7 +3904,7 @@ var YearView = () => {
|
|
|
3871
3904
|
firstDayOfMonth: monthDate.startOf("month").day()
|
|
3872
3905
|
};
|
|
3873
3906
|
});
|
|
3874
|
-
const monthsWithEventCount =
|
|
3907
|
+
const monthsWithEventCount = months.map((month) => {
|
|
3875
3908
|
const eventsInMonth = events.filter((event) => event.start.year() === year && event.start.month() === month.date.month());
|
|
3876
3909
|
return {
|
|
3877
3910
|
...month,
|
|
@@ -3906,7 +3939,7 @@ var YearView = () => {
|
|
|
3906
3939
|
events: dayEvents
|
|
3907
3940
|
};
|
|
3908
3941
|
});
|
|
3909
|
-
return /* @__PURE__ */
|
|
3942
|
+
return /* @__PURE__ */ jsxs25("div", {
|
|
3910
3943
|
"data-testid": `year-mini-calendar-${month.date.format("MM")}`,
|
|
3911
3944
|
className: "grid grid-cols-7 gap-[1px] text-[0.6rem]",
|
|
3912
3945
|
children: [
|
|
@@ -3914,7 +3947,7 @@ var YearView = () => {
|
|
|
3914
3947
|
className: "text-muted-foreground h-3 text-center",
|
|
3915
3948
|
children: dayName
|
|
3916
3949
|
}, `header-${i}`)),
|
|
3917
|
-
daysArray.map((dayInfo, i) => /* @__PURE__ */
|
|
3950
|
+
daysArray.map((dayInfo, i) => /* @__PURE__ */ jsxs25("div", {
|
|
3918
3951
|
"data-testid": `year-day-${month.date.format("YYYY-MM")}-${dayInfo.day.format("YYYY-MM-DD")}`,
|
|
3919
3952
|
onClick: (e) => handleDayClick(dayInfo.day, e),
|
|
3920
3953
|
className: cn("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center", "hover:bg-accent rounded-sm transition-colors duration-200", !dayInfo.isCurrentMonth && "text-muted-foreground opacity-50", dayInfo.isToday && "bg-primary text-primary-foreground rounded-full", dayInfo.isCurrentDate && !dayInfo.isToday && "bg-muted rounded-full font-bold", dayInfo.hasEvents && !dayInfo.isToday && !dayInfo.isCurrentDate && "font-medium"),
|
|
@@ -3924,7 +3957,7 @@ var YearView = () => {
|
|
|
3924
3957
|
className: "text-center leading-none",
|
|
3925
3958
|
children: dayInfo.day.date()
|
|
3926
3959
|
}),
|
|
3927
|
-
dayInfo.hasEvents && /* @__PURE__ */
|
|
3960
|
+
dayInfo.hasEvents && /* @__PURE__ */ jsxs25("div", {
|
|
3928
3961
|
className: cn("absolute bottom-0 flex w-full justify-center space-x-[1px]", dayInfo.isToday ? "bottom-[1px]" : ""),
|
|
3929
3962
|
children: [
|
|
3930
3963
|
dayInfo.eventCount > 0 && /* @__PURE__ */ jsx37("span", {
|
|
@@ -3949,14 +3982,14 @@ var YearView = () => {
|
|
|
3949
3982
|
children: /* @__PURE__ */ jsx37("div", {
|
|
3950
3983
|
"data-testid": "year-grid",
|
|
3951
3984
|
className: "grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
3952
|
-
children: monthsWithEventCount.map((month, index) => /* @__PURE__ */
|
|
3985
|
+
children: monthsWithEventCount.map((month, index) => /* @__PURE__ */ jsxs25("div", {
|
|
3953
3986
|
"data-testid": `year-month-${month.date.format("MM")}`,
|
|
3954
3987
|
onClick: () => handleMonthClick(month.date),
|
|
3955
3988
|
className: "hover:border-primary flex cursor-pointer flex-col rounded-lg border p-3 transition-all duration-200 hover:scale-[1.01] hover:shadow-md",
|
|
3956
3989
|
children: [
|
|
3957
3990
|
/* @__PURE__ */ jsx37(AnimatePresence7, {
|
|
3958
3991
|
mode: "wait",
|
|
3959
|
-
children: /* @__PURE__ */
|
|
3992
|
+
children: /* @__PURE__ */ jsxs25(motion7.div, {
|
|
3960
3993
|
initial: { opacity: 0, y: -10 },
|
|
3961
3994
|
animate: { opacity: 1, y: 0 },
|
|
3962
3995
|
exit: { opacity: 0, y: -10 },
|
|
@@ -3972,13 +4005,13 @@ var YearView = () => {
|
|
|
3972
4005
|
className: "text-lg font-medium",
|
|
3973
4006
|
children: month.name
|
|
3974
4007
|
}),
|
|
3975
|
-
month.eventCount > 0 && /* @__PURE__ */
|
|
4008
|
+
month.eventCount > 0 && /* @__PURE__ */ jsxs25("span", {
|
|
3976
4009
|
"data-testid": `year-month-event-count-${month.date.format("MM")}`,
|
|
3977
4010
|
className: "bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs",
|
|
3978
4011
|
children: [
|
|
3979
4012
|
month.eventCount,
|
|
3980
4013
|
" ",
|
|
3981
|
-
month.eventCount === 1 ? "event" : "events"
|
|
4014
|
+
month.eventCount === 1 ? t("event") : t("events")
|
|
3982
4015
|
]
|
|
3983
4016
|
})
|
|
3984
4017
|
]
|
|
@@ -4007,7 +4040,7 @@ import {
|
|
|
4007
4040
|
} from "@dnd-kit/core";
|
|
4008
4041
|
import React9, { useState as useState7 } from "react";
|
|
4009
4042
|
import { snapCenterToCursor } from "@dnd-kit/modifiers";
|
|
4010
|
-
import { jsx as jsx38, jsxs as
|
|
4043
|
+
import { jsx as jsx38, jsxs as jsxs26, Fragment as Fragment6 } from "react/jsx-runtime";
|
|
4011
4044
|
function CalendarDndContext({ children }) {
|
|
4012
4045
|
const { updateEvent, updateRecurringEvent: updateRecurringEvent2, view, disableDragAndDrop } = useCalendarContext();
|
|
4013
4046
|
const [activeEvent, setActiveEvent] = React9.useState(null);
|
|
@@ -4134,9 +4167,9 @@ function CalendarDndContext({ children }) {
|
|
|
4134
4167
|
if (disableDragAndDrop) {
|
|
4135
4168
|
return children;
|
|
4136
4169
|
}
|
|
4137
|
-
return /* @__PURE__ */
|
|
4170
|
+
return /* @__PURE__ */ jsxs26(Fragment6, {
|
|
4138
4171
|
children: [
|
|
4139
|
-
/* @__PURE__ */
|
|
4172
|
+
/* @__PURE__ */ jsxs26(DndContext, {
|
|
4140
4173
|
sensors,
|
|
4141
4174
|
onDragStart: handleDragStart,
|
|
4142
4175
|
onDragEnd: handleDragEnd,
|
|
@@ -4165,16 +4198,114 @@ function CalendarDndContext({ children }) {
|
|
|
4165
4198
|
}
|
|
4166
4199
|
|
|
4167
4200
|
// src/contexts/calendar-context/provider.tsx
|
|
4168
|
-
import { useCallback as useCallback3, useEffect as useEffect4, useMemo as
|
|
4201
|
+
import { useCallback as useCallback3, useEffect as useEffect4, useMemo as useMemo8, useState as useState8 } from "react";
|
|
4202
|
+
|
|
4203
|
+
// src/lib/translations/default.ts
|
|
4204
|
+
var defaultTranslations = {
|
|
4205
|
+
today: "Today",
|
|
4206
|
+
create: "Create",
|
|
4207
|
+
update: "Update",
|
|
4208
|
+
delete: "Delete",
|
|
4209
|
+
cancel: "Cancel",
|
|
4210
|
+
event: "Event",
|
|
4211
|
+
events: "Events",
|
|
4212
|
+
newEvent: "New Event",
|
|
4213
|
+
title: "Title",
|
|
4214
|
+
description: "Description",
|
|
4215
|
+
location: "Location",
|
|
4216
|
+
allDay: "All day",
|
|
4217
|
+
startDate: "Start Date",
|
|
4218
|
+
endDate: "End Date",
|
|
4219
|
+
startTime: "Start Time",
|
|
4220
|
+
endTime: "End Time",
|
|
4221
|
+
color: "Color",
|
|
4222
|
+
createEvent: "Create Event",
|
|
4223
|
+
editEvent: "Edit Event",
|
|
4224
|
+
addNewEvent: "Add a new event to your calendar",
|
|
4225
|
+
editEventDetails: "Edit your event details",
|
|
4226
|
+
eventTitlePlaceholder: "Event title",
|
|
4227
|
+
eventDescriptionPlaceholder: "Event description (optional)",
|
|
4228
|
+
eventLocationPlaceholder: "Event location (optional)",
|
|
4229
|
+
repeat: "Repeat",
|
|
4230
|
+
repeats: "Repeats",
|
|
4231
|
+
customRecurrence: "Custom recurrence",
|
|
4232
|
+
daily: "Daily",
|
|
4233
|
+
weekly: "Weekly",
|
|
4234
|
+
monthly: "Monthly",
|
|
4235
|
+
yearly: "Yearly",
|
|
4236
|
+
interval: "Interval",
|
|
4237
|
+
repeatOn: "Repeat on",
|
|
4238
|
+
never: "Never",
|
|
4239
|
+
count: "Count",
|
|
4240
|
+
every: "Every",
|
|
4241
|
+
ends: "Ends",
|
|
4242
|
+
after: "After",
|
|
4243
|
+
occurrences: "occurrences",
|
|
4244
|
+
on: "On",
|
|
4245
|
+
editRecurringEvent: "Edit recurring event",
|
|
4246
|
+
deleteRecurringEvent: "Delete recurring event",
|
|
4247
|
+
editRecurringEventQuestion: "is a recurring event. How would you like to edit it?",
|
|
4248
|
+
deleteRecurringEventQuestion: "is a recurring event. How would you like to delete it?",
|
|
4249
|
+
thisEvent: "This event",
|
|
4250
|
+
thisEventDescription: "Only change this specific occurrence",
|
|
4251
|
+
thisAndFollowingEvents: "This and following events",
|
|
4252
|
+
thisAndFollowingEventsDescription: "Edit this and all future occurrences",
|
|
4253
|
+
allEvents: "All events",
|
|
4254
|
+
allEventsDescription: "Edit the entire recurring series",
|
|
4255
|
+
onlyChangeThis: "Only change this specific occurrence",
|
|
4256
|
+
changeThisAndFuture: "Change this and all future occurrences",
|
|
4257
|
+
changeEntireSeries: "Change the entire recurring series",
|
|
4258
|
+
onlyDeleteThis: "Only delete this specific occurrence",
|
|
4259
|
+
deleteThisAndFuture: "Delete this and all future occurrences",
|
|
4260
|
+
deleteEntireSeries: "Delete the entire recurring series",
|
|
4261
|
+
month: "Month",
|
|
4262
|
+
week: "Week",
|
|
4263
|
+
day: "Day",
|
|
4264
|
+
year: "Year",
|
|
4265
|
+
more: "more",
|
|
4266
|
+
sunday: "Sunday",
|
|
4267
|
+
monday: "Monday",
|
|
4268
|
+
tuesday: "Tuesday",
|
|
4269
|
+
wednesday: "Wednesday",
|
|
4270
|
+
thursday: "Thursday",
|
|
4271
|
+
friday: "Friday",
|
|
4272
|
+
saturday: "Saturday",
|
|
4273
|
+
sun: "Sun",
|
|
4274
|
+
mon: "Mon",
|
|
4275
|
+
tue: "Tue",
|
|
4276
|
+
wed: "Wed",
|
|
4277
|
+
thu: "Thu",
|
|
4278
|
+
fri: "Fri",
|
|
4279
|
+
sat: "Sat",
|
|
4280
|
+
january: "January",
|
|
4281
|
+
february: "February",
|
|
4282
|
+
march: "March",
|
|
4283
|
+
april: "April",
|
|
4284
|
+
may: "May",
|
|
4285
|
+
june: "June",
|
|
4286
|
+
july: "July",
|
|
4287
|
+
august: "August",
|
|
4288
|
+
september: "September",
|
|
4289
|
+
october: "October",
|
|
4290
|
+
november: "November",
|
|
4291
|
+
december: "December"
|
|
4292
|
+
};
|
|
4293
|
+
|
|
4294
|
+
// src/contexts/calendar-context/provider.tsx
|
|
4169
4295
|
import { jsx as jsx39 } from "react/jsx-runtime";
|
|
4170
4296
|
var CalendarProvider = ({
|
|
4171
4297
|
children,
|
|
4172
4298
|
events = [],
|
|
4173
4299
|
firstDayOfWeek = 0,
|
|
4300
|
+
initialView = "month",
|
|
4174
4301
|
renderEvent,
|
|
4175
4302
|
onEventClick,
|
|
4176
4303
|
onCellClick,
|
|
4177
4304
|
onViewChange,
|
|
4305
|
+
onEventAdd,
|
|
4306
|
+
onEventUpdate,
|
|
4307
|
+
onEventDelete,
|
|
4308
|
+
onDateChange,
|
|
4178
4309
|
locale,
|
|
4179
4310
|
timezone: timezone2,
|
|
4180
4311
|
disableCellClick,
|
|
@@ -4183,16 +4314,28 @@ var CalendarProvider = ({
|
|
|
4183
4314
|
dayMaxEvents,
|
|
4184
4315
|
stickyViewHeader = true,
|
|
4185
4316
|
viewHeaderClassName = "",
|
|
4186
|
-
headerComponent
|
|
4317
|
+
headerComponent,
|
|
4318
|
+
headerClassName,
|
|
4319
|
+
translations,
|
|
4320
|
+
translator
|
|
4187
4321
|
}) => {
|
|
4188
4322
|
const [currentDate, setCurrentDate] = useState8(dayjs_config_default());
|
|
4189
|
-
const [view, setView] = useState8(
|
|
4323
|
+
const [view, setView] = useState8(initialView);
|
|
4190
4324
|
const [currentEvents, setCurrentEvents] = useState8(events);
|
|
4191
4325
|
const [isEventFormOpen, setIsEventFormOpen] = useState8(false);
|
|
4192
4326
|
const [selectedEvent, setSelectedEvent] = useState8(null);
|
|
4193
4327
|
const [selectedDate, setSelectedDate] = useState8(null);
|
|
4194
4328
|
const [currentLocale, setCurrentLocale] = useState8(locale || "en");
|
|
4195
4329
|
const [currentTimezone, setCurrentTimezone] = useState8(timezone2 || "");
|
|
4330
|
+
const t = useMemo8(() => {
|
|
4331
|
+
if (translator) {
|
|
4332
|
+
return translator;
|
|
4333
|
+
}
|
|
4334
|
+
if (translations) {
|
|
4335
|
+
return (key) => translations[key] || key;
|
|
4336
|
+
}
|
|
4337
|
+
return (key) => defaultTranslations[key] || key;
|
|
4338
|
+
}, [translations, translator]);
|
|
4196
4339
|
const getEventsForDateRange = useCallback3((startDate, endDate) => {
|
|
4197
4340
|
const allEvents = [];
|
|
4198
4341
|
for (const event of currentEvents) {
|
|
@@ -4244,7 +4387,7 @@ var CalendarProvider = ({
|
|
|
4244
4387
|
};
|
|
4245
4388
|
}
|
|
4246
4389
|
}, [currentDate, view, firstDayOfWeek]);
|
|
4247
|
-
const processedEvents =
|
|
4390
|
+
const processedEvents = useMemo8(() => {
|
|
4248
4391
|
const { start, end } = getCurrentViewRange();
|
|
4249
4392
|
return getEventsForDateRange(start, end);
|
|
4250
4393
|
}, [getEventsForDateRange, getCurrentViewRange]);
|
|
@@ -4267,49 +4410,97 @@ var CalendarProvider = ({
|
|
|
4267
4410
|
}, [timezone2]);
|
|
4268
4411
|
const selectDate = useCallback3((date) => {
|
|
4269
4412
|
setCurrentDate(date);
|
|
4270
|
-
|
|
4413
|
+
onDateChange?.(date);
|
|
4414
|
+
}, [onDateChange]);
|
|
4271
4415
|
const nextPeriod = useCallback3(() => {
|
|
4272
4416
|
switch (view) {
|
|
4273
4417
|
case "month":
|
|
4274
|
-
setCurrentDate((currentDate2) =>
|
|
4418
|
+
setCurrentDate((currentDate2) => {
|
|
4419
|
+
const newDate = currentDate2.add(1, "month");
|
|
4420
|
+
onDateChange?.(newDate);
|
|
4421
|
+
return newDate;
|
|
4422
|
+
});
|
|
4275
4423
|
break;
|
|
4276
4424
|
case "week":
|
|
4277
|
-
setCurrentDate((currentDate2) =>
|
|
4425
|
+
setCurrentDate((currentDate2) => {
|
|
4426
|
+
const newDate = currentDate2.add(1, "week");
|
|
4427
|
+
onDateChange?.(newDate);
|
|
4428
|
+
return newDate;
|
|
4429
|
+
});
|
|
4278
4430
|
break;
|
|
4279
4431
|
case "day":
|
|
4280
|
-
setCurrentDate((currentDate2) =>
|
|
4432
|
+
setCurrentDate((currentDate2) => {
|
|
4433
|
+
const newDate = currentDate2.add(1, "day");
|
|
4434
|
+
onDateChange?.(newDate);
|
|
4435
|
+
return newDate;
|
|
4436
|
+
});
|
|
4281
4437
|
break;
|
|
4282
4438
|
case "year":
|
|
4283
|
-
setCurrentDate((currentDate2) =>
|
|
4439
|
+
setCurrentDate((currentDate2) => {
|
|
4440
|
+
const newDate = currentDate2.add(1, "year");
|
|
4441
|
+
onDateChange?.(newDate);
|
|
4442
|
+
return newDate;
|
|
4443
|
+
});
|
|
4284
4444
|
break;
|
|
4285
4445
|
}
|
|
4286
|
-
}, [view]);
|
|
4446
|
+
}, [view, onDateChange]);
|
|
4287
4447
|
const prevPeriod = useCallback3(() => {
|
|
4288
4448
|
switch (view) {
|
|
4289
4449
|
case "month":
|
|
4290
|
-
setCurrentDate((currentDate2) =>
|
|
4450
|
+
setCurrentDate((currentDate2) => {
|
|
4451
|
+
const newDate = currentDate2.subtract(1, "month");
|
|
4452
|
+
onDateChange?.(newDate);
|
|
4453
|
+
return newDate;
|
|
4454
|
+
});
|
|
4291
4455
|
break;
|
|
4292
4456
|
case "week":
|
|
4293
|
-
setCurrentDate((currentDate2) =>
|
|
4457
|
+
setCurrentDate((currentDate2) => {
|
|
4458
|
+
const newDate = currentDate2.subtract(1, "week");
|
|
4459
|
+
onDateChange?.(newDate);
|
|
4460
|
+
return newDate;
|
|
4461
|
+
});
|
|
4294
4462
|
break;
|
|
4295
4463
|
case "day":
|
|
4296
|
-
setCurrentDate((currentDate2) =>
|
|
4464
|
+
setCurrentDate((currentDate2) => {
|
|
4465
|
+
const newDate = currentDate2.subtract(1, "day");
|
|
4466
|
+
onDateChange?.(newDate);
|
|
4467
|
+
return newDate;
|
|
4468
|
+
});
|
|
4297
4469
|
break;
|
|
4298
4470
|
case "year":
|
|
4299
|
-
setCurrentDate((currentDate2) =>
|
|
4471
|
+
setCurrentDate((currentDate2) => {
|
|
4472
|
+
const newDate = currentDate2.subtract(1, "year");
|
|
4473
|
+
onDateChange?.(newDate);
|
|
4474
|
+
return newDate;
|
|
4475
|
+
});
|
|
4300
4476
|
break;
|
|
4301
4477
|
}
|
|
4302
|
-
}, [view]);
|
|
4478
|
+
}, [view, onDateChange]);
|
|
4303
4479
|
const today = useCallback3(() => {
|
|
4304
|
-
|
|
4305
|
-
|
|
4480
|
+
const newDate = dayjs_config_default();
|
|
4481
|
+
setCurrentDate(newDate);
|
|
4482
|
+
onDateChange?.(newDate);
|
|
4483
|
+
}, [onDateChange]);
|
|
4306
4484
|
const addEvent = useCallback3((event) => {
|
|
4307
4485
|
setCurrentEvents((prevEvents) => [...prevEvents, event]);
|
|
4308
|
-
|
|
4486
|
+
onEventAdd?.(event);
|
|
4487
|
+
}, [onEventAdd]);
|
|
4309
4488
|
const updateEvent = useCallback3((eventId, updatedEvent) => {
|
|
4310
|
-
setCurrentEvents((prevEvents) =>
|
|
4311
|
-
|
|
4489
|
+
setCurrentEvents((prevEvents) => {
|
|
4490
|
+
const updated = prevEvents.map((event) => {
|
|
4491
|
+
if (event.id === eventId) {
|
|
4492
|
+
const newEvent = { ...event, ...updatedEvent };
|
|
4493
|
+
onEventUpdate?.(newEvent);
|
|
4494
|
+
return newEvent;
|
|
4495
|
+
}
|
|
4496
|
+
return event;
|
|
4497
|
+
});
|
|
4498
|
+
return updated;
|
|
4499
|
+
});
|
|
4500
|
+
}, [onEventUpdate]);
|
|
4312
4501
|
const updateRecurringEvent2 = useCallback3((event, updates, options) => {
|
|
4502
|
+
const updatedEvent = { ...event, ...updates };
|
|
4503
|
+
onEventUpdate?.(updatedEvent);
|
|
4313
4504
|
const updatedEvents = updateRecurringEvent({
|
|
4314
4505
|
targetEvent: event,
|
|
4315
4506
|
updates,
|
|
@@ -4317,18 +4508,25 @@ var CalendarProvider = ({
|
|
|
4317
4508
|
scope: options.scope
|
|
4318
4509
|
});
|
|
4319
4510
|
setCurrentEvents(updatedEvents);
|
|
4320
|
-
}, [currentEvents]);
|
|
4511
|
+
}, [currentEvents, onEventUpdate]);
|
|
4321
4512
|
const deleteRecurringEvent2 = useCallback3((event, options) => {
|
|
4513
|
+
onEventDelete?.(event);
|
|
4322
4514
|
const updatedEvents = deleteRecurringEvent({
|
|
4323
4515
|
targetEvent: event,
|
|
4324
4516
|
currentEvents,
|
|
4325
4517
|
scope: options.scope
|
|
4326
4518
|
});
|
|
4327
4519
|
setCurrentEvents(updatedEvents);
|
|
4328
|
-
}, [currentEvents]);
|
|
4520
|
+
}, [currentEvents, onEventDelete]);
|
|
4329
4521
|
const deleteEvent = useCallback3((eventId) => {
|
|
4330
|
-
setCurrentEvents((prevEvents) =>
|
|
4331
|
-
|
|
4522
|
+
setCurrentEvents((prevEvents) => {
|
|
4523
|
+
const eventToDelete = prevEvents.find((event) => event.id === eventId);
|
|
4524
|
+
if (eventToDelete) {
|
|
4525
|
+
onEventDelete?.(eventToDelete);
|
|
4526
|
+
}
|
|
4527
|
+
return prevEvents.filter((event) => event.id !== eventId);
|
|
4528
|
+
});
|
|
4529
|
+
}, [onEventDelete]);
|
|
4332
4530
|
const editEvent = useCallback3((event) => {
|
|
4333
4531
|
setSelectedEvent(event);
|
|
4334
4532
|
setIsEventFormOpen(true);
|
|
@@ -4361,7 +4559,7 @@ var CalendarProvider = ({
|
|
|
4361
4559
|
} else {
|
|
4362
4560
|
setSelectedDate(startDate);
|
|
4363
4561
|
setSelectedEvent({
|
|
4364
|
-
title:
|
|
4562
|
+
title: t("newEvent"),
|
|
4365
4563
|
start: startDate,
|
|
4366
4564
|
end: endDate,
|
|
4367
4565
|
description: "",
|
|
@@ -4369,20 +4567,20 @@ var CalendarProvider = ({
|
|
|
4369
4567
|
});
|
|
4370
4568
|
setIsEventFormOpen(true);
|
|
4371
4569
|
}
|
|
4372
|
-
}, [onCellClick, disableCellClick]);
|
|
4570
|
+
}, [onCellClick, disableCellClick, t]);
|
|
4373
4571
|
const handleOpenEventForm = useCallback3((date) => {
|
|
4374
4572
|
if (date) {
|
|
4375
4573
|
setSelectedDate(date);
|
|
4376
4574
|
}
|
|
4377
4575
|
setSelectedEvent({
|
|
4378
|
-
title:
|
|
4576
|
+
title: t("newEvent"),
|
|
4379
4577
|
start: date ?? currentDate,
|
|
4380
4578
|
end: date ?? currentDate.add(1, "hour"),
|
|
4381
4579
|
description: "",
|
|
4382
4580
|
allDay: false
|
|
4383
4581
|
});
|
|
4384
4582
|
setIsEventFormOpen(true);
|
|
4385
|
-
}, [currentDate]);
|
|
4583
|
+
}, [currentDate, t]);
|
|
4386
4584
|
const findParentRecurringEvent = useCallback3((event) => {
|
|
4387
4585
|
const targetUID = event.uid;
|
|
4388
4586
|
const parentEvent = currentEvents.find((e) => {
|
|
@@ -4391,7 +4589,7 @@ var CalendarProvider = ({
|
|
|
4391
4589
|
});
|
|
4392
4590
|
return parentEvent || null;
|
|
4393
4591
|
}, [currentEvents]);
|
|
4394
|
-
const contextValue =
|
|
4592
|
+
const contextValue = useMemo8(() => ({
|
|
4395
4593
|
currentDate,
|
|
4396
4594
|
view,
|
|
4397
4595
|
events: processedEvents,
|
|
@@ -4427,7 +4625,9 @@ var CalendarProvider = ({
|
|
|
4427
4625
|
dayMaxEvents,
|
|
4428
4626
|
stickyViewHeader,
|
|
4429
4627
|
viewHeaderClassName,
|
|
4430
|
-
headerComponent
|
|
4628
|
+
headerComponent,
|
|
4629
|
+
headerClassName,
|
|
4630
|
+
t
|
|
4431
4631
|
}), [
|
|
4432
4632
|
currentDate,
|
|
4433
4633
|
view,
|
|
@@ -4463,7 +4663,9 @@ var CalendarProvider = ({
|
|
|
4463
4663
|
dayMaxEvents,
|
|
4464
4664
|
stickyViewHeader,
|
|
4465
4665
|
viewHeaderClassName,
|
|
4466
|
-
headerComponent
|
|
4666
|
+
headerComponent,
|
|
4667
|
+
headerClassName,
|
|
4668
|
+
t
|
|
4467
4669
|
]);
|
|
4468
4670
|
return /* @__PURE__ */ jsx39(CalendarContext.Provider, {
|
|
4469
4671
|
value: contextValue,
|
|
@@ -4472,7 +4674,7 @@ var CalendarProvider = ({
|
|
|
4472
4674
|
};
|
|
4473
4675
|
|
|
4474
4676
|
// src/components/ilamy-calendar/ilamy-calendar.tsx
|
|
4475
|
-
import { jsx as jsx40, jsxs as
|
|
4677
|
+
import { jsx as jsx40, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
4476
4678
|
var CalendarContent = () => {
|
|
4477
4679
|
const {
|
|
4478
4680
|
view,
|
|
@@ -4499,7 +4701,7 @@ var CalendarContent = () => {
|
|
|
4499
4701
|
const handleOnDelete = (event) => {
|
|
4500
4702
|
deleteEvent(event.id);
|
|
4501
4703
|
};
|
|
4502
|
-
return /* @__PURE__ */
|
|
4704
|
+
return /* @__PURE__ */ jsxs27("div", {
|
|
4503
4705
|
className: "flex flex-col w-full h-full",
|
|
4504
4706
|
children: [
|
|
4505
4707
|
/* @__PURE__ */ jsx40(base_header_default, {
|
|
@@ -4533,11 +4735,18 @@ var DEFAULT_DAY_MAX_EVENTS = 4;
|
|
|
4533
4735
|
var IlamyCalendar = ({
|
|
4534
4736
|
events,
|
|
4535
4737
|
firstDayOfWeek = "sunday",
|
|
4738
|
+
initialView = "month",
|
|
4536
4739
|
renderEvent,
|
|
4537
4740
|
onEventClick,
|
|
4538
4741
|
onCellClick,
|
|
4539
4742
|
onViewChange,
|
|
4743
|
+
onEventAdd,
|
|
4744
|
+
onEventUpdate,
|
|
4745
|
+
onEventDelete,
|
|
4746
|
+
onDateChange,
|
|
4540
4747
|
locale,
|
|
4748
|
+
translations,
|
|
4749
|
+
translator,
|
|
4541
4750
|
timezone: timezone2,
|
|
4542
4751
|
disableCellClick,
|
|
4543
4752
|
disableEventClick,
|
|
@@ -4545,16 +4754,24 @@ var IlamyCalendar = ({
|
|
|
4545
4754
|
dayMaxEvents = DEFAULT_DAY_MAX_EVENTS,
|
|
4546
4755
|
stickyViewHeader = true,
|
|
4547
4756
|
viewHeaderClassName = "",
|
|
4548
|
-
headerComponent
|
|
4757
|
+
headerComponent,
|
|
4758
|
+
headerClassName
|
|
4549
4759
|
}) => {
|
|
4550
4760
|
return /* @__PURE__ */ jsx40(CalendarProvider, {
|
|
4551
4761
|
events: normalizePublicFacingCalendarEvent(events),
|
|
4552
4762
|
firstDayOfWeek: WEEK_DAYS_NUMBER_MAP[firstDayOfWeek],
|
|
4763
|
+
initialView,
|
|
4553
4764
|
renderEvent,
|
|
4554
4765
|
onEventClick,
|
|
4555
4766
|
onCellClick,
|
|
4556
4767
|
onViewChange,
|
|
4768
|
+
onEventAdd,
|
|
4769
|
+
onEventUpdate,
|
|
4770
|
+
onEventDelete,
|
|
4771
|
+
onDateChange,
|
|
4557
4772
|
locale,
|
|
4773
|
+
translations,
|
|
4774
|
+
translator,
|
|
4558
4775
|
timezone: timezone2,
|
|
4559
4776
|
disableCellClick,
|
|
4560
4777
|
disableEventClick,
|
|
@@ -4563,6 +4780,7 @@ var IlamyCalendar = ({
|
|
|
4563
4780
|
stickyViewHeader,
|
|
4564
4781
|
viewHeaderClassName,
|
|
4565
4782
|
headerComponent,
|
|
4783
|
+
headerClassName,
|
|
4566
4784
|
children: /* @__PURE__ */ jsx40(CalendarContent, {})
|
|
4567
4785
|
});
|
|
4568
4786
|
};
|
|
@@ -4573,9 +4791,10 @@ export {
|
|
|
4573
4791
|
useIlamyCalendarContext,
|
|
4574
4792
|
isRecurringEvent,
|
|
4575
4793
|
generateRecurringEvents,
|
|
4794
|
+
defaultTranslations,
|
|
4576
4795
|
RRule4 as RRule,
|
|
4577
4796
|
IlamyCalendar
|
|
4578
4797
|
};
|
|
4579
4798
|
|
|
4580
|
-
//# debugId=
|
|
4581
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy92aWV3L21vbnRoLXZpZXcudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsICIuLi9zcmMvbGliL3V0aWxzLnRzIiwgIi4uL3NyYy9saWIvZGF5anMtY29uZmlnLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2NhbGVuZGFyLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9jaGVja2JveC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvY2FyZC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvc2VsZWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90YWJzLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90b29sdGlwLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy9kYXktY2VsbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL21vbnRoLWhlYWRlci9tb250aC1oZWFkZXIudHN4IiwgIi4uL3NyYy9saWIvY29uc3RhbnRzLnRzIiwgIi4uL3NyYy9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgIi4uL3NyYy9mZWF0dXJlcy9tb250aC12aWV3L2NvbXBvbmVudHMvd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXIudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvdmlldy93ZWVrLXZpZXcudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvd2Vlay1hbGwtZGF5LXJvdy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLWhlYWRlci50c3giLCAiLi4vc3JjL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktZXZlbnRzLWxheWVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvd2Vlay12aWV3L3dlZWstZGF5LWNvbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLXRpbWUtZ3JpZC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvdmlldy9kYXktdmlldy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWFsbC1kYXktcm93LnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktaGVhZGVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktdGltZS1jb2wudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAiLi4vc3JjL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICIuLi9zcmMvbGliL2V4cG9ydC1pY2FsLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci9iYXNlLWhlYWRlci50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMveWVhci12aWV3L3ZpZXcveWVhci12aWV3LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci9pbGFteS1jYWxlbmRhci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICIuLi9zcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4uL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRGF5Q2VsbCB9IGZyb20gJy4uL2RheS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBNb250aFZpZXdQcm9wcywgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IE1vbnRoSGVhZGVyIH0gZnJvbSAnLi4vbW9udGgtaGVhZGVyL21vbnRoLWhlYWRlcidcbmltcG9ydCB7IFdlZWtFdmVudHNMYXllciB9IGZyb20gJy4uL3dlZWstZXZlbnRzLWxheWVyL3dlZWstZXZlbnRzLWxheWVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aSdcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKHsgZGF5TWF4RXZlbnRzID0gMyB9KSA9PiB7XG4gIGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG4gICAgb3BlbjogKCkgPT4gdm9pZFxuICAgIGNsb3NlOiAoKSA9PiB2b2lkXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG4gIH0+KG51bGwpXG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICAvLyBBbHdheXMgZ2VuZXJhdGUgNiB3ZWVrcyAoNDIgZGF5cykgcmVnYXJkbGVzcyBvZiB0aGUgbW9udGggbGVuZ3RoXG4gIC8vIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSA2IHJvd3Mgb2YgZGF5c1xuICBjb25zdCBjYWxlbmRhckRheXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyA2IHdlZWtzIMOXIDcgZGF5cyA9IDQyIGRheXNcbiAgICBjb25zdCBkYXlzOiBkYXlqcy5EYXlqc1tdW10gPSBbW11dXG4gICAgbGV0IGRheSA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmNsb25lKCkgLy8gQ2xvbmUgdG8gYXZvaWQgbXV0YXRpb25cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQyOyBpKyspIHtcbiAgICAgIGlmIChkYXlzW2RheXMubGVuZ3RoIC0gMV0ubGVuZ3RoID09PSA3KSB7XG4gICAgICAgIGRheXMucHVzaChbXSkgLy8gU3RhcnQgYSBuZXcgd2Vla1xuICAgICAgfVxuICAgICAgZGF5c1tkYXlzLmxlbmd0aCAtIDFdLnB1c2goZGF5KVxuICAgICAgZGF5ID0gZGF5LmFkZCgxLCAnZGF5JykgLy8gTW92ZSB0byB0aGUgbmV4dCBkYXlcbiAgICB9XG4gICAgcmV0dXJuIGRheXNcbiAgfSwgW2FkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIiBkYXRhLXRlc3RpZD1cIm1vbnRoLXZpZXdcIj5cbiAgICAgIHsvKiBXZWVrIGRheXMgaGVhZGVyICovfVxuICAgICAgPE1vbnRoSGVhZGVyIGNsYXNzTmFtZT1cImgtWzNyZW1dXCIgLz5cblxuICAgICAgey8qIENhbGVuZGFyIGdyaWQgLSBhZGRlZCBmaXhlZCBoZWlnaHQgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBjbGFzc05hbWU9XCJvdmVyZmxvdy1hdXRvIGgtW2NhbGMoMTAwJS0zcmVtKV1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbnRoLXNjcm9sbC1hcmVhXCJcbiAgICAgICAgdmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2wgKjptaW4taC1mdWxsJyB9fVxuICAgICAgPlxuICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgIGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSB9fVxuICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZ3JpZCBoLWZ1bGwgZ3JpZC1jb2xzLTcgZ3JpZC1yb3dzLTYgb3ZlcmZsb3ctYXV0byBmbGV4LTFcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb250aC1jYWxlbmRhci1ncmlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogRGF5IGNlbGxzICovfVxuICAgICAgICAgICAge2NhbGVuZGFyRGF5cy5tYXAoKGRheXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtgd2Vlay0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBjb2wtc3Bhbi03IGdyaWQgZ3JpZC1jb2xzLTdcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXJvdy0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPERheUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtkYXlJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRheT17ZGF5fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlci1yIGJvcmRlci1iIGZpcnN0OmJvcmRlci1sXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8V2Vla0V2ZW50c0xheWVyIGRheXM9e2RheXN9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cblxuICAgICAgey8qIERpYWxvZyBmb3Igc2hvd2luZyBhbGwgZXZlbnRzICovfVxuICAgICAgPEFsbEV2ZW50RGlhbG9nIHJlZj17YWxsRXZlbnRzRGlhbG9nUmVmfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZGF0ZT86IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG4gIGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anNcbiAgKSA9PiBDYWxlbmRhckV2ZW50W11cbiAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s6IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjdXJyZW50TG9jYWxlPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+ID1cbiAgY3JlYXRlQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckNvbnRleHQgPSAoKTogQ2FsZW5kYXJDb250ZXh0VHlwZSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KENhbGVuZGFyQ29udGV4dClcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQ2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJylcbiAgfVxuICByZXR1cm4gY29udGV4dFxufVxuXG4vKipcbiAqIFNpbXBsaWZpZWQgY2FsZW5kYXIgY29udGV4dCB0eXBlIGZvciBleHRlcm5hbCB1c2VcbiAqIENvbnRhaW5zIG9ubHkgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBjYWxlbmRhciBvcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuICByZWFkb25seSBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgcmVhZG9ubHkgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJlYWRvbmx5IGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICByZWFkb25seSBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICByZWFkb25seSBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICByZWFkb25seSBmaXJzdERheU9mV2VlazogbnVtYmVyXG4gIHJlYWRvbmx5IHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgcmVhZG9ubHkgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICByZWFkb25seSBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHRvZGF5OiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgcmVhZG9ubHkgdXBkYXRlRXZlbnQ6IChcbiAgICBldmVudElkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgKSA9PiB2b2lkXG4gIHJlYWRvbmx5IGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIHJlYWRvbmx5IG9wZW5FdmVudEZvcm06IChkYXRlPzogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0ID0gKCk6IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3VzZUlsYW15Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJ1xuICAgIClcbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuICAgIHZpZXc6IGNvbnRleHQudmlldyxcbiAgICBldmVudHM6IGNvbnRleHQuZXZlbnRzLFxuICAgIGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG4gICAgc2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuICAgIHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG4gICAgZmlyc3REYXlPZldlZWs6IGNvbnRleHQuZmlyc3REYXlPZldlZWssXG4gICAgc2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG4gICAgc2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuICAgIHNldFZpZXc6IGNvbnRleHQuc2V0VmlldyxcbiAgICBuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG4gICAgcHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuICAgIHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuICAgIGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuICAgIHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuICAgIGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuICAgIG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcbiAgICBjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcbiAgfSBhcyBjb25zdFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBidXR0b25WYXJpYW50cyA9IGN2YShcbiAgXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00IHNocmluay0wIFsmX3N2Z106c2hyaW5rLTAgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZVwiLFxuICB7XG4gICAgdmFyaWFudHM6IHtcbiAgICAgIHZhcmlhbnQ6IHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBzaGFkb3cteHMgaG92ZXI6YmctcHJpbWFyeS85MCcsXG4gICAgICAgIGRlc3RydWN0aXZlOlxuICAgICAgICAgICdiZy1kZXN0cnVjdGl2ZSB0ZXh0LXdoaXRlIHNoYWRvdy14cyBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG4gICAgICAgIG91dGxpbmU6XG4gICAgICAgICAgJ2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuICAgICAgICBzZWNvbmRhcnk6XG4gICAgICAgICAgJ2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1zZWNvbmRhcnkvODAnLFxuICAgICAgICBnaG9zdDpcbiAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1hY2NlbnQvNTAnLFxuICAgICAgICBsaW5rOiAndGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUnLFxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgZGVmYXVsdDogJ2gtOSBweC00IHB5LTIgaGFzLVs+c3ZnXTpweC0zJyxcbiAgICAgICAgc206ICdoLTggcm91bmRlZC1tZCBnYXAtMS41IHB4LTMgaGFzLVs+c3ZnXTpweC0yLjUnLFxuICAgICAgICBsZzogJ2gtMTAgcm91bmRlZC1tZCBweC02IGhhcy1bPnN2Z106cHgtNCcsXG4gICAgICAgIGljb246ICdzaXplLTknLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmF1bHRWYXJpYW50czoge1xuICAgICAgdmFyaWFudDogJ2RlZmF1bHQnLFxuICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIH0sXG4gIH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICB2YXJpYW50LFxuICBzaXplLFxuICBhc0NoaWxkID0gZmFsc2UsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuICBWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcbiAgICBhc0NoaWxkPzogYm9vbGVhblxuICB9KSB7XG4gIGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcFxuICAgICAgZGF0YS1zbG90PVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgQ2xhc3NWYWx1ZSB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXG5pbXBvcnQgdHlwZSB7IElsYW15Q2FsZW5kYXJQcm9wRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuICByZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU1vY2tFdmVudHMoeyBjb3VudCA9IDUgfSA9IHt9KSB7XG4gIGNvbnN0IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgZXZlbnRzLnB1c2goe1xuICAgICAgaWQ6IGkudG9TdHJpbmcoKSxcbiAgICAgIHRpdGxlOiBgTW9jayBFdmVudCAke2kgKyAxfWAsXG4gICAgICBzdGFydDogZGF5anMoKS5zdGFydE9mKCd3ZWVrJykuYWRkKGksICdkYXknKS5zdGFydE9mKCdkYXknKSxcbiAgICAgIGVuZDogZGF5anMoKS5zdGFydE9mKCd3ZWVrJykuYWRkKGksICdkYXknKS5lbmRPZignZGF5JyksXG4gICAgICBjb2xvcjogJ2JnLWdyYXktMTAwIHRleHQtZ3JheS04MDAnLFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGV2ZW50c1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoZGF0ZTogZGF5anMuRGF5anMgfCBEYXRlIHwgc3RyaW5nKTogZGF5anMuRGF5anMge1xuICBpZiAoZGF5anMuaXNEYXlqcyhkYXRlKSkge1xuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICBjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcbiAgcmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IGRheWpzKClcbn1cblxuZXhwb3J0IGNvbnN0IG9taXRLZXlzID0gPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcbiAgb2JqOiBULFxuICBrZXlzOiBLW11cbik6IE9taXQ8VCwgSz4gPT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBkZWxldGUgcmVzdWx0W2tleV1cbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50KFxuICBldmVudHM6IElsYW15Q2FsZW5kYXJQcm9wRXZlbnRbXVxuKTogQ2FsZW5kYXJFdmVudFtdIHtcbiAgaWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgIC8vIEV2ZW50cyBhcmUgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtYXQgd2l0aCBSUlVMRSBzdHJpbmdzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgc3RhcnQ6IGRheWpzLmlzRGF5anMoZXZlbnQuc3RhcnQpID8gZXZlbnQuc3RhcnQgOiBkYXlqcyhldmVudC5zdGFydCksXG4gICAgICBlbmQ6IGRheWpzLmlzRGF5anMoZXZlbnQuZW5kKSA/IGV2ZW50LmVuZCA6IGRheWpzKGV2ZW50LmVuZCksXG4gICAgfSBhcyBDYWxlbmRhckV2ZW50XG4gIH0pXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB3ZWVrZGF5IGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrZGF5LmpzJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXIuanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgbWluTWF4IGZyb20gJ2RheWpzL3BsdWdpbi9taW5NYXguanMnXG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lLmpzJ1xuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjLmpzJ1xuaW1wb3J0IGxvY2FsZURhdGEgZnJvbSAnZGF5anMvcGx1Z2luL2xvY2FsZURhdGEuanMnXG5cbi8vIEV4dGVuZCBkYXlqcyB3aXRoIHBsdWdpbnNcbmRheWpzLmV4dGVuZCh3ZWVrZGF5KVxuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSlcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pXG5kYXlqcy5leHRlbmQobWluTWF4KVxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKVxuZGF5anMuZXh0ZW5kKHV0YylcbmRheWpzLmV4dGVuZChsb2NhbGVEYXRhKVxuXG4vLyBJbXBvcnQgYWxsIGRheWpzIGxvY2FsZXMgYWxwaGFiZXRpY2FsbHlcbi8vIGxvY2FsZS5qc29uIGZpbGU6IFt7XCJrZXlcIjpcImFmXCIsXCJuYW1lXCI6XCJBZnJpa2FhbnNcIn0se1wia2V5XCI6XCJhbVwiLFwibmFtZVwiOlwiQW1oYXJpY1wifSx7XCJrZXlcIjpcImFyLWR6XCIsXCJuYW1lXCI6XCJBcmFiaWMgKEFsZ2VyaWEpXCJ9LHtcImtleVwiOlwiYXItaXFcIixcIm5hbWVcIjpcIiBBcmFiaWMgKElyYXEpXCJ9LHtcImtleVwiOlwiYXIta3dcIixcIm5hbWVcIjpcIkFyYWJpYyAoS3V3YWl0KVwifSx7XCJrZXlcIjpcImFyLWx5XCIsXCJuYW1lXCI6XCJBcmFiaWMgKEx5YmlhKVwifSx7XCJrZXlcIjpcImFyLW1hXCIsXCJuYW1lXCI6XCJBcmFiaWMgKE1vcm9jY28pXCJ9LHtcImtleVwiOlwiYXItc2FcIixcIm5hbWVcIjpcIkFyYWJpYyAoU2F1ZGkgQXJhYmlhKVwifSx7XCJrZXlcIjpcImFyLXRuXCIsXCJuYW1lXCI6XCIgQXJhYmljIChUdW5pc2lhKVwifSx7XCJrZXlcIjpcImFyXCIsXCJuYW1lXCI6XCJBcmFiaWNcIn0se1wia2V5XCI6XCJhelwiLFwibmFtZVwiOlwiQXplcmJhaWphbmlcIn0se1wia2V5XCI6XCJiZVwiLFwibmFtZVwiOlwiQmVsYXJ1c2lhblwifSx7XCJrZXlcIjpcImJnXCIsXCJuYW1lXCI6XCJCdWxnYXJpYW5cIn0se1wia2V5XCI6XCJiaVwiLFwibmFtZVwiOlwiQmlzbGFtYVwifSx7XCJrZXlcIjpcImJtXCIsXCJuYW1lXCI6XCJCYW1iYXJhXCJ9LHtcImtleVwiOlwiYm4tYmRcIixcIm5hbWVcIjpcIkJlbmdhbGkgKEJhbmdsYWRlc2gpXCJ9LHtcImtleVwiOlwiYm5cIixcIm5hbWVcIjpcIkJlbmdhbGlcIn0se1wia2V5XCI6XCJib1wiLFwibmFtZVwiOlwiVGliZXRhblwifSx7XCJrZXlcIjpcImJyXCIsXCJuYW1lXCI6XCJCcmV0b25cIn0se1wia2V5XCI6XCJic1wiLFwibmFtZVwiOlwiQm9zbmlhblwifSx7XCJrZXlcIjpcImNhXCIsXCJuYW1lXCI6XCJDYXRhbGFuXCJ9LHtcImtleVwiOlwiY3NcIixcIm5hbWVcIjpcIkN6ZWNoXCJ9LHtcImtleVwiOlwiY3ZcIixcIm5hbWVcIjpcIkNodXZhc2hcIn0se1wia2V5XCI6XCJjeVwiLFwibmFtZVwiOlwiV2Vsc2hcIn0se1wia2V5XCI6XCJkZS1hdFwiLFwibmFtZVwiOlwiR2VybWFuIChBdXN0cmlhKVwifSx7XCJrZXlcIjpcImRhXCIsXCJuYW1lXCI6XCJEYW5pc2hcIn0se1wia2V5XCI6XCJkZS1jaFwiLFwibmFtZVwiOlwiR2VybWFuIChTd2l0emVybGFuZClcIn0se1wia2V5XCI6XCJkZVwiLFwibmFtZVwiOlwiR2VybWFuXCJ9LHtcImtleVwiOlwiZHZcIixcIm5hbWVcIjpcIk1hbGRpdmlhblwifSx7XCJrZXlcIjpcImVsXCIsXCJuYW1lXCI6XCJHcmVla1wifSx7XCJrZXlcIjpcImVuLWF1XCIsXCJuYW1lXCI6XCJFbmdsaXNoIChBdXN0cmFsaWEpXCJ9LHtcImtleVwiOlwiZW4tY2FcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKENhbmFkYSlcIn0se1wia2V5XCI6XCJlbi1nYlwiLFwibmFtZVwiOlwiRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pXCJ9LHtcImtleVwiOlwiZW4taWVcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKElyZWxhbmQpXCJ9LHtcImtleVwiOlwiZW4taWxcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKElzcmFlbClcIn0se1wia2V5XCI6XCJlbi1pblwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSW5kaWEpXCJ9LHtcImtleVwiOlwiZW4tbnpcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKE5ldyBaZWFsYW5kKVwifSx7XCJrZXlcIjpcImVuLXNnXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChTaW5nYXBvcmUpXCJ9LHtcImtleVwiOlwiZW4tdHRcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFRyaW5pZGFkICYgVG9iYWdvKVwifSx7XCJrZXlcIjpcImVvXCIsXCJuYW1lXCI6XCJFc3BlcmFudG9cIn0se1wia2V5XCI6XCJlblwiLFwibmFtZVwiOlwiRW5nbGlzaFwifSx7XCJrZXlcIjpcImVzLWRvXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpXCJ9LHtcImtleVwiOlwiZXMtbXhcIixcIm5hbWVcIjpcIlNwYW5pc2ggKE1leGljbylcIn0se1wia2V5XCI6XCJlcy1wclwiLFwibmFtZVwiOlwiU3BhbmlzaCAoUHVlcnRvIFJpY28pXCJ9LHtcImtleVwiOlwiZXMtdXNcIixcIm5hbWVcIjpcIlNwYW5pc2ggKFVuaXRlZCBTdGF0ZXMpXCJ9LHtcImtleVwiOlwiZXRcIixcIm5hbWVcIjpcIkVzdG9uaWFuXCJ9LHtcImtleVwiOlwiZXNcIixcIm5hbWVcIjpcIlNwYW5pc2hcIn0se1wia2V5XCI6XCJldVwiLFwibmFtZVwiOlwiQmFzcXVlXCJ9LHtcImtleVwiOlwiZmFcIixcIm5hbWVcIjpcIlBlcnNpYW5cIn0se1wia2V5XCI6XCJmb1wiLFwibmFtZVwiOlwiRmFyb2VzZVwifSx7XCJrZXlcIjpcImZpXCIsXCJuYW1lXCI6XCJGaW5uaXNoXCJ9LHtcImtleVwiOlwiZnItY2FcIixcIm5hbWVcIjpcIkZyZW5jaCAoQ2FuYWRhKVwifSx7XCJrZXlcIjpcImZyLWNoXCIsXCJuYW1lXCI6XCJGcmVuY2ggKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcImZyXCIsXCJuYW1lXCI6XCJGcmVuY2hcIn0se1wia2V5XCI6XCJmeVwiLFwibmFtZVwiOlwiRnJpc2lhblwifSx7XCJrZXlcIjpcImdhXCIsXCJuYW1lXCI6XCJJcmlzaCBvciBJcmlzaCBHYWVsaWNcIn0se1wia2V5XCI6XCJnZFwiLFwibmFtZVwiOlwiU2NvdHRpc2ggR2FlbGljXCJ9LHtcImtleVwiOlwiZ29tLWxhdG5cIixcIm5hbWVcIjpcIktvbmthbmkgTGF0aW4gc2NyaXB0XCJ9LHtcImtleVwiOlwiZ2xcIixcIm5hbWVcIjpcIkdhbGljaWFuXCJ9LHtcImtleVwiOlwiZ3VcIixcIm5hbWVcIjpcIkd1amFyYXRpXCJ9LHtcImtleVwiOlwiaGVcIixcIm5hbWVcIjpcIkhlYnJld1wifSx7XCJrZXlcIjpcImhpXCIsXCJuYW1lXCI6XCJIaW5kaVwifSx7XCJrZXlcIjpcImhyXCIsXCJuYW1lXCI6XCJDcm9hdGlhblwifSx7XCJrZXlcIjpcImh1XCIsXCJuYW1lXCI6XCJIdW5nYXJpYW5cIn0se1wia2V5XCI6XCJodFwiLFwibmFtZVwiOlwiSGFpdGlhbiBDcmVvbGUgKEhhaXRpKVwifSx7XCJrZXlcIjpcImh5LWFtXCIsXCJuYW1lXCI6XCJBcm1lbmlhblwifSx7XCJrZXlcIjpcImlkXCIsXCJuYW1lXCI6XCJJbmRvbmVzaWFuXCJ9LHtcImtleVwiOlwiaXNcIixcIm5hbWVcIjpcIkljZWxhbmRpY1wifSx7XCJrZXlcIjpcIml0LWNoXCIsXCJuYW1lXCI6XCJJdGFsaWFuIChTd2l0emVybGFuZClcIn0se1wia2V5XCI6XCJpdFwiLFwibmFtZVwiOlwiSXRhbGlhblwifSx7XCJrZXlcIjpcImphXCIsXCJuYW1lXCI6XCJKYXBhbmVzZVwifSx7XCJrZXlcIjpcImp2XCIsXCJuYW1lXCI6XCJKYXZhbmVzZVwifSx7XCJrZXlcIjpcImthXCIsXCJuYW1lXCI6XCJHZW9yZ2lhblwifSx7XCJrZXlcIjpcImtrXCIsXCJuYW1lXCI6XCJLYXpha2hcIn0se1wia2V5XCI6XCJrbVwiLFwibmFtZVwiOlwiQ2FtYm9kaWFuXCJ9LHtcImtleVwiOlwia25cIixcIm5hbWVcIjpcIkthbm5hZGFcIn0se1wia2V5XCI6XCJrb1wiLFwibmFtZVwiOlwiS29yZWFuXCJ9LHtcImtleVwiOlwia3VcIixcIm5hbWVcIjpcIkt1cmRpc2hcIn0se1wia2V5XCI6XCJreVwiLFwibmFtZVwiOlwiS3lyZ3l6XCJ9LHtcImtleVwiOlwibGJcIixcIm5hbWVcIjpcIkx1eGVtYm91cmdpc2hcIn0se1wia2V5XCI6XCJsb1wiLFwibmFtZVwiOlwiTGFvXCJ9LHtcImtleVwiOlwibHRcIixcIm5hbWVcIjpcIkxpdGh1YW5pYW5cIn0se1wia2V5XCI6XCJsdlwiLFwibmFtZVwiOlwiTGF0dmlhblwifSx7XCJrZXlcIjpcIm1lXCIsXCJuYW1lXCI6XCJNb250ZW5lZ3JpblwifSx7XCJrZXlcIjpcIm1pXCIsXCJuYW1lXCI6XCJNYW9yaVwifSx7XCJrZXlcIjpcIm1rXCIsXCJuYW1lXCI6XCJNYWNlZG9uaWFuXCJ9LHtcImtleVwiOlwibWxcIixcIm5hbWVcIjpcIk1hbGF5YWxhbVwifSx7XCJrZXlcIjpcIm1uXCIsXCJuYW1lXCI6XCJNb25nb2xpYW5cIn0se1wia2V5XCI6XCJtclwiLFwibmFtZVwiOlwiTWFyYXRoaVwifSx7XCJrZXlcIjpcIm1zLW15XCIsXCJuYW1lXCI6XCJNYWxheVwifSx7XCJrZXlcIjpcIm1zXCIsXCJuYW1lXCI6XCJNYWxheVwifSx7XCJrZXlcIjpcIm10XCIsXCJuYW1lXCI6XCJNYWx0ZXNlIChNYWx0YSlcIn0se1wia2V5XCI6XCJteVwiLFwibmFtZVwiOlwiQnVybWVzZVwifSx7XCJrZXlcIjpcIm5iXCIsXCJuYW1lXCI6XCJOb3J3ZWdpYW4gQm9rbcOlbFwifSx7XCJrZXlcIjpcIm5lXCIsXCJuYW1lXCI6XCJOZXBhbGVzZVwifSx7XCJrZXlcIjpcIm5sLWJlXCIsXCJuYW1lXCI6XCJEdXRjaCAoQmVsZ2l1bSlcIn0se1wia2V5XCI6XCJubFwiLFwibmFtZVwiOlwiRHV0Y2hcIn0se1wia2V5XCI6XCJwbFwiLFwibmFtZVwiOlwiUG9saXNoXCJ9LHtcImtleVwiOlwicHQtYnJcIixcIm5hbWVcIjpcIlBvcnR1Z3Vlc2UgKEJyYXppbClcIn0se1wia2V5XCI6XCJwdFwiLFwibmFtZVwiOlwiUG9ydHVndWVzZVwifSx7XCJrZXlcIjpcInJuXCIsXCJuYW1lXCI6XCJLaXJ1bmRpXCJ9LHtcImtleVwiOlwicm9cIixcIm5hbWVcIjpcIlJvbWFuaWFuXCJ9LHtcImtleVwiOlwicnVcIixcIm5hbWVcIjpcIlJ1c3NpYW5cIn0se1wia2V5XCI6XCJyd1wiLFwibmFtZVwiOlwiS2lueWFyd2FuZGEgKFJ3YW5kYSlcIn0se1wia2V5XCI6XCJzZFwiLFwibmFtZVwiOlwiU2luZGhpXCJ9LHtcImtleVwiOlwic2VcIixcIm5hbWVcIjpcIk5vcnRoZXJuIFNhbWlcIn0se1wia2V5XCI6XCJzaVwiLFwibmFtZVwiOlwiU2luaGFsZXNlXCJ9LHtcImtleVwiOlwic2tcIixcIm5hbWVcIjpcIlNsb3Zha1wifSx7XCJrZXlcIjpcInNsXCIsXCJuYW1lXCI6XCJTbG92ZW5pYW5cIn0se1wia2V5XCI6XCJzcVwiLFwibmFtZVwiOlwiQWxiYW5pYW5cIn0se1wia2V5XCI6XCJzci1jeXJsXCIsXCJuYW1lXCI6XCJTZXJiaWFuIEN5cmlsbGljXCJ9LHtcImtleVwiOlwic3NcIixcIm5hbWVcIjpcInNpU3dhdGlcIn0se1wia2V5XCI6XCJzdi1maVwiLFwibmFtZVwiOlwiRmlubGFuZCBTd2VkaXNoXCJ9LHtcImtleVwiOlwic3JcIixcIm5hbWVcIjpcIlNlcmJpYW5cIn0se1wia2V5XCI6XCJzdlwiLFwibmFtZVwiOlwiU3dlZGlzaFwifSx7XCJrZXlcIjpcInN3XCIsXCJuYW1lXCI6XCJTd2FoaWxpXCJ9LHtcImtleVwiOlwidGFcIixcIm5hbWVcIjpcIlRhbWlsXCJ9LHtcImtleVwiOlwidGVcIixcIm5hbWVcIjpcIlRlbHVndVwifSx7XCJrZXlcIjpcInRldFwiLFwibmFtZVwiOlwiVGV0dW4gRGlsaSAoRWFzdCBUaW1vcilcIn0se1wia2V5XCI6XCJ0Z1wiLFwibmFtZVwiOlwiVGFqaWtcIn0se1wia2V5XCI6XCJ0aFwiLFwibmFtZVwiOlwiVGhhaVwifSx7XCJrZXlcIjpcInRrXCIsXCJuYW1lXCI6XCJUdXJrbWVuXCJ9LHtcImtleVwiOlwidGwtcGhcIixcIm5hbWVcIjpcIlRhZ2Fsb2cgKFBoaWxpcHBpbmVzKVwifSx7XCJrZXlcIjpcInRsaFwiLFwibmFtZVwiOlwiS2xpbmdvblwifSx7XCJrZXlcIjpcInRyXCIsXCJuYW1lXCI6XCJUdXJraXNoXCJ9LHtcImtleVwiOlwidHpsXCIsXCJuYW1lXCI6XCJUYWxvc3NhblwifSx7XCJrZXlcIjpcInR6bS1sYXRuXCIsXCJuYW1lXCI6XCJDZW50cmFsIEF0bGFzIFRhbWF6aWdodCBMYXRpblwifSx7XCJrZXlcIjpcInR6bVwiLFwibmFtZVwiOlwiQ2VudHJhbCBBdGxhcyBUYW1hemlnaHRcIn0se1wia2V5XCI6XCJ1Zy1jblwiLFwibmFtZVwiOlwiVXlnaHVyIChDaGluYSlcIn0se1wia2V5XCI6XCJ1a1wiLFwibmFtZVwiOlwiVWtyYWluaWFuXCJ9LHtcImtleVwiOlwidXJcIixcIm5hbWVcIjpcIlVyZHVcIn0se1wia2V5XCI6XCJ1ei1sYXRuXCIsXCJuYW1lXCI6XCJVemJlayBMYXRpblwifSx7XCJrZXlcIjpcInV6XCIsXCJuYW1lXCI6XCJVemJla1wifSx7XCJrZXlcIjpcInZpXCIsXCJuYW1lXCI6XCJWaWV0bmFtZXNlXCJ9LHtcImtleVwiOlwieC1wc2V1ZG9cIixcIm5hbWVcIjpcIlBzZXVkb1wifSx7XCJrZXlcIjpcInlvXCIsXCJuYW1lXCI6XCJZb3J1YmEgTmlnZXJpYVwifSx7XCJrZXlcIjpcInpoLWNuXCIsXCJuYW1lXCI6XCJDaGluZXNlIChDaGluYSlcIn0se1wia2V5XCI6XCJ6aC1oa1wiLFwibmFtZVwiOlwiQ2hpbmVzZSAoSG9uZyBLb25nKVwifSx7XCJrZXlcIjpcInpoLXR3XCIsXCJuYW1lXCI6XCJDaGluZXNlIChUYWl3YW4pXCJ9LHtcImtleVwiOlwiemhcIixcIm5hbWVcIjpcIkNoaW5lc2VcIn0se1wia2V5XCI6XCJvYy1sbmNcIixcIm5hbWVcIjpcIk9jY2l0YW4sIGxlbmdhZG9jaWFuIGRpYWxlY3RlXCJ9LHtcImtleVwiOlwibm5cIixcIm5hbWVcIjpcIk55bm9yc2tcIn0se1wia2V5XCI6XCJwYS1pblwiLFwibmFtZVwiOlwiUHVuamFiaSAoSW5kaWEpXCJ9XVxuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYWYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hbS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWR6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItaXEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1rdy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWx5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItbWEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1zYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmcuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm4tYmQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9icy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2NhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3MuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2N5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS1hdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tYXUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWdiLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taWUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWluLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tbnouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1zZy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLXR0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLWRvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtbXguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1wci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLXVzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ldC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2V1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZmEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9maS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnItY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci1jaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2wuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nb20tbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2d1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaGUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9odS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h5LWFtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaWQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2l0LWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9qYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2p2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ray5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ttLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva24uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2t1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva3kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2xvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21lLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21sLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21zLW15LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL215LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9uZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25sLWJlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL29jLWxuYy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3BhLWluLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcGwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wdC1ici5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3B0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcm4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9yby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3J1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcncuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zci1jeXJsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3IuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N2LWZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3YuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ZXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90Zy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90bC1waC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RsaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHpsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHptLWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90em0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91Zy1jbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdXIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ei1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdXouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS92aS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3gtcHNldWRvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUveW8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC1jbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLWhrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtdHcuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC5qcydcblxuZXhwb3J0IGRlZmF1bHQgZGF5anNcbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBDaGV2cm9uRG93bkljb24sXG4gIENoZXZyb25MZWZ0SWNvbixcbiAgQ2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlCdXR0b24gfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgRGF5UGlja2VyLCBnZXREZWZhdWx0Q2xhc3NOYW1lcyB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuICBjbGFzc05hbWUsXG4gIGNsYXNzTmFtZXMsXG4gIHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG4gIGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuICBidXR0b25WYXJpYW50ID0gJ2dob3N0JyxcbiAgZm9ybWF0dGVycyxcbiAgY29tcG9uZW50cyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuICBidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuICBjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuICByZXR1cm4gKFxuICAgIDxEYXlQaWNrZXJcbiAgICAgIHNob3dPdXRzaWRlRGF5cz17c2hvd091dHNpZGVEYXlzfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2JnLWJhY2tncm91bmQgZ3JvdXAvY2FsZW5kYXIgcC0zIFstLWNlbGwtc2l6ZTotLXNwYWNpbmcoOCldIFtbZGF0YS1zbG90PWNhcmQtY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQgW1tkYXRhLXNsb3Q9cG9wb3Zlci1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCcsXG4gICAgICAgIFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX25leHQ+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgU3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfcHJldmlvdXM+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgY2FwdGlvbkxheW91dD17Y2FwdGlvbkxheW91dH1cbiAgICAgIGZvcm1hdHRlcnM9e3tcbiAgICAgICAgZm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG4gICAgICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG4gICAgICAgIC4uLmZvcm1hdHRlcnMsXG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lcz17e1xuICAgICAgICByb290OiBjbigndy1maXQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yb290KSxcbiAgICAgICAgbW9udGhzOiBjbihcbiAgICAgICAgICAnZmxleCBnYXAtNCBmbGV4LWNvbCBtZDpmbGV4LXJvdyByZWxhdGl2ZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMubW9udGhzXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoOiBjbignZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aCksXG4gICAgICAgIG5hdjogY24oXG4gICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHctZnVsbCBhYnNvbHV0ZSB0b3AtMCBpbnNldC14LTAganVzdGlmeS1iZXR3ZWVuJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5uYXZcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX3ByZXZpb3VzOiBjbihcbiAgICAgICAgICBidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG4gICAgICAgICAgJ3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fcHJldmlvdXNcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX25leHQ6IGNuKFxuICAgICAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcbiAgICAgICAgICAnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9uZXh0XG4gICAgICAgICksXG4gICAgICAgIG1vbnRoX2NhcHRpb246IGNuKFxuICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgdy1mdWxsIHB4LSgtLWNlbGwtc2l6ZSknLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoX2NhcHRpb25cbiAgICAgICAgKSxcbiAgICAgICAgZHJvcGRvd25zOiBjbihcbiAgICAgICAgICAndy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0ganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIGdhcC0xLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duc1xuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bl9yb290OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgaGFzLWZvY3VzOmJvcmRlci1yaW5nIGJvcmRlciBib3JkZXItaW5wdXQgc2hhZG93LXhzIGhhcy1mb2N1czpyaW5nLXJpbmcvNTAgaGFzLWZvY3VzOnJpbmctWzNweF0gcm91bmRlZC1tZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25fcm9vdFxuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bjogY24oXG4gICAgICAgICAgJ2Fic29sdXRlIGJnLXBvcG92ZXIgaW5zZXQtMCBvcGFjaXR5LTAnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duXG4gICAgICAgICksXG4gICAgICAgIGNhcHRpb25fbGFiZWw6IGNuKFxuICAgICAgICAgICdzZWxlY3Qtbm9uZSBmb250LW1lZGl1bScsXG4gICAgICAgICAgY2FwdGlvbkxheW91dCA9PT0gJ2xhYmVsJ1xuICAgICAgICAgICAgPyAndGV4dC1zbSdcbiAgICAgICAgICAgIDogJ3JvdW5kZWQtbWQgcGwtMiBwci0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtc20gaC04IFsmPnN2Z106dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmPnN2Z106c2l6ZS0zLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmNhcHRpb25fbGFiZWxcbiAgICAgICAgKSxcbiAgICAgICAgdGFibGU6ICd3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlJyxcbiAgICAgICAgd2Vla2RheXM6IGNuKCdmbGV4JywgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheXMpLFxuICAgICAgICB3ZWVrZGF5OiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZmxleC0xIGZvbnQtbm9ybWFsIHRleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlcbiAgICAgICAgKSxcbiAgICAgICAgd2VlazogY24oJ2ZsZXggdy1mdWxsIG10LTInLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrKSxcbiAgICAgICAgd2Vla19udW1iZXJfaGVhZGVyOiBjbihcbiAgICAgICAgICAnc2VsZWN0LW5vbmUgdy0oLS1jZWxsLXNpemUpJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlcl9oZWFkZXJcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla19udW1iZXI6IGNuKFxuICAgICAgICAgICd0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJcbiAgICAgICAgKSxcbiAgICAgICAgZGF5OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwLTAgdGV4dC1jZW50ZXIgWyY6Zmlyc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCBbJjpsYXN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLXItbWQgZ3JvdXAvZGF5IGFzcGVjdC1zcXVhcmUgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRheVxuICAgICAgICApLFxuICAgICAgICByYW5nZV9zdGFydDogY24oXG4gICAgICAgICAgJ3JvdW5kZWQtbC1tZCBiZy1hY2NlbnQnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX3N0YXJ0XG4gICAgICAgICksXG4gICAgICAgIHJhbmdlX21pZGRsZTogY24oJ3JvdW5kZWQtbm9uZScsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX21pZGRsZSksXG4gICAgICAgIHJhbmdlX2VuZDogY24oJ3JvdW5kZWQtci1tZCBiZy1hY2NlbnQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9lbmQpLFxuICAgICAgICB0b2RheTogY24oXG4gICAgICAgICAgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZGF0YS1bc2VsZWN0ZWQ9dHJ1ZV06cm91bmRlZC1ub25lJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy50b2RheVxuICAgICAgICApLFxuICAgICAgICBvdXRzaWRlOiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFyaWEtc2VsZWN0ZWQ6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5vdXRzaWRlXG4gICAgICAgICksXG4gICAgICAgIGRpc2FibGVkOiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRpc2FibGVkXG4gICAgICAgICksXG4gICAgICAgIGhpZGRlbjogY24oJ2ludmlzaWJsZScsIGRlZmF1bHRDbGFzc05hbWVzLmhpZGRlbiksXG4gICAgICAgIC4uLmNsYXNzTmFtZXMsXG4gICAgICB9fVxuICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICBSb290OiAoeyBjbGFzc05hbWUsIHJvb3RSZWYsIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG4gICAgICAgICAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihjbGFzc05hbWUpfVxuICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgQ2hldnJvbjogKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRJY29uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgRGF5QnV0dG9uOiBDYWxlbmRhckRheUJ1dHRvbixcbiAgICAgICAgV2Vla051bWJlcjogKHsgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIHsuLi5wcm9wc30+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLSgtLWNlbGwtc2l6ZSkgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgfX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhbGVuZGFyRGF5QnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBkYXksXG4gIG1vZGlmaWVycyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlCdXR0b24+KSB7XG4gIGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW9kaWZpZXJzLmZvY3VzZWQpIHtcbiAgICAgIHJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbbW9kaWZpZXJzLmZvY3VzZWRdKVxuXG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgcmVmPXtyZWZ9XG4gICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgZGF0YS1kYXk9e2RheS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuICAgICAgZGF0YS1zZWxlY3RlZC1zaW5nbGU9e1xuICAgICAgICBtb2RpZmllcnMuc2VsZWN0ZWQgJiZcbiAgICAgICAgIW1vZGlmaWVycy5yYW5nZV9zdGFydCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX2VuZCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX21pZGRsZVxuICAgICAgfVxuICAgICAgZGF0YS1yYW5nZS1zdGFydD17bW9kaWZpZXJzLnJhbmdlX3N0YXJ0fVxuICAgICAgZGF0YS1yYW5nZS1lbmQ9e21vZGlmaWVycy5yYW5nZV9lbmR9XG4gICAgICBkYXRhLXJhbmdlLW1pZGRsZT17bW9kaWZpZXJzLnJhbmdlX21pZGRsZX1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOmJnLWFjY2VudCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLWVuZD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpib3JkZXItcmluZyBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLXJpbmcvNTAgZGFyazpob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZsZXggYXNwZWN0LXNxdWFyZSBzaXplLWF1dG8gdy1mdWxsIG1pbi13LSgtLWNlbGwtc2l6ZSkgZmxleC1jb2wgZ2FwLTEgbGVhZGluZy1ub25lIGZvbnQtbm9ybWFsIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJlbGF0aXZlIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnotMTAgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1bM3B4XSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1yLW1kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpyb3VuZGVkLW5vbmUgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLWwtbWQgWyY+c3Bhbl06dGV4dC14cyBbJj5zcGFuXTpvcGFjaXR5LTcwJyxcbiAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGF5LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBDYWxlbmRhciwgQ2FsZW5kYXJEYXlCdXR0b24gfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3hcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3BlZXIgYm9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLXByaW1hcnkgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgc2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIHNoYWRvdy14cyB0cmFuc2l0aW9uLXNoYWRvdyBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3JcbiAgICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tbm9uZVwiXG4gICAgICA+XG4gICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgPC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG4gICAgPC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmV4cG9ydCB7IENoZWNrYm94IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3RleHQtY2FyZC1mb3JlZ3JvdW5kIGZsZXggZmxleC1jb2wgZ2FwLTYgcm91bmRlZC14bCBib3JkZXIgc2hhZG93LXNtJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1oZWFkZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgQ2FyZCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZEZvb3RlcixcbiAgQ2FyZFRpdGxlLFxuICBDYXJkQWN0aW9uLFxuICBDYXJkRGVzY3JpcHRpb24sXG4gIENhcmRDb250ZW50LFxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYWxlbmRhcidcbmltcG9ydCB7XG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFBvcG92ZXJDbG9zZSB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuXG5pbnRlcmZhY2UgRGF0ZVBpY2tlclByb3BzIHtcbiAgZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZFxuICBzZXREYXRlOiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuICBsYWJlbD86IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgY2xvc2VPblNlbGVjdD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuICBkYXRlLFxuICBjbG9zZU9uU2VsZWN0LFxuICBzZXREYXRlLFxuICBsYWJlbCA9ICdQaWNrIGEgZGF0ZScsXG4gIGNsYXNzTmFtZSxcbn06IERhdGVQaWNrZXJQcm9wcykge1xuICBjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBvblNlbGVjdCA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgc2V0RGF0ZShkYXRlKVxuICAgIGlmIChjbG9zZU9uU2VsZWN0KSB7XG4gICAgICBwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgPFBvcG92ZXI+XG4gICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICd3LWZ1bGwganVzdGlmeS1zdGFydCB0ZXh0LWxlZnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAhZGF0ZSAmJiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2FsZW5kYXJJY29uIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNFwiIC8+XG4gICAgICAgICAgICB7ZGF0ZSA/IGRheWpzKGRhdGUpLmZvcm1hdCgnTU1NIEQsIFlZWVknKSA6IDxzcGFuPntsYWJlbH08L3NwYW4+fVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiIGFsaWduPVwic3RhcnRcIj5cbiAgICAgICAgICA8UG9wb3ZlckNsb3NlIHJlZj17cG9wT3ZlclJlZn0gLz5cbiAgICAgICAgICA8Q2FsZW5kYXJcbiAgICAgICAgICAgIG1vZGU9XCJzaW5nbGVcIlxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGV9XG4gICAgICAgICAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gICAgICAgICAgICBtb250aD17ZGF0ZX1cbiAgICAgICAgICAgIGluaXRpYWxGb2N1c1xuICAgICAgICAgIC8+XG4gICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICA8L1BvcG92ZXI+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBQb3BvdmVyUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBQb3BvdmVyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInBvcG92ZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJUcmlnZ2VyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG4gIHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cInBvcG92ZXItdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlckNvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGFsaWduID0gJ2NlbnRlcicsXG4gIHNpZGVPZmZzZXQgPSA0LFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8UG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8UG9wb3ZlclByaW1pdGl2ZS5Db250ZW50XG4gICAgICAgIGRhdGEtc2xvdD1cInBvcG92ZXItY29udGVudFwiXG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LTcyIG9yaWdpbi0oLS1yYWRpeC1wb3BvdmVyLWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgcm91bmRlZC1tZCBib3JkZXIgcC00IHNoYWRvdy1tZCBvdXRsaW5lLWhpZGRlbicsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgPC9Qb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cbiAgKVxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQW5jaG9yKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkFuY2hvcj4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLkFuY2hvciBkYXRhLXNsb3Q9XCJwb3BvdmVyLWFuY2hvclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZXhwb3J0IHsgUG9wb3ZlciwgUG9wb3ZlclRyaWdnZXIsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyQW5jaG9yIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBEaWFsb2dQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWRpYWxvZydcbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy1vdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cbiAgICAgIDxEaWFsb2dPdmVybGF5IC8+XG4gICAgICA8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1iYWNrZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBmaXhlZCB0b3AtWzUwJV0gbGVmdC1bNTAlXSB6LTUwIGdyaWQgdy1mdWxsIG1heC13LVtjYWxjKDEwMCUtMnJlbSldIHRyYW5zbGF0ZS14LVstNTAlXSB0cmFuc2xhdGUteS1bLTUwJV0gZ2FwLTQgcm91bmRlZC1sZyBib3JkZXIgcC02IHNoYWRvdy1sZyBkdXJhdGlvbi0yMDAgc206bWF4LXctbGcgbWF4LWgtWzkwJV0gb3ZlcmZsb3cteS1zY3JvbGwnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuICAgICAgICAgIDxYSWNvbiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cbiAgICAgICAgPC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG4gICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuICAgIDwvRGlhbG9nUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGdhcC0yIHRleHQtY2VudGVyIHNtOnRleHQtbGVmdCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy1mb290ZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpqdXN0aWZ5LWVuZCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1sZyBsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ2xvc2UsXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uLFxuICBEaWFsb2dGb290ZXIsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nT3ZlcmxheSxcbiAgRGlhbG9nUG9ydGFsLFxuICBEaWFsb2dUaXRsZSxcbiAgRGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIElucHV0KHsgY2xhc3NOYW1lLCB0eXBlLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnaW5wdXQnPikge1xuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIGRhdGEtc2xvdD1cImlucHV0XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuICAgICAgICAnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuICAgICAgICAnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgSW5wdXQgfVxuIiwKICAgICIndXNlIGNsaWVudCdcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBMYWJlbFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtbGFiZWwnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIExhYmVsKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIExhYmVsUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPExhYmVsUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cImxhYmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGxlYWRpbmctbm9uZSBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOm9wYWNpdHktNTAgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgTGFiZWwgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgU2Nyb2xsQXJlYVByb3BzXG4gIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdD4ge1xuICB2aWV3UG9ydFByb3BzPzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG59XG5cbmZ1bmN0aW9uIFNjcm9sbEFyZWEoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCAuLi5wcm9wcyB9OiBTY3JvbGxBcmVhUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdyZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnRcbiAgICAgICAgey4uLnByb3BzLnZpZXdQb3J0UHJvcHN9XG4gICAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXZpZXdwb3J0XCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuICAgICAgICAgIHByb3BzLnZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1Njcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG4gICAgICA8U2Nyb2xsQmFyIC8+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Db3JuZXIgLz5cbiAgICA8L1Njcm9sbEFyZWFQcmltaXRpdmUuUm9vdD5cbiAgKVxufVxuXG5mdW5jdGlvbiBTY3JvbGxCYXIoe1xuICBjbGFzc05hbWUsXG4gIG9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+KSB7XG4gIHJldHVybiAoXG4gICAgPFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhclxuICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcbiAgICAgIG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IHRvdWNoLW5vbmUgcC1weCB0cmFuc2l0aW9uLWNvbG9ycyBzZWxlY3Qtbm9uZScsXG4gICAgICAgIG9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmXG4gICAgICAgICAgJ2gtZnVsbCB3LTIuNSBib3JkZXItbCBib3JkZXItbC10cmFuc3BhcmVudCcsXG4gICAgICAgIG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgJiZcbiAgICAgICAgICAnaC0yLjUgZmxleC1jb2wgYm9yZGVyLXQgYm9yZGVyLXQtdHJhbnNwYXJlbnQnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVRodW1iXG4gICAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXRodW1iXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuICAgICAgLz5cbiAgICA8L1Njcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj5cbiAgKVxufVxuXG5leHBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFNlbGVjdFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2VsZWN0J1xuaW1wb3J0IHsgQ2hlY2tJY29uLCBDaGV2cm9uRG93bkljb24sIENoZXZyb25VcEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuICByZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSA9ICdkZWZhdWx0JyxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuICBzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuICAgICAgZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuICAgICAgZGF0YS1zaXplPXtzaXplfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgXCJib3JkZXItaW5wdXQgZGF0YS1bcGxhY2Vob2xkZXJdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTIgdGV4dC1zbSB3aGl0ZXNwYWNlLW5vd3JhcCBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOSBkYXRhLVtzaXplPXNtXTpoLTggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06bGluZS1jbGFtcC0xICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmZsZXggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06aXRlbXMtY2VudGVyICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0yIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgICAgPFNlbGVjdFByaW1pdGl2ZS5JY29uIGFzQ2hpbGQ+XG4gICAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00IG9wYWNpdHktNTBcIiAvPlxuICAgICAgPC9TZWxlY3RQcmltaXRpdmUuSWNvbj5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdENvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBwb3NpdGlvbiA9ICdwb3BwZXInLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuICAgICAgPFNlbGVjdFByaW1pdGl2ZS5Db250ZW50XG4gICAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1jb250ZW50XCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0KSBtaW4tdy1bOHJlbV0gb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuICAgICAgICAgIHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuICAgICAgICAgICAgJ2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICBwb3NpdGlvbj17cG9zaXRpb259XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAgPFNlbGVjdFNjcm9sbFVwQnV0dG9uIC8+XG4gICAgICAgIDxTZWxlY3RQcmltaXRpdmUuVmlld3BvcnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ3AtMScsXG4gICAgICAgICAgICBwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcbiAgICAgICAgICAgICAgJ2gtW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCldIHctZnVsbCBtaW4tdy1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgpXSBzY3JvbGwtbXktMSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1NlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydD5cbiAgICAgICAgPFNlbGVjdFNjcm9sbERvd25CdXR0b24gLz5cbiAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9TZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdExhYmVsKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5MYWJlbD4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLkxhYmVsXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtbGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0SXRlbSh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkl0ZW0+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5JdGVtXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1zbSBweS0xLjUgcHItOCBwbC0yIHRleHQtc20gb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICAgICAgICA8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG4gICAgICA8L3NwYW4+XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2VwYXJhdG9yXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2JnLWJvcmRlciBwb2ludGVyLWV2ZW50cy1ub25lIC1teC0xIG15LTEgaC1weCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuICAgICAgZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC11cC1idXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuICAgICAgZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgPC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cbiAgKVxufVxuXG5leHBvcnQge1xuICBTZWxlY3QsXG4gIFNlbGVjdENvbnRlbnQsXG4gIFNlbGVjdEdyb3VwLFxuICBTZWxlY3RJdGVtLFxuICBTZWxlY3RMYWJlbCxcbiAgU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcbiAgU2VsZWN0U2Nyb2xsVXBCdXR0b24sXG4gIFNlbGVjdFNlcGFyYXRvcixcbiAgU2VsZWN0VHJpZ2dlcixcbiAgU2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgVGFic1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtdGFicydcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gVGFicyh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUYWJzUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPFRhYnNQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwidGFic1wiXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGdhcC0yJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNMaXN0KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuTGlzdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5MaXN0XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLWxpc3RcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2JnLW11dGVkIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBpbmxpbmUtZmxleCBoLTkgdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbGcgcC1bM3B4XScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNUcmlnZ2VyKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5UcmlnZ2VyXG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLXRyaWdnZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgXCJkYXRhLVtzdGF0ZT1hY3RpdmVdOmJnLWJhY2tncm91bmQgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOnRleHQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6b3V0bGluZS1yaW5nIGRhcms6ZGF0YS1bc3RhdGU9YWN0aXZlXTpib3JkZXItaW5wdXQgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOmJnLWlucHV0LzMwIHRleHQtZm9yZWdyb3VuZCBkYXJrOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBpbmxpbmUtZmxleCBoLVtjYWxjKDEwMCUtMXB4KV0gZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBweC0yIHB5LTEgdGV4dC1zbSBmb250LW1lZGl1bSB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3N0YXRlPWFjdGl2ZV06c2hhZG93LXNtIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUYWJzQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUYWJzUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPFRhYnNQcmltaXRpdmUuQ29udGVudFxuICAgICAgZGF0YS1zbG90PVwidGFicy1jb250ZW50XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXgtMSBvdXRsaW5lLW5vbmUnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgVGFicywgVGFic0xpc3QsIFRhYnNUcmlnZ2VyLCBUYWJzQ29udGVudCB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgVG9vbHRpcFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtdG9vbHRpcCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gVG9vbHRpcFByb3ZpZGVyKHtcbiAgZGVsYXlEdXJhdGlvbiA9IDAsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Qcm92aWRlcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByaW1pdGl2ZS5Qcm92aWRlclxuICAgICAgZGF0YS1zbG90PVwidG9vbHRpcC1wcm92aWRlclwiXG4gICAgICBkZWxheUR1cmF0aW9uPXtkZWxheUR1cmF0aW9ufVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVG9vbHRpcCh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJvdmlkZXI+XG4gICAgICA8VG9vbHRpcFByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInRvb2x0aXBcIiB7Li4ucHJvcHN9IC8+XG4gICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gVG9vbHRpcFRyaWdnZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxUb29sdGlwUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwidG9vbHRpcC10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBUb29sdGlwQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgc2lkZU9mZnNldCA9IDAsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRvb2x0aXBQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8VG9vbHRpcFByaW1pdGl2ZS5Db250ZW50XG4gICAgICAgIGRhdGEtc2xvdD1cInRvb2x0aXAtY29udGVudFwiXG4gICAgICAgIHNpZGVPZmZzZXQ9e3NpZGVPZmZzZXR9XG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgYW5pbWF0ZS1pbiBmYWRlLWluLTAgem9vbS1pbi05NSBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHotNTAgdy1maXQgb3JpZ2luLSgtLXJhZGl4LXRvb2x0aXAtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQteHMgdGV4dC1iYWxhbmNlJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDxUb29sdGlwUHJpbWl0aXZlLkFycm93IGNsYXNzTmFtZT1cImJnLXByaW1hcnkgZmlsbC1wcmltYXJ5IHotNTAgc2l6ZS0yLjUgdHJhbnNsYXRlLXktW2NhbGMoLTUwJV8tXzJweCldIHJvdGF0ZS00NSByb3VuZGVkLVsycHhdXCIgLz5cbiAgICAgIDwvVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50PlxuICAgIDwvVG9vbHRpcFByaW1pdGl2ZS5Qb3J0YWw+XG4gIClcbn1cblxuZXhwb3J0IHsgVG9vbHRpcCwgVG9vbHRpcFRyaWdnZXIsIFRvb2x0aXBDb250ZW50LCBUb29sdGlwUHJvdmlkZXIgfVxuIiwKICAgICJpbXBvcnQge1xuICBEaWFsb2csXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCBSZWFjdCwgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuICByZWY6IFJlYWN0LlJlZjx7XG4gICAgb3BlbjogKCkgPT4gdm9pZFxuICAgIGNsb3NlOiAoKSA9PiB2b2lkXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG4gIH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuICBjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuICAgIHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgb3BlbjogKCkgPT4gc2V0RGlhbG9nT3Blbih0cnVlKSxcbiAgICBjbG9zZTogKCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSksXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PlxuICAgICAgc2V0U2VsZWN0ZWREYXlFdmVudHMoZGF5RXZlbnRzKSxcbiAgfSkpXG5cbiAgLy8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuICAvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuICBsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuICB3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG4gICAgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5JylcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPERpYWxvZyBvcGVuPXtkaWFsb2dPcGVufSBvbk9wZW5DaGFuZ2U9e3NldERpYWxvZ09wZW59PlxuICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LWgtWzgwdmhdIG1heC13LW1kIG92ZXJmbG93LXktYXV0b1wiPlxuICAgICAgICA8RGlhbG9nSGVhZGVyPlxuICAgICAgICAgIDxEaWFsb2dUaXRsZT5cbiAgICAgICAgICAgIHtzZWxlY3RlZERheUV2ZW50cyAmJiBzZWxlY3RlZERheUV2ZW50cy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cbiAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuICAgICAgICAgIHtzZWxlY3RlZERheUV2ZW50cyAmJlxuICAgICAgICAgICAgc2VsZWN0ZWREYXlFdmVudHMuZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlRXZlbnRcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9IC8vIFVzZSBldmVudCBJRCBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgICBrZXk9e2V2ZW50LmlkfVxuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgbXktMSBoLVszMHB4XVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9EaWFsb2dDb250ZW50PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuICBlbGVtZW50SWQsXG4gIGV2ZW50LFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICBkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuICBlbGVtZW50SWQ6IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG4gIGV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuICBjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG4gICAgaWQ6IGVsZW1lbnRJZCxcbiAgICBkYXRhOiB7XG4gICAgICBldmVudCxcbiAgICAgIHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG4gICAgfSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuICB9KVxuXG4gIC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuICBjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuICAgICAgICBldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG4gICAgICAgICdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgcm91bmRlZC1tZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCdcbiAgICAgICl9XG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG4gICAgPlxuICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNVwiPlxuICAgICAgICB7ZXZlbnQudGl0bGV9XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgIGtleT17ZWxlbWVudElkfVxuICAgICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICAgIHsuLi5hdHRyaWJ1dGVzfVxuICAgICAgICB7Li4ubGlzdGVuZXJzfVxuICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtNTAgfX1cbiAgICAgICAgbGF5b3V0XG4gICAgICAgIGxheW91dElkPXtlbGVtZW50SWR9XG4gICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuNCwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG4gICAgICAgICAgZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG4gICAgICAgICAgICA/IGRpc2FibGVFdmVudENsaWNrXG4gICAgICAgICAgICAgID8gJ2N1cnNvci1kZWZhdWx0J1xuICAgICAgICAgICAgICA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgIDogJ2N1cnNvci1ncmFiJyxcbiAgICAgICAgICBpc0RyYWdnaW5nICYmXG4gICAgICAgICAgICAhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcbiAgICAgICAgICAgICdjdXJzb3ItZ3JhYmJpbmcgc2hhZG93LWxnJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBvbkV2ZW50Q2xpY2soZXZlbnQpXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cbiAgICAgICAge3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG4gICAgICA8L21vdGlvbi5kaXY+XG4gICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcbiAgRHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuICAocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcbiAgICAvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gICAgcmV0dXJuIChcbiAgICAgIHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcbiAgICAgIHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG4gICAgICBwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG4gICAgICBwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuICAgIClcbiAgfVxuKVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJvcHBhYmxlLWNlbGwvZHJvcHBhYmxlLWNlbGwnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmludGVyZmFjZSBEYXlDZWxsUHJvcHMge1xuICBpbmRleDogbnVtYmVyIC8vIEluZGV4IG9mIHRoZSBkYXkgaW4gdGhlIHdlZWsgKDAtNilcbiAgZGF5OiBkYXlqcy5EYXlqc1xuICBkYXlNYXhFdmVudHM/OiBudW1iZXJcbiAgY2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUNlbGw6IFJlYWN0LkZDPERheUNlbGxQcm9wcz4gPSAoe1xuICBpbmRleCxcbiAgZGF5LFxuICBjbGFzc05hbWUgPSAnJyxcbn0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcbiAgY29uc3Qge1xuICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgIGN1cnJlbnREYXRlLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGRheU1heEV2ZW50cyA9IDAsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICBkYXkuc3RhcnRPZignZGF5JyksXG4gICAgZGF5LmVuZE9mKCdkYXknKVxuICApXG5cbiAgLy8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuICAvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuICBsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuICB3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG4gICAgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5JylcbiAgfVxuXG4gIC8vIEhhbmRsZXIgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyBpbiBhIGRpYWxvZ1xuICBjb25zdCBzaG93QWxsRXZlbnRzID0gKGRheTogZGF5anMuRGF5anMsIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKSA9PiB7XG4gICAgYWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/LnNldFNlbGVjdGVkRGF5RXZlbnRzKHtcbiAgICAgIGRheSxcbiAgICAgIGV2ZW50cyxcbiAgICB9KVxuICAgIGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5vcGVuKClcbiAgfVxuXG4gIGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuICBjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG4gIGNvbnN0IGlzTGFzdENvbHVtbiA9IGluZGV4ID09PSA2IC8vIFNhdHVyZGF5IGlzIHRoZSBsYXN0IGNvbHVtbiBpbiBhIHdlZWtcblxuICBjb25zdCBoaWRkZW5FdmVudHNDb3VudCA9IHRvZGF5RXZlbnRzLmxlbmd0aCAtIGRheU1heEV2ZW50c1xuICBjb25zdCBoYXNIaWRkZW5FdmVudHMgPSBoaWRkZW5FdmVudHNDb3VudCA+IDBcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICBpZD17YGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgZGF0ZT17ZGF5fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdJyxcbiAgICAgICAgICAhaXNDdXJyZW50TW9udGggJiYgJ2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgIGlzTGFzdENvbHVtbiAmJiAnYm9yZGVyLXItMCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHsvKiBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQgbXVsdGktZGF5IGJhcnMgKEdvb2dsZSBDYWxlbmRhciBzdHlsZSkgKi99XG5cbiAgICAgICAgey8qIFNpbmdsZS1kYXkgZXZlbnRzIGNvbnRhaW5lciBwb3NpdGlvbmVkIGJlbG93IG11bHRpLWRheSBldmVudHMgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgIHsvKiBEYXkgbnVtYmVyICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzIHNtOmgtNiBzbTp3LTYnLFxuICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7IGRheTogJ251bWVyaWMnIH0pLmZvcm1hdChcbiAgICAgICAgICAgICAgZGF5LnRvRGF0ZSgpXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuICAgICAgICAgIHt0b2RheUV2ZW50cy5zbGljZSgwLCBkYXlNYXhFdmVudHMpLm1hcCgoZXZlbnQsIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17YGVtcHR5LSR7cm93SW5kZXh9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bMjBweF0gdy1mdWxsXCJcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2V2ZW50Py50aXRsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG5cbiAgICAgICAgICB7LyogU2hvdyBtb3JlIGV2ZW50cyBidXR0b24gd2l0aCBhY2N1cmF0ZSBjb3VudCAqL31cbiAgICAgICAgICB7aGFzSGlkZGVuRXZlbnRzICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzIG10LTFcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgICAgICAgICAgICAgIHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgIHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXRhZy1vdmVyLXJvbGVcbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICt7aGlkZGVuRXZlbnRzQ291bnR9IG1vcmVcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIERyb3BwYWJsZUNlbGxQcm9wcyB7XG4gIGlkOiBzdHJpbmdcbiAgdHlwZTogJ2RheS1jZWxsJyB8ICd0aW1lLWNlbGwnXG4gIGRhdGU6IGRheWpzLkRheWpzXG4gIGhvdXI/OiBudW1iZXJcbiAgbWludXRlPzogbnVtYmVyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG4gIGlkLFxuICB0eXBlLFxuICBkYXRlLFxuICBob3VyLFxuICBtaW51dGUsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufTogRHJvcHBhYmxlQ2VsbFByb3BzKSB7XG4gIGNvbnN0IHsgb25DZWxsQ2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCwgZGlzYWJsZUNlbGxDbGljayB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB7IGlzT3Zlciwgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZCxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlLFxuICAgICAgZGF0ZSxcbiAgICAgIGhvdXIsXG4gICAgICBtaW51dGUsXG4gICAgfSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXRlLmhvdXIoaG91ciA/PyAwKS5taW51dGUobWludXRlID8/IDApXG4gICAgbGV0IGVuZERhdGUgPSBzdGFydERhdGUuY2xvbmUoKVxuICAgIGlmIChob3VyICE9PSB1bmRlZmluZWQgJiYgbWludXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZERhdGUgPSBlbmREYXRlLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG4gICAgfSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZERhdGUgPSBlbmREYXRlLmhvdXIoaG91ciArIDEpLm1pbnV0ZSgwKSAvLyB3ZWVrIHZpZXcgdGltZSBzbG90cyBhcmUgMSBob3VyXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZERhdGUgPSBlbmREYXRlLmhvdXIoMjMpLm1pbnV0ZSg1OSkgLy8gbW9udGggdmlldyBmdWxsIGRheVxuICAgIH1cblxuICAgIG9uQ2VsbENsaWNrKHN0YXJ0RGF0ZSwgZW5kRGF0ZSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGlzT3ZlciAmJiAhZGlzYWJsZURyYWdBbmREcm9wICYmICdiZy1hY2NlbnQnLFxuICAgICAgICBkaXNhYmxlQ2VsbENsaWNrID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBNb250aEhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBNb250aEhlYWRlcjogUmVhY3QuRkM8TW9udGhIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgY3VycmVudExvY2FsZSxcbiAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIFJlb3JkZXIgd2VlayBkYXlzIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZGF5cyA9IGRheWpzLndlZWtkYXlzKCkubWFwKChkYXkpID0+IGRheS50b0xvd2VyQ2FzZSgpKVxuICAgIGNvbnN0IHNob3J0RGF5cyA9IGRheWpzLndlZWtkYXlzU2hvcnQoKS5tYXAoKGRheSkgPT4gZGF5LnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyBSb3RhdGUgdGhlIGFycmF5IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXJzdERheU9mV2VlazsgaSsrKSB7XG4gICAgICBjb25zdCBkYXlUb01vdmUgPSBkYXlzLnNoaWZ0KClcbiAgICAgIGNvbnN0IHNob3J0RGF5VG9Nb3ZlID0gc2hvcnREYXlzLnNoaWZ0KClcbiAgICAgIGlmIChkYXlUb01vdmUpIHtcbiAgICAgICAgZGF5cy5wdXNoKGRheVRvTW92ZSlcbiAgICAgIH1cbiAgICAgIGlmIChzaG9ydERheVRvTW92ZSkge1xuICAgICAgICBzaG9ydERheXMucHVzaChzaG9ydERheVRvTW92ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBkYXlzLCBzaG9ydERheXMgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2ZpcnN0RGF5T2ZXZWVrLCBjdXJyZW50TG9jYWxlXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncmlkIGdyaWQtY29scy03IGJvcmRlci1iJyxcbiAgICAgICAgc3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMTAwJyxcbiAgICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuICAgID5cbiAgICAgIHt3ZWVrRGF5cy5kYXlzLm1hcCgod2Vla0RheSwgaW5kZXgpID0+IChcbiAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBrZXk9e3dlZWtEYXl9IG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgIGtleT17d2Vla0RheX1cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjI1LFxuICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGZpcnN0OmJvcmRlci1sXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5fWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtc20gc206aW5saW5lXCI+e3dlZWtEYXl9PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBzbTpoaWRkZW5cIj5cbiAgICAgICAgICAgICAge3dlZWtEYXlzLnNob3J0RGF5c1tpbmRleF19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjggLy8gcHggKGgtNylcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcbiAgc3VuZGF5OiAwLFxuICBtb25kYXk6IDEsXG4gIHR1ZXNkYXk6IDIsXG4gIHdlZG5lc2RheTogMyxcbiAgdGh1cnNkYXk6IDQsXG4gIGZyaWRheTogNSxcbiAgc2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuICAwOiAnc3VuZGF5JyxcbiAgMTogJ21vbmRheScsXG4gIDI6ICd0dWVzZGF5JyxcbiAgMzogJ3dlZG5lc2RheScsXG4gIDQ6ICd0aHVyc2RheScsXG4gIDU6ICdmcmlkYXknLFxuICA2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7XG4gIERBWV9OVU1CRVJfSEVJR0hULFxuICBFVkVOVF9CQVJfSEVJR0hULFxuICBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIFByb2Nlc3NlZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG4gIGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgd2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG4gIHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG4gIGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG4gIHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcbn1cblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcyB7XG4gIGRheXM6IGRheWpzLkRheWpzW11cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgPSAoe1xuICBkYXlzLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBkYXlNYXhFdmVudHMgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgd2Vla1N0YXJ0ID0gZGF5c1swXS5zdGFydE9mKCdkYXknKVxuICBjb25zdCB3ZWVrRW5kID0gZGF5c1s2XS5lbmRPZignZGF5JylcblxuICAvLyBHZXQgYWxsIGV2ZW50cyB0aGF0IGludGVyc2VjdCB3aXRoIHRoaXMgd2Vla1xuICBjb25zdCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHdlZWtTdGFydCwgd2Vla0VuZClcblxuICAvLyBTZXBhcmF0ZSBtdWx0aS1kYXkgYW5kIHNpbmdsZS1kYXkgZXZlbnRzXG4gIGNvbnN0IG11bHRpRGF5RXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoXG4gICAgKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgJ2RheScpID4gMFxuICApXG4gIGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKFxuICAgIChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsICdkYXknKSA9PT0gMFxuICApXG5cbiAgLy8gU29ydCBtdWx0aS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IGRhdGUsIHRoZW4gYnkgZHVyYXRpb25cbiAgY29uc3Qgc29ydGVkTXVsdGlEYXkgPSBbLi4ubXVsdGlEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBzdGFydERpZmYgPSBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgICBpZiAoc3RhcnREaWZmICE9PSAwKSB7XG4gICAgICByZXR1cm4gc3RhcnREaWZmXG4gICAgfVxuICAgIHJldHVybiBiLmVuZC5kaWZmKGIuc3RhcnQpIC0gYS5lbmQuZGlmZihhLnN0YXJ0KSAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG4gIH0pXG5cbiAgLy8gU29ydCBzaW5nbGUtZGF5IGV2ZW50cyBieSBzdGFydCB0aW1lXG4gIGNvbnN0IHNvcnRlZFNpbmdsZURheSA9IFsuLi5zaW5nbGVEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+XG4gICAgYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gIClcblxuICAvLyBDcmVhdGUgNyB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3NcbiAgY29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gW11cbiAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgIGdyaWRbcm93XSA9IFtdXG4gICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgNzsgY29sKyspIHtcbiAgICAgIGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogZmFsc2UsIGV2ZW50OiBudWxsIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFByb2Nlc3NlZEV2ZW50W10gPSBbXVxuXG4gIC8vIFN0ZXAgMTogQXNzaWduIHBvc2l0aW9ucyB0byBtdWx0aS1kYXkgZXZlbnRzIGZpcnN0XG4gIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkTXVsdGlEYXkpIHtcbiAgICBjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoJ2RheScpLCB3ZWVrU3RhcnQpXG4gICAgY29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oZXZlbnQuZW5kLnN0YXJ0T2YoJ2RheScpLCB3ZWVrRW5kKVxuICAgIGNvbnN0IHN0YXJ0Q29sID0gTWF0aC5tYXgoMCwgZXZlbnRTdGFydC5kaWZmKHdlZWtTdGFydCwgJ2RheScpKVxuICAgIGNvbnN0IGVuZENvbCA9IE1hdGgubWluKDYsIGV2ZW50RW5kLmRpZmYod2Vla1N0YXJ0LCAnZGF5JykpXG5cbiAgICAvLyBUcnkgdG8gcGxhY2UgdGhlIGV2ZW50IHN0YXJ0aW5nIGZyb20gaXRzIG9yaWdpbmFsIHN0YXJ0IGNvbHVtblxuICAgIGxldCBwbGFjZWRTdWNjZXNzZnVsbHkgPSBmYWxzZVxuXG4gICAgLy8gRmlyc3QgdHJ5OiBwbGFjZSBmcm9tIG9yaWdpbmFsIHN0YXJ0IHBvc2l0aW9uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBsZXQgY2FuUGxhY2UgPSB0cnVlXG4gICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgaWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgICAgY2FuUGxhY2UgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjYW5QbGFjZSkge1xuICAgICAgICBhc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50IHRvIGFsbCBpdHMgY29sdW1uc1xuICAgIGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcbiAgICAgIGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICBsZWZ0OiAoc3RhcnRDb2wgLyA3KSAqIDEwMCxcbiAgICAgICAgd2lkdGg6IChzcGFuRGF5cyAvIDcpICogMTAwLFxuICAgICAgICB0b3A6XG4gICAgICAgICAgREFZX05VTUJFUl9IRUlHSFQgK1xuICAgICAgICAgIEdBUF9CRVRXRUVOX0VMRU1FTlRTICtcbiAgICAgICAgICBhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICB9KVxuICAgICAgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIGNvdWxkbid0IHBsYWNlIGF0IG9yaWdpbmFsIHBvc2l0aW9uLCB0cnkgdHJ1bmNhdGVkIHZlcnNpb25zIHN0YXJ0aW5nIGZyb20gbGF0ZXIgZGF5c1xuICAgIGlmICghcGxhY2VkU3VjY2Vzc2Z1bGx5KSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgdHJ5U3RhcnRDb2wgPSBzdGFydENvbCArIDE7XG4gICAgICAgIHRyeVN0YXJ0Q29sIDw9IGVuZENvbDtcbiAgICAgICAgdHJ5U3RhcnRDb2wrK1xuICAgICAgKSB7XG4gICAgICAgIC8vIFRyeSB0byBwbGFjZSB0aGUgdHJ1bmNhdGVkIGV2ZW50IHN0YXJ0aW5nIGZyb20gdGhpcyBjb2x1bW5cbiAgICAgICAgbGV0IHRydW5jYXRlZEFzc2lnbmVkUm93ID0gLTFcbiAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgICAgIGxldCBjYW5QbGFjZSA9IHRydWVcbiAgICAgICAgICBmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgICAgICBjYW5QbGFjZSA9IGZhbHNlXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYW5QbGFjZSkge1xuICAgICAgICAgICAgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgZm91bmQgYSByb3cgZm9yIHRoZSB0cnVuY2F0ZWQgdmVyc2lvbiwgcGxhY2UgaXRcbiAgICAgICAgaWYgKHRydW5jYXRlZEFzc2lnbmVkUm93ICE9PSAtMSkge1xuICAgICAgICAgIGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgZ3JpZFt0cnVuY2F0ZWRBc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgdGhlIHRydW5jYXRlZCByZW5kZXJpbmdcbiAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRTcGFuRGF5cyA9IGVuZENvbCAtIHRyeVN0YXJ0Q29sICsgMVxuICAgICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgIGxlZnQ6ICh0cnlTdGFydENvbCAvIDcpICogMTAwLFxuICAgICAgICAgICAgd2lkdGg6ICh0cnVuY2F0ZWRTcGFuRGF5cyAvIDcpICogMTAwLFxuICAgICAgICAgICAgdG9wOlxuICAgICAgICAgICAgICBEQVlfTlVNQkVSX0hFSUdIVCArXG4gICAgICAgICAgICAgIEdBUF9CRVRXRUVOX0VMRU1FTlRTICtcbiAgICAgICAgICAgICAgdHJ1bmNhdGVkQXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0cnVuY2F0ZWRBc3NpZ25lZFJvdyxcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrIC8vIFN1Y2Nlc3NmdWxseSBwbGFjZWQsIHN0b3AgdHJ5aW5nIG90aGVyIHN0YXJ0IHBvc2l0aW9uc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU3RlcCAyOiBGaWxsIGdhcHMgd2l0aCBzaW5nbGUtZGF5IGV2ZW50c1xuICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZFNpbmdsZURheSkge1xuICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZignZGF5JyksIHdlZWtTdGFydClcbiAgICBjb25zdCBjb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYod2Vla1N0YXJ0LCAnZGF5JykpXG5cbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgIGFzc2lnbmVkUm93ID0gcm93XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7XG4gICAgICAgIGxlZnQ6IChjb2wgLyA3KSAqIDEwMCxcbiAgICAgICAgd2lkdGg6ICgxIC8gNykgKiAxMDAsXG4gICAgICAgIHRvcDpcbiAgICAgICAgICBEQVlfTlVNQkVSX0hFSUdIVCArXG4gICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgIGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgcG9zaXRpb246IGFzc2lnbmVkUm93LFxuICAgICAgICAuLi5ldmVudCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgV2Vla0V2ZW50c0xheWVyUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCBXZWVrRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFdlZWtFdmVudHNMYXllclByb3BzPiA9ICh7IGRheXMgfSkgPT4ge1xuICBjb25zdCB3ZWVrU3RhcnQgPSBkYXlzWzBdXG4gIGNvbnN0IHByb2Nlc3NlZFdlZWtFdmVudHMgPSB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzKHsgZGF5cyB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCBvdmVyZmxvdy1jbGlwXCI+XG4gICAgICB7cHJvY2Vzc2VkV2Vla0V2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgZXZlbnQtJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQuZm9ybWF0KFxuICAgICAgICAgICAgICAnWVlZWS1NTS1ERCdcbiAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1ldmVudC1sYXllci1ldmVudC0ke2V2ZW50LmlkfWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERyYWdnYWJsZUV2ZW50XG4gICAgICAgICAgICAgIGVsZW1lbnRJZD17YGV2ZW50LSR7ZXZlbnQuaWR9LSR7XG4gICAgICAgICAgICAgICAgZXZlbnQucG9zaXRpb25cbiAgICAgICAgICAgICAgfS0ke3dlZWtTdGFydC5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXInXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrQWxsRGF5Um93IH0gZnJvbSAnLi4vd2Vlay1hbGwtZGF5LXJvdydcbmltcG9ydCB7IFdlZWtIZWFkZXIgfSBmcm9tICcuLi93ZWVrLWhlYWRlcidcbmltcG9ydCB7IFdlZWtUaW1lR3JpZCB9IGZyb20gJy4uL3dlZWstdGltZS1ncmlkJ1xuLy8gQWRkIHdlZWtPZlllYXIgcGx1Z2luIHRvIGRheWpzXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcblxuY29uc3QgV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cIndlZWstdmlld1wiPlxuICAgICAgey8qIFdlZWsgaGVhZGVyIHJvdyAtIGZpeGVkICovfVxuICAgICAgPFdlZWtIZWFkZXIgY2xhc3NOYW1lPVwiaC1bNXJlbV1cIiAvPlxuXG4gICAgICB7LyogU2Nyb2xsYWJsZSB0aW1lIGdyaWQgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IG92ZXJmbG93LWF1dG8gaC1bY2FsYygxMDAlLTVyZW0pXVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay1zY3JvbGwtYXJlYVwiXG4gICAgICA+XG4gICAgICAgIHsvKiBBbGwtZGF5IGV2ZW50cyByb3cgLSBkeW5hbWljIGhlaWdodCBiYXNlZCBvbiBjb250ZW50ICovfVxuICAgICAgICA8V2Vla0FsbERheVJvdyAvPlxuICAgICAgICA8V2Vla1RpbWVHcmlkIC8+XG4gICAgICA8L1Njcm9sbEFyZWE+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2Vla1ZpZXdcbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICcuLi9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4uL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCwgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBjb25zdCBXZWVrQWxsRGF5Um93OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBmaXJzdERheU9mV2VlayB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBzdGFydCBhbmQgZW5kIG9mIGN1cnJlbnQgd2VlayBiYXNlZCBvbiBmaXJzdERheU9mV2VlayBzZXR0aW5nXG4gIGNvbnN0IHN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuc3RhcnRPZignd2VlaycpLmRheShmaXJzdERheU9mV2VlaylcbiAgLy8gSWYgY3VycmVudCBkYXRlIGlzIGJlZm9yZSB0aGUgc3RhcnQgb2Ygd2VlaywgbW92ZSBiYWNrIG9uZSB3ZWVrXG4gIGNvbnN0IGFkanVzdGVkU3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5pc0JlZm9yZShzdGFydE9mV2VlaylcbiAgICA/IHN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDEsICd3ZWVrJylcbiAgICA6IHN0YXJ0T2ZXZWVrXG4gIGNvbnN0IGVuZE9mV2VlayA9IGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKDYsICdkYXknKVxuXG4gIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBkYXlzIGZvciB0aGUgY3VycmVudCB3ZWVrXG4gIGNvbnN0IHdlZWtEYXlzID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICB3ZWVrRGF5cy5wdXNoKGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGksICdkYXknKSlcbiAgfVxuXG4gIC8vIEdldCBldmVudHMgdGhhdCBtaWdodCBvdmVybGFwIHdpdGggdGhpcyB3ZWVrIChleHBhbmQgc2VhcmNoIHJhbmdlKVxuICBjb25zdCBleHBhbmRlZFN0YXJ0RGF0ZSA9IGFkanVzdGVkU3RhcnRPZldlZWsuc3VidHJhY3QoNiwgJ2RheScpIC8vIExvb2sgNiBkYXlzIGJlZm9yZSB3ZWVrIHN0YXJ0XG4gIGNvbnN0IGV4cGFuZGVkRW5kRGF0ZSA9IGVuZE9mV2Vlay5hZGQoNiwgJ2RheScpIC8vIExvb2sgNiBkYXlzIGFmdGVyIHdlZWsgZW5kXG4gIGNvbnN0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZXhwYW5kZWRTdGFydERhdGUsIGV4cGFuZGVkRW5kRGF0ZSlcblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcbiAgY29uc3QgYWxsRGF5RXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hbGxEYXkpXG5cbiAgLy8gUHJvY2VzcyBhbmQgbGF5b3V0IGFsbC1kYXkgZXZlbnRzIHRvIGF2b2lkIG92ZXJsYXBwaW5nXG4gIGNvbnN0IHsgcHJvY2Vzc2VkQWxsRGF5RXZlbnRzIH0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBTb3J0IGFsbC1kYXkgZXZlbnRzIGJ5IHN0YXJ0IGRhdGUgYW5kIHRoZW4gYnkgZHVyYXRpb24gKGxvbmdlciBldmVudHMgZmlyc3QpXG4gICAgY29uc3Qgc29ydGVkRXZlbnRzID0gWy4uLmFsbERheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgLy8gRmlyc3QgY29tcGFyZSBieSBzdGFydCBkYXRlXG4gICAgICBjb25zdCBzdGFydERpZmYgPSBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgICAgIGlmIChzdGFydERpZmYgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGlmZlxuICAgICAgfVxuXG4gICAgICAvLyBJZiBzdGFydCBkYXRlcyBhcmUgdGhlIHNhbWUsIGxvbmdlciBldmVudHMgY29tZSBmaXJzdFxuICAgICAgY29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0KVxuICAgICAgY29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0KVxuICAgICAgcmV0dXJuIGJEdXJhdGlvbiAtIGFEdXJhdGlvblxuICAgIH0pXG5cbiAgICAvLyBUcmFjayBwb3NpdGlvbnMgaW4gcm93c1xuICAgIGNvbnN0IHJvd3M6IHsgZW5kOiBkYXlqcy5EYXlqczsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfVtdW10gPSBbXVxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgIHNvcnRlZEV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgLy8gQ2FsY3VsYXRlIHdoaWNoIGRheXMgdGhpcyBldmVudCBzcGFuc1xuICAgICAgY29uc3QgZXZlbnRTdGFydCA9IGV2ZW50LnN0YXJ0LmlzQmVmb3JlKGFkanVzdGVkU3RhcnRPZldlZWspXG4gICAgICAgID8gYWRqdXN0ZWRTdGFydE9mV2Vla1xuICAgICAgICA6IGV2ZW50LnN0YXJ0XG4gICAgICBjb25zdCBldmVudEVuZCA9IGV2ZW50LmVuZC5pc0FmdGVyKGVuZE9mV2VlaykgPyBlbmRPZldlZWsgOiBldmVudC5lbmRcblxuICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIGFzIHBlcmNlbnRhZ2Ugb2YgdGhlIHdlZWsgd2lkdGhcbiAgICAgIGNvbnN0IHN0YXJ0RGF5SW5kZXggPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgZXZlbnRTdGFydC5kaWZmKGFkanVzdGVkU3RhcnRPZldlZWssICdkYXknKVxuICAgICAgKVxuICAgICAgY29uc3QgZW5kRGF5SW5kZXggPSBNYXRoLm1pbig2LCBldmVudEVuZC5kaWZmKGFkanVzdGVkU3RhcnRPZldlZWssICdkYXknKSlcblxuICAgICAgY29uc3QgbGVmdCA9IChzdGFydERheUluZGV4IC8gNykgKiAxMDBcbiAgICAgIGNvbnN0IHdpZHRoID0gKChlbmREYXlJbmRleCAtIHN0YXJ0RGF5SW5kZXggKyAxKSAvIDcpICogMTAwXG5cbiAgICAgIC8vIEZpbmQgYSByb3cgd2hlcmUgdGhpcyBldmVudCBjYW4gZml0XG4gICAgICBsZXQgcm93SW5kZXggPSAwXG4gICAgICBsZXQgcGxhY2VkID0gZmFsc2VcblxuICAgICAgd2hpbGUgKCFwbGFjZWQpIHtcbiAgICAgICAgaWYgKHJvd0luZGV4ID49IHJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJvdyBpZiBuZWVkZWRcbiAgICAgICAgICByb3dzLnB1c2goW10pXG4gICAgICAgICAgcGxhY2VkID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgY2FuIGZpdCBpbiB0aGUgY3VycmVudCByb3dcbiAgICAgICAgICBjb25zdCByb3cgPSByb3dzW3Jvd0luZGV4XVxuICAgICAgICAgIGNvbnN0IGNhbkZpdCA9IHJvdy5ldmVyeSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgZXZlbnRTdGFydC5pc0FmdGVyKGl0ZW0uZW5kKSB8fFxuICAgICAgICAgICAgICBldmVudEVuZC5pc0JlZm9yZShpdGVtLmV2ZW50LnN0YXJ0KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoY2FuRml0KSB7XG4gICAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd0luZGV4KytcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGV2ZW50IHRvIHRoZSByb3dcbiAgICAgIHJvd3Nbcm93SW5kZXhdLnB1c2goeyBlbmQ6IGV2ZW50RW5kLCBldmVudCB9KVxuXG4gICAgICAvLyBBZGQgcHJvY2Vzc2VkIGV2ZW50IHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgbGVmdCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIHRvcDogcm93SW5kZXggKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc2VkQWxsRGF5RXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG4gICAgICBhbGxEYXlSb3dzQ291bnQ6IE1hdGgubWF4KDEsIHJvd3MubGVuZ3RoKSwgLy8gQXQgbGVhc3QgMSByb3csIGV2ZW4gaWYgZW1wdHlcbiAgICB9XG4gIH0sIFthbGxEYXlFdmVudHMsIGFkanVzdGVkU3RhcnRPZldlZWssIGVuZE9mV2Vla10pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy1bYXV0b18xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJdIGdyaWQtcm93cy0xIHJlbGF0aXZlXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay1hbGwtZGF5LXJvd1wiXG4gICAgPlxuICAgICAgey8qIExlZnQgbGFiZWwgZm9yIGFsbC1kYXkgZXZlbnRzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTE0IGZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJvcmRlci14IGJvcmRlci1iIHByLTIgbWluLWgtMTZcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHNcIj5cbiAgICAgICAgICBBbGwtZGF5XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRHJvcHBhYmxlIGNlbGxzIGZvciBlYWNoIGRheSAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSkgPT4gKFxuICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgIGtleT17YGFsbC1kYXktJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICBpZD17YGFsbC1kYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgICAgZGF0ZT17ZGF5fVxuICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLWZ1bGwgZmxleC0xIGN1cnNvci1wb2ludGVyIGJvcmRlci1yIGJvcmRlci1iXCJcbiAgICAgICAgLz5cbiAgICAgICkpfVxuXG4gICAgICB7LyogQWxsLWRheSBldmVudCBibG9ja3MgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwLTEgY29sLXNwYW4tNyBjb2wtc3RhcnQtMlwiPlxuICAgICAgICB7cHJvY2Vzc2VkQWxsRGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgYWxsLWRheS1jb250YWluZXItJHtldmVudC5pZH1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH1weGAsXG4gICAgICAgICAgICAgIGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERyYWdnYWJsZUV2ZW50XG4gICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGtleT17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWNsaXAgdGV4dC14cyBhYnNvbHV0ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW50ZXJmYWNlIFdlZWtIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0hlYWRlcjogUmVhY3QuRkM8V2Vla0hlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50RGF0ZSxcbiAgICBjdXJyZW50TG9jYWxlLFxuICAgIHNlbGVjdERhdGUsXG4gICAgb3BlbkV2ZW50Rm9ybSxcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBzdGFydCBhbmQgZW5kIG9mIGN1cnJlbnQgd2VlayBiYXNlZCBvbiBmaXJzdERheU9mV2VlayBzZXR0aW5nXG4gIGNvbnN0IHN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuc3RhcnRPZignd2VlaycpLmRheShmaXJzdERheU9mV2VlaylcbiAgLy8gSWYgY3VycmVudCBkYXRlIGlzIGJlZm9yZSB0aGUgc3RhcnQgb2Ygd2VlaywgbW92ZSBiYWNrIG9uZSB3ZWVrXG4gIGNvbnN0IGFkanVzdGVkU3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5pc0JlZm9yZShzdGFydE9mV2VlaylcbiAgICA/IHN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDEsICd3ZWVrJylcbiAgICA6IHN0YXJ0T2ZXZWVrXG5cbiAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIGRheXMgZm9yIHRoZSBjdXJyZW50IHdlZWtcbiAgY29uc3Qgd2Vla0RheXMgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgIHdlZWtEYXlzLnB1c2goYWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoaSwgJ2RheScpKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICAvLyBjc3MgZ3JpZCBoZWFkZXIgd2l0aCBsZWYgY29ybmVyIGNlbGwgc2hvcnRlciB0aGFuIHRoZSByZXN0XG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLVthdXRvXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl0gZ3JpZC1yb3dzLTEnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0xMDAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstaGVhZGVyXCJcbiAgICA+XG4gICAgICB7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMSB3LTE0IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIteCBib3JkZXItYiBwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+V2Vlazwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGF5IGhlYWRlciBjZWxscyAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGJvcmRlci1iJyxcbiAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZGF5KVxuICAgICAgICAgICAgICAgIG9wZW5FdmVudEZvcm0oZGF5KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTcgc206dy03IHNtOnRleHQtc20nLFxuICAgICAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuXG5pbnRlcmZhY2UgUHJvY2Vzc2VkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHsgZGF5IH06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQcm9jZXNzZWRFdmVudFtdPigoKSA9PiB7XG4gICAgbGV0IGV2ZW50c0ZvckRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgIGRheS5lbmRPZignZGF5JylcbiAgICApXG5cbiAgICAvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcbiAgICBldmVudHNGb3JEYXkgPSBldmVudHNGb3JEYXlcbiAgICAgIC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG4gICAgaWYgKGV2ZW50c0ZvckRheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG4gICAgY29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cbiAgICBsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG4gICAgbGV0IGxhc3RFdmVudEVuZDogZGF5anMuRGF5anMgfCBudWxsID0gbnVsbFxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzRm9yRGF5KSB7XG4gICAgICBpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuICAgICAgICBpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudENsdXN0ZXIgPSBbXVxuICAgICAgfVxuICAgICAgY3VycmVudENsdXN0ZXIucHVzaChldmVudClcbiAgICAgIGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZFxuICAgICAgICA/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZClcbiAgICAgICAgOiBldmVudC5lbmRcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG4gICAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cbiAgICBmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBTaW5nbGUgZXZlbnQgdGFrZXMgZnVsbCB3aWR0aFxuICAgICAgICBjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuaG91cigpICsgZXZlbnQuc3RhcnQubWludXRlKCkgLyA2MFxuICAgICAgICBsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5ob3VyKCkgKyBldmVudC5lbmQubWludXRlKCkgLyA2MFxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxEdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWVcbiAgICAgICAgY29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIDI0KSAqIDEwMFxuICAgICAgICBjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIDI0KSAqIDEwMFxuICAgICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7IC4uLmV2ZW50LCBsZWZ0OiAwLCB3aWR0aDogMTAwLCB0b3AsIGhlaWdodCB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBNdWx0aXBsZSBldmVudHMgLSB1c2UgbGF5ZXJlZCBwb3NpdGlvbmluZyBhcHByb2FjaFxuICAgICAgLy8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gWy4uLmNsdXN0ZXJdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcbiAgICAgICAgY29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuICAgICAgICAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG4gICAgICAgIGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuICAgICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICB9KVxuXG4gICAgICAvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcbiAgICAgIGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkRXZlbnRzLmxlbmd0aFxuXG4gICAgICAvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuICAgICAgLy8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcbiAgICAgIGxldCBtYXhPZmZzZXQ6IG51bWJlclxuICAgICAgaWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSAzKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuICAgICAgfSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuICAgICAgICBtYXhPZmZzZXQgPSA2MCAvLyA2MCUgdG90YWwgZm9yIDQgZXZlbnRzICgyMCUgZWFjaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc29ydGVkRXZlbnRzW2ldXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmhvdXIoKSArIGV2ZW50LnN0YXJ0Lm1pbnV0ZSgpIC8gNjBcbiAgICAgICAgbGV0IGVuZFRpbWUgPSBldmVudC5lbmQuaG91cigpICsgZXZlbnQuZW5kLm1pbnV0ZSgpIC8gNjBcblxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICAgICAgICBjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gMjQpICogMTAwXG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gMjQpICogMTAwXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcbiAgICAgICAgbGV0IGxlZnQ6IG51bWJlclxuICAgICAgICBsZXQgd2lkdGg6IG51bWJlclxuICAgICAgICBsZXQgekluZGV4OiBudW1iZXJcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoIGF0IGJvdHRvbVxuICAgICAgICAgIGxlZnQgPSAwXG4gICAgICAgICAgd2lkdGggPSAxMDBcbiAgICAgICAgICB6SW5kZXggPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuICAgICAgICAgIGxlZnQgPSBvZmZzZXRQZXJFdmVudCAqIGlcbiAgICAgICAgICB3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG4gICAgICAgICAgekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3BcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHRvcCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgekluZGV4LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbiAgfSwgW2RheSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlXSlcblxuICByZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJy4uLy4uL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5RXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheTogZGF5anMuRGF5anMgLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5RXZlbnRzTGF5ZXI6IFJlYWN0LkZDPERheUV2ZW50c0xheWVyUHJvcHM+ID0gKHtcbiAgZGF5LFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheSB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgei0zMFwiXG4gICAgPlxuICAgICAge3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnlWZXJ5VW5pcXVlS2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5LmZvcm1hdChcbiAgICAgICAgICAnWVlZWS1NTS1ERCdcbiAgICAgICAgKX1gXG4gICAgICAgIGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Bjb250YWluZXItJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH0lYCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BkcmFnZ2FibGUtJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG4gICAgICAgICAgICAgICAgJ1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlFdmVudHNMYXllciB9IGZyb20gJy4uL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcblxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PlxuICBkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG4pXG5cbmludGVyZmFjZSBXZWVrRGF5Q29sUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0RheUNvbDogUmVhY3QuRkM8V2Vla0RheUNvbFByb3BzPiA9ICh7IGRheSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgIGNsYXNzTmFtZT1cImNvbC1zcGFuLTEgcmVsYXRpdmUgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXJcIlxuICAgID5cbiAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgY29uc3QgaG91ciA9IHRpbWUuaG91cigpXG4gICAgICAgIGNvbnN0IGNlbGxEYXRlID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMjAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInXG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pfVxuXG4gICAgICB7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuICAgICAgPERheUV2ZW50c0xheWVyXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktZXZlbnRzLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRheT17ZGF5fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrRGF5Q29sIH0gZnJvbSAnLi93ZWVrLWRheS1jb2wnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5leHBvcnQgY29uc3QgV2Vla1RpbWVHcmlkOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGFuZCBlbmQgb2YgY3VycmVudCB3ZWVrIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrIHNldHRpbmdcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCd3ZWVrJykuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuICAvLyBJZiBjdXJyZW50IGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB3ZWVrLCBtb3ZlIGJhY2sgb25lIHdlZWtcbiAgY29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrKVxuICAgID8gc3RhcnRPZldlZWsuc3VidHJhY3QoMSwgJ3dlZWsnKVxuICAgIDogc3RhcnRPZldlZWtcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcblxuICAvLyBGaW5kIGlmIGN1cnJlbnQgZGF5IGlzIGluIHRoZSBkaXNwbGF5ZWQgd2Vla1xuICBjb25zdCB0b2RheUluZGV4ID0gd2Vla0RheXMuZmluZEluZGV4KChkYXkpID0+IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpKVxuICBjb25zdCBpc0N1cnJlbnRXZWVrID0gdG9kYXlJbmRleCAhPT0gLTFcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWdyaWRcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIGdyaWQgZ3JpZC1jb2xzLVthdXRvX3JlcGVhdCg3LDFmcildIGdyaWQtcm93cy1bcmVwZWF0KDI0LG1pbm1heCg2MHB4LCAxZnIpKV1cIlxuICAgID5cbiAgICAgIHsvKiBUaW1lIGxhYmVscyBjb2x1bW4gLSBmaXhlZCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXRpbWUtbGFiZWxzXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiei0xMCBjb2wtc3Bhbi0xIHctMTQgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXhcIlxuICAgICAgPlxuICAgICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gYm9yZGVyLWIgdGV4dC1yaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPFdlZWtEYXlDb2wga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IGRheT17ZGF5fSAvPlxuICAgICAgKSl9XG5cbiAgICAgIHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yICovfVxuICAgICAge2lzQ3VycmVudFdlZWsgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLWN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgei00MFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6IGAke3RvZGF5SW5kZXggKiAoMTAwIC8gNyl9JWAsXG4gICAgICAgICAgICB3aWR0aDogYCR7MTAwIC8gN30lYCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLXQgYm9yZGVyLXJlZC01MDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LTEgbWwtMSBoLTIgdy0yIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IERheUFsbERheVJvdyB9IGZyb20gJy4uL2RheS1hbGwtZGF5LXJvdydcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi4vZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERheUhlYWRlciB9IGZyb20gJy4uL2RheS1oZWFkZXInXG5pbXBvcnQgeyBEYXlUaW1lQ29sIH0gZnJvbSAnLi4vZGF5LXRpbWUtY29sJ1xuXG4vLyBGb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzLCB3ZSdsbCBkaXZpZGUgZWFjaCBob3VyIGludG8gMTUtbWludXRlIHNlZ21lbnRzXG5jb25zdCB0aW1lU2VnbWVudHMgPSBbMCwgMTUsIDMwLCA0NV1cblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgY2VsbERhdGUgPSBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImRheS12aWV3XCIgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIj5cbiAgICAgIHsvKiBEYXkgaGVhZGVyICovfVxuICAgICAgPERheUhlYWRlciBjbGFzc05hbWU9XCJoLVszcmVtXVwiIC8+XG5cbiAgICAgIHsvKiBUaW1lIGdyaWQgd2l0aG91dCBzY3JvbGxiYXIgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1zY3JvbGwtYXJlYVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LXktYXV0byBoLVtjYWxjKDEwMCUtM3JlbSldXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAqL31cbiAgICAgICAgPERheUFsbERheVJvdyAvPlxuXG4gICAgICAgIHsvKiBTZXQgYSBmaXhlZCBoZWlnaHQgY29udGFpbmVyIHRoYXQgbWF0Y2hlcyBleGFjdGx5IHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIGhvdXIgYmxvY2tzICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktdGltZS1ncmlkXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy04IGRpdmlkZS14IGJvcmRlci14XCJcbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IGAke2hvdXJzLmxlbmd0aCAqIDYwfXB4YCB9fVxuICAgICAgICA+XG4gICAgICAgICAgey8qIFRpbWUgbGFiZWxzIGNvbHVtbiAqL31cbiAgICAgICAgICA8RGF5VGltZUNvbCBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xXCIgLz5cblxuICAgICAgICAgIHsvKiBEYXkgY29sdW1uIHdpdGggZXZlbnRzICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWV2ZW50cy1jb2x1bW5cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBoLWZ1bGwgbWQ6Y29sLXNwYW4tN1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIEJhY2tncm91bmQgZ3JpZCBmb3IgdGltZSBzbG90cyAtIGxvd2VzdCBsYXllciAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYmFja2dyb3VuZC1ncmlkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aG91cnMubWFwKChob3VyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YGJnLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LSR7aG91ci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICdISCdcbiAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7LyogMTUtbWludXRlIG1hcmtlciBsaW5lcyAqL31cbiAgICAgICAgICAgICAgICAgIHt0aW1lU2VnbWVudHMuc2xpY2UoMSkubWFwKChtaW51dGVzKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BiZy0ke2hvdXIuZm9ybWF0KCdISCcpfS0ke21pbnV0ZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyIGFic29sdXRlIHctZnVsbCBib3JkZXItdCBib3JkZXItZGFzaGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB0b3A6IGAke2luZGV4ICogNjAgKyBtaW51dGVzfXB4YCB9fVxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEludGVyYWN0aXZlIGxheWVyIGZvciB0aW1lIHNsb3RzIC0gbWlkZGxlIGxheWVyIHdpdGggbm8gYm9yZGVycyAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaW50ZXJhY3RpdmUtbGF5ZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlIGluc2V0LTAgei0yMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gdGltZS5ob3VyKClcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS0wMGB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyJyl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX0tMTVgfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e2N1cnJlbnREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdXI9e2hvdXJ9XG4gICAgICAgICAgICAgICAgICAgICAgbWludXRlPXsxNX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1bMTVweF0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdGltZS1jZWxsLSR7Y2VsbERhdGV9LSR7dGltZS5mb3JtYXQoJ0hIJyl9LTMwYH1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZT17MzB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS00NWB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezQ1fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLVsxNXB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEV2ZW50cyBsYXllciAtIG1pZGRsZS10b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICA8RGF5RXZlbnRzTGF5ZXIgZGF5PXtjdXJyZW50RGF0ZX0gLz5cblxuICAgICAgICAgICAgey8qIEN1cnJlbnQgdGltZSBpbmRpY2F0b3IgLSB0b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICB7aXNUb2RheSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1jdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIGxlZnQtMCB6LTQwIGJvcmRlci10IGJvcmRlci1yZWQtNTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiBgJHsoZGF5anMoKS5ob3VyKCkgKyBkYXlqcygpLm1pbnV0ZSgpIC8gNjApICogNjB9cHhgLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC0xIC1tbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXlWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICcuLi8uLi9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4uLy4uL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IERheUFsbERheVJvdyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBjdXJyZW50IGRheSdzIGV2ZW50cyAtIHRoaXMgd2lsbCByZWZyZXNoIGF1dG9tYXRpY2FsbHkgd2hlbiBzdG9yZSB1cGRhdGVzXG4gIC8vIGJlY2F1c2UgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIGlzIGEgc2VsZWN0b3IgZnVuY3Rpb24gZnJvbSB0aGUgc3RvcmUgdGhhdCBydW5zIHdoZW5ldmVyIGV2ZW50cyBjaGFuZ2VcbiAgY29uc3QgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgIGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuICAgIGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKVxuICApXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50c1xuICBjb25zdCB7IGFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gT25seSBldmVudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgYWxsRGF5IHNob3VsZCBiZSBpbiB0aGUgYWxsLWRheSBzZWN0aW9uXG4gICAgY29uc3QgYWxsRGF5RXZ0cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hbGxEYXkpXG5cbiAgICAvLyBSZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gICAgY29uc3QgcmVndWxhckV2dHMgPSBkYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmFsbERheSlcblxuICAgIHJldHVybiB7IGFsbERheUV2ZW50czogYWxsRGF5RXZ0cywgcmVndWxhckV2ZW50czogcmVndWxhckV2dHMgfVxuICB9LCBbZGF5RXZlbnRzXSkgLy8gT25seSBkZXBlbmQgb24gdGhlIGRheUV2ZW50cyB3aGljaCBpcyByZWZyZXNoZWQgYXV0b21hdGljYWxseVxuXG4gIC8vIFByb2Nlc3MgYWxsLWRheSBldmVudHMgZm9yIGRpc3BsYXlcbiAgY29uc3QgeyBwcm9jZXNzZWRBbGxEYXlFdmVudHMgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIFNvcnQgYWxsLWRheSBldmVudHMgKGlmIG5lZWRlZClcbiAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBbLi4uYWxsRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgfSlcblxuICAgIC8vIFRyYWNrIHBvc2l0aW9ucyBpbiByb3dzIGZvciBzdGFja2luZ1xuICAgIGNvbnN0IHJvd3M6IHsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfVtdW10gPSBbXVxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgIHNvcnRlZEV2ZW50cy5mb3JFYWNoKChldmVudCwgcm93SW5kZXgpID0+IHtcbiAgICAgIGxldCBwbGFjZWQgPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIXBsYWNlZCkge1xuICAgICAgICBpZiAocm93SW5kZXggPj0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcm93IGlmIG5lZWRlZFxuICAgICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSW4gZGF5IHZpZXcsIHdlIGNhbiBwbGFjZSBvbmUgZXZlbnQgcGVyIHJvdyBhcyB0aGV5IGRvbid0IG92ZXJsYXAgaG9yaXpvbnRhbGx5XG4gICAgICAgICAgLy8gVGhpcyBpcyBzaW1wbGVyIHRoYW4gd2VlayB2aWV3IHdoZXJlIHdlIG5lZWRlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHNcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGV2ZW50IHRvIHRoZSByb3dcbiAgICAgIHJvd3Nbcm93SW5kZXhdLnB1c2goeyBldmVudCB9KVxuXG4gICAgICAvLyBBZGQgcHJvY2Vzc2VkIGV2ZW50IHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgdG9wOiByb3dJbmRleCAqIEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWFsbC1kYXktcm93XCJcbiAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTggYm9yZGVyLWIgYm9yZGVyLXhcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXItciBwci0yIG1kOmNvbC1zcGFuLTFcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHNcIj5cbiAgICAgICAgICBBbGwtZGF5XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQWxsLWRheSBldmVudHMgY29udGFpbmVyIHdpdGggZHluYW1pYyBoZWlnaHQgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTYgbWQ6Y29sLXNwYW4tNyBcIj5cbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBpZD17YGFsbC1kYXktJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IHctZnVsbCBjdXJzb3ItcG9pbnRlciBtaW4taC0xMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtwcm9jZXNzZWRBbGxEYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQgKyAncHgnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlRXZlbnRcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib3ZlcmZsb3ctY2xpcCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBgY2FsYygxMDAlIC0gdmFyKC0tc3BhY2luZykgKiAyKWAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRGF5SGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUhlYWRlcjogUmVhY3QuRkM8RGF5SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItYiBwLTIgYm9yZGVyLXgnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0xMDAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgIGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhsJyxcbiAgICAgICAgICAgIGlzVG9kYXkgJiYgJ3RleHQtcHJpbWFyeSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwieHM6aW5saW5lIGhpZGRlblwiPlxuICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgJyl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIHtpc1RvZGF5ICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgbWwtMiByb3VuZGVkLWZ1bGwgcHgtMSBweS0wLjUgdGV4dC14cyBzbTpweC0yIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgVG9kYXlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5cbi8vIEhvdXJzIHRvIGRpc3BsYXkgKGFsbCAyNCBob3VycyBvZiB0aGUgZGF5KVxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PiB7XG4gIHJldHVybiBkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG59KVxuXG5pbnRlcmZhY2UgRGF5VGltZUNvbFByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBEYXlUaW1lQ29sOiBSZWFjdC5GQzxEYXlUaW1lQ29sUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50TG9jYWxlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktdGltZS1jb2xcIlxuICAgICAgY2xhc3NOYW1lPXtgY29sLXNwYW4tMiBoLWZ1bGwgbWQ6Y29sLXNwYW4tMSAke2NsYXNzTmFtZX1gfVxuICAgID5cbiAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGtleT17dGltZS5mb3JtYXQoJ0hIOm1tJyl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9e2BkYXktdGltZS1ob3VyLSR7dGltZS5mb3JtYXQoJ0hIJyl9YH1cbiAgICAgICAgICBjbGFzc05hbWU9XCJoLVs2MHB4XSBib3JkZXItYiB0ZXh0LXJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwci0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14c1wiPlxuICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgICAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgICAgICB9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENoZWNrYm94LFxuICBEYXRlUGlja2VyLFxuICBEaWFsb2csXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uLFxuICBEaWFsb2dGb290ZXIsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nVGl0bGUsXG4gIElucHV0LFxuICBMYWJlbCxcbiAgVG9vbHRpcCxcbiAgVG9vbHRpcENvbnRlbnQsXG4gIFRvb2x0aXBQcm92aWRlcixcbiAgVG9vbHRpcFRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlci90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5cbmNvbnN0IGNvbG9yT3B0aW9ucyA9IFtcbiAgeyB2YWx1ZTogJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnLCBsYWJlbDogJ0JsdWUnIH0sXG4gIHsgdmFsdWU6ICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnLCBsYWJlbDogJ0dyZWVuJyB9LFxuICB7IHZhbHVlOiAnYmctcHVycGxlLTEwMCB0ZXh0LXB1cnBsZS04MDAnLCBsYWJlbDogJ1B1cnBsZScgfSxcbiAgeyB2YWx1ZTogJ2JnLXJlZC0xMDAgdGV4dC1yZWQtODAwJywgbGFiZWw6ICdSZWQnIH0sXG4gIHsgdmFsdWU6ICdiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTgwMCcsIGxhYmVsOiAnWWVsbG93JyB9LFxuICB7IHZhbHVlOiAnYmctcGluay0xMDAgdGV4dC1waW5rLTgwMCcsIGxhYmVsOiAnUGluaycgfSxcbiAgeyB2YWx1ZTogJ2JnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwJywgbGFiZWw6ICdJbmRpZ28nIH0sXG4gIHsgdmFsdWU6ICdiZy1hbWJlci0xMDAgdGV4dC1hbWJlci04MDAnLCBsYWJlbDogJ0FtYmVyJyB9LFxuICB7IHZhbHVlOiAnYmctZW1lcmFsZC0xMDAgdGV4dC1lbWVyYWxkLTgwMCcsIGxhYmVsOiAnRW1lcmFsZCcgfSxcbiAgeyB2YWx1ZTogJ2JnLXNreS0xMDAgdGV4dC1za3ktODAwJywgbGFiZWw6ICdTa3knIH0sXG4gIHsgdmFsdWU6ICdiZy12aW9sZXQtMTAwIHRleHQtdmlvbGV0LTgwMCcsIGxhYmVsOiAnVmlvbGV0JyB9LFxuICB7IHZhbHVlOiAnYmctcm9zZS0xMDAgdGV4dC1yb3NlLTgwMCcsIGxhYmVsOiAnUm9zZScgfSxcbiAgeyB2YWx1ZTogJ2JnLXRlYWwtMTAwIHRleHQtdGVhbC04MDAnLCBsYWJlbDogJ1RlYWwnIH0sXG4gIHsgdmFsdWU6ICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCcsIGxhYmVsOiAnT3JhbmdlJyB9LFxuXVxuXG5pbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuICBzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgc2VsZWN0ZWREYXRlPzogZGF5anMuRGF5anMgfCBudWxsXG4gIG9uQWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uVXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybTogUmVhY3QuRkM8RXZlbnRGb3JtUHJvcHM+ID0gKHtcbiAgc2VsZWN0ZWRFdmVudCxcbiAgc2VsZWN0ZWREYXRlLFxuICBvbkNsb3NlLFxuICBvblVwZGF0ZSxcbiAgb25EZWxldGUsXG4gIG9uQWRkLFxufSkgPT4ge1xuICBjb25zdCB7XG4gICAgZGlhbG9nU3RhdGUsXG4gICAgb3BlbkVkaXREaWFsb2csXG4gICAgb3BlbkRlbGV0ZURpYWxvZyxcbiAgICBjbG9zZURpYWxvZyxcbiAgICBoYW5kbGVDb25maXJtLFxuICB9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cbiAgY29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgc3RhcnQgPSBzZWxlY3RlZEV2ZW50Py5zdGFydFxuICBjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmRcblxuICAvLyBGaW5kIHBhcmVudCBldmVudCBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gIGNvbnN0IHBhcmVudEV2ZW50ID0gc2VsZWN0ZWRFdmVudFxuICAgID8gZmluZFBhcmVudFJlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpXG4gICAgOiBudWxsXG5cbiAgLy8gRm9ybSBkZWZhdWx0IHZhbHVlc1xuICBjb25zdCBkZWZhdWx0U3RhcnREYXRlID0gc2VsZWN0ZWREYXRlPy50b0RhdGUoKSB8fCBuZXcgRGF0ZSgpXG4gIGNvbnN0IGRlZmF1bHRFbmREYXRlID1cbiAgICBzZWxlY3RlZERhdGU/LmFkZCgxLCAnaG91cicpLnRvRGF0ZSgpIHx8IGRheWpzKCkuYWRkKDEsICdob3VyJykudG9EYXRlKClcblxuICAvLyBGb3JtIHN0YXRlXG4gIGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShcbiAgICBzdGFydD8udG9EYXRlKCkgfHwgZGVmYXVsdFN0YXJ0RGF0ZVxuICApXG4gIGNvbnN0IFtlbmREYXRlLCBzZXRFbmREYXRlXSA9IHVzZVN0YXRlKGVuZD8udG9EYXRlKCkgfHwgZGVmYXVsdEVuZERhdGUpXG4gIGNvbnN0IFtpc0FsbERheSwgc2V0SXNBbGxEYXldID0gdXNlU3RhdGUoc2VsZWN0ZWRFdmVudD8uYWxsRGF5IHx8IGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRDb2xvciwgc2V0U2VsZWN0ZWRDb2xvcl0gPSB1c2VTdGF0ZShcbiAgICBzZWxlY3RlZEV2ZW50Py5jb2xvciB8fCBjb2xvck9wdGlvbnNbMF0udmFsdWVcbiAgKVxuXG4gIC8vIFRpbWUgc3RhdGVcbiAgY29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKFxuICAgIHN0YXJ0ID8gc3RhcnQuZm9ybWF0KCdISDptbScpIDogZGF5anMoZGVmYXVsdFN0YXJ0RGF0ZSkuZm9ybWF0KCdISDptbScpXG4gIClcbiAgY29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUoXG4gICAgZW5kID8gZW5kLmZvcm1hdCgnSEg6bW0nKSA6IGRheWpzKGRlZmF1bHRFbmREYXRlKS5mb3JtYXQoJ0hIOm1tJylcbiAgKVxuXG4gIC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuICBjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG4gICAgdGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuICAgIGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICBsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG4gIH0pXG5cbiAgLy8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuICBjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG4gICAgcmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuICB9KVxuXG4gIC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG4gIGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHNldFN0YXJ0RGF0ZShkYXRlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICBzZXRFbmREYXRlKGRhdGUpXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGZvcm0gdmFsdWVzIHdoZW4gaW5wdXQgY2hhbmdlc1xuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IChcbiAgICBlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZSB9ID0gZS50YXJnZXRcbiAgICBzZXRGb3JtVmFsdWVzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbbmFtZV06IHZhbHVlIH0pKVxuICB9XG5cbiAgLy8gSGFuZGxlIHRpbWUgY2hhbmdlc1xuICBjb25zdCBoYW5kbGVUaW1lQ2hhbmdlID0gKFxuICAgIGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIGlzU3RhcnQ6IGJvb2xlYW5cbiAgKSA9PiB7XG4gICAgY29uc3QgdGltZVZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICBpZiAoaXNTdGFydCkge1xuICAgICAgc2V0U3RhcnRUaW1lKHRpbWVWYWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RW5kVGltZSh0aW1lVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBSZXNldCBlbmQgdGltZSB3aGVuIGFsbCBkYXkgaXMgdG9nZ2xlZCB0byBvblxuICAgIGlmIChpc0FsbERheSkge1xuICAgICAgc2V0RW5kVGltZSgnMjM6NTknKVxuICAgIH1cbiAgfSwgW2lzQWxsRGF5XSlcblxuICAvLyBIYW5kbGUgZm9ybSBzdWJtaXNzaW9uXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIENyZWF0ZSBmdWxsIGRhdGV0aW1lIG9iamVjdHMgYnkgY29tYmluaW5nIGRhdGUgYW5kIHRpbWVcbiAgICBjb25zdCBbc3RhcnRIb3Vycywgc3RhcnRNaW51dGVzXSA9IHN0YXJ0VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gICAgY29uc3QgW2VuZEhvdXJzLCBlbmRNaW51dGVzXSA9IGVuZFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXG4gICAgbGV0IHN0YXJ0RGF0ZVRpbWUgPSBkYXlqcyhzdGFydERhdGUpLmhvdXIoc3RhcnRIb3VycykubWludXRlKHN0YXJ0TWludXRlcylcblxuICAgIGxldCBlbmREYXRlVGltZSA9IGRheWpzKGVuZERhdGUpLmhvdXIoZW5kSG91cnMpLm1pbnV0ZShlbmRNaW51dGVzKVxuXG4gICAgLy8gRm9yIGFsbC1kYXkgZXZlbnRzLCBzZXQgYXBwcm9wcmlhdGUgdGltZXNcbiAgICBpZiAoaXNBbGxEYXkpIHtcbiAgICAgIHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lLmhvdXIoMCkubWludXRlKDApXG4gICAgICBlbmREYXRlVGltZSA9IGVuZERhdGVUaW1lLmhvdXIoMjMpLm1pbnV0ZSg1OSlcbiAgICB9XG5cbiAgICBjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICBpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG4gICAgICB0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcbiAgICAgIHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuICAgICAgZW5kOiBlbmREYXRlVGltZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuICAgICAgbG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG4gICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgY29sb3I6IHNlbGVjdGVkQ29sb3IsXG4gICAgICBycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuICAgICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcbiAgICAgICAgLy8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2dcbiAgICAgICAgb3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuICAgICAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuICAgICAgICAgIGVuZDogZW5kRGF0ZVRpbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG4gICAgICAgICAgYWxsRGF5OiBpc0FsbERheSxcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRDb2xvcixcbiAgICAgICAgICBycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcbiAgICAgIH1cbiAgICAgIG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkFkZD8uKGV2ZW50RGF0YSlcbiAgICB9XG5cbiAgICBvbkNsb3NlKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZSA9ICgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnRcbiAgICAgIGlmIChpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG4gICAgICAgIC8vIFNob3cgcmVjdXJyaW5nIGV2ZW50IGRlbGV0ZSBkaWFsb2dcbiAgICAgICAgb3BlbkRlbGV0ZURpYWxvZyhzZWxlY3RlZEV2ZW50KVxuICAgICAgICByZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcbiAgICAgIH1cbiAgICAgIG9uRGVsZXRlPy4oc2VsZWN0ZWRFdmVudClcbiAgICAgIG9uQ2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVJSdWxlQ2hhbmdlID0gKG5ld1JSdWxlOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB7XG4gICAgaWYgKG5ld1JSdWxlKSB7XG4gICAgICAvLyBDcmVhdGUgZHRzdGFydCB3aXRoIHRoZSBzYW1lIGxvZ2ljIGFzIGluIGhhbmRsZVN1Ym1pdFxuICAgICAgY29uc3QgW3N0YXJ0SG91cnMsIHN0YXJ0TWludXRlc10gPSBzdGFydFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuICAgICAgbGV0IHN0YXJ0RGF0ZVRpbWUgPSBkYXlqcyhzdGFydERhdGUpLmhvdXIoc3RhcnRIb3VycykubWludXRlKHN0YXJ0TWludXRlcylcblxuICAgICAgaWYgKGlzQWxsRGF5KSB7XG4gICAgICAgIHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lLmhvdXIoMCkubWludXRlKDApXG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBkdHN0YXJ0IGlzIGFsd2F5cyBpbmNsdWRlZCBpbiBSUnVsZU9wdGlvbnMgYXMgYSBEYXRlIG9iamVjdFxuICAgICAgY29uc3QgY29tcGxldGVScnVsZTogUlJ1bGVPcHRpb25zID0ge1xuICAgICAgICAuLi5uZXdSUnVsZSxcbiAgICAgICAgZHRzdGFydDogc3RhcnREYXRlVGltZS50b0RhdGUoKSwgLy8gQ29udmVydCBkYXlqcyB0byBEYXRlXG4gICAgICB9XG4gICAgICBzZXRScnVsZShjb21wbGV0ZVJydWxlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRScnVsZShudWxsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGVuZCBkYXRlIGlzIG5vdCBiZWZvcmUgc3RhcnQgZGF0ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkYXlqcyhzdGFydERhdGUpLmlzQWZ0ZXIoZGF5anMoZW5kRGF0ZSkpKSB7XG4gICAgICBzZXRFbmREYXRlKHN0YXJ0RGF0ZSlcbiAgICB9XG4gIH0sIFtzdGFydERhdGUsIGVuZERhdGVdKVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEaWFsb2cgb3Blbj17dHJ1ZX0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwidy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02XCI+XG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAgICA8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNFwiPlxuICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cbiAgICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgPyAnRWRpdCBFdmVudCcgOiAnQ3JlYXRlIEV2ZW50J31cbiAgICAgICAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgICAgICAgPERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZFxuICAgICAgICAgICAgICAgICAgPyAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnXG4gICAgICAgICAgICAgICAgICA6ICdBZGQgYSBuZXcgZXZlbnQgdG8geW91ciBjYWxlbmRhcid9XG4gICAgICAgICAgICAgIDwvRGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHB5LTIgc206Z2FwLTQgc206cHktNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cInRpdGxlXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICBUaXRsZVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcy50aXRsZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRXZlbnQgdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJkZXNjcmlwdGlvblwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkV2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgaWQ9XCJhbGxEYXlcIlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNBbGxEYXl9XG4gICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiYWxsRGF5XCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICBBbGwgZGF5XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5TdGFydCBEYXRlPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU9e3N0YXJ0RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xXCJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VPblNlbGVjdFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPkVuZCBEYXRlPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU9e2VuZERhdGV9XG4gICAgICAgICAgICAgICAgICAgIHNldERhdGU9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7IWlzQWxsRGF5ICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwic3RhcnQtdGltZVwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IFRpbWVcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdGFydC10aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3N0YXJ0VGltZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRpbWVDaGFuZ2UoZSwgdHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImVuZC10aW1lXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgRW5kIFRpbWVcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlbmQtdGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlbmRUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGltZUNoYW5nZShlLCBmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPkNvbG9yPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8VG9vbHRpcFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICB7Y29sb3JPcHRpb25zLm1hcCgoY29sb3IpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBrZXk9e2NvbG9yLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NvbG9yLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRDb2xvcihjb2xvci52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57Y29sb3IubGFiZWx9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibG9jYXRpb25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIExvY2F0aW9uXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwibG9jYXRpb25cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cbiAgICAgICAgICAgICAgPFJlY3VycmVuY2VFZGl0b3IgdmFsdWU9e3JydWxlfSBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC0yIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTptdC00IHNtOmZsZXgtcm93IHNtOmdhcC0wXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHNtOm1yLWF1dG8gc206dy1hdXRvXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIiBzaXplPVwic21cIj5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/ICdVcGRhdGUnIDogJ0NyZWF0ZSd9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9EaWFsb2dGb290ZXI+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgICA8L0RpYWxvZz5cblxuICAgICAgey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cbiAgICAgIDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuICAgICAgICBpc09wZW49e2RpYWxvZ1N0YXRlLmlzT3Blbn1cbiAgICAgICAgb25DbG9zZT17Y2xvc2VEaWFsb2d9XG4gICAgICAgIG9uQ29uZmlybT17aGFuZGxlQ29uZmlybX1cbiAgICAgICAgb3BlcmF0aW9uVHlwZT17ZGlhbG9nU3RhdGUub3BlcmF0aW9uVHlwZX1cbiAgICAgICAgZXZlbnRUaXRsZT17ZGlhbG9nU3RhdGUuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IG9taXRLZXlzLCBzYWZlRGF0ZSB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgaXNSZWN1cnJpbmdFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gQm9vbGVhbihldmVudC5ycnVsZSB8fCBldmVudC5yZWN1cnJlbmNlSWQgfHwgZXZlbnQudWlkKVxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG4gIGV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuICBzdGFydERhdGU6IGRheWpzLkRheWpzXG4gIGVuZERhdGU6IGRheWpzLkRheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG4gIGV2ZW50LFxuICBjdXJyZW50RXZlbnRzLFxuICBzdGFydERhdGUsXG4gIGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgLy8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcbiAgaWYgKCFldmVudC5ycnVsZSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgcnVsZSBmcm9tIFJSdWxlT3B0aW9ucyBlbnN1cmluZyBkdHN0YXJ0IGlzIGFsd2F5cyBwcm92aWRlZFxuICAgIC8vIElmIGR0c3RhcnQgaXMgbWlzc2luZyBmcm9tIHRoZSBSUlVMRSwgdXNlIHRoZSBldmVudCdzIHN0YXJ0IHRpbWUgYXMgZmFsbGJhY2tcbiAgICBjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuICAgICAgLi4uZXZlbnQucnJ1bGUsXG4gICAgICBkdHN0YXJ0OiBldmVudC5ycnVsZS5kdHN0YXJ0IHx8IGV2ZW50LnN0YXJ0LnRvRGF0ZSgpLFxuICAgIH1cbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKHJ1bGVPcHRpb25zKVxuXG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gY3VycmVudEV2ZW50cy5maWx0ZXIoXG4gICAgICAoZSkgPT4gZS5yZWN1cnJlbmNlSWQgJiYgZS51aWQgPT09IGV2ZW50LnVpZFxuICAgIClcblxuICAgIC8vIEdlbmVyYXRlIG9jY3VycmVuY2VzIHdpdGhpbiB0aGUgZGF0ZSByYW5nZVxuICAgIGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGUudG9EYXRlKClcbiAgICBjb25zdCBlbmREYXRlVGltZSA9IGVuZERhdGUudG9EYXRlKClcbiAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihzdGFydERhdGVUaW1lLCBlbmREYXRlVGltZSwgdHJ1ZSlcblxuICAgIC8vIENvbnZlcnQgb2NjdXJyZW5jZXMgdG8gQ2FsZW5kYXJFdmVudCBpbnN0YW5jZXNcbiAgICBjb25zdCByZWN1cnJpbmdFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IG9jY3VycmVuY2VzXG4gICAgICAubWFwKChvY2N1cnJlbmNlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBvY2N1cnJlbmNlRGF0ZSA9IGRheWpzKG9jY3VycmVuY2UpXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nT3ZlcnJpZGUgPSBvdmVycmlkZXMuZmluZCgoZSkgPT5cbiAgICAgICAgICBzYWZlRGF0ZShlLnJlY3VycmVuY2VJZCkuaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuICAgICAgICApXG5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG4gICAgICAgIGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuICAgICAgICBjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG4gICAgICAgIGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgICAgY29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcbiAgICAgICAgY29uc3QgcGFyZW50VUlEID0gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBpZDogcmVjdXJyaW5nRXZlbnRJZCxcbiAgICAgICAgICBzdGFydDogb2NjdXJyZW5jZURhdGUsXG4gICAgICAgICAgZW5kOiBuZXdFbmRUaW1lLFxuICAgICAgICAgIHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuICAgICAgICAgIHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVjdXJyaW5nRXZlbnRcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuICAgICAgICAvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG4gICAgICAgIGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICBpZiAoIWhhc0V4ZGF0ZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcbiAgICAgICAgY29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXMuaW5jbHVkZXMoZXZlbnRTdGFydElTTylcbiAgICAgICAgcmV0dXJuICFpc0V4Y2x1ZGVkXG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICApXG4gIH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuICB0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG4gIGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuICBzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuICB0YXJnZXRFdmVudCxcbiAgdXBkYXRlcyxcbiAgY3VycmVudEV2ZW50cyxcbiAgc2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG4gIC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG4gIGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcbiAgICBjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcbiAgICByZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcbiAgfSlcblxuICBpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuICB9XG5cbiAgY29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuICBzd2l0Y2ggKHNjb3BlKSB7XG4gICAgY2FzZSAndGhpcyc6IHtcbiAgICAgIC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG4gICAgICBjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuICAgICAgY29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cbiAgICAgIGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG4gICAgICAvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuICAgICAgY29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG4gICAgICBjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcbiAgICAgICAgLi4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgICBpZDogbW9kaWZpZWRFdmVudElkLFxuICAgICAgICByZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuICAgICAgICB1aWQ6IGJhc2VFdmVudC51aWQgfHwgYCR7YmFzZUV2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmAsIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuICAgICAgICBycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG4gICAgICB9IGFzIENhbGVuZGFyRXZlbnRcbiAgICAgIHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdmb2xsb3dpbmcnOiB7XG4gICAgICAvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcbiAgICAgIGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuICAgICAgY29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG4gICAgICAvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuICAgICAgY29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIHJydWxlOiB7XG4gICAgICAgICAgLi4uYmFzZUV2ZW50LnJydWxlLFxuICAgICAgICAgIHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG4gICAgICAvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG4gICAgICBjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcbiAgICAgIGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcbiAgICAgIGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuICAgICAgICB1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG4gICAgICBjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuICAgICAgY29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG4gICAgICBjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgICBycnVsZToge1xuICAgICAgICAgIC4uLmJhc2VFdmVudC5ycnVsZSxcbiAgICAgICAgICAuLi51cGRhdGVzLnJydWxlLFxuICAgICAgICAgIGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IG5ld1Nlcmllc0lkLFxuICAgICAgICB1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuICAgICAgICBzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuICAgICAgICBlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG4gICAgICAgIHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdhbGwnOiB7XG4gICAgICAvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgICAgIGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG4gICAgICApXG4gIH1cblxuICByZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG4gIHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuICBzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuICB0YXJnZXRFdmVudCxcbiAgY3VycmVudEV2ZW50cyxcbiAgc2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG4gIC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG4gIGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcbiAgICBjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcbiAgICByZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcbiAgfSlcblxuICBpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuICB9XG5cbiAgY29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuICBzd2l0Y2ggKHNjb3BlKSB7XG4gICAgY2FzZSAndGhpcyc6IHtcbiAgICAgIC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG4gICAgICBjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuICAgICAgY29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cbiAgICAgIGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG4gICAgICB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnZm9sbG93aW5nJzoge1xuICAgICAgLy8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcbiAgICAgIGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuICAgICAgY29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG4gICAgICBjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgcnJ1bGU6IHtcbiAgICAgICAgICAuLi5iYXNlRXZlbnQucnJ1bGUsXG4gICAgICAgICAgdW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2FsbCc6IHtcbiAgICAgIC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuICAgICAgY29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuICAgICAgICAoZSkgPT4gZS51aWQgIT09IHRhcmdldEV2ZW50LnVpZFxuICAgICAgKVxuICAgICAgcmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG4gICAgICApXG4gIH1cblxuICByZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQge1xuICBDYXJkLFxuICBDYXJkQ29udGVudCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBDaGVja2JveCxcbiAgRGF0ZVBpY2tlcixcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBTZWxlY3QsXG4gIFNlbGVjdENvbnRlbnQsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdFRyaWdnZXIsXG4gIFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5cbi8vIE5hdHVyYWwgbGFuZ3VhZ2UgZGVzY3JpcHRpb24gZnVuY3Rpb24gdXNpbmcgUlJ1bGUncyBidWlsdC1pbiBoZWxwZXIgbWV0aG9kc1xuZnVuY3Rpb24gZ2V0UlJ1bGVEZXNjcmlwdGlvbihycnVsZU9wdGlvbnM6IFJSdWxlT3B0aW9ucyB8IG51bGwpOiBzdHJpbmcge1xuICBpZiAoIXJydWxlT3B0aW9ucykge1xuICAgIHJldHVybiAnQ3VzdG9tIHJlY3VycmVuY2UnXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBSUnVsZSBpbnN0YW5jZSBkaXJlY3RseSBmcm9tIG9wdGlvbnNcbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKHJydWxlT3B0aW9ucylcblxuICAgIC8vIFVzZSBSUnVsZSdzIGJ1aWx0LWluIG5hdHVyYWwgbGFuZ3VhZ2UgY29udmVyc2lvbiB3aXRoIHRvVGV4dCgpXG4gICAgY29uc3QgbmF0dXJhbFRleHQgPSBydWxlLnRvVGV4dCgpXG5cbiAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgUlJ1bGUgY2FuJ3QgY29udmVydCB0byBuYXR1cmFsIGxhbmd1YWdlXG4gICAgaWYgKFxuICAgICAgIW5hdHVyYWxUZXh0IHx8XG4gICAgICBuYXR1cmFsVGV4dC5pbmNsdWRlcygnUlJ1bGUgZXJyb3InKSB8fFxuICAgICAgbmF0dXJhbFRleHQuaW5jbHVkZXMoJ1VuYWJsZSB0byBmdWxseSBjb252ZXJ0JykgfHxcbiAgICAgIG5hdHVyYWxUZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcbiAgICApIHtcbiAgICAgIHJldHVybiAnQ3VzdG9tIHJlY3VycmVuY2UnXG4gICAgfVxuXG4gICAgLy8gQ2FwaXRhbGl6ZSBmaXJzdCBsZXR0ZXIgZm9yIGNvbnNpc3RlbnQgZm9ybWF0dGluZ1xuICAgIHJldHVybiBuYXR1cmFsVGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hdHVyYWxUZXh0LnNsaWNlKDEpXG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHJldHVybiBmYWxsYmFja1xuICAgIHJldHVybiAnQ3VzdG9tIHJlY3VycmVuY2UnXG4gIH1cbn1cblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0b3JQcm9wcyB7XG4gIHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuICBvbkNoYW5nZTogKHJydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4gdm9pZFxufVxuXG5jb25zdCBXRUVLX0RBWVM6IHsgdmFsdWU6IFdlZWtkYXk7IGxhYmVsOiBzdHJpbmc7IHNob3J0OiBzdHJpbmcgfVtdID0gW1xuICB7IHZhbHVlOiBSUnVsZS5TVSwgbGFiZWw6ICdTdW5kYXknLCBzaG9ydDogJ1N1bicgfSxcbiAgeyB2YWx1ZTogUlJ1bGUuTU8sIGxhYmVsOiAnTW9uZGF5Jywgc2hvcnQ6ICdNb24nIH0sXG4gIHsgdmFsdWU6IFJSdWxlLlRVLCBsYWJlbDogJ1R1ZXNkYXknLCBzaG9ydDogJ1R1ZScgfSxcbiAgeyB2YWx1ZTogUlJ1bGUuV0UsIGxhYmVsOiAnV2VkbmVzZGF5Jywgc2hvcnQ6ICdXZWQnIH0sXG4gIHsgdmFsdWU6IFJSdWxlLlRILCBsYWJlbDogJ1RodXJzZGF5Jywgc2hvcnQ6ICdUaHUnIH0sXG4gIHsgdmFsdWU6IFJSdWxlLkZSLCBsYWJlbDogJ0ZyaWRheScsIHNob3J0OiAnRnJpJyB9LFxuICB7IHZhbHVlOiBSUnVsZS5TQSwgbGFiZWw6ICdTYXR1cmRheScsIHNob3J0OiAnU2F0JyB9LFxuXVxuXG5leHBvcnQgY29uc3QgUmVjdXJyZW5jZUVkaXRvcjogUmVhY3QuRkM8UmVjdXJyZW5jZUVkaXRvclByb3BzPiA9ICh7XG4gIHZhbHVlLFxuICBvbkNoYW5nZSxcbn0pID0+IHtcbiAgY29uc3QgW3Nob3dSZWN1cnJlbmNlLCBzZXRTaG93UmVjdXJyZW5jZV0gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IFJSdWxlIGZyZXF1ZW5jeSB0byBzdHJpbmdcbiAgY29uc3QgZ2V0RnJlcXVlbmN5U3RyaW5nID0gKGZyZXE6IFJSdWxlT3B0aW9uc1snZnJlcSddKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBmcmVxTWFwOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAgICAgW1JSdWxlLkRBSUxZXTogJ0RBSUxZJyxcbiAgICAgIFtSUnVsZS5XRUVLTFldOiAnV0VFS0xZJyxcbiAgICAgIFtSUnVsZS5NT05USExZXTogJ01PTlRITFknLFxuICAgICAgW1JSdWxlLllFQVJMWV06ICdZRUFSTFknLFxuICAgIH1cbiAgICByZXR1cm4gZnJlcU1hcFtmcmVxXSB8fCAnREFJTFknXG4gIH1cblxuICAvLyBXb3JrIHdpdGggY29tcGxldGUgUlJ1bGVPcHRpb25zIC0gZHRzdGFydCBjb21lcyBmcm9tIHBhcmVudCBFdmVudEZvcm1cbiAgY29uc3QgW3JydWxlT3B0aW9ucywgc2V0UlJ1bGVPcHRpb25zXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KFxuICAgICgpID0+IHZhbHVlIHx8IG51bGxcbiAgKVxuXG4gIC8vIFN5bmMgc3RhdGUgd2hlbiB2YWx1ZSBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTaG93UmVjdXJyZW5jZSghIXZhbHVlKVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgc2V0UlJ1bGVPcHRpb25zKHZhbHVlKVxuICAgIH1cbiAgfSwgW3ZhbHVlXSlcblxuICBjb25zdCB1cGRhdGVSUnVsZSA9ICh1cGRhdGVzOiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcbiAgICBpZiAoIXJydWxlT3B0aW9ucykge1xuICAgICAgcmV0dXJuIC8vIENhbid0IHVwZGF0ZSBpZiBubyBiYXNlIG9wdGlvbnMgZXhpc3RcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7IC4uLnJydWxlT3B0aW9ucywgLi4udXBkYXRlcyB9XG4gICAgc2V0UlJ1bGVPcHRpb25zKG5ld09wdGlvbnMpXG5cbiAgICBpZiAoc2hvd1JlY3VycmVuY2UpIHtcbiAgICAgIG9uQ2hhbmdlKG5ld09wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUmVjdXJyZW5jZVRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgc2V0U2hvd1JlY3VycmVuY2UoY2hlY2tlZClcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgaWYgKHJydWxlT3B0aW9ucykge1xuICAgICAgICBvbkNoYW5nZShycnVsZU9wdGlvbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBSUnVsZSB3aGVuIHRvZ2dsaW5nIG9uIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAvLyBOb3RlOiBkdHN0YXJ0IHdpbGwgYmUgc2V0IGJ5IHRoZSBwYXJlbnQgRXZlbnRGb3JtXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSUnVsZTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0ge1xuICAgICAgICAgIGZyZXE6IFJSdWxlLkRBSUxZLFxuICAgICAgICAgIGludGVydmFsOiAxLFxuICAgICAgICB9XG4gICAgICAgIHNldFJSdWxlT3B0aW9ucyhkZWZhdWx0UlJ1bGUgYXMgUlJ1bGVPcHRpb25zKVxuICAgICAgICBvbkNoYW5nZShkZWZhdWx0UlJ1bGUgYXMgUlJ1bGVPcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShudWxsKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZyZXF1ZW5jeUNoYW5nZSA9IChmcmVxdWVuY3k6IHN0cmluZykgPT4ge1xuICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFJSdWxlIGZyZXF1ZW5jeSBjb25zdGFudFxuICAgIGNvbnN0IGZyZXFNYXA6IFJlY29yZDxzdHJpbmcsIFJSdWxlT3B0aW9uc1snZnJlcSddPiA9IHtcbiAgICAgIERBSUxZOiBSUnVsZS5EQUlMWSxcbiAgICAgIFdFRUtMWTogUlJ1bGUuV0VFS0xZLFxuICAgICAgTU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcbiAgICAgIFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxuICAgIH1cbiAgICB1cGRhdGVSUnVsZSh7IGZyZXE6IGZyZXFNYXBbZnJlcXVlbmN5XSB8fCBSUnVsZS5EQUlMWSB9KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlSW50ZXJ2YWxDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChlLnRhcmdldC52YWx1ZSkgfHwgMSlcbiAgICB1cGRhdGVSUnVsZSh7IGludGVydmFsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVFbmRUeXBlQ2hhbmdlID0gKGVuZFR5cGU6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJykgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZXM6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPiA9IHt9XG5cbiAgICBpZiAoZW5kVHlwZSA9PT0gJ25ldmVyJykge1xuICAgICAgLy8gUmVtb3ZlIGNvdW50IGFuZCB1bnRpbFxuICAgICAgdXBkYXRlcy5jb3VudCA9IHVuZGVmaW5lZFxuICAgICAgdXBkYXRlcy51bnRpbCA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoZW5kVHlwZSA9PT0gJ2NvdW50Jykge1xuICAgICAgLy8gU2V0IGRlZmF1bHQgY291bnQgaWYgbm9uZSBleGlzdHMsIHJlbW92ZSB1bnRpbFxuICAgICAgdXBkYXRlcy5jb3VudCA9IHJydWxlT3B0aW9ucz8uY291bnQgfHwgMVxuICAgICAgdXBkYXRlcy51bnRpbCA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoZW5kVHlwZSA9PT0gJ3VudGlsJykge1xuICAgICAgLy8gU2V0IGRlZmF1bHQgdW50aWwgZGF0ZSBpZiBub25lIGV4aXN0cywgcmVtb3ZlIGNvdW50XG4gICAgICB1cGRhdGVzLnVudGlsID1cbiAgICAgICAgcnJ1bGVPcHRpb25zPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcbiAgICAgIHVwZGF0ZXMuY291bnQgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICB1cGRhdGVSUnVsZSh1cGRhdGVzKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ291bnRDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBjb3VudCA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChlLnRhcmdldC52YWx1ZSkgfHwgMSlcbiAgICB1cGRhdGVSUnVsZSh7IGNvdW50IH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBjb25zdCB1bnRpbCA9IGRhdGUgPyBkYXlqcyhkYXRlKS5lbmRPZignZGF5JykudG9EYXRlKCkgOiB1bmRlZmluZWRcbiAgICB1cGRhdGVSUnVsZSh7IHVudGlsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVEYXlUb2dnbGUgPSAoZGF5SW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHdlZWtkYXlNYXAgPSBbXG4gICAgICBSUnVsZS5TVSxcbiAgICAgIFJSdWxlLk1PLFxuICAgICAgUlJ1bGUuVFUsXG4gICAgICBSUnVsZS5XRSxcbiAgICAgIFJSdWxlLlRILFxuICAgICAgUlJ1bGUuRlIsXG4gICAgICBSUnVsZS5TQSxcbiAgICBdXG4gICAgY29uc3QgY3VycmVudFdlZWtkYXlzID0gKHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cbiAgICBjb25zdCB0YXJnZXRXZWVrZGF5ID0gd2Vla2RheU1hcFtkYXlJbmRleF1cblxuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBjdXJyZW50V2Vla2RheXMuaW5jbHVkZXModGFyZ2V0V2Vla2RheSlcbiAgICBsZXQgbmV3V2Vla2RheXM6IFdlZWtkYXlbXVxuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIG5ld1dlZWtkYXlzID0gY3VycmVudFdlZWtkYXlzLmZpbHRlcigoZGF5KSA9PiBkYXkgIT09IHRhcmdldFdlZWtkYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1dlZWtkYXlzID0gWy4uLmN1cnJlbnRXZWVrZGF5cywgdGFyZ2V0V2Vla2RheV1cbiAgICB9XG5cbiAgICB1cGRhdGVSUnVsZSh7XG4gICAgICBieXdlZWtkYXk6IG5ld1dlZWtkYXlzLmxlbmd0aCA+IDAgPyBuZXdXZWVrZGF5cyA6IHVuZGVmaW5lZCxcbiAgICB9KVxuICB9XG5cbiAgLy8gSGVscGVyIHRvIGRldGVybWluZSBlbmQgdHlwZSBmcm9tIGN1cnJlbnQgb3B0aW9uc1xuICBjb25zdCBnZXRFbmRUeXBlID0gKCk6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJyA9PiB7XG4gICAgaWYgKHJydWxlT3B0aW9ucz8udW50aWwpIHtcbiAgICAgIHJldHVybiAndW50aWwnXG4gICAgfVxuICAgIGlmIChycnVsZU9wdGlvbnM/LmNvdW50KSB7XG4gICAgICByZXR1cm4gJ2NvdW50J1xuICAgIH1cbiAgICByZXR1cm4gJ25ldmVyJ1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG4gICAgICA8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBpZD1cInJlY3VycmluZ1wiXG4gICAgICAgICAgICBjaGVja2VkPXtzaG93UmVjdXJyZW5jZX1cbiAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17aGFuZGxlUmVjdXJyZW5jZVRvZ2dsZX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+UmVwZWF0PC9DYXJkVGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1JlY3VycmVuY2UgJiYgdmFsdWUgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICB7Z2V0UlJ1bGVEZXNjcmlwdGlvbih2YWx1ZSl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICApfVxuICAgICAgPC9DYXJkSGVhZGVyPlxuXG4gICAgICB7c2hvd1JlY3VycmVuY2UgJiYgKFxuICAgICAgICA8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICB7LyogRnJlcXVlbmN5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZnJlcXVlbmN5XCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgUmVwZWF0c1xuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2dldEZyZXF1ZW5jeVN0cmluZyhycnVsZU9wdGlvbnM/LmZyZXEgPz8gUlJ1bGUuREFJTFkpfVxuICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17aGFuZGxlRnJlcXVlbmN5Q2hhbmdlfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZWxlY3RUcmlnZ2VyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZnJlcXVlbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04XCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJmcmVxdWVuY3ktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICA8L1NlbGVjdFRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICA8U2VsZWN0Q29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJEQUlMWVwiPkRhaWx5PC9TZWxlY3RJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIldFRUtMWVwiPldlZWtseTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJNT05USExZXCI+TW9udGhseTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJZRUFSTFlcIj5ZZWFybHk8L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICA8L1NlbGVjdENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJpbnRlcnZhbFwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgIEV2ZXJ5XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtycnVsZU9wdGlvbnM/LmludGVydmFsIHx8IDF9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW50ZXJ2YWxDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLThcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBXZWVrbHkgRGF5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIHtycnVsZU9wdGlvbnM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj5SZXBlYXQgb248L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAge1dFRUtfREFZUy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl3ZWVrZGF5QXJyYXkgPSBBcnJheS5pc0FycmF5KFxuICAgICAgICAgICAgICAgICAgICAgIHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA/IHJydWxlT3B0aW9ucy5ieXdlZWtkYXlcbiAgICAgICAgICAgICAgICAgICAgICA6IHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtycnVsZU9wdGlvbnMuYnl3ZWVrZGF5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnl3ZWVrZGF5QXJyYXkuaW5jbHVkZXMoZGF5LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRGF5VG9nZ2xlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF5LnNob3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIEVuZCBDb25kaXRpb24gKi99XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPkVuZHM8L0xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtdC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBpZD1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Z2V0RW5kVHlwZSgpID09PSAnbmV2ZXInfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eygpID0+IGhhbmRsZUVuZFR5cGVDaGFuZ2UoJ25ldmVyJyl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJuZXZlclwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgTmV2ZXJcbiAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWZ0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRW5kVHlwZUNoYW5nZSgnY291bnQnKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImFmdGVyXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICBBZnRlclxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDb3VudENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTYgdy0xNiB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNvdW50LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+b2NjdXJyZW5jZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGlkPVwib25cIlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtnZXRFbmRUeXBlKCkgPT09ICd1bnRpbCd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRW5kVHlwZUNoYW5nZSgndW50aWwnKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cIm9uXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICBPblxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICd1bnRpbCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e3JydWxlT3B0aW9ucz8udW50aWx9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTZcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9DYXJkQ29udGVudD5cbiAgICAgICl9XG4gICAgPC9DYXJkPlxuICApXG59XG4iLAogICAgImltcG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbiAgQnV0dG9uLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmludGVyZmFjZSBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbiAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcbiAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcbiAgZXZlbnRUaXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWN1cnJlbmNlRWRpdERpYWxvZyh7XG4gIGlzT3BlbixcbiAgb25DbG9zZSxcbiAgb25Db25maXJtLFxuICBvcGVyYXRpb25UeXBlLFxuICBldmVudFRpdGxlLFxufTogUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcykge1xuICBjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgIG9uQ29uZmlybShzY29wZSlcbiAgICBvbkNsb3NlKClcbiAgfVxuXG4gIGNvbnN0IGFjdGlvblRleHQgPSBvcGVyYXRpb25UeXBlID09PSAnZWRpdCcgPyAnY2hhbmdlJyA6ICdkZWxldGUnXG4gIGNvbnN0IGFjdGlvblZlcmIgPSBvcGVyYXRpb25UeXBlID09PSAnZWRpdCcgPyAnRWRpdCcgOiAnRGVsZXRlJ1xuXG4gIHJldHVybiAoXG4gICAgPERpYWxvZyBvcGVuPXtpc09wZW59IG9uT3BlbkNoYW5nZT17b25DbG9zZX0+XG4gICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuICAgICAgICA8RGlhbG9nSGVhZGVyPlxuICAgICAgICAgIDxEaWFsb2dUaXRsZT57YWN0aW9uVmVyYn0gcmVjdXJyaW5nIGV2ZW50PC9EaWFsb2dUaXRsZT5cbiAgICAgICAgICA8RGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgICAgICBcIntldmVudFRpdGxlfVwiIGlzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG97JyAnfVxuICAgICAgICAgICAge2FjdGlvblRleHR9IGl0P1xuICAgICAgICAgIDwvRGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgIDwvRGlhbG9nSGVhZGVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgndGhpcycpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj5UaGlzIGV2ZW50PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICBPbmx5IHthY3Rpb25UZXh0fSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2VcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj5UaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7YWN0aW9uVmVyYn0gdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlc1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnYWxsJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPkFsbCBldmVudHM8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHthY3Rpb25WZXJifSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9EaWFsb2dGb290ZXI+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNvbXBsZXRlPzogKCkgPT4gdm9pZCkge1xuICBjb25zdCB7IHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkZWxldGVSZWN1cnJpbmdFdmVudCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCBbZGlhbG9nU3RhdGUsIHNldERpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPHtcbiAgICBpc09wZW46IGJvb2xlYW5cbiAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICAgIHVwZGF0ZXM/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG4gICAgb25Db25maXJtPzogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG4gIH0+KHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyxcbiAgICBldmVudDogbnVsbCxcbiAgfSlcblxuICBjb25zdCBvcGVuRWRpdERpYWxvZyA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuICAgICAgc2V0RGlhbG9nU3RhdGUoe1xuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHVwZGF0ZXMsIHtcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgZXZlbnREYXRlOiBldmVudC5zdGFydCxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuICAgIFt1cGRhdGVSZWN1cnJpbmdFdmVudF1cbiAgKVxuXG4gIGNvbnN0IG9wZW5EZWxldGVEaWFsb2cgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgIHNldERpYWxvZ1N0YXRlKHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiAnZGVsZXRlJyxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgICAgICAgZGVsZXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgZXZlbnREYXRlOiBldmVudC5zdGFydCxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtkZWxldGVSZWN1cnJpbmdFdmVudF1cbiAgKVxuXG4gIGNvbnN0IGNsb3NlRGlhbG9nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldERpYWxvZ1N0YXRlKHtcbiAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgICBldmVudDogbnVsbCxcbiAgICB9KVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVDb25maXJtID0gdXNlQ2FsbGJhY2soXG4gICAgKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgICBpZiAoZGlhbG9nU3RhdGUub25Db25maXJtKSB7XG4gICAgICAgIGRpYWxvZ1N0YXRlLm9uQ29uZmlybShzY29wZSlcbiAgICAgIH1cbiAgICAgIGNsb3NlRGlhbG9nKClcbiAgICAgIC8vIENhbGwgb25Db21wbGV0ZSB0byBjbG9zZSB0aGUgcGFyZW50IGZvcm1cbiAgICAgIG9uQ29tcGxldGU/LigpXG4gICAgfSxcbiAgICBbZGlhbG9nU3RhdGUsIGNsb3NlRGlhbG9nLCBvbkNvbXBsZXRlXVxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBkaWFsb2dTdGF0ZSxcbiAgICBvcGVuRWRpdERpYWxvZyxcbiAgICBvcGVuRGVsZXRlRGlhbG9nLFxuICAgIGNsb3NlRGlhbG9nLFxuICAgIGhhbmRsZUNvbmZpcm0sXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5cbi8qKlxuICogRXhwb3J0IGNhbGVuZGFyIGV2ZW50cyB0byBpQ2FsZW5kYXIgKC5pY2FsKSBmb3JtYXRcbiAqIEZ1bGx5IFJGQyA1NTQ1IGNvbXBsaWFudCBpQ2FsZW5kYXIgZ2VuZXJhdGlvblxuICovXG5cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBpQ2FsZW5kYXIgdGV4dCBmaWVsZHNcbiAqL1xuY29uc3QgZXNjYXBlSUNhbFRleHQgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpIC8vIEVzY2FwZSBiYWNrc2xhc2hlc1xuICAgIC5yZXBsYWNlQWxsKCc7JywgJ1xcXFw7JykgLy8gRXNjYXBlIHNlbWljb2xvbnNcbiAgICAucmVwbGFjZUFsbCgnLCcsICdcXFxcLCcpIC8vIEVzY2FwZSBjb21tYXNcbiAgICAucmVwbGFjZUFsbCgnXFxuJywgJ1xcXFxuJykgLy8gRXNjYXBlIG5ld2xpbmVzXG4gICAgLnJlcGxhY2VBbGwoJ1xccicsICcnKSAvLyBSZW1vdmUgY2FycmlhZ2UgcmV0dXJuc1xufVxuXG4vKipcbiAqIEZvcm1hdCBkYXRlIGZvciBpQ2FsZW5kYXIgZm9ybWF0IChZWVlZTU1ERFRISE1NU1NaIGZvciBVVEMpXG4gKi9cbmNvbnN0IGZvcm1hdElDYWxEYXRlID0gKGRhdGU6IGRheWpzLkRheWpzLCBhbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG4gIGlmIChhbGxEYXkpIHtcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcbiAgfVxuICByZXR1cm4gZGF0ZS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHVuaXF1ZSBVSUQgZm9yIGFuIGV2ZW50IGlmIG5vdCBhbHJlYWR5IHByZXNlbnRcbiAqL1xuY29uc3QgZ2VuZXJhdGVVSUQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuICBpZiAoZXZlbnQudWlkKSB7XG4gICAgcmV0dXJuIGV2ZW50LnVpZFxuICB9XG4gIHJldHVybiBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbi8qKlxuICogQ29udmVydCBSUnVsZU9wdGlvbnMgdG8gaUNhbGVuZGFyIFJSVUxFIHN0cmluZ1xuICovXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICB0cnkge1xuICAgIC8vIENyZWF0ZSBSUnVsZSBpbnN0YW5jZSB3aXRoIGFwcHJvcHJpYXRlIHR5cGUgY2FzdGluZ1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUoXG4gICAgICBycnVsZU9wdGlvbnMgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBSUnVsZT5bMF1cbiAgICApXG4gICAgY29uc3QgcnJ1bGVTdHJpbmcgPSBydWxlLnRvU3RyaW5nKClcbiAgICAvLyBFeHRyYWN0IGp1c3QgdGhlIFJSVUxFIHBhcnQgKHJlbW92ZSBEVFNUQVJUIGlmIHByZXNlbnQpXG4gICAgY29uc3QgcnJ1bGVQYXJ0ID0gcnJ1bGVTdHJpbmdcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKVxuICAgIHJldHVybiBycnVsZVBhcnQgfHwgJydcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc2luZ2xlIENhbGVuZGFyRXZlbnQgdG8gaUNhbGVuZGFyIFZFVkVOVCBzdHJpbmdcbiAqL1xuY29uc3QgZXZlbnRUb0lDYWxFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgbGluZXMucHVzaCgnQkVHSU46VkVWRU5UJylcblxuICAvLyBVSUQgKHJlcXVpcmVkKVxuICBsaW5lcy5wdXNoKGBVSUQ6JHtnZW5lcmF0ZVVJRChldmVudCl9YClcblxuICAvLyBEVFNUQVJUIChyZXF1aXJlZClcbiAgY29uc3QgZHRzdGFydCA9IGZvcm1hdElDYWxEYXRlKGV2ZW50LnN0YXJ0LCBldmVudC5hbGxEYXkpXG4gIGlmIChldmVudC5hbGxEYXkpIHtcbiAgICBsaW5lcy5wdXNoKGBEVFNUQVJUO1ZBTFVFPURBVEU6JHtkdHN0YXJ0fWApXG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaChgRFRTVEFSVDoke2R0c3RhcnR9YClcbiAgfVxuXG4gIC8vIERURU5EIChyZXF1aXJlZCBmb3IgZXZlbnRzIHdpdGggZHVyYXRpb24pXG4gIGNvbnN0IGR0ZW5kID0gZm9ybWF0SUNhbERhdGUoZXZlbnQuZW5kLCBldmVudC5hbGxEYXkpXG4gIGlmIChldmVudC5hbGxEYXkpIHtcbiAgICBsaW5lcy5wdXNoKGBEVEVORDtWQUxVRT1EQVRFOiR7ZHRlbmR9YClcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKGBEVEVORDoke2R0ZW5kfWApXG4gIH1cblxuICAvLyBTVU1NQVJZICh0aXRsZSlcbiAgbGluZXMucHVzaChgU1VNTUFSWToke2VzY2FwZUlDYWxUZXh0KGV2ZW50LnRpdGxlKX1gKVxuXG4gIC8vIERFU0NSSVBUSU9OIChvcHRpb25hbClcbiAgaWYgKGV2ZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgbGluZXMucHVzaChgREVTQ1JJUFRJT046JHtlc2NhcGVJQ2FsVGV4dChldmVudC5kZXNjcmlwdGlvbil9YClcbiAgfVxuXG4gIC8vIExPQ0FUSU9OIChvcHRpb25hbClcbiAgaWYgKGV2ZW50LmxvY2F0aW9uKSB7XG4gICAgbGluZXMucHVzaChgTE9DQVRJT046JHtlc2NhcGVJQ2FsVGV4dChldmVudC5sb2NhdGlvbil9YClcbiAgfVxuXG4gIC8vIFJSVUxFIChyZWN1cnJlbmNlIHJ1bGUpXG4gIGlmIChldmVudC5ycnVsZSkge1xuICAgIGNvbnN0IHJydWxlU3RyaW5nID0gZm9ybWF0UlJ1bGUoZXZlbnQucnJ1bGUpXG4gICAgaWYgKHJydWxlU3RyaW5nKSB7XG4gICAgICBsaW5lcy5wdXNoKHJydWxlU3RyaW5nKVxuICAgIH1cbiAgfVxuXG4gIC8vIEVYREFURSAoZXhjZXB0aW9uIGRhdGVzKVxuICBpZiAoZXZlbnQuZXhkYXRlcyAmJiBldmVudC5leGRhdGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBleGRhdGVzID0gZXZlbnQuZXhkYXRlc1xuICAgICAgLm1hcCgoZGF0ZVN0cikgPT4gZm9ybWF0SUNhbERhdGUoZGF5anMoZGF0ZVN0ciksIGV2ZW50LmFsbERheSkpXG4gICAgICAuam9pbignLCcpXG4gICAgbGluZXMucHVzaChgRVhEQVRFOiR7ZXhkYXRlc31gKVxuICB9XG5cbiAgLy8gUkVDVVJSRU5DRS1JRCAoZm9yIG1vZGlmaWVkIGluc3RhbmNlcylcbiAgaWYgKGV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgIGNvbnN0IHJlY3VycmVuY2VJZCA9IGZvcm1hdElDYWxEYXRlKGRheWpzKGV2ZW50LnJlY3VycmVuY2VJZCksIGV2ZW50LmFsbERheSlcbiAgICBsaW5lcy5wdXNoKGBSRUNVUlJFTkNFLUlEOiR7cmVjdXJyZW5jZUlkfWApXG4gIH1cblxuICAvLyBEVFNUQU1QIChyZXF1aXJlZCAtIHdoZW4gdGhpcyB3YXMgY3JlYXRlZC9tb2RpZmllZClcbiAgY29uc3Qgbm93ID0gZGF5anMoKS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcbiAgbGluZXMucHVzaChgRFRTVEFNUDoke25vd31gKVxuXG4gIC8vIENSRUFURUQgKHdoZW4gZXZlbnQgd2FzIGNyZWF0ZWQpXG4gIGxpbmVzLnB1c2goYENSRUFURUQ6JHtub3d9YClcblxuICAvLyBMQVNULU1PRElGSUVEICh3aGVuIGV2ZW50IHdhcyBsYXN0IG1vZGlmaWVkKVxuICBsaW5lcy5wdXNoKGBMQVNULU1PRElGSUVEOiR7bm93fWApXG5cbiAgLy8gU1RBVFVTIChkZWZhdWx0IHRvIENPTkZJUk1FRClcbiAgbGluZXMucHVzaCgnU1RBVFVTOkNPTkZJUk1FRCcpXG5cbiAgLy8gU0VRVUVOQ0UgKHZlcnNpb24gbnVtYmVyLCBkZWZhdWx0IHRvIDApXG4gIGxpbmVzLnB1c2goJ1NFUVVFTkNFOjAnKVxuXG4gIC8vIFRSQU5TUCAodHJhbnNwYXJlbmN5IC0gT1BBUVVFIGZvciBidXN5IHRpbWUpXG4gIGxpbmVzLnB1c2goJ1RSQU5TUDpPUEFRVUUnKVxuXG4gIGxpbmVzLnB1c2goJ0VORDpWRVZFTlQnKVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXHJcXG4nKVxufVxuXG4vKipcbiAqIEZpbHRlciBldmVudHMgZm9yIHByb3BlciBpQ2FsZW5kYXIgZXhwb3J0XG4gKiAtIEluY2x1ZGUgYmFzZSByZWN1cnJpbmcgZXZlbnRzICh3aXRoIFJSVUxFKVxuICogLSBJbmNsdWRlIG1vZGlmaWVkIGluc3RhbmNlcyAod2l0aCByZWN1cnJlbmNlSWQpXG4gKiAtIEluY2x1ZGUgbm9uLXJlY3VycmluZyBldmVudHNcbiAqIC0gRVhDTFVERSBnZW5lcmF0ZWQgcmVjdXJyaW5nIGluc3RhbmNlcyAobm8gcnJ1bGUsIG5vIHJlY3VycmVuY2VJZClcbiAqL1xuY29uc3QgZmlsdGVyRXZlbnRzRm9yRXhwb3J0ID0gKGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgY29uc3QgZXhwb3J0RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuICBjb25zdCBwcm9jZXNzZWRVSURzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgIC8vIEdldCBvciBnZW5lcmF0ZSBVSUQgZm9yIHRoZSBldmVudFxuICAgIGNvbnN0IGV2ZW50VUlEID0gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcblxuICAgIC8vIENhc2UgMTogQmFzZSByZWN1cnJpbmcgZXZlbnQgKGhhcyBSUlVMRSwgbm8gcmVjdXJyZW5jZUlkKVxuICAgIGlmIChldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkKSB7XG4gICAgICBleHBvcnRFdmVudHMucHVzaChldmVudClcbiAgICAgIHByb2Nlc3NlZFVJRHMuYWRkKGV2ZW50VUlEKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyBDYXNlIDI6IE1vZGlmaWVkIHJlY3VycmluZyBpbnN0YW5jZSAoaGFzIHJlY3VycmVuY2VJZCwgbm8gUlJVTEUpXG4gICAgaWYgKGV2ZW50LnJlY3VycmVuY2VJZCAmJiAhZXZlbnQucnJ1bGUpIHtcbiAgICAgIGV4cG9ydEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyBDYXNlIDM6IE5vbi1yZWN1cnJpbmcgZXZlbnQgKG5vIFJSVUxFLCBubyByZWN1cnJlbmNlSWQsIG5vIFVJRCBwYXR0ZXJuKVxuICAgIGlmICghZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIGdlbmVyYXRlZCBpbnN0YW5jZSBieSBVSUQgcGF0dGVyblxuICAgICAgY29uc3QgaXNHZW5lcmF0ZWRJbnN0YW5jZSA9IHByb2Nlc3NlZFVJRHMuaGFzKGV2ZW50VUlEKVxuXG4gICAgICBpZiAoIWlzR2VuZXJhdGVkSW5zdGFuY2UpIHtcbiAgICAgICAgZXhwb3J0RXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICB9XG4gICAgICAvLyBTa2lwIGdlbmVyYXRlZCBpbnN0YW5jZXMgLSB0aGV5J2xsIGJlIHJlY3JlYXRlZCBieSBSUlVMRVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBvcnRFdmVudHNcbn1cblxuLyoqXG4gKiBFeHBvcnQgZXZlbnRzIHRvIGlDYWxlbmRhciBmb3JtYXRcbiAqL1xuZXhwb3J0IGNvbnN0IGV4cG9ydFRvSUNhbGVuZGFyID0gKFxuICBldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcbiAgY2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cblxuICAvLyBDYWxlbmRhciBoZWFkZXJcbiAgbGluZXMucHVzaCgnQkVHSU46VkNBTEVOREFSJylcbiAgbGluZXMucHVzaCgnVkVSU0lPTjoyLjAnKVxuICBsaW5lcy5wdXNoKCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicpXG4gIGxpbmVzLnB1c2goJ0NBTFNDQUxFOkdSRUdPUklBTicpXG4gIGxpbmVzLnB1c2goJ01FVEhPRDpQVUJMSVNIJylcbiAgbGluZXMucHVzaChgWC1XUi1DQUxOQU1FOiR7ZXNjYXBlSUNhbFRleHQoY2FsZW5kYXJOYW1lKX1gKVxuICBsaW5lcy5wdXNoKGBYLVdSLUNBTERFU0M6JHtlc2NhcGVJQ2FsVGV4dChgRXhwb3J0ZWQgZnJvbSAke2NhbGVuZGFyTmFtZX1gKX1gKVxuXG4gIC8vIEFkZCB0aW1lem9uZSBpbmZvcm1hdGlvbiAoVVRDKVxuICBsaW5lcy5wdXNoKCdCRUdJTjpWVElNRVpPTkUnKVxuICBsaW5lcy5wdXNoKCdUWklEOlVUQycpXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlNUQU5EQVJEJylcbiAgbGluZXMucHVzaCgnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnKVxuICBsaW5lcy5wdXNoKCdUWk5BTUU6VVRDJylcbiAgbGluZXMucHVzaCgnVFpPRkZTRVRGUk9NOiswMDAwJylcbiAgbGluZXMucHVzaCgnVFpPRkZTRVRUTzorMDAwMCcpXG4gIGxpbmVzLnB1c2goJ0VORDpTVEFOREFSRCcpXG4gIGxpbmVzLnB1c2goJ0VORDpWVElNRVpPTkUnKVxuXG4gIC8vIEZpbHRlciBldmVudHMgZm9yIHByb3BlciBpQ2FsZW5kYXIgZXhwb3J0XG4gIGNvbnN0IGZpbHRlcmVkRXZlbnRzID0gZmlsdGVyRXZlbnRzRm9yRXhwb3J0KGV2ZW50cylcblxuICAvLyBBZGQgZWFjaCBmaWx0ZXJlZCBldmVudFxuICBmaWx0ZXJlZEV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGxpbmVzLnB1c2goZXZlbnRUb0lDYWxFdmVudChldmVudCkpXG4gIH0pXG5cbiAgLy8gQ2FsZW5kYXIgZm9vdGVyXG4gIGxpbmVzLnB1c2goJ0VORDpWQ0FMRU5EQVInKVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXHJcXG4nKVxufVxuXG4vKipcbiAqIERvd25sb2FkIGlDYWxlbmRhciBmaWxlIHRvIHVzZXIncyBkZXZpY2VcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuICBldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcbiAgZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcbiAgY2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG4gIGNvbnN0IGljYWxDb250ZW50ID0gZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXG5cbiAgLy8gQ3JlYXRlIGJsb2IgYW5kIGRvd25sb2FkXG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbaWNhbENvbnRlbnRdLCB7XG4gICAgdHlwZTogJ3RleHQvY2FsZW5kYXI7Y2hhcnNldD11dGYtOCcsXG4gIH0pXG5cbiAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gIGxpbmsuaHJlZiA9IHVybFxuICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWUuZW5kc1dpdGgoJy5pY3MnKSA/IGZpbGVuYW1lIDogYCR7ZmlsZW5hbWV9Lmljc2BcblxuICAvLyBUcmlnZ2VyIGRvd25sb2FkXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kKGxpbmspXG4gIGxpbmsuY2xpY2soKVxuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG5cbiAgLy8gQ2xlYW4gdXBcbiAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG59XG4iLAogICAgImltcG9ydCB7XG4gIEJ1dHRvbixcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGRvd25sb2FkSUNhbGVuZGFyIH0gZnJvbSAnQC9saWIvZXhwb3J0LWljYWwnXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFRpdGxlQ29udGVudCBmcm9tICcuL3RpdGxlLWNvbnRlbnQnXG5pbXBvcnQgVmlld0NvbnRyb2xzIGZyb20gJy4vdmlldy1jb250cm9scydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWInXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcbiAgY29uc3Qge1xuICAgIHZpZXcsXG4gICAgc2V0VmlldyxcbiAgICBuZXh0UGVyaW9kLFxuICAgIHByZXZQZXJpb2QsXG4gICAgdG9kYXksXG4gICAgb3BlbkV2ZW50Rm9ybSxcbiAgICBoZWFkZXJDb21wb25lbnQsXG4gICAgcmF3RXZlbnRzLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBTdGF0ZSBmb3IgbW9iaWxlIG1lbnUgcG9wb3ZlclxuICBjb25zdCBbbW9iaWxlUG9wb3Zlck9wZW4sIHNldE1vYmlsZVBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIC8vIEhhbmRsZSB2aWV3IGNoYW5nZSB3aXRoIG9wdGlvbmFsIHBvcG92ZXIgY2xvc2luZ1xuICBjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gKFxuICAgIG5ld1ZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJyxcbiAgICBjbG9zZVBvcG92ZXIgPSBmYWxzZVxuICApID0+IHtcbiAgICBzZXRWaWV3KG5ld1ZpZXcpXG4gICAgaWYgKGNsb3NlUG9wb3Zlcikge1xuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIGlDYWxlbmRhciBleHBvcnRcbiAgY29uc3QgaGFuZGxlRXhwb3J0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2BcbiAgICBkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICB9LCBbcmF3RXZlbnRzXSlcblxuICAvLyBDYWxsYmFjayBmb3IgbmF2aWdhdGlvbiB0aGF0IGFsc28gY2xvc2VzIHRoZSBtb2JpbGUgcG9wb3ZlclxuICBjb25zdCBoYW5kbGVOYXZpZ2F0aW9uID0ge1xuICAgIHRvZGF5OiAoKSA9PiB7XG4gICAgICB0b2RheSgpXG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9LFxuICAgIHByZXZpb3VzOiAoKSA9PiB7XG4gICAgICBwcmV2UGVyaW9kKClcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH0sXG4gICAgbmV4dDogKCkgPT4ge1xuICAgICAgbmV4dFBlcmlvZCgpXG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9LFxuICB9XG5cbiAgY29uc3QgTmV3RXZlbnRCdXR0b24gPSB1c2VDYWxsYmFjayhcbiAgICAoKSA9PiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG4gICAgICAgICAgdmFyaWFudD1cImRlZmF1bHRcIlxuICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICA+XG4gICAgICAgICAgPFBsdXMgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIGxnOmlubGluZVwiPk5ldzwvc3Bhbj5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICApLFxuICAgIFtvcGVuRXZlbnRGb3JtXVxuICApXG5cbiAgaWYgKGhlYWRlckNvbXBvbmVudCkge1xuICAgIC8vIFJlbmRlciBjdXN0b20gaGVhZGVyIGNvbXBvbmVudCBpZiBwcm92aWRlZFxuICAgIHJldHVybiBoZWFkZXJDb21wb25lbnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHsvKiBDYWxlbmRhciBIZWFkZXIgd2l0aCBncmlkIGxheW91dCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnQGNvbnRhaW5lciBmbGV4IGp1c3RpZnktY2VudGVyIGxnOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yIGJvcmRlci1iJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICB7LyogVGl0bGUgYXJlYSAtIExlZnQgc2VjdGlvbiAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgMnhsOmNvbC1zcGFuLTUgMnhsOmp1c3RpZnktc3RhcnRcIj5cbiAgICAgICAgICA8Q2FsZW5kYXJJY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgIDxUaXRsZUNvbnRlbnQgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBNb2JpbGUgJiBEZXNrdG9wICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY2VudGVyIGdhcC0xIDJ4bDpjb2wtc3Bhbi03IDJ4bDpqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgIHsvKiBEZXNrdG9wIGNvbnRyb2xzIC0gY2VudHJhbGl6ZWQgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgbGc6anVzdGlmeS1jZW50ZXIgMnhsOmp1c3RpZnktZW5kIGdhcC0xIHNtOmZsZXggdy1mdWxsIG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICBjdXJyZW50Vmlldz17dmlld31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldFZpZXd9XG4gICAgICAgICAgICAgIG9uVG9kYXk9e3RvZGF5fVxuICAgICAgICAgICAgICBvbk5leHQ9e25leHRQZXJpb2R9XG4gICAgICAgICAgICAgIG9uUHJldmlvdXM9e3ByZXZQZXJpb2R9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBEZXNrdG9wICovfVxuICAgICAgICAgICAgPE5ld0V2ZW50QnV0dG9uIC8+XG5cbiAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gRGVza3RvcCAqL31cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRXhwb3J0fVxuICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gbGc6aW5saW5lXCI+RXhwb3J0PC9zcGFuPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogTW9iaWxlIG5hdmlnYXRpb24gbWVudSBidXR0b24gLSBSaWdodCBhbGlnbmVkICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgc206aGlkZGVuXCI+XG4gICAgICAgICAgICB7LyogTmV3IGV2ZW50IGJ1dHRvbiAtIE1vYmlsZSAqL31cbiAgICAgICAgICAgIDxOZXdFdmVudEJ1dHRvbiAvPlxuXG4gICAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgICBvcGVuPXttb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXtzZXRNb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgICAgPE1lbnUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBhbGlnbj1cImVuZFwiIGNsYXNzTmFtZT1cInctWzI0MHB4XSBwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cIm1iLTEgdGV4dC1zbSBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICBWaWV3ICYgTmF2aWdhdGlvblxuICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgIDxWaWV3Q29udHJvbHNcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpZXc9e3ZpZXd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmlldykgPT4gaGFuZGxlVmlld0NoYW5nZShuZXdWaWV3LCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgb25Ub2RheT17aGFuZGxlTmF2aWdhdGlvbi50b2RheX1cbiAgICAgICAgICAgICAgICAgICAgb25OZXh0PXtoYW5kbGVOYXZpZ2F0aW9uLm5leHR9XG4gICAgICAgICAgICAgICAgICAgIG9uUHJldmlvdXM9e2hhbmRsZU5hdmlnYXRpb24ucHJldmlvdXN9XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJncmlkXCJcbiAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gTW9iaWxlICovfVxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxEb3dubG9hZCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgQ2FsZW5kYXIgKC5pY3MpXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyXG4iLAogICAgImltcG9ydCB7XG4gIEJ1dHRvbixcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbi8vIENyZWF0ZSBhcnJheXMgZm9yIG1vbnRoIGFuZCB5ZWFyIG9wdGlvbnNcbmNvbnN0IG1vbnRocyA9IFtcbiAgJ0phbnVhcnknLFxuICAnRmVicnVhcnknLFxuICAnTWFyY2gnLFxuICAnQXByaWwnLFxuICAnTWF5JyxcbiAgJ0p1bmUnLFxuICAnSnVseScsXG4gICdBdWd1c3QnLFxuICAnU2VwdGVtYmVyJyxcbiAgJ09jdG9iZXInLFxuICAnTm92ZW1iZXInLFxuICAnRGVjZW1iZXInLFxuXVxuXG4vLyBBbmltYXRpb24gdmFyaWFudHMgZm9yIG51bWJlciB0cmFuc2l0aW9uc1xuY29uc3QgYW5pbWF0aW9uVmFyaWFudHMgPSB7XG4gIGluaXRpYWw6IHsgb3BhY2l0eTogMCwgeTogMTAgfSxcbiAgYW5pbWF0ZTogeyBvcGFjaXR5OiAxLCB5OiAwIH0sXG4gIGV4aXQ6IHsgb3BhY2l0eTogMCwgeTogLTEwIH0sXG59XG5cbmNvbnN0IFRpdGxlQ29udGVudCA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgdmlldywgc2V0Q3VycmVudERhdGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gU3RhdGUgZm9yIG1vYmlsZSBtZW51IGFuZCBwb3BvdmVyc1xuICBjb25zdCBbbW9udGhQb3BvdmVyT3Blbiwgc2V0TW9udGhQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3llYXJQb3BvdmVyT3Blbiwgc2V0WWVhclBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbd2Vla1BvcG92ZXJPcGVuLCBzZXRXZWVrUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtkYXlQb3BvdmVyT3Blbiwgc2V0RGF5UG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcbiAgY29uc3QgeWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoXywgaSkgPT4gY3VycmVudFllYXIgLSA1ICsgaSlcblxuICAvLyBIYW5kbGUgbW9udGggYW5kIHllYXIgc2VsZWN0aW9uXG4gIGNvbnN0IGhhbmRsZU1vbnRoQ2hhbmdlID0gKG1vbnRoOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUubW9udGgobW9udGgpXG4gICAgc2V0Q3VycmVudERhdGUobmV3RGF0ZSlcbiAgICBzZXRNb250aFBvcG92ZXJPcGVuKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlWWVhckNoYW5nZSA9ICh5ZWFyOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUueWVhcih5ZWFyKVxuICAgIHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG4gICAgc2V0WWVhclBvcG92ZXJPcGVuKGZhbHNlKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3ZpZXcgIT09ICd5ZWFyJyAmJiAoXG4gICAgICAgIDxQb3BvdmVyIG9wZW49e21vbnRoUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0TW9udGhQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2Btb250aC0ke2N1cnJlbnREYXRlLm1vbnRoKCl9YH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICAgIGV4aXQ9XCJleGl0XCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTScpfVxuICAgICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAge21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17bW9udGh9XG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb250aENoYW5nZShpbmRleCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge21vbnRofVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG5cbiAgICAgIDxQb3BvdmVyIG9wZW49e3llYXJQb3BvdmVyT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXRZZWFyUG9wb3Zlck9wZW59PlxuICAgICAgICA8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICBrZXk9e2B5ZWFyLSR7Y3VycmVudERhdGUueWVhcigpfWB9XG4gICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyl9XG4gICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctMjQgcC0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIHt5ZWFycy5tYXAoKHllYXIpID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17eWVhcn1cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS55ZWFyKCkgPT09IHllYXIgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVZZWFyQ2hhbmdlKHllYXIpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3llYXJ9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICA8L1BvcG92ZXI+XG5cbiAgICAgIHsvKiBEaXNwbGF5IGFkZGl0aW9uYWwgdmlldy1zcGVjaWZpYyBpbmZvcm1hdGlvbiAqL31cbiAgICAgIHt2aWV3ID09PSAnd2VlaycgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXt3ZWVrUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0V2Vla1BvcG92ZXJPcGVufT5cbiAgICAgICAgICA8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICAgIGtleT17YHdlZWstcmFuZ2UtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgICAgYW5pbWF0ZT1cImFuaW1hdGVcIlxuICAgICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7YCR7Y3VycmVudERhdGVcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KCdNTU0gRCcpfSAtICR7Y3VycmVudERhdGVcbiAgICAgICAgICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgnTU1NIEQnKX1gfVxuICAgICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwibWwtMSBoLTMgdy0zIG9wYWNpdHktNzBcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy01NiBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgIHsvKiBTaG93IDcgd2Vla3MgKDMgcGFzdCwgY3VycmVudCwgMyBmdXR1cmUpICovfVxuICAgICAgICAgICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gd2Vla0RhdGUuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kT2ZXZWVrID0gd2Vla0RhdGUuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudFdlZWsgPSB3ZWVrRGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICd3ZWVrJylcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17c3RhcnRPZldlZWsuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50RGF0ZShzdGFydE9mV2VlaylcbiAgICAgICAgICAgICAgICAgICAgICBzZXRXZWVrUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntgJHtzdGFydE9mV2Vlay5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnTU1NIEQnXG4gICAgICAgICAgICAgICAgICAgICAgKX0gLSAke2VuZE9mV2Vlay5mb3JtYXQoJ0QnKX1gfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7c3RhcnRPZldlZWsubW9udGgoKSAhPT0gZW5kT2ZXZWVrLm1vbnRoKCkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBvcGFjaXR5LTcwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtgJHtzdGFydE9mV2Vlay5mb3JtYXQoJ01NTScpfS0ke2VuZE9mV2Vlay5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01NTSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG4gICAgICB7dmlldyA9PT0gJ2RheScgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXtkYXlQb3BvdmVyT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXREYXlQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2BkYXktaW5mby0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPVwiaW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50cz17YW5pbWF0aW9uVmFyaWFudHN9XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIEQnKX1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cIm1sLTEgaC0zIHctMyBvcGFjaXR5LTcwXCIgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNTYgcC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgICAgICB7LyogU2hvdyBhbGwgZGF5cyBvZiB0aGUgY3VycmVudCBtb250aCAqL31cbiAgICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGZpcnN0IGRheSBvZiBtb250aCBhbmQgbGFzdCBkYXkgb2YgbW9udGhcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cbiAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhcnJheSBvZiBkYXlzIGluIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZNb250aC5kYXRlKGkgKyAxKSAvLyBpICsgMSBiZWNhdXNlIGRheXMgc3RhcnQgYXQgMVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50RGF5ID0gZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtkYXlEYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnREYXRlKGRheURhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXREYXlQb3BvdmVyT3BlbihmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57ZGF5RGF0ZS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtc20gcHgtMSEgdGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlQ29udGVudFxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW50ZXJmYWNlIFZpZXdDb250cm9sc1Byb3BzIHtcbiAgY3VycmVudFZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJ1xuICBvbkNoYW5nZTogKHZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4gdm9pZFxuICBvblRvZGF5PzogKCkgPT4gdm9pZFxuICBvbk5leHQ/OiAoKSA9PiB2b2lkXG4gIG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG4gIHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcbiAgc2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcbiAgY3VycmVudFZpZXcsXG4gIG9uQ2hhbmdlLFxuICB2YXJpYW50ID0gJ2RlZmF1bHQnLFxuICBzaXplID0gJ3NtJyxcbiAgY2xhc3NOYW1lLFxuICBvblRvZGF5LFxuICBvbk5leHQsXG4gIG9uUHJldmlvdXMsXG59KSA9PiB7XG4gIGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXG4gIC8vIEV4dHJhY3QgY29tbW9uIGJ1dHRvbiBjbGFzc05hbWUgbG9naWMgdG8gYSBmdW5jdGlvblxuICBjb25zdCBnZXRCdXR0b25DbGFzc05hbWUgPSAodmlld1R5cGU6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4ge1xuICAgIHJldHVybiBjbihcbiAgICAgIC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG4gICAgICBpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciB5ZWFyIGJ1dHRvbiB2aXNpYmlsaXR5IG9uIG1vYmlsZVxuICAgICAgdmlld1R5cGUgPT09ICd5ZWFyJyA/IChpc0dyaWQgPyAndy1mdWxsJyA6ICdoaWRkZW4gbWQ6aW5saW5lLWZsZXgnKSA6ICcnLFxuICAgICAgLy8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuICAgICAgY3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4ge1xuICAgIHJldHVybiBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgPyAnZGVmYXVsdCcgOiAnb3V0bGluZSdcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgaXNHcmlkID8gJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTInIDogJ2ZsZXggZ2FwLTEnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvblByZXZpb3VzfSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICA8Q2hldnJvbkxlZnQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b24gb25DbGljaz17b25OZXh0fSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICA8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ2RheScpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCdkYXknKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ2RheScpfVxuICAgICAgPlxuICAgICAgICBEYXlcbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnd2VlaycpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCd3ZWVrJyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCd3ZWVrJyl9XG4gICAgICA+XG4gICAgICAgIFdlZWtcbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnbW9udGgnKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgnbW9udGgnKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ21vbnRoJyl9XG4gICAgICA+XG4gICAgICAgIE1vbnRoXG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ3llYXInKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgneWVhcicpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgneWVhcicpfVxuICAgICAgPlxuICAgICAgICBZZWFyXG4gICAgICA8L0J1dHRvbj5cblxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICBUb2RheVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld0NvbnRyb2xzXG4iLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5cbmNvbnN0IFllYXJWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgc2VsZWN0RGF0ZSwgZXZlbnRzLCBzZXRWaWV3LCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgeWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXG4gIC8vIEdlbmVyYXRlIGFuIGFycmF5IG9mIDEyIG1vbnRocyBmb3IgdGhlIGN1cnJlbnQgeWVhclxuICBjb25zdCBtb250aHMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgaSkgPT4ge1xuICAgIGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKCkueWVhcih5ZWFyKS5tb250aChpKS5zdGFydE9mKCdtb250aCcpXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGU6IG1vbnRoRGF0ZSxcbiAgICAgIG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcbiAgICAgIGRheXNJbk1vbnRoOiBtb250aERhdGUuZGF5c0luTW9udGgoKSxcbiAgICAgIGZpcnN0RGF5T2ZNb250aDogbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuZGF5KCksIC8vIDAtNiwgMCBpcyBTdW5kYXlcbiAgICB9XG4gIH0pXG5cbiAgLy8gQ2FsY3VsYXRlIGV2ZW50cyBmb3IgZWFjaCBtb250aFxuICBjb25zdCBtb250aHNXaXRoRXZlbnRDb3VudCA9IG1vbnRocy5tYXAoKG1vbnRoKSA9PiB7XG4gICAgY29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG4gICAgICAoZXZlbnQpID0+XG4gICAgICAgIGV2ZW50LnN0YXJ0LnllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICBldmVudC5zdGFydC5tb250aCgpID09PSBtb250aC5kYXRlLm1vbnRoKClcbiAgICApXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubW9udGgsXG4gICAgICBldmVudENvdW50OiBldmVudHNJbk1vbnRoLmxlbmd0aCxcbiAgICB9XG4gIH0pXG5cbiAgLy8gSGFuZGxlIG1vbnRoIGNsaWNrIHRvIG5hdmlnYXRlIHRvIG1vbnRoIHZpZXdcbiAgY29uc3QgaGFuZGxlTW9udGhDbGljayA9IChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuICAgIHNlbGVjdERhdGUoZGF0ZSlcbiAgICBzZXRWaWV3KCdtb250aCcpXG4gIH1cblxuICAvLyBIYW5kbGUgZGF5IGNsaWNrIHdpdGhpbiB0aGUgbWluaSBjYWxlbmRhclxuICBjb25zdCBoYW5kbGVEYXlDbGljayA9IChkYXRlOiBkYXlqcy5EYXlqcywgZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKSAvLyBQcmV2ZW50IHRyaWdnZXJpbmcgdGhlIG1vbnRoIGNsaWNrXG4gICAgc2VsZWN0RGF0ZShkYXRlKVxuICAgIHNldFZpZXcoJ2RheScpIC8vIE5hdmlnYXRlIGRpcmVjdGx5IHRvIGRheSB2aWV3IHdoZW4gY2xpY2tpbmcgb24gYSBzcGVjaWZpYyBkYXlcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGRheXMgZm9yIG1pbmkgY2FsZW5kYXIgaW4gZWFjaCBtb250aFxuICBjb25zdCByZW5kZXJNaW5pQ2FsZW5kYXIgPSAobW9udGg6ICh0eXBlb2YgbW9udGhzV2l0aEV2ZW50Q291bnQpWzBdKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoJ3MgY2FsZW5kYXIgKHdoaWNoIGNvdWxkIGJlIGluIHRoZSBwcmV2aW91cyBtb250aClcbiAgICBjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aC5kYXRlLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpXG5cbiAgICAvLyBDcmVhdGUgNDIgZGF5cyAoNiByb3dzIG9mIDcgZGF5cykgZm9yIGNvbnNpc3RlbmN5XG4gICAgY29uc3QgZGF5c0FycmF5ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNDIgfSwgKF8sIGkpID0+IHtcbiAgICAgIGNvbnN0IGRheSA9IGZpcnN0RGF5T2ZDYWxlbmRhci5hZGQoaSwgJ2RheScpXG4gICAgICBjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBtb250aC5kYXRlLm1vbnRoKClcbiAgICAgIGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuICAgICAgY29uc3QgaXNDdXJyZW50RGF0ZSA9IGRheS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuXG4gICAgICAvLyBHZXQgZXZlbnRzIGZvciB0aGlzIGRheVxuICAgICAgY29uc3QgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgICAgICBkYXkuc3RhcnRPZignZGF5JyksXG4gICAgICAgIGRheS5lbmRPZignZGF5JylcbiAgICAgIClcbiAgICAgIGNvbnN0IGhhc0V2ZW50cyA9IGRheUV2ZW50cy5sZW5ndGggPiAwXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheSxcbiAgICAgICAgaXNDdXJyZW50TW9udGgsXG4gICAgICAgIGlzVG9kYXksXG4gICAgICAgIGlzQ3VycmVudERhdGUsXG4gICAgICAgIGhhc0V2ZW50cyxcbiAgICAgICAgZXZlbnRDb3VudDogZGF5RXZlbnRzLmxlbmd0aCxcbiAgICAgICAgLy8gR3JvdXAgZXZlbnRzIGJ5IHRoZWlyIGNhdGVnb3JpZXMgdG8gc2hvdyBkaWZmZXJlbnQgY29sb3JzXG4gICAgICAgIGV2ZW50czogZGF5RXZlbnRzLFxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbWluaS1jYWxlbmRhci0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTcgZ2FwLVsxcHhdIHRleHQtWzAuNnJlbV1cIlxuICAgICAgPlxuICAgICAgICB7LyogRGF5IG5hbWVzICovfVxuICAgICAgICB7WydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10ubWFwKChkYXlOYW1lLCBpKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgaGVhZGVyLSR7aX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2RheU5hbWV9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuXG4gICAgICAgIHsvKiBDYWxlbmRhciBkYXlzICovfVxuICAgICAgICB7ZGF5c0FycmF5Lm1hcCgoZGF5SW5mbywgaSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGRheS0ke2l9YH1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1kYXktJHttb250aC5kYXRlLmZvcm1hdCgnWVlZWS1NTScpfS0ke2RheUluZm8uZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gaGFuZGxlRGF5Q2xpY2soZGF5SW5mby5kYXksIGUpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ3JlbGF0aXZlIGZsZXggYXNwZWN0LXNxdWFyZSB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyJyxcbiAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCByb3VuZGVkLXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCcsXG4gICAgICAgICAgICAgICFkYXlJbmZvLmlzQ3VycmVudE1vbnRoICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG4gICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSAmJlxuICAgICAgICAgICAgICAgICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgIGRheUluZm8uaXNDdXJyZW50RGF0ZSAmJlxuICAgICAgICAgICAgICAgICFkYXlJbmZvLmlzVG9kYXkgJiZcbiAgICAgICAgICAgICAgICAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcsXG4gICAgICAgICAgICAgIGRheUluZm8uaGFzRXZlbnRzICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNUb2RheSAmJlxuICAgICAgICAgICAgICAgICFkYXlJbmZvLmlzQ3VycmVudERhdGUgJiZcbiAgICAgICAgICAgICAgICAnZm9udC1tZWRpdW0nXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICBkYXlJbmZvLmhhc0V2ZW50c1xuICAgICAgICAgICAgICAgID8gYCR7ZGF5SW5mby5ldmVudENvdW50fSBldmVudCR7XG4gICAgICAgICAgICAgICAgICAgIGRheUluZm8uZXZlbnRDb3VudCA+IDEgPyAncycgOiAnJ1xuICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbGVhZGluZy1ub25lXCI+XG4gICAgICAgICAgICAgIHtkYXlJbmZvLmRheS5kYXRlKCl9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIHsvKiBFbmhhbmNlZCBldmVudCBpbmRpY2F0b3IgLSBzaG93IG11bHRpcGxlIGNvbG9yZWQgZG90cyBmb3IgZGlmZmVyZW50IGV2ZW50IHR5cGVzICovfVxuICAgICAgICAgICAge2RheUluZm8uaGFzRXZlbnRzICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAnYWJzb2x1dGUgYm90dG9tLTAgZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgc3BhY2UteC1bMXB4XScsXG4gICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYm90dG9tLVsxcHhdJyA6ICcnXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsvKiBTaG93IHVwIHRvIDMgZXZlbnQgZG90cyB3aXRoIGRpZmZlcmVudCBjb2xvcnMgaWYgYXZhaWxhYmxlICovfVxuICAgICAgICAgICAgICAgIHtkYXlJbmZvLmV2ZW50Q291bnQgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLFxuICAgICAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogJ2JnLXByaW1hcnknXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2RheUluZm8uZXZlbnRDb3VudCA+IDEgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAnaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiAnYmctYmx1ZS01MDAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2RheUluZm8uZXZlbnRDb3VudCA+IDIgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAnaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiAnYmctZ3JlZW4tNTAwJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYSBkYXRhLXRlc3RpZD1cInllYXItdmlld1wiIGNsYXNzTmFtZT1cImgtZnVsbFwiPlxuICAgICAgPGRpdlxuICAgICAgICBkYXRhLXRlc3RpZD1cInllYXItZ3JpZFwiXG4gICAgICAgIGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG4gICAgICA+XG4gICAgICAgIHttb250aHNXaXRoRXZlbnRDb3VudC5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17bW9udGgubmFtZX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb250aENsaWNrKG1vbnRoLmRhdGUpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6Ym9yZGVyLXByaW1hcnkgZmxleCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCByb3VuZGVkLWxnIGJvcmRlciBwLTMgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNjYWxlLVsxLjAxXSBob3ZlcjpzaGFkb3ctbWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICBrZXk9e2Btb250aC0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3tcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjI1LFxuICAgICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgICBkZWxheTogaW5kZXggKiAwLjA1LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWItMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGgzXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtdGl0bGUtJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge21vbnRoLm5hbWV9XG4gICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICB7bW9udGguZXZlbnRDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLWV2ZW50LWNvdW50LSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwgcHgtMiBweS0xIHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7bW9udGguZXZlbnRDb3VudH17JyAnfVxuICAgICAgICAgICAgICAgICAgICB7bW9udGguZXZlbnRDb3VudCA9PT0gMSA/ICdldmVudCcgOiAnZXZlbnRzJ31cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cblxuICAgICAgICAgICAge3JlbmRlck1pbmlDYWxlbmRhcihtb250aCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgPC9TY3JvbGxBcmVhPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFllYXJWaWV3XG4iLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IE1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL3ZpZXcvbW9udGgtdmlldydcbmltcG9ydCBXZWVrVmlldyBmcm9tICdAL2ZlYXR1cmVzL3dlZWstdmlldy92aWV3L3dlZWstdmlldydcbmltcG9ydCBEYXlWaWV3IGZyb20gJ0AvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy92aWV3L2RheS12aWV3J1xuaW1wb3J0IHsgRXZlbnRGb3JtIH0gZnJvbSAnLi4vZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnLi4vaGVhZGVyJ1xuaW1wb3J0IFllYXJWaWV3IGZyb20gJ0AvZmVhdHVyZXMveWVhci12aWV3L3ZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZHVwbGljYXRlc1xuaW1wb3J0ICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBXRUVLX0RBWVNfTlVNQkVSX01BUCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZVB1YmxpY0ZhY2luZ0NhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2xpYidcbmltcG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BzIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3Qge1xuICAgIHZpZXcsXG4gICAgaXNFdmVudEZvcm1PcGVuLFxuICAgIGNsb3NlRXZlbnRGb3JtLFxuICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlLFxuICAgIGFkZEV2ZW50LFxuICAgIHVwZGF0ZUV2ZW50LFxuICAgIGRlbGV0ZUV2ZW50LFxuICAgIGRheU1heEV2ZW50cyxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgdmlld01hcCA9IHtcbiAgICBtb250aDogPE1vbnRoVmlldyBrZXk9XCJtb250aFwiIGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSAvPixcbiAgICB3ZWVrOiA8V2Vla1ZpZXcga2V5PVwid2Vla1wiIC8+LFxuICAgIGRheTogPERheVZpZXcga2V5PVwiZGF5XCIgLz4sXG4gICAgeWVhcjogPFllYXJWaWV3IGtleT1cInllYXJcIiAvPixcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgdXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICBkZWxldGVFdmVudChldmVudC5pZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgIDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblxuICAgICAgey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlUHJlc2VuY2UgZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG4gICAgICA8Q2FsZW5kYXJEbmRDb250ZXh0PlxuICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgIGtleT17dmlld31cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeDogMjAgfX1cbiAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeDogMCB9fVxuICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB4OiAtMjAgfX1cbiAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt2aWV3TWFwW3ZpZXddfVxuICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICA8L0NhbGVuZGFyRG5kQ29udGV4dD5cblxuICAgICAgey8qIEV2ZW50IEZvcm0gRGlhbG9nICovfVxuICAgICAge2lzRXZlbnRGb3JtT3BlbiAmJiAoXG4gICAgICAgIDxFdmVudEZvcm1cbiAgICAgICAgICBvbkNsb3NlPXtjbG9zZUV2ZW50Rm9ybX1cbiAgICAgICAgICBzZWxlY3RlZEV2ZW50PXtzZWxlY3RlZEV2ZW50fVxuICAgICAgICAgIHNlbGVjdGVkRGF0ZT17c2VsZWN0ZWREYXRlfVxuICAgICAgICAgIG9uQWRkPXthZGRFdmVudH1cbiAgICAgICAgICBvblVwZGF0ZT17aGFuZGxlT25VcGRhdGV9XG4gICAgICAgICAgb25EZWxldGU9e2hhbmRsZU9uRGVsZXRlfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5jb25zdCBERUZBVUxUX0RBWV9NQVhfRVZFTlRTID0gNFxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuICBldmVudHMsXG4gIGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIGxvY2FsZSxcbiAgdGltZXpvbmUsXG4gIGRpc2FibGVDZWxsQ2xpY2ssXG4gIGRpc2FibGVFdmVudENsaWNrLFxuICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIGRheU1heEV2ZW50cyA9IERFRkFVTFRfREFZX01BWF9FVkVOVFMsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Q2FsZW5kYXJQcm92aWRlclxuICAgICAgZXZlbnRzPXtub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50KGV2ZW50cyl9XG4gICAgICBmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuICAgICAgcmVuZGVyRXZlbnQ9e3JlbmRlckV2ZW50fVxuICAgICAgb25FdmVudENsaWNrPXtvbkV2ZW50Q2xpY2t9XG4gICAgICBvbkNlbGxDbGljaz17b25DZWxsQ2xpY2t9XG4gICAgICBvblZpZXdDaGFuZ2U9e29uVmlld0NoYW5nZX1cbiAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgdGltZXpvbmU9e3RpbWV6b25lfVxuICAgICAgZGlzYWJsZUNlbGxDbGljaz17ZGlzYWJsZUNlbGxDbGlja31cbiAgICAgIGRpc2FibGVFdmVudENsaWNrPXtkaXNhYmxlRXZlbnRDbGlja31cbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICBzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cbiAgICAgIGhlYWRlckNvbXBvbmVudD17aGVhZGVyQ29tcG9uZW50fVxuICAgID5cbiAgICAgIDxDYWxlbmRhckNvbnRlbnQgLz5cbiAgICA8L0NhbGVuZGFyUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgRG5kQ29udGV4dCxcbiAgRHJhZ092ZXJsYXksXG4gIE1vdXNlU2Vuc29yLFxuICBwb2ludGVyV2l0aGluLFxuICBUb3VjaFNlbnNvcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUge1xuICBEcmFnQ2FuY2VsRXZlbnQsXG4gIERyYWdFbmRFdmVudCxcbiAgRHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9saWIvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhckRuZENvbnRleHQoeyBjaGlsZHJlbiB9OiBDYWxlbmRhckRuZENvbnRleHRQcm9wcykge1xuICBjb25zdCB7IHVwZGF0ZUV2ZW50LCB1cGRhdGVSZWN1cnJpbmdFdmVudCwgdmlldywgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuICAgIHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IFthY3RpdmVFdmVudCwgc2V0QWN0aXZlRXZlbnRdID0gUmVhY3QudXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KFxuICAgIG51bGxcbiAgKVxuXG4gIC8vIFN0YXRlIGZvciByZWN1cnJpbmcgZXZlbnQgZGlhbG9nXG4gIGNvbnN0IFtyZWN1cnJpbmdEaWFsb2csIHNldFJlY3VycmluZ0RpYWxvZ10gPSB1c2VTdGF0ZTx7XG4gICAgaXNPcGVuOiBib29sZWFuXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PiB8IG51bGxcbiAgfT4oe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgZXZlbnQ6IG51bGwsXG4gICAgdXBkYXRlczogbnVsbCxcbiAgfSlcblxuICAvLyBDb25maWd1cmUgc2Vuc29ycyB3aXRoIHJlZHVjZWQgYWN0aXZhdGlvbiBjb25zdHJhaW50cyBmb3IgZWFzaWVyIGRyYWdnaW5nXG4gIGNvbnN0IG1vdXNlU2Vuc29yID0gdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7XG4gICAgLy8gUmVxdWlyZSBtaW5pbWFsIG1vdmVtZW50IGJlZm9yZSBhY3RpdmF0aW5nXG4gICAgYWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcbiAgICAgIGRpc3RhbmNlOiAyLFxuICAgIH0sXG4gIH0pXG5cbiAgY29uc3QgdG91Y2hTZW5zb3IgPSB1c2VTZW5zb3IoVG91Y2hTZW5zb3IsIHtcbiAgICAvLyBSZWR1Y2UgZGVsYXkgZm9yIHRvdWNoIGRldmljZXNcbiAgICBhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuICAgICAgZGVsYXk6IDEwMCxcbiAgICAgIHRvbGVyYW5jZTogNSxcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IHNlbnNvcnMgPSB1c2VTZW5zb3JzKG1vdXNlU2Vuc29yLCB0b3VjaFNlbnNvcilcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGV2ZW50IHVwZGF0ZVxuICBjb25zdCBwZXJmb3JtRXZlbnRVcGRhdGUgPSAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICApID0+IHtcbiAgICAvLyBWYWxpZGF0ZSBpbnB1dHNcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5pZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVzIHx8IE9iamVjdC5rZXlzKHVwZGF0ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoZXZlbnQpKSB7XG4gICAgICAvLyBTaG93IGRpYWxvZyBmb3IgcmVjdXJyaW5nIGV2ZW50c1xuICAgICAgc2V0UmVjdXJyaW5nRGlhbG9nKHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERpcmVjdGx5IHVwZGF0ZSByZWd1bGFyIGV2ZW50c1xuICAgICAgdXBkYXRlRXZlbnQoZXZlbnQuaWQsIHVwZGF0ZXMpXG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY29uZmlybWF0aW9uXG4gIGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybSA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgIGlmICghcmVjdXJyaW5nRGlhbG9nLmV2ZW50IHx8ICFyZWN1cnJpbmdEaWFsb2cudXBkYXRlcykge1xuICAgICAgc2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudChyZWN1cnJpbmdEaWFsb2cuZXZlbnQsIHJlY3VycmluZ0RpYWxvZy51cGRhdGVzLCB7XG4gICAgICAgIHNjb3BlLFxuICAgICAgICBldmVudERhdGU6IHJlY3VycmluZ0RpYWxvZy5ldmVudC5zdGFydCxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTaWxlbnRseSBoYW5kbGUgZXJyb3IgYW5kIHJlc2V0IGRpYWxvZyBzdGF0ZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNsb3NlXG4gIGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2UgPSAoKSA9PiB7XG4gICAgc2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IChldmVudDogRHJhZ1N0YXJ0RXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGFjdGl2ZSB9ID0gZXZlbnRcblxuICAgIC8vIFNldCB0aGUgYWN0aXZlIGV2ZW50IGJhc2VkIG9uIHRoZSBldmVudCBkYXRhXG4gICAgaWYgKGFjdGl2ZS5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICdjYWxlbmRhci1ldmVudCcpIHtcbiAgICAgIHNldEFjdGl2ZUV2ZW50KGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmUsIG92ZXIgfSA9IGV2ZW50XG5cbiAgICBpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcbiAgICAgIHNldEFjdGl2ZUV2ZW50KG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAob3Zlci5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICd0aW1lLWNlbGwnKSB7XG4gICAgICBjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGV2ZW50IGR1cmF0aW9uIGluIG1pbnV0ZXNcbiAgICAgIGNvbnN0IHN0YXJ0ID0gYWN0aXZlRXZlbnQuc3RhcnRcbiAgICAgIGNvbnN0IGVuZCA9IGFjdGl2ZUV2ZW50LmVuZFxuICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gZW5kLmRpZmYoc3RhcnQsICdtaW51dGUnKVxuXG4gICAgICAvLyBDcmVhdGUgbmV3IHN0YXJ0IHRpbWUgYmFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0XG4gICAgICBjb25zdCBuZXdTdGFydCA9IGRheWpzKGRhdGUpXG4gICAgICAgIC5ob3VyKGhvdXIpXG4gICAgICAgIC5taW51dGUobWludXRlIHx8IDApXG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgZW5kIHRpbWUgYnkgYWRkaW5nIHRoZSBvcmlnaW5hbCBkdXJhdGlvblxuICAgICAgbGV0IG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChkdXJhdGlvbk1pbnV0ZXMsICdtaW51dGUnKVxuICAgICAgaWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuICAgICAgICAvLyBJZiB0aGUgbmV3IGVuZCB0aW1lIGlzIGF0IG1pZG5pZ2h0LCBzZXQgaXQgdG8gMjQgaG91cnMgb2YgcGFydGlhbCBkYXlcbiAgICAgICAgbmV3RW5kID0gbmV3RW5kLnN1YnRyYWN0KDEsICdkYXknKS5lbmRPZignZGF5JylcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHRoZSBldmVudCB3aXRoIG5ldyB0aW1lc1xuICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB7XG4gICAgICAgIHN0YXJ0OiBuZXdTdGFydCxcbiAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAob3Zlci5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICdkYXktY2VsbCcpIHtcbiAgICAgIGNvbnN0IHsgZGF0ZSB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcbiAgICAgIGNvbnN0IG5ld0RhdGUgPSBkYXlqcyhkYXRlKVxuXG4gICAgICAvLyBGb3IgbXVsdGktZGF5IGV2ZW50cywgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZHVyYXRpb24gaW4gZGF5c1xuICAgICAgY29uc3QgaXNNdWx0aURheUV2ZW50ID0gIWFjdGl2ZUV2ZW50LnN0YXJ0LmlzU2FtZShhY3RpdmVFdmVudC5lbmQsICdkYXknKVxuICAgICAgY29uc3Qgc3RhcnQgPSBhY3RpdmVFdmVudC5zdGFydFxuICAgICAgY29uc3QgZW5kID0gYWN0aXZlRXZlbnQuZW5kXG5cbiAgICAgIGlmIChpc011bHRpRGF5RXZlbnQpIHtcbiAgICAgICAgaWYgKHZpZXcgPT09ICd3ZWVrJykge1xuICAgICAgICAgIC8vIEdldCB0aW1lIGNvbXBvbmVudHMgdG8gcHJlc2VydmVcbiAgICAgICAgICBjb25zdCBzdGFydEhvdXIgPSBzdGFydC5ob3VyKClcbiAgICAgICAgICBjb25zdCBzdGFydE1pbnV0ZSA9IHN0YXJ0Lm1pbnV0ZSgpXG4gICAgICAgICAgY29uc3QgZW5kSG91ciA9IGVuZC5ob3VyKClcbiAgICAgICAgICBjb25zdCBlbmRNaW51dGUgPSBlbmQubWludXRlKClcblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBpbiBkYXlzIHRvIHByZXNlcnZlXG4gICAgICAgICAgY29uc3QgZHVyYXRpb25EYXlzID0gZW5kLmRpZmYoc3RhcnQsICdkYXknKVxuXG4gICAgICAgICAgLy8gQ3JlYXRlIG5ldyBzdGFydCBhbmQgZW5kIGRhdGVzXG4gICAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBuZXdEYXRlXG4gICAgICAgICAgICAuc3RhcnRPZignZGF5JylcbiAgICAgICAgICAgIC5ob3VyKHN0YXJ0SG91cilcbiAgICAgICAgICAgIC5taW51dGUoc3RhcnRNaW51dGUpXG4gICAgICAgICAgY29uc3QgbmV3RW5kID0gbmV3U3RhcnRcbiAgICAgICAgICAgIC5hZGQoZHVyYXRpb25EYXlzLCAnZGF5JylcbiAgICAgICAgICAgIC5ob3VyKGVuZEhvdXIpXG4gICAgICAgICAgICAubWludXRlKGVuZE1pbnV0ZSlcblxuICAgICAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwge1xuICAgICAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb3Igb3RoZXIgdmlld3MgbGlrZSBtb250aCB2aWV3XG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkYXRlIHNoaWZ0IChob3cgbWFueSBkYXlzIHdlJ3JlIG1vdmluZyB0aGUgZXZlbnQpXG4gICAgICAgICAgY29uc3QgZGF5c0RpZmZlcmVuY2UgPSBuZXdEYXRlLmRpZmYoc3RhcnQuc3RhcnRPZignZGF5JyksICdkYXknKVxuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGFydCBhbmQgZW5kIHdoaWxlIHByZXNlcnZpbmcgdGltZSBjb21wb25lbnRzXG4gICAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBzdGFydC5hZGQoZGF5c0RpZmZlcmVuY2UsICdkYXknKVxuICAgICAgICAgIGNvbnN0IG5ld0VuZCA9IGVuZC5hZGQoZGF5c0RpZmZlcmVuY2UsICdkYXknKVxuXG4gICAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB7XG4gICAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igc2luZ2xlLWRheSBldmVudHMsIG1haW50YWluIHRoZSB0aW1lIGJ1dCBjaGFuZ2UgdGhlIGRhdGVcbiAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBuZXdEYXRlXG4gICAgICAgICAgLmhvdXIoYWN0aXZlRXZlbnQuc3RhcnQuaG91cigpKVxuICAgICAgICAgIC5taW51dGUoYWN0aXZlRXZlbnQuc3RhcnQubWludXRlKCkpXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIGFuZCBzZXQgbmV3IGVuZCB0aW1lXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IGFjdGl2ZUV2ZW50LmVuZC5kaWZmKFxuICAgICAgICAgIGFjdGl2ZUV2ZW50LnN0YXJ0LFxuICAgICAgICAgICdtaW51dGUnXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGR1cmF0aW9uTWludXRlcywgJ21pbnV0ZScpXG5cbiAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB7XG4gICAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHNldEFjdGl2ZUV2ZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnQ2FuY2VsID0gKF9ldmVudDogRHJhZ0NhbmNlbEV2ZW50KSA9PiB7XG4gICAgc2V0QWN0aXZlRXZlbnQobnVsbClcbiAgfVxuXG4gIC8vIElmIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWQsIGp1c3QgcmV0dXJuIGNoaWxkcmVuIHdpdGhvdXQgRG5kQ29udGV4dFxuICBpZiAoZGlzYWJsZURyYWdBbmREcm9wKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuIGFzIFJlYWN0LlJlYWN0RWxlbWVudFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgc2Vuc29ycz17c2Vuc29yc31cbiAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgb25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuICAgICAgICBvbkRyYWdDYW5jZWw9e2hhbmRsZURyYWdDYW5jZWx9XG4gICAgICAgIGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8RHJhZ092ZXJsYXkgbW9kaWZpZXJzPXtbc25hcENlbnRlclRvQ3Vyc29yXX0+XG4gICAgICAgICAge2FjdGl2ZUV2ZW50ICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzJyxcbiAgICAgICAgICAgICAgICBhY3RpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcbiAgICAgICAgICAgICAgICBhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2FjdGl2ZUV2ZW50Py50aXRsZX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRHJhZ092ZXJsYXk+XG4gICAgICA8L0RuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBSZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2cgKi99XG4gICAgICA8UmVjdXJyZW5jZUVkaXREaWFsb2dcbiAgICAgICAgaXNPcGVuPXtyZWN1cnJpbmdEaWFsb2cuaXNPcGVufVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlfVxuICAgICAgICBvbkNvbmZpcm09e2hhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybX1cbiAgICAgICAgb3BlcmF0aW9uVHlwZT1cImVkaXRcIlxuICAgICAgICBldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHtcbiAgZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50IGFzIHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCxcbiAgZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcblxuaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG4gIGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdE5vZGVcbiAgb25FdmVudENsaWNrPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uQ2VsbENsaWNrPzogKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIG9uVmlld0NoYW5nZT86ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHRpbWV6b25lPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG4gIHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcbiAgaGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGV2ZW50cyA9IFtdLFxuICBmaXJzdERheU9mV2VlayA9IDAsIC8vIERlZmF1bHQgdG8gU3VuZGF5LFxuICByZW5kZXJFdmVudCxcbiAgb25FdmVudENsaWNrLFxuICBvbkNlbGxDbGljayxcbiAgb25WaWV3Q2hhbmdlLFxuICBsb2NhbGUsXG4gIHRpbWV6b25lLFxuICBkaXNhYmxlQ2VsbENsaWNrLFxuICBkaXNhYmxlRXZlbnRDbGljayxcbiAgZGlzYWJsZURyYWdBbmREcm9wLFxuICBkYXlNYXhFdmVudHMsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbn0pID0+IHtcbiAgLy8gU3RhdGVcbiAgY29uc3QgW2N1cnJlbnREYXRlLCBzZXRDdXJyZW50RGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcz4oZGF5anMoKSlcbiAgY29uc3QgW3ZpZXcsIHNldFZpZXddID0gdXNlU3RhdGU8J21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInPignbW9udGgnKVxuICBjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcbiAgY29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGU8c3RyaW5nPihsb2NhbGUgfHwgJ2VuJylcbiAgY29uc3QgW2N1cnJlbnRUaW1lem9uZSwgc2V0Q3VycmVudFRpbWV6b25lXSA9IHVzZVN0YXRlPHN0cmluZz4odGltZXpvbmUgfHwgJycpXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBldmVudHMgZm9yIGEgc3BlY2lmaWMgZGF0ZSByYW5nZSAob24tZGVtYW5kIGdlbmVyYXRpb24pXG4gIGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gICAgICBjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuICAgICAgICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICAgICAgICAvLyBHZW5lcmF0ZSByZWN1cnJpbmcgaW5zdGFuY2VzIGZvciB0aGUgc3BlY2lmaWMgcmFuZ2VcbiAgICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudHMgPSBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgICAgICBzdGFydERhdGUsXG4gICAgICAgICAgICBlbmREYXRlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgYWxsRXZlbnRzLnB1c2goLi4ucmVjdXJyaW5nRXZlbnRzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFkZCBub24tcmVjdXJyaW5nIGV2ZW50cyB3aXRoIGNvbXByZWhlbnNpdmUgcmFuZ2UgY2hlY2tpbmdcbiAgICAgICAgICBjb25zdCBldmVudFN0YXJ0c0luUmFuZ2UgPVxuICAgICAgICAgICAgZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG4gICAgICAgICAgICBldmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXG4gICAgICAgICAgY29uc3QgZXZlbnRFbmRzSW5SYW5nZSA9XG4gICAgICAgICAgICBldmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG4gICAgICAgICAgICBldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblxuICAgICAgICAgIGNvbnN0IGV2ZW50U3BhbnNSYW5nZSA9XG4gICAgICAgICAgICBldmVudC5zdGFydC5pc0JlZm9yZShzdGFydERhdGUpICYmIGV2ZW50LmVuZC5pc0FmdGVyKGVuZERhdGUpXG5cbiAgICAgICAgICBpZiAoZXZlbnRTdGFydHNJblJhbmdlIHx8IGV2ZW50RW5kc0luUmFuZ2UgfHwgZXZlbnRTcGFuc1JhbmdlKSB7XG4gICAgICAgICAgICBhbGxFdmVudHMucHVzaChldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsbEV2ZW50c1xuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICAvLyBHZXQgdGhlIGN1cnJlbnQgdmlldydzIGRhdGUgcmFuZ2UgZm9yIG9uLWRlbWFuZCBldmVudCBnZW5lcmF0aW9uXG4gIGNvbnN0IGdldEN1cnJlbnRWaWV3UmFuZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKSxcbiAgICAgICAgfVxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAuc3VidHJhY3QoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5lbmRPZignd2VlaycpXG4gICAgICAgICAgICAuYWRkKGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgfVxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ21vbnRoJylcbiAgICAgICAgICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5zdWJ0cmFjdChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLmVuZE9mKCdtb250aCcpXG4gICAgICAgICAgICAuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgLmFkZChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCd5ZWFyJyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZS5lbmRPZigneWVhcicpLFxuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGUuZW5kT2YoJ21vbnRoJyksXG4gICAgICAgIH1cbiAgICB9XG4gIH0sIFtjdXJyZW50RGF0ZSwgdmlldywgZmlyc3REYXlPZldlZWtdKVxuXG4gIC8vIEdldCBwcm9jZXNzZWQgZXZlbnRzIGZvciB0aGUgY3VycmVudCB2aWV3IChvbi1kZW1hbmQpXG4gIGNvbnN0IHByb2Nlc3NlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gZ2V0Q3VycmVudFZpZXdSYW5nZSgpXG4gICAgcmV0dXJuIGdldEV2ZW50c0ZvckRhdGVSYW5nZShzdGFydCwgZW5kKVxuICB9LCBbZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRDdXJyZW50Vmlld1JhbmdlXSlcblxuICAvLyBVcGRhdGUgZXZlbnRzIHdoZW4gZXZlbnRzIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoZXZlbnRzKVxuICAgIH1cbiAgfSwgW2V2ZW50c10pXG5cbiAgLy8gQ29uZmlndXJlIGxvY2FsZSB3aGVuIGxvY2FsZSBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9jYWxlKSB7XG4gICAgICBzZXRDdXJyZW50TG9jYWxlKGxvY2FsZSlcbiAgICAgIGRheWpzLmxvY2FsZShsb2NhbGUpXG4gICAgfVxuICB9LCBbbG9jYWxlXSlcblxuICAvLyBDb25maWd1cmUgdGltZXpvbmUgZm9yIGN1cnJlbnREYXRlIHdoZW4gdGltZXpvbmUgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRpbWV6b25lKSB7XG4gICAgICBzZXRDdXJyZW50VGltZXpvbmUodGltZXpvbmUpXG4gICAgICBkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuICAgIH1cbiAgfSwgW3RpbWV6b25lXSlcblxuICAvLyBIYW5kbGVyc1xuICBjb25zdCBzZWxlY3REYXRlID0gdXNlQ2FsbGJhY2soKGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgc2V0Q3VycmVudERhdGUoZGF0ZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5hZGQoMSwgJ21vbnRoJykpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5hZGQoMSwgJ3dlZWsnKSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4gY3VycmVudERhdGUuYWRkKDEsICdkYXknKSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IGN1cnJlbnREYXRlLmFkZCgxLCAneWVhcicpKVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXddKVxuXG4gIGNvbnN0IHByZXZQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ21vbnRoJykpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnZGF5JykpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAneWVhcicpKVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXddKVxuXG4gIGNvbnN0IHRvZGF5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEN1cnJlbnREYXRlKGRheWpzKCkpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgc2V0Q3VycmVudEV2ZW50cygocHJldkV2ZW50cykgPT4gWy4uLnByZXZFdmVudHMsIGV2ZW50XSlcbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnRJZDogc3RyaW5nLCB1cGRhdGVkRXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoKHByZXZFdmVudHMpID0+XG4gICAgICAgIHByZXZFdmVudHMubWFwKChldmVudCkgPT5cbiAgICAgICAgICBldmVudC5pZCA9PT0gZXZlbnRJZCA/IHsgLi4uZXZlbnQsIC4uLnVwZGF0ZWRFdmVudCB9IDogZXZlbnRcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuICAgICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICAgKSA9PiB7XG4gICAgICAvLyBVc2Ugb3VyIGltcGxlbWVudGVkIHJlY3VycmluZyBldmVudCB1cGRhdGUgZnVuY3Rpb25cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG4gICAgICAvLyBVc2Ugb3VyIGltcGxlbWVudGVkIHJlY3VycmluZyBldmVudCBkZWxldGUgZnVuY3Rpb25cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICBjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKChldmVudElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRDdXJyZW50RXZlbnRzKChwcmV2RXZlbnRzKSA9PlxuICAgICAgcHJldkV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5pZCAhPT0gZXZlbnRJZClcbiAgICApXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIHNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG4gICAgc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsb3NlRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlbGVjdGVkRGF0ZShudWxsKVxuICAgIHNldFNlbGVjdGVkRXZlbnQobnVsbClcbiAgICBzZXRJc0V2ZW50Rm9ybU9wZW4oZmFsc2UpXG4gIH0sIFtdKVxuXG4gIC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG4gIGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3VmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInKSA9PiB7XG4gICAgICBzZXRWaWV3KG5ld1ZpZXcpXG4gICAgICBvblZpZXdDaGFuZ2U/LihuZXdWaWV3KVxuICAgIH0sXG4gICAgW29uVmlld0NoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9uRXZlbnRDbGljaykge1xuICAgICAgICBvbkV2ZW50Q2xpY2soZXZlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0RXZlbnQoZXZlbnQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbZGlzYWJsZUNlbGxDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAob25DZWxsQ2xpY2spIHtcbiAgICAgICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKHN0YXJ0RGF0ZSlcbiAgICAgICAgc2V0U2VsZWN0ZWRFdmVudCh7XG4gICAgICAgICAgdGl0bGU6IGBOZXcgRXZlbnRgLFxuICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGUsXG4gICAgICAgICAgZW5kOiBlbmREYXRlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBhbGxEYXk6IGZhbHNlLFxuICAgICAgICB9IGFzIENhbGVuZGFyRXZlbnQpXG4gICAgICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrXVxuICApXG5cbiAgY29uc3QgaGFuZGxlT3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRlPzogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgIHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRFdmVudCh7XG4gICAgICAgIHRpdGxlOiBgTmV3IEV2ZW50YCxcbiAgICAgICAgc3RhcnQ6IGRhdGUgPz8gY3VycmVudERhdGUsXG4gICAgICAgIGVuZDogZGF0ZSA/PyBjdXJyZW50RGF0ZS5hZGQoMSwgJ2hvdXInKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICBhbGxEYXk6IGZhbHNlLFxuICAgICAgfSBhcyBDYWxlbmRhckV2ZW50KVxuICAgICAgc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gICAgfSxcbiAgICBbY3VycmVudERhdGVdXG4gIClcblxuICAvLyBGaW5kIHBhcmVudCByZWN1cnJpbmcgZXZlbnQgZm9yIGEgZ2l2ZW4gZXZlbnQgaW5zdGFuY2VcbiAgY29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuICAgICAgLy8gR2VuZXJhdGUgVUlEIGlmIG1pc3NpbmcgKGZvbGxvd2luZyBSRkMgNTU0NSBjb21wbGlhbmNlKVxuICAgICAgY29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cbiAgICAgIGNvbnN0IHBhcmVudEV2ZW50ID0gY3VycmVudEV2ZW50cy5maW5kKChlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudFVJRCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgICAgICByZXR1cm4gcGFyZW50VUlEID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHBhcmVudEV2ZW50IHx8IG51bGxcbiAgICB9LFxuICAgIFtjdXJyZW50RXZlbnRzXVxuICApXG5cbiAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgdmlldyxcbiAgICAgIGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgcmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuICAgICAgY3VycmVudExvY2FsZSxcbiAgICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgICBzZWxlY3RlZERhdGUsXG4gICAgICBmaXJzdERheU9mV2VlayxcbiAgICAgIHNldEN1cnJlbnREYXRlLFxuICAgICAgc2VsZWN0RGF0ZSxcbiAgICAgIHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG4gICAgICBuZXh0UGVyaW9kLFxuICAgICAgcHJldlBlcmlvZCxcbiAgICAgIHRvZGF5LFxuICAgICAgYWRkRXZlbnQsXG4gICAgICB1cGRhdGVFdmVudCxcbiAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgZGVsZXRlRXZlbnQsXG4gICAgICBkZWxldGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIG9wZW5FdmVudEZvcm06IGhhbmRsZU9wZW5FdmVudEZvcm0sXG4gICAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICAgIGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcbiAgICAgIGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcbiAgICAgIHJlbmRlckV2ZW50LFxuICAgICAgb25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuICAgICAgb25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHRpbWV6b25lOiBjdXJyZW50VGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICB9KSxcbiAgICBbXG4gICAgICBjdXJyZW50RGF0ZSxcbiAgICAgIHZpZXcsXG4gICAgICBwcm9jZXNzZWRFdmVudHMsXG4gICAgICBjdXJyZW50RXZlbnRzLFxuICAgICAgY3VycmVudExvY2FsZSxcbiAgICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgICBzZWxlY3RlZERhdGUsXG4gICAgICBmaXJzdERheU9mV2VlayxcbiAgICAgIHNlbGVjdERhdGUsXG4gICAgICBoYW5kbGVWaWV3Q2hhbmdlLFxuICAgICAgbmV4dFBlcmlvZCxcbiAgICAgIGhhbmRsZU9wZW5FdmVudEZvcm0sXG4gICAgICBwcmV2UGVyaW9kLFxuICAgICAgdG9kYXksXG4gICAgICBhZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50LFxuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBkZWxldGVFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgY2xvc2VFdmVudEZvcm0sXG4gICAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICBjdXJyZW50VGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICBdXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiLy8gTWFpbiBjYWxlbmRhciBjb21wb25lbnRcbmV4cG9ydCB7IElsYW15Q2FsZW5kYXIgfSBmcm9tICcuL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvaWxhbXktY2FsZW5kYXInXG5cbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tcbmV4cG9ydCB7IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5cbi8vIFJSVUxFLWJhc2VkIHJlY3VycmVuY2Ugc3lzdGVtXG5leHBvcnQge1xuICBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcbiAgaXNSZWN1cnJpbmdFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnLi9saWIvcmVjdXJyZW5jZS1oYW5kbGVyL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBJbGFteUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB9IGZyb20gJy4vY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBGcmVxdWVuY3ksIFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsNEJBQVMsNEJBQWlCO0FBQzFCLDRCQUFnQjs7O0FDQ2hCO0FBaURPLElBQU0sa0JBQ1gsY0FBK0MsU0FBUztBQUVuRCxJQUFNLHFCQUFxQixNQUEyQjtBQUFBLEVBQzNELE1BQU0sVUFBVSxXQUFXLGVBQWU7QUFBQSxFQUMxQyxJQUFJLFlBQVksV0FBVztBQUFBLElBQ3pCLE1BQU0sSUFBSSxNQUFNLDJEQUEyRDtBQUFBLEVBQzdFO0FBQUEsRUFDQSxPQUFPO0FBQUE7QUErQkYsSUFBTSwwQkFBMEIsTUFBcUM7QUFBQSxFQUMxRSxNQUFNLFVBQVUsV0FBVyxlQUFlO0FBQUEsRUFDMUMsSUFBSSxZQUFZLFdBQVc7QUFBQSxJQUN6QixNQUFNLElBQUksTUFDUixnRUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLGFBQWEsUUFBUTtBQUFBLElBQ3JCLE1BQU0sUUFBUTtBQUFBLElBQ2QsUUFBUSxRQUFRO0FBQUEsSUFDaEIsaUJBQWlCLFFBQVE7QUFBQSxJQUN6QixlQUFlLFFBQVE7QUFBQSxJQUN2QixjQUFjLFFBQVE7QUFBQSxJQUN0QixnQkFBZ0IsUUFBUTtBQUFBLElBQ3hCLGdCQUFnQixRQUFRO0FBQUEsSUFDeEIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsU0FBUyxRQUFRO0FBQUEsSUFDakIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsT0FBTyxRQUFRO0FBQUEsSUFDZixVQUFVLFFBQVE7QUFBQSxJQUNsQixhQUFhLFFBQVE7QUFBQSxJQUNyQixhQUFhLFFBQVE7QUFBQSxJQUNyQixlQUFlLFFBQVE7QUFBQSxJQUN2QixnQkFBZ0IsUUFBUTtBQUFBLEVBQzFCO0FBQUE7OztBQ3BIRjtBQUVBOzs7QUNEQTs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQUEsUUFDVixVQUFVO0FBQUEsT0FDWjtBQUFBO0FBQUEsR0FFRjtBQUFBO0FBSU4sSUFBTSx5QkFBeUI7QUFDeEIsSUFBTSxnQkFBOEM7QUFBQSxFQUN6RDtBQUFBLEVBQ0EsaUJBQWlCO0FBQUEsRUFDakI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQUEsRUFDbkIsc0JBQXNCO0FBQUEsRUFDdEI7QUFBQSxNQUNJO0FBQUEsRUFDSix1QkFDRSxNQWtCRSxrQkFsQkY7QUFBQSxJQUNFLFFBQVEsbUNBQW1DLE1BQU07QUFBQSxJQUNqRCxnQkFBZ0IscUJBQXFCO0FBQUEsSUFDckM7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBZkYsMEJBaUJFLE1BQUMsaUJBQUQsRUFBaUI7QUFBQSxHQUNqQjtBQUFBOzs7QUdsR04sa0JBQVM7IiwKICAiZGVidWdJZCI6ICI3NzIxRkY0MkVBODVCQTYwNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
|
4799
|
+
//# debugId=B447EF05B8FF828364756E2164756E21
|
|
4800
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy92aWV3L21vbnRoLXZpZXcudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsICIuLi9zcmMvbGliL3V0aWxzLnRzIiwgIi4uL3NyYy9saWIvZGF5anMtY29uZmlnLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2NhbGVuZGFyLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9jaGVja2JveC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvY2FyZC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvc2VsZWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90YWJzLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90b29sdGlwLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy9kYXktY2VsbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL21vbnRoLWhlYWRlci9tb250aC1oZWFkZXIudHN4IiwgIi4uL3NyYy9saWIvY29uc3RhbnRzLnRzIiwgIi4uL3NyYy9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgIi4uL3NyYy9mZWF0dXJlcy9tb250aC12aWV3L2NvbXBvbmVudHMvd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXIudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvdmlldy93ZWVrLXZpZXcudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvd2Vlay1hbGwtZGF5LXJvdy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLWhlYWRlci50c3giLCAiLi4vc3JjL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktZXZlbnRzLWxheWVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvd2Vlay12aWV3L3dlZWstZGF5LWNvbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLXRpbWUtZ3JpZC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvdmlldy9kYXktdmlldy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWFsbC1kYXktcm93LnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktaGVhZGVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktdGltZS1jb2wudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAiLi4vc3JjL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICIuLi9zcmMvbGliL2V4cG9ydC1pY2FsLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci9iYXNlLWhlYWRlci50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMveWVhci12aWV3L3ZpZXcveWVhci12aWV3LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci9pbGFteS1jYWxlbmRhci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICIuLi9zcmMvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0LnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBEYXlDZWxsIH0gZnJvbSAnLi4vZGF5LWNlbGwnXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzLCBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuLi9tb250aC1oZWFkZXIvbW9udGgtaGVhZGVyJ1xuaW1wb3J0IHsgV2Vla0V2ZW50c0xheWVyIH0gZnJvbSAnLi4vd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXInXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoeyBkYXlNYXhFdmVudHMgPSAzIH0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuICAvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuICBsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuICB3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG4gICAgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5JylcbiAgfVxuXG4gIC8vIEFsd2F5cyBnZW5lcmF0ZSA2IHdlZWtzICg0MiBkYXlzKSByZWdhcmRsZXNzIG9mIHRoZSBtb250aCBsZW5ndGhcbiAgLy8gVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIDYgcm93cyBvZiBkYXlzXG4gIGNvbnN0IGNhbGVuZGFyRGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIDYgd2Vla3Mgw5cgNyBkYXlzID0gNDIgZGF5c1xuICAgIGNvbnN0IGRheXM6IGRheWpzLkRheWpzW11bXSA9IFtbXV1cbiAgICBsZXQgZGF5ID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuY2xvbmUoKSAvLyBDbG9uZSB0byBhdm9pZCBtdXRhdGlvblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDI7IGkrKykge1xuICAgICAgaWYgKGRheXNbZGF5cy5sZW5ndGggLSAxXS5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgZGF5cy5wdXNoKFtdKSAvLyBTdGFydCBhIG5ldyB3ZWVrXG4gICAgICB9XG4gICAgICBkYXlzW2RheXMubGVuZ3RoIC0gMV0ucHVzaChkYXkpXG4gICAgICBkYXkgPSBkYXkuYWRkKDEsICdkYXknKSAvLyBNb3ZlIHRvIHRoZSBuZXh0IGRheVxuICAgIH1cbiAgICByZXR1cm4gZGF5c1xuICB9LCBbYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXJdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiIGRhdGEtdGVzdGlkPVwibW9udGgtdmlld1wiPlxuICAgICAgey8qIFdlZWsgZGF5cyBoZWFkZXIgKi99XG4gICAgICA8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC1bM3JlbV1cIiAvPlxuXG4gICAgICB7LyogQ2FsZW5kYXIgZ3JpZCAtIGFkZGVkIGZpeGVkIGhlaWdodCAqL31cbiAgICAgIDxTY3JvbGxBcmVhXG4gICAgICAgIGNsYXNzTmFtZT1cIm92ZXJmbG93LWF1dG8gaC1bY2FsYygxMDAlLTNyZW0pXVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtc2Nyb2xsLWFyZWFcIlxuICAgICAgICB2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCAqOm1pbi1oLWZ1bGwnIH19XG4gICAgICA+XG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBncmlkIGgtZnVsbCBncmlkLWNvbHMtNyBncmlkLXJvd3MtNiBvdmVyZmxvdy1hdXRvIGZsZXgtMVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbnRoLWNhbGVuZGFyLWdyaWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBEYXkgY2VsbHMgKi99XG4gICAgICAgICAgICB7Y2FsZW5kYXJEYXlzLm1hcCgoZGF5cywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2B3ZWVrLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTcgZ3JpZCBncmlkLWNvbHMtN1wiXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstcm93LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7ZGF5cy5tYXAoKGRheSwgZGF5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8RGF5Q2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2RheUluZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5PXtkYXl9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXIgYm9yZGVyLWIgZmlyc3Q6Ym9yZGVyLWxcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxXZWVrRXZlbnRzTGF5ZXIgZGF5cz17ZGF5c30gLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9TY3JvbGxBcmVhPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uS2V5IH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZGF0ZT86IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG4gIGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anNcbiAgKSA9PiBDYWxlbmRhckV2ZW50W11cbiAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s6IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjdXJyZW50TG9jYWxlPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuICBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuICB0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuICBjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuICB9XG4gIHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuICByZWFkb25seSB2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgcmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgcmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG4gIHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG4gIHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgcmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2V0VmlldzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICByZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSB1cGRhdGVFdmVudDogKFxuICAgIGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICApID0+IHZvaWRcbiAgcmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlDYWxlbmRhckNvbnRleHQgPSAoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndXNlSWxhbXlDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInXG4gICAgKVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG4gICAgdmlldzogY29udGV4dC52aWV3LFxuICAgIGV2ZW50czogY29udGV4dC5ldmVudHMsXG4gICAgaXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3BlbixcbiAgICBzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcbiAgICBmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2VlayxcbiAgICBzZXRDdXJyZW50RGF0ZTogY29udGV4dC5zZXRDdXJyZW50RGF0ZSxcbiAgICBzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG4gICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgIG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG4gICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgYWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG4gICAgb3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuICAgIGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuICB9IGFzIGNvbnN0XG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuICBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcbiAgICAgICAgZGVzdHJ1Y3RpdmU6XG4gICAgICAgICAgJ2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgc2hhZG93LXhzIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzYwJyxcbiAgICAgICAgb3V0bGluZTpcbiAgICAgICAgICAnYm9yZGVyIGJnLWJhY2tncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpib3JkZXItaW5wdXQgZGFyazpob3ZlcjpiZy1pbnB1dC81MCcsXG4gICAgICAgIHNlY29uZGFyeTpcbiAgICAgICAgICAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG4gICAgICAgIGdob3N0OlxuICAgICAgICAgICdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG4gICAgICAgIGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuICAgICAgICBzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG4gICAgICAgIGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00JyxcbiAgICAgICAgaWNvbjogJ3NpemUtOScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmYXVsdFZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiAnZGVmYXVsdCcsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgfSxcbiAgfVxuKVxuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIHZhcmlhbnQsXG4gIHNpemUsXG4gIGFzQ2hpbGQgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdidXR0b24nPiAmXG4gIFZhcmlhbnRQcm9wczx0eXBlb2YgYnV0dG9uVmFyaWFudHM+ICYge1xuICAgIGFzQ2hpbGQ/OiBib29sZWFuXG4gIH0pIHtcbiAgY29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbidcblxuICByZXR1cm4gKFxuICAgIDxDb21wXG4gICAgICBkYXRhLXNsb3Q9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XG4gIHJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTW9ja0V2ZW50cyh7IGNvdW50ID0gNSB9ID0ge30pIHtcbiAgY29uc3QgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBldmVudHMucHVzaCh7XG4gICAgICBpZDogaS50b1N0cmluZygpLFxuICAgICAgdGl0bGU6IGBNb2NrIEV2ZW50ICR7aSArIDF9YCxcbiAgICAgIHN0YXJ0OiBkYXlqcygpLnN0YXJ0T2YoJ3dlZWsnKS5hZGQoaSwgJ2RheScpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgZW5kOiBkYXlqcygpLnN0YXJ0T2YoJ3dlZWsnKS5hZGQoaSwgJ2RheScpLmVuZE9mKCdkYXknKSxcbiAgICAgIGNvbG9yOiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCcsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZXZlbnRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShkYXRlOiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmcpOiBkYXlqcy5EYXlqcyB7XG4gIGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuICByZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogZGF5anMoKVxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmo6IFQsXG4gIGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGRlbGV0ZSByZXN1bHRba2V5XVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVB1YmxpY0ZhY2luZ0NhbGVuZGFyRXZlbnQoXG4gIGV2ZW50czogSWxhbXlDYWxlbmRhclByb3BFdmVudFtdXG4pOiBDYWxlbmRhckV2ZW50W10ge1xuICBpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgLy8gRXZlbnRzIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCB3aXRoIFJSVUxFIHN0cmluZ3NcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBzdGFydDogZGF5anMuaXNEYXlqcyhldmVudC5zdGFydCkgPyBldmVudC5zdGFydCA6IGRheWpzKGV2ZW50LnN0YXJ0KSxcbiAgICAgIGVuZDogZGF5anMuaXNEYXlqcyhldmVudC5lbmQpID8gZXZlbnQuZW5kIDogZGF5anMoZXZlbnQuZW5kKSxcbiAgICB9IGFzIENhbGVuZGFyRXZlbnRcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IHdlZWtkYXkgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtkYXkuanMnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhci5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcblxuLy8gRXh0ZW5kIGRheWpzIHdpdGggcGx1Z2luc1xuZGF5anMuZXh0ZW5kKHdlZWtkYXkpXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKVxuZGF5anMuZXh0ZW5kKGlzQmV0d2VlbilcbmRheWpzLmV4dGVuZChtaW5NYXgpXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXG5kYXlqcy5leHRlbmQodXRjKVxuZGF5anMuZXh0ZW5kKGxvY2FsZURhdGEpXG5cbi8vIEltcG9ydCBhbGwgZGF5anMgbG9jYWxlcyBhbHBoYWJldGljYWxseVxuLy8gbG9jYWxlLmpzb24gZmlsZTogW3tcImtleVwiOlwiYWZcIixcIm5hbWVcIjpcIkFmcmlrYWFuc1wifSx7XCJrZXlcIjpcImFtXCIsXCJuYW1lXCI6XCJBbWhhcmljXCJ9LHtcImtleVwiOlwiYXItZHpcIixcIm5hbWVcIjpcIkFyYWJpYyAoQWxnZXJpYSlcIn0se1wia2V5XCI6XCJhci1pcVwiLFwibmFtZVwiOlwiIEFyYWJpYyAoSXJhcSlcIn0se1wia2V5XCI6XCJhci1rd1wiLFwibmFtZVwiOlwiQXJhYmljIChLdXdhaXQpXCJ9LHtcImtleVwiOlwiYXItbHlcIixcIm5hbWVcIjpcIkFyYWJpYyAoTHliaWEpXCJ9LHtcImtleVwiOlwiYXItbWFcIixcIm5hbWVcIjpcIkFyYWJpYyAoTW9yb2NjbylcIn0se1wia2V5XCI6XCJhci1zYVwiLFwibmFtZVwiOlwiQXJhYmljIChTYXVkaSBBcmFiaWEpXCJ9LHtcImtleVwiOlwiYXItdG5cIixcIm5hbWVcIjpcIiBBcmFiaWMgKFR1bmlzaWEpXCJ9LHtcImtleVwiOlwiYXJcIixcIm5hbWVcIjpcIkFyYWJpY1wifSx7XCJrZXlcIjpcImF6XCIsXCJuYW1lXCI6XCJBemVyYmFpamFuaVwifSx7XCJrZXlcIjpcImJlXCIsXCJuYW1lXCI6XCJCZWxhcnVzaWFuXCJ9LHtcImtleVwiOlwiYmdcIixcIm5hbWVcIjpcIkJ1bGdhcmlhblwifSx7XCJrZXlcIjpcImJpXCIsXCJuYW1lXCI6XCJCaXNsYW1hXCJ9LHtcImtleVwiOlwiYm1cIixcIm5hbWVcIjpcIkJhbWJhcmFcIn0se1wia2V5XCI6XCJibi1iZFwiLFwibmFtZVwiOlwiQmVuZ2FsaSAoQmFuZ2xhZGVzaClcIn0se1wia2V5XCI6XCJiblwiLFwibmFtZVwiOlwiQmVuZ2FsaVwifSx7XCJrZXlcIjpcImJvXCIsXCJuYW1lXCI6XCJUaWJldGFuXCJ9LHtcImtleVwiOlwiYnJcIixcIm5hbWVcIjpcIkJyZXRvblwifSx7XCJrZXlcIjpcImJzXCIsXCJuYW1lXCI6XCJCb3NuaWFuXCJ9LHtcImtleVwiOlwiY2FcIixcIm5hbWVcIjpcIkNhdGFsYW5cIn0se1wia2V5XCI6XCJjc1wiLFwibmFtZVwiOlwiQ3plY2hcIn0se1wia2V5XCI6XCJjdlwiLFwibmFtZVwiOlwiQ2h1dmFzaFwifSx7XCJrZXlcIjpcImN5XCIsXCJuYW1lXCI6XCJXZWxzaFwifSx7XCJrZXlcIjpcImRlLWF0XCIsXCJuYW1lXCI6XCJHZXJtYW4gKEF1c3RyaWEpXCJ9LHtcImtleVwiOlwiZGFcIixcIm5hbWVcIjpcIkRhbmlzaFwifSx7XCJrZXlcIjpcImRlLWNoXCIsXCJuYW1lXCI6XCJHZXJtYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcImRlXCIsXCJuYW1lXCI6XCJHZXJtYW5cIn0se1wia2V5XCI6XCJkdlwiLFwibmFtZVwiOlwiTWFsZGl2aWFuXCJ9LHtcImtleVwiOlwiZWxcIixcIm5hbWVcIjpcIkdyZWVrXCJ9LHtcImtleVwiOlwiZW4tYXVcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKEF1c3RyYWxpYSlcIn0se1wia2V5XCI6XCJlbi1jYVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoQ2FuYWRhKVwifSx7XCJrZXlcIjpcImVuLWdiXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSlcIn0se1wia2V5XCI6XCJlbi1pZVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXJlbGFuZClcIn0se1wia2V5XCI6XCJlbi1pbFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXNyYWVsKVwifSx7XCJrZXlcIjpcImVuLWluXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJbmRpYSlcIn0se1wia2V5XCI6XCJlbi1uelwiLFwibmFtZVwiOlwiRW5nbGlzaCAoTmV3IFplYWxhbmQpXCJ9LHtcImtleVwiOlwiZW4tc2dcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFNpbmdhcG9yZSlcIn0se1wia2V5XCI6XCJlbi10dFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoVHJpbmlkYWQgJiBUb2JhZ28pXCJ9LHtcImtleVwiOlwiZW9cIixcIm5hbWVcIjpcIkVzcGVyYW50b1wifSx7XCJrZXlcIjpcImVuXCIsXCJuYW1lXCI6XCJFbmdsaXNoXCJ9LHtcImtleVwiOlwiZXMtZG9cIixcIm5hbWVcIjpcIlNwYW5pc2ggKERvbWluaWNhbiBSZXB1YmxpYylcIn0se1wia2V5XCI6XCJlcy1teFwiLFwibmFtZVwiOlwiU3BhbmlzaCAoTWV4aWNvKVwifSx7XCJrZXlcIjpcImVzLXByXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChQdWVydG8gUmljbylcIn0se1wia2V5XCI6XCJlcy11c1wiLFwibmFtZVwiOlwiU3BhbmlzaCAoVW5pdGVkIFN0YXRlcylcIn0se1wia2V5XCI6XCJldFwiLFwibmFtZVwiOlwiRXN0b25pYW5cIn0se1wia2V5XCI6XCJlc1wiLFwibmFtZVwiOlwiU3BhbmlzaFwifSx7XCJrZXlcIjpcImV1XCIsXCJuYW1lXCI6XCJCYXNxdWVcIn0se1wia2V5XCI6XCJmYVwiLFwibmFtZVwiOlwiUGVyc2lhblwifSx7XCJrZXlcIjpcImZvXCIsXCJuYW1lXCI6XCJGYXJvZXNlXCJ9LHtcImtleVwiOlwiZmlcIixcIm5hbWVcIjpcIkZpbm5pc2hcIn0se1wia2V5XCI6XCJmci1jYVwiLFwibmFtZVwiOlwiRnJlbmNoIChDYW5hZGEpXCJ9LHtcImtleVwiOlwiZnItY2hcIixcIm5hbWVcIjpcIkZyZW5jaCAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiZnJcIixcIm5hbWVcIjpcIkZyZW5jaFwifSx7XCJrZXlcIjpcImZ5XCIsXCJuYW1lXCI6XCJGcmlzaWFuXCJ9LHtcImtleVwiOlwiZ2FcIixcIm5hbWVcIjpcIklyaXNoIG9yIElyaXNoIEdhZWxpY1wifSx7XCJrZXlcIjpcImdkXCIsXCJuYW1lXCI6XCJTY290dGlzaCBHYWVsaWNcIn0se1wia2V5XCI6XCJnb20tbGF0blwiLFwibmFtZVwiOlwiS29ua2FuaSBMYXRpbiBzY3JpcHRcIn0se1wia2V5XCI6XCJnbFwiLFwibmFtZVwiOlwiR2FsaWNpYW5cIn0se1wia2V5XCI6XCJndVwiLFwibmFtZVwiOlwiR3VqYXJhdGlcIn0se1wia2V5XCI6XCJoZVwiLFwibmFtZVwiOlwiSGVicmV3XCJ9LHtcImtleVwiOlwiaGlcIixcIm5hbWVcIjpcIkhpbmRpXCJ9LHtcImtleVwiOlwiaHJcIixcIm5hbWVcIjpcIkNyb2F0aWFuXCJ9LHtcImtleVwiOlwiaHVcIixcIm5hbWVcIjpcIkh1bmdhcmlhblwifSx7XCJrZXlcIjpcImh0XCIsXCJuYW1lXCI6XCJIYWl0aWFuIENyZW9sZSAoSGFpdGkpXCJ9LHtcImtleVwiOlwiaHktYW1cIixcIm5hbWVcIjpcIkFybWVuaWFuXCJ9LHtcImtleVwiOlwiaWRcIixcIm5hbWVcIjpcIkluZG9uZXNpYW5cIn0se1wia2V5XCI6XCJpc1wiLFwibmFtZVwiOlwiSWNlbGFuZGljXCJ9LHtcImtleVwiOlwiaXQtY2hcIixcIm5hbWVcIjpcIkl0YWxpYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcIml0XCIsXCJuYW1lXCI6XCJJdGFsaWFuXCJ9LHtcImtleVwiOlwiamFcIixcIm5hbWVcIjpcIkphcGFuZXNlXCJ9LHtcImtleVwiOlwianZcIixcIm5hbWVcIjpcIkphdmFuZXNlXCJ9LHtcImtleVwiOlwia2FcIixcIm5hbWVcIjpcIkdlb3JnaWFuXCJ9LHtcImtleVwiOlwia2tcIixcIm5hbWVcIjpcIkthemFraFwifSx7XCJrZXlcIjpcImttXCIsXCJuYW1lXCI6XCJDYW1ib2RpYW5cIn0se1wia2V5XCI6XCJrblwiLFwibmFtZVwiOlwiS2FubmFkYVwifSx7XCJrZXlcIjpcImtvXCIsXCJuYW1lXCI6XCJLb3JlYW5cIn0se1wia2V5XCI6XCJrdVwiLFwibmFtZVwiOlwiS3VyZGlzaFwifSx7XCJrZXlcIjpcImt5XCIsXCJuYW1lXCI6XCJLeXJneXpcIn0se1wia2V5XCI6XCJsYlwiLFwibmFtZVwiOlwiTHV4ZW1ib3VyZ2lzaFwifSx7XCJrZXlcIjpcImxvXCIsXCJuYW1lXCI6XCJMYW9cIn0se1wia2V5XCI6XCJsdFwiLFwibmFtZVwiOlwiTGl0aHVhbmlhblwifSx7XCJrZXlcIjpcImx2XCIsXCJuYW1lXCI6XCJMYXR2aWFuXCJ9LHtcImtleVwiOlwibWVcIixcIm5hbWVcIjpcIk1vbnRlbmVncmluXCJ9LHtcImtleVwiOlwibWlcIixcIm5hbWVcIjpcIk1hb3JpXCJ9LHtcImtleVwiOlwibWtcIixcIm5hbWVcIjpcIk1hY2Vkb25pYW5cIn0se1wia2V5XCI6XCJtbFwiLFwibmFtZVwiOlwiTWFsYXlhbGFtXCJ9LHtcImtleVwiOlwibW5cIixcIm5hbWVcIjpcIk1vbmdvbGlhblwifSx7XCJrZXlcIjpcIm1yXCIsXCJuYW1lXCI6XCJNYXJhdGhpXCJ9LHtcImtleVwiOlwibXMtbXlcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXNcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXRcIixcIm5hbWVcIjpcIk1hbHRlc2UgKE1hbHRhKVwifSx7XCJrZXlcIjpcIm15XCIsXCJuYW1lXCI6XCJCdXJtZXNlXCJ9LHtcImtleVwiOlwibmJcIixcIm5hbWVcIjpcIk5vcndlZ2lhbiBCb2ttw6VsXCJ9LHtcImtleVwiOlwibmVcIixcIm5hbWVcIjpcIk5lcGFsZXNlXCJ9LHtcImtleVwiOlwibmwtYmVcIixcIm5hbWVcIjpcIkR1dGNoIChCZWxnaXVtKVwifSx7XCJrZXlcIjpcIm5sXCIsXCJuYW1lXCI6XCJEdXRjaFwifSx7XCJrZXlcIjpcInBsXCIsXCJuYW1lXCI6XCJQb2xpc2hcIn0se1wia2V5XCI6XCJwdC1iclwiLFwibmFtZVwiOlwiUG9ydHVndWVzZSAoQnJhemlsKVwifSx7XCJrZXlcIjpcInB0XCIsXCJuYW1lXCI6XCJQb3J0dWd1ZXNlXCJ9LHtcImtleVwiOlwicm5cIixcIm5hbWVcIjpcIktpcnVuZGlcIn0se1wia2V5XCI6XCJyb1wiLFwibmFtZVwiOlwiUm9tYW5pYW5cIn0se1wia2V5XCI6XCJydVwiLFwibmFtZVwiOlwiUnVzc2lhblwifSx7XCJrZXlcIjpcInJ3XCIsXCJuYW1lXCI6XCJLaW55YXJ3YW5kYSAoUndhbmRhKVwifSx7XCJrZXlcIjpcInNkXCIsXCJuYW1lXCI6XCJTaW5kaGlcIn0se1wia2V5XCI6XCJzZVwiLFwibmFtZVwiOlwiTm9ydGhlcm4gU2FtaVwifSx7XCJrZXlcIjpcInNpXCIsXCJuYW1lXCI6XCJTaW5oYWxlc2VcIn0se1wia2V5XCI6XCJza1wiLFwibmFtZVwiOlwiU2xvdmFrXCJ9LHtcImtleVwiOlwic2xcIixcIm5hbWVcIjpcIlNsb3ZlbmlhblwifSx7XCJrZXlcIjpcInNxXCIsXCJuYW1lXCI6XCJBbGJhbmlhblwifSx7XCJrZXlcIjpcInNyLWN5cmxcIixcIm5hbWVcIjpcIlNlcmJpYW4gQ3lyaWxsaWNcIn0se1wia2V5XCI6XCJzc1wiLFwibmFtZVwiOlwic2lTd2F0aVwifSx7XCJrZXlcIjpcInN2LWZpXCIsXCJuYW1lXCI6XCJGaW5sYW5kIFN3ZWRpc2hcIn0se1wia2V5XCI6XCJzclwiLFwibmFtZVwiOlwiU2VyYmlhblwifSx7XCJrZXlcIjpcInN2XCIsXCJuYW1lXCI6XCJTd2VkaXNoXCJ9LHtcImtleVwiOlwic3dcIixcIm5hbWVcIjpcIlN3YWhpbGlcIn0se1wia2V5XCI6XCJ0YVwiLFwibmFtZVwiOlwiVGFtaWxcIn0se1wia2V5XCI6XCJ0ZVwiLFwibmFtZVwiOlwiVGVsdWd1XCJ9LHtcImtleVwiOlwidGV0XCIsXCJuYW1lXCI6XCJUZXR1biBEaWxpIChFYXN0IFRpbW9yKVwifSx7XCJrZXlcIjpcInRnXCIsXCJuYW1lXCI6XCJUYWppa1wifSx7XCJrZXlcIjpcInRoXCIsXCJuYW1lXCI6XCJUaGFpXCJ9LHtcImtleVwiOlwidGtcIixcIm5hbWVcIjpcIlR1cmttZW5cIn0se1wia2V5XCI6XCJ0bC1waFwiLFwibmFtZVwiOlwiVGFnYWxvZyAoUGhpbGlwcGluZXMpXCJ9LHtcImtleVwiOlwidGxoXCIsXCJuYW1lXCI6XCJLbGluZ29uXCJ9LHtcImtleVwiOlwidHJcIixcIm5hbWVcIjpcIlR1cmtpc2hcIn0se1wia2V5XCI6XCJ0emxcIixcIm5hbWVcIjpcIlRhbG9zc2FuXCJ9LHtcImtleVwiOlwidHptLWxhdG5cIixcIm5hbWVcIjpcIkNlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IExhdGluXCJ9LHtcImtleVwiOlwidHptXCIsXCJuYW1lXCI6XCJDZW50cmFsIEF0bGFzIFRhbWF6aWdodFwifSx7XCJrZXlcIjpcInVnLWNuXCIsXCJuYW1lXCI6XCJVeWdodXIgKENoaW5hKVwifSx7XCJrZXlcIjpcInVrXCIsXCJuYW1lXCI6XCJVa3JhaW5pYW5cIn0se1wia2V5XCI6XCJ1clwiLFwibmFtZVwiOlwiVXJkdVwifSx7XCJrZXlcIjpcInV6LWxhdG5cIixcIm5hbWVcIjpcIlV6YmVrIExhdGluXCJ9LHtcImtleVwiOlwidXpcIixcIm5hbWVcIjpcIlV6YmVrXCJ9LHtcImtleVwiOlwidmlcIixcIm5hbWVcIjpcIlZpZXRuYW1lc2VcIn0se1wia2V5XCI6XCJ4LXBzZXVkb1wiLFwibmFtZVwiOlwiUHNldWRvXCJ9LHtcImtleVwiOlwieW9cIixcIm5hbWVcIjpcIllvcnViYSBOaWdlcmlhXCJ9LHtcImtleVwiOlwiemgtY25cIixcIm5hbWVcIjpcIkNoaW5lc2UgKENoaW5hKVwifSx7XCJrZXlcIjpcInpoLWhrXCIsXCJuYW1lXCI6XCJDaGluZXNlIChIb25nIEtvbmcpXCJ9LHtcImtleVwiOlwiemgtdHdcIixcIm5hbWVcIjpcIkNoaW5lc2UgKFRhaXdhbilcIn0se1wia2V5XCI6XCJ6aFwiLFwibmFtZVwiOlwiQ2hpbmVzZVwifSx7XCJrZXlcIjpcIm9jLWxuY1wiLFwibmFtZVwiOlwiT2NjaXRhbiwgbGVuZ2Fkb2NpYW4gZGlhbGVjdGVcIn0se1wia2V5XCI6XCJublwiLFwibmFtZVwiOlwiTnlub3Jza1wifSx7XCJrZXlcIjpcInBhLWluXCIsXCJuYW1lXCI6XCJQdW5qYWJpIChJbmRpYSlcIn1dXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hZi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItZHouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1pcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWt3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItbHkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1tYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLXNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2F6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iZy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibi1iZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ici5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2N2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLWF0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2R2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1hdS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tZ2IuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWlsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1uei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLXNnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tdHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1teC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLXByLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtdXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2V0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci1jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9meS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2QuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dvbS1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9odC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHktYW0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2lzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXQtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2phLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvanYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2trLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva20uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2tvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9reS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2xiLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2x2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9taS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21rLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21yLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXMtbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL210LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9uYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25lLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmwtYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25uLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvb2MtbG5jLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcGEtaW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3B0LWJyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ybi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3JvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcnUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ydy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2wuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NyLWN5cmwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3YtZmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RldC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RsLXBoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGxoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90emwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90em0tbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VnLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdWsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3V6LWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUveC1wc2V1ZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS95by5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtaGsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC10dy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBkYXlqc1xuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIENoZXZyb25Eb3duSWNvbixcbiAgQ2hldnJvbkxlZnRJY29uLFxuICBDaGV2cm9uUmlnaHRJY29uLFxufSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheUJ1dHRvbiB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBEYXlQaWNrZXIsIGdldERlZmF1bHRDbGFzc05hbWVzIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuXG5mdW5jdGlvbiBDYWxlbmRhcih7XG4gIGNsYXNzTmFtZSxcbiAgY2xhc3NOYW1lcyxcbiAgc2hvd091dHNpZGVEYXlzID0gdHJ1ZSxcbiAgY2FwdGlvbkxheW91dCA9ICdsYWJlbCcsXG4gIGJ1dHRvblZhcmlhbnQgPSAnZ2hvc3QnLFxuICBmb3JtYXR0ZXJzLFxuICBjb21wb25lbnRzLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheVBpY2tlcj4gJiB7XG4gIGJ1dHRvblZhcmlhbnQ/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQnV0dG9uPlsndmFyaWFudCddXG59KSB7XG4gIGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG4gIHJldHVybiAoXG4gICAgPERheVBpY2tlclxuICAgICAgc2hvd091dHNpZGVEYXlzPXtzaG93T3V0c2lkZURheXN9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctYmFja2dyb3VuZCBncm91cC9jYWxlbmRhciBwLTMgWy0tY2VsbC1zaXplOi0tc3BhY2luZyg4KV0gW1tkYXRhLXNsb3Q9Y2FyZC1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCBbW2RhdGEtc2xvdD1wb3BvdmVyLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50JyxcbiAgICAgICAgU3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfbmV4dD5zdmddOnJvdGF0ZS0xODBgLFxuICAgICAgICBTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9wcmV2aW91cz5zdmddOnJvdGF0ZS0xODBgLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBjYXB0aW9uTGF5b3V0PXtjYXB0aW9uTGF5b3V0fVxuICAgICAgZm9ybWF0dGVycz17e1xuICAgICAgICBmb3JtYXRNb250aERyb3Bkb3duOiAoZGF0ZSkgPT5cbiAgICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ3Nob3J0JyB9KSxcbiAgICAgICAgLi4uZm9ybWF0dGVycyxcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWVzPXt7XG4gICAgICAgIHJvb3Q6IGNuKCd3LWZpdCcsIGRlZmF1bHRDbGFzc05hbWVzLnJvb3QpLFxuICAgICAgICBtb250aHM6IGNuKFxuICAgICAgICAgICdmbGV4IGdhcC00IGZsZXgtY29sIG1kOmZsZXgtcm93IHJlbGF0aXZlJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aHNcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGg6IGNuKCdmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtNCcsIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoKSxcbiAgICAgICAgbmF2OiBjbihcbiAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdy1mdWxsIGFic29sdXRlIHRvcC0wIGluc2V0LXgtMCBqdXN0aWZ5LWJldHdlZW4nLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm5hdlxuICAgICAgICApLFxuICAgICAgICBidXR0b25fcHJldmlvdXM6IGNuKFxuICAgICAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcbiAgICAgICAgICAnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9wcmV2aW91c1xuICAgICAgICApLFxuICAgICAgICBidXR0b25fbmV4dDogY24oXG4gICAgICAgICAgYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuICAgICAgICAgICdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX25leHRcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhfY2FwdGlvbjogY24oXG4gICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSB3LWZ1bGwgcHgtKC0tY2VsbC1zaXplKScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMubW9udGhfY2FwdGlvblxuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bnM6IGNuKFxuICAgICAgICAgICd3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgZ2FwLTEuNScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25zXG4gICAgICAgICksXG4gICAgICAgIGRyb3Bkb3duX3Jvb3Q6IGNuKFxuICAgICAgICAgICdyZWxhdGl2ZSBoYXMtZm9jdXM6Ym9yZGVyLXJpbmcgYm9yZGVyIGJvcmRlci1pbnB1dCBzaGFkb3cteHMgaGFzLWZvY3VzOnJpbmctcmluZy81MCBoYXMtZm9jdXM6cmluZy1bM3B4XSByb3VuZGVkLW1kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bl9yb290XG4gICAgICAgICksXG4gICAgICAgIGRyb3Bkb3duOiBjbihcbiAgICAgICAgICAnYWJzb2x1dGUgYmctcG9wb3ZlciBpbnNldC0wIG9wYWNpdHktMCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25cbiAgICAgICAgKSxcbiAgICAgICAgY2FwdGlvbl9sYWJlbDogY24oXG4gICAgICAgICAgJ3NlbGVjdC1ub25lIGZvbnQtbWVkaXVtJyxcbiAgICAgICAgICBjYXB0aW9uTGF5b3V0ID09PSAnbGFiZWwnXG4gICAgICAgICAgICA/ICd0ZXh0LXNtJ1xuICAgICAgICAgICAgOiAncm91bmRlZC1tZCBwbC0yIHByLTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSBoLTggWyY+c3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyY+c3ZnXTpzaXplLTMuNScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuY2FwdGlvbl9sYWJlbFxuICAgICAgICApLFxuICAgICAgICB0YWJsZTogJ3ctZnVsbCBib3JkZXItY29sbGFwc2UnLFxuICAgICAgICB3ZWVrZGF5czogY24oJ2ZsZXgnLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5cyksXG4gICAgICAgIHdlZWtkYXk6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1tZCBmbGV4LTEgZm9udC1ub3JtYWwgdGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheVxuICAgICAgICApLFxuICAgICAgICB3ZWVrOiBjbignZmxleCB3LWZ1bGwgbXQtMicsIGRlZmF1bHRDbGFzc05hbWVzLndlZWspLFxuICAgICAgICB3ZWVrX251bWJlcl9oZWFkZXI6IGNuKFxuICAgICAgICAgICdzZWxlY3Qtbm9uZSB3LSgtLWNlbGwtc2l6ZSknLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyX2hlYWRlclxuICAgICAgICApLFxuICAgICAgICB3ZWVrX251bWJlcjogY24oXG4gICAgICAgICAgJ3RleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlclxuICAgICAgICApLFxuICAgICAgICBkYXk6IGNuKFxuICAgICAgICAgICdyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHAtMCB0ZXh0LWNlbnRlciBbJjpmaXJzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kIFsmOmxhc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtci1tZCBncm91cC9kYXkgYXNwZWN0LXNxdWFyZSBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGF5XG4gICAgICAgICksXG4gICAgICAgIHJhbmdlX3N0YXJ0OiBjbihcbiAgICAgICAgICAncm91bmRlZC1sLW1kIGJnLWFjY2VudCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2Vfc3RhcnRcbiAgICAgICAgKSxcbiAgICAgICAgcmFuZ2VfbWlkZGxlOiBjbigncm91bmRlZC1ub25lJywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfbWlkZGxlKSxcbiAgICAgICAgcmFuZ2VfZW5kOiBjbigncm91bmRlZC1yLW1kIGJnLWFjY2VudCcsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX2VuZCksXG4gICAgICAgIHRvZGF5OiBjbihcbiAgICAgICAgICAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgcm91bmRlZC1tZCBkYXRhLVtzZWxlY3RlZD10cnVlXTpyb3VuZGVkLW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLnRvZGF5XG4gICAgICAgICksXG4gICAgICAgIG91dHNpZGU6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgYXJpYS1zZWxlY3RlZDp0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm91dHNpZGVcbiAgICAgICAgKSxcbiAgICAgICAgZGlzYWJsZWQ6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGlzYWJsZWRcbiAgICAgICAgKSxcbiAgICAgICAgaGlkZGVuOiBjbignaW52aXNpYmxlJywgZGVmYXVsdENsYXNzTmFtZXMuaGlkZGVuKSxcbiAgICAgICAgLi4uY2xhc3NOYW1lcyxcbiAgICAgIH19XG4gICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgIFJvb3Q6ICh7IGNsYXNzTmFtZSwgcm9vdFJlZiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICBDaGV2cm9uOiAoeyBjbGFzc05hbWUsIG9yaWVudGF0aW9uLCAuLi5wcm9wcyB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGV2cm9uTGVmdEljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPENoZXZyb25SaWdodEljb25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICBEYXlCdXR0b246IENhbGVuZGFyRGF5QnV0dG9uLFxuICAgICAgICBXZWVrTnVtYmVyOiAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQgey4uLnByb3BzfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtKC0tY2VsbC1zaXplKSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICB9fVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FsZW5kYXJEYXlCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGRheSxcbiAgbW9kaWZpZXJzLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheUJ1dHRvbj4pIHtcbiAgY29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RpZmllcnMuZm9jdXNlZCkge1xuICAgICAgcmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFttb2RpZmllcnMuZm9jdXNlZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICByZWY9e3JlZn1cbiAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICBzaXplPVwiaWNvblwiXG4gICAgICBkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG4gICAgICBkYXRhLXNlbGVjdGVkLXNpbmdsZT17XG4gICAgICAgIG1vZGlmaWVycy5zZWxlY3RlZCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX3N0YXJ0ICYmXG4gICAgICAgICFtb2RpZmllcnMucmFuZ2VfZW5kICYmXG4gICAgICAgICFtb2RpZmllcnMucmFuZ2VfbWlkZGxlXG4gICAgICB9XG4gICAgICBkYXRhLXJhbmdlLXN0YXJ0PXttb2RpZmllcnMucmFuZ2Vfc3RhcnR9XG4gICAgICBkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cbiAgICAgIGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06YmctYWNjZW50IGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OmJvcmRlci1yaW5nIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctcmluZy81MCBkYXJrOmhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZmxleCBhc3BlY3Qtc3F1YXJlIHNpemUtYXV0byB3LWZ1bGwgbWluLXctKC0tY2VsbC1zaXplKSBmbGV4LWNvbCBnYXAtMSBsZWFkaW5nLW5vbmUgZm9udC1ub3JtYWwgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmVsYXRpdmUgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6ei0xMCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLVszcHhdIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLXItbWQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnJvdW5kZWQtbm9uZSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbC1tZCBbJj5zcGFuXTp0ZXh0LXhzIFsmPnNwYW5dOm9wYWNpdHktNzAnLFxuICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kYXksXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IENhbGVuZGFyLCBDYWxlbmRhckRheUJ1dHRvbiB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgQ2hlY2tib3hQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94J1xuaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gKFxuICAgIDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuICAgICAgICBkYXRhLXNsb3Q9XCJjaGVja2JveC1pbmRpY2F0b3JcIlxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcbiAgICAgID5cbiAgICAgICAgPENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG4gICAgICA8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cbiAgICA8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG4gIClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FyZCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gZ3JpZC1yb3dzLVthdXRvX2F1dG9dIGl0ZW1zLXN0YXJ0IGdhcC0xLjUgcC00IHBiLTAgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZFRpdGxlKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLXRpdGxlXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmREZXNjcmlwdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1kZXNjcmlwdGlvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkQWN0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWFjdGlvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnY29sLXN0YXJ0LTIgcm93LXNwYW4tMiByb3ctc3RhcnQtMSBzZWxmLXN0YXJ0IGp1c3RpZnktc2VsZi1lbmQnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkQ29udGVudCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1jb250ZW50XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIHB4LTYgWy5ib3JkZXItdF06cHQtNicsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQge1xuICBDYXJkLFxuICBDYXJkSGVhZGVyLFxuICBDYXJkRm9vdGVyLFxuICBDYXJkVGl0bGUsXG4gIENhcmRBY3Rpb24sXG4gIENhcmREZXNjcmlwdGlvbixcbiAgQ2FyZENvbnRlbnQsXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuICBkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG4gIHNldERhdGU6IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG4gIGxhYmVsPzogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG4gIGRhdGUsXG4gIGNsb3NlT25TZWxlY3QsXG4gIHNldERhdGUsXG4gIGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcbiAgY2xhc3NOYW1lLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG4gIGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXREYXRlKGRhdGUpXG4gICAgaWYgKGNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8UG9wb3Zlcj5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICFkYXRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQnXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cbiAgICAgICAgICAgIHtkYXRlID8gZGF5anMoZGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpIDogPHNwYW4+e2xhYmVsfTwvc3Bhbj59XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCIgYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgIDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuICAgICAgICAgIDxDYWxlbmRhclxuICAgICAgICAgICAgbW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICBzZWxlY3RlZD17ZGF0ZX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgICAgIG1vbnRoPXtkYXRlfVxuICAgICAgICAgICAgaW5pdGlhbEZvY3VzXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgYWxpZ24gPSAnY2VudGVyJyxcbiAgc2lkZU9mZnNldCA9IDQsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICA8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuICByZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIERpYWxvZyh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUG9ydGFsPikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2Uoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay81MCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiPlxuICAgICAgPERpYWxvZ092ZXJsYXkgLz5cbiAgICAgIDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuICAgICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctY29udGVudFwiXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXSBvdmVyZmxvdy15LXNjcm9sbCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGNsYXNzTmFtZT1cInJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXM6cmluZy1yaW5nIGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCByb3VuZGVkLXhzIG9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCI+XG4gICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cbiAgICAgIDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9EaWFsb2dQb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRpdGxlPikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDbG9zZSxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dPdmVybGF5LFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ1RpdGxlLFxuICBEaWFsb2dUcmlnZ2VyLFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGF0YS1zbG90PVwiaW5wdXRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG4gICAgICAgICdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8TGFiZWxQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwibGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcbiAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG4gIHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnByb3BzIH06IFNjcm9sbEFyZWFQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICB7Li4ucHJvcHMudmlld1BvcnRQcm9wc31cbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdmlld3BvcnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG4gICAgICAgICAgcHJvcHMudmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbiAgICAgIDxTY3JvbGxCYXIgLz5cbiAgICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG4gIGNsYXNzTmFtZSxcbiAgb3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG4gICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuICAgICAgb3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggdG91Y2gtbm9uZSBwLXB4IHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lJyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiZcbiAgICAgICAgICAnaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50JyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuICAgICAgICAgICdoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdGh1bWJcIlxuICAgICAgICBjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG4gICAgICAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcbiAgY2xhc3NOYW1lLFxuICBzaXplID0gJ2RlZmF1bHQnLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG4gIHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG4gICAgICBkYXRhLXNpemU9e3NpemV9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cbiAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG4gICAgICA8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIHBvc2l0aW9uID0gJ3BvcHBlcicsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwic2VsZWN0LWNvbnRlbnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG4gICAgICAgICAgcG9zaXRpb24gPT09ICdwb3BwZXInICYmXG4gICAgICAgICAgICAnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHBvc2l0aW9uPXtwb3NpdGlvbn1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICA8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAncC0xJyxcbiAgICAgICAgICAgIHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuICAgICAgICAgICAgICAnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuICAgICAgICA8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuICAgICAgPC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuICAgICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgPC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3JcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuICAgICAgY2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0R3JvdXAsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdExhYmVsLFxuICBTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuICBTZWxlY3RTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0U2VwYXJhdG9yLFxuICBTZWxlY3RUcmlnZ2VyLFxuICBTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUYWJzUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10YWJzJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUYWJzKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTInLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic0xpc3Qoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5MaXN0Pikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLkxpc3RcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtbGlzdFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctbXV0ZWQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtOSB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBwLVszcHhdJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic1RyaWdnZXIoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLlRyaWdnZXJcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtdHJpZ2dlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImRhdGEtW3N0YXRlPWFjdGl2ZV06YmctYmFja2dyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJpbmcgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOmJvcmRlci1pbnB1dCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06YmctaW5wdXQvMzAgdGV4dC1mb3JlZ3JvdW5kIGRhcms6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHB4LTIgcHktMSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc3RhdGU9YWN0aXZlXTpzaGFkb3ctc20gWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Db250ZW50XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLWNvbnRlbnRcIlxuICAgICAgY2xhc3NOYW1lPXtjbignZmxleC0xIG91dGxpbmUtbm9uZScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBUYWJzLCBUYWJzTGlzdCwgVGFic1RyaWdnZXIsIFRhYnNDb250ZW50IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUb29sdGlwUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10b29sdGlwJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUb29sdGlwUHJvdmlkZXIoe1xuICBkZWxheUR1cmF0aW9uID0gMCxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyPikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyXG4gICAgICBkYXRhLXNsb3Q9XCJ0b29sdGlwLXByb3ZpZGVyXCJcbiAgICAgIGRlbGF5RHVyYXRpb249e2RlbGF5RHVyYXRpb259XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwidG9vbHRpcFwiIHsuLi5wcm9wc30gLz5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwVHJpZ2dlcih7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gPFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJ0b29sdGlwLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBzaWRlT2Zmc2V0ID0gMCxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwidG9vbHRpcC1jb250ZW50XCJcbiAgICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBhbmltYXRlLWluIGZhZGUtaW4tMCB6b29tLWluLTk1IGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LWZpdCBvcmlnaW4tKC0tcmFkaXgtdG9vbHRpcC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyB0ZXh0LWJhbGFuY2UnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPFRvb2x0aXBQcmltaXRpdmUuQXJyb3cgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSBmaWxsLXByaW1hcnkgei01MCBzaXplLTIuNSB0cmFuc2xhdGUteS1bY2FsYygtNTAlXy1fMnB4KV0gcm90YXRlLTQ1IHJvdW5kZWQtWzJweF1cIiAvPlxuICAgICAgPC9Ub29sdGlwUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9Ub29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgKVxufVxuXG5leHBvcnQgeyBUb29sdGlwLCBUb29sdGlwVHJpZ2dlciwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBQcm92aWRlciB9XG4iLAogICAgImltcG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG4gIHJlZjogUmVhY3QuUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG4gIGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG4gICAgdXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICBvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuICAgIGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG4gICAgICBzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuICB9KSlcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2RpYWxvZ09wZW59IG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0+XG4gICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmIHNlbGVjdGVkRGF5RXZlbnRzLmRheS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgIDwvRGlhbG9nSGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS0zXCI+XG4gICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmXG4gICAgICAgICAgICBzZWxlY3RlZERheUV2ZW50cy5ldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICAgICAgZWxlbWVudElkPXtgYWxsLWV2ZW50cy1kaWFsb2ctZXZlbnQtJCR7ZXZlbnQuaWR9YH0gLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuaWR9XG4gICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xIGgtWzMwcHhdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuICBpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuICBpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG4gIGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG4gICAgcmV0dXJuICdyb3VuZGVkLW5vbmUnXG4gIH1cbiAgaWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcbiAgfVxuICBpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcbiAgfVxuICByZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG4gIGVsZW1lbnRJZCxcbiAgZXZlbnQsXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gIGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG4gIGVsZW1lbnRJZDogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBzdHlsZT86IENTU1Byb3BlcnRpZXNcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG4gIGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycywgc2V0Tm9kZVJlZiwgaXNEcmFnZ2luZyB9ID0gdXNlRHJhZ2dhYmxlKHtcbiAgICBpZDogZWxlbWVudElkLFxuICAgIGRhdGE6IHtcbiAgICAgIGV2ZW50LFxuICAgICAgdHlwZTogJ2NhbGVuZGFyLWV2ZW50JyxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgLy8gRGVmYXVsdCBldmVudCBjb250ZW50IHRvIHJlbmRlciBpZiBjdXN0b20gcmVuZGVyRXZlbnQgaXMgbm90IHByb3ZpZGVkXG4gIGNvbnN0IERlZmF1bHRFdmVudENvbnRlbnQgPSAoKSA9PiB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBldmVudCBoYXMgdHJ1bmNhdGlvbiBpbmZvcm1hdGlvblxuICAgIGNvbnN0IGVuaGFuY2VkRXZlbnQgPSBldmVudCBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlzVHJ1bmNhdGVkU3RhcnQ/OiBib29sZWFuXG4gICAgICBpc1RydW5jYXRlZEVuZD86IGJvb2xlYW5cbiAgICB9XG4gICAgY29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRTdGFydFxuICAgIGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZEVuZFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICBldmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcbiAgICAgICAgICBldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG4gICAgICAgICAgJ2gtZnVsbCB3LWZ1bGwgcHgtMSBib3JkZXItWzEuNXB4XSBib3JkZXItY2FyZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCByZWxhdGl2ZScsXG4gICAgICAgICAgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MoaXNUcnVuY2F0ZWRTdGFydCwgaXNUcnVuY2F0ZWRFbmQpXG4gICAgICAgICl9XG4gICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogZXZlbnQuYmFja2dyb3VuZENvbG9yLCBjb2xvcjogZXZlbnQuY29sb3IgfX1cbiAgICAgID5cbiAgICAgICAgey8qIExlZnQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cbiAgICAgICAge2lzVHJ1bmNhdGVkU3RhcnQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRXZlbnQgdGl0bGUgKi99XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICd0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHNtOnRleHQteHMgbXQtMC41JyxcbiAgICAgICAgICAgIC8vIEFkZCBzbGlnaHQgcGFkZGluZyB0byBhdm9pZCBvdmVybGFwIHdpdGggaW5kaWNhdG9yc1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCAmJiAncGwtMScsXG4gICAgICAgICAgICBpc1RydW5jYXRlZEVuZCAmJiAncHItMSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2V2ZW50LnRpdGxlfVxuICAgICAgICA8L3A+XG5cbiAgICAgICAgey8qIFJpZ2h0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG4gICAgICAgIHtpc1RydW5jYXRlZEVuZCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAga2V5PXtlbGVtZW50SWR9XG4gICAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgICAgey4uLmF0dHJpYnV0ZXN9XG4gICAgICAgIHsuLi5saXN0ZW5lcnN9XG4gICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTUwIH19XG4gICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuICAgICAgICBsYXlvdXRcbiAgICAgICAgbGF5b3V0SWQ9e2VsZW1lbnRJZH1cbiAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC40LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICd0cnVuY2F0ZSBoLWZ1bGwgdy1mdWxsJyxcbiAgICAgICAgICBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3BcbiAgICAgICAgICAgID8gZGlzYWJsZUV2ZW50Q2xpY2tcbiAgICAgICAgICAgICAgPyAnY3Vyc29yLWRlZmF1bHQnXG4gICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgOiAnY3Vyc29yLWdyYWInLFxuICAgICAgICAgIGlzRHJhZ2dpbmcgJiZcbiAgICAgICAgICAgICEoZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wKSAmJlxuICAgICAgICAgICAgJ2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgey8qIFVzZSBjdXN0b20gcmVuZGVyRXZlbnQgZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovfVxuICAgICAgICB7cmVuZGVyRXZlbnQgPyByZW5kZXJFdmVudChldmVudCkgOiA8RGVmYXVsdEV2ZW50Q29udGVudCAvPn1cbiAgICAgIDwvbW90aW9uLmRpdj5cbiAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlRXZlbnQgPSBtZW1vKFxuICBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQsXG4gIChwcmV2UHJvcHMsIG5leHRQcm9wcykgPT4ge1xuICAgIC8vIENvbXBhcmUgdGhlIGVzc2VudGlhbCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgICByZXR1cm4gKFxuICAgICAgcHJldlByb3BzLmVsZW1lbnRJZCA9PT0gbmV4dFByb3BzLmVsZW1lbnRJZCAmJlxuICAgICAgcHJldlByb3BzLmRpc2FibGVEcmFnID09PSBuZXh0UHJvcHMuZGlzYWJsZURyYWcgJiZcbiAgICAgIHByZXZQcm9wcy5jbGFzc05hbWUgPT09IG5leHRQcm9wcy5jbGFzc05hbWUgJiZcbiAgICAgIHByZXZQcm9wcy5ldmVudCA9PT0gbmV4dFByb3BzLmV2ZW50XG4gICAgKVxuICB9XG4pXG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcblxuaW50ZXJmYWNlIERheUNlbGxQcm9wcyB7XG4gIGluZGV4OiBudW1iZXIgLy8gSW5kZXggb2YgdGhlIGRheSBpbiB0aGUgd2VlayAoMC02KVxuICBkYXk6IGRheWpzLkRheWpzXG4gIGRheU1heEV2ZW50cz86IG51bWJlclxuICBjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5Q2VsbDogUmVhY3QuRkM8RGF5Q2VsbFByb3BzPiA9ICh7XG4gIGluZGV4LFxuICBkYXksXG4gIGNsYXNzTmFtZSA9ICcnLFxufSkgPT4ge1xuICBjb25zdCBhbGxFdmVudHNEaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8e1xuICAgIG9wZW46ICgpID0+IHZvaWRcbiAgICBjbG9zZTogKCkgPT4gdm9pZFxuICAgIHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuICB9PihudWxsKVxuICBjb25zdCB7XG4gICAgY3VycmVudExvY2FsZSxcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgZGF5TWF4RXZlbnRzID0gMCxcbiAgICB0LFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgZGF5LnN0YXJ0T2YoJ2RheScpLFxuICAgIGRheS5lbmRPZignZGF5JylcbiAgKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICAvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcbiAgY29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IGRheWpzLkRheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuICAgIGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG4gICAgICBkYXksXG4gICAgICBldmVudHMsXG4gICAgfSlcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG4gIH1cblxuICBjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuICBjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cbiAgY29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcbiAgY29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgaWQ9e2BkYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICBkYXRhLXRlc3RpZD17YGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctY2xpcCBwLTEgaG92ZXI6YmctYWNjZW50IG1pbi1oLVs2MHB4XScsXG4gICAgICAgICAgIWlzQ3VycmVudE1vbnRoICYmICdiZy1zZWNvbmRhcnkgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBpc0xhc3RDb2x1bW4gJiYgJ2JvcmRlci1yLTAnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICB7LyogQWJzb2x1dGVseSBwb3NpdGlvbmVkIG11bHRpLWRheSBiYXJzIChHb29nbGUgQ2FsZW5kYXIgc3R5bGUpICovfVxuXG4gICAgICAgIHsvKiBTaW5nbGUtZGF5IGV2ZW50cyBjb250YWluZXIgcG9zaXRpb25lZCBiZWxvdyBtdWx0aS1kYXkgZXZlbnRzICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICB7LyogRGF5IG51bWJlciAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTYgc206dy02JyxcbiAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bSdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgIGRheS50b0RhdGUoKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cbiAgICAgICAgICB7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2BlbXB0eS0ke3Jvd0luZGV4fWB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzIwcHhdIHctZnVsbFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtldmVudD8udGl0bGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuXG4gICAgICAgICAgey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG4gICAgICAgICAge2hhc0hpZGRlbkV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBtdC0xXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0Ryb3BwYWJsZUNlbGw+XG5cbiAgICAgIHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cbiAgICAgIDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlQ2VsbFByb3BzIHtcbiAgaWQ6IHN0cmluZ1xuICB0eXBlOiAnZGF5LWNlbGwnIHwgJ3RpbWUtY2VsbCdcbiAgZGF0ZTogZGF5anMuRGF5anNcbiAgaG91cj86IG51bWJlclxuICBtaW51dGU/OiBudW1iZXJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wcGFibGVDZWxsKHtcbiAgaWQsXG4gIHR5cGUsXG4gIGRhdGUsXG4gIGhvdXIsXG4gIG1pbnV0ZSxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gICdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcbiAgY29uc3QgeyBvbkNlbGxDbGljaywgZGlzYWJsZURyYWdBbmREcm9wLCBkaXNhYmxlQ2VsbENsaWNrIH0gPVxuICAgIHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuICAgIGlkLFxuICAgIGRhdGE6IHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRlLFxuICAgICAgaG91cixcbiAgICAgIG1pbnV0ZSxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQ2VsbENsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcbiAgICBsZXQgZW5kRGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpXG4gICAgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cihob3VyKS5taW51dGUobWludXRlICsgMTUpIC8vIGRheSB2aWV3IHRpbWUgc2xvdHMgYXJlIDE1IG1pbnV0ZXNcbiAgICB9IGVsc2UgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG4gICAgfVxuXG4gICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgaXNPdmVyICYmICFkaXNhYmxlRHJhZ0FuZERyb3AgJiYgJ2JnLWFjY2VudCcsXG4gICAgICAgIGRpc2FibGVDZWxsQ2xpY2sgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICBjdXJyZW50TG9jYWxlLFxuICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gUmVvcmRlciB3ZWVrIGRheXMgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBkYXlzID0gZGF5anMud2Vla2RheXMoKS5tYXAoKGRheSkgPT4gZGF5LnRvTG93ZXJDYXNlKCkpXG4gICAgY29uc3Qgc2hvcnREYXlzID0gZGF5anMud2Vla2RheXNTaG9ydCgpLm1hcCgoZGF5KSA9PiBkYXkudG9Mb3dlckNhc2UoKSlcblxuICAgIC8vIFJvdGF0ZSB0aGUgYXJyYXkgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0RGF5T2ZXZWVrOyBpKyspIHtcbiAgICAgIGNvbnN0IGRheVRvTW92ZSA9IGRheXMuc2hpZnQoKVxuICAgICAgY29uc3Qgc2hvcnREYXlUb01vdmUgPSBzaG9ydERheXMuc2hpZnQoKVxuICAgICAgaWYgKGRheVRvTW92ZSkge1xuICAgICAgICBkYXlzLnB1c2goZGF5VG9Nb3ZlKVxuICAgICAgfVxuICAgICAgaWYgKHNob3J0RGF5VG9Nb3ZlKSB7XG4gICAgICAgIHNob3J0RGF5cy5wdXNoKHNob3J0RGF5VG9Nb3ZlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGRheXMsIHNob3J0RGF5cyB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGVdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLTcgYm9yZGVyLWInLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcbiAgICA+XG4gICAgICB7d2Vla0RheXMuZGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXt3ZWVrRGF5fSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3dlZWtEYXl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBmaXJzdDpib3JkZXItbFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWtkYXktaGVhZGVyLSR7d2Vla0RheX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiB0ZXh0LXNtIHNtOmlubGluZVwiPnt3ZWVrRGF5fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgc206aGlkZGVuXCI+XG4gICAgICAgICAgICAgIHt3ZWVrRGF5cy5zaG9ydERheXNbaW5kZXhdfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI4IC8vIHB4IChoLTcpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG4gIHN1bmRheTogMCxcbiAgbW9uZGF5OiAxLFxuICB0dWVzZGF5OiAyLFxuICB3ZWRuZXNkYXk6IDMsXG4gIHRodXJzZGF5OiA0LFxuICBmcmlkYXk6IDUsXG4gIHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcbiAgMDogJ3N1bmRheScsXG4gIDE6ICdtb25kYXknLFxuICAyOiAndHVlc2RheScsXG4gIDM6ICd3ZWRuZXNkYXknLFxuICA0OiAndGh1cnNkYXknLFxuICA1OiAnZnJpZGF5JyxcbiAgNjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQge1xuICBEQVlfTlVNQkVSX0hFSUdIVCxcbiAgRVZFTlRfQkFSX0hFSUdIVCxcbiAgR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBQcm9jZXNzZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuICBsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG4gIHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuICB0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICBoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuICBwb3NpdGlvbjogbnVtYmVyIC8vIFBvc2l0aW9uIGluIHRoZSByb3cgKDAgZm9yIGZpcnN0LCAxIGZvciBzZWNvbmQsIGV0Yy4pXG59XG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcbiAgZGF5cyxcbn06IFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcykgPT4ge1xuICBjb25zdCB7IGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZGF5TWF4RXZlbnRzIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHdlZWtTdGFydCA9IGRheXNbMF0uc3RhcnRPZignZGF5JylcbiAgY29uc3Qgd2Vla0VuZCA9IGRheXNbNl0uZW5kT2YoJ2RheScpXG5cbiAgLy8gR2V0IGFsbCBldmVudHMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGlzIHdlZWtcbiAgY29uc3Qgd2Vla0V2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG5cbiAgLy8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuICBjb25zdCBtdWx0aURheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKFxuICAgIChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsICdkYXknKSA+IDBcbiAgKVxuICBjb25zdCBzaW5nbGVEYXlFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcihcbiAgICAoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCAnZGF5JykgPT09IDBcbiAgKVxuXG4gIC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG4gIGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgaWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuICAgICAgcmV0dXJuIHN0YXJ0RGlmZlxuICAgIH1cbiAgICByZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuICB9KVxuXG4gIC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuICBjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuICAgIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuICApXG5cbiAgLy8gQ3JlYXRlIDcgeCBkYXlNYXhFdmVudHMgZ3JpZCB3aXRoIGZsYWdzXG4gIGNvbnN0IGdyaWQ6IHsgdGFrZW46IGJvb2xlYW47IGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCB9W11bXSA9IFtdXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcbiAgICBncmlkW3Jvd10gPSBbXVxuICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCsrKSB7XG4gICAgICBncmlkW3Jvd11bY29sXSA9IHsgdGFrZW46IGZhbHNlLCBldmVudDogbnVsbCB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cblxuICAvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG4gICAgY29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKCdkYXknKSwgd2Vla1N0YXJ0KVxuICAgIGNvbnN0IGV2ZW50RW5kID0gZGF5anMubWluKGV2ZW50LmVuZC5zdGFydE9mKCdkYXknKSwgd2Vla0VuZClcbiAgICBjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZih3ZWVrU3RhcnQsICdkYXknKSlcbiAgICBjb25zdCBlbmRDb2wgPSBNYXRoLm1pbig2LCBldmVudEVuZC5kaWZmKHdlZWtTdGFydCwgJ2RheScpKVxuXG4gICAgLy8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuICAgIGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKCdkYXknKS5pc0JlZm9yZSh3ZWVrU3RhcnQpXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBldmVudC5lbmQuc3RhcnRPZignZGF5JykuaXNBZnRlcih3ZWVrRW5kKVxuXG4gICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSBldmVudCBzdGFydGluZyBmcm9tIGl0cyBvcmlnaW5hbCBzdGFydCBjb2x1bW5cbiAgICBsZXQgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gZmFsc2VcblxuICAgIC8vIEZpcnN0IHRyeTogcGxhY2UgZnJvbSBvcmlnaW5hbCBzdGFydCBwb3NpdGlvblxuICAgIGxldCBhc3NpZ25lZFJvdyA9IC0xXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgZm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FuUGxhY2UpIHtcbiAgICAgICAgYXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudCB0byBhbGwgaXRzIGNvbHVtbnNcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgZ3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICAgICAgY29uc3Qgc3BhbkRheXMgPSBlbmRDb2wgLSBzdGFydENvbCArIDFcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgbGVmdDogKHN0YXJ0Q29sIC8gNykgKiAxMDAsXG4gICAgICAgIHdpZHRoOiAoc3BhbkRheXMgLyA3KSAqIDEwMCxcbiAgICAgICAgdG9wOlxuICAgICAgICAgIERBWV9OVU1CRVJfSEVJR0hUICtcbiAgICAgICAgICBHQVBfQkVUV0VFTl9FTEVNRU5UUyArXG4gICAgICAgICAgYXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBwb3NpdGlvbjogYXNzaWduZWRSb3csXG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBpc1RydW5jYXRlZFN0YXJ0LFxuICAgICAgICBpc1RydW5jYXRlZEVuZCxcbiAgICAgIH0gYXMgUHJvY2Vzc2VkRXZlbnQpXG4gICAgICBwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgY291bGRuJ3QgcGxhY2UgYXQgb3JpZ2luYWwgcG9zaXRpb24sIHRyeSB0cnVuY2F0ZWQgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBsYXRlciBkYXlzXG4gICAgaWYgKCFwbGFjZWRTdWNjZXNzZnVsbHkpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGxldCB0cnlTdGFydENvbCA9IHN0YXJ0Q29sICsgMTtcbiAgICAgICAgdHJ5U3RhcnRDb2wgPD0gZW5kQ29sO1xuICAgICAgICB0cnlTdGFydENvbCsrXG4gICAgICApIHtcbiAgICAgICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSB0cnVuY2F0ZWQgZXZlbnQgc3RhcnRpbmcgZnJvbSB0aGlzIGNvbHVtblxuICAgICAgICBsZXQgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSAtMVxuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgICAgIGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgaWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhblBsYWNlKSB7XG4gICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdyBmb3IgdGhlIHRydW5jYXRlZCB2ZXJzaW9uLCBwbGFjZSBpdFxuICAgICAgICBpZiAodHJ1bmNhdGVkQXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgICAgICBncmlkW3RydW5jYXRlZEFzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciB0aGUgdHJ1bmNhdGVkIHJlbmRlcmluZ1xuICAgICAgICAgIGNvbnN0IHRydW5jYXRlZFNwYW5EYXlzID0gZW5kQ29sIC0gdHJ5U3RhcnRDb2wgKyAxXG4gICAgICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbGVmdDogKHRyeVN0YXJ0Q29sIC8gNykgKiAxMDAsXG4gICAgICAgICAgICB3aWR0aDogKHRydW5jYXRlZFNwYW5EYXlzIC8gNykgKiAxMDAsXG4gICAgICAgICAgICB0b3A6XG4gICAgICAgICAgICAgIERBWV9OVU1CRVJfSEVJR0hUICtcbiAgICAgICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICAgICAgcG9zaXRpb246IHRydW5jYXRlZEFzc2lnbmVkUm93LFxuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBpc1RydW5jYXRlZFN0YXJ0OiB0cnVlLCAvLyBBbHdheXMgdHJ1bmNhdGVkIGF0IHN0YXJ0IHdoZW4gdXNpbmcgdGhpcyBmYWxsYmFjayBsb2dpY1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICAgICAgfSBhcyBQcm9jZXNzZWRFdmVudClcbiAgICAgICAgICBwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG4gICAgICAgICAgYnJlYWsgLy8gU3VjY2Vzc2Z1bGx5IHBsYWNlZCwgc3RvcCB0cnlpbmcgb3RoZXIgc3RhcnQgcG9zaXRpb25zXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG4gIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG4gICAgY29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKCdkYXknKSwgd2Vla1N0YXJ0KVxuICAgIGNvbnN0IGNvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZih3ZWVrU3RhcnQsICdkYXknKSlcblxuICAgIC8vIFNpbmdsZS1kYXkgZXZlbnRzIGFyZSBub3QgdHJ1bmNhdGVkIGJ5IGRlZmluaXRpb25cbiAgICBjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZmFsc2VcbiAgICBjb25zdCBpc1RydW5jYXRlZEVuZCA9IGZhbHNlXG5cbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgIGFzc2lnbmVkUm93ID0gcm93XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7XG4gICAgICAgIGxlZnQ6IChjb2wgLyA3KSAqIDEwMCxcbiAgICAgICAgd2lkdGg6ICgxIC8gNykgKiAxMDAsXG4gICAgICAgIHRvcDpcbiAgICAgICAgICBEQVlfTlVNQkVSX0hFSUdIVCArXG4gICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgIGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgcG9zaXRpb246IGFzc2lnbmVkUm93LFxuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCxcbiAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICB9IGFzIFByb2Nlc3NlZEV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIFdlZWtFdmVudHNMYXllclByb3BzIHtcbiAgZGF5czogZGF5anMuRGF5anNbXVxufVxuXG5leHBvcnQgY29uc3QgV2Vla0V2ZW50c0xheWVyOiBSZWFjdC5GQzxXZWVrRXZlbnRzTGF5ZXJQcm9wcz4gPSAoeyBkYXlzIH0pID0+IHtcbiAgY29uc3Qgd2Vla1N0YXJ0ID0gZGF5c1swXVxuICBjb25zdCBwcm9jZXNzZWRXZWVrRXZlbnRzID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7IGRheXMgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiPlxuICAgICAge3Byb2Nlc3NlZFdlZWtFdmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGV2ZW50LSR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LmZvcm1hdChcbiAgICAgICAgICAgICAgJ1lZWVktTU0tREQnXG4gICAgICAgICAgICApfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG4gICAgICAgICAgICAgIHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZXZlbnQtbGF5ZXItZXZlbnQtJHtldmVudC5pZH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BldmVudC0ke2V2ZW50LmlkfS0ke1xuICAgICAgICAgICAgICAgIGV2ZW50LnBvc2l0aW9uXG4gICAgICAgICAgICAgIH0tJHt3ZWVrU3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgV2Vla0FsbERheVJvdyB9IGZyb20gJy4uL3dlZWstYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBXZWVrSGVhZGVyIH0gZnJvbSAnLi4vd2Vlay1oZWFkZXInXG5pbXBvcnQgeyBXZWVrVGltZUdyaWQgfSBmcm9tICcuLi93ZWVrLXRpbWUtZ3JpZCdcbi8vIEFkZCB3ZWVrT2ZZZWFyIHBsdWdpbiB0byBkYXlqc1xuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5cbmNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXdcIj5cbiAgICAgIHsvKiBXZWVrIGhlYWRlciByb3cgLSBmaXhlZCAqL31cbiAgICAgIDxXZWVrSGVhZGVyIGNsYXNzTmFtZT1cImgtWzVyZW1dXCIgLz5cblxuICAgICAgey8qIFNjcm9sbGFibGUgdGltZSBncmlkICovfVxuICAgICAgPFNjcm9sbEFyZWFcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBvdmVyZmxvdy1hdXRvIGgtW2NhbGMoMTAwJS01cmVtKV1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIndlZWstc2Nyb2xsLWFyZWFcIlxuICAgICAgPlxuICAgICAgICB7LyogQWxsLWRheSBldmVudHMgcm93IC0gZHluYW1pYyBoZWlnaHQgYmFzZWQgb24gY29udGVudCAqL31cbiAgICAgICAgPFdlZWtBbGxEYXlSb3cgLz5cbiAgICAgICAgPFdlZWtUaW1lR3JpZCAvPlxuICAgICAgPC9TY3JvbGxBcmVhPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlZWtWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnLi4vZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQsIEdBUF9CRVRXRUVOX0VMRU1FTlRTIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgY29uc3QgV2Vla0FsbERheVJvdzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZmlyc3REYXlPZldlZWsgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZXQgc3RhcnQgYW5kIGVuZCBvZiBjdXJyZW50IHdlZWsgYmFzZWQgb24gZmlyc3REYXlPZldlZWsgc2V0dGluZ1xuICBjb25zdCBzdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3dlZWsnKS5kYXkoZmlyc3REYXlPZldlZWspXG4gIC8vIElmIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHdlZWssIG1vdmUgYmFjayBvbmUgd2Vla1xuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWspXG4gICAgPyBzdGFydE9mV2Vlay5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgOiBzdGFydE9mV2Vla1xuICBjb25zdCBlbmRPZldlZWsgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZCg2LCAnZGF5JylcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBHZXQgZXZlbnRzIHRoYXQgbWlnaHQgb3ZlcmxhcCB3aXRoIHRoaXMgd2VlayAoZXhwYW5kIHNlYXJjaCByYW5nZSlcbiAgY29uc3QgZXhwYW5kZWRTdGFydERhdGUgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBiZWZvcmUgd2VlayBzdGFydFxuICBjb25zdCBleHBhbmRlZEVuZERhdGUgPSBlbmRPZldlZWsuYWRkKDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBhZnRlciB3ZWVrIGVuZFxuICBjb25zdCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGV4cGFuZGVkU3RhcnREYXRlLCBleHBhbmRlZEVuZERhdGUpXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gIGNvbnN0IGFsbERheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYWxsRGF5KVxuXG4gIC8vIFByb2Nlc3MgYW5kIGxheW91dCBhbGwtZGF5IGV2ZW50cyB0byBhdm9pZCBvdmVybGFwcGluZ1xuICBjb25zdCB7IHByb2Nlc3NlZEFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gU29ydCBhbGwtZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlIGFuZCB0aGVuIGJ5IGR1cmF0aW9uIChsb25nZXIgZXZlbnRzIGZpcnN0KVxuICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IFsuLi5hbGxEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIEZpcnN0IGNvbXBhcmUgYnkgc3RhcnQgZGF0ZVxuICAgICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICBpZiAoc3RhcnREaWZmICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzdGFydERpZmZcbiAgICAgIH1cblxuICAgICAgLy8gSWYgc3RhcnQgZGF0ZXMgYXJlIHRoZSBzYW1lLCBsb25nZXIgZXZlbnRzIGNvbWUgZmlyc3RcbiAgICAgIGNvbnN0IGFEdXJhdGlvbiA9IGEuZW5kLmRpZmYoYS5zdGFydClcbiAgICAgIGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydClcbiAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICB9KVxuXG4gICAgLy8gVHJhY2sgcG9zaXRpb25zIGluIHJvd3NcbiAgICBjb25zdCByb3dzOiB7IGVuZDogZGF5anMuRGF5anM7IGV2ZW50OiBDYWxlbmRhckV2ZW50IH1bXVtdID0gW11cbiAgICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFByb2Nlc3NlZENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICBzb3J0ZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBkYXlzIHRoaXMgZXZlbnQgc3BhbnNcbiAgICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBldmVudC5zdGFydC5pc0JlZm9yZShhZGp1c3RlZFN0YXJ0T2ZXZWVrKVxuICAgICAgICA/IGFkanVzdGVkU3RhcnRPZldlZWtcbiAgICAgICAgOiBldmVudC5zdGFydFxuICAgICAgY29uc3QgZXZlbnRFbmQgPSBldmVudC5lbmQuaXNBZnRlcihlbmRPZldlZWspID8gZW5kT2ZXZWVrIDogZXZlbnQuZW5kXG5cbiAgICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBhcyBwZXJjZW50YWdlIG9mIHRoZSB3ZWVrIHdpZHRoXG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIGV2ZW50U3RhcnQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JylcbiAgICAgIClcbiAgICAgIGNvbnN0IGVuZERheUluZGV4ID0gTWF0aC5taW4oNiwgZXZlbnRFbmQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JykpXG5cbiAgICAgIGNvbnN0IGxlZnQgPSAoc3RhcnREYXlJbmRleCAvIDcpICogMTAwXG4gICAgICBjb25zdCB3aWR0aCA9ICgoZW5kRGF5SW5kZXggLSBzdGFydERheUluZGV4ICsgMSkgLyA3KSAqIDEwMFxuXG4gICAgICAvLyBGaW5kIGEgcm93IHdoZXJlIHRoaXMgZXZlbnQgY2FuIGZpdFxuICAgICAgbGV0IHJvd0luZGV4ID0gMFxuICAgICAgbGV0IHBsYWNlZCA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghcGxhY2VkKSB7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByb3cgaWYgbmVlZGVkXG4gICAgICAgICAgcm93cy5wdXNoKFtdKVxuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGNhbiBmaXQgaW4gdGhlIGN1cnJlbnQgcm93XG4gICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tyb3dJbmRleF1cbiAgICAgICAgICBjb25zdCBjYW5GaXQgPSByb3cuZXZlcnkoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGV2ZW50U3RhcnQuaXNBZnRlcihpdGVtLmVuZCkgfHxcbiAgICAgICAgICAgICAgZXZlbnRFbmQuaXNCZWZvcmUoaXRlbS5ldmVudC5zdGFydClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGNhbkZpdCkge1xuICAgICAgICAgICAgcGxhY2VkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBldmVudCB0byB0aGUgcm93XG4gICAgICByb3dzW3Jvd0luZGV4XS5wdXNoKHsgZW5kOiBldmVudEVuZCwgZXZlbnQgfSlcblxuICAgICAgLy8gQWRkIHByb2Nlc3NlZCBldmVudCB3aXRoIGNvcnJlY3QgcG9zaXRpb25pbmdcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICB0b3A6IHJvd0luZGV4ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzLCBhZGp1c3RlZFN0YXJ0T2ZXZWVrLCBlbmRPZldlZWtdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtW2F1dG9fMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXSBncmlkLXJvd3MtMSByZWxhdGl2ZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstYWxsLWRheS1yb3dcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xNCBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXIteCBib3JkZXItYiBwci0yIG1pbi1oLTE2XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgQWxsLWRheVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERyb3BwYWJsZSBjZWxscyBmb3IgZWFjaCBkYXkgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgaWQ9e2BhbGwtZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1mdWxsIGZsZXgtMSBjdXJzb3ItcG9pbnRlciBib3JkZXItciBib3JkZXItYlwiXG4gICAgICAgIC8+XG4gICAgICApKX1cblxuICAgICAgey8qIEFsbC1kYXkgZXZlbnQgYmxvY2tzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcC0xIGNvbC1zcGFuLTcgY29sLXN0YXJ0LTJcIj5cbiAgICAgICAge3Byb2Nlc3NlZEFsbERheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGFsbC1kYXktY29udGFpbmVyLSR7ZXZlbnQuaWR9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH1weGAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1jbGlwIHRleHQteHMgYWJzb2x1dGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmludGVyZmFjZSBXZWVrSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFdlZWtIZWFkZXI6IFJlYWN0LkZDPFdlZWtIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgY3VycmVudERhdGUsXG4gICAgY3VycmVudExvY2FsZSxcbiAgICBzZWxlY3REYXRlLFxuICAgIG9wZW5FdmVudEZvcm0sXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZXQgc3RhcnQgYW5kIGVuZCBvZiBjdXJyZW50IHdlZWsgYmFzZWQgb24gZmlyc3REYXlPZldlZWsgc2V0dGluZ1xuICBjb25zdCBzdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3dlZWsnKS5kYXkoZmlyc3REYXlPZldlZWspXG4gIC8vIElmIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHdlZWssIG1vdmUgYmFjayBvbmUgd2Vla1xuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWspXG4gICAgPyBzdGFydE9mV2Vlay5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgOiBzdGFydE9mV2Vla1xuXG4gIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBkYXlzIGZvciB0aGUgY3VycmVudCB3ZWVrXG4gIGNvbnN0IHdlZWtEYXlzID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICB3ZWVrRGF5cy5wdXNoKGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGksICdkYXknKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgLy8gY3NzIGdyaWQgaGVhZGVyIHdpdGggbGVmIGNvcm5lciBjZWxsIHNob3J0ZXIgdGhhbiB0aGUgcmVzdFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncmlkIGdyaWQtY29scy1bYXV0b18xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJdIGdyaWQtcm93cy0xJyxcbiAgICAgICAgc3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstaGVhZGVyXCJcbiAgICA+XG4gICAgICB7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMSB3LTE0IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIteCBib3JkZXItYiBwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+V2Vlazwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGF5IGhlYWRlciBjZWxscyAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGJvcmRlci1iJyxcbiAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZGF5KVxuICAgICAgICAgICAgICAgIG9wZW5FdmVudEZvcm0oZGF5KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTcgc206dy03IHNtOnRleHQtc20nLFxuICAgICAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuXG5pbnRlcmZhY2UgUHJvY2Vzc2VkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHsgZGF5IH06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQcm9jZXNzZWRFdmVudFtdPigoKSA9PiB7XG4gICAgbGV0IGV2ZW50c0ZvckRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgIGRheS5lbmRPZignZGF5JylcbiAgICApXG5cbiAgICAvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcbiAgICBldmVudHNGb3JEYXkgPSBldmVudHNGb3JEYXlcbiAgICAgIC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG4gICAgaWYgKGV2ZW50c0ZvckRheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG4gICAgY29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cbiAgICBsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG4gICAgbGV0IGxhc3RFdmVudEVuZDogZGF5anMuRGF5anMgfCBudWxsID0gbnVsbFxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzRm9yRGF5KSB7XG4gICAgICBpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuICAgICAgICBpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudENsdXN0ZXIgPSBbXVxuICAgICAgfVxuICAgICAgY3VycmVudENsdXN0ZXIucHVzaChldmVudClcbiAgICAgIGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZFxuICAgICAgICA/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZClcbiAgICAgICAgOiBldmVudC5lbmRcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG4gICAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cbiAgICBmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBTaW5nbGUgZXZlbnQgdGFrZXMgZnVsbCB3aWR0aFxuICAgICAgICBjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuaG91cigpICsgZXZlbnQuc3RhcnQubWludXRlKCkgLyA2MFxuICAgICAgICBsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5ob3VyKCkgKyBldmVudC5lbmQubWludXRlKCkgLyA2MFxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxEdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWVcbiAgICAgICAgY29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIDI0KSAqIDEwMFxuICAgICAgICBjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIDI0KSAqIDEwMFxuICAgICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7IC4uLmV2ZW50LCBsZWZ0OiAwLCB3aWR0aDogMTAwLCB0b3AsIGhlaWdodCB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBNdWx0aXBsZSBldmVudHMgLSB1c2UgbGF5ZXJlZCBwb3NpdGlvbmluZyBhcHByb2FjaFxuICAgICAgLy8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gWy4uLmNsdXN0ZXJdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcbiAgICAgICAgY29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuICAgICAgICAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG4gICAgICAgIGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuICAgICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICB9KVxuXG4gICAgICAvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcbiAgICAgIGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkRXZlbnRzLmxlbmd0aFxuXG4gICAgICAvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuICAgICAgLy8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcbiAgICAgIGxldCBtYXhPZmZzZXQ6IG51bWJlclxuICAgICAgaWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSAzKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuICAgICAgfSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuICAgICAgICBtYXhPZmZzZXQgPSA2MCAvLyA2MCUgdG90YWwgZm9yIDQgZXZlbnRzICgyMCUgZWFjaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc29ydGVkRXZlbnRzW2ldXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmhvdXIoKSArIGV2ZW50LnN0YXJ0Lm1pbnV0ZSgpIC8gNjBcbiAgICAgICAgbGV0IGVuZFRpbWUgPSBldmVudC5lbmQuaG91cigpICsgZXZlbnQuZW5kLm1pbnV0ZSgpIC8gNjBcblxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICAgICAgICBjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gMjQpICogMTAwXG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gMjQpICogMTAwXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcbiAgICAgICAgbGV0IGxlZnQ6IG51bWJlclxuICAgICAgICBsZXQgd2lkdGg6IG51bWJlclxuICAgICAgICBsZXQgekluZGV4OiBudW1iZXJcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoIGF0IGJvdHRvbVxuICAgICAgICAgIGxlZnQgPSAwXG4gICAgICAgICAgd2lkdGggPSAxMDBcbiAgICAgICAgICB6SW5kZXggPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuICAgICAgICAgIGxlZnQgPSBvZmZzZXRQZXJFdmVudCAqIGlcbiAgICAgICAgICB3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG4gICAgICAgICAgekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3BcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHRvcCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgekluZGV4LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbiAgfSwgW2RheSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlXSlcblxuICByZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJy4uLy4uL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5RXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheTogZGF5anMuRGF5anMgLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5RXZlbnRzTGF5ZXI6IFJlYWN0LkZDPERheUV2ZW50c0xheWVyUHJvcHM+ID0gKHtcbiAgZGF5LFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheSB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgPlxuICAgICAge3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnlWZXJ5VW5pcXVlS2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5LmZvcm1hdChcbiAgICAgICAgICAnWVlZWS1NTS1ERCdcbiAgICAgICAgKX1gXG4gICAgICAgIGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Bjb250YWluZXItJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH0lYCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BkcmFnZ2FibGUtJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG4gICAgICAgICAgICAgICAgJ1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlFdmVudHNMYXllciB9IGZyb20gJy4uL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcblxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PlxuICBkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG4pXG5cbmludGVyZmFjZSBXZWVrRGF5Q29sUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0RheUNvbDogUmVhY3QuRkM8V2Vla0RheUNvbFByb3BzPiA9ICh7IGRheSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgIGNsYXNzTmFtZT1cImNvbC1zcGFuLTEgcmVsYXRpdmUgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXJcIlxuICAgID5cbiAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgY29uc3QgaG91ciA9IHRpbWUuaG91cigpXG4gICAgICAgIGNvbnN0IGNlbGxEYXRlID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInXG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pfVxuXG4gICAgICB7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuICAgICAgPERheUV2ZW50c0xheWVyXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktZXZlbnRzLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRheT17ZGF5fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrRGF5Q29sIH0gZnJvbSAnLi93ZWVrLWRheS1jb2wnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5leHBvcnQgY29uc3QgV2Vla1RpbWVHcmlkOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGFuZCBlbmQgb2YgY3VycmVudCB3ZWVrIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrIHNldHRpbmdcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCd3ZWVrJykuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuICAvLyBJZiBjdXJyZW50IGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB3ZWVrLCBtb3ZlIGJhY2sgb25lIHdlZWtcbiAgY29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrKVxuICAgID8gc3RhcnRPZldlZWsuc3VidHJhY3QoMSwgJ3dlZWsnKVxuICAgIDogc3RhcnRPZldlZWtcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcblxuICAvLyBGaW5kIGlmIGN1cnJlbnQgZGF5IGlzIGluIHRoZSBkaXNwbGF5ZWQgd2Vla1xuICBjb25zdCB0b2RheUluZGV4ID0gd2Vla0RheXMuZmluZEluZGV4KChkYXkpID0+IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpKVxuICBjb25zdCBpc0N1cnJlbnRXZWVrID0gdG9kYXlJbmRleCAhPT0gLTFcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWdyaWRcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIGdyaWQgZ3JpZC1jb2xzLVthdXRvX3JlcGVhdCg3LDFmcildIGdyaWQtcm93cy1bcmVwZWF0KDI0LG1pbm1heCg2MHB4LCAxZnIpKV1cIlxuICAgID5cbiAgICAgIHsvKiBUaW1lIGxhYmVscyBjb2x1bW4gLSBmaXhlZCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXRpbWUtbGFiZWxzXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiei0xMCBjb2wtc3Bhbi0xIHctMTQgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXhcIlxuICAgICAgPlxuICAgICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gYm9yZGVyLWIgdGV4dC1yaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPFdlZWtEYXlDb2wga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IGRheT17ZGF5fSAvPlxuICAgICAgKSl9XG5cbiAgICAgIHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yICovfVxuICAgICAge2lzQ3VycmVudFdlZWsgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLWN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgei00MFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6IGAke3RvZGF5SW5kZXggKiAoMTAwIC8gNyl9JWAsXG4gICAgICAgICAgICB3aWR0aDogYCR7MTAwIC8gN30lYCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLXQgYm9yZGVyLXJlZC01MDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LTEgbWwtMSBoLTIgdy0yIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IERheUFsbERheVJvdyB9IGZyb20gJy4uL2RheS1hbGwtZGF5LXJvdydcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi4vZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERheUhlYWRlciB9IGZyb20gJy4uL2RheS1oZWFkZXInXG5pbXBvcnQgeyBEYXlUaW1lQ29sIH0gZnJvbSAnLi4vZGF5LXRpbWUtY29sJ1xuXG4vLyBGb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzLCB3ZSdsbCBkaXZpZGUgZWFjaCBob3VyIGludG8gMTUtbWludXRlIHNlZ21lbnRzXG5jb25zdCB0aW1lU2VnbWVudHMgPSBbMCwgMTUsIDMwLCA0NV1cblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgY2VsbERhdGUgPSBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImRheS12aWV3XCIgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIj5cbiAgICAgIHsvKiBEYXkgaGVhZGVyICovfVxuICAgICAgPERheUhlYWRlciBjbGFzc05hbWU9XCJoLVszcmVtXVwiIC8+XG5cbiAgICAgIHsvKiBUaW1lIGdyaWQgd2l0aG91dCBzY3JvbGxiYXIgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1zY3JvbGwtYXJlYVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LXktYXV0byBoLVtjYWxjKDEwMCUtM3JlbSldXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAqL31cbiAgICAgICAgPERheUFsbERheVJvdyAvPlxuXG4gICAgICAgIHsvKiBTZXQgYSBmaXhlZCBoZWlnaHQgY29udGFpbmVyIHRoYXQgbWF0Y2hlcyBleGFjdGx5IHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIGhvdXIgYmxvY2tzICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktdGltZS1ncmlkXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy04IGRpdmlkZS14IGJvcmRlci14XCJcbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IGAke2hvdXJzLmxlbmd0aCAqIDYwfXB4YCB9fVxuICAgICAgICA+XG4gICAgICAgICAgey8qIFRpbWUgbGFiZWxzIGNvbHVtbiAqL31cbiAgICAgICAgICA8RGF5VGltZUNvbCBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xXCIgLz5cblxuICAgICAgICAgIHsvKiBEYXkgY29sdW1uIHdpdGggZXZlbnRzICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWV2ZW50cy1jb2x1bW5cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBoLWZ1bGwgbWQ6Y29sLXNwYW4tN1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIEJhY2tncm91bmQgZ3JpZCBmb3IgdGltZSBzbG90cyAtIGxvd2VzdCBsYXllciAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYmFja2dyb3VuZC1ncmlkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aG91cnMubWFwKChob3VyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YGJnLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LSR7aG91ci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICdISCdcbiAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7LyogMTUtbWludXRlIG1hcmtlciBsaW5lcyAqL31cbiAgICAgICAgICAgICAgICAgIHt0aW1lU2VnbWVudHMuc2xpY2UoMSkubWFwKChtaW51dGVzKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BiZy0ke2hvdXIuZm9ybWF0KCdISCcpfS0ke21pbnV0ZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyIGFic29sdXRlIHctZnVsbCBib3JkZXItdCBib3JkZXItZGFzaGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB0b3A6IGAke2luZGV4ICogNjAgKyBtaW51dGVzfXB4YCB9fVxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEludGVyYWN0aXZlIGxheWVyIGZvciB0aW1lIHNsb3RzIC0gbWlkZGxlIGxheWVyIHdpdGggbm8gYm9yZGVycyAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaW50ZXJhY3RpdmUtbGF5ZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gdGltZS5ob3VyKClcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS0wMGB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyJyl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX0tMTVgfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e2N1cnJlbnREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdXI9e2hvdXJ9XG4gICAgICAgICAgICAgICAgICAgICAgbWludXRlPXsxNX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1bMTVweF0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdGltZS1jZWxsLSR7Y2VsbERhdGV9LSR7dGltZS5mb3JtYXQoJ0hIJyl9LTMwYH1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZT17MzB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS00NWB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezQ1fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLVsxNXB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEV2ZW50cyBsYXllciAtIG1pZGRsZS10b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICA8RGF5RXZlbnRzTGF5ZXIgZGF5PXtjdXJyZW50RGF0ZX0gLz5cblxuICAgICAgICAgICAgey8qIEN1cnJlbnQgdGltZSBpbmRpY2F0b3IgLSB0b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICB7aXNUb2RheSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1jdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIGxlZnQtMCB6LTQwIGJvcmRlci10IGJvcmRlci1yZWQtNTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiBgJHsoZGF5anMoKS5ob3VyKCkgKyBkYXlqcygpLm1pbnV0ZSgpIC8gNjApICogNjB9cHhgLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC0xIC1tbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXlWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICcuLi8uLi9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4uLy4uL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IERheUFsbERheVJvdyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBjdXJyZW50IGRheSdzIGV2ZW50cyAtIHRoaXMgd2lsbCByZWZyZXNoIGF1dG9tYXRpY2FsbHkgd2hlbiBzdG9yZSB1cGRhdGVzXG4gIC8vIGJlY2F1c2UgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIGlzIGEgc2VsZWN0b3IgZnVuY3Rpb24gZnJvbSB0aGUgc3RvcmUgdGhhdCBydW5zIHdoZW5ldmVyIGV2ZW50cyBjaGFuZ2VcbiAgY29uc3QgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgIGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuICAgIGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKVxuICApXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50c1xuICBjb25zdCB7IGFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gT25seSBldmVudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgYWxsRGF5IHNob3VsZCBiZSBpbiB0aGUgYWxsLWRheSBzZWN0aW9uXG4gICAgY29uc3QgYWxsRGF5RXZ0cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hbGxEYXkpXG5cbiAgICAvLyBSZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gICAgY29uc3QgcmVndWxhckV2dHMgPSBkYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmFsbERheSlcblxuICAgIHJldHVybiB7IGFsbERheUV2ZW50czogYWxsRGF5RXZ0cywgcmVndWxhckV2ZW50czogcmVndWxhckV2dHMgfVxuICB9LCBbZGF5RXZlbnRzXSkgLy8gT25seSBkZXBlbmQgb24gdGhlIGRheUV2ZW50cyB3aGljaCBpcyByZWZyZXNoZWQgYXV0b21hdGljYWxseVxuXG4gIC8vIFByb2Nlc3MgYWxsLWRheSBldmVudHMgZm9yIGRpc3BsYXlcbiAgY29uc3QgeyBwcm9jZXNzZWRBbGxEYXlFdmVudHMgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIFNvcnQgYWxsLWRheSBldmVudHMgKGlmIG5lZWRlZClcbiAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBbLi4uYWxsRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgfSlcblxuICAgIC8vIFRyYWNrIHBvc2l0aW9ucyBpbiByb3dzIGZvciBzdGFja2luZ1xuICAgIGNvbnN0IHJvd3M6IHsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfVtdW10gPSBbXVxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgIHNvcnRlZEV2ZW50cy5mb3JFYWNoKChldmVudCwgcm93SW5kZXgpID0+IHtcbiAgICAgIGxldCBwbGFjZWQgPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIXBsYWNlZCkge1xuICAgICAgICBpZiAocm93SW5kZXggPj0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcm93IGlmIG5lZWRlZFxuICAgICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSW4gZGF5IHZpZXcsIHdlIGNhbiBwbGFjZSBvbmUgZXZlbnQgcGVyIHJvdyBhcyB0aGV5IGRvbid0IG92ZXJsYXAgaG9yaXpvbnRhbGx5XG4gICAgICAgICAgLy8gVGhpcyBpcyBzaW1wbGVyIHRoYW4gd2VlayB2aWV3IHdoZXJlIHdlIG5lZWRlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHNcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGV2ZW50IHRvIHRoZSByb3dcbiAgICAgIHJvd3Nbcm93SW5kZXhdLnB1c2goeyBldmVudCB9KVxuXG4gICAgICAvLyBBZGQgcHJvY2Vzc2VkIGV2ZW50IHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgdG9wOiByb3dJbmRleCAqIEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWFsbC1kYXktcm93XCJcbiAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTggYm9yZGVyLWIgYm9yZGVyLXhcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXItciBwci0yIG1kOmNvbC1zcGFuLTFcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHNcIj5cbiAgICAgICAgICBBbGwtZGF5XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQWxsLWRheSBldmVudHMgY29udGFpbmVyIHdpdGggZHluYW1pYyBoZWlnaHQgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTYgbWQ6Y29sLXNwYW4tNyBcIj5cbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBpZD17YGFsbC1kYXktJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IHctZnVsbCBjdXJzb3ItcG9pbnRlciBtaW4taC0xMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtwcm9jZXNzZWRBbGxEYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQgKyAncHgnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlRXZlbnRcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib3ZlcmZsb3ctY2xpcCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBgY2FsYygxMDAlIC0gdmFyKC0tc3BhY2luZykgKiAyKWAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRGF5SGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUhlYWRlcjogUmVhY3QuRkM8RGF5SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItYiBwLTIgYm9yZGVyLXgnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuICAgICAgICAgICAgaXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG4gICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG4gICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICBUb2RheVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmludGVyZmFjZSBEYXlUaW1lQ29sUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheVRpbWVDb2w6IFJlYWN0LkZDPERheVRpbWVDb2xQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD1cImRheS10aW1lLWNvbFwiXG4gICAgICBjbGFzc05hbWU9e2Bjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xICR7Y2xhc3NOYW1lfWB9XG4gICAgPlxuICAgICAge2hvdXJzLm1hcCgodGltZSkgPT4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YGRheS10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIHRleHQtcmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICB7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG4gICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgIH0pLmZvcm1hdCh0aW1lLnRvRGF0ZSgpKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2hlY2tib3gsXG4gIERhdGVQaWNrZXIsXG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBUb29sdGlwLFxuICBUb29sdGlwQ29udGVudCxcbiAgVG9vbHRpcFByb3ZpZGVyLFxuICBUb29sdGlwVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9saWIvcmVjdXJyZW5jZS1oYW5kbGVyL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuY29uc3QgY29sb3JPcHRpb25zID0gW1xuICB7IHZhbHVlOiAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCcsIGxhYmVsOiAnQmx1ZScgfSxcbiAgeyB2YWx1ZTogJ2JnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMCcsIGxhYmVsOiAnR3JlZW4nIH0sXG4gIHsgdmFsdWU6ICdiZy1wdXJwbGUtMTAwIHRleHQtcHVycGxlLTgwMCcsIGxhYmVsOiAnUHVycGxlJyB9LFxuICB7IHZhbHVlOiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnLCBsYWJlbDogJ1JlZCcgfSxcbiAgeyB2YWx1ZTogJ2JnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwJywgbGFiZWw6ICdZZWxsb3cnIH0sXG4gIHsgdmFsdWU6ICdiZy1waW5rLTEwMCB0ZXh0LXBpbmstODAwJywgbGFiZWw6ICdQaW5rJyB9LFxuICB7IHZhbHVlOiAnYmctaW5kaWdvLTEwMCB0ZXh0LWluZGlnby04MDAnLCBsYWJlbDogJ0luZGlnbycgfSxcbiAgeyB2YWx1ZTogJ2JnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMCcsIGxhYmVsOiAnQW1iZXInIH0sXG4gIHsgdmFsdWU6ICdiZy1lbWVyYWxkLTEwMCB0ZXh0LWVtZXJhbGQtODAwJywgbGFiZWw6ICdFbWVyYWxkJyB9LFxuICB7IHZhbHVlOiAnYmctc2t5LTEwMCB0ZXh0LXNreS04MDAnLCBsYWJlbDogJ1NreScgfSxcbiAgeyB2YWx1ZTogJ2JnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwJywgbGFiZWw6ICdWaW9sZXQnIH0sXG4gIHsgdmFsdWU6ICdiZy1yb3NlLTEwMCB0ZXh0LXJvc2UtODAwJywgbGFiZWw6ICdSb3NlJyB9LFxuICB7IHZhbHVlOiAnYmctdGVhbC0xMDAgdGV4dC10ZWFsLTgwMCcsIGxhYmVsOiAnVGVhbCcgfSxcbiAgeyB2YWx1ZTogJ2JnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwJywgbGFiZWw6ICdPcmFuZ2UnIH0sXG5dXG5cbmludGVyZmFjZSBFdmVudEZvcm1Qcm9wcyB7XG4gIHNlbGVjdGVkRXZlbnQ/OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU/OiBkYXlqcy5EYXlqcyB8IG51bGxcbiAgb25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuICBzZWxlY3RlZEV2ZW50LFxuICBzZWxlY3RlZERhdGUsXG4gIG9uQ2xvc2UsXG4gIG9uVXBkYXRlLFxuICBvbkRlbGV0ZSxcbiAgb25BZGQsXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaWFsb2dTdGF0ZSxcbiAgICBvcGVuRWRpdERpYWxvZyxcbiAgICBvcGVuRGVsZXRlRGlhbG9nLFxuICAgIGNsb3NlRGlhbG9nLFxuICAgIGhhbmRsZUNvbmZpcm0sXG4gIH0gPSB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25DbG9zZSlcblxuICBjb25zdCB7IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCwgdCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCBzdGFydCA9IHNlbGVjdGVkRXZlbnQ/LnN0YXJ0XG4gIGNvbnN0IGVuZCA9IHNlbGVjdGVkRXZlbnQ/LmVuZFxuXG4gIC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2VcbiAgY29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG4gICAgPyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcbiAgICA6IG51bGxcblxuICAvLyBGb3JtIGRlZmF1bHQgdmFsdWVzXG4gIGNvbnN0IGRlZmF1bHRTdGFydERhdGUgPSBzZWxlY3RlZERhdGU/LnRvRGF0ZSgpIHx8IG5ldyBEYXRlKClcbiAgY29uc3QgZGVmYXVsdEVuZERhdGUgPVxuICAgIHNlbGVjdGVkRGF0ZT8uYWRkKDEsICdob3VyJykudG9EYXRlKCkgfHwgZGF5anMoKS5hZGQoMSwgJ2hvdXInKS50b0RhdGUoKVxuXG4gIC8vIEZvcm0gc3RhdGVcbiAgY29uc3QgW3N0YXJ0RGF0ZSwgc2V0U3RhcnREYXRlXSA9IHVzZVN0YXRlKFxuICAgIHN0YXJ0Py50b0RhdGUoKSB8fCBkZWZhdWx0U3RhcnREYXRlXG4gIClcbiAgY29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kPy50b0RhdGUoKSB8fCBkZWZhdWx0RW5kRGF0ZSlcbiAgY29uc3QgW2lzQWxsRGF5LCBzZXRJc0FsbERheV0gPSB1c2VTdGF0ZShzZWxlY3RlZEV2ZW50Py5hbGxEYXkgfHwgZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlKFxuICAgIHNlbGVjdGVkRXZlbnQ/LmNvbG9yIHx8IGNvbG9yT3B0aW9uc1swXS52YWx1ZVxuICApXG5cbiAgLy8gVGltZSBzdGF0ZVxuICBjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoXG4gICAgc3RhcnQgPyBzdGFydC5mb3JtYXQoJ0hIOm1tJykgOiBkYXlqcyhkZWZhdWx0U3RhcnREYXRlKS5mb3JtYXQoJ0hIOm1tJylcbiAgKVxuICBjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShcbiAgICBlbmQgPyBlbmQuZm9ybWF0KCdISDptbScpIDogZGF5anMoZGVmYXVsdEVuZERhdGUpLmZvcm1hdCgnSEg6bW0nKVxuICApXG5cbiAgLy8gSW5pdGlhbGl6ZSBmb3JtIHZhbHVlcyBmcm9tIHNlbGVjdGVkIGV2ZW50IG9yIGRlZmF1bHRzXG4gIGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlKHtcbiAgICB0aXRsZTogc2VsZWN0ZWRFdmVudD8udGl0bGUgfHwgJycsXG4gICAgZGVzY3JpcHRpb246IHNlbGVjdGVkRXZlbnQ/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgIGxvY2F0aW9uOiBzZWxlY3RlZEV2ZW50Py5sb2NhdGlvbiB8fCAnJyxcbiAgfSlcblxuICAvLyBSZWN1cnJlbmNlIHN0YXRlIC0gcHVsbCBSUlVMRSBmcm9tIHBhcmVudCBpZiB0aGlzIGlzIGFuIGluc3RhbmNlXG4gIGNvbnN0IFtycnVsZSwgc2V0UnJ1bGVdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50UnJ1bGUgPSBzZWxlY3RlZEV2ZW50Py5ycnVsZSB8fCBwYXJlbnRFdmVudD8ucnJ1bGVcbiAgICByZXR1cm4gZXZlbnRScnVsZSB8fCBudWxsXG4gIH0pXG5cbiAgLy8gQ3JlYXRlIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGZpeCBUeXBlU2NyaXB0IGVycm9ycyB3aXRoIERhdGVQaWNrZXJcbiAgY29uc3QgaGFuZGxlU3RhcnREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgc2V0U3RhcnREYXRlKGRhdGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRW5kRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHNldEVuZERhdGUoZGF0ZSlcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuICAgIGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICApID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuICAgIHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG4gIH1cblxuICAvLyBIYW5kbGUgdGltZSBjaGFuZ2VzXG4gIGNvbnN0IGhhbmRsZVRpbWVDaGFuZ2UgPSAoXG4gICAgZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4sXG4gICAgaXNTdGFydDogYm9vbGVhblxuICApID0+IHtcbiAgICBjb25zdCB0aW1lVmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICBzZXRTdGFydFRpbWUodGltZVZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFbmRUaW1lKHRpbWVWYWx1ZSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG4gICAgaWYgKGlzQWxsRGF5KSB7XG4gICAgICBzZXRFbmRUaW1lKCcyMzo1OScpXG4gICAgfVxuICB9LCBbaXNBbGxEYXldKVxuXG4gIC8vIEhhbmRsZSBmb3JtIHN1Ym1pc3Npb25cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gQ3JlYXRlIGZ1bGwgZGF0ZXRpbWUgb2JqZWN0cyBieSBjb21iaW5pbmcgZGF0ZSBhbmQgdGltZVxuICAgIGNvbnN0IFtzdGFydEhvdXJzLCBzdGFydE1pbnV0ZXNdID0gc3RhcnRUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcbiAgICBjb25zdCBbZW5kSG91cnMsIGVuZE1pbnV0ZXNdID0gZW5kVGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cbiAgICBsZXQgc3RhcnREYXRlVGltZSA9IGRheWpzKHN0YXJ0RGF0ZSkuaG91cihzdGFydEhvdXJzKS5taW51dGUoc3RhcnRNaW51dGVzKVxuXG4gICAgbGV0IGVuZERhdGVUaW1lID0gZGF5anMoZW5kRGF0ZSkuaG91cihlbmRIb3VycykubWludXRlKGVuZE1pbnV0ZXMpXG5cbiAgICAvLyBGb3IgYWxsLWRheSBldmVudHMsIHNldCBhcHByb3ByaWF0ZSB0aW1lc1xuICAgIGlmIChpc0FsbERheSkge1xuICAgICAgc3RhcnREYXRlVGltZSA9IHN0YXJ0RGF0ZVRpbWUuaG91cigwKS5taW51dGUoMClcbiAgICAgIGVuZERhdGVUaW1lID0gZW5kRGF0ZVRpbWUuaG91cigyMykubWludXRlKDU5KVxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgIGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcbiAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG4gICAgICBlbmQ6IGVuZERhdGVUaW1lLFxuICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICBsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcbiAgICAgIGFsbERheTogaXNBbGxEYXksXG4gICAgICBjb2xvcjogc2VsZWN0ZWRDb2xvcixcbiAgICAgIHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG4gICAgICBpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuICAgICAgICAvLyBTaG93IHJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZ1xuICAgICAgICBvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG4gICAgICAgICAgdGl0bGU6IGZvcm1WYWx1ZXMudGl0bGUsXG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgZW5kOiBlbmREYXRlVGltZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcbiAgICAgICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuICAgICAgICAgIHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuICAgICAgfVxuICAgICAgb25VcGRhdGU/LihldmVudERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQWRkPy4oZXZlbnREYXRhKVxuICAgIH1cblxuICAgIG9uQ2xvc2UoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuICAgICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcbiAgICAgICAgLy8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuICAgICAgICBvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG4gICAgICAgIHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuICAgICAgfVxuICAgICAgb25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuICAgICAgb25DbG9zZSgpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcbiAgICBpZiAobmV3UlJ1bGUpIHtcbiAgICAgIC8vIENyZWF0ZSBkdHN0YXJ0IHdpdGggdGhlIHNhbWUgbG9naWMgYXMgaW4gaGFuZGxlU3VibWl0XG4gICAgICBjb25zdCBbc3RhcnRIb3Vycywgc3RhcnRNaW51dGVzXSA9IHN0YXJ0VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gICAgICBsZXQgc3RhcnREYXRlVGltZSA9IGRheWpzKHN0YXJ0RGF0ZSkuaG91cihzdGFydEhvdXJzKS5taW51dGUoc3RhcnRNaW51dGVzKVxuXG4gICAgICBpZiAoaXNBbGxEYXkpIHtcbiAgICAgICAgc3RhcnREYXRlVGltZSA9IHN0YXJ0RGF0ZVRpbWUuaG91cigwKS5taW51dGUoMClcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIGR0c3RhcnQgaXMgYWx3YXlzIGluY2x1ZGVkIGluIFJSdWxlT3B0aW9ucyBhcyBhIERhdGUgb2JqZWN0XG4gICAgICBjb25zdCBjb21wbGV0ZVJydWxlOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm5ld1JSdWxlLFxuICAgICAgICBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpLCAvLyBDb252ZXJ0IGRheWpzIHRvIERhdGVcbiAgICAgIH1cbiAgICAgIHNldFJydWxlKGNvbXBsZXRlUnJ1bGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFJydWxlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgZW5kIGRhdGUgaXMgbm90IGJlZm9yZSBzdGFydCBkYXRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRheWpzKHN0YXJ0RGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcbiAgICAgIHNldEVuZERhdGUoc3RhcnREYXRlKVxuICAgIH1cbiAgfSwgW3N0YXJ0RGF0ZSwgZW5kRGF0ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERpYWxvZyBvcGVuPXt0cnVlfSBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9PlxuICAgICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJ3LVs5MHZ3XSBtYXgtdy1bNTAwcHhdIHAtNCBzbTpwLTZcIj5cbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgICAgIDxEaWFsb2dIZWFkZXIgY2xhc3NOYW1lPVwibWItMiBzbTptYi00XCI+XG4gICAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cbiAgICAgICAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgICAgICAgPERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG4gICAgICAgICAgICAgIDwvRGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHB5LTIgc206Z2FwLTQgc206cHktNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cInRpdGxlXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgndGl0bGUnKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgnZGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICBpZD1cImFsbERheVwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0FsbERheX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldElzQWxsRGF5KGNoZWNrZWQgPT09IHRydWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJhbGxEYXlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdhbGxEYXknKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdzdGFydERhdGUnKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZT17c3RhcnREYXRlfVxuICAgICAgICAgICAgICAgICAgICBzZXREYXRlPXtoYW5kbGVTdGFydERhdGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2VuZERhdGUnKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZT17ZW5kRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMVwiXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlT25TZWxlY3RcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHshaXNBbGxEYXkgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJzdGFydC10aW1lXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ3N0YXJ0VGltZScpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInN0YXJ0LXRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c3RhcnRUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGltZUNoYW5nZShlLCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZW5kLXRpbWVcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnZW5kVGltZScpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImVuZC10aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VuZFRpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUaW1lQ2hhbmdlKGUsIGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8VG9vbHRpcFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICB7Y29sb3JPcHRpb25zLm1hcCgoY29sb3IpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBrZXk9e2NvbG9yLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NvbG9yLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRDb2xvcihjb2xvci52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57Y29sb3IubGFiZWx9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibG9jYXRpb25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdsb2NhdGlvbicpfVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cbiAgICAgICAgICAgICAgPFJlY3VycmVuY2VFZGl0b3IgdmFsdWU9e3JydWxlfSBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC0yIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTptdC00IHNtOmZsZXgtcm93IHNtOmdhcC0wXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHNtOm1yLWF1dG8gc206dy1hdXRvXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGdhcC0yIHNtOnctYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dCgnY2FuY2VsJyl9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0RpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvRGlhbG9nQ29udGVudD5cbiAgICAgIDwvRGlhbG9nPlxuXG4gICAgICB7LyogUmVjdXJyaW5nIEV2ZW50IEVkaXQgRGlhbG9nICovfVxuICAgICAgPFJlY3VycmVuY2VFZGl0RGlhbG9nXG4gICAgICAgIGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuICAgICAgICBvbkNsb3NlPXtjbG9zZURpYWxvZ31cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuICAgICAgICBvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuICAgICAgICBldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG4gICAgICAvPlxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcbiAgZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcbiAgZXZlbnQsXG4gIGN1cnJlbnRFdmVudHMsXG4gIHN0YXJ0RGF0ZSxcbiAgZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuICBpZiAoIWV2ZW50LnJydWxlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG4gICAgLy8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuICAgIGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAuLi5ldmVudC5ycnVsZSxcbiAgICAgIGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG4gICAgfVxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG4gICAgKVxuXG4gICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuICAgIGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuICAgIC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuICAgIC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG4gICAgY29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG4gICAgICAuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgIC50b0RhdGUoKVxuICAgIGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG4gICAgLy8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2VcbiAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG4gICAgLy8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcbiAgICAgIC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuICAgICAgICAgIHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKS5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG4gICAgICAgIClcblxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcbiAgICAgICAgaWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcbiAgICAgICAgY29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuICAgICAgICBjb25zdCBwYXJlbnRVSUQgPSBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gICAgICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIGlkOiByZWN1cnJpbmdFdmVudElkLFxuICAgICAgICAgIHN0YXJ0OiBvY2N1cnJlbmNlRGF0ZSxcbiAgICAgICAgICBlbmQ6IG5ld0VuZFRpbWUsXG4gICAgICAgICAgdWlkOiBwYXJlbnRVSUQsIC8vIFNhbWUgVUlEIGFzIHBhcmVudCBmb3IgcHJvcGVyIGdyb3VwaW5nXG4gICAgICAgICAgcnJ1bGU6IHVuZGVmaW5lZCwgLy8gSW5zdGFuY2UgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWN1cnJpbmdFdmVudFxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHJlY3VycmluZ0V2ZW50KSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgRVhEQVRFIGV4Y2x1c2lvbnNcbiAgICAgICAgY29uc3QgaGFzRXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwXG4gICAgICAgIGlmIChoYXNFeGRhdGVzKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcbiAgICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXZlbnQuZXhkYXRlcy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuICAgICAgICAgIGlmIChpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2VcbiAgICAgICAgLy8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcbiAgICAgICAgLy8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuICAgICAgICBjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuICAgICAgICAgIHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG4gICAgICAgICAgcmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG4gICAgICAgIHJldHVybiBldmVudFNwYW5zUmFuZ2VcbiAgICAgIH0pXG5cbiAgICByZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgIClcbiAgfVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG4gIHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICB1cGRhdGVzLFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG4gICAgICBjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcbiAgICAgIGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuICAgICAgICAuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIGlkOiBtb2RpZmllZEV2ZW50SWQsXG4gICAgICAgIHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG4gICAgICAgIHVpZDogYmFzZUV2ZW50LnVpZCB8fCBgJHtiYXNlRXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYCwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG4gICAgICAgIHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudFxuICAgICAgdXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2ZvbGxvd2luZyc6IHtcbiAgICAgIC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIC8vIFVwZGF0ZSBvcmlnaW5hbCBzZXJpZXMgd2l0aCBVTlRJTCB0byBlbmQgYmVmb3JlIHRhcmdldCBkYXRlXG4gICAgICBjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgcnJ1bGU6IHtcbiAgICAgICAgICAuLi5iYXNlRXZlbnQucnJ1bGUsXG4gICAgICAgICAgdW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcbiAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuICAgICAgY29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuICAgICAgY29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG4gICAgICAgIHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcbiAgICAgIGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG4gICAgICBjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAgIGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIHJydWxlOiB7XG4gICAgICAgICAgLi4uYmFzZUV2ZW50LnJydWxlLFxuICAgICAgICAgIC4uLnVwZGF0ZXMucnJ1bGUsXG4gICAgICAgICAgZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICBpZDogbmV3U2VyaWVzSWQsXG4gICAgICAgIHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG4gICAgICAgIHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG4gICAgICAgIGVuZDogbmV3U2VyaWVzRW5kVGltZSxcbiAgICAgICAgcmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG4gICAgICB9XG4gICAgICB1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2FsbCc6IHtcbiAgICAgIC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG5cbmludGVyZmFjZSBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzIHtcbiAgdGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gZXhjbHVkZSB0aGlzIG9jY3VycmVuY2VcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0geyAuLi5iYXNlRXZlbnQsIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdmb2xsb3dpbmcnOiB7XG4gICAgICAvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIHNlcmllcyB3aXRoIFVOVElMIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICBycnVsZToge1xuICAgICAgICAgIC4uLmJhc2VFdmVudC5ycnVsZSxcbiAgICAgICAgICB1bnRpbDogdGVybWluYXRpb25EYXRlLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnYWxsJzoge1xuICAgICAgLy8gXCJBbGwgZXZlbnRzXCIgLSBSZW1vdmUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzXG4gICAgICBjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgIChlKSA9PiBlLnVpZCAhPT0gdGFyZ2V0RXZlbnQudWlkXG4gICAgICApXG4gICAgICByZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7XG4gIENhcmQsXG4gIENhcmRDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIENoZWNrYm94LFxuICBEYXRlUGlja2VyLFxuICBJbnB1dCxcbiAgTGFiZWwsXG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0SXRlbSxcbiAgU2VsZWN0VHJpZ2dlcixcbiAgU2VsZWN0VmFsdWUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlci90eXBlcydcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG4vLyBOYXR1cmFsIGxhbmd1YWdlIGRlc2NyaXB0aW9uIGZ1bmN0aW9uIHVzaW5nIFJSdWxlJ3MgYnVpbHQtaW4gaGVscGVyIG1ldGhvZHNcbmZ1bmN0aW9uIGdldFJSdWxlRGVzY3JpcHRpb24oXG4gIHJydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zIHwgbnVsbCxcbiAgdDogKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGlmICghcnJ1bGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2UgZGlyZWN0bHkgZnJvbSBvcHRpb25zXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSUnVsZShycnVsZU9wdGlvbnMpXG5cbiAgICAvLyBVc2UgUlJ1bGUncyBidWlsdC1pbiBuYXR1cmFsIGxhbmd1YWdlIGNvbnZlcnNpb24gd2l0aCB0b1RleHQoKVxuICAgIGNvbnN0IG5hdHVyYWxUZXh0ID0gcnVsZS50b1RleHQoKVxuXG4gICAgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIFJSdWxlIGNhbid0IGNvbnZlcnQgdG8gbmF0dXJhbCBsYW5ndWFnZVxuICAgIGlmIChcbiAgICAgICFuYXR1cmFsVGV4dCB8fFxuICAgICAgbmF0dXJhbFRleHQuaW5jbHVkZXMoJ1JSdWxlIGVycm9yJykgfHxcbiAgICAgIG5hdHVyYWxUZXh0LmluY2x1ZGVzKCdVbmFibGUgdG8gZnVsbHkgY29udmVydCcpIHx8XG4gICAgICBuYXR1cmFsVGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlcnJvcicpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG4gICAgfVxuXG4gICAgLy8gQ2FwaXRhbGl6ZSBmaXJzdCBsZXR0ZXIgZm9yIGNvbnNpc3RlbnQgZm9ybWF0dGluZ1xuICAgIHJldHVybiBuYXR1cmFsVGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hdHVyYWxUZXh0LnNsaWNlKDEpXG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHJldHVybiBmYWxsYmFja1xuICAgIHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcbiAgfVxufVxuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXRvclByb3BzIHtcbiAgdmFsdWU/OiBSUnVsZU9wdGlvbnMgfCBudWxsXG4gIG9uQ2hhbmdlOiAocnJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxSZWN1cnJlbmNlRWRpdG9yUHJvcHM+ID0gKHtcbiAgdmFsdWUsXG4gIG9uQ2hhbmdlLFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IFtzaG93UmVjdXJyZW5jZSwgc2V0U2hvd1JlY3VycmVuY2VdID0gdXNlU3RhdGUoISF2YWx1ZSlcblxuICAvLyBDcmVhdGUgV0VFS19EQVlTIGFycmF5IHdpdGggdHJhbnNsYXRpb25zXG4gIGNvbnN0IFdFRUtfREFZUyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgeyB2YWx1ZTogUlJ1bGUuU1UsIGxhYmVsOiB0KCdzdW5kYXknKSwgc2hvcnQ6IHQoJ3N1bicpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5NTywgbGFiZWw6IHQoJ21vbmRheScpLCBzaG9ydDogdCgnbW9uJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlRVLCBsYWJlbDogdCgndHVlc2RheScpLCBzaG9ydDogdCgndHVlJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLldFLCBsYWJlbDogdCgnd2VkbmVzZGF5JyksIHNob3J0OiB0KCd3ZWQnKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuVEgsIGxhYmVsOiB0KCd0aHVyc2RheScpLCBzaG9ydDogdCgndGh1JykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLkZSLCBsYWJlbDogdCgnZnJpZGF5JyksIHNob3J0OiB0KCdmcmknKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuU0EsIGxhYmVsOiB0KCdzYXR1cmRheScpLCBzaG9ydDogdCgnc2F0JykgfSxcbiAgICBdLFxuICAgIFt0XVxuICApXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgUlJ1bGUgZnJlcXVlbmN5IHRvIHN0cmluZ1xuICBjb25zdCBnZXRGcmVxdWVuY3lTdHJpbmcgPSAoZnJlcTogUlJ1bGVPcHRpb25zWydmcmVxJ10pOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGZyZXFNYXA6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgICBbUlJ1bGUuREFJTFldOiAnREFJTFknLFxuICAgICAgW1JSdWxlLldFRUtMWV06ICdXRUVLTFknLFxuICAgICAgW1JSdWxlLk1PTlRITFldOiAnTU9OVEhMWScsXG4gICAgICBbUlJ1bGUuWUVBUkxZXTogJ1lFQVJMWScsXG4gICAgfVxuICAgIHJldHVybiBmcmVxTWFwW2ZyZXFdIHx8ICdEQUlMWSdcbiAgfVxuXG4gIC8vIFdvcmsgd2l0aCBjb21wbGV0ZSBSUnVsZU9wdGlvbnMgLSBkdHN0YXJ0IGNvbWVzIGZyb20gcGFyZW50IEV2ZW50Rm9ybVxuICBjb25zdCBbcnJ1bGVPcHRpb25zLCBzZXRSUnVsZU9wdGlvbnNdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oXG4gICAgKCkgPT4gdmFsdWUgfHwgbnVsbFxuICApXG5cbiAgLy8gU3luYyBzdGF0ZSB3aGVuIHZhbHVlIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNob3dSZWN1cnJlbmNlKCEhdmFsdWUpXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzZXRSUnVsZU9wdGlvbnModmFsdWUpXG4gICAgfVxuICB9LCBbdmFsdWVdKVxuXG4gIGNvbnN0IHVwZGF0ZVJSdWxlID0gKHVwZGF0ZXM6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPikgPT4ge1xuICAgIGlmICghcnJ1bGVPcHRpb25zKSB7XG4gICAgICByZXR1cm4gLy8gQ2FuJ3QgdXBkYXRlIGlmIG5vIGJhc2Ugb3B0aW9ucyBleGlzdFxuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdGlvbnM6IFJSdWxlT3B0aW9ucyA9IHsgLi4ucnJ1bGVPcHRpb25zLCAuLi51cGRhdGVzIH1cbiAgICBzZXRSUnVsZU9wdGlvbnMobmV3T3B0aW9ucylcblxuICAgIGlmIChzaG93UmVjdXJyZW5jZSkge1xuICAgICAgb25DaGFuZ2UobmV3T3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobnVsbClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVSZWN1cnJlbmNlVG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBzZXRTaG93UmVjdXJyZW5jZShjaGVja2VkKVxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBpZiAocnJ1bGVPcHRpb25zKSB7XG4gICAgICAgIG9uQ2hhbmdlKHJydWxlT3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IFJSdWxlIHdoZW4gdG9nZ2xpbmcgb24gZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgIC8vIE5vdGU6IGR0c3RhcnQgd2lsbCBiZSBzZXQgYnkgdGhlIHBhcmVudCBFdmVudEZvcm1cbiAgICAgICAgY29uc3QgZGVmYXVsdFJSdWxlOiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7XG4gICAgICAgICAgZnJlcTogUlJ1bGUuREFJTFksXG4gICAgICAgICAgaW50ZXJ2YWw6IDEsXG4gICAgICAgIH1cbiAgICAgICAgc2V0UlJ1bGVPcHRpb25zKGRlZmF1bHRSUnVsZSBhcyBSUnVsZU9wdGlvbnMpXG4gICAgICAgIG9uQ2hhbmdlKGRlZmF1bHRSUnVsZSBhcyBSUnVsZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRnJlcXVlbmN5Q2hhbmdlID0gKGZyZXF1ZW5jeTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQ29udmVydCBzdHJpbmcgdG8gUlJ1bGUgZnJlcXVlbmN5IGNvbnN0YW50XG4gICAgY29uc3QgZnJlcU1hcDogUmVjb3JkPHN0cmluZywgUlJ1bGVPcHRpb25zWydmcmVxJ10+ID0ge1xuICAgICAgREFJTFk6IFJSdWxlLkRBSUxZLFxuICAgICAgV0VFS0xZOiBSUnVsZS5XRUVLTFksXG4gICAgICBNT05USExZOiBSUnVsZS5NT05USExZLFxuICAgICAgWUVBUkxZOiBSUnVsZS5ZRUFSTFksXG4gICAgfVxuICAgIHVwZGF0ZVJSdWxlKHsgZnJlcTogZnJlcU1hcFtmcmVxdWVuY3ldIHx8IFJSdWxlLkRBSUxZIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVJbnRlcnZhbENoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSB8fCAxKVxuICAgIHVwZGF0ZVJSdWxlKHsgaW50ZXJ2YWwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZFR5cGVDaGFuZ2UgPSAoZW5kVHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlczogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0ge31cblxuICAgIGlmIChlbmRUeXBlID09PSAnbmV2ZXInKSB7XG4gICAgICAvLyBSZW1vdmUgY291bnQgYW5kIHVudGlsXG4gICAgICB1cGRhdGVzLmNvdW50ID0gdW5kZWZpbmVkXG4gICAgICB1cGRhdGVzLnVudGlsID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChlbmRUeXBlID09PSAnY291bnQnKSB7XG4gICAgICAvLyBTZXQgZGVmYXVsdCBjb3VudCBpZiBub25lIGV4aXN0cywgcmVtb3ZlIHVudGlsXG4gICAgICB1cGRhdGVzLmNvdW50ID0gcnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxXG4gICAgICB1cGRhdGVzLnVudGlsID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChlbmRUeXBlID09PSAndW50aWwnKSB7XG4gICAgICAvLyBTZXQgZGVmYXVsdCB1bnRpbCBkYXRlIGlmIG5vbmUgZXhpc3RzLCByZW1vdmUgY291bnRcbiAgICAgIHVwZGF0ZXMudW50aWwgPVxuICAgICAgICBycnVsZU9wdGlvbnM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuICAgICAgdXBkYXRlcy5jb3VudCA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHVwZGF0ZVJSdWxlKHVwZGF0ZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb3VudENoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGNvdW50ID0gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSB8fCAxKVxuICAgIHVwZGF0ZVJSdWxlKHsgY291bnQgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGNvbnN0IHVudGlsID0gZGF0ZSA/IGRheWpzKGRhdGUpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZFxuICAgIHVwZGF0ZVJSdWxlKHsgdW50aWwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURheVRvZ2dsZSA9IChkYXlJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgd2Vla2RheU1hcCA9IFtcbiAgICAgIFJSdWxlLlNVLFxuICAgICAgUlJ1bGUuTU8sXG4gICAgICBSUnVsZS5UVSxcbiAgICAgIFJSdWxlLldFLFxuICAgICAgUlJ1bGUuVEgsXG4gICAgICBSUnVsZS5GUixcbiAgICAgIFJSdWxlLlNBLFxuICAgIF1cbiAgICBjb25zdCBjdXJyZW50V2Vla2RheXMgPSAocnJ1bGVPcHRpb25zPy5ieXdlZWtkYXkgYXMgV2Vla2RheVtdKSB8fCBbXVxuICAgIGNvbnN0IHRhcmdldFdlZWtkYXkgPSB3ZWVrZGF5TWFwW2RheUluZGV4XVxuXG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGN1cnJlbnRXZWVrZGF5cy5pbmNsdWRlcyh0YXJnZXRXZWVrZGF5KVxuICAgIGxldCBuZXdXZWVrZGF5czogV2Vla2RheVtdXG5cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgbmV3V2Vla2RheXMgPSBjdXJyZW50V2Vla2RheXMuZmlsdGVyKChkYXkpID0+IGRheSAhPT0gdGFyZ2V0V2Vla2RheSlcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3V2Vla2RheXMgPSBbLi4uY3VycmVudFdlZWtkYXlzLCB0YXJnZXRXZWVrZGF5XVxuICAgIH1cblxuICAgIHVwZGF0ZVJSdWxlKHtcbiAgICAgIGJ5d2Vla2RheTogbmV3V2Vla2RheXMubGVuZ3RoID4gMCA/IG5ld1dlZWtkYXlzIDogdW5kZWZpbmVkLFxuICAgIH0pXG4gIH1cblxuICAvLyBIZWxwZXIgdG8gZGV0ZXJtaW5lIGVuZCB0eXBlIGZyb20gY3VycmVudCBvcHRpb25zXG4gIGNvbnN0IGdldEVuZFR5cGUgPSAoKTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnID0+IHtcbiAgICBpZiAocnJ1bGVPcHRpb25zPy51bnRpbCkge1xuICAgICAgcmV0dXJuICd1bnRpbCdcbiAgICB9XG4gICAgaWYgKHJydWxlT3B0aW9ucz8uY291bnQpIHtcbiAgICAgIHJldHVybiAnY291bnQnXG4gICAgfVxuICAgIHJldHVybiAnbmV2ZXInXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDYXJkIGRhdGEtdGVzdGlkPVwicmVjdXJyZW5jZS1lZGl0b3JcIj5cbiAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInBiLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIGlkPVwicmVjdXJyaW5nXCJcbiAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dSZWN1cnJlbmNlfVxuICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXtoYW5kbGVSZWN1cnJlbmNlVG9nZ2xlfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1JlY3VycmVuY2UgJiYgdmFsdWUgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICB7Z2V0UlJ1bGVEZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICApfVxuICAgICAgPC9DYXJkSGVhZGVyPlxuXG4gICAgICB7c2hvd1JlY3VycmVuY2UgJiYgKFxuICAgICAgICA8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICB7LyogRnJlcXVlbmN5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZnJlcXVlbmN5XCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAge3QoJ3JlcGVhdHMnKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtnZXRGcmVxdWVuY3lTdHJpbmcocnJ1bGVPcHRpb25zPy5mcmVxID8/IFJSdWxlLkRBSUxZKX1cbiAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e2hhbmRsZUZyZXF1ZW5jeUNoYW5nZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8U2VsZWN0VHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICBpZD1cImZyZXF1ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOFwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RWYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgPC9TZWxlY3RUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgPFNlbGVjdENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiREFJTFlcIj57dCgnZGFpbHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiV0VFS0xZXCI+e3QoJ3dlZWtseScpfTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJNT05USExZXCI+e3QoJ21vbnRobHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiWUVBUkxZXCI+e3QoJ3llYXJseScpfTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Q29udGVudD5cbiAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImludGVydmFsXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAge3QoJ2V2ZXJ5Jyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtycnVsZU9wdGlvbnM/LmludGVydmFsIHx8IDF9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW50ZXJ2YWxDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLThcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBXZWVrbHkgRGF5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIHtycnVsZU9wdGlvbnM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgncmVwZWF0T24nKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAge1dFRUtfREFZUy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl3ZWVrZGF5QXJyYXkgPSBBcnJheS5pc0FycmF5KFxuICAgICAgICAgICAgICAgICAgICAgIHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA/IHJydWxlT3B0aW9ucy5ieXdlZWtkYXlcbiAgICAgICAgICAgICAgICAgICAgICA6IHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtycnVsZU9wdGlvbnMuYnl3ZWVrZGF5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnl3ZWVrZGF5QXJyYXkuaW5jbHVkZXMoZGF5LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRGF5VG9nZ2xlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF5LnNob3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIEVuZCBDb25kaXRpb24gKi99XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdlbmRzJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbXQtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ25ldmVyJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibmV2ZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZnRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ2NvdW50J31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCdjb3VudCcpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiYWZ0ZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdhZnRlcicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDb3VudENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTYgdy0xNiB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNvdW50LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ29jY3VycmVuY2VzJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBpZD1cIm9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Z2V0RW5kVHlwZSgpID09PSAndW50aWwnfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eygpID0+IGhhbmRsZUVuZFR5cGVDaGFuZ2UoJ3VudGlsJyl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJvblwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ29uJyl9XG4gICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAge2dldEVuZFR5cGUoKSA9PT0gJ3VudGlsJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17cnJ1bGVPcHRpb25zPy51bnRpbH1cbiAgICAgICAgICAgICAgICAgICAgICBzZXREYXRlPXtoYW5kbGVFbmREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgKX1cbiAgICA8L0NhcmQ+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dEZXNjcmlwdGlvbixcbiAgRGlhbG9nRm9vdGVyLFxuICBEaWFsb2dIZWFkZXIsXG4gIERpYWxvZ1RpdGxlLFxuICBCdXR0b24sXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG4gIGlzT3BlbjogYm9vbGVhblxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG4gIG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG4gIG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG4gIGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuICBpc09wZW4sXG4gIG9uQ2xvc2UsXG4gIG9uQ29uZmlybSxcbiAgb3BlcmF0aW9uVHlwZSxcbiAgZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgb25Db25maXJtKHNjb3BlKVxuICAgIG9uQ2xvc2UoKVxuICB9XG5cbiAgY29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2lzT3Blbn0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgIDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cbiAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICAgIDxEaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuICAgICAgICAgICAge2lzRWRpdFxuICAgICAgICAgICAgICA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcbiAgICAgICAgICAgICAgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG4gICAgICAgICAgPC9EaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgPC9EaWFsb2dIZWFkZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICB7dCgnY2FuY2VsJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvRGlhbG9nRm9vdGVyPlxuICAgICAgPC9EaWFsb2dDb250ZW50PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcbiAgY29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgW2RpYWxvZ1N0YXRlLCBzZXREaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7XG4gICAgaXNPcGVuOiBib29sZWFuXG4gICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcbiAgICBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgICB1cGRhdGVzPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICAgIG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuICB9Pih7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgZXZlbnQ6IG51bGwsXG4gIH0pXG5cbiAgY29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcbiAgICAgIHNldERpYWxvZ1N0YXRlKHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG4gIClcblxuICBjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG4gIClcblxuICBjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICBpc09wZW46IGZhbHNlLFxuICAgICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgICAgZXZlbnQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuICAgIChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgaWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuICAgICAgICBkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG4gICAgICB9XG4gICAgICBjbG9zZURpYWxvZygpXG4gICAgICAvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG4gICAgICBvbkNvbXBsZXRlPy4oKVxuICAgIH0sXG4gICAgW2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cbiAgKVxuXG4gIHJldHVybiB7XG4gICAgZGlhbG9nU3RhdGUsXG4gICAgb3BlbkVkaXREaWFsb2csXG4gICAgb3BlbkRlbGV0ZURpYWxvZyxcbiAgICBjbG9zZURpYWxvZyxcbiAgICBoYW5kbGVDb25maXJtLFxuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vKipcbiAqIEV4cG9ydCBjYWxlbmRhciBldmVudHMgdG8gaUNhbGVuZGFyICguaWNhbCkgZm9ybWF0XG4gKiBGdWxseSBSRkMgNTU0NSBjb21wbGlhbnQgaUNhbGVuZGFyIGdlbmVyYXRpb25cbiAqL1xuXG4vKipcbiAqIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaUNhbGVuZGFyIHRleHQgZmllbGRzXG4gKi9cbmNvbnN0IGVzY2FwZUlDYWxUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJ1xcXFwnLCAnXFxcXFxcXFwnKSAvLyBFc2NhcGUgYmFja3NsYXNoZXNcbiAgICAucmVwbGFjZUFsbCgnOycsICdcXFxcOycpIC8vIEVzY2FwZSBzZW1pY29sb25zXG4gICAgLnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKSAvLyBFc2NhcGUgY29tbWFzXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICdcXFxcbicpIC8vIEVzY2FwZSBuZXdsaW5lc1xuICAgIC5yZXBsYWNlQWxsKCdcXHInLCAnJykgLy8gUmVtb3ZlIGNhcnJpYWdlIHJldHVybnNcbn1cblxuLyoqXG4gKiBGb3JtYXQgZGF0ZSBmb3IgaUNhbGVuZGFyIGZvcm1hdCAoWVlZWU1NRERUSEhNTVNTWiBmb3IgVVRDKVxuICovXG5jb25zdCBmb3JtYXRJQ2FsRGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgYWxsRGF5ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoYWxsRGF5KSB7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXG4gIH1cbiAgcmV0dXJuIGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgVUlEIGZvciBhbiBldmVudCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gKi9cbmNvbnN0IGdlbmVyYXRlVUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcbiAgaWYgKGV2ZW50LnVpZCkge1xuICAgIHJldHVybiBldmVudC51aWRcbiAgfVxuICByZXR1cm4gYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG4vKipcbiAqIENvbnZlcnQgUlJ1bGVPcHRpb25zIHRvIGlDYWxlbmRhciBSUlVMRSBzdHJpbmdcbiAqL1xuY29uc3QgZm9ybWF0UlJ1bGUgPSAocnJ1bGVPcHRpb25zOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2Ugd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNhc3RpbmdcbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKFxuICAgICAgcnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG4gICAgKVxuICAgIGNvbnN0IHJydWxlU3RyaW5nID0gcnVsZS50b1N0cmluZygpXG4gICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBSUlVMRSBwYXJ0IChyZW1vdmUgRFRTVEFSVCBpZiBwcmVzZW50KVxuICAgIGNvbnN0IHJydWxlUGFydCA9IHJydWxlU3RyaW5nXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKCdSUlVMRTonKSlcbiAgICByZXR1cm4gcnJ1bGVQYXJ0IHx8ICcnXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIHNpbmdsZSBDYWxlbmRhckV2ZW50IHRvIGlDYWxlbmRhciBWRVZFTlQgc3RyaW5nXG4gKi9cbmNvbnN0IGV2ZW50VG9JQ2FsRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZFVkVOVCcpXG5cbiAgLy8gVUlEIChyZXF1aXJlZClcbiAgbGluZXMucHVzaChgVUlEOiR7Z2VuZXJhdGVVSUQoZXZlbnQpfWApXG5cbiAgLy8gRFRTVEFSVCAocmVxdWlyZWQpXG4gIGNvbnN0IGR0c3RhcnQgPSBmb3JtYXRJQ2FsRGF0ZShldmVudC5zdGFydCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRTVEFSVDtWQUxVRT1EQVRFOiR7ZHRzdGFydH1gKVxuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goYERUU1RBUlQ6JHtkdHN0YXJ0fWApXG4gIH1cblxuICAvLyBEVEVORCAocmVxdWlyZWQgZm9yIGV2ZW50cyB3aXRoIGR1cmF0aW9uKVxuICBjb25zdCBkdGVuZCA9IGZvcm1hdElDYWxEYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ7VkFMVUU9REFURToke2R0ZW5kfWApXG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ6JHtkdGVuZH1gKVxuICB9XG5cbiAgLy8gU1VNTUFSWSAodGl0bGUpXG4gIGxpbmVzLnB1c2goYFNVTU1BUlk6JHtlc2NhcGVJQ2FsVGV4dChldmVudC50aXRsZSl9YClcblxuICAvLyBERVNDUklQVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgIGxpbmVzLnB1c2goYERFU0NSSVBUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQuZGVzY3JpcHRpb24pfWApXG4gIH1cblxuICAvLyBMT0NBVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5sb2NhdGlvbikge1xuICAgIGxpbmVzLnB1c2goYExPQ0FUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQubG9jYXRpb24pfWApXG4gIH1cblxuICAvLyBSUlVMRSAocmVjdXJyZW5jZSBydWxlKVxuICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICBjb25zdCBycnVsZVN0cmluZyA9IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKVxuICAgIGlmIChycnVsZVN0cmluZykge1xuICAgICAgbGluZXMucHVzaChycnVsZVN0cmluZylcbiAgICB9XG4gIH1cblxuICAvLyBFWERBVEUgKGV4Y2VwdGlvbiBkYXRlcylcbiAgaWYgKGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXNcbiAgICAgIC5tYXAoKGRhdGVTdHIpID0+IGZvcm1hdElDYWxEYXRlKGRheWpzKGRhdGVTdHIpLCBldmVudC5hbGxEYXkpKVxuICAgICAgLmpvaW4oJywnKVxuICAgIGxpbmVzLnB1c2goYEVYREFURToke2V4ZGF0ZXN9YClcbiAgfVxuXG4gIC8vIFJFQ1VSUkVOQ0UtSUQgKGZvciBtb2RpZmllZCBpbnN0YW5jZXMpXG4gIGlmIChldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICBjb25zdCByZWN1cnJlbmNlSWQgPSBmb3JtYXRJQ2FsRGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG4gICAgbGluZXMucHVzaChgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gKVxuICB9XG5cbiAgLy8gRFRTVEFNUCAocmVxdWlyZWQgLSB3aGVuIHRoaXMgd2FzIGNyZWF0ZWQvbW9kaWZpZWQpXG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG4gIGxpbmVzLnB1c2goYERUU1RBTVA6JHtub3d9YClcblxuICAvLyBDUkVBVEVEICh3aGVuIGV2ZW50IHdhcyBjcmVhdGVkKVxuICBsaW5lcy5wdXNoKGBDUkVBVEVEOiR7bm93fWApXG5cbiAgLy8gTEFTVC1NT0RJRklFRCAod2hlbiBldmVudCB3YXMgbGFzdCBtb2RpZmllZClcbiAgbGluZXMucHVzaChgTEFTVC1NT0RJRklFRDoke25vd31gKVxuXG4gIC8vIFNUQVRVUyAoZGVmYXVsdCB0byBDT05GSVJNRUQpXG4gIGxpbmVzLnB1c2goJ1NUQVRVUzpDT05GSVJNRUQnKVxuXG4gIC8vIFNFUVVFTkNFICh2ZXJzaW9uIG51bWJlciwgZGVmYXVsdCB0byAwKVxuICBsaW5lcy5wdXNoKCdTRVFVRU5DRTowJylcblxuICAvLyBUUkFOU1AgKHRyYW5zcGFyZW5jeSAtIE9QQVFVRSBmb3IgYnVzeSB0aW1lKVxuICBsaW5lcy5wdXNoKCdUUkFOU1A6T1BBUVVFJylcblxuICBsaW5lcy5wdXNoKCdFTkQ6VkVWRU5UJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICogLSBJbmNsdWRlIGJhc2UgcmVjdXJyaW5nIGV2ZW50cyAod2l0aCBSUlVMRSlcbiAqIC0gSW5jbHVkZSBtb2RpZmllZCBpbnN0YW5jZXMgKHdpdGggcmVjdXJyZW5jZUlkKVxuICogLSBJbmNsdWRlIG5vbi1yZWN1cnJpbmcgZXZlbnRzXG4gKiAtIEVYQ0xVREUgZ2VuZXJhdGVkIHJlY3VycmluZyBpbnN0YW5jZXMgKG5vIHJydWxlLCBubyByZWN1cnJlbmNlSWQpXG4gKi9cbmNvbnN0IGZpbHRlckV2ZW50c0ZvckV4cG9ydCA9IChldmVudHM6IENhbGVuZGFyRXZlbnRbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gIGNvbnN0IGV4cG9ydEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cbiAgY29uc3QgcHJvY2Vzc2VkVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAvLyBHZXQgb3IgZ2VuZXJhdGUgVUlEIGZvciB0aGUgZXZlbnRcbiAgICBjb25zdCBldmVudFVJRCA9IGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAvLyBDYXNlIDE6IEJhc2UgcmVjdXJyaW5nIGV2ZW50IChoYXMgUlJVTEUsIG5vIHJlY3VycmVuY2VJZClcbiAgICBpZiAoZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgICAgZXhwb3J0RXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICBwcm9jZXNzZWRVSURzLmFkZChldmVudFVJRClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAyOiBNb2RpZmllZCByZWN1cnJpbmcgaW5zdGFuY2UgKGhhcyByZWN1cnJlbmNlSWQsIG5vIFJSVUxFKVxuICAgIGlmIChldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlKSB7XG4gICAgICBleHBvcnRFdmVudHMucHVzaChldmVudClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAzOiBOb24tcmVjdXJyaW5nIGV2ZW50IChubyBSUlVMRSwgbm8gcmVjdXJyZW5jZUlkLCBubyBVSUQgcGF0dGVybilcbiAgICBpZiAoIWV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBnZW5lcmF0ZWQgaW5zdGFuY2UgYnkgVUlEIHBhdHRlcm5cbiAgICAgIGNvbnN0IGlzR2VuZXJhdGVkSW5zdGFuY2UgPSBwcm9jZXNzZWRVSURzLmhhcyhldmVudFVJRClcblxuICAgICAgaWYgKCFpc0dlbmVyYXRlZEluc3RhbmNlKSB7XG4gICAgICAgIGV4cG9ydEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgfVxuICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgaW5zdGFuY2VzIC0gdGhleSdsbCBiZSByZWNyZWF0ZWQgYnkgUlJVTEVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0RXZlbnRzXG59XG5cbi8qKlxuICogRXhwb3J0IGV2ZW50cyB0byBpQ2FsZW5kYXIgZm9ybWF0XG4gKi9cbmV4cG9ydCBjb25zdCBleHBvcnRUb0lDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgLy8gQ2FsZW5kYXIgaGVhZGVyXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZDQUxFTkRBUicpXG4gIGxpbmVzLnB1c2goJ1ZFUlNJT046Mi4wJylcbiAgbGluZXMucHVzaCgnUFJPRElEOi0vL2lsYW15Ly9pbGFteSBDYWxlbmRhci8vRU4nKVxuICBsaW5lcy5wdXNoKCdDQUxTQ0FMRTpHUkVHT1JJQU4nKVxuICBsaW5lcy5wdXNoKCdNRVRIT0Q6UFVCTElTSCcpXG4gIGxpbmVzLnB1c2goYFgtV1ItQ0FMTkFNRToke2VzY2FwZUlDYWxUZXh0KGNhbGVuZGFyTmFtZSl9YClcbiAgbGluZXMucHVzaChgWC1XUi1DQUxERVNDOiR7ZXNjYXBlSUNhbFRleHQoYEV4cG9ydGVkIGZyb20gJHtjYWxlbmRhck5hbWV9YCl9YClcblxuICAvLyBBZGQgdGltZXpvbmUgaW5mb3JtYXRpb24gKFVUQylcbiAgbGluZXMucHVzaCgnQkVHSU46VlRJTUVaT05FJylcbiAgbGluZXMucHVzaCgnVFpJRDpVVEMnKVxuICBsaW5lcy5wdXNoKCdCRUdJTjpTVEFOREFSRCcpXG4gIGxpbmVzLnB1c2goJ0RUU1RBUlQ6MTk3MDAxMDFUMDAwMDAwJylcbiAgbGluZXMucHVzaCgnVFpOQU1FOlVUQycpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VURlJPTTorMDAwMCcpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VUVE86KzAwMDAnKVxuICBsaW5lcy5wdXNoKCdFTkQ6U1RBTkRBUkQnKVxuICBsaW5lcy5wdXNoKCdFTkQ6VlRJTUVaT05FJylcblxuICAvLyBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICBjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGZpbHRlckV2ZW50c0ZvckV4cG9ydChldmVudHMpXG5cbiAgLy8gQWRkIGVhY2ggZmlsdGVyZWQgZXZlbnRcbiAgZmlsdGVyZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBsaW5lcy5wdXNoKGV2ZW50VG9JQ2FsRXZlbnQoZXZlbnQpKVxuICB9KVxuXG4gIC8vIENhbGVuZGFyIGZvb3RlclxuICBsaW5lcy5wdXNoKCdFTkQ6VkNBTEVOREFSJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBEb3dubG9hZCBpQ2FsZW5kYXIgZmlsZSB0byB1c2VyJ3MgZGV2aWNlXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZElDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGZpbGVuYW1lID0gJ2NhbGVuZGFyLmljcycsXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHZvaWQgPT4ge1xuICBjb25zdCBpY2FsQ29udGVudCA9IGV4cG9ydFRvSUNhbGVuZGFyKGV2ZW50cywgY2FsZW5kYXJOYW1lKVxuXG4gIC8vIENyZWF0ZSBibG9iIGFuZCBkb3dubG9hZFxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ljYWxDb250ZW50XSwge1xuICAgIHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuICB9KVxuXG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICBsaW5rLmhyZWYgPSB1cmxcbiAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJykgPyBmaWxlbmFtZSA6IGAke2ZpbGVuYW1lfS5pY3NgXG5cbiAgLy8gVHJpZ2dlciBkb3dubG9hZFxuICBkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuICBsaW5rLmNsaWNrKClcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuXG4gIC8vIENsZWFuIHVwXG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBkb3dubG9hZElDYWxlbmRhciB9IGZyb20gJ0AvbGliL2V4cG9ydC1pY2FsJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIHNldFZpZXcsXG4gICAgbmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kLFxuICAgIHRvZGF5LFxuICAgIG9wZW5FdmVudEZvcm0sXG4gICAgaGVhZGVyQ29tcG9uZW50LFxuICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICByYXdFdmVudHMsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIFN0YXRlIGZvciBtb2JpbGUgbWVudSBwb3BvdmVyXG4gIGNvbnN0IFttb2JpbGVQb3BvdmVyT3Blbiwgc2V0TW9iaWxlUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgLy8gSGFuZGxlIHZpZXcgY2hhbmdlIHdpdGggb3B0aW9uYWwgcG9wb3ZlciBjbG9zaW5nXG4gIGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSAoXG4gICAgbmV3VmlldzogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInLFxuICAgIGNsb3NlUG9wb3ZlciA9IGZhbHNlXG4gICkgPT4ge1xuICAgIHNldFZpZXcobmV3VmlldylcbiAgICBpZiAoY2xvc2VQb3BvdmVyKSB7XG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgaUNhbGVuZGFyIGV4cG9ydFxuICBjb25zdCBoYW5kbGVFeHBvcnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBgaWxhbXktY2FsZW5kYXItJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXX0uaWNzYFxuICAgIGRvd25sb2FkSUNhbGVuZGFyKHJhd0V2ZW50cywgZmlsZW5hbWUsICdpbGFteSBDYWxlbmRhcicpXG4gICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gIH0sIFtyYXdFdmVudHNdKVxuXG4gIC8vIENhbGxiYWNrIGZvciBuYXZpZ2F0aW9uIHRoYXQgYWxzbyBjbG9zZXMgdGhlIG1vYmlsZSBwb3BvdmVyXG4gIGNvbnN0IGhhbmRsZU5hdmlnYXRpb24gPSB7XG4gICAgdG9kYXk6ICgpID0+IHtcbiAgICAgIHRvZGF5KClcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH0sXG4gICAgcHJldmlvdXM6ICgpID0+IHtcbiAgICAgIHByZXZQZXJpb2QoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgICBuZXh0OiAoKSA9PiB7XG4gICAgICBuZXh0UGVyaW9kKClcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH0sXG4gIH1cblxuICBjb25zdCBOZXdFdmVudEJ1dHRvbiA9IHVzZUNhbGxiYWNrKFxuICAgICgpID0+IChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9wZW5FdmVudEZvcm0oKX1cbiAgICAgICAgICB2YXJpYW50PVwiZGVmYXVsdFwiXG4gICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gQDR4bDppbmxpbmVcIj5OZXc8L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKSxcbiAgICBbb3BlbkV2ZW50Rm9ybV1cbiAgKVxuXG4gIGlmIChoZWFkZXJDb21wb25lbnQpIHtcbiAgICAvLyBSZW5kZXIgY3VzdG9tIGhlYWRlciBjb21wb25lbnQgaWYgcHJvdmlkZWRcbiAgICByZXR1cm4gaGVhZGVyQ29tcG9uZW50XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7LyogQ2FsZW5kYXIgSGVhZGVyIHdpdGggZ3JpZCBsYXlvdXQgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIvYmFzZS1oZWFkZXIgdy1mdWxsXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgYm9yZGVyLWInLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgaGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHsvKiBUaXRsZSBhcmVhIC0gTGVmdCBzZWN0aW9uICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgPENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgIDxUaXRsZUNvbnRlbnQgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBOZXcgZXZlbnQgYnV0dG9uIC0gTW9iaWxlICYgRGVza3RvcCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICB7LyogRGVza3RvcCBjb250cm9scyAtIGNlbnRyYWxpemVkICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRWaWV3fVxuICAgICAgICAgICAgICAgIG9uVG9kYXk9e3RvZGF5fVxuICAgICAgICAgICAgICAgIG9uTmV4dD17bmV4dFBlcmlvZH1cbiAgICAgICAgICAgICAgICBvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG4gICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBEZXNrdG9wICovfVxuICAgICAgICAgICAgICA8TmV3RXZlbnRCdXR0b24gLz5cblxuICAgICAgICAgICAgICB7LyogRXhwb3J0IGJ1dHRvbiAtIERlc2t0b3AgKi99XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPkV4cG9ydDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIE1vYmlsZSBuYXZpZ2F0aW9uIG1lbnUgYnV0dG9uIC0gUmlnaHQgYWxpZ25lZCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuICAgICAgICAgICAgICB7LyogTmV3IGV2ZW50IGJ1dHRvbiAtIE1vYmlsZSAqL31cbiAgICAgICAgICAgICAgPE5ld0V2ZW50QnV0dG9uIC8+XG5cbiAgICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICBvcGVuPXttb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZVBvcG92ZXJPcGVufVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwibWItMSB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVmlldyAmIE5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmlldykgPT4gaGFuZGxlVmlld0NoYW5nZShuZXdWaWV3LCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvZGF5PXtoYW5kbGVOYXZpZ2F0aW9uLnRvZGF5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTmV4dD17aGFuZGxlTmF2aWdhdGlvbi5uZXh0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uUHJldmlvdXM9e2hhbmRsZU5hdmlnYXRpb24ucHJldmlvdXN9XG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gTW9iaWxlICovfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgQ2FsZW5kYXIgKC5pY3MpXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgICAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyXG4iLAogICAgImltcG9ydCB7XG4gIEJ1dHRvbixcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbi8vIE1vbnRocyBhcnJheSBpcyBub3cgY3JlYXRlZCBkeW5hbWljYWxseSBpbiB0aGUgY29tcG9uZW50IHVzaW5nIHRyYW5zbGF0aW9uc1xuXG4vLyBBbmltYXRpb24gdmFyaWFudHMgZm9yIG51bWJlciB0cmFuc2l0aW9uc1xuY29uc3QgYW5pbWF0aW9uVmFyaWFudHMgPSB7XG4gIGluaXRpYWw6IHsgb3BhY2l0eTogMCwgeTogMTAgfSxcbiAgYW5pbWF0ZTogeyBvcGFjaXR5OiAxLCB5OiAwIH0sXG4gIGV4aXQ6IHsgb3BhY2l0eTogMCwgeTogLTEwIH0sXG59XG5cbmNvbnN0IFRpdGxlQ29udGVudCA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgdmlldywgc2V0Q3VycmVudERhdGUsIHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gQ3JlYXRlIG1vbnRocyBhcnJheSB1c2luZyB0cmFuc2xhdGlvbnNcbiAgY29uc3QgbW9udGhzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBbXG4gICAgICB0KCdqYW51YXJ5JyksXG4gICAgICB0KCdmZWJydWFyeScpLFxuICAgICAgdCgnbWFyY2gnKSxcbiAgICAgIHQoJ2FwcmlsJyksXG4gICAgICB0KCdtYXknKSxcbiAgICAgIHQoJ2p1bmUnKSxcbiAgICAgIHQoJ2p1bHknKSxcbiAgICAgIHQoJ2F1Z3VzdCcpLFxuICAgICAgdCgnc2VwdGVtYmVyJyksXG4gICAgICB0KCdvY3RvYmVyJyksXG4gICAgICB0KCdub3ZlbWJlcicpLFxuICAgICAgdCgnZGVjZW1iZXInKSxcbiAgICBdLFxuICAgIFt0XVxuICApXG5cbiAgLy8gU3RhdGUgZm9yIG1vYmlsZSBtZW51IGFuZCBwb3BvdmVyc1xuICBjb25zdCBbbW9udGhQb3BvdmVyT3Blbiwgc2V0TW9udGhQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3llYXJQb3BvdmVyT3Blbiwgc2V0WWVhclBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbd2Vla1BvcG92ZXJPcGVuLCBzZXRXZWVrUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtkYXlQb3BvdmVyT3Blbiwgc2V0RGF5UG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcbiAgY29uc3QgeWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoXywgaSkgPT4gY3VycmVudFllYXIgLSA1ICsgaSlcblxuICAvLyBIYW5kbGUgbW9udGggYW5kIHllYXIgc2VsZWN0aW9uXG4gIGNvbnN0IGhhbmRsZU1vbnRoQ2hhbmdlID0gKG1vbnRoOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUubW9udGgobW9udGgpXG4gICAgc2V0Q3VycmVudERhdGUobmV3RGF0ZSlcbiAgICBzZXRNb250aFBvcG92ZXJPcGVuKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlWWVhckNoYW5nZSA9ICh5ZWFyOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUueWVhcih5ZWFyKVxuICAgIHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG4gICAgc2V0WWVhclBvcG92ZXJPcGVuKGZhbHNlKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3ZpZXcgIT09ICd5ZWFyJyAmJiAoXG4gICAgICAgIDxQb3BvdmVyIG9wZW49e21vbnRoUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0TW9udGhQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2Btb250aC0ke2N1cnJlbnREYXRlLm1vbnRoKCl9YH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICAgIGV4aXQ9XCJleGl0XCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTScpfVxuICAgICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAge21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17bW9udGh9XG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb250aENoYW5nZShpbmRleCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge21vbnRofVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG5cbiAgICAgIDxQb3BvdmVyIG9wZW49e3llYXJQb3BvdmVyT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXRZZWFyUG9wb3Zlck9wZW59PlxuICAgICAgICA8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICBrZXk9e2B5ZWFyLSR7Y3VycmVudERhdGUueWVhcigpfWB9XG4gICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyl9XG4gICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctMjQgcC0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIHt5ZWFycy5tYXAoKHllYXIpID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17eWVhcn1cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS55ZWFyKCkgPT09IHllYXIgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVZZWFyQ2hhbmdlKHllYXIpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3llYXJ9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICA8L1BvcG92ZXI+XG5cbiAgICAgIHsvKiBEaXNwbGF5IGFkZGl0aW9uYWwgdmlldy1zcGVjaWZpYyBpbmZvcm1hdGlvbiAqL31cbiAgICAgIHt2aWV3ID09PSAnd2VlaycgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXt3ZWVrUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0V2Vla1BvcG92ZXJPcGVufT5cbiAgICAgICAgICA8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICAgIGtleT17YHdlZWstcmFuZ2UtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgICAgYW5pbWF0ZT1cImFuaW1hdGVcIlxuICAgICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7YCR7Y3VycmVudERhdGVcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KCdNTU0gRCcpfSAtICR7Y3VycmVudERhdGVcbiAgICAgICAgICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgnTU1NIEQnKX1gfVxuICAgICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwibWwtMSBoLTMgdy0zIG9wYWNpdHktNzBcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy01NiBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgIHsvKiBTaG93IDcgd2Vla3MgKDMgcGFzdCwgY3VycmVudCwgMyBmdXR1cmUpICovfVxuICAgICAgICAgICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gd2Vla0RhdGUuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kT2ZXZWVrID0gd2Vla0RhdGUuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudFdlZWsgPSB3ZWVrRGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICd3ZWVrJylcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17c3RhcnRPZldlZWsuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50RGF0ZShzdGFydE9mV2VlaylcbiAgICAgICAgICAgICAgICAgICAgICBzZXRXZWVrUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntgJHtzdGFydE9mV2Vlay5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnTU1NIEQnXG4gICAgICAgICAgICAgICAgICAgICAgKX0gLSAke2VuZE9mV2Vlay5mb3JtYXQoJ0QnKX1gfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7c3RhcnRPZldlZWsubW9udGgoKSAhPT0gZW5kT2ZXZWVrLm1vbnRoKCkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBvcGFjaXR5LTcwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtgJHtzdGFydE9mV2Vlay5mb3JtYXQoJ01NTScpfS0ke2VuZE9mV2Vlay5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01NTSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG4gICAgICB7dmlldyA9PT0gJ2RheScgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXtkYXlQb3BvdmVyT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXREYXlQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2BkYXktaW5mby0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPVwiaW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50cz17YW5pbWF0aW9uVmFyaWFudHN9XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIEQnKX1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cIm1sLTEgaC0zIHctMyBvcGFjaXR5LTcwXCIgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNTYgcC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgICAgICB7LyogU2hvdyBhbGwgZGF5cyBvZiB0aGUgY3VycmVudCBtb250aCAqL31cbiAgICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGZpcnN0IGRheSBvZiBtb250aCBhbmQgbGFzdCBkYXkgb2YgbW9udGhcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cbiAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhcnJheSBvZiBkYXlzIGluIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZNb250aC5kYXRlKGkgKyAxKSAvLyBpICsgMSBiZWNhdXNlIGRheXMgc3RhcnQgYXQgMVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50RGF5ID0gZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtkYXlEYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnREYXRlKGRheURhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXREYXlQb3BvdmVyT3BlbihmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57ZGF5RGF0ZS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtc20gcHgtMSEgdGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCd0b2RheScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KSgpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUNvbnRlbnRcbiIsCiAgICAiaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuaW50ZXJmYWNlIFZpZXdDb250cm9sc1Byb3BzIHtcbiAgY3VycmVudFZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJ1xuICBvbkNoYW5nZTogKHZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4gdm9pZFxuICBvblRvZGF5PzogKCkgPT4gdm9pZFxuICBvbk5leHQ/OiAoKSA9PiB2b2lkXG4gIG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG4gIHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcbiAgc2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcbiAgY3VycmVudFZpZXcsXG4gIG9uQ2hhbmdlLFxuICB2YXJpYW50ID0gJ2RlZmF1bHQnLFxuICBzaXplID0gJ3NtJyxcbiAgY2xhc3NOYW1lLFxuICBvblRvZGF5LFxuICBvbk5leHQsXG4gIG9uUHJldmlvdXMsXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgaXNHcmlkID0gdmFyaWFudCA9PT0gJ2dyaWQnXG5cbiAgLy8gRXh0cmFjdCBjb21tb24gYnV0dG9uIGNsYXNzTmFtZSBsb2dpYyB0byBhIGZ1bmN0aW9uXG4gIGNvbnN0IGdldEJ1dHRvbkNsYXNzTmFtZSA9ICh2aWV3VHlwZTogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInKSA9PiB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgLy8gQmFzZSB3aWR0aCBmb3IgZ3JpZCBsYXlvdXRcbiAgICAgIGlzR3JpZCA/ICd3LWZ1bGwnIDogJycsXG4gICAgICAvLyBBY3RpdmUgdmlldyBzdHlsaW5nXG4gICAgICBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgJiYgJ2JnLXByaW1hcnkvODAnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgZ2V0QnRuVmFyaWFudCA9ICh2aWV3VHlwZTogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInKSA9PiB7XG4gICAgcmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG4gICAgICAgIDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG4gICAgICAgIDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICA8L0J1dHRvbj5cblxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnZGF5Jyl9XG4gICAgICAgIHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQoJ2RheScpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgnZGF5Jyl9XG4gICAgICA+XG4gICAgICAgIHt0KCdkYXknKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnd2VlaycpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCd3ZWVrJyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCd3ZWVrJyl9XG4gICAgICA+XG4gICAgICAgIHt0KCd3ZWVrJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ21vbnRoJyl9XG4gICAgICAgIHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQoJ21vbnRoJyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCdtb250aCcpfVxuICAgICAgPlxuICAgICAgICB7dCgnbW9udGgnKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgneWVhcicpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCd5ZWFyJyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCd5ZWFyJyl9XG4gICAgICA+XG4gICAgICAgIHt0KCd5ZWFyJyl9XG4gICAgICA8L0J1dHRvbj5cblxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICB7dCgndG9kYXknKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuXG5jb25zdCBZZWFyVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHNlbGVjdERhdGUsIGV2ZW50cywgc2V0VmlldywgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCB0IH0gPVxuICAgIHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcblxuICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiAxMiBtb250aHMgZm9yIHRoZSBjdXJyZW50IHllYXJcbiAgY29uc3QgbW9udGhzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIGkpID0+IHtcbiAgICBjb25zdCBtb250aERhdGUgPSBkYXlqcygpLnllYXIoeWVhcikubW9udGgoaSkuc3RhcnRPZignbW9udGgnKVxuICAgIHJldHVybiB7XG4gICAgICBkYXRlOiBtb250aERhdGUsXG4gICAgICBuYW1lOiBtb250aERhdGUuZm9ybWF0KCdNTU1NJyksXG4gICAgICBkYXlzSW5Nb250aDogbW9udGhEYXRlLmRheXNJbk1vbnRoKCksXG4gICAgICBmaXJzdERheU9mTW9udGg6IG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLmRheSgpLCAvLyAwLTYsIDAgaXMgU3VuZGF5XG4gICAgfVxuICB9KVxuXG4gIC8vIENhbGN1bGF0ZSBldmVudHMgZm9yIGVhY2ggbW9udGhcbiAgY29uc3QgbW9udGhzV2l0aEV2ZW50Q291bnQgPSBtb250aHMubWFwKChtb250aCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50c0luTW9udGggPSBldmVudHMuZmlsdGVyKFxuICAgICAgKGV2ZW50KSA9PlxuICAgICAgICBldmVudC5zdGFydC55ZWFyKCkgPT09IHllYXIgJiZcbiAgICAgICAgZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGguZGF0ZS5tb250aCgpXG4gICAgKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1vbnRoLFxuICAgICAgZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG4gICAgfVxuICB9KVxuXG4gIC8vIEhhbmRsZSBtb250aCBjbGljayB0byBuYXZpZ2F0ZSB0byBtb250aCB2aWV3XG4gIGNvbnN0IGhhbmRsZU1vbnRoQ2xpY2sgPSAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICBzZWxlY3REYXRlKGRhdGUpXG4gICAgc2V0VmlldygnbW9udGgnKVxuICB9XG5cbiAgLy8gSGFuZGxlIGRheSBjbGljayB3aXRoaW4gdGhlIG1pbmkgY2FsZW5kYXJcbiAgY29uc3QgaGFuZGxlRGF5Q2xpY2sgPSAoZGF0ZTogZGF5anMuRGF5anMsIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgLy8gUHJldmVudCB0cmlnZ2VyaW5nIHRoZSBtb250aCBjbGlja1xuICAgIHNlbGVjdERhdGUoZGF0ZSlcbiAgICBzZXRWaWV3KCdkYXknKSAvLyBOYXZpZ2F0ZSBkaXJlY3RseSB0byBkYXkgdmlldyB3aGVuIGNsaWNraW5nIG9uIGEgc3BlY2lmaWMgZGF5XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBkYXlzIGZvciBtaW5pIGNhbGVuZGFyIGluIGVhY2ggbW9udGhcbiAgY29uc3QgcmVuZGVyTWluaUNhbGVuZGFyID0gKG1vbnRoOiAodHlwZW9mIG1vbnRoc1dpdGhFdmVudENvdW50KVswXSkgPT4ge1xuICAgIC8vIEdldCB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aCdzIGNhbGVuZGFyICh3aGljaCBjb3VsZCBiZSBpbiB0aGUgcHJldmlvdXMgbW9udGgpXG4gICAgY29uc3QgZmlyc3REYXlPZkNhbGVuZGFyID0gbW9udGguZGF0ZS5zdGFydE9mKCdtb250aCcpLnN0YXJ0T2YoJ3dlZWsnKVxuXG4gICAgLy8gQ3JlYXRlIDQyIGRheXMgKDYgcm93cyBvZiA3IGRheXMpIGZvciBjb25zaXN0ZW5jeVxuICAgIGNvbnN0IGRheXNBcnJheSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDQyIH0sIChfLCBpKSA9PiB7XG4gICAgICBjb25zdCBkYXkgPSBmaXJzdERheU9mQ2FsZW5kYXIuYWRkKGksICdkYXknKVxuICAgICAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gbW9udGguZGF0ZS5tb250aCgpXG4gICAgICBjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgICAgIGNvbnN0IGlzQ3VycmVudERhdGUgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JylcblxuICAgICAgLy8gR2V0IGV2ZW50cyBmb3IgdGhpcyBkYXlcbiAgICAgIGNvbnN0IGRheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgICAgZGF5LnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICBkYXkuZW5kT2YoJ2RheScpXG4gICAgICApXG4gICAgICBjb25zdCBoYXNFdmVudHMgPSBkYXlFdmVudHMubGVuZ3RoID4gMFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXksXG4gICAgICAgIGlzQ3VycmVudE1vbnRoLFxuICAgICAgICBpc1RvZGF5LFxuICAgICAgICBpc0N1cnJlbnREYXRlLFxuICAgICAgICBoYXNFdmVudHMsXG4gICAgICAgIGV2ZW50Q291bnQ6IGRheUV2ZW50cy5sZW5ndGgsXG4gICAgICAgIC8vIEdyb3VwIGV2ZW50cyBieSB0aGVpciBjYXRlZ29yaWVzIHRvIHNob3cgZGlmZmVyZW50IGNvbG9yc1xuICAgICAgICBldmVudHM6IGRheUV2ZW50cyxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1pbmktY2FsZW5kYXItJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy03IGdhcC1bMXB4XSB0ZXh0LVswLjZyZW1dXCJcbiAgICAgID5cbiAgICAgICAgey8qIERheSBuYW1lcyAqL31cbiAgICAgICAge1snUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddLm1hcCgoZGF5TmFtZSwgaSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGhlYWRlci0ke2l9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBoLTMgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtkYXlOYW1lfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cblxuICAgICAgICB7LyogQ2FsZW5kYXIgZGF5cyAqL31cbiAgICAgICAge2RheXNBcnJheS5tYXAoKGRheUluZm8sIGkpID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2BkYXktJHtpfWB9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItZGF5LSR7bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX0tJHtkYXlJbmZvLmRheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGhhbmRsZURheUNsaWNrKGRheUluZm8uZGF5LCBlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdyZWxhdGl2ZSBmbGV4IGFzcGVjdC1zcXVhcmUgdy1mdWxsIGN1cnNvci1wb2ludGVyIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcicsXG4gICAgICAgICAgICAgICdob3ZlcjpiZy1hY2NlbnQgcm91bmRlZC1zbSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0yMDAnLFxuICAgICAgICAgICAgICAhZGF5SW5mby5pc0N1cnJlbnRNb250aCAmJiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgJiZcbiAgICAgICAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnLFxuICAgICAgICAgICAgICBkYXlJbmZvLmlzQ3VycmVudERhdGUgJiZcbiAgICAgICAgICAgICAgICAhZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgJ2JnLW11dGVkIHJvdW5kZWQtZnVsbCBmb250LWJvbGQnLFxuICAgICAgICAgICAgICBkYXlJbmZvLmhhc0V2ZW50cyAmJlxuICAgICAgICAgICAgICAgICFkYXlJbmZvLmlzVG9kYXkgJiZcbiAgICAgICAgICAgICAgICAhZGF5SW5mby5pc0N1cnJlbnREYXRlICYmXG4gICAgICAgICAgICAgICAgJ2ZvbnQtbWVkaXVtJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgZGF5SW5mby5oYXNFdmVudHNcbiAgICAgICAgICAgICAgICA/IGAke2RheUluZm8uZXZlbnRDb3VudH0gZXZlbnQke1xuICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmV2ZW50Q291bnQgPiAxID8gJ3MnIDogJydcbiAgICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGxlYWRpbmctbm9uZVwiPlxuICAgICAgICAgICAgICB7ZGF5SW5mby5kYXkuZGF0ZSgpfVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICB7LyogRW5oYW5jZWQgZXZlbnQgaW5kaWNhdG9yIC0gc2hvdyBtdWx0aXBsZSBjb2xvcmVkIGRvdHMgZm9yIGRpZmZlcmVudCBldmVudCB0eXBlcyAqL31cbiAgICAgICAgICAgIHtkYXlJbmZvLmhhc0V2ZW50cyAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlIGJvdHRvbS0wIGZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtWzFweF0nLFxuICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JvdHRvbS1bMXB4XScgOiAnJ1xuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7LyogU2hvdyB1cCB0byAzIGV2ZW50IGRvdHMgd2l0aCBkaWZmZXJlbnQgY29sb3JzIGlmIGF2YWlsYWJsZSAqL31cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1wcmltYXJ5J1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkYXlJbmZvLmV2ZW50Q291bnQgPiAxICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLFxuICAgICAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogJ2JnLWJsdWUtNTAwJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkYXlJbmZvLmV2ZW50Q291bnQgPiAyICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLFxuICAgICAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogJ2JnLWdyZWVuLTUwMCdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNjcm9sbEFyZWEgZGF0YS10ZXN0aWQ9XCJ5ZWFyLXZpZXdcIiBjbGFzc05hbWU9XCJoLWZ1bGxcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ5ZWFyLWdyaWRcIlxuICAgICAgICBjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuICAgICAgPlxuICAgICAgICB7bW9udGhzV2l0aEV2ZW50Q291bnQubWFwKChtb250aCwgaW5kZXgpID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e21vbnRoLm5hbWV9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTW9udGhDbGljayhtb250aC5kYXRlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJvcmRlci1wcmltYXJ5IGZsZXggY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgcm91bmRlZC1sZyBib3JkZXIgcC0zIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3ZlcjpzY2FsZS1bMS4wMV0gaG92ZXI6c2hhZG93LW1kXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAga2V5PXtgbW9udGgtJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgICAgIGVhc2U6ICdlYXNlSW5PdXQnLFxuICAgICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1iLTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxoM1xuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLXRpdGxlLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHttb250aC5uYW1lfVxuICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAge21vbnRoLmV2ZW50Q291bnQgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC1ldmVudC1jb3VudC0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsIHB4LTIgcHktMSB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge21vbnRoLmV2ZW50Q291bnR9eycgJ31cbiAgICAgICAgICAgICAgICAgICAge21vbnRoLmV2ZW50Q291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJyl9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG5cbiAgICAgICAgICAgIHtyZW5kZXJNaW5pQ2FsZW5kYXIobW9udGgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvU2Nyb2xsQXJlYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBZZWFyVmlld1xuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy92aWV3L21vbnRoLXZpZXcnXG5pbXBvcnQgV2Vla1ZpZXcgZnJvbSAnQC9mZWF0dXJlcy93ZWVrLXZpZXcvdmlldy93ZWVrLXZpZXcnXG5pbXBvcnQgRGF5VmlldyBmcm9tICdAL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvdmlldy9kYXktdmlldydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJy4uL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJy4uL2hlYWRlcidcbmltcG9ydCBZZWFyVmlldyBmcm9tICdAL2ZlYXR1cmVzL3llYXItdmlldy92aWV3L3llYXItdmlldydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9saWInXG5pbXBvcnQgdHlwZSB7IElsYW15Q2FsZW5kYXJQcm9wcyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IENhbGVuZGFyQ29udGVudDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICBzZWxlY3RlZEV2ZW50LFxuICAgIHNlbGVjdGVkRGF0ZSxcbiAgICBhZGRFdmVudCxcbiAgICB1cGRhdGVFdmVudCxcbiAgICBkZWxldGVFdmVudCxcbiAgICBkYXlNYXhFdmVudHMsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHZpZXdNYXAgPSB7XG4gICAgbW9udGg6IDxNb250aFZpZXcga2V5PVwibW9udGhcIiBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c30gLz4sXG4gICAgd2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcbiAgICBkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuICAgIHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG4gIH1cblxuICBjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICA8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cbiAgICAgIHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuICAgICAgPENhbGVuZGFyRG5kQ29udGV4dD5cbiAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3ZpZXd9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHg6IDIwIH19XG4gICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHg6IDAgfX1cbiAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeDogLTIwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjEsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dmlld01hcFt2aWV3XX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9DYWxlbmRhckRuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cbiAgICAgIHtpc0V2ZW50Rm9ybU9wZW4gJiYgKFxuICAgICAgICA8RXZlbnRGb3JtXG4gICAgICAgICAgb25DbG9zZT17Y2xvc2VFdmVudEZvcm19XG4gICAgICAgICAgc2VsZWN0ZWRFdmVudD17c2VsZWN0ZWRFdmVudH1cbiAgICAgICAgICBzZWxlY3RlZERhdGU9e3NlbGVjdGVkRGF0ZX1cbiAgICAgICAgICBvbkFkZD17YWRkRXZlbnR9XG4gICAgICAgICAgb25VcGRhdGU9e2hhbmRsZU9uVXBkYXRlfVxuICAgICAgICAgIG9uRGVsZXRlPXtoYW5kbGVPbkRlbGV0ZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuY29uc3QgREVGQVVMVF9EQVlfTUFYX0VWRU5UUyA9IDRcbmV4cG9ydCBjb25zdCBJbGFteUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteUNhbGVuZGFyUHJvcHM+ID0gKHtcbiAgZXZlbnRzLFxuICBmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuICBpbml0aWFsVmlldyA9ICdtb250aCcsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIG9uRXZlbnRBZGQsXG4gIG9uRXZlbnRVcGRhdGUsXG4gIG9uRXZlbnREZWxldGUsXG4gIG9uRGF0ZUNoYW5nZSxcbiAgbG9jYWxlLFxuICB0cmFuc2xhdGlvbnMsXG4gIHRyYW5zbGF0b3IsXG4gIHRpbWV6b25lLFxuICBkaXNhYmxlQ2VsbENsaWNrLFxuICBkaXNhYmxlRXZlbnRDbGljayxcbiAgZGlzYWJsZURyYWdBbmREcm9wLFxuICBkYXlNYXhFdmVudHMgPSBERUZBVUxUX0RBWV9NQVhfRVZFTlRTLFxuICBzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcbiAgdmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuICBoZWFkZXJDb21wb25lbnQsXG4gIGhlYWRlckNsYXNzTmFtZSxcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Q2FsZW5kYXJQcm92aWRlclxuICAgICAgZXZlbnRzPXtub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50KGV2ZW50cyl9XG4gICAgICBmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuICAgICAgaW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuICAgICAgcmVuZGVyRXZlbnQ9e3JlbmRlckV2ZW50fVxuICAgICAgb25FdmVudENsaWNrPXtvbkV2ZW50Q2xpY2t9XG4gICAgICBvbkNlbGxDbGljaz17b25DZWxsQ2xpY2t9XG4gICAgICBvblZpZXdDaGFuZ2U9e29uVmlld0NoYW5nZX1cbiAgICAgIG9uRXZlbnRBZGQ9e29uRXZlbnRBZGR9XG4gICAgICBvbkV2ZW50VXBkYXRlPXtvbkV2ZW50VXBkYXRlfVxuICAgICAgb25FdmVudERlbGV0ZT17b25FdmVudERlbGV0ZX1cbiAgICAgIG9uRGF0ZUNoYW5nZT17b25EYXRlQ2hhbmdlfVxuICAgICAgbG9jYWxlPXtsb2NhbGV9XG4gICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgIHRyYW5zbGF0b3I9e3RyYW5zbGF0b3J9XG4gICAgICB0aW1lem9uZT17dGltZXpvbmV9XG4gICAgICBkaXNhYmxlQ2VsbENsaWNrPXtkaXNhYmxlQ2VsbENsaWNrfVxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2s9e2Rpc2FibGVFdmVudENsaWNrfVxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wPXtkaXNhYmxlRHJhZ0FuZERyb3B9XG4gICAgICBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cbiAgICAgIHN0aWNreVZpZXdIZWFkZXI9e3N0aWNreVZpZXdIZWFkZXJ9XG4gICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuICAgICAgaGVhZGVyQ29tcG9uZW50PXtoZWFkZXJDb21wb25lbnR9XG4gICAgICBoZWFkZXJDbGFzc05hbWU9e2hlYWRlckNsYXNzTmFtZX1cbiAgICA+XG4gICAgICA8Q2FsZW5kYXJDb250ZW50IC8+XG4gICAgPC9DYWxlbmRhclByb3ZpZGVyPlxuICApXG59XG4iLAogICAgImltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIERyYWdPdmVybGF5LFxuICBNb3VzZVNlbnNvcixcbiAgcG9pbnRlcldpdGhpbixcbiAgVG91Y2hTZW5zb3IsXG4gIHVzZVNlbnNvcixcbiAgdXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHtcbiAgRHJhZ0NhbmNlbEV2ZW50LFxuICBEcmFnRW5kRXZlbnQsXG4gIERyYWdTdGFydEV2ZW50LFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgc25hcENlbnRlclRvQ3Vyc29yIH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcbiAgY29uc3QgeyB1cGRhdGVFdmVudCwgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIHZpZXcsIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IFJlYWN0LnVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihcbiAgICBudWxsXG4gIClcblxuICAvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuICBjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuICAgIGlzT3BlbjogYm9vbGVhblxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG4gIH0+KHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV2ZW50OiBudWxsLFxuICAgIHVwZGF0ZXM6IG51bGwsXG4gIH0pXG5cbiAgLy8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuICBjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuICAgIC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuICAgIGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG4gICAgICBkaXN0YW5jZTogMixcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG4gICAgLy8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG4gICAgYWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcbiAgICAgIGRlbGF5OiAxMDAsXG4gICAgICB0b2xlcmFuY2U6IDUsXG4gICAgfSxcbiAgfSlcblxuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcbiAgY29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgKSA9PiB7XG4gICAgLy8gVmFsaWRhdGUgaW5wdXRzXG4gICAgaWYgKCFldmVudCB8fCAhZXZlbnQuaWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuICAgICAgLy8gU2hvdyBkaWFsb2cgZm9yIHJlY3VycmluZyBldmVudHNcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEaXJlY3RseSB1cGRhdGUgcmVndWxhciBldmVudHNcbiAgICAgIHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCB1cGRhdGVzKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNvbmZpcm1hdGlvblxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm0gPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICBpZiAoIXJlY3VycmluZ0RpYWxvZy5ldmVudCB8fCAhcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMpIHtcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuICAgICAgICBzY29wZSxcbiAgICAgICAgZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG4gICAgICB9KVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdTdGFydEV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50XG5cbiAgICAvLyBTZXQgdGhlIGFjdGl2ZSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnQgZGF0YVxuICAgIGlmIChhY3RpdmUuZGF0YS5jdXJyZW50Py50eXBlID09PSAnY2FsZW5kYXItZXZlbnQnKSB7XG4gICAgICBzZXRBY3RpdmVFdmVudChhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudFxuXG4gICAgaWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG4gICAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJykge1xuICAgICAgY29uc3QgeyBkYXRlLCBob3VyID0gMCwgbWludXRlID0gMCB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBldmVudCBkdXJhdGlvbiBpbiBtaW51dGVzXG4gICAgICBjb25zdCBzdGFydCA9IGFjdGl2ZUV2ZW50LnN0YXJ0XG4gICAgICBjb25zdCBlbmQgPSBhY3RpdmVFdmVudC5lbmRcbiAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IGVuZC5kaWZmKHN0YXJ0LCAnbWludXRlJylcblxuICAgICAgLy8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuICAgICAgY29uc3QgbmV3U3RhcnQgPSBkYXlqcyhkYXRlKVxuICAgICAgICAuaG91cihob3VyKVxuICAgICAgICAubWludXRlKG1pbnV0ZSB8fCAwKVxuXG4gICAgICAvLyBDcmVhdGUgbmV3IGVuZCB0aW1lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgZHVyYXRpb25cbiAgICAgIGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZHVyYXRpb25NaW51dGVzLCAnbWludXRlJylcbiAgICAgIGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIG5ldyBlbmQgdGltZSBpcyBhdCBtaWRuaWdodCwgc2V0IGl0IHRvIDI0IGhvdXJzIG9mIHBhcnRpYWwgZGF5XG4gICAgICAgIG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZXZlbnQgd2l0aCBuZXcgdGltZXNcbiAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwge1xuICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAnZGF5LWNlbGwnKSB7XG4gICAgICBjb25zdCB7IGRhdGUgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG4gICAgICBjb25zdCBuZXdEYXRlID0gZGF5anMoZGF0ZSlcblxuICAgICAgLy8gRm9yIG11bHRpLWRheSBldmVudHMsIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIGR1cmF0aW9uIGluIGRheXNcbiAgICAgIGNvbnN0IGlzTXVsdGlEYXlFdmVudCA9ICFhY3RpdmVFdmVudC5zdGFydC5pc1NhbWUoYWN0aXZlRXZlbnQuZW5kLCAnZGF5JylcbiAgICAgIGNvbnN0IHN0YXJ0ID0gYWN0aXZlRXZlbnQuc3RhcnRcbiAgICAgIGNvbnN0IGVuZCA9IGFjdGl2ZUV2ZW50LmVuZFxuXG4gICAgICBpZiAoaXNNdWx0aURheUV2ZW50KSB7XG4gICAgICAgIGlmICh2aWV3ID09PSAnd2VlaycpIHtcbiAgICAgICAgICAvLyBHZXQgdGltZSBjb21wb25lbnRzIHRvIHByZXNlcnZlXG4gICAgICAgICAgY29uc3Qgc3RhcnRIb3VyID0gc3RhcnQuaG91cigpXG4gICAgICAgICAgY29uc3Qgc3RhcnRNaW51dGUgPSBzdGFydC5taW51dGUoKVxuICAgICAgICAgIGNvbnN0IGVuZEhvdXIgPSBlbmQuaG91cigpXG4gICAgICAgICAgY29uc3QgZW5kTWludXRlID0gZW5kLm1pbnV0ZSgpXG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgZHVyYXRpb24gaW4gZGF5cyB0byBwcmVzZXJ2ZVxuICAgICAgICAgIGNvbnN0IGR1cmF0aW9uRGF5cyA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5JylcblxuICAgICAgICAgIC8vIENyZWF0ZSBuZXcgc3RhcnQgYW5kIGVuZCBkYXRlc1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ2RheScpXG4gICAgICAgICAgICAuaG91cihzdGFydEhvdXIpXG4gICAgICAgICAgICAubWludXRlKHN0YXJ0TWludXRlKVxuICAgICAgICAgIGNvbnN0IG5ld0VuZCA9IG5ld1N0YXJ0XG4gICAgICAgICAgICAuYWRkKGR1cmF0aW9uRGF5cywgJ2RheScpXG4gICAgICAgICAgICAuaG91cihlbmRIb3VyKVxuICAgICAgICAgICAgLm1pbnV0ZShlbmRNaW51dGUpXG5cbiAgICAgICAgICBwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHtcbiAgICAgICAgICAgIHN0YXJ0OiBuZXdTdGFydCxcbiAgICAgICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRm9yIG90aGVyIHZpZXdzIGxpa2UgbW9udGggdmlld1xuICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGF0ZSBzaGlmdCAoaG93IG1hbnkgZGF5cyB3ZSdyZSBtb3ZpbmcgdGhlIGV2ZW50KVxuICAgICAgICAgIGNvbnN0IGRheXNEaWZmZXJlbmNlID0gbmV3RGF0ZS5kaWZmKHN0YXJ0LnN0YXJ0T2YoJ2RheScpLCAnZGF5JylcblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgc3RhcnQgYW5kIGVuZCB3aGlsZSBwcmVzZXJ2aW5nIHRpbWUgY29tcG9uZW50c1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gc3RhcnQuYWRkKGRheXNEaWZmZXJlbmNlLCAnZGF5JylcbiAgICAgICAgICBjb25zdCBuZXdFbmQgPSBlbmQuYWRkKGRheXNEaWZmZXJlbmNlLCAnZGF5JylcblxuICAgICAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwge1xuICAgICAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHNpbmdsZS1kYXkgZXZlbnRzLCBtYWludGFpbiB0aGUgdGltZSBidXQgY2hhbmdlIHRoZSBkYXRlXG4gICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3RGF0ZVxuICAgICAgICAgIC5ob3VyKGFjdGl2ZUV2ZW50LnN0YXJ0LmhvdXIoKSlcbiAgICAgICAgICAubWludXRlKGFjdGl2ZUV2ZW50LnN0YXJ0Lm1pbnV0ZSgpKVxuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBldmVudCBkdXJhdGlvbiBhbmQgc2V0IG5ldyBlbmQgdGltZVxuICAgICAgICBjb25zdCBkdXJhdGlvbk1pbnV0ZXMgPSBhY3RpdmVFdmVudC5lbmQuZGlmZihcbiAgICAgICAgICBhY3RpdmVFdmVudC5zdGFydCxcbiAgICAgICAgICAnbWludXRlJ1xuICAgICAgICApXG4gICAgICAgIGNvbnN0IG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChkdXJhdGlvbk1pbnV0ZXMsICdtaW51dGUnKVxuXG4gICAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwge1xuICAgICAgICAgIHN0YXJ0OiBuZXdTdGFydCxcbiAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuICAgIHNldEFjdGl2ZUV2ZW50KG51bGwpXG4gIH1cblxuICAvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcbiAgaWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuICAgIHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgb25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuICAgICAgICAgIHthY3RpdmVFdmVudCAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgJ2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cycsXG4gICAgICAgICAgICAgICAgYWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG4gICAgICAgICAgICAgICAgYWN0aXZlRXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHthY3RpdmVFdmVudD8udGl0bGV9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L0RyYWdPdmVybGF5PlxuICAgICAgPC9EbmRDb250ZXh0PlxuXG4gICAgICB7LyogUmVjdXJyaW5nIGV2ZW50IGVkaXQgZGlhbG9nICovfVxuICAgICAgPFJlY3VycmVuY2VFZGl0RGlhbG9nXG4gICAgICAgIGlzT3Blbj17cmVjdXJyaW5nRGlhbG9nLmlzT3Blbn1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZX1cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm19XG4gICAgICAgIG9wZXJhdGlvblR5cGU9XCJlZGl0XCJcbiAgICAgICAgZXZlbnRUaXRsZT17cmVjdXJyaW5nRGlhbG9nLmV2ZW50Py50aXRsZSB8fCAnJ31cbiAgICAgIC8+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7XG4gIGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuICB1cGRhdGVSZWN1cnJpbmdFdmVudCBhcyB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwsXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50IGFzIGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCxcbn0gZnJvbSAnQC9saWIvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICBldmVudHM/OiBDYWxlbmRhckV2ZW50W11cbiAgZmlyc3REYXlPZldlZWs/OiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cbiAgaW5pdGlhbFZpZXc/OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgcmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuICBvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s/OiAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgb25WaWV3Q2hhbmdlPzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICBvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHRpbWV6b25lPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG4gIHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcbiAgaGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG4gIGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG4gIC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cbiAgdHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG4gIHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuZXhwb3J0IGNvbnN0IENhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPENhbGVuZGFyUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgZXZlbnRzID0gW10sXG4gIGZpcnN0RGF5T2ZXZWVrID0gMCwgLy8gRGVmYXVsdCB0byBTdW5kYXksXG4gIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgcmVuZGVyRXZlbnQsXG4gIG9uRXZlbnRDbGljayxcbiAgb25DZWxsQ2xpY2ssXG4gIG9uVmlld0NoYW5nZSxcbiAgb25FdmVudEFkZCxcbiAgb25FdmVudFVwZGF0ZSxcbiAgb25FdmVudERlbGV0ZSxcbiAgb25EYXRlQ2hhbmdlLFxuICBsb2NhbGUsXG4gIHRpbWV6b25lLFxuICBkaXNhYmxlQ2VsbENsaWNrLFxuICBkaXNhYmxlRXZlbnRDbGljayxcbiAgZGlzYWJsZURyYWdBbmREcm9wLFxuICBkYXlNYXhFdmVudHMsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbiAgaGVhZGVyQ2xhc3NOYW1lLFxuICB0cmFuc2xhdGlvbnMsXG4gIHRyYW5zbGF0b3IsXG59KSA9PiB7XG4gIC8vIFN0YXRlXG4gIGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anM+KGRheWpzKCkpXG4gIGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPCdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJz4oXG4gICAgaW5pdGlhbFZpZXdcbiAgKVxuICBjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcbiAgY29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGU8c3RyaW5nPihsb2NhbGUgfHwgJ2VuJylcbiAgY29uc3QgW2N1cnJlbnRUaW1lem9uZSwgc2V0Q3VycmVudFRpbWV6b25lXSA9IHVzZVN0YXRlPHN0cmluZz4odGltZXpvbmUgfHwgJycpXG5cbiAgLy8gQ3JlYXRlIHRyYW5zbGF0aW9uIGZ1bmN0aW9uXG4gIGNvbnN0IHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAodHJhbnNsYXRvcikge1xuICAgICAgLy8gVXNlIHByb3ZpZGVkIHRyYW5zbGF0b3IgZnVuY3Rpb25cbiAgICAgIHJldHVybiB0cmFuc2xhdG9yXG4gICAgfVxuXG4gICAgaWYgKHRyYW5zbGF0aW9ucykge1xuICAgICAgLy8gVXNlIHByb3ZpZGVkIHRyYW5zbGF0aW9ucyBvYmplY3RcbiAgICAgIHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuICAgIH1cbiAgICAvLyBVc2UgZGVmYXVsdCB0cmFuc2xhdGlvbnNcbiAgICByZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiBkZWZhdWx0VHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG4gIH0sIFt0cmFuc2xhdGlvbnMsIHRyYW5zbGF0b3JdKVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgZXZlbnRzIGZvciBhIHNwZWNpZmljIGRhdGUgcmFuZ2UgKG9uLWRlbWFuZCBnZW5lcmF0aW9uKVxuICBjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAgICAgY29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LnJydWxlKSB7XG4gICAgICAgICAgLy8gR2VuZXJhdGUgcmVjdXJyaW5nIGluc3RhbmNlcyBmb3IgdGhlIHNwZWNpZmljIHJhbmdlXG4gICAgICAgICAgY29uc3QgcmVjdXJyaW5nRXZlbnRzID0gZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMoe1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjdXJyZW50RXZlbnRzLFxuICAgICAgICAgICAgc3RhcnREYXRlLFxuICAgICAgICAgICAgZW5kRGF0ZSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGFsbEV2ZW50cy5wdXNoKC4uLnJlY3VycmluZ0V2ZW50cylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBZGQgbm9uLXJlY3VycmluZyBldmVudHMgd2l0aCBjb21wcmVoZW5zaXZlIHJhbmdlIGNoZWNraW5nXG4gICAgICAgICAgY29uc3QgZXZlbnRTdGFydHNJblJhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgZXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblxuICAgICAgICAgIGNvbnN0IGV2ZW50RW5kc0luUmFuZ2UgPVxuICAgICAgICAgICAgZXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgZXZlbnQuZW5kLmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cbiAgICAgICAgICBjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuICAgICAgICAgICAgZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnREYXRlKSAmJiBldmVudC5lbmQuaXNBZnRlcihlbmREYXRlKVxuXG4gICAgICAgICAgaWYgKGV2ZW50U3RhcnRzSW5SYW5nZSB8fCBldmVudEVuZHNJblJhbmdlIHx8IGV2ZW50U3BhbnNSYW5nZSkge1xuICAgICAgICAgICAgYWxsRXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGxFdmVudHNcbiAgICB9LFxuICAgIFtjdXJyZW50RXZlbnRzXVxuICApXG5cbiAgLy8gR2V0IHRoZSBjdXJyZW50IHZpZXcncyBkYXRlIHJhbmdlIGZvciBvbi1kZW1hbmQgZXZlbnQgZ2VuZXJhdGlvblxuICBjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZS5lbmRPZignZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgLnN1YnRyYWN0KGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgLmFkZChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5zdGFydE9mKCdtb250aCcpXG4gICAgICAgICAgICAuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAuc3VidHJhY3QoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5lbmRPZignbW9udGgnKVxuICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5hZGQoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZigneWVhcicpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGUuZW5kT2YoJ3llYXInKSxcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdtb250aCcpLFxuICAgICAgICB9XG4gICAgfVxuICB9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuICAvLyBHZXQgcHJvY2Vzc2VkIGV2ZW50cyBmb3IgdGhlIGN1cnJlbnQgdmlldyAob24tZGVtYW5kKVxuICBjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuICAgIHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cbiAgLy8gVXBkYXRlIGV2ZW50cyB3aGVuIGV2ZW50cyBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcbiAgICB9XG4gIH0sIFtldmVudHNdKVxuXG4gIC8vIENvbmZpZ3VyZSBsb2NhbGUgd2hlbiBsb2NhbGUgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvY2FsZSkge1xuICAgICAgc2V0Q3VycmVudExvY2FsZShsb2NhbGUpXG4gICAgICBkYXlqcy5sb2NhbGUobG9jYWxlKVxuICAgIH1cbiAgfSwgW2xvY2FsZV0pXG5cbiAgLy8gQ29uZmlndXJlIHRpbWV6b25lIGZvciBjdXJyZW50RGF0ZSB3aGVuIHRpbWV6b25lIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aW1lem9uZSkge1xuICAgICAgc2V0Q3VycmVudFRpbWV6b25lKHRpbWV6b25lKVxuICAgICAgZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcbiAgICB9XG4gIH0sIFt0aW1lem9uZV0pXG5cbiAgLy8gSGFuZGxlcnNcbiAgY29uc3Qgc2VsZWN0RGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgc2V0Q3VycmVudERhdGUoZGF0ZSlcbiAgICAgIG9uRGF0ZUNoYW5nZT8uKGRhdGUpXG4gICAgfSxcbiAgICBbb25EYXRlQ2hhbmdlXVxuICApXG5cbiAgY29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAnbW9udGgnKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICd3ZWVrJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICdkYXknKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICd5ZWFyJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9LCBbdmlldywgb25EYXRlQ2hhbmdlXSlcblxuICBjb25zdCBwcmV2UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ21vbnRoJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICd3ZWVrJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAneWVhcicpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXcsIG9uRGF0ZUNoYW5nZV0pXG5cbiAgY29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGRheWpzKClcbiAgICBzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gIH0sIFtvbkRhdGVDaGFuZ2VdKVxuXG4gIGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKChwcmV2RXZlbnRzKSA9PiBbLi4ucHJldkV2ZW50cywgZXZlbnRdKVxuICAgICAgb25FdmVudEFkZD8uKGV2ZW50KVxuICAgIH0sXG4gICAgW29uRXZlbnRBZGRdXG4gIClcblxuICBjb25zdCB1cGRhdGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudElkOiBzdHJpbmcsIHVwZGF0ZWRFdmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cygocHJldkV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkID0gcHJldkV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmlkID09PSBldmVudElkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdFdmVudCA9IHsgLi4uZXZlbnQsIC4uLnVwZGF0ZWRFdmVudCB9XG4gICAgICAgICAgICBvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG4gICAgICAgICAgICByZXR1cm4gbmV3RXZlbnRcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGV2ZW50XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiB1cGRhdGVkXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uRXZlbnRVcGRhdGVdXG4gIClcblxuICBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuICAgICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICAgIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuICAgICkgPT4ge1xuICAgICAgLy8gQ3JlYXRlIHRoZSB1cGRhdGVkIGV2ZW50IHdpdGggdGhlIHVwZGF0ZXMgYXBwbGllZFxuICAgICAgY29uc3QgdXBkYXRlZEV2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlcyB9XG5cbiAgICAgIC8vIENhbGwgdGhlIHJlZ3VsYXIgdXBkYXRlIGNhbGxiYWNrIHdpdGggdGhlIHVwZGF0ZWQgZXZlbnRcbiAgICAgIG9uRXZlbnRVcGRhdGU/Lih1cGRhdGVkRXZlbnQpXG5cbiAgICAgIC8vIFVzZSBvdXIgaW1wbGVtZW50ZWQgcmVjdXJyaW5nIGV2ZW50IHVwZGF0ZSBmdW5jdGlvblxuICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG4gICAgICAgIHRhcmdldEV2ZW50OiBldmVudCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgY3VycmVudEV2ZW50cyxcbiAgICAgICAgc2NvcGU6IG9wdGlvbnMuc2NvcGUsXG4gICAgICB9KVxuXG4gICAgICBzZXRDdXJyZW50RXZlbnRzKHVwZGF0ZWRFdmVudHMpXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cbiAgKVxuXG4gIGNvbnN0IGRlbGV0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50LCBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnMpID0+IHtcbiAgICAgIC8vIENhbGwgdGhlIHJlZ3VsYXIgZGVsZXRlIGNhbGxiYWNrIHdpdGggdGhlIGV2ZW50IGJlaW5nIGRlbGV0ZWRcbiAgICAgIG9uRXZlbnREZWxldGU/LihldmVudClcblxuICAgICAgLy8gVXNlIG91ciBpbXBsZW1lbnRlZCByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGZ1bmN0aW9uXG4gICAgICBjb25zdCB1cGRhdGVkRXZlbnRzID0gZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcbiAgICAgICAgdGFyZ2V0RXZlbnQ6IGV2ZW50LFxuICAgICAgICBjdXJyZW50RXZlbnRzLFxuICAgICAgICBzY29wZTogb3B0aW9ucy5zY29wZSxcbiAgICAgIH0pXG5cbiAgICAgIHNldEN1cnJlbnRFdmVudHModXBkYXRlZEV2ZW50cylcbiAgICB9LFxuICAgIFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuICApXG5cbiAgY29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnRJZDogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKChwcmV2RXZlbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50VG9EZWxldGUgPSBwcmV2RXZlbnRzLmZpbmQoKGV2ZW50KSA9PiBldmVudC5pZCA9PT0gZXZlbnRJZClcbiAgICAgICAgaWYgKGV2ZW50VG9EZWxldGUpIHtcbiAgICAgICAgICBvbkV2ZW50RGVsZXRlPy4oZXZlbnRUb0RlbGV0ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldkV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5pZCAhPT0gZXZlbnRJZClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbb25FdmVudERlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIHNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG4gICAgc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsb3NlRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlbGVjdGVkRGF0ZShudWxsKVxuICAgIHNldFNlbGVjdGVkRXZlbnQobnVsbClcbiAgICBzZXRJc0V2ZW50Rm9ybU9wZW4oZmFsc2UpXG4gIH0sIFtdKVxuXG4gIC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG4gIGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3VmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInKSA9PiB7XG4gICAgICBzZXRWaWV3KG5ld1ZpZXcpXG4gICAgICBvblZpZXdDaGFuZ2U/LihuZXdWaWV3KVxuICAgIH0sXG4gICAgW29uVmlld0NoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9uRXZlbnRDbGljaykge1xuICAgICAgICBvbkV2ZW50Q2xpY2soZXZlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0RXZlbnQoZXZlbnQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbZGlzYWJsZUNlbGxDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAob25DZWxsQ2xpY2spIHtcbiAgICAgICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKHN0YXJ0RGF0ZSlcbiAgICAgICAgc2V0U2VsZWN0ZWRFdmVudCh7XG4gICAgICAgICAgdGl0bGU6IHQoJ25ld0V2ZW50JyksXG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmQ6IGVuZERhdGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudClcbiAgICAgICAgc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVPcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG4gICAgKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKGRhdGUpXG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZEV2ZW50KHtcbiAgICAgICAgdGl0bGU6IHQoJ25ld0V2ZW50JyksXG4gICAgICAgIHN0YXJ0OiBkYXRlID8/IGN1cnJlbnREYXRlLFxuICAgICAgICBlbmQ6IGRhdGUgPz8gY3VycmVudERhdGUuYWRkKDEsICdob3VyJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgYWxsRGF5OiBmYWxzZSxcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudClcbiAgICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgIH0sXG4gICAgW2N1cnJlbnREYXRlLCB0XVxuICApXG5cbiAgLy8gRmluZCBwYXJlbnQgcmVjdXJyaW5nIGV2ZW50IGZvciBhIGdpdmVuIGV2ZW50IGluc3RhbmNlXG4gIGNvbnN0IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCk6IENhbGVuZGFyRXZlbnQgfCBudWxsID0+IHtcbiAgICAgIC8vIEdlbmVyYXRlIFVJRCBpZiBtaXNzaW5nIChmb2xsb3dpbmcgUkZDIDU1NDUgY29tcGxpYW5jZSlcbiAgICAgIGNvbnN0IHRhcmdldFVJRCA9IGV2ZW50LnVpZFxuXG4gICAgICBjb25zdCBwYXJlbnRFdmVudCA9IGN1cnJlbnRFdmVudHMuZmluZCgoZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnRVSUQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcbiAgICAgICAgcmV0dXJuIHBhcmVudFVJRCA9PT0gdGFyZ2V0VUlEICYmIGUucnJ1bGVcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBwYXJlbnRFdmVudCB8fCBudWxsXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50c11cbiAgKVxuXG4gIC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBjdXJyZW50RGF0ZSxcbiAgICAgIHZpZXcsXG4gICAgICBldmVudHM6IHByb2Nlc3NlZEV2ZW50cyxcbiAgICAgIHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcbiAgICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgICBpc0V2ZW50Rm9ybU9wZW4sXG4gICAgICBzZWxlY3RlZEV2ZW50LFxuICAgICAgc2VsZWN0ZWREYXRlLFxuICAgICAgZmlyc3REYXlPZldlZWssXG4gICAgICBzZXRDdXJyZW50RGF0ZSxcbiAgICAgIHNlbGVjdERhdGUsXG4gICAgICBzZXRWaWV3OiBoYW5kbGVWaWV3Q2hhbmdlLFxuICAgICAgbmV4dFBlcmlvZCxcbiAgICAgIHByZXZQZXJpb2QsXG4gICAgICB0b2RheSxcbiAgICAgIGFkZEV2ZW50LFxuICAgICAgdXBkYXRlRXZlbnQsXG4gICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIGRlbGV0ZUV2ZW50LFxuICAgICAgZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBvcGVuRXZlbnRGb3JtOiBoYW5kbGVPcGVuRXZlbnRGb3JtLFxuICAgICAgY2xvc2VFdmVudEZvcm0sXG4gICAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcbiAgICAgIG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICB0aW1lem9uZTogY3VycmVudFRpbWV6b25lLFxuICAgICAgZGlzYWJsZUNlbGxDbGljayxcbiAgICAgIGRpc2FibGVFdmVudENsaWNrLFxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wLFxuICAgICAgZGF5TWF4RXZlbnRzLFxuICAgICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICBoZWFkZXJDb21wb25lbnQsXG4gICAgICBoZWFkZXJDbGFzc05hbWUsXG4gICAgICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuICAgICAgdCxcbiAgICB9KSxcbiAgICBbXG4gICAgICBjdXJyZW50RGF0ZSxcbiAgICAgIHZpZXcsXG4gICAgICBwcm9jZXNzZWRFdmVudHMsXG4gICAgICBjdXJyZW50RXZlbnRzLFxuICAgICAgY3VycmVudExvY2FsZSxcbiAgICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgICBzZWxlY3RlZERhdGUsXG4gICAgICBmaXJzdERheU9mV2VlayxcbiAgICAgIHNlbGVjdERhdGUsXG4gICAgICBoYW5kbGVWaWV3Q2hhbmdlLFxuICAgICAgbmV4dFBlcmlvZCxcbiAgICAgIGhhbmRsZU9wZW5FdmVudEZvcm0sXG4gICAgICBwcmV2UGVyaW9kLFxuICAgICAgdG9kYXksXG4gICAgICBhZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50LFxuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBkZWxldGVFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgY2xvc2VFdmVudEZvcm0sXG4gICAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICBjdXJyZW50VGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICAgIC8vIFRyYW5zbGF0aW9uIGRlcGVuZGVuY2llc1xuICAgICAgdCxcbiAgICBdXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zID0ge1xuICAvLyBDb21tb24gYWN0aW9uc1xuICB0b2RheTogJ1RvZGF5JyxcbiAgY3JlYXRlOiAnQ3JlYXRlJyxcbiAgdXBkYXRlOiAnVXBkYXRlJyxcbiAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgY2FuY2VsOiAnQ2FuY2VsJyxcblxuICAvLyBFdmVudCByZWxhdGVkXG4gIGV2ZW50OiAnRXZlbnQnLFxuICBldmVudHM6ICdFdmVudHMnLFxuICBuZXdFdmVudDogJ05ldyBFdmVudCcsXG4gIHRpdGxlOiAnVGl0bGUnLFxuICBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uJyxcbiAgbG9jYXRpb246ICdMb2NhdGlvbicsXG4gIGFsbERheTogJ0FsbCBkYXknLFxuICBzdGFydERhdGU6ICdTdGFydCBEYXRlJyxcbiAgZW5kRGF0ZTogJ0VuZCBEYXRlJyxcbiAgc3RhcnRUaW1lOiAnU3RhcnQgVGltZScsXG4gIGVuZFRpbWU6ICdFbmQgVGltZScsXG4gIGNvbG9yOiAnQ29sb3InLFxuXG4gIC8vIEV2ZW50IGZvcm1cbiAgY3JlYXRlRXZlbnQ6ICdDcmVhdGUgRXZlbnQnLFxuICBlZGl0RXZlbnQ6ICdFZGl0IEV2ZW50JyxcbiAgYWRkTmV3RXZlbnQ6ICdBZGQgYSBuZXcgZXZlbnQgdG8geW91ciBjYWxlbmRhcicsXG4gIGVkaXRFdmVudERldGFpbHM6ICdFZGl0IHlvdXIgZXZlbnQgZGV0YWlscycsXG4gIGV2ZW50VGl0bGVQbGFjZWhvbGRlcjogJ0V2ZW50IHRpdGxlJyxcbiAgZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgZGVzY3JpcHRpb24gKG9wdGlvbmFsKScsXG4gIGV2ZW50TG9jYXRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGxvY2F0aW9uIChvcHRpb25hbCknLFxuXG4gIC8vIFJlY3VycmVuY2VcbiAgcmVwZWF0OiAnUmVwZWF0JyxcbiAgcmVwZWF0czogJ1JlcGVhdHMnLFxuICBjdXN0b21SZWN1cnJlbmNlOiAnQ3VzdG9tIHJlY3VycmVuY2UnLFxuICBkYWlseTogJ0RhaWx5JyxcbiAgd2Vla2x5OiAnV2Vla2x5JyxcbiAgbW9udGhseTogJ01vbnRobHknLFxuICB5ZWFybHk6ICdZZWFybHknLFxuICBpbnRlcnZhbDogJ0ludGVydmFsJyxcbiAgcmVwZWF0T246ICdSZXBlYXQgb24nLFxuICBuZXZlcjogJ05ldmVyJyxcbiAgY291bnQ6ICdDb3VudCcsXG4gIGV2ZXJ5OiAnRXZlcnknLFxuICBlbmRzOiAnRW5kcycsXG4gIGFmdGVyOiAnQWZ0ZXInLFxuICBvY2N1cnJlbmNlczogJ29jY3VycmVuY2VzJyxcbiAgb246ICdPbicsXG5cbiAgLy8gUmVjdXJyZW5jZSBlZGl0IGRpYWxvZ1xuICBlZGl0UmVjdXJyaW5nRXZlbnQ6ICdFZGl0IHJlY3VycmluZyBldmVudCcsXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAnRGVsZXRlIHJlY3VycmluZyBldmVudCcsXG4gIGVkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuICAgICdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGVkaXQgaXQ/JyxcbiAgZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcbiAgICAnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBkZWxldGUgaXQ/JyxcbiAgdGhpc0V2ZW50OiAnVGhpcyBldmVudCcsXG4gIHRoaXNFdmVudERlc2NyaXB0aW9uOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcbiAgdGhpc0FuZEZvbGxvd2luZ0V2ZW50czogJ1RoaXMgYW5kIGZvbGxvd2luZyBldmVudHMnLFxuICB0aGlzQW5kRm9sbG93aW5nRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuICBhbGxFdmVudHM6ICdBbGwgZXZlbnRzJyxcbiAgYWxsRXZlbnRzRGVzY3JpcHRpb246ICdFZGl0IHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG4gIG9ubHlDaGFuZ2VUaGlzOiAnT25seSBjaGFuZ2UgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcbiAgY2hhbmdlVGhpc0FuZEZ1dHVyZTogJ0NoYW5nZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcbiAgY2hhbmdlRW50aXJlU2VyaWVzOiAnQ2hhbmdlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG4gIG9ubHlEZWxldGVUaGlzOiAnT25seSBkZWxldGUgdGhpcyBzcGVjaWZpYyBvY2N1cnJlbmNlJyxcbiAgZGVsZXRlVGhpc0FuZEZ1dHVyZTogJ0RlbGV0ZSB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcbiAgZGVsZXRlRW50aXJlU2VyaWVzOiAnRGVsZXRlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllcycsXG5cbiAgLy8gVmlldyB0eXBlc1xuICBtb250aDogJ01vbnRoJyxcbiAgd2VlazogJ1dlZWsnLFxuICBkYXk6ICdEYXknLFxuICB5ZWFyOiAnWWVhcicsXG4gIG1vcmU6ICdtb3JlJyxcblxuICAvLyBEYXlzIG9mIHdlZWtcbiAgc3VuZGF5OiAnU3VuZGF5JyxcbiAgbW9uZGF5OiAnTW9uZGF5JyxcbiAgdHVlc2RheTogJ1R1ZXNkYXknLFxuICB3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuICB0aHVyc2RheTogJ1RodXJzZGF5JyxcbiAgZnJpZGF5OiAnRnJpZGF5JyxcbiAgc2F0dXJkYXk6ICdTYXR1cmRheScsXG5cbiAgLy8gRGF5cyBzaG9ydFxuICBzdW46ICdTdW4nLFxuICBtb246ICdNb24nLFxuICB0dWU6ICdUdWUnLFxuICB3ZWQ6ICdXZWQnLFxuICB0aHU6ICdUaHUnLFxuICBmcmk6ICdGcmknLFxuICBzYXQ6ICdTYXQnLFxuXG4gIC8vIE1vbnRoc1xuICBqYW51YXJ5OiAnSmFudWFyeScsXG4gIGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuICBtYXJjaDogJ01hcmNoJyxcbiAgYXByaWw6ICdBcHJpbCcsXG4gIG1heTogJ01heScsXG4gIGp1bmU6ICdKdW5lJyxcbiAganVseTogJ0p1bHknLFxuICBhdWd1c3Q6ICdBdWd1c3QnLFxuICBzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuICBvY3RvYmVyOiAnT2N0b2JlcicsXG4gIG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuICBkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiLy8gTWFpbiBjYWxlbmRhciBjb21wb25lbnRcbmV4cG9ydCB7IElsYW15Q2FsZW5kYXIgfSBmcm9tICcuL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvaWxhbXktY2FsZW5kYXInXG5cbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tcbmV4cG9ydCB7IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5cbi8vIFJSVUxFLWJhc2VkIHJlY3VycmVuY2Ugc3lzdGVtXG5leHBvcnQge1xuICBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcbiAgaXNSZWN1cnJpbmdFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnLi9saWIvcmVjdXJyZW5jZS1oYW5kbGVyL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBJbGFteUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB9IGZyb20gJy4vY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBGcmVxdWVuY3ksIFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5cbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuICBUcmFuc2xhdGlvbnMsXG4gIFRyYW5zbGF0aW9uS2V5LFxuICBUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFDQSw0QkFBUyw0QkFBaUI7QUFDMUIsNEJBQWdCOzs7QUNFaEI7QUFvRE8sSUFBTSxrQkFDWCxjQUErQyxTQUFTO0FBRW5ELElBQU0scUJBQXFCLE1BQTJCO0FBQUEsRUFDM0QsTUFBTSxVQUFVLFdBQVcsZUFBZTtBQUFBLEVBQzFDLElBQUksWUFBWSxXQUFXO0FBQUEsSUFDekIsTUFBTSxJQUFJLE1BQU0sMkRBQTJEO0FBQUEsRUFDN0U7QUFBQSxFQUNBLE9BQU87QUFBQTtBQStCRixJQUFNLDBCQUEwQixNQUFxQztBQUFBLEVBQzFFLE1BQU0sVUFBVSxXQUFXLGVBQWU7QUFBQSxFQUMxQyxJQUFJLFlBQVksV0FBVztBQUFBLElBQ3pCLE1BQU0sSUFBSSxNQUNSLGdFQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsYUFBYSxRQUFRO0FBQUEsSUFDckIsTUFBTSxRQUFRO0FBQUEsSUFDZCxRQUFRLFFBQVE7QUFBQSxJQUNoQixpQkFBaUIsUUFBUTtBQUFBLElBQ3pCLGVBQWUsUUFBUTtBQUFBLElBQ3ZCLGNBQWMsUUFBUTtBQUFBLElBQ3RCLGdCQUFnQixRQUFRO0FBQUEsSUFDeEIsZ0JBQWdCLFFBQVE7QUFBQSxJQUN4QixZQUFZLFFBQVE7QUFBQSxJQUNwQixTQUFTLFFBQVE7QUFBQSxJQUNqQixZQUFZLFFBQVE7QUFBQSxJQUNwQixZQUFZLFFBQVE7QUFBQSxJQUNwQixPQUFPLFFBQVE7QUFBQSxJQUNmLFVBQVUsUUFBUTtBQUFBLElBQ2xCLGFBQWEsUUFBUTtBQUFBLElBQ3JCLGFBQWEsUUFBUTtBQUFBLElBQ3JCLGVBQWUsUUFBUTtBQUFBLElBQ3ZCLGdCQUFnQixRQUFRO0FBQUEsRUFDMUI7QUFBQTs7O0FDeEhGO0FBRUE7OztBQ0RBOzs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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LE9BQU07QUFBQSxzQkFHeEIsTUFhRSxvQkFiRjtBQUFBLGtDQUNFLE1BV0Usa0JBWEY7QUFBQSxVQUFpQixNQUFLO0FBQUEsVUFBdEIsMEJBQ0UsTUFTRSxRQUFPLEtBVFQ7QUFBQSxZQUVFLFNBQVMsRUFBRSxTQUFTLEdBQUcsR0FBRyxHQUFHO0FBQUEsWUFDN0IsU0FBUyxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUU7QUFBQSxZQUM1QixNQUFNLEVBQUUsU0FBUyxHQUFHLEdBQUcsSUFBSTtBQUFBLFlBQzNCLFlBQVksRUFBRSxVQUFVLEtBQUssTUFBTSxZQUFZO0FBQUEsWUFDL0MsV0FBVTtBQUFBLFlBTlosVUFRRyxRQUFRO0FBQUEsYUFQSixJQVFMO0FBQUEsU0FDRjtBQUFBLE9BQ0Y7QUFBQSxNQUdELG1DQUNDLE1BQUMsV0FBRDtBQUFBLFFBQ0UsU0FBUztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsT0FDWjtBQUFBO0FBQUEsR0FFRjtBQUFBO0FBSU4sSUFBTSx5QkFBeUI7QUFDeEIsSUFBTSxnQkFBOEM7QUFBQSxFQUN6RDtBQUFBLEVBQ0EsaUJBQWlCO0FBQUEsRUFDakIsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQUEsRUFDbkIsc0JBQXNCO0FBQUEsRUFDdEI7QUFBQSxFQUNBO0FBQUEsTUFDSTtBQUFBLEVBQ0osdUJBQ0UsTUEwQkUsa0JBMUJGO0FBQUEsSUFDRSxRQUFRLG1DQUFtQyxNQUFNO0FBQUEsSUFDakQsZ0JBQWdCLHFCQUFxQjtBQUFBLElBQ3JDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBdkJGLDBCQXlCRSxNQUFDLGlCQUFELEVBQWlCO0FBQUEsR0FDakI7QUFBQTs7O0FJbEhOLGtCQUFTOyIsCiAgImRlYnVnSWQiOiAiQjQ0N0VGMDVCOEZGODI4MzY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|