@xbstracts/medusa-coupons 0.0.4 → 0.0.5
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/.medusa/server/src/admin/index.js +75 -21
- package/.medusa/server/src/admin/index.mjs +75 -21
- package/.medusa/server/src/api/validators.js +10 -2
- package/.medusa/server/src/modules/coupon/index.js +3 -2
- package/.medusa/server/src/modules/coupon/loaders/validate-options.js +8 -0
- package/.medusa/server/src/modules/coupon/migrations/Migration20260725000000.js +26 -0
- package/.medusa/server/src/modules/coupon/service.js +5 -4
- package/.medusa/server/src/modules/coupon/utils.js +181 -18
- package/.medusa/server/src/vendor/index.mjs +75 -21
- package/README.md +24 -0
- package/package.json +2 -1
|
@@ -367,7 +367,9 @@ function emptyCoupon(options) {
|
|
|
367
367
|
code_prefix: "COUPON",
|
|
368
368
|
shared_code: "",
|
|
369
369
|
expiration_type: "duration",
|
|
370
|
-
|
|
370
|
+
expiration_duration: "30",
|
|
371
|
+
expiration_duration_unit: "days",
|
|
372
|
+
expiration_time_policy: "day_end",
|
|
371
373
|
expiration_date: "",
|
|
372
374
|
expiration_cap_by_campaign: true,
|
|
373
375
|
expiration_cap_at: "",
|
|
@@ -485,7 +487,11 @@ function formsFromRow(row, options) {
|
|
|
485
487
|
code_prefix: config3.code_prefix || "",
|
|
486
488
|
shared_code: config3.shared_code || "",
|
|
487
489
|
expiration_type: config3.expiration_policy?.type || "duration",
|
|
488
|
-
|
|
490
|
+
expiration_duration: config3.expiration_policy?.type === "duration" ? String(
|
|
491
|
+
config3.expiration_policy.duration ?? config3.expiration_policy.duration_days ?? 30
|
|
492
|
+
) : "30",
|
|
493
|
+
expiration_duration_unit: config3.expiration_policy?.type === "duration" ? config3.expiration_policy.duration_unit || "days" : "days",
|
|
494
|
+
expiration_time_policy: config3.expiration_policy?.type === "duration" || config3.expiration_policy?.type === "month_end" ? config3.expiration_policy.time_policy || "exactly" : "day_end",
|
|
489
495
|
expiration_date: config3.expiration_policy?.type === "fixed" ? toDateTimeLocal(config3.expiration_policy.expires_at) : "",
|
|
490
496
|
expiration_cap_by_campaign: expirationPolicy.type === "none" || expirationPolicy.cap_by_campaign !== false,
|
|
491
497
|
expiration_cap_at: expirationPolicy.type === "none" ? "" : toDateTimeLocal(expirationPolicy.cap_at),
|
|
@@ -1419,8 +1425,8 @@ function CouponProductModal({
|
|
|
1419
1425
|
return false;
|
|
1420
1426
|
}
|
|
1421
1427
|
if (coupon.expiration_type === "duration") {
|
|
1422
|
-
const
|
|
1423
|
-
if (!Number.isInteger(
|
|
1428
|
+
const duration = Number(coupon.expiration_duration);
|
|
1429
|
+
if (!Number.isInteger(duration) || duration < 1) return false;
|
|
1424
1430
|
} else if (coupon.expiration_type === "fixed") {
|
|
1425
1431
|
const expiration = new Date(coupon.expiration_date);
|
|
1426
1432
|
if (!coupon.expiration_date || Number.isNaN(expiration.getTime())) {
|
|
@@ -1625,9 +1631,16 @@ function CouponProductModal({
|
|
|
1625
1631
|
expires_at: new Date(coupon.expiration_date).toISOString(),
|
|
1626
1632
|
cap_by_campaign: coupon.expiration_cap_by_campaign,
|
|
1627
1633
|
cap_at: coupon.expiration_cap_at ? new Date(coupon.expiration_cap_at).toISOString() : null
|
|
1634
|
+
} : coupon.expiration_type === "month_end" ? {
|
|
1635
|
+
type: "month_end",
|
|
1636
|
+
time_policy: coupon.expiration_time_policy,
|
|
1637
|
+
cap_by_campaign: coupon.expiration_cap_by_campaign,
|
|
1638
|
+
cap_at: coupon.expiration_cap_at ? new Date(coupon.expiration_cap_at).toISOString() : null
|
|
1628
1639
|
} : {
|
|
1629
1640
|
type: "duration",
|
|
1630
|
-
|
|
1641
|
+
duration: Number(coupon.expiration_duration) || 30,
|
|
1642
|
+
duration_unit: coupon.expiration_duration_unit,
|
|
1643
|
+
time_policy: coupon.expiration_time_policy,
|
|
1631
1644
|
cap_by_campaign: coupon.expiration_cap_by_campaign,
|
|
1632
1645
|
cap_at: coupon.expiration_cap_at ? new Date(coupon.expiration_cap_at).toISOString() : null
|
|
1633
1646
|
},
|
|
@@ -2022,25 +2035,45 @@ function CouponProductModal({
|
|
|
2022
2035
|
children: [
|
|
2023
2036
|
/* @__PURE__ */ jsx2(Select.Trigger, { children: /* @__PURE__ */ jsx2(Select.Value, {}) }),
|
|
2024
2037
|
/* @__PURE__ */ jsxs2(Select.Content, { children: [
|
|
2025
|
-
/* @__PURE__ */ jsx2(Select.Item, { value: "none", children: "
|
|
2038
|
+
/* @__PURE__ */ jsx2(Select.Item, { value: "none", children: "No expiration" }),
|
|
2039
|
+
/* @__PURE__ */ jsx2(Select.Item, { value: "month_end", children: "End of same month" }),
|
|
2026
2040
|
/* @__PURE__ */ jsx2(Select.Item, { value: "duration", children: "Duration after issue" }),
|
|
2027
2041
|
/* @__PURE__ */ jsx2(Select.Item, { value: "fixed", children: "Fixed date" })
|
|
2028
2042
|
] })
|
|
2029
2043
|
]
|
|
2030
2044
|
}
|
|
2031
2045
|
) }),
|
|
2032
|
-
coupon.expiration_type === "duration" ? /* @__PURE__ */
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2046
|
+
coupon.expiration_type === "duration" ? /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
2047
|
+
/* @__PURE__ */ jsx2(Field, { label: "Duration", children: /* @__PURE__ */ jsx2(
|
|
2048
|
+
Input,
|
|
2049
|
+
{
|
|
2050
|
+
type: "number",
|
|
2051
|
+
min: 1,
|
|
2052
|
+
value: coupon.expiration_duration,
|
|
2053
|
+
onChange: (event) => setCoupon((current) => ({
|
|
2054
|
+
...current,
|
|
2055
|
+
expiration_duration: event.target.value
|
|
2056
|
+
}))
|
|
2057
|
+
}
|
|
2058
|
+
) }),
|
|
2059
|
+
/* @__PURE__ */ jsx2(Field, { label: "Duration unit", children: /* @__PURE__ */ jsxs2(
|
|
2060
|
+
Select,
|
|
2061
|
+
{
|
|
2062
|
+
value: coupon.expiration_duration_unit,
|
|
2063
|
+
onValueChange: (expiration_duration_unit) => setCoupon((current) => ({
|
|
2064
|
+
...current,
|
|
2065
|
+
expiration_duration_unit
|
|
2066
|
+
})),
|
|
2067
|
+
children: [
|
|
2068
|
+
/* @__PURE__ */ jsx2(Select.Trigger, { children: /* @__PURE__ */ jsx2(Select.Value, {}) }),
|
|
2069
|
+
/* @__PURE__ */ jsxs2(Select.Content, { children: [
|
|
2070
|
+
/* @__PURE__ */ jsx2(Select.Item, { value: "days", children: "Days" }),
|
|
2071
|
+
/* @__PURE__ */ jsx2(Select.Item, { value: "months", children: "Months" })
|
|
2072
|
+
] })
|
|
2073
|
+
]
|
|
2074
|
+
}
|
|
2075
|
+
) })
|
|
2076
|
+
] }) : coupon.expiration_type === "fixed" ? /* @__PURE__ */ jsx2(Field, { label: "Expires at", children: /* @__PURE__ */ jsx2(
|
|
2044
2077
|
Input,
|
|
2045
2078
|
{
|
|
2046
2079
|
type: "datetime-local",
|
|
@@ -2051,6 +2084,23 @@ function CouponProductModal({
|
|
|
2051
2084
|
}))
|
|
2052
2085
|
}
|
|
2053
2086
|
) }) : null,
|
|
2087
|
+
(coupon.expiration_type === "duration" || coupon.expiration_type === "month_end") && /* @__PURE__ */ jsx2(Field, { label: "Expiration time", children: /* @__PURE__ */ jsxs2(
|
|
2088
|
+
Select,
|
|
2089
|
+
{
|
|
2090
|
+
value: coupon.expiration_time_policy,
|
|
2091
|
+
onValueChange: (expiration_time_policy) => setCoupon((current) => ({
|
|
2092
|
+
...current,
|
|
2093
|
+
expiration_time_policy
|
|
2094
|
+
})),
|
|
2095
|
+
children: [
|
|
2096
|
+
/* @__PURE__ */ jsx2(Select.Trigger, { children: /* @__PURE__ */ jsx2(Select.Value, {}) }),
|
|
2097
|
+
/* @__PURE__ */ jsxs2(Select.Content, { children: [
|
|
2098
|
+
/* @__PURE__ */ jsx2(Select.Item, { value: "day_end", children: "End of day" }),
|
|
2099
|
+
/* @__PURE__ */ jsx2(Select.Item, { value: "exactly", children: "Exactly" })
|
|
2100
|
+
] })
|
|
2101
|
+
]
|
|
2102
|
+
}
|
|
2103
|
+
) }),
|
|
2054
2104
|
coupon.expiration_type !== "none" && /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
2055
2105
|
/* @__PURE__ */ jsx2(Field, { label: "Cap expiration", children: /* @__PURE__ */ jsxs2(
|
|
2056
2106
|
"div",
|
|
@@ -2681,9 +2731,13 @@ function expirationPolicyLabel(snapshot) {
|
|
|
2681
2731
|
const policy = snapshot?.expiration_policy;
|
|
2682
2732
|
const type = snapshotString(policy, "type");
|
|
2683
2733
|
if (type === "none") return "No expiration";
|
|
2734
|
+
if (type === "month_end") {
|
|
2735
|
+
return `End of same month (${snapshotString(policy, "time_policy") || "day_end"})`;
|
|
2736
|
+
}
|
|
2684
2737
|
if (type === "duration") {
|
|
2685
|
-
const
|
|
2686
|
-
|
|
2738
|
+
const duration = snapshotNumber(policy, "duration") ?? snapshotNumber(policy, "duration_days") ?? 0;
|
|
2739
|
+
const unit = snapshotString(policy, "duration_unit") || "days";
|
|
2740
|
+
return `${duration} ${unit} after issuance`;
|
|
2687
2741
|
}
|
|
2688
2742
|
if (type === "fixed") {
|
|
2689
2743
|
return `Fixed date ${formatDateTime(snapshotString(policy, "expires_at"))}`;
|
|
@@ -3271,4 +3325,4 @@ var admin_default = {
|
|
|
3271
3325
|
export {
|
|
3272
3326
|
admin_default as default
|
|
3273
3327
|
};
|
|
3274
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2FkbWluL2kxOG4vZW4uanNvbiIsICIuLi8uLi8uLi8uLi9zcmMvYWRtaW4vaTE4bi9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG1lZHVzYWpzL2FkbWluLXNkay9kaXN0L2luZGV4Lm1qcyIsICIuLi8uLi8uLi8uLi9zcmMvYWRtaW4vcm91dGVzL2NvdXBvbnMvcGFnZS50c3giLCAiLi4vLi4vLi4vLi4vc3JjL2Rhc2hib2FyZC9jb3Vwb25zL2NvdXBvbi1tYW5hZ2VyLnRzeCIsICIuLi8uLi8uLi8uLi9zcmMvZGFzaGJvYXJkL2NvdXBvbnMvY291cG9uLXByb2R1Y3RzLXBhZ2UudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9kYXNoYm9hcmQvY291cG9ucy9lbXB0eS1zdGF0ZS50c3giLCAiLi4vLi4vLi4vLi4vc3JjL2FkbWluL3JvdXRlcy9jb3Vwb25zL1tpZF0vcGFnZS50c3giLCAiLi4vLi4vLi4vLi4vc3JjL2FkbWluL3JvdXRlcy9jb3Vwb25zL3Byb2R1Y3RzL3BhZ2UudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9hZG1pbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsie1xuICBcImNvdXBvbnNcIjoge1xuICAgIFwibWVudVwiOiBcIkNvdXBvbnNcIixcbiAgICBcInByb2R1Y3RzTWVudVwiOiBcIkNvdXBvbiBQcm9kdWN0c1wiXG4gIH1cbn1cbiIsICJpbXBvcnQgZW4gZnJvbSBcIi4vZW4uanNvblwiXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjogZW4sXG4gIH0sXG59XG4iLCAiLy8gc3JjL2NvbmZpZy91dGlscy50c1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ0hlbHBlcihjb25maWcpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb25maWcsXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB0byBhbGxvdyB0aGUgY29uZmlnIHRvIGJlIGV4cG9ydGVkLFxuICAgICAqIHdoaWxlIHN0aWxsIGFsbG93aW5nIEhNUiB0byB3b3JrIGNvcnJlY3RseS5cbiAgICAgKlxuICAgICAqIEl0IHRyaWNrcyBGYXN0IFJlZnJlc2ggaW50byB0aGlua2luZyB0aGF0IHRoZSBjb25maWcgaXMgYSBSZWFjdCBjb21wb25lbnQsXG4gICAgICogd2hpY2ggYWxsb3dzIGl0IHRvIGJlIHVwZGF0ZWQgd2l0aG91dCBhIGZ1bGwgcGFnZSByZWxvYWQuXG4gICAgICovXG4gICAgJCR0eXBlb2Y6IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpXG4gIH07XG59XG5mdW5jdGlvbiBkZWZpbmVXaWRnZXRDb25maWcoY29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVDb25maWdIZWxwZXIoY29uZmlnKTtcbn1cbmZ1bmN0aW9uIGRlZmluZVJvdXRlQ29uZmlnKGNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlQ29uZmlnSGVscGVyKGNvbmZpZyk7XG59XG5leHBvcnQge1xuICBkZWZpbmVSb3V0ZUNvbmZpZyxcbiAgZGVmaW5lV2lkZ2V0Q29uZmlnXG59O1xuIiwgImltcG9ydCB7IGRlZmluZVJvdXRlQ29uZmlnIH0gZnJvbSBcIkBtZWR1c2Fqcy9hZG1pbi1zZGtcIlxuaW1wb3J0IHsgUmVjZWlwdFBlcmNlbnQgfSBmcm9tIFwiQG1lZHVzYWpzL2ljb25zXCJcbmltcG9ydCB7IENvdXBvbnNQYWdlVmlldyB9IGZyb20gXCIuLi8uLi8uLi9kYXNoYm9hcmQvY291cG9ucy9jb3Vwb24tbWFuYWdlclwiXG5cbmV4cG9ydCBjb25zdCBjb25maWcgPSBkZWZpbmVSb3V0ZUNvbmZpZyh7XG4gIGxhYmVsOiBcIkNvdXBvbnNcIixcbiAgaWNvbjogUmVjZWlwdFBlcmNlbnQsXG59KVxuXG5jb25zdCBDb3Vwb25zUGFnZSA9ICgpID0+IHtcbiAgcmV0dXJuIDxDb3Vwb25zUGFnZVZpZXcgYXBpQmFzZT1cIi9hZG1pblwiIHRpdGxlPVwiQ291cG9uc1wiIC8+XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvdXBvbnNQYWdlXG4iLCAiaW1wb3J0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHR5cGUgQ2hhbmdlRXZlbnQsXG4gIHR5cGUgQ1NTUHJvcGVydGllcyxcbiAgdHlwZSBSZWFjdE5vZGUsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge1xuICBBcnJvd1BhdGgsXG4gIFBlbmNpbFNxdWFyZSxcbiAgUGx1cyxcbiAgU2hvcHBpbmdDYXJ0LFxuICBUcmFzaCxcbiAgVHJpYW5nbGVSaWdodE1pbmksXG59IGZyb20gXCJAbWVkdXNhanMvaWNvbnNcIlxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDb250YWluZXIsXG4gIENvcHksXG4gIEN1cnJlbmN5SW5wdXQsXG4gIEZvY3VzTW9kYWwsXG4gIEhlYWRpbmcsXG4gIElucHV0LFxuICBMYWJlbCxcbiAgUHJvZ3Jlc3NUYWJzLFxuICBTZWxlY3QsXG4gIFN0YXR1c0JhZGdlLFxuICBTd2l0Y2gsXG4gIFRhYmxlLFxuICBUYWJzLFxuICBUZXh0LFxuICBUZXh0YXJlYSxcbiAgdG9hc3QsXG4gIHVzZVByb21wdCxcbn0gZnJvbSBcIkBtZWR1c2Fqcy91aVwiXG5pbXBvcnQgeyBDb3Vwb25Qcm9kdWN0c1BhZ2UgfSBmcm9tIFwiLi9jb3Vwb24tcHJvZHVjdHMtcGFnZVwiXG5pbXBvcnQgeyBDb3Vwb25FbXB0eVN0YXRlIH0gZnJvbSBcIi4vZW1wdHktc3RhdGVcIlxuXG5kZWNsYXJlIGNvbnN0IF9fQkFDS0VORF9VUkxfXzogc3RyaW5nXG5cbnR5cGUgQXBpQmFzZSA9IFwiL2FkbWluXCIgfCBcIi92ZW5kb3JcIlxudHlwZSBCZW5lZml0VHlwZSA9IFwiZml4ZWRfYW1vdW50XCIgfCBcInBlcmNlbnRhZ2VcIiB8IFwiZnJlZV9zaGlwcGluZ1wiIHwgXCJidXlfZ2V0XCJcbnR5cGUgQ29kZVN0cmF0ZWd5ID0gXCJ1bmlxdWVfY29kZVwiIHwgXCJzaGFyZWRfY29kZVwiXG50eXBlIE1pcnJvck1vZGUgPSBcIm5vbmVcIiB8IFwibWFudWFsXCIgfCBcImF1dG9cIlxudHlwZSBQcm9tb3Rpb25TdGF0dXMgPSBcImRyYWZ0XCIgfCBcImFjdGl2ZVwiIHwgXCJpbmFjdGl2ZVwiXG50eXBlIENhbXBhaWduTW9kZSA9IFwibm9uZVwiIHwgXCJleGlzdGluZ1wiIHwgXCJuZXdcIlxudHlwZSBFeHBpcmF0aW9uUG9saWN5VHlwZSA9IFwiZHVyYXRpb25cIiB8IFwiZml4ZWRcIlxudHlwZSBXaXphcmRTdGVwID0gXCJkZXRhaWxzXCIgfCBcIm9yZ2FuaXplXCIgfCBcInZhcmlhbnRzXCIgfCBcImNvdXBvblwiIHwgXCJjYW1wYWlnblwiXG5cbnR5cGUgQ291cG9uUHJvZHVjdENvbmZpZyA9IHtcbiAgaWQ6IHN0cmluZ1xuICBlbmFibGVkOiBib29sZWFuXG4gIHByb2R1Y3RfaWQ6IHN0cmluZ1xuICBiZW5lZml0X3R5cGU6IEJlbmVmaXRUeXBlXG4gIGFtb3VudDogbnVtYmVyIHwgbnVsbFxuICBwZXJjZW50YWdlOiBudW1iZXIgfCBudWxsXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZyB8IG51bGxcbiAgY29kZV9zdHJhdGVneTogQ29kZVN0cmF0ZWd5XG4gIGNvZGVfcHJlZml4OiBzdHJpbmcgfCBudWxsXG4gIHNoYXJlZF9jb2RlOiBzdHJpbmcgfCBudWxsXG4gIGV4cGlyYXRpb25fcG9saWN5OlxuICAgIHwge1xuICAgICAgICB0eXBlOiBcImR1cmF0aW9uXCJcbiAgICAgICAgZHVyYXRpb25fZGF5czogbnVtYmVyXG4gICAgICAgIGNhcF9ieV9jYW1wYWlnbj86IGJvb2xlYW5cbiAgICAgICAgY2FwX2F0Pzogc3RyaW5nIHwgbnVsbFxuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiBcImZpeGVkXCJcbiAgICAgICAgZXhwaXJlc19hdDogc3RyaW5nXG4gICAgICAgIGNhcF9ieV9jYW1wYWlnbj86IGJvb2xlYW5cbiAgICAgICAgY2FwX2F0Pzogc3RyaW5nIHwgbnVsbFxuICAgICAgfVxuICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IG51bWJlclxuICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IE1pcnJvck1vZGVcbiAgcHJvbW90aW9uX3N0YXR1cz86IFByb21vdGlvblN0YXR1cyB8IG51bGxcbiAgY2FtcGFpZ25fbW9kZT86IENhbXBhaWduTW9kZSB8IG51bGxcbiAgY2FtcGFpZ25faWQ/OiBzdHJpbmcgfCBudWxsXG4gIGNhbXBhaWduX3NuYXBzaG90PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIGNvbmZpZ192ZXJzaW9uOiBudW1iZXJcbn1cblxudHlwZSBDb3Vwb25WYXJpYW50Q29uZmlnID0gUGFydGlhbDxDb3Vwb25Qcm9kdWN0Q29uZmlnPiAmIHtcbiAgaWQ6IHN0cmluZ1xuICBwcm9kdWN0X2NvbmZpZ19pZDogc3RyaW5nXG4gIHZhcmlhbnRfaWQ6IHN0cmluZ1xufVxuXG50eXBlIFByb2R1Y3RWYXJpYW50ID0ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsXG4gIHNrdT86IHN0cmluZyB8IG51bGxcbiAgcHJpY2VzPzogeyBjdXJyZW5jeV9jb2RlPzogc3RyaW5nOyBhbW91bnQ/OiBudW1iZXIgfVtdXG59XG5cbnR5cGUgUHJvZHVjdFJlY29yZCA9IHtcbiAgaWQ6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbFxuICBzdWJ0aXRsZT86IHN0cmluZyB8IG51bGxcbiAgaGFuZGxlOiBzdHJpbmcgfCBudWxsXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbFxuICBzdGF0dXM6IHN0cmluZyB8IG51bGxcbiAgdGh1bWJuYWlsOiBzdHJpbmcgfCBudWxsXG4gIGRpc2NvdW50YWJsZT86IGJvb2xlYW5cbiAgdHlwZV9pZD86IHN0cmluZyB8IG51bGxcbiAgY29sbGVjdGlvbl9pZD86IHN0cmluZyB8IG51bGxcbiAgc2hpcHBpbmdfcHJvZmlsZV9pZD86IHN0cmluZyB8IG51bGxcbiAgdmFyaWFudHM/OiBQcm9kdWN0VmFyaWFudFtdXG4gIGNhdGVnb3JpZXM/OiB7IGlkOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfCBudWxsIH1bXVxuICB0YWdzPzogeyBpZDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bGwgfVtdXG4gIHNhbGVzX2NoYW5uZWxzPzogeyBpZDogc3RyaW5nOyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9W11cbn1cblxudHlwZSBDb3Vwb25Qcm9kdWN0Um93ID0ge1xuICBpZDogc3RyaW5nXG4gIHByb2R1Y3Q6IFByb2R1Y3RSZWNvcmRcbiAgY291cG9uX3Byb2R1Y3RfY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnXG4gIGNvdXBvbl9wcm9kdWN0X3ZhcmlhbnRfY29uZmlnczogQ291cG9uVmFyaWFudENvbmZpZ1tdXG4gIGVudGl0bGVtZW50c19jb3VudDogbnVtYmVyXG59XG5cbnR5cGUgQ291cG9uRW50aXRsZW1lbnQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgb3JpZ2luPzogXCJwdXJjaGFzZVwiIHwgXCJleHRlcm5hbFwiXG4gIGN1c3RvbWVyX2lkOiBzdHJpbmcgfCBudWxsXG4gIGVtYWlsOiBzdHJpbmcgfCBudWxsXG4gIGNvZGU6IHN0cmluZyB8IG51bGxcbiAgc2hhcmVkX2NvZGU6IHN0cmluZyB8IG51bGxcbiAgc3RhdHVzOiBzdHJpbmdcbiAgcHJvZHVjdF9pZDogc3RyaW5nIHwgbnVsbFxuICB2YXJpYW50X2lkOiBzdHJpbmcgfCBudWxsXG4gIG9yZGVyX2lkOiBzdHJpbmcgfCBudWxsXG4gIGxpbmVfaXRlbV9pZDogc3RyaW5nIHwgbnVsbFxuICBpc3N1YW5jZV9pZD86IHN0cmluZyB8IG51bGxcbiAgY29uZmlnX2lkPzogc3RyaW5nIHwgbnVsbFxuICB2YXJpYW50X2NvbmZpZ19pZD86IHN0cmluZyB8IG51bGxcbiAgZXhwaXJlc19hdDogc3RyaW5nIHwgbnVsbFxuICByZWRlZW1lZF9hdDogc3RyaW5nIHwgbnVsbFxuICBjcmVhdGVkX2F0Pzogc3RyaW5nXG4gIGJlbmVmaXRfc25hcHNob3Q/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgc291cmNlX3NuYXBzaG90PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIGV4dGVybmFsX3JlZmVyZW5jZT86IHN0cmluZyB8IG51bGxcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgc2VsbGVyX3RhcmdldHM/OiBBcnJheTx7XG4gICAgc2VsbGVyX2lkOiBzdHJpbmdcbiAgICBzZWxsZXJfbWVtYmVyX2lkPzogc3RyaW5nIHwgbnVsbFxuICB9PlxufVxuXG50eXBlIENvdXBvbklzc3VhbmNlUmVjb3JkID0ge1xuICBpZDogc3RyaW5nXG4gIHN0YXR1cz86IHN0cmluZyB8IG51bGxcbiAgcXVhbnRpdHk/OiBudW1iZXIgfCBudWxsXG4gIGNvbmZpZ19zbmFwc2hvdD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICBpc3N1ZWRfY291bnQ/OiBudW1iZXIgfCBudWxsXG4gIGZhaWxlZF9jb3VudD86IG51bWJlciB8IG51bGxcbiAgY3JlYXRlZF9hdD86IHN0cmluZ1xuICB1cGRhdGVkX2F0Pzogc3RyaW5nXG59XG5cbnR5cGUgQ291cG9uT3JkZXJTdW1tYXJ5ID0ge1xuICBpZDogc3RyaW5nXG4gIGRpc3BsYXlfaWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgZW1haWw6IHN0cmluZyB8IG51bGxcbiAgY3VzdG9tZXJfaWQ6IHN0cmluZyB8IG51bGxcbiAgY3VycmVuY3lfY29kZTogc3RyaW5nIHwgbnVsbFxuICB0b3RhbDogbnVtYmVyIHwgbnVsbFxuICBjcmVhdGVkX2F0OiBzdHJpbmcgfCBudWxsXG59XG5cbnR5cGUgQ291cG9uRW50aXRsZW1lbnREZXRhaWwgPSB7XG4gIGN1c3RvbWVyX2NvdXBvbl9lbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnRcbiAgY291cG9uX2lzc3VhbmNlPzogQ291cG9uSXNzdWFuY2VSZWNvcmQgfCBudWxsXG4gIG9yZGVyPzogQ291cG9uT3JkZXJTdW1tYXJ5IHwgbnVsbFxufVxuXG50eXBlIE9wdGlvblJlY29yZCA9IHtcbiAgaWQ6IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICB0aXRsZT86IHN0cmluZyB8IG51bGxcbiAgdmFsdWU/OiBzdHJpbmcgfCBudWxsXG4gIGhhbmRsZT86IHN0cmluZyB8IG51bGxcbiAgY2FtcGFpZ25faWRlbnRpZmllcj86IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBDdXJyZW5jeU9wdGlvbiA9IHtcbiAgY29kZTogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzeW1ib2w6IHN0cmluZ1xuICBzeW1ib2xfbmF0aXZlOiBzdHJpbmdcbiAgaXNfZGVmYXVsdDogYm9vbGVhblxufVxuXG50eXBlIE9wdGlvbnNQYXlsb2FkID0ge1xuICBjdXJyZW5jaWVzPzogQ3VycmVuY3lPcHRpb25bXVxuICBwcm9kdWN0X3R5cGVzPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF9jb2xsZWN0aW9ucz86IE9wdGlvblJlY29yZFtdXG4gIHByb2R1Y3RfY2F0ZWdvcmllcz86IE9wdGlvblJlY29yZFtdXG4gIHByb2R1Y3RfdGFncz86IE9wdGlvblJlY29yZFtdXG4gIHNhbGVzX2NoYW5uZWxzPzogT3B0aW9uUmVjb3JkW11cbiAgc2hpcHBpbmdfcHJvZmlsZXM/OiBPcHRpb25SZWNvcmRbXVxuICBjYW1wYWlnbnM/OiBPcHRpb25SZWNvcmRbXVxuICBzZWxsZXJzPzogT3B0aW9uUmVjb3JkW11cbn1cblxudHlwZSBQcm9kdWN0Rm9ybVN0YXRlID0ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgc3VidGl0bGU6IHN0cmluZ1xuICBoYW5kbGU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIHRodW1ibmFpbDogc3RyaW5nXG4gIHN0YXR1czogc3RyaW5nXG4gIGRpc2NvdW50YWJsZTogYm9vbGVhblxuICBzZWxsZXJfaWQ6IHN0cmluZ1xuICB0eXBlX2lkOiBzdHJpbmdcbiAgY29sbGVjdGlvbl9pZDogc3RyaW5nXG4gIGNhdGVnb3J5X2lkOiBzdHJpbmdcbiAgdGFnX2lkOiBzdHJpbmdcbiAgc2FsZXNfY2hhbm5lbF9pZDogc3RyaW5nXG4gIHZhcmlhbnRzOiBWYXJpYW50Rm9ybVN0YXRlW11cbn1cblxudHlwZSBWYXJpYW50Rm9ybVN0YXRlID0ge1xuICBpZD86IHN0cmluZ1xuICBvdmVycmlkZV9jb25maWdfaWQ/OiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZ1xuICBza3U6IHN0cmluZ1xuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmdcbiAgYW1vdW50OiBzdHJpbmdcbiAgb3ZlcnJpZGVfZW5hYmxlZDogYm9vbGVhblxuICBvdmVycmlkZV9iZW5lZml0X3R5cGU6IEJlbmVmaXRUeXBlXG4gIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGU6IHN0cmluZ1xuICBvdmVycmlkZV9hbW91bnQ6IHN0cmluZ1xuICBvdmVycmlkZV9wZXJjZW50YWdlOiBzdHJpbmdcbn1cblxudHlwZSBDb3Vwb25Gb3JtU3RhdGUgPSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW5cbiAgYmVuZWZpdF90eXBlOiBCZW5lZml0VHlwZVxuICBhbW91bnQ6IHN0cmluZ1xuICBwZXJjZW50YWdlOiBzdHJpbmdcbiAgY3VycmVuY3lfY29kZTogc3RyaW5nXG4gIGNvZGVfc3RyYXRlZ3k6IENvZGVTdHJhdGVneVxuICBjb2RlX3ByZWZpeDogc3RyaW5nXG4gIHNoYXJlZF9jb2RlOiBzdHJpbmdcbiAgZXhwaXJhdGlvbl90eXBlOiBFeHBpcmF0aW9uUG9saWN5VHlwZVxuICBleHBpcmF0aW9uX2RheXM6IHN0cmluZ1xuICBleHBpcmF0aW9uX2RhdGU6IHN0cmluZ1xuICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjogYm9vbGVhblxuICBleHBpcmF0aW9uX2NhcF9hdDogc3RyaW5nXG4gIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogc3RyaW5nXG4gIHByb21vdGlvbl9taXJyb3JfbW9kZTogTWlycm9yTW9kZVxuICBwcm9tb3Rpb25fc3RhdHVzOiBQcm9tb3Rpb25TdGF0dXNcbn1cblxudHlwZSBDYW1wYWlnbkZvcm1TdGF0ZSA9IHtcbiAgbW9kZTogQ2FtcGFpZ25Nb2RlXG4gIGNhbXBhaWduX2lkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGNhbXBhaWduX2lkZW50aWZpZXI6IHN0cmluZ1xuICBzdGFydHNfYXQ6IHN0cmluZ1xuICBlbmRzX2F0OiBzdHJpbmdcbn1cblxuY29uc3QgTk9ORSA9IFwiX19ub25lX19cIlxuY29uc3Qgc3RlcHM6IFdpemFyZFN0ZXBbXSA9IFtcbiAgXCJkZXRhaWxzXCIsXG4gIFwib3JnYW5pemVcIixcbiAgXCJ2YXJpYW50c1wiLFxuICBcImNvdXBvblwiLFxuICBcImNhbXBhaWduXCIsXG5dXG5cbmNvbnN0IGVtcHR5VmFyaWFudDogVmFyaWFudEZvcm1TdGF0ZSA9IHtcbiAgdGl0bGU6IFwiRGVmYXVsdCB2YXJpYW50XCIsXG4gIHNrdTogXCJcIixcbiAgY3VycmVuY3lfY29kZTogXCJcIixcbiAgYW1vdW50OiBcIlwiLFxuICBvdmVycmlkZV9lbmFibGVkOiBmYWxzZSxcbiAgb3ZlcnJpZGVfYmVuZWZpdF90eXBlOiBcImZpeGVkX2Ftb3VudFwiLFxuICBvdmVycmlkZV9jdXJyZW5jeV9jb2RlOiBcIlwiLFxuICBvdmVycmlkZV9hbW91bnQ6IFwiXCIsXG4gIG92ZXJyaWRlX3BlcmNlbnRhZ2U6IFwiXCIsXG59XG5cbmNvbnN0IGVtcHR5UHJvZHVjdDogUHJvZHVjdEZvcm1TdGF0ZSA9IHtcbiAgaWQ6IFwiXCIsXG4gIHRpdGxlOiBcIlwiLFxuICBzdWJ0aXRsZTogXCJcIixcbiAgaGFuZGxlOiBcIlwiLFxuICBkZXNjcmlwdGlvbjogXCJcIixcbiAgdGh1bWJuYWlsOiBcIlwiLFxuICBzdGF0dXM6IFwiZHJhZnRcIixcbiAgZGlzY291bnRhYmxlOiBmYWxzZSxcbiAgc2VsbGVyX2lkOiBcIlwiLFxuICB0eXBlX2lkOiBcIlwiLFxuICBjb2xsZWN0aW9uX2lkOiBcIlwiLFxuICBjYXRlZ29yeV9pZDogXCJcIixcbiAgdGFnX2lkOiBcIlwiLFxuICBzYWxlc19jaGFubmVsX2lkOiBcIlwiLFxuICB2YXJpYW50czogW2VtcHR5VmFyaWFudF0sXG59XG5cbmNvbnN0IGVtcHR5Q291cG9uOiBDb3Vwb25Gb3JtU3RhdGUgPSB7XG4gIGVuYWJsZWQ6IHRydWUsXG4gIGJlbmVmaXRfdHlwZTogXCJmaXhlZF9hbW91bnRcIixcbiAgYW1vdW50OiBcIlwiLFxuICBwZXJjZW50YWdlOiBcIlwiLFxuICBjdXJyZW5jeV9jb2RlOiBcIlwiLFxuICBjb2RlX3N0cmF0ZWd5OiBcInVuaXF1ZV9jb2RlXCIsXG4gIGNvZGVfcHJlZml4OiBcIkNPVVBPTlwiLFxuICBzaGFyZWRfY29kZTogXCJcIixcbiAgZXhwaXJhdGlvbl90eXBlOiBcImR1cmF0aW9uXCIsXG4gIGV4cGlyYXRpb25fZGF5czogXCIzMFwiLFxuICBleHBpcmF0aW9uX2RhdGU6IFwiXCIsXG4gIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOiB0cnVlLFxuICBleHBpcmF0aW9uX2NhcF9hdDogXCJcIixcbiAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBcIjFcIixcbiAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBcIm5vbmVcIixcbiAgcHJvbW90aW9uX3N0YXR1czogXCJkcmFmdFwiLFxufVxuXG5jb25zdCBlbXB0eUNhbXBhaWduOiBDYW1wYWlnbkZvcm1TdGF0ZSA9IHtcbiAgbW9kZTogXCJub25lXCIsXG4gIGNhbXBhaWduX2lkOiBcIlwiLFxuICBuYW1lOiBcIlwiLFxuICBjYW1wYWlnbl9pZGVudGlmaWVyOiBcIlwiLFxuICBzdGFydHNfYXQ6IFwiXCIsXG4gIGVuZHNfYXQ6IFwiXCIsXG59XG5cbmNvbnN0IG1vZGFsQ29udGVudFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG59XG5cbmNvbnN0IG1vZGFsU3RhdGljUm93U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXhTaHJpbms6IDAsXG59XG5cbmNvbnN0IG1vZGFsV2l6YXJkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBmbGV4OiBcIjEgMSBhdXRvXCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIG1pbkhlaWdodDogMCxcbn1cblxuY29uc3QgbW9kYWxCb2R5U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXg6IFwiMSAxIGF1dG9cIixcbiAgbWluSGVpZ2h0OiAwLFxuICBvdmVyZmxvd1k6IFwiYXV0b1wiLFxuICBwYWRkaW5nOiBcIjMycHggMjRweFwiLFxufVxuXG5jb25zdCBtb2RhbEZvcm1TdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgbWFyZ2luOiBcIjAgYXV0b1wiLFxuICBtYXhXaWR0aDogOTIwLFxuICB3aWR0aDogXCJtaW4oOTIwcHgsIDEwMCUpXCIsXG59XG5cbmNvbnN0IHN0YWNrU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICBnYXA6IDE2LFxufVxuXG5jb25zdCB0d29Db2x1bW5HcmlkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZ3JpZFwiLFxuICBnYXA6IDE2LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI2MHB4LCAxZnIpKVwiLFxufVxuXG5jb25zdCB0aHJlZUNvbHVtbkdyaWRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJncmlkXCIsXG4gIGdhcDogMTYsXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjIwcHgsIDFmcikpXCIsXG59XG5cbmNvbnN0IGZvdXJDb2x1bW5HcmlkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZ3JpZFwiLFxuICBnYXA6IDE2LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDE2MHB4LCAxZnIpKVwiLFxufVxuXG5jb25zdCBwYW5lbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBib3JkZXI6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICBib3JkZXJSYWRpdXM6IDgsXG4gIHBhZGRpbmc6IDE2LFxufVxuXG5jb25zdCByb3dCZXR3ZWVuU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBnYXA6IDE2LFxuICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsXG59XG5cbmZ1bmN0aW9uIGJhY2tlbmRVcmwoKSB7XG4gIHJldHVybiB0eXBlb2YgX19CQUNLRU5EX1VSTF9fID09PSBcInN0cmluZ1wiXG4gICAgPyBfX0JBQ0tFTkRfVVJMX18ucmVwbGFjZSgvXFwvJC8sIFwiXCIpXG4gICAgOiBcIlwiXG59XG5cbmZ1bmN0aW9uIGFwaUVycm9yTWVzc2FnZShwYXlsb2FkOiBhbnksIGZhbGxiYWNrOiBzdHJpbmcpIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtcbiAgICBwYXlsb2FkPy5tZXNzYWdlLFxuICAgIHBheWxvYWQ/LmVycm9yPy5tZXNzYWdlLFxuICAgIHBheWxvYWQ/LmVycm9yLFxuICAgIHBheWxvYWQ/LmVycm9ycz8uWzBdPy5tZXNzYWdlLFxuICBdXG4gIGNvbnN0IG1lc3NhZ2UgPSBjYW5kaWRhdGVzLmZpbmQoXG4gICAgKGNhbmRpZGF0ZSkgPT4gdHlwZW9mIGNhbmRpZGF0ZSA9PT0gXCJzdHJpbmdcIiAmJiBjYW5kaWRhdGUudHJpbSgpLFxuICApXG5cbiAgcmV0dXJuIG1lc3NhZ2UgfHwgZmFsbGJhY2sgfHwgXCJSZXF1ZXN0IGZhaWxlZFwiXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwaUZldGNoPFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge30sXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYWNrZW5kVXJsKCl9JHtwYXRofWAsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4ob3B0aW9ucy5ib2R5ID8geyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9IDoge30pLFxuICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgIH0sXG4gIH0pXG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYXBpRXJyb3JNZXNzYWdlKHBheWxvYWQsIHJlc3BvbnNlLnN0YXR1c1RleHQpKVxuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKVxufVxuXG5mdW5jdGlvbiBudW1iZXJPck51bGwodmFsdWU6IHN0cmluZykge1xuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSAmJiBwYXJzZWQgPiAwID8gcGFyc2VkIDogbnVsbFxufVxuXG5mdW5jdGlvbiBvcHRpb25MYWJlbChvcHRpb246IE9wdGlvblJlY29yZCkge1xuICByZXR1cm4gKFxuICAgIG9wdGlvbi5uYW1lIHx8IG9wdGlvbi50aXRsZSB8fCBvcHRpb24udmFsdWUgfHwgb3B0aW9uLmhhbmRsZSB8fCBvcHRpb24uaWRcbiAgKVxufVxuXG5mdW5jdGlvbiBiZW5lZml0TGFiZWwoXG4gIGNvbmZpZzogUGljazxcbiAgICBDb3Vwb25Qcm9kdWN0Q29uZmlnLFxuICAgIFwiYmVuZWZpdF90eXBlXCIgfCBcImFtb3VudFwiIHwgXCJwZXJjZW50YWdlXCIgfCBcImN1cnJlbmN5X2NvZGVcIlxuICA+LFxuKSB7XG4gIGlmIChjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiKSB7XG4gICAgcmV0dXJuIGAke2NvbmZpZy5hbW91bnQgfHwgMH0gJHsoY29uZmlnLmN1cnJlbmN5X2NvZGUgfHwgXCJcIikudG9VcHBlckNhc2UoKX1gXG4gIH1cbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwicGVyY2VudGFnZVwiKSB7XG4gICAgcmV0dXJuIGAke2NvbmZpZy5wZXJjZW50YWdlIHx8IDB9JWBcbiAgfVxuICBpZiAoY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmcmVlX3NoaXBwaW5nXCIpIHtcbiAgICByZXR1cm4gXCJGcmVlIHNoaXBwaW5nXCJcbiAgfVxuICByZXR1cm4gXCJCdXkgZ2V0XCJcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiLVwiXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBcIi1cIlxuICByZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRlVGltZSh2YWx1ZT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiLVwiXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBcIi1cIlxuICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygpXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxEYXRlKHZhbHVlPzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gXCItXCJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIFwiLVwiXG4gIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwge1xuICAgIGRheTogXCJudW1lcmljXCIsXG4gICAgaG91cjogXCJudW1lcmljXCIsXG4gICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICBtb250aDogXCJzaG9ydFwiLFxuICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICB9KVxufVxuXG5mdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZURhdGUodmFsdWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIi1cIlxuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gXCItXCJcblxuICBjb25zdCBkaWZmU2Vjb25kcyA9IE1hdGgucm91bmQoKGRhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSkgLyAxMDAwKVxuICBjb25zdCBhYnNTZWNvbmRzID0gTWF0aC5hYnMoZGlmZlNlY29uZHMpXG4gIGNvbnN0IHVuaXRzOiBBcnJheTxbSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXRVbml0LCBudW1iZXJdPiA9IFtcbiAgICBbXCJ5ZWFyXCIsIDYwICogNjAgKiAyNCAqIDM2NV0sXG4gICAgW1wibW9udGhcIiwgNjAgKiA2MCAqIDI0ICogMzBdLFxuICAgIFtcIndlZWtcIiwgNjAgKiA2MCAqIDI0ICogN10sXG4gICAgW1wiZGF5XCIsIDYwICogNjAgKiAyNF0sXG4gICAgW1wiaG91clwiLCA2MCAqIDYwXSxcbiAgICBbXCJtaW51dGVcIiwgNjBdLFxuICBdXG4gIGNvbnN0IFt1bml0LCBzZWNvbmRzXSA9XG4gICAgdW5pdHMuZmluZCgoWywgc2Vjb25kc1BlclVuaXRdKSA9PiBhYnNTZWNvbmRzID49IHNlY29uZHNQZXJVbml0KSB8fCBbXVxuXG4gIGlmICghdW5pdCB8fCAhc2Vjb25kcykge1xuICAgIHJldHVybiBcImp1c3Qgbm93XCJcbiAgfVxuXG4gIHJldHVybiBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQodW5kZWZpbmVkLCB7IG51bWVyaWM6IFwiYXV0b1wiIH0pLmZvcm1hdChcbiAgICBNYXRoLnJvdW5kKGRpZmZTZWNvbmRzIC8gc2Vjb25kcyksXG4gICAgdW5pdCxcbiAgKVxufVxuXG5mdW5jdGlvbiBmb3JtYXRTbmFwc2hvdEFtb3VudChhbW91bnQ6IG51bWJlciB8IG51bGwsIGN1cnJlbmN5Pzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoYW1vdW50ID09IG51bGwpIHJldHVybiBcIi1cIlxuICBjb25zdCBjb2RlID0gY3VycmVuY3kgPyBjdXJyZW5jeS50b1VwcGVyQ2FzZSgpIDogXCJcIlxuICByZXR1cm4gW2NvZGUsIGFtb3VudC50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pXVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuam9pbihcIiBcIilcbn1cblxuZnVuY3Rpb24gdG9EYXRlVGltZUxvY2FsKHZhbHVlPzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIlxuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gXCJcIlxuICBjb25zdCBsb2NhbERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwXzAwMClcbiAgcmV0dXJuIGxvY2FsRGF0ZS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDE2KVxufVxuXG5mdW5jdGlvbiBlbnRpdGxlbWVudFN0YXR1c0NvbG9yKHN0YXR1czogc3RyaW5nKSB7XG4gIGlmIChzdGF0dXMgPT09IFwiaXNzdWVkXCIpIHJldHVybiBcImdyZWVuXCIgYXMgY29uc3RcbiAgaWYgKHN0YXR1cyA9PT0gXCJyZWRlZW1lZFwiKSByZXR1cm4gXCJibHVlXCIgYXMgY29uc3RcbiAgaWYgKHN0YXR1cyA9PT0gXCJleHBpcmVkXCIgfHwgc3RhdHVzID09PSBcImNhbmNlbGVkXCIpIHJldHVybiBcImdyZXlcIiBhcyBjb25zdFxuICByZXR1cm4gXCJvcmFuZ2VcIiBhcyBjb25zdFxufVxuXG5mdW5jdGlvbiBwcm9kdWN0U3RhdHVzQ29sb3Ioc3RhdHVzPzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoc3RhdHVzID09PSBcInB1Ymxpc2hlZFwiKSByZXR1cm4gXCJncmVlblwiIGFzIGNvbnN0XG4gIGlmIChzdGF0dXMgPT09IFwicmVqZWN0ZWRcIikgcmV0dXJuIFwicmVkXCIgYXMgY29uc3RcbiAgaWYgKHN0YXR1cyA9PT0gXCJwcm9wb3NlZFwiKSByZXR1cm4gXCJvcmFuZ2VcIiBhcyBjb25zdFxuICByZXR1cm4gXCJncmV5XCIgYXMgY29uc3Rcbn1cblxuZnVuY3Rpb24gc25hcHNob3RTdHJpbmcoXG4gIHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGtleTogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IHZhbHVlID0gc25hcHNob3Q/LltrZXldXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUudHJpbSgpKSByZXR1cm4gdmFsdWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgcmV0dXJuIFwiXCJcbn1cblxuZnVuY3Rpb24gc25hcHNob3ROdW1iZXIoXG4gIHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGtleTogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IHZhbHVlID0gc25hcHNob3Q/LltrZXldXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogbnVsbFxufVxuXG5mdW5jdGlvbiBqc29uQmxvY2sodmFsdWU6IHVua25vd24pIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBcInt9XCJcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKVxufVxuXG5mdW5jdGlvbiBjb3Vwb25Db2RlKGVudGl0bGVtZW50OiBDb3Vwb25FbnRpdGxlbWVudCkge1xuICByZXR1cm4gZW50aXRsZW1lbnQuY29kZSB8fCBlbnRpdGxlbWVudC5zaGFyZWRfY29kZSB8fCBcIi1cIlxufVxuXG5mdW5jdGlvbiBlbnRpdGxlbWVudFNvdXJjZShlbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnQpIHtcbiAgaWYgKGVudGl0bGVtZW50Lm9yaWdpbiA9PT0gXCJleHRlcm5hbFwiKSByZXR1cm4gXCJFeHRlcm5hbFwiXG4gIHJldHVybiBcIlB1cmNoYXNlXCJcbn1cblxuZnVuY3Rpb24gZW50aXRsZW1lbnRTZWxsZXJTY29wZShlbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnQpIHtcbiAgY29uc3QgY291bnQgPSBlbnRpdGxlbWVudC5zZWxsZXJfdGFyZ2V0cz8ubGVuZ3RoIHx8IDBcbiAgaWYgKGVudGl0bGVtZW50Lm9yaWdpbiAhPT0gXCJleHRlcm5hbFwiKSB7XG4gICAgaWYgKCFjb3VudCkgcmV0dXJuIFwiUHJvZHVjdCBzZWxsZXJcIlxuICAgIHJldHVybiBgUHJvZHVjdCBzZWxsZXIgKyAke2NvdW50fSBsaW5rZWRgXG4gIH1cbiAgaWYgKCFjb3VudCkgcmV0dXJuIFwiQWRtaW4gb25seVwiXG4gIHJldHVybiBjb3VudCA9PT0gMSA/IFwiMSBsaW5rZWQgc2VsbGVyXCIgOiBgJHtjb3VudH0gbGlua2VkIHNlbGxlcnNgXG59XG5cbmZ1bmN0aW9uIG9yZGVyRGlzcGxheUlkKG9yZGVyOiBDb3Vwb25PcmRlclN1bW1hcnkgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gIGlmICghb3JkZXIpIHJldHVybiBcIi1cIlxuICByZXR1cm4gb3JkZXIuZGlzcGxheV9pZCA9PSBudWxsID8gb3JkZXIuaWQgOiBgIyR7b3JkZXIuZGlzcGxheV9pZH1gXG59XG5cbmZ1bmN0aW9uIGRhc2hib2FyZEJhc2VQYXRoKGFwaUJhc2U6IEFwaUJhc2UpIHtcbiAgcmV0dXJuIGFwaUJhc2UgPT09IFwiL3ZlbmRvclwiID8gXCIvc2VsbGVyXCIgOiBcIi9kYXNoYm9hcmRcIlxufVxuXG5mdW5jdGlvbiBjb3Vwb25EZXRhaWxQYXRoKGFwaUJhc2U6IEFwaUJhc2UsIGVudGl0bGVtZW50SWQ6IHN0cmluZykge1xuICByZXR1cm4gYCR7ZGFzaGJvYXJkQmFzZVBhdGgoYXBpQmFzZSl9L2NvdXBvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoXG4gICAgZW50aXRsZW1lbnRJZCxcbiAgKX1gXG59XG5cbmZ1bmN0aW9uIG9yZGVyRGV0YWlsUGF0aChhcGlCYXNlOiBBcGlCYXNlLCBvcmRlcklkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGAke2Rhc2hib2FyZEJhc2VQYXRoKGFwaUJhc2UpfS9vcmRlcnMvJHtlbmNvZGVVUklDb21wb25lbnQob3JkZXJJZCl9YFxufVxuXG5mdW5jdGlvbiBjdXJyZW50Q291cG9uRGV0YWlsSWQoYXBpQmFzZTogQXBpQmFzZSkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBcIlwiXG4gIH1cblxuICBjb25zdCBwcmVmaXggPSBgJHtkYXNoYm9hcmRCYXNlUGF0aChhcGlCYXNlKX0vY291cG9ucy9gXG4gIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcbiAgY29uc3QgaW5kZXggPSBwYXRoLmluZGV4T2YocHJlZml4KVxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIGNvbnN0IGlkID0gcGF0aC5zbGljZShpbmRleCArIHByZWZpeC5sZW5ndGgpLnNwbGl0KFwiL1wiKVswXVxuICBpZiAoIWlkIHx8IGlkID09PSBcInByb2R1Y3RzXCIpIHtcbiAgICByZXR1cm4gXCJcIlxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGlkKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gaWRcbiAgfVxufVxuXG5mdW5jdGlvbiBiZW5lZml0U25hcHNob3RMYWJlbChcbiAgc25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBjb25zdCB0eXBlID0gc25hcHNob3RTdHJpbmcoc25hcHNob3QsIFwiYmVuZWZpdF90eXBlXCIpXG4gIGlmICh0eXBlID09PSBcImZpeGVkX2Ftb3VudFwiKSB7XG4gICAgY29uc3QgYW1vdW50cyA9IEFycmF5LmlzQXJyYXkoc25hcHNob3Q/LmFtb3VudHMpXG4gICAgICA/IChzbmFwc2hvdC5hbW91bnRzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PilcbiAgICAgIDogW11cbiAgICBpZiAoYW1vdW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBhbW91bnRzXG4gICAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFtb3VudCA9IHNuYXBzaG90TnVtYmVyKHJvdywgXCJhbW91bnRcIilcbiAgICAgICAgICBjb25zdCBjdXJyZW5jeSA9IHNuYXBzaG90U3RyaW5nKHJvdywgXCJjdXJyZW5jeV9jb2RlXCIpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICByZXR1cm4gYCR7YW1vdW50ID8/IDB9ICR7Y3VycmVuY3l9YC50cmltKClcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIsIFwiKVxuICAgIH1cblxuICAgIGNvbnN0IGFtb3VudCA9IHNuYXBzaG90TnVtYmVyKHNuYXBzaG90LCBcImFtb3VudFwiKVxuICAgIGNvbnN0IGN1cnJlbmN5ID0gc25hcHNob3RTdHJpbmcoc25hcHNob3QsIFwiY3VycmVuY3lfY29kZVwiKS50b1VwcGVyQ2FzZSgpXG4gICAgcmV0dXJuIGAke2Ftb3VudCA/PyAwfSAke2N1cnJlbmN5fWAudHJpbSgpXG4gIH1cblxuICBpZiAodHlwZSA9PT0gXCJwZXJjZW50YWdlXCIpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHNuYXBzaG90Py5wcm9tb3Rpb25fdGVtcGxhdGUgYXNcbiAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIHwgbnVsbFxuICAgICAgfCB1bmRlZmluZWRcbiAgICBjb25zdCBtZXRob2QgPSB0ZW1wbGF0ZT8uYXBwbGljYXRpb25fbWV0aG9kIGFzXG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB8IG51bGxcbiAgICAgIHwgdW5kZWZpbmVkXG4gICAgY29uc3Qgc2NvcGUgPSBzbmFwc2hvdFN0cmluZyhtZXRob2QsIFwidGFyZ2V0X3R5cGVcIikgPT09IFwib3JkZXJcIlxuICAgICAgPyBcIm9yZGVyXCJcbiAgICAgIDogXCJwcm9kdWN0c1wiXG4gICAgcmV0dXJuIGAke3NuYXBzaG90TnVtYmVyKHNuYXBzaG90LCBcInBlcmNlbnRhZ2VcIikgPz8gMH0lIG9mZiAke3Njb3BlfWBcbiAgfVxuXG4gIGlmICh0eXBlID09PSBcImZyZWVfc2hpcHBpbmdcIikge1xuICAgIHJldHVybiBcIkZyZWUgc2hpcHBpbmdcIlxuICB9XG5cbiAgaWYgKHR5cGUgPT09IFwiYnV5X2dldFwiKSB7XG4gICAgcmV0dXJuIFwiQnV5IFggR2V0IFlcIlxuICB9XG5cbiAgcmV0dXJuIFwiVW5rbm93blwiXG59XG5cbmZ1bmN0aW9uIGV4cGlyYXRpb25Qb2xpY3lMYWJlbChcbiAgc25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBjb25zdCBwb2xpY3kgPSBzbmFwc2hvdD8uZXhwaXJhdGlvbl9wb2xpY3kgYXNcbiAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWRcbiAgY29uc3QgdHlwZSA9IHNuYXBzaG90U3RyaW5nKHBvbGljeSwgXCJ0eXBlXCIpXG5cbiAgaWYgKHR5cGUgPT09IFwibm9uZVwiKSByZXR1cm4gXCJObyBleHBpcmF0aW9uXCJcbiAgaWYgKHR5cGUgPT09IFwiZHVyYXRpb25cIikge1xuICAgIGNvbnN0IGRheXMgPSBzbmFwc2hvdE51bWJlcihwb2xpY3ksIFwiZHVyYXRpb25fZGF5c1wiKSA/PyAwXG4gICAgcmV0dXJuIGAke2RheXN9IGRheXMgYWZ0ZXIgaXNzdWFuY2VgXG4gIH1cbiAgaWYgKHR5cGUgPT09IFwiZml4ZWRcIikge1xuICAgIHJldHVybiBgRml4ZWQgZGF0ZSAke2Zvcm1hdERhdGVUaW1lKHNuYXBzaG90U3RyaW5nKHBvbGljeSwgXCJleHBpcmVzX2F0XCIpKX1gXG4gIH1cblxuICByZXR1cm4gXCItXCJcbn1cblxuZnVuY3Rpb24gY2FtcGFpZ25TbmFwc2hvdExhYmVsKFxuICBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKSB7XG4gIGNvbnN0IGNhbXBhaWduU25hcHNob3QgPSBzbmFwc2hvdD8uY2FtcGFpZ25fc25hcHNob3QgYXNcbiAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWRcbiAgcmV0dXJuIChcbiAgICBzbmFwc2hvdFN0cmluZyhjYW1wYWlnblNuYXBzaG90LCBcIm5hbWVcIikgfHxcbiAgICBzbmFwc2hvdFN0cmluZyhjYW1wYWlnblNuYXBzaG90LCBcImNhbXBhaWduX2lkZW50aWZpZXJcIikgfHxcbiAgICBzbmFwc2hvdFN0cmluZyhzbmFwc2hvdCwgXCJjYW1wYWlnbl9pZFwiKSB8fFxuICAgIFwiTm9uZVwiXG4gIClcbn1cblxuZnVuY3Rpb24gcHJvbW90aW9uU25hcHNob3RMYWJlbChcbiAgc25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBjb25zdCB0ZW1wbGF0ZSA9IHNuYXBzaG90Py5wcm9tb3Rpb25fdGVtcGxhdGUgYXNcbiAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWRcbiAgY29uc3QgbWV0aG9kID0gdGVtcGxhdGU/LmFwcGxpY2F0aW9uX21ldGhvZCBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IG51bGxcbiAgICB8IHVuZGVmaW5lZFxuICBjb25zdCB0YXJnZXQgPSBzbmFwc2hvdFN0cmluZyhtZXRob2QsIFwidGFyZ2V0X3R5cGVcIilcbiAgY29uc3QgYWxsb2NhdGlvbiA9IHNuYXBzaG90U3RyaW5nKG1ldGhvZCwgXCJhbGxvY2F0aW9uXCIpXG5cbiAgcmV0dXJuIFt0YXJnZXQsIGFsbG9jYXRpb25dLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIC8gXCIpIHx8IFwiTm9uZVwiXG59XG5cbmZ1bmN0aW9uIGNhbXBhaWduTGFiZWwoY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnKSB7XG4gIGNvbnN0IG5hbWUgPSBjb25maWcuY2FtcGFpZ25fc25hcHNob3Q/Lm5hbWVcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiICYmIG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5jYW1wYWlnbl9pZCB8fCBcIk5vbmVcIlxufVxuXG5mdW5jdGlvbiBmb3JtRnJvbVJvdyhyb3c6IENvdXBvblByb2R1Y3RSb3csIGRlZmF1bHRDdXJyZW5jeUNvZGU6IHN0cmluZykge1xuICBjb25zdCBwcm9kdWN0ID0gcm93LnByb2R1Y3QgfHwgKHt9IGFzIFByb2R1Y3RSZWNvcmQpXG4gIGNvbnN0IGNvbmZpZyA9IHJvdy5jb3Vwb25fcHJvZHVjdF9jb25maWdcbiAgY29uc3QgdmFyaWFudENvbmZpZ0J5VmFyaWFudElkID0gbmV3IE1hcChcbiAgICAocm93LmNvdXBvbl9wcm9kdWN0X3ZhcmlhbnRfY29uZmlncyB8fCBbXSkubWFwKCh2YXJpYW50Q29uZmlnKSA9PiBbXG4gICAgICB2YXJpYW50Q29uZmlnLnZhcmlhbnRfaWQsXG4gICAgICB2YXJpYW50Q29uZmlnLFxuICAgIF0pLFxuICApXG4gIGNvbnN0IGR1cmF0aW9uRGF5cyA9XG4gICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImR1cmF0aW9uXCJcbiAgICAgID8gY29uZmlnLmV4cGlyYXRpb25fcG9saWN5LmR1cmF0aW9uX2RheXNcbiAgICAgIDogMzBcblxuICByZXR1cm4ge1xuICAgIHByb2R1Y3Q6IHtcbiAgICAgIC4uLmVtcHR5UHJvZHVjdCxcbiAgICAgIGlkOiBwcm9kdWN0LmlkIHx8IFwiXCIsXG4gICAgICB0aXRsZTogcHJvZHVjdC50aXRsZSB8fCBcIlwiLFxuICAgICAgc3VidGl0bGU6IHByb2R1Y3Quc3VidGl0bGUgfHwgXCJcIixcbiAgICAgIGhhbmRsZTogcHJvZHVjdC5oYW5kbGUgfHwgXCJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0LmRlc2NyaXB0aW9uIHx8IFwiXCIsXG4gICAgICB0aHVtYm5haWw6IHByb2R1Y3QudGh1bWJuYWlsIHx8IFwiXCIsXG4gICAgICBzdGF0dXM6IHByb2R1Y3Quc3RhdHVzIHx8IFwiZHJhZnRcIixcbiAgICAgIGRpc2NvdW50YWJsZTogQm9vbGVhbihwcm9kdWN0LmRpc2NvdW50YWJsZSksXG4gICAgICB0eXBlX2lkOiBwcm9kdWN0LnR5cGVfaWQgfHwgXCJcIixcbiAgICAgIGNvbGxlY3Rpb25faWQ6IHByb2R1Y3QuY29sbGVjdGlvbl9pZCB8fCBcIlwiLFxuICAgICAgY2F0ZWdvcnlfaWQ6IHByb2R1Y3QuY2F0ZWdvcmllcz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgICAgdGFnX2lkOiBwcm9kdWN0LnRhZ3M/LlswXT8uaWQgfHwgXCJcIixcbiAgICAgIHNhbGVzX2NoYW5uZWxfaWQ6IHByb2R1Y3Quc2FsZXNfY2hhbm5lbHM/LlswXT8uaWQgfHwgXCJcIixcbiAgICAgIHZhcmlhbnRzOiAocHJvZHVjdC52YXJpYW50cz8ubGVuZ3RoID8gcHJvZHVjdC52YXJpYW50cyA6IFtdKS5tYXAoXG4gICAgICAgICh2YXJpYW50KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3ZlcnJpZGUgPSB2YXJpYW50Q29uZmlnQnlWYXJpYW50SWQuZ2V0KHZhcmlhbnQuaWQpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmVtcHR5VmFyaWFudCxcbiAgICAgICAgICAgIGlkOiB2YXJpYW50LmlkLFxuICAgICAgICAgICAgb3ZlcnJpZGVfY29uZmlnX2lkOiBvdmVycmlkZT8uaWQsXG4gICAgICAgICAgICB0aXRsZTogdmFyaWFudC50aXRsZSB8fCBcIlwiLFxuICAgICAgICAgICAgc2t1OiB2YXJpYW50LnNrdSB8fCBcIlwiLFxuICAgICAgICAgICAgY3VycmVuY3lfY29kZTpcbiAgICAgICAgICAgICAgdmFyaWFudC5wcmljZXM/LlswXT8uY3VycmVuY3lfY29kZSB8fFxuICAgICAgICAgICAgICBvdmVycmlkZT8uY3VycmVuY3lfY29kZSB8fFxuICAgICAgICAgICAgICBjb25maWcuY3VycmVuY3lfY29kZSB8fFxuICAgICAgICAgICAgICBkZWZhdWx0Q3VycmVuY3lDb2RlLFxuICAgICAgICAgICAgYW1vdW50OlxuICAgICAgICAgICAgICB2YXJpYW50LnByaWNlcz8uWzBdPy5hbW91bnQgPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgIDogU3RyaW5nKHZhcmlhbnQucHJpY2VzPy5bMF0/LmFtb3VudCksXG4gICAgICAgICAgICBvdmVycmlkZV9lbmFibGVkOiBvdmVycmlkZSA/IG92ZXJyaWRlLmVuYWJsZWQgIT09IGZhbHNlIDogZmFsc2UsXG4gICAgICAgICAgICBvdmVycmlkZV9iZW5lZml0X3R5cGU6XG4gICAgICAgICAgICAgIG92ZXJyaWRlPy5iZW5lZml0X3R5cGUgfHwgY29uZmlnLmJlbmVmaXRfdHlwZSB8fCBcImZpeGVkX2Ftb3VudFwiLFxuICAgICAgICAgICAgb3ZlcnJpZGVfY3VycmVuY3lfY29kZTpcbiAgICAgICAgICAgICAgb3ZlcnJpZGU/LmN1cnJlbmN5X2NvZGUgfHxcbiAgICAgICAgICAgICAgY29uZmlnLmN1cnJlbmN5X2NvZGUgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdEN1cnJlbmN5Q29kZSxcbiAgICAgICAgICAgIG92ZXJyaWRlX2Ftb3VudDpcbiAgICAgICAgICAgICAgb3ZlcnJpZGU/LmFtb3VudCA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhvdmVycmlkZS5hbW91bnQpLFxuICAgICAgICAgICAgb3ZlcnJpZGVfcGVyY2VudGFnZTpcbiAgICAgICAgICAgICAgb3ZlcnJpZGU/LnBlcmNlbnRhZ2UgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcob3ZlcnJpZGUucGVyY2VudGFnZSksXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICB9LFxuICAgIGNvdXBvbjoge1xuICAgICAgLi4uZW1wdHlDb3Vwb24sXG4gICAgICBlbmFibGVkOiBjb25maWcuZW5hYmxlZCxcbiAgICAgIGJlbmVmaXRfdHlwZTogY29uZmlnLmJlbmVmaXRfdHlwZSxcbiAgICAgIGFtb3VudDogY29uZmlnLmFtb3VudCA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhjb25maWcuYW1vdW50KSxcbiAgICAgIHBlcmNlbnRhZ2U6IGNvbmZpZy5wZXJjZW50YWdlID09IG51bGwgPyBcIlwiIDogU3RyaW5nKGNvbmZpZy5wZXJjZW50YWdlKSxcbiAgICAgIGN1cnJlbmN5X2NvZGU6IGNvbmZpZy5jdXJyZW5jeV9jb2RlIHx8IGRlZmF1bHRDdXJyZW5jeUNvZGUsXG4gICAgICBjb2RlX3N0cmF0ZWd5OiBjb25maWcuY29kZV9zdHJhdGVneSxcbiAgICAgIGNvZGVfcHJlZml4OiBjb25maWcuY29kZV9wcmVmaXggfHwgXCJcIixcbiAgICAgIHNoYXJlZF9jb2RlOiBjb25maWcuc2hhcmVkX2NvZGUgfHwgXCJcIixcbiAgICAgIGV4cGlyYXRpb25fdHlwZTogY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlIHx8IFwiZHVyYXRpb25cIixcbiAgICAgIGV4cGlyYXRpb25fZGF5czogU3RyaW5nKGR1cmF0aW9uRGF5cyksXG4gICAgICBleHBpcmF0aW9uX2RhdGU6XG4gICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8udHlwZSA9PT0gXCJmaXhlZFwiXG4gICAgICAgICAgPyB0b0RhdGVUaW1lTG9jYWwoY29uZmlnLmV4cGlyYXRpb25fcG9saWN5LmV4cGlyZXNfYXQpXG4gICAgICAgICAgOiBcIlwiLFxuICAgICAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ246XG4gICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8uY2FwX2J5X2NhbXBhaWduICE9PSBmYWxzZSxcbiAgICAgIGV4cGlyYXRpb25fY2FwX2F0OiBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LmNhcF9hdFxuICAgICAgICA/IHRvRGF0ZVRpbWVMb2NhbChjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kuY2FwX2F0KVxuICAgICAgICA6IFwiXCIsXG4gICAgICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IFN0cmluZyhcbiAgICAgICAgY29uZmlnLm1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbSB8fCAxLFxuICAgICAgKSxcbiAgICAgIHByb21vdGlvbl9taXJyb3JfbW9kZTogY29uZmlnLnByb21vdGlvbl9taXJyb3JfbW9kZSB8fCBcIm5vbmVcIixcbiAgICAgIHByb21vdGlvbl9zdGF0dXM6IGNvbmZpZy5wcm9tb3Rpb25fc3RhdHVzIHx8IFwiZHJhZnRcIixcbiAgICB9LFxuICAgIGNhbXBhaWduOiB7XG4gICAgICAuLi5lbXB0eUNhbXBhaWduLFxuICAgICAgbW9kZTogY29uZmlnLmNhbXBhaWduX2lkID8gXCJleGlzdGluZ1wiIDogXCJub25lXCIsXG4gICAgICBjYW1wYWlnbl9pZDogY29uZmlnLmNhbXBhaWduX2lkIHx8IFwiXCIsXG4gICAgfSxcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvdXBvblBheWxvYWQoXG4gIGNvdXBvbjogQ291cG9uRm9ybVN0YXRlLFxuICBhbGxvd1Byb21vdGlvbk1pcnJvcjogYm9vbGVhbixcbikge1xuICByZXR1cm4ge1xuICAgIGVuYWJsZWQ6IGNvdXBvbi5lbmFibGVkLFxuICAgIGJlbmVmaXRfdHlwZTogY291cG9uLmJlbmVmaXRfdHlwZSxcbiAgICBhbW91bnQ6XG4gICAgICBjb3Vwb24uYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiXG4gICAgICAgID8gbnVtYmVyT3JOdWxsKGNvdXBvbi5hbW91bnQpXG4gICAgICAgIDogbnVsbCxcbiAgICBwZXJjZW50YWdlOlxuICAgICAgY291cG9uLmJlbmVmaXRfdHlwZSA9PT0gXCJwZXJjZW50YWdlXCJcbiAgICAgICAgPyBudW1iZXJPck51bGwoY291cG9uLnBlcmNlbnRhZ2UpXG4gICAgICAgIDogbnVsbCxcbiAgICBjdXJyZW5jeV9jb2RlOlxuICAgICAgY291cG9uLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICA/IGNvdXBvbi5jdXJyZW5jeV9jb2RlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIDogbnVsbCxcbiAgICBjb2RlX3N0cmF0ZWd5OiBjb3Vwb24uY29kZV9zdHJhdGVneSxcbiAgICBjb2RlX3ByZWZpeDpcbiAgICAgIGNvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInVuaXF1ZV9jb2RlXCJcbiAgICAgICAgPyBjb3Vwb24uY29kZV9wcmVmaXgudHJpbSgpIHx8IFwiQ09VUE9OXCJcbiAgICAgICAgOiBudWxsLFxuICAgIHNoYXJlZF9jb2RlOlxuICAgICAgY291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwic2hhcmVkX2NvZGVcIiA/IGNvdXBvbi5zaGFyZWRfY29kZS50cmltKCkgOiBudWxsLFxuICAgIGV4cGlyYXRpb25fcG9saWN5OlxuICAgICAgY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJmaXhlZFwiXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogXCJmaXhlZFwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgZXhwaXJlc19hdDogbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fZGF0ZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGNhcF9ieV9jYW1wYWlnbjogY291cG9uLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgY2FwX2F0OiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXRcbiAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICB0eXBlOiBcImR1cmF0aW9uXCIgYXMgY29uc3QsXG4gICAgICAgICAgICBkdXJhdGlvbl9kYXlzOiBOdW1iZXIoY291cG9uLmV4cGlyYXRpb25fZGF5cykgfHwgMzAsXG4gICAgICAgICAgICBjYXBfYnlfY2FtcGFpZ246IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgIGNhcF9hdDogY291cG9uLmV4cGlyYXRpb25fY2FwX2F0XG4gICAgICAgICAgICAgID8gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICB9LFxuICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTpcbiAgICAgIE51bWJlcihjb3Vwb24ubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtKSB8fCAxLFxuICAgIC4uLihhbGxvd1Byb21vdGlvbk1pcnJvclxuICAgICAgPyB7XG4gICAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBjb3Vwb24ucHJvbW90aW9uX21pcnJvcl9tb2RlLFxuICAgICAgICAgIHByb21vdGlvbl9zdGF0dXM6IGNvdXBvbi5wcm9tb3Rpb25fc3RhdHVzLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENhbXBhaWduUGF5bG9hZChcbiAgY2FtcGFpZ246IENhbXBhaWduRm9ybVN0YXRlLFxuICBhbGxvd0NhbXBhaWduOiBib29sZWFuLFxuKSB7XG4gIGlmICghYWxsb3dDYW1wYWlnbikge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICBpZiAoY2FtcGFpZ24ubW9kZSA9PT0gXCJleGlzdGluZ1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiZXhpc3RpbmdcIixcbiAgICAgIGNhbXBhaWduX2lkOiBjYW1wYWlnbi5jYW1wYWlnbl9pZCB8fCBudWxsLFxuICAgIH1cbiAgfVxuICBpZiAoY2FtcGFpZ24ubW9kZSA9PT0gXCJuZXdcIikge1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcIm5ld1wiLFxuICAgICAgY2FtcGFpZ246IHtcbiAgICAgICAgbmFtZTogY2FtcGFpZ24ubmFtZSxcbiAgICAgICAgY2FtcGFpZ25faWRlbnRpZmllcjogY2FtcGFpZ24uY2FtcGFpZ25faWRlbnRpZmllcixcbiAgICAgICAgc3RhcnRzX2F0OiBjYW1wYWlnbi5zdGFydHNfYXRcbiAgICAgICAgICA/IG5ldyBEYXRlKGNhbXBhaWduLnN0YXJ0c19hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgZW5kc19hdDogY2FtcGFpZ24uZW5kc19hdFxuICAgICAgICAgID8gbmV3IERhdGUoY2FtcGFpZ24uZW5kc19hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfVxuICB9XG4gIHJldHVybiB7IG1vZGU6IFwibm9uZVwiIH1cbn1cblxuZnVuY3Rpb24gc3RlcFN0YXR1cyhzdGVwOiBXaXphcmRTdGVwLCBhY3RpdmU6IFdpemFyZFN0ZXApIHtcbiAgY29uc3Qgc3RlcEluZGV4ID0gc3RlcHMuaW5kZXhPZihzdGVwKVxuICBjb25zdCBhY3RpdmVJbmRleCA9IHN0ZXBzLmluZGV4T2YoYWN0aXZlKVxuICBpZiAoc3RlcEluZGV4IDwgYWN0aXZlSW5kZXgpIHJldHVybiBcImNvbXBsZXRlZFwiXG4gIGlmIChzdGVwSW5kZXggPT09IGFjdGl2ZUluZGV4KSByZXR1cm4gXCJpbi1wcm9ncmVzc1wiXG4gIHJldHVybiBcIm5vdC1zdGFydGVkXCJcbn1cblxuZnVuY3Rpb24gRmllbGQoeyBsYWJlbCwgY2hpbGRyZW4gfTogeyBsYWJlbDogc3RyaW5nOyBjaGlsZHJlbjogUmVhY3ROb2RlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMVwiIHN0eWxlPXt7IG1pbldpZHRoOiAwIH19PlxuICAgICAgPExhYmVsPntsYWJlbH08L0xhYmVsPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIGN1cnJlbmN5RGVjaW1hbERpZ2l0cyhjb2RlOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwge1xuICAgICAgc3R5bGU6IFwiY3VycmVuY3lcIixcbiAgICAgIGN1cnJlbmN5OiBjb2RlLnRvVXBwZXJDYXNlKCksXG4gICAgfSkucmVzb2x2ZWRPcHRpb25zKCkubWF4aW11bUZyYWN0aW9uRGlnaXRzXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAyXG4gIH1cbn1cblxuZnVuY3Rpb24gY3VycmVuY3lTeW1ib2woY29kZTogc3RyaW5nKSB7XG4gIGlmICghY29kZSkgcmV0dXJuIFwiXCJcblxuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICAgIHN0eWxlOiBcImN1cnJlbmN5XCIsXG4gICAgICAgIGN1cnJlbmN5OiBjb2RlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIGN1cnJlbmN5RGlzcGxheTogXCJuYXJyb3dTeW1ib2xcIixcbiAgICAgIH0pXG4gICAgICAgIC5mb3JtYXRUb1BhcnRzKDApXG4gICAgICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09IFwiY3VycmVuY3lcIik/LnZhbHVlIHx8IGNvZGUudG9VcHBlckNhc2UoKVxuICAgIClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGNvZGUudG9VcHBlckNhc2UoKVxuICB9XG59XG5cbmZ1bmN0aW9uIEN1cnJlbmN5U2VsZWN0KHtcbiAgY3VycmVuY2llcyxcbiAgZGlzYWJsZWQsXG4gIG9uQ2hhbmdlLFxuICB2YWx1ZSxcbn06IHtcbiAgY3VycmVuY2llczogQ3VycmVuY3lPcHRpb25bXVxuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB2YWx1ZT17dmFsdWUgfHwgdW5kZWZpbmVkfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8ICFjdXJyZW5jaWVzLmxlbmd0aH1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9e29uQ2hhbmdlfVxuICAgID5cbiAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgPFNlbGVjdC5WYWx1ZVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgICAgIGN1cnJlbmNpZXMubGVuZ3RoID8gXCJTZWxlY3QgY3VycmVuY3lcIiA6IFwiTm8gY3VycmVuY2llcyBhdmFpbGFibGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgIHtjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3kpID0+IChcbiAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtjdXJyZW5jeS5jb2RlfSB2YWx1ZT17Y3VycmVuY3kuY29kZX0+XG4gICAgICAgICAgICB7Y3VycmVuY3kubmFtZX0gKHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9KVxuICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICA8L1NlbGVjdD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDdXJyZW5jeUFtb3VudElucHV0KHtcbiAgY3VycmVuY2llcyxcbiAgY3VycmVuY3lDb2RlLFxuICBkaXNhYmxlZCxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdXG4gIGN1cnJlbmN5Q29kZTogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2RlID09PSBjdXJyZW5jeUNvZGUpXG4gIGNvbnN0IGNvZGUgPSBjdXJyZW5jeUNvZGUudG9VcHBlckNhc2UoKVxuICBjb25zdCBkZWNpbWFscyA9IGN1cnJlbmN5RGVjaW1hbERpZ2l0cyhjb2RlIHx8IFwiVVNEXCIpXG5cbiAgcmV0dXJuIChcbiAgICA8Q3VycmVuY3lJbnB1dFxuICAgICAgY29kZT17Y29kZSB8fCBcIlVTRFwifVxuICAgICAgc3ltYm9sPXtcbiAgICAgICAgY3VycmVuY3k/LnN5bWJvbF9uYXRpdmUgfHxcbiAgICAgICAgY3VycmVuY3k/LnN5bWJvbCB8fFxuICAgICAgICBjdXJyZW5jeVN5bWJvbChjb2RlIHx8IFwiVVNEXCIpXG4gICAgICB9XG4gICAgICBtaW49ezB9XG4gICAgICBkZWNpbWFsU2NhbGU9e2RlY2ltYWxzfVxuICAgICAgZGVjaW1hbHNMaW1pdD17ZGVjaW1hbHN9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgIWN1cnJlbmN5Q29kZX1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9eyhuZXh0VmFsdWUpID0+IG9uQ2hhbmdlKG5leHRWYWx1ZSB8fCBcIlwiKX1cbiAgICAvPlxuICApXG59XG5cbmNvbnN0IGVudGl0bGVtZW50RmlsdGVycyA9IFtcbiAgeyBsYWJlbDogXCJBbGxcIiwgdmFsdWU6IFwiYWxsXCIgfSxcbiAgeyBsYWJlbDogXCJJc3N1ZWRcIiwgdmFsdWU6IFwiaXNzdWVkXCIgfSxcbiAgeyBsYWJlbDogXCJSZWRlZW1lZFwiLCB2YWx1ZTogXCJyZWRlZW1lZFwiIH0sXG4gIHsgbGFiZWw6IFwiRXhwaXJlZFwiLCB2YWx1ZTogXCJleHBpcmVkXCIgfSxcbiAgeyBsYWJlbDogXCJDYW5jZWxlZFwiLCB2YWx1ZTogXCJjYW5jZWxlZFwiIH0sXG5dIGFzIGNvbnN0XG5cbnR5cGUgRW50aXRsZW1lbnRGaWx0ZXIgPSAodHlwZW9mIGVudGl0bGVtZW50RmlsdGVycylbbnVtYmVyXVtcInZhbHVlXCJdXG5cbmZ1bmN0aW9uIFNuYXBzaG90QmxvY2soeyB0aXRsZSwgdmFsdWUgfTogeyB0aXRsZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSB7XG4gIHJldHVybiAoXG4gICAgPGRldGFpbHMgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgcC0zXCI+XG4gICAgICA8c3VtbWFyeSBjbGFzc05hbWU9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LXVpLWZnLWJhc2UgdHh0LXNtYWxsLXBsdXNcIj5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9zdW1tYXJ5PlxuICAgICAgPHByZVxuICAgICAgICBjbGFzc05hbWU9XCJtdC0zIHJvdW5kZWQtbWQgYmctdWktYmctc3VidGxlIHAtMyB0ZXh0LXVpLWZnLXN1YnRsZSB0eHQtY29tcGFjdC14c21hbGxcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIG1heEhlaWdodDogMjIwLFxuICAgICAgICAgIG92ZXJmbG93OiBcImF1dG9cIixcbiAgICAgICAgICB3aGl0ZVNwYWNlOiBcInByZS13cmFwXCIsXG4gICAgICAgICAgd29yZEJyZWFrOiBcImJyZWFrLXdvcmRcIixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2pzb25CbG9jayh2YWx1ZSl9XG4gICAgICA8L3ByZT5cbiAgICA8L2RldGFpbHM+XG4gIClcbn1cblxuZnVuY3Rpb24gVHdvQ29sdW1uTGF5b3V0KHtcbiAgZmlyc3RDb2wsXG4gIHNlY29uZENvbCxcbn06IHtcbiAgZmlyc3RDb2w6IFJlYWN0Tm9kZVxuICBzZWNvbmRDb2w6IFJlYWN0Tm9kZVxufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteC00IGdhcC15LTMgeGw6ZmxleC1yb3cgeGw6aXRlbXMtc3RhcnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLXktM1wiPntmaXJzdENvbH08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgbWF4LXctWzEwMCVdIGZsZXgtY29sIGdhcC15LTMgeGw6bXQtMCB4bDptYXgtdy1bNDQwcHhdXCI+XG4gICAgICAgIHtzZWNvbmRDb2x9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWN0aW9uUm93KHtcbiAgdGl0bGUsXG4gIHZhbHVlLFxufToge1xuICB0aXRsZTogc3RyaW5nXG4gIHZhbHVlOiBSZWFjdE5vZGVcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtdWktZmctc3VidGxlIGdyaWQgZ3JpZC1jb2xzLTIgaXRlbXMtY2VudGVyIGdhcC14LTQgcHgtNiBweS00XCI+XG4gICAgICA8VGV4dCBzaXplPVwic21hbGxcIiB3ZWlnaHQ9XCJwbHVzXCIgbGVhZGluZz1cImNvbXBhY3RcIj5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9UZXh0PlxuICAgICAge3R5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSA9PSBudWxsID8gKFxuICAgICAgICA8VGV4dFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgbGVhZGluZz1cImNvbXBhY3RcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcHJldHR5IHdoaXRlc3BhY2UtcHJlLWxpbmVcIlxuICAgICAgICA+XG4gICAgICAgICAge3ZhbHVlIHx8IFwiLVwifVxuICAgICAgICA8L1RleHQ+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj57dmFsdWV9PC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIFdpZGdldEhlYWRlcih7IHRpdGxlIH06IHsgdGl0bGU6IHN0cmluZyB9KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS00XCI+XG4gICAgICA8SGVhZGluZyBsZXZlbD1cImgyXCI+e3RpdGxlfTwvSGVhZGluZz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTaWRlYmFyTGluayh7XG4gIGhyZWYsXG4gIGxhYmVsLFxuICBkZXNjcmlwdGlvbixcbiAgaWNvbixcbn06IHtcbiAgaHJlZjogc3RyaW5nXG4gIGxhYmVsOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBpY29uPzogUmVhY3ROb2RlXG59KSB7XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17aHJlZn0gY2xhc3NOYW1lPVwiZ3JvdXAgb3V0bGluZS1ub25lXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgcHgtMiBwYi0yXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2hhZG93LWVsZXZhdGlvbi1jYXJkLXJlc3QgYmctdWktYmctY29tcG9uZW50IHRyYW5zaXRpb24tZmcgaG92ZXI6YmctdWktYmctY29tcG9uZW50LWhvdmVyIGFjdGl2ZTpiZy11aS1iZy1jb21wb25lbnQtcHJlc3NlZCBncm91cC1mb2N1cy12aXNpYmxlOnNoYWRvdy1ib3JkZXJzLWludGVyYWN0aXZlLXdpdGgtYWN0aXZlIHJvdW5kZWQtbWQgcHgtNCBweS0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgICAge2ljb24gJiYgPGRpdj57aWNvbn08L2Rpdj59XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGxlYWRpbmc9XCJjb21wYWN0XCIgd2VpZ2h0PVwicGx1c1wiPlxuICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgbGVhZGluZz1cImNvbXBhY3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtdWktZmctc3VidGxlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxUcmlhbmdsZVJpZ2h0TWluaSBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5mdW5jdGlvbiBTdW1tYXJ5V2lkZ2V0KHtcbiAgbGFiZWwsXG4gIHZhbHVlLFxuICB0b25lID0gXCJncmVlblwiLFxufToge1xuICBsYWJlbDogc3RyaW5nXG4gIHZhbHVlOiBzdHJpbmdcbiAgdG9uZT86IFwiZ3JlZW5cIiB8IFwibmV1dHJhbFwiXG59KSB7XG4gIHJldHVybiAoXG4gICAgPENvbnRhaW5lciBjbGFzc05hbWU9XCJweC02IHB5LTRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1zdWJ0bGUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtM1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtgaC04IHctMSByb3VuZGVkLWZ1bGwgJHtcbiAgICAgICAgICAgIHRvbmUgPT09IFwiZ3JlZW5cIlxuICAgICAgICAgICAgICA/IFwiYmctdWktdGFnLWdyZWVuLWljb25cIlxuICAgICAgICAgICAgICA6IFwiYmctdWktdGFnLW5ldXRyYWwtaWNvblwiXG4gICAgICAgICAgfWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMFwiPlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIiBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLXN1YnRsZVwiPlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgd2VpZ2h0PVwicGx1c1wiXG4gICAgICAgICAgICBzaXplPVwieGxhcmdlXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRhYnVsYXItbnVtcyB0ZXh0LXVpLWZnLWJhc2UgYnJlYWstd29yZHNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt2YWx1ZX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db250YWluZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gQ291cG9uR2VuZXJhbFNlY3Rpb24oeyBkZXRhaWwgfTogeyBkZXRhaWw6IENvdXBvbkVudGl0bGVtZW50RGV0YWlsIH0pIHtcbiAgY29uc3QgZW50aXRsZW1lbnQgPSBkZXRhaWwuY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50XG4gIGNvbnN0IGlzc3VhbmNlID0gZGV0YWlsLmNvdXBvbl9pc3N1YW5jZSB8fCBudWxsXG4gIGNvbnN0IGJlbmVmaXRTbmFwc2hvdCA9IGVudGl0bGVtZW50LmJlbmVmaXRfc25hcHNob3QgfHwgbnVsbFxuICBjb25zdCBzb3VyY2VTbmFwc2hvdCA9IGVudGl0bGVtZW50LnNvdXJjZV9zbmFwc2hvdCB8fCBudWxsXG4gIGNvbnN0IGNvZGUgPSBjb3Vwb25Db2RlKGVudGl0bGVtZW50KVxuICBjb25zdCBleHRlcm5hbCA9IGVudGl0bGVtZW50Lm9yaWdpbiA9PT0gXCJleHRlcm5hbFwiXG4gIGNvbnN0IHByb2R1Y3RMYWJlbCA9XG4gICAgc25hcHNob3RTdHJpbmcoc291cmNlU25hcHNob3QsIFwidGl0bGVcIikgfHxcbiAgICBzbmFwc2hvdFN0cmluZyhzb3VyY2VTbmFwc2hvdCwgXCJzb3VyY2VcIikgfHxcbiAgICBlbnRpdGxlbWVudC5wcm9kdWN0X2lkIHx8XG4gICAgXCJFeHRlcm5hbFwiXG4gIGNvbnN0IHZhcmlhbnRMYWJlbCA9XG4gICAgc25hcHNob3RTdHJpbmcoc291cmNlU25hcHNob3QsIFwidmFyaWFudF9pZFwiKSB8fCBlbnRpdGxlbWVudC52YXJpYW50X2lkIHx8IFwiLVwiXG4gIGNvbnN0IGlzc3VlZERhdGUgPSBlbnRpdGxlbWVudC5jcmVhdGVkX2F0IHx8IGlzc3VhbmNlPy5jcmVhdGVkX2F0IHx8IG51bGxcblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwiZGl2aWRlLXkgcC0wXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0xXCI+XG4gICAgICAgICAgICA8SGVhZGluZyBjbGFzc05hbWU9XCJicmVhay1hbGxcIj4je2NvZGV9PC9IZWFkaW5nPlxuICAgICAgICAgICAge2NvZGUgIT09IFwiLVwiICYmIChcbiAgICAgICAgICAgICAgPENvcHkgY29udGVudD17Y29kZX0gY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctc3VidGxlXCI+XG4gICAgICAgICAgICB7Zm9ybWF0RnVsbERhdGUoaXNzdWVkRGF0ZSl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPFN0YXR1c0JhZGdlIGNvbG9yPXtlbnRpdGxlbWVudFN0YXR1c0NvbG9yKGVudGl0bGVtZW50LnN0YXR1cyl9PlxuICAgICAgICAgIHtlbnRpdGxlbWVudC5zdGF0dXN9XG4gICAgICAgIDwvU3RhdHVzQmFkZ2U+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiRGF0ZSBpc3N1ZWRcIiB2YWx1ZT17Zm9ybWF0UmVsYXRpdmVEYXRlKGlzc3VlZERhdGUpfSAvPlxuICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgdGl0bGU9XCJDdXN0b21lclwiXG4gICAgICAgIHZhbHVlPXtlbnRpdGxlbWVudC5lbWFpbCB8fCBlbnRpdGxlbWVudC5jdXN0b21lcl9pZCB8fCBcIi1cIn1cbiAgICAgIC8+XG4gICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIk9yaWdpblwiIHZhbHVlPXtlbnRpdGxlbWVudFNvdXJjZShlbnRpdGxlbWVudCl9IC8+XG4gICAgICA8U2VjdGlvblJvd1xuICAgICAgICB0aXRsZT17ZXh0ZXJuYWwgPyBcIlNvdXJjZVwiIDogXCJDb3Vwb24gcHJvZHVjdFwifVxuICAgICAgICB2YWx1ZT17cHJvZHVjdExhYmVsfVxuICAgICAgLz5cbiAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiU2VsbGVyIHNjb3BlXCIgdmFsdWU9e2VudGl0bGVtZW50U2VsbGVyU2NvcGUoZW50aXRsZW1lbnQpfSAvPlxuICAgICAgeyFleHRlcm5hbCAmJiA8U2VjdGlvblJvdyB0aXRsZT1cIlZhcmlhbnRcIiB2YWx1ZT17dmFyaWFudExhYmVsfSAvPn1cbiAgICAgIHshZXh0ZXJuYWwgJiYgKFxuICAgICAgICA8U2VjdGlvblJvd1xuICAgICAgICAgIHRpdGxlPVwiUXVhbnRpdHlcIlxuICAgICAgICAgIHZhbHVlPXtTdHJpbmcoXG4gICAgICAgICAgICBzbmFwc2hvdE51bWJlcihzb3VyY2VTbmFwc2hvdCwgXCJxdWFudGl0eVwiKSA/PyBpc3N1YW5jZT8ucXVhbnRpdHkgPz8gMSxcbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgIHRpdGxlPVwiQmVuZWZpdFwiXG4gICAgICAgIHZhbHVlPXtiZW5lZml0U25hcHNob3RMYWJlbChiZW5lZml0U25hcHNob3QpfVxuICAgICAgLz5cbiAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgIHRpdGxlPVwiRXhwaXJhdGlvbiBwb2xpY3lcIlxuICAgICAgICB2YWx1ZT17ZXhwaXJhdGlvblBvbGljeUxhYmVsKGJlbmVmaXRTbmFwc2hvdCl9XG4gICAgICAvPlxuICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJFeHBpcmF0aW9uIERhdGVcIiB2YWx1ZT17Zm9ybWF0RGF0ZShlbnRpdGxlbWVudC5leHBpcmVzX2F0KX0gLz5cbiAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiUmVkZWVtZWQgRGF0ZVwiIHZhbHVlPXtmb3JtYXREYXRlKGVudGl0bGVtZW50LnJlZGVlbWVkX2F0KX0gLz5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBSZWxhdGVkT3JkZXJTZWN0aW9uKHtcbiAgYXBpQmFzZSxcbiAgZGV0YWlsLFxufToge1xuICBhcGlCYXNlOiBBcGlCYXNlXG4gIGRldGFpbDogQ291cG9uRW50aXRsZW1lbnREZXRhaWxcbn0pIHtcbiAgY29uc3QgZW50aXRsZW1lbnQgPSBkZXRhaWwuY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50XG4gIGNvbnN0IG9yZGVyID0gZGV0YWlsLm9yZGVyIHx8IG51bGxcbiAgY29uc3Qgb3JkZXJJZCA9IG9yZGVyPy5pZCB8fCBlbnRpdGxlbWVudC5vcmRlcl9pZFxuICBpZiAoIW9yZGVySWQpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cInAtMFwiPlxuICAgICAgPFdpZGdldEhlYWRlciB0aXRsZT1cIlJlbGF0ZWQgT3JkZXJcIiAvPlxuICAgICAgPFNpZGViYXJMaW5rXG4gICAgICAgIGhyZWY9e29yZGVyRGV0YWlsUGF0aChhcGlCYXNlLCBvcmRlcklkKX1cbiAgICAgICAgbGFiZWw9e29yZGVyID8gb3JkZXJEaXNwbGF5SWQob3JkZXIpIDogb3JkZXJJZH1cbiAgICAgICAgZGVzY3JpcHRpb249e1xuICAgICAgICAgIG9yZGVyPy5jcmVhdGVkX2F0XG4gICAgICAgICAgICA/IGBPcmRlciBwbGFjZWQgJHtmb3JtYXRSZWxhdGl2ZURhdGUob3JkZXIuY3JlYXRlZF9hdCl9YFxuICAgICAgICAgICAgOiBcIlB1cmNoYXNlZCBjb3Vwb24gb3JkZXJcIlxuICAgICAgICB9XG4gICAgICAgIGljb249ezxTaG9wcGluZ0NhcnQgLz59XG4gICAgICAvPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmZ1bmN0aW9uIENvdXBvblNuYXBzaG90c1NlY3Rpb24oe1xuICBkZXRhaWwsXG59OiB7XG4gIGRldGFpbDogQ291cG9uRW50aXRsZW1lbnREZXRhaWxcbn0pIHtcbiAgY29uc3QgZW50aXRsZW1lbnQgPSBkZXRhaWwuY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50XG4gIGNvbnN0IGlzc3VhbmNlID0gZGV0YWlsLmNvdXBvbl9pc3N1YW5jZSB8fCBudWxsXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cInAtMFwiPlxuICAgICAgPFdpZGdldEhlYWRlciB0aXRsZT1cIkpTT05cIiAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTMgcHgtNiBwYi02XCI+XG4gICAgICAgIDxTbmFwc2hvdEJsb2NrXG4gICAgICAgICAgdGl0bGU9XCJCZW5lZml0IHNuYXBzaG90XCJcbiAgICAgICAgICB2YWx1ZT17ZW50aXRsZW1lbnQuYmVuZWZpdF9zbmFwc2hvdH1cbiAgICAgICAgLz5cbiAgICAgICAgPFNuYXBzaG90QmxvY2tcbiAgICAgICAgICB0aXRsZT1cIlNvdXJjZSBzbmFwc2hvdFwiXG4gICAgICAgICAgdmFsdWU9e2VudGl0bGVtZW50LnNvdXJjZV9zbmFwc2hvdH1cbiAgICAgICAgLz5cbiAgICAgICAgPFNuYXBzaG90QmxvY2tcbiAgICAgICAgICB0aXRsZT1cIklzc3VhbmNlIGNvbmZpZyBzbmFwc2hvdFwiXG4gICAgICAgICAgdmFsdWU9e2lzc3VhbmNlPy5jb25maWdfc25hcHNob3R9XG4gICAgICAgIC8+XG4gICAgICAgIDxTbmFwc2hvdEJsb2NrIHRpdGxlPVwiU2VsbGVyIHRhcmdldHNcIiB2YWx1ZT17ZW50aXRsZW1lbnQuc2VsbGVyX3RhcmdldHN9IC8+XG4gICAgICAgIDxTbmFwc2hvdEJsb2NrIHRpdGxlPVwiTWV0YWRhdGFcIiB2YWx1ZT17ZW50aXRsZW1lbnQubWV0YWRhdGF9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb3Vwb25TdW1tYXJ5U2VjdGlvbnMoe1xuICBkZXRhaWwsXG59OiB7XG4gIGRldGFpbDogQ291cG9uRW50aXRsZW1lbnREZXRhaWxcbn0pIHtcbiAgY29uc3QgZW50aXRsZW1lbnQgPSBkZXRhaWwuY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50XG4gIGNvbnN0IGlzc3VhbmNlID0gZGV0YWlsLmNvdXBvbl9pc3N1YW5jZSB8fCBudWxsXG4gIGNvbnN0IGJlbmVmaXRTbmFwc2hvdCA9IGVudGl0bGVtZW50LmJlbmVmaXRfc25hcHNob3QgfHwgbnVsbFxuICBjb25zdCBzb3VyY2VTbmFwc2hvdCA9IGVudGl0bGVtZW50LnNvdXJjZV9zbmFwc2hvdCB8fCBudWxsXG4gIGNvbnN0IG9yZGVyID0gZGV0YWlsLm9yZGVyIHx8IG51bGxcbiAgY29uc3QgbGluZVRvdGFsID0gc25hcHNob3ROdW1iZXIoc291cmNlU25hcHNob3QsIFwidG90YWxcIilcbiAgY29uc3QgZXh0ZXJuYWwgPSBlbnRpdGxlbWVudC5vcmlnaW4gPT09IFwiZXh0ZXJuYWxcIlxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdW1tYXJ5V2lkZ2V0XG4gICAgICAgIGxhYmVsPVwiQmVuZWZpdFwiXG4gICAgICAgIHZhbHVlPXtiZW5lZml0U25hcHNob3RMYWJlbChiZW5lZml0U25hcHNob3QpfVxuICAgICAgLz5cbiAgICAgIHshZXh0ZXJuYWwgJiYgKFxuICAgICAgICA8U3VtbWFyeVdpZGdldFxuICAgICAgICAgIGxhYmVsPVwiTGluZSBUb3RhbFwiXG4gICAgICAgICAgdmFsdWU9e2Zvcm1hdFNuYXBzaG90QW1vdW50KGxpbmVUb3RhbCwgb3JkZXI/LmN1cnJlbmN5X2NvZGUpfVxuICAgICAgICAgIHRvbmU9XCJuZXV0cmFsXCJcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7IWV4dGVybmFsICYmIChcbiAgICAgICAgPENvbnRhaW5lciBjbGFzc05hbWU9XCJkaXZpZGUteSBwLTBcIj5cbiAgICAgICAgICA8V2lkZ2V0SGVhZGVyIHRpdGxlPVwiQ2FtcGFpZ25cIiAvPlxuICAgICAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiQ2FtcGFpZ25cIiB2YWx1ZT17Y2FtcGFpZ25TbmFwc2hvdExhYmVsKGJlbmVmaXRTbmFwc2hvdCl9IC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJQcm9tb3Rpb25cIiB2YWx1ZT17cHJvbW90aW9uU25hcHNob3RMYWJlbChiZW5lZml0U25hcHNob3QpfSAvPlxuICAgICAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgICAgICB0aXRsZT1cIlByb21vdGlvbiBzdGF0dXNcIlxuICAgICAgICAgICAgdmFsdWU9e3NuYXBzaG90U3RyaW5nKGJlbmVmaXRTbmFwc2hvdCwgXCJwcm9tb3Rpb25fc3RhdHVzXCIpIHx8IFwiLVwifVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgKX1cbiAgICAgIHshZXh0ZXJuYWwgJiYgKFxuICAgICAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgICAgIDxXaWRnZXRIZWFkZXIgdGl0bGU9XCJJc3N1YW5jZVwiIC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJTdGF0dXNcIiB2YWx1ZT17aXNzdWFuY2U/LnN0YXR1cyB8fCBcIi1cIn0gLz5cbiAgICAgICAgICA8U2VjdGlvblJvd1xuICAgICAgICAgICAgdGl0bGU9XCJJc3N1ZWQgLyBmYWlsZWRcIlxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICBpc3N1YW5jZVxuICAgICAgICAgICAgICAgID8gYCR7aXNzdWFuY2UuaXNzdWVkX2NvdW50ID8/IDB9IC8gJHtpc3N1YW5jZS5mYWlsZWRfY291bnQgPz8gMH1gXG4gICAgICAgICAgICAgICAgOiBcIi1cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJDb25maWdcIiB2YWx1ZT17ZW50aXRsZW1lbnQuY29uZmlnX2lkIHx8IFwiLVwifSAvPlxuICAgICAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgICAgICB0aXRsZT1cIlZhcmlhbnQgY29uZmlnXCJcbiAgICAgICAgICAgIHZhbHVlPXtlbnRpdGxlbWVudC52YXJpYW50X2NvbmZpZ19pZCB8fCBcIi1cIn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0NvbnRhaW5lcj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvdXBvbkRldGFpbFBhZ2VWaWV3KHsgYXBpQmFzZSB9OiB7IGFwaUJhc2U6IEFwaUJhc2UgfSkge1xuICBjb25zdCBpZCA9IGN1cnJlbnRDb3Vwb25EZXRhaWxJZChhcGlCYXNlKVxuICBjb25zdCBbZGV0YWlsLCBzZXREZXRhaWxdID0gdXNlU3RhdGU8Q291cG9uRW50aXRsZW1lbnREZXRhaWwgfCBudWxsPihudWxsKVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBhY3RpdmUgPSB0cnVlXG4gICAgYXN5bmMgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgc2V0TG9hZEVycm9yKFwiTWlzc2luZyBjb3Vwb24gaWRcIilcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldExvYWRFcnJvcihudWxsKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYXBpRmV0Y2g8Q291cG9uRW50aXRsZW1lbnREZXRhaWw+KFxuICAgICAgICAgIGAke2FwaUJhc2V9L2NvdXBvbi1wcm9kdWN0cy9lbnRpdGxlbWVudHMvJHtlbmNvZGVVUklDb21wb25lbnQoaWQpfWAsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgIHNldERldGFpbChwYXlsb2FkKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgIDogXCJGYWlsZWQgdG8gbG9hZCBjb3Vwb24gZGV0YWlsc1wiXG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICBzZXRMb2FkRXJyb3IobWVzc2FnZSlcbiAgICAgICAgICB0b2FzdC5lcnJvcihtZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZvaWQgbG9hZCgpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZlID0gZmFsc2VcbiAgICB9XG4gIH0sIFthcGlCYXNlLCBpZF0pXG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9XCJMb2FkaW5nIGNvdXBvblwiIC8+XG4gIH1cblxuICBpZiAobG9hZEVycm9yKSB7XG4gICAgcmV0dXJuIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPXtsb2FkRXJyb3J9IC8+XG4gIH1cblxuICBpZiAoIWRldGFpbCkge1xuICAgIHJldHVybiA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT1cIkNvdXBvbiBub3QgZm91bmRcIiAvPlxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VHdvQ29sdW1uTGF5b3V0XG4gICAgICBmaXJzdENvbD17XG4gICAgICAgIDw+XG4gICAgICAgICAgPENvdXBvbkdlbmVyYWxTZWN0aW9uIGRldGFpbD17ZGV0YWlsfSAvPlxuICAgICAgICAgIDxSZWxhdGVkT3JkZXJTZWN0aW9uIGFwaUJhc2U9e2FwaUJhc2V9IGRldGFpbD17ZGV0YWlsfSAvPlxuICAgICAgICAgIDxDb3Vwb25TbmFwc2hvdHNTZWN0aW9uIGRldGFpbD17ZGV0YWlsfSAvPlxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICAgIHNlY29uZENvbD17PENvdXBvblN1bW1hcnlTZWN0aW9ucyBkZXRhaWw9e2RldGFpbH0gLz59XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBFbnRpdGxlbWVudHNUYWJsZSh7XG4gIGVudGl0bGVtZW50cyxcbiAgbG9hZGluZyxcbiAgZXJyb3IsXG4gIG9uT3Blbixcbn06IHtcbiAgZW50aXRsZW1lbnRzOiBDb3Vwb25FbnRpdGxlbWVudFtdXG4gIGxvYWRpbmc6IGJvb2xlYW5cbiAgZXJyb3I6IHN0cmluZyB8IG51bGxcbiAgb25PcGVuOiAoZW50aXRsZW1lbnQ6IENvdXBvbkVudGl0bGVtZW50KSA9PiB2b2lkXG59KSB7XG4gIGlmIChsb2FkaW5nKSB7XG4gICAgcmV0dXJuIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPVwiTG9hZGluZyBjb3Vwb25zXCIgLz5cbiAgfVxuICBpZiAoZXJyb3IpIHtcbiAgICByZXR1cm4gPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9e2Vycm9yfSAvPlxuICB9XG4gIGlmICghZW50aXRsZW1lbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q291cG9uRW1wdHlTdGF0ZVxuICAgICAgICB0aXRsZT1cIk5vIGNvdXBvbnMgZm91bmRcIlxuICAgICAgICBkZXNjcmlwdGlvbj1cIlB1cmNoYXNlZCBjb3Vwb25zIHdpbGwgYXBwZWFyIGhlcmUgYWZ0ZXIgdGhleSBhcmUgaXNzdWVkLlwiXG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFRhYmxlPlxuICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TdGF0dXM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Q29kZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5EYXRlIGlzc3VlZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5PcmRlcjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5DdXN0b21lcjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5PcmlnaW48L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U2VsbGVyIHNjb3BlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlNvdXJjZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5FeHBpcmVzPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgIHtlbnRpdGxlbWVudHMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgPFRhYmxlLlJvd1xuICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctdWktYmctc3VidGxlXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uT3BlbihpdGVtKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgPFN0YXR1c0JhZGdlIGNvbG9yPXtlbnRpdGxlbWVudFN0YXR1c0NvbG9yKGl0ZW0uc3RhdHVzKX0+XG4gICAgICAgICAgICAgICAge2l0ZW0uc3RhdHVzfVxuICAgICAgICAgICAgICA8L1N0YXR1c0JhZGdlPlxuICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2l0ZW0uY29kZSB8fCBpdGVtLnNoYXJlZF9jb2RlIHx8IFwiLVwifTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5DZWxsIHRpdGxlPXtmb3JtYXRGdWxsRGF0ZShpdGVtLmNyZWF0ZWRfYXQpfT5cbiAgICAgICAgICAgICAge2Zvcm1hdFJlbGF0aXZlRGF0ZShpdGVtLmNyZWF0ZWRfYXQpfVxuICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2l0ZW0ub3JkZXJfaWQgfHwgXCItXCJ9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2l0ZW0uZW1haWwgfHwgaXRlbS5jdXN0b21lcl9pZCB8fCBcIi1cIn08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57ZW50aXRsZW1lbnRTb3VyY2UoaXRlbSl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2VudGl0bGVtZW50U2VsbGVyU2NvcGUoaXRlbSl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgIHtzbmFwc2hvdFN0cmluZyhpdGVtLnNvdXJjZV9zbmFwc2hvdCwgXCJ0aXRsZVwiKSB8fFxuICAgICAgICAgICAgICAgIHNuYXBzaG90U3RyaW5nKGl0ZW0uc291cmNlX3NuYXBzaG90LCBcInNvdXJjZVwiKSB8fFxuICAgICAgICAgICAgICAgIGl0ZW0ucHJvZHVjdF9pZCB8fFxuICAgICAgICAgICAgICAgIFwiRXh0ZXJuYWxcIn1cbiAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5DZWxsPntmb3JtYXREYXRlKGl0ZW0uZXhwaXJlc19hdCl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICApKX1cbiAgICAgIDwvVGFibGUuQm9keT5cbiAgICA8L1RhYmxlPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb3Vwb25zUGFnZVZpZXcoe1xuICBhcGlCYXNlLFxuICB0aXRsZSxcbn06IHtcbiAgYXBpQmFzZTogQXBpQmFzZVxuICB0aXRsZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IFtlbnRpdGxlbWVudHMsIHNldEVudGl0bGVtZW50c10gPSB1c2VTdGF0ZTxDb3Vwb25FbnRpdGxlbWVudFtdPihbXSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2xvYWRFcnJvciwgc2V0TG9hZEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtmaWx0ZXIsIHNldEZpbHRlcl0gPSB1c2VTdGF0ZTxFbnRpdGxlbWVudEZpbHRlcj4oXCJhbGxcIilcblxuICBjb25zdCBsb2FkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRMb2FkRXJyb3IobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGFwaUZldGNoPHtcbiAgICAgICAgY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50czogQ291cG9uRW50aXRsZW1lbnRbXVxuICAgICAgfT4oYCR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzL2VudGl0bGVtZW50c2ApXG4gICAgICBzZXRFbnRpdGxlbWVudHMocGF5bG9hZC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRzIHx8IFtdKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkZhaWxlZCB0byBsb2FkIGNvdXBvbnNcIlxuICAgICAgc2V0TG9hZEVycm9yKG1lc3NhZ2UpXG4gICAgICB0b2FzdC5lcnJvcihtZXNzYWdlKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW2FwaUJhc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCBsb2FkKClcbiAgfSwgW2xvYWRdKVxuXG4gIGNvbnN0IG9wZW5EZXRhaWwgPSB1c2VDYWxsYmFjayhcbiAgICAoZW50aXRsZW1lbnQ6IENvdXBvbkVudGl0bGVtZW50KSA9PiB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGNvdXBvbkRldGFpbFBhdGgoYXBpQmFzZSwgZW50aXRsZW1lbnQuaWQpKVxuICAgIH0sXG4gICAgW2FwaUJhc2VdLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS00XCI+XG4gICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDFcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIGxvYWQoKX0+XG4gICAgICAgICAgPEFycm93UGF0aCAvPlxuICAgICAgICAgIFJlZnJlc2hcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxUYWJzXG4gICAgICAgIHZhbHVlPXtmaWx0ZXJ9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT4gc2V0RmlsdGVyKHZhbHVlIGFzIEVudGl0bGVtZW50RmlsdGVyKX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJweC02IHB5LTIgYm9yZGVyLWJcIj5cbiAgICAgICAgICA8VGFicy5MaXN0PlxuICAgICAgICAgICAge2VudGl0bGVtZW50RmlsdGVycy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgICAgPFRhYnMuVHJpZ2dlciBrZXk9e2l0ZW0udmFsdWV9IHZhbHVlPXtpdGVtLnZhbHVlfT5cbiAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cbiAgICAgICAgICAgICAgPC9UYWJzLlRyaWdnZXI+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1RhYnMuTGlzdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtlbnRpdGxlbWVudEZpbHRlcnMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgPFRhYnMuQ29udGVudCBrZXk9e2l0ZW0udmFsdWV9IHZhbHVlPXtpdGVtLnZhbHVlfT5cbiAgICAgICAgICAgIDxFbnRpdGxlbWVudHNUYWJsZVxuICAgICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgICAgICBlcnJvcj17bG9hZEVycm9yfVxuICAgICAgICAgICAgICBvbk9wZW49e29wZW5EZXRhaWx9XG4gICAgICAgICAgICAgIGVudGl0bGVtZW50cz17XG4gICAgICAgICAgICAgICAgaXRlbS52YWx1ZSA9PT0gXCJhbGxcIlxuICAgICAgICAgICAgICAgICAgPyBlbnRpdGxlbWVudHNcbiAgICAgICAgICAgICAgICAgIDogZW50aXRsZW1lbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAoZW50aXRsZW1lbnQpID0+IGVudGl0bGVtZW50LnN0YXR1cyA9PT0gaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVGFicy5Db250ZW50PlxuICAgICAgICApKX1cbiAgICAgIDwvVGFicz5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ291cG9uUHJvZHVjdHNQYWdlVmlldyh7XG4gIGFwaUJhc2UsXG4gIHRpdGxlLFxuICBhbGxvd1Byb21vdGlvbk1pcnJvciA9IGZhbHNlLFxufToge1xuICBhcGlCYXNlOiBBcGlCYXNlXG4gIHRpdGxlOiBzdHJpbmdcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3I/OiBib29sZWFuXG59KSB7XG4gIHJldHVybiAoXG4gICAgPENvdXBvblByb2R1Y3RzUGFnZVxuICAgICAgYXBpQmFzZT17YXBpQmFzZX1cbiAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgIGFsbG93UHJvbW90aW9uTWlycm9yPXthbGxvd1Byb21vdGlvbk1pcnJvcn1cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIExlZ2FjeUNvdXBvblByb2R1Y3RzUGFnZVZpZXcoe1xuICBhcGlCYXNlLFxuICB0aXRsZSxcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3IgPSBmYWxzZSxcbn06IHtcbiAgYXBpQmFzZTogQXBpQmFzZVxuICB0aXRsZTogc3RyaW5nXG4gIGFsbG93UHJvbW90aW9uTWlycm9yPzogYm9vbGVhblxufSkge1xuICBjb25zdCBbcHJvZHVjdHMsIHNldFByb2R1Y3RzXSA9IHVzZVN0YXRlPENvdXBvblByb2R1Y3RSb3dbXT4oW10pXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPE9wdGlvbnNQYXlsb2FkPih7fSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2xvYWRFcnJvciwgc2V0TG9hZEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFttb2RhbE9wZW4sIHNldE1vZGFsT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NhdmluZywgc2V0U2F2aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbYWN0aXZlU3RlcCwgc2V0QWN0aXZlU3RlcF0gPSB1c2VTdGF0ZTxXaXphcmRTdGVwPihcImRldGFpbHNcIilcbiAgY29uc3QgW3Byb2R1Y3RGb3JtLCBzZXRQcm9kdWN0Rm9ybV0gPSB1c2VTdGF0ZTxQcm9kdWN0Rm9ybVN0YXRlPihlbXB0eVByb2R1Y3QpXG4gIGNvbnN0IFtjb3Vwb25Gb3JtLCBzZXRDb3Vwb25Gb3JtXSA9IHVzZVN0YXRlPENvdXBvbkZvcm1TdGF0ZT4oZW1wdHlDb3Vwb24pXG4gIGNvbnN0IFtjYW1wYWlnbkZvcm0sIHNldENhbXBhaWduRm9ybV0gPVxuICAgIHVzZVN0YXRlPENhbXBhaWduRm9ybVN0YXRlPihlbXB0eUNhbXBhaWduKVxuICBjb25zdCBwcm9tcHQgPSB1c2VQcm9tcHQoKVxuXG4gIGNvbnN0IGNvdXBvbkJhc2UgPSBgJHthcGlCYXNlfS9jb3Vwb24tcHJvZHVjdHNgXG5cbiAgY29uc3QgbG9hZCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgc2V0TG9hZEVycm9yKG51bGwpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtwcm9kdWN0c1BheWxvYWQsIG9wdGlvbnNQYXlsb2FkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgYXBpRmV0Y2g8eyBjb3Vwb25fcHJvZHVjdHM6IENvdXBvblByb2R1Y3RSb3dbXSB9Pihjb3Vwb25CYXNlKSxcbiAgICAgICAgYXBpRmV0Y2g8T3B0aW9uc1BheWxvYWQ+KGAke2NvdXBvbkJhc2V9L29wdGlvbnNgKSxcbiAgICAgIF0pXG4gICAgICBzZXRQcm9kdWN0cyhwcm9kdWN0c1BheWxvYWQuY291cG9uX3Byb2R1Y3RzIHx8IFtdKVxuICAgICAgc2V0T3B0aW9ucyhvcHRpb25zUGF5bG9hZCB8fCB7fSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICA6IFwiRmFpbGVkIHRvIGxvYWQgY291cG9uIHByb2R1Y3RzXCJcbiAgICAgIHNldExvYWRFcnJvcihtZXNzYWdlKVxuICAgICAgdG9hc3QuZXJyb3IobWVzc2FnZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH0sIFtjb3Vwb25CYXNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHZvaWQgbG9hZCgpXG4gIH0sIFtsb2FkXSlcblxuICBjb25zdCBvcHRpb25EZWZhdWx0cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNhbGVzX2NoYW5uZWxfaWQ6IG9wdGlvbnMuc2FsZXNfY2hhbm5lbHM/LlswXT8uaWQgfHwgXCJcIixcbiAgICAgIGN1cnJlbmN5X2NvZGU6XG4gICAgICAgIG9wdGlvbnMuY3VycmVuY2llcz8uZmluZCgoY3VycmVuY3kpID0+IGN1cnJlbmN5LmlzX2RlZmF1bHQpPy5jb2RlIHx8XG4gICAgICAgIG9wdGlvbnMuY3VycmVuY2llcz8uWzBdPy5jb2RlIHx8XG4gICAgICAgIFwiXCIsXG4gICAgfSksXG4gICAgW29wdGlvbnNdLFxuICApXG5cbiAgY29uc3QgY3VycmVuY2llcyA9IG9wdGlvbnMuY3VycmVuY2llcyB8fCBbXVxuICBjb25zdCBzdXBwb3J0ZWRDdXJyZW5jeUNvZGVzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBuZXcgU2V0KGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSkpLFxuICAgIFtjdXJyZW5jaWVzXSxcbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZVByb2R1Y3QgPVxuICAgIChmaWVsZDoga2V5b2YgUHJvZHVjdEZvcm1TdGF0ZSkgPT5cbiAgICAoZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIFtmaWVsZF06IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgIH0pKVxuICAgIH1cblxuICBjb25zdCB1cGRhdGVDb3Vwb24gPVxuICAgIChmaWVsZDoga2V5b2YgQ291cG9uRm9ybVN0YXRlKSA9PlxuICAgIChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIFtmaWVsZF06IGV2ZW50LnRhcmdldC52YWx1ZSB9KSlcbiAgICB9XG5cbiAgY29uc3QgdXBkYXRlQ2FtcGFpZ24gPVxuICAgIChmaWVsZDoga2V5b2YgQ2FtcGFpZ25Gb3JtU3RhdGUpID0+XG4gICAgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Q2FtcGFpZ25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICBbZmllbGRdOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICB9KSlcbiAgICB9XG5cbiAgZnVuY3Rpb24gb3BlbkNyZWF0ZSgpIHtcbiAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSBvcHRpb25EZWZhdWx0cy5jdXJyZW5jeV9jb2RlXG4gICAgc2V0UHJvZHVjdEZvcm0oe1xuICAgICAgLi4uZW1wdHlQcm9kdWN0LFxuICAgICAgLi4ub3B0aW9uRGVmYXVsdHMsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uZW1wdHlWYXJpYW50LFxuICAgICAgICAgIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBvdmVycmlkZV9jdXJyZW5jeV9jb2RlOiBjdXJyZW5jeUNvZGUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgc2V0Q291cG9uRm9ybSh7IC4uLmVtcHR5Q291cG9uLCBjdXJyZW5jeV9jb2RlOiBjdXJyZW5jeUNvZGUgfSlcbiAgICBzZXRDYW1wYWlnbkZvcm0oZW1wdHlDYW1wYWlnbilcbiAgICBzZXRBY3RpdmVTdGVwKFwiZGV0YWlsc1wiKVxuICAgIHNldE1vZGFsT3Blbih0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlbkVkaXQocm93OiBDb3Vwb25Qcm9kdWN0Um93KSB7XG4gICAgY29uc3QgZm9ybXMgPSBmb3JtRnJvbVJvdyhyb3csIG9wdGlvbkRlZmF1bHRzLmN1cnJlbmN5X2NvZGUpXG4gICAgc2V0UHJvZHVjdEZvcm0oe1xuICAgICAgLi4uZm9ybXMucHJvZHVjdCxcbiAgICAgIHZhcmlhbnRzOiBmb3Jtcy5wcm9kdWN0LnZhcmlhbnRzLmxlbmd0aFxuICAgICAgICA/IGZvcm1zLnByb2R1Y3QudmFyaWFudHNcbiAgICAgICAgOiBbeyAuLi5lbXB0eVZhcmlhbnQgfV0sXG4gICAgfSlcbiAgICBzZXRDb3Vwb25Gb3JtKGZvcm1zLmNvdXBvbilcbiAgICBzZXRDYW1wYWlnbkZvcm0oZm9ybXMuY2FtcGFpZ24pXG4gICAgc2V0QWN0aXZlU3RlcChcImRldGFpbHNcIilcbiAgICBzZXRNb2RhbE9wZW4odHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFZhcmlhbnQoaW5kZXg6IG51bWJlciwgcGF0Y2g6IFBhcnRpYWw8VmFyaWFudEZvcm1TdGF0ZT4pIHtcbiAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YXJpYW50czogY3VycmVudC52YXJpYW50cy5tYXAoKHZhcmlhbnQsIHZhcmlhbnRJbmRleCkgPT5cbiAgICAgICAgdmFyaWFudEluZGV4ID09PSBpbmRleCA/IHsgLi4udmFyaWFudCwgLi4ucGF0Y2ggfSA6IHZhcmlhbnQsXG4gICAgICApLFxuICAgIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkVmFyaWFudCgpIHtcbiAgICBjb25zdCBjdXJyZW5jeUNvZGUgPVxuICAgICAgY291cG9uRm9ybS5jdXJyZW5jeV9jb2RlIHx8IG9wdGlvbkRlZmF1bHRzLmN1cnJlbmN5X2NvZGVcbiAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICAuLi5jdXJyZW50LnZhcmlhbnRzLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZW1wdHlWYXJpYW50LFxuICAgICAgICAgIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBvdmVycmlkZV9jdXJyZW5jeV9jb2RlOiBjdXJyZW5jeUNvZGUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlVmFyaWFudChpbmRleDogbnVtYmVyKSB7XG4gICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgdmFyaWFudHM6IGN1cnJlbnQudmFyaWFudHMuZmlsdGVyKFxuICAgICAgICAoXywgdmFyaWFudEluZGV4KSA9PiB2YXJpYW50SW5kZXggIT09IGluZGV4LFxuICAgICAgKSxcbiAgICB9KSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2R1Y3RQYXlsb2FkKGluY2x1ZGVWYXJpYW50czogYm9vbGVhbikge1xuICAgIGNvbnN0IHByb2R1Y3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgdGl0bGU6IHByb2R1Y3RGb3JtLnRpdGxlLFxuICAgICAgc3VidGl0bGU6IHByb2R1Y3RGb3JtLnN1YnRpdGxlIHx8IG51bGwsXG4gICAgICBoYW5kbGU6IHByb2R1Y3RGb3JtLmhhbmRsZSB8fCBudWxsLFxuICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3RGb3JtLmRlc2NyaXB0aW9uIHx8IG51bGwsXG4gICAgICBzdGF0dXM6IHByb2R1Y3RGb3JtLnN0YXR1cyxcbiAgICAgIHRodW1ibmFpbDogcHJvZHVjdEZvcm0udGh1bWJuYWlsIHx8IG51bGwsXG4gICAgICBkaXNjb3VudGFibGU6IHByb2R1Y3RGb3JtLmRpc2NvdW50YWJsZSxcbiAgICAgIHR5cGVfaWQ6IHByb2R1Y3RGb3JtLnR5cGVfaWQgfHwgbnVsbCxcbiAgICAgIGNvbGxlY3Rpb25faWQ6IHByb2R1Y3RGb3JtLmNvbGxlY3Rpb25faWQgfHwgbnVsbCxcbiAgICAgIGNhdGVnb3JpZXM6IHByb2R1Y3RGb3JtLmNhdGVnb3J5X2lkXG4gICAgICAgID8gW3sgaWQ6IHByb2R1Y3RGb3JtLmNhdGVnb3J5X2lkIH1dXG4gICAgICAgIDogW10sXG4gICAgICB0YWdzOiBwcm9kdWN0Rm9ybS50YWdfaWQgPyBbeyBpZDogcHJvZHVjdEZvcm0udGFnX2lkIH1dIDogW10sXG4gICAgICBzYWxlc19jaGFubmVsczogcHJvZHVjdEZvcm0uc2FsZXNfY2hhbm5lbF9pZFxuICAgICAgICA/IFt7IGlkOiBwcm9kdWN0Rm9ybS5zYWxlc19jaGFubmVsX2lkIH1dXG4gICAgICAgIDogW10sXG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVWYXJpYW50cykge1xuICAgICAgcHJvZHVjdC52YXJpYW50cyA9IHByb2R1Y3RGb3JtLnZhcmlhbnRzLm1hcCgodmFyaWFudCkgPT4gKHtcbiAgICAgICAgdGl0bGU6IHZhcmlhbnQudGl0bGUsXG4gICAgICAgIHNrdTogdmFyaWFudC5za3UgfHwgbnVsbCxcbiAgICAgICAgbWFuYWdlX2ludmVudG9yeTogZmFsc2UsXG4gICAgICAgIGFsbG93X2JhY2tvcmRlcjogdHJ1ZSxcbiAgICAgICAgcHJpY2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3VycmVuY3lfY29kZTogdmFyaWFudC5jdXJyZW5jeV9jb2RlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgYW1vdW50OiBOdW1iZXIodmFyaWFudC5hbW91bnQpIHx8IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pKVxuICAgIH1cblxuICAgIHJldHVybiBwcm9kdWN0XG4gIH1cblxuICBmdW5jdGlvbiB2YXJpYW50T3ZlcnJpZGVzKCkge1xuICAgIHJldHVybiBwcm9kdWN0Rm9ybS52YXJpYW50c1xuICAgICAgLm1hcCgodmFyaWFudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCF2YXJpYW50Lm92ZXJyaWRlX2VuYWJsZWQpIHJldHVybiBudWxsXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFyaWFudF9pbmRleDogaW5kZXgsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBiZW5lZml0X3R5cGU6IHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlLFxuICAgICAgICAgIGFtb3VudDpcbiAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiXG4gICAgICAgICAgICAgID8gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfYW1vdW50KVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgcGVyY2VudGFnZTpcbiAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICA/IG51bWJlck9yTnVsbCh2YXJpYW50Lm92ZXJyaWRlX3BlcmNlbnRhZ2UpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBjdXJyZW5jeV9jb2RlOlxuICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgPyB2YXJpYW50Lm92ZXJyaWRlX2N1cnJlbmN5X2NvZGUudHJpbSgpLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgICAgICBjb3Vwb25Gb3JtLmN1cnJlbmN5X2NvZGVcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVGb3JtKCkge1xuICAgIGlmICghcHJvZHVjdEZvcm0udGl0bGUudHJpbSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9kdWN0IHRpdGxlIGlzIHJlcXVpcmVkXCIpXG4gICAgfVxuICAgIGlmICghcHJvZHVjdEZvcm0uaWQgJiYgIXByb2R1Y3RGb3JtLnZhcmlhbnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXQgbGVhc3Qgb25lIHByb2R1Y3QgdmFyaWFudCBpcyByZXF1aXJlZFwiKVxuICAgIH1cbiAgICBpZiAoIWN1cnJlbmNpZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgYSBzdXBwb3J0ZWQgY3VycmVuY3kgdG8gdGhlIHN0b3JlIGJlZm9yZSBjb250aW51aW5nXCIpXG4gICAgfVxuICAgIGlmICghcHJvZHVjdEZvcm0uaWQpIHtcbiAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBwcm9kdWN0Rm9ybS52YXJpYW50cykge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZEN1cnJlbmN5Q29kZXMuaGFzKHZhcmlhbnQuY3VycmVuY3lfY29kZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlbGVjdCBhbiBhdmFpbGFibGUgY3VycmVuY3kgZm9yICR7dmFyaWFudC50aXRsZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNvdXBvbkZvcm0uYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgICBudW1iZXJPck51bGwoY291cG9uRm9ybS5hbW91bnQpID09IG51bGxcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgcG9zaXRpdmUgY291cG9uIGFtb3VudCBpcyByZXF1aXJlZFwiKVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIiAmJlxuICAgICAgIXN1cHBvcnRlZEN1cnJlbmN5Q29kZXMuaGFzKGNvdXBvbkZvcm0uY3VycmVuY3lfY29kZSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBhbiBhdmFpbGFibGUgY291cG9uIGN1cnJlbmN5XCIpXG4gICAgfVxuICAgIGlmIChjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSA9PT0gXCJwZXJjZW50YWdlXCIpIHtcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBudW1iZXJPck51bGwoY291cG9uRm9ybS5wZXJjZW50YWdlKVxuICAgICAgaWYgKHBlcmNlbnRhZ2UgPT0gbnVsbCB8fCBwZXJjZW50YWdlID4gMTAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdXBvbiBwZXJjZW50YWdlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDBcIilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgY291cG9uRm9ybS5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCIgJiZcbiAgICAgICFjb3Vwb25Gb3JtLnNoYXJlZF9jb2RlLnRyaW0oKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBzaGFyZWQgY291cG9uIGNvZGUgaXMgcmVxdWlyZWRcIilcbiAgICB9XG4gICAgaWYgKGNvdXBvbkZvcm0uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCIpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSBuZXcgRGF0ZShjb3Vwb25Gb3JtLmV4cGlyYXRpb25fZGF0ZSlcbiAgICAgIGlmICghY291cG9uRm9ybS5leHBpcmF0aW9uX2RhdGUgfHwgTnVtYmVyLmlzTmFOKGV4cGlyYXRpb24uZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHZhbGlkIGZpeGVkIGV4cGlyYXRpb24gZGF0ZSBpcyByZXF1aXJlZFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY291cG9uRm9ybS5leHBpcmF0aW9uX2NhcF9hdCkge1xuICAgICAgY29uc3QgZXhwaXJhdGlvbkNhcCA9IG5ldyBEYXRlKGNvdXBvbkZvcm0uZXhwaXJhdGlvbl9jYXBfYXQpXG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKGV4cGlyYXRpb25DYXAuZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHZhbGlkIGV4cGlyYXRpb24gY2FwIGRhdGUgaXMgcmVxdWlyZWRcIilcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHByb2R1Y3RGb3JtLnZhcmlhbnRzKSB7XG4gICAgICBpZiAoIXZhcmlhbnQub3ZlcnJpZGVfZW5hYmxlZCkgY29udGludWVcbiAgICAgIGlmIChcbiAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIgJiZcbiAgICAgICAgbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfYW1vdW50KSA9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBIHBvc2l0aXZlIGNvdXBvbiBhbW91bnQgaXMgcmVxdWlyZWQgZm9yICR7dmFyaWFudC50aXRsZX1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgICAgICFzdXBwb3J0ZWRDdXJyZW5jeUNvZGVzLmhhcyh2YXJpYW50Lm92ZXJyaWRlX2N1cnJlbmN5X2NvZGUpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTZWxlY3QgYW4gYXZhaWxhYmxlIGNvdXBvbiBjdXJyZW5jeSBmb3IgJHt2YXJpYW50LnRpdGxlfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmICh2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJwZXJjZW50YWdlXCIpIHtcbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IG51bWJlck9yTnVsbCh2YXJpYW50Lm92ZXJyaWRlX3BlcmNlbnRhZ2UpXG4gICAgICAgIGlmIChwZXJjZW50YWdlID09IG51bGwgfHwgcGVyY2VudGFnZSA+IDEwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDb3Vwb24gcGVyY2VudGFnZSBmb3IgJHt2YXJpYW50LnRpdGxlfSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwYCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgYWxsb3dQcm9tb3Rpb25NaXJyb3IgJiZcbiAgICAgIGNhbXBhaWduRm9ybS5tb2RlID09PSBcImV4aXN0aW5nXCIgJiZcbiAgICAgICFjYW1wYWlnbkZvcm0uY2FtcGFpZ25faWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBhbiBleGlzdGluZyBjYW1wYWlnblwiKVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBhbGxvd1Byb21vdGlvbk1pcnJvciAmJlxuICAgICAgY2FtcGFpZ25Gb3JtLm1vZGUgPT09IFwibmV3XCIgJiZcbiAgICAgICghY2FtcGFpZ25Gb3JtLm5hbWUudHJpbSgpIHx8ICFjYW1wYWlnbkZvcm0uY2FtcGFpZ25faWRlbnRpZmllci50cmltKCkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW1wYWlnbiBuYW1lIGFuZCBpZGVudGlmaWVyIGFyZSByZXF1aXJlZFwiKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN5bmNWYXJpYW50T3ZlcnJpZGVzKHByb2R1Y3RJZDogc3RyaW5nKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwcm9kdWN0Rm9ybS52YXJpYW50cy5tYXAoYXN5bmMgKHZhcmlhbnQpID0+IHtcbiAgICAgICAgaWYgKCF2YXJpYW50LmlkKSByZXR1cm5cblxuICAgICAgICBpZiAoIXZhcmlhbnQub3ZlcnJpZGVfZW5hYmxlZCkge1xuICAgICAgICAgIGlmICh2YXJpYW50Lm92ZXJyaWRlX2NvbmZpZ19pZCkge1xuICAgICAgICAgICAgYXdhaXQgYXBpRmV0Y2goYCR7Y291cG9uQmFzZX0vJHtwcm9kdWN0SWR9L3ZhcmlhbnRzYCwge1xuICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgdmFyaWFudF9pZDogdmFyaWFudC5pZCxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGFwaUZldGNoKGAke2NvdXBvbkJhc2V9LyR7cHJvZHVjdElkfS92YXJpYW50c2AsIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHZhcmlhbnRfaWQ6IHZhcmlhbnQuaWQsXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgYmVuZWZpdF90eXBlOiB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSxcbiAgICAgICAgICAgIGFtb3VudDpcbiAgICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgICA/IG51bWJlck9yTnVsbCh2YXJpYW50Lm92ZXJyaWRlX2Ftb3VudClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBwZXJjZW50YWdlOlxuICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJwZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICA/IG51bWJlck9yTnVsbCh2YXJpYW50Lm92ZXJyaWRlX3BlcmNlbnRhZ2UpXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgY3VycmVuY3lfY29kZTpcbiAgICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgICA/IHZhcmlhbnQub3ZlcnJpZGVfY3VycmVuY3lfY29kZS50cmltKCkudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgICAgICAgY291cG9uRm9ybS5jdXJyZW5jeV9jb2RlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2F2ZVByb2R1Y3QoKSB7XG4gICAgc2V0U2F2aW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlRm9ybSgpXG4gICAgICBjb25zdCBpc0VkaXQgPSBCb29sZWFuKHByb2R1Y3RGb3JtLmlkKVxuICAgICAgY29uc3QgcGF0aCA9IGlzRWRpdCA/IGAke2NvdXBvbkJhc2V9LyR7cHJvZHVjdEZvcm0uaWR9YCA6IGNvdXBvbkJhc2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGlzRWRpdCA/IFwiUEFUQ0hcIiA6IFwiUE9TVFwiXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBwcm9kdWN0OiBwcm9kdWN0UGF5bG9hZCghaXNFZGl0KSxcbiAgICAgICAgY291cG9uOiBidWlsZENvdXBvblBheWxvYWQoY291cG9uRm9ybSwgYWxsb3dQcm9tb3Rpb25NaXJyb3IpLFxuICAgICAgICBjYW1wYWlnbjogYnVpbGRDYW1wYWlnblBheWxvYWQoY2FtcGFpZ25Gb3JtLCBhbGxvd1Byb21vdGlvbk1pcnJvciksXG4gICAgICAgIHNlbGxlcl9pZDogcHJvZHVjdEZvcm0uc2VsbGVyX2lkIHx8IG51bGwsXG4gICAgICAgIHZhcmlhbnRfb3ZlcnJpZGVzOiBpc0VkaXQgPyBbXSA6IHZhcmlhbnRPdmVycmlkZXMoKSxcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYXBpRmV0Y2gocGF0aCwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgICAgfSlcbiAgICAgIGlmIChpc0VkaXQpIHtcbiAgICAgICAgYXdhaXQgc3luY1ZhcmlhbnRPdmVycmlkZXMocHJvZHVjdEZvcm0uaWQpXG4gICAgICB9XG4gICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICBpc0VkaXQgPyBcIkNvdXBvbiBwcm9kdWN0IHVwZGF0ZWRcIiA6IFwiQ291cG9uIHByb2R1Y3QgY3JlYXRlZFwiLFxuICAgICAgKVxuICAgICAgc2V0TW9kYWxPcGVuKGZhbHNlKVxuICAgICAgYXdhaXQgbG9hZCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRvYXN0LmVycm9yKFxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgOiBcIkZhaWxlZCB0byBzYXZlIGNvdXBvbiBwcm9kdWN0XCIsXG4gICAgICApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVQcm9kdWN0KHJvdzogQ291cG9uUHJvZHVjdFJvdykge1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHByb21wdCh7XG4gICAgICB0aXRsZTogXCJSZW1vdmUgY291cG9uIHByb2R1Y3Q/XCIsXG4gICAgICBkZXNjcmlwdGlvbjogYFRoaXMgcmVtb3ZlcyBjb3Vwb24gaXNzdWFuY2UgZnJvbSAke1xuICAgICAgICByb3cucHJvZHVjdC50aXRsZSB8fCByb3cucHJvZHVjdC5pZFxuICAgICAgfS4gVGhlIHVuZGVybHlpbmcgTWVkdXNhIHByb2R1Y3Qgd2lsbCByZW1haW4gYXZhaWxhYmxlLmAsXG4gICAgICBjb25maXJtVGV4dDogXCJSZW1vdmUgcHJvZHVjdFwiLFxuICAgICAgY2FuY2VsVGV4dDogXCJDYW5jZWxcIixcbiAgICAgIHZhcmlhbnQ6IFwiZGFuZ2VyXCIsXG4gICAgfSlcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBpRmV0Y2goYCR7Y291cG9uQmFzZX0vJHtyb3cucHJvZHVjdC5pZH1gLCB7IG1ldGhvZDogXCJERUxFVEVcIiB9KVxuICAgICAgdG9hc3Quc3VjY2VzcyhcIkNvdXBvbiBjb25maWd1cmF0aW9uIHJlbW92ZWRcIilcbiAgICAgIGF3YWl0IGxvYWQoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgIDogXCJGYWlsZWQgdG8gcmVtb3ZlIGNvdXBvbiBwcm9kdWN0XCIsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbWlycm9yUHJvbW90aW9uKHJvdzogQ291cG9uUHJvZHVjdFJvdykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcGlGZXRjaChcbiAgICAgICAgYC9hZG1pbi9jb3Vwb24tcHJvZHVjdHMvJHtyb3cucHJvZHVjdC5pZH0vbWlycm9yLXByb21vdGlvbmAsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHt9KSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIHRvYXN0LnN1Y2Nlc3MoXCJQcm9tb3Rpb24gbWlycm9yIGNyZWF0ZWRcIilcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIk1pcnJvciBmYWlsZWRcIilcbiAgICB9XG4gIH1cblxuICBjb25zdCBjdXJyZW50U3RlcEluZGV4ID0gc3RlcHMuaW5kZXhPZihhY3RpdmVTdGVwKVxuICBjb25zdCBjYW5Hb0JhY2sgPSBjdXJyZW50U3RlcEluZGV4ID4gMFxuICBjb25zdCBjYW5Hb05leHQgPSBjdXJyZW50U3RlcEluZGV4IDwgc3RlcHMubGVuZ3RoIC0gMVxuICBjb25zdCBzaG93Q2FtcGFpZ25TdGVwID0gYWxsb3dQcm9tb3Rpb25NaXJyb3JcbiAgY29uc3QgdmlzaWJsZVN0ZXBzID0gc2hvd0NhbXBhaWduU3RlcFxuICAgID8gc3RlcHNcbiAgICA6IHN0ZXBzLmZpbHRlcigoc3RlcCkgPT4gc3RlcCAhPT0gXCJjYW1wYWlnblwiKVxuXG4gIHJldHVybiAoXG4gICAgPENvbnRhaW5lciBjbGFzc05hbWU9XCJkaXZpZGUteSBwLTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTYgcHktNFwiPlxuICAgICAgICA8SGVhZGluZyBsZXZlbD1cImgxXCI+e3RpdGxlfTwvSGVhZGluZz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0yXCI+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gdm9pZCBsb2FkKCl9PlxuICAgICAgICAgICAgPEFycm93UGF0aCAvPlxuICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgb25DbGljaz17b3BlbkNyZWF0ZX0+XG4gICAgICAgICAgICA8UGx1cyAvPlxuICAgICAgICAgICAgQ3JlYXRlXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9XCJMb2FkaW5nIGNvdXBvbiBwcm9kdWN0c1wiIC8+XG4gICAgICApIDogbG9hZEVycm9yID8gKFxuICAgICAgICA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT17bG9hZEVycm9yfSAvPlxuICAgICAgKSA6IHByb2R1Y3RzLmxlbmd0aCA/IChcbiAgICAgICAgPFRhYmxlPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Qcm9kdWN0PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TdGF0dXM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkJlbmVmaXQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNvZGU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNhbXBhaWduPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Jc3N1ZWQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsIC8+XG4gICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgIHtwcm9kdWN0cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSByb3cuY291cG9uX3Byb2R1Y3RfY29uZmlnXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e3Jvdy5pZH0+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Jvdy5wcm9kdWN0LnRpdGxlIHx8IHJvdy5wcm9kdWN0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cm93LnByb2R1Y3QuaGFuZGxlIHx8IHJvdy5wcm9kdWN0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFN0YXR1c0JhZGdlIGNvbG9yPXtwcm9kdWN0U3RhdHVzQ29sb3Iocm93LnByb2R1Y3Quc3RhdHVzKX0+XG4gICAgICAgICAgICAgICAgICAgICAge3Jvdy5wcm9kdWN0LnN0YXR1cyB8fCBcImRyYWZ0XCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvU3RhdHVzQmFkZ2U+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57YmVuZWZpdExhYmVsKGNvbmZpZyl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIHtjb25maWcuY29kZV9zdHJhdGVneSA9PT0gXCJzaGFyZWRfY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb25maWcuc2hhcmVkX2NvZGUgfHwgXCItXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IGNvbmZpZy5jb2RlX3ByZWZpeCB8fCBcIkNPVVBPTlwifVxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2NhbXBhaWduTGFiZWwoY29uZmlnKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cm93LmVudGl0bGVtZW50c19jb3VudCB8fCAwfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIHthbGxvd1Byb21vdGlvbk1pcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIG1pcnJvclByb21vdGlvbihyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBNaXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb3BlbkVkaXQocm93KX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGVuY2lsU3F1YXJlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCBkZWxldGVQcm9kdWN0KHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgY29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgIDwvVGFibGU+XG4gICAgICApIDogKFxuICAgICAgICA8Q291cG9uRW1wdHlTdGF0ZVxuICAgICAgICAgIHRpdGxlPVwiTm8gY291cG9uIHByb2R1Y3RzIGZvdW5kXCJcbiAgICAgICAgICBkZXNjcmlwdGlvbj1cIkNyZWF0ZSBhIG5ldyBjb3Vwb24gcHJvZHVjdCB0byBnZXQgc3RhcnRlZC5cIlxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAgPEZvY3VzTW9kYWwgb3Blbj17bW9kYWxPcGVufSBvbk9wZW5DaGFuZ2U9e3NldE1vZGFsT3Blbn0+XG4gICAgICAgIDxGb2N1c01vZGFsLkNvbnRlbnQgc3R5bGU9e21vZGFsQ29udGVudFN0eWxlfT5cbiAgICAgICAgICA8Rm9jdXNNb2RhbC5IZWFkZXIgc3R5bGU9e21vZGFsU3RhdGljUm93U3R5bGV9PlxuICAgICAgICAgICAgPEZvY3VzTW9kYWwuVGl0bGU+XG4gICAgICAgICAgICAgIHtwcm9kdWN0Rm9ybS5pZCA/IFwiRWRpdCBDb3Vwb24gUHJvZHVjdFwiIDogXCJDcmVhdGUgQ291cG9uIFByb2R1Y3RcIn1cbiAgICAgICAgICAgIDwvRm9jdXNNb2RhbC5UaXRsZT5cbiAgICAgICAgICA8L0ZvY3VzTW9kYWwuSGVhZGVyPlxuICAgICAgICAgIDxQcm9ncmVzc1RhYnNcbiAgICAgICAgICAgIHZhbHVlPXthY3RpdmVTdGVwfVxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PiBzZXRBY3RpdmVTdGVwKHZhbHVlIGFzIFdpemFyZFN0ZXApfVxuICAgICAgICAgICAgc3R5bGU9e21vZGFsV2l6YXJkU3R5bGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFByb2dyZXNzVGFicy5MaXN0IGNsYXNzTmFtZT1cImJvcmRlci1iXCIgc3R5bGU9e21vZGFsU3RhdGljUm93U3R5bGV9PlxuICAgICAgICAgICAgICB7dmlzaWJsZVN0ZXBzLm1hcCgoc3RlcCkgPT4gKFxuICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuVHJpZ2dlclxuICAgICAgICAgICAgICAgICAga2V5PXtzdGVwfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3N0ZXB9XG4gICAgICAgICAgICAgICAgICBzdGF0dXM9e3N0ZXBTdGF0dXMoc3RlcCwgYWN0aXZlU3RlcCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3N0ZXAgPT09IFwiZGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICAgID8gXCJEZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgOiBzdGVwID09PSBcIm9yZ2FuaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiT3JnYW5pemVcIlxuICAgICAgICAgICAgICAgICAgICAgIDogc3RlcCA9PT0gXCJ2YXJpYW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiVmFyaWFudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGVwID09PSBcImNvdXBvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJDb3Vwb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiQ2FtcGFpZ25cIn1cbiAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5UcmlnZ2VyPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkxpc3Q+XG4gICAgICAgICAgICA8Rm9jdXNNb2RhbC5Cb2R5IHN0eWxlPXttb2RhbEJvZHlTdHlsZX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsRm9ybVN0eWxlfT5cbiAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJkZXRhaWxzXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dGhyZWVDb2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUaXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZVByb2R1Y3QoXCJ0aXRsZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnN1YnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZVByb2R1Y3QoXCJzdWJ0aXRsZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJIYW5kbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5oYW5kbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHJvZHVjdChcImhhbmRsZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVQcm9kdWN0KFwiZGVzY3JpcHRpb25cIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiTWVkaWEgVVJMXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0udGh1bWJuYWlsfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZVByb2R1Y3QoXCJ0aHVtYm5haWxcIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJvcmdhbml6ZVwiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJkcmFmdFwiPkRyYWZ0PC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwicHVibGlzaGVkXCI+UHVibGlzaGVkPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwicHJvcG9zZWRcIj5Qcm9wb3NlZDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInJlamVjdGVkXCI+UmVqZWN0ZWQ8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAge2FwaUJhc2UgPT09IFwiL2FkbWluXCIgJiYgIXByb2R1Y3RGb3JtLmlkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTZWxsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnNlbGxlcl9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5zZWxsZXJzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGxlcl9pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiVHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS50eXBlX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X3R5cGVzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2lkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ29sbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5jb2xsZWN0aW9uX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X2NvbGxlY3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX2lkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0uY2F0ZWdvcnlfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfY2F0ZWdvcmllcyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUYWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0udGFnX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X3RhZ3MgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ19pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNhbGVzIGNoYW5uZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0uc2FsZXNfY2hhbm5lbF9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnMuc2FsZXNfY2hhbm5lbHMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbGVzX2NoYW5uZWxfaWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtwYW5lbFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cm93QmV0d2VlblN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiPkRpc2NvdW50YWJsZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY291bnRzIGNhbiBhcHBseSB0byB0aGlzIHByb2R1Y3RcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtwcm9kdWN0Rm9ybS5kaXNjb3VudGFibGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NvdW50YWJsZTogQm9vbGVhbihjaGVja2VkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuXG4gICAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5Db250ZW50IHZhbHVlPVwidmFyaWFudHNcIiBzdHlsZT17c3RhY2tTdHlsZX0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyb3dCZXR3ZWVuU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGluZyBsZXZlbD1cImgyXCI+VmFyaWFudHM8L0hlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIHshcHJvZHVjdEZvcm0uaWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FkZFZhcmlhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBsdXMgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB2YXJpYW50XG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS00XCI+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9kdWN0Rm9ybS52YXJpYW50cy5tYXAoKHZhcmlhbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2Ake3ZhcmlhbnQuaWQgfHwgaW5kZXh9YH0gc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17Zm91ckNvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKHByb2R1Y3RGb3JtLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHsgdGl0bGU6IGV2ZW50LnRhcmdldC52YWx1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNLVVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQuc2t1fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4ocHJvZHVjdEZvcm0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwgeyBza3U6IGV2ZW50LnRhcmdldC52YWx1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQuY3VycmVuY3lfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKHByb2R1Y3RGb3JtLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY3VycmVuY3lfY29kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiUHJpY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lBbW91bnRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY2llcz17Y3VycmVuY2llc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZT17dmFyaWFudC5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQuYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4ocHJvZHVjdEZvcm0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhhbW91bnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclRvcDogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wOiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cm93QmV0d2VlblN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+Q291cG9uIGJlbmVmaXQgb3ZlcnJpZGU8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17dmFyaWFudC5vdmVycmlkZV9lbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX2VuYWJsZWQ6IEJvb2xlYW4oY2hlY2tlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt2YXJpYW50Lm92ZXJyaWRlX2VuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IC4uLmZvdXJDb2x1bW5HcmlkU3R5bGUsIG1hcmdpblRvcDogMTIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJCZW5lZml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZV9iZW5lZml0X3R5cGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgQmVuZWZpdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImZpeGVkX2Ftb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZCBhbW91bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJwZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmNlbnRhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJmcmVlX3NoaXBwaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWUgc2hpcHBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY2llcz17Y3VycmVuY2llc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5vdmVycmlkZV9jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG92ZXJyaWRlX2N1cnJlbmN5X2NvZGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJBbW91bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5QW1vdW50SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZT17dmFyaWFudC5vdmVycmlkZV9jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YXJpYW50Lm92ZXJyaWRlX2Ftb3VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhvdmVycmlkZV9hbW91bnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX2Ftb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlBlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQub3ZlcnJpZGVfcGVyY2VudGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVyY2VudGFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX3BlcmNlbnRhZ2U6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyFwcm9kdWN0Rm9ybS5pZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RGb3JtLnZhcmlhbnRzLmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAxNiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcmVtb3ZlVmFyaWFudChpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSB2YXJpYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cblxuICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImNvdXBvblwiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyb3dCZXR3ZWVuU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+Q291cG9uIGlzc3VhbmNlPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBJc3N1ZSBjb3Vwb25zIHdoZW4gY3VzdG9tZXJzIHB1cmNoYXNlIHRoaXMgcHJvZHVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NvdXBvbkZvcm0uZW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBCb29sZWFuKGNoZWNrZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQmVuZWZpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbmVmaXRfdHlwZTogdmFsdWUgYXMgQmVuZWZpdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZml4ZWRfYW1vdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQgYW1vdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInBlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZXJjZW50YWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImZyZWVfc2hpcHBpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVlIHNoaXBwaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlByb21vdGlvbiBzdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0ucHJvbW90aW9uX3N0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX3N0YXR1czogdmFsdWUgYXMgUHJvbW90aW9uU3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJkcmFmdFwiPkRyYWZ0PC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJhY3RpdmVcIj5BY3RpdmU8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImluYWN0aXZlXCI+SW5hY3RpdmU8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQW1vdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5QW1vdW50SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU9e2NvdXBvbkZvcm0uY3VycmVuY3lfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSAhPT0gXCJmaXhlZF9hbW91bnRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmFtb3VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoYW1vdW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBhbW91bnQgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiUGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y291cG9uRm9ybS5iZW5lZml0X3R5cGUgIT09IFwicGVyY2VudGFnZVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0ucGVyY2VudGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJwZXJjZW50YWdlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uY3VycmVuY3lfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSAhPT0gXCJmaXhlZF9hbW91bnRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY3VycmVuY3lfY29kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gcG9saWN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uZXhwaXJhdGlvbl90eXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl90eXBlOiB2YWx1ZSBhcyBFeHBpcmF0aW9uUG9saWN5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJkdXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cmF0aW9uIGFmdGVyIGlzc3VlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImZpeGVkXCI+Rml4ZWQgZGF0ZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICB7Y291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGUgPT09IFwiZHVyYXRpb25cIiA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFeHBpcmF0aW9uIGRheXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPXsxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5leHBpcmF0aW9uX2RheXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJleHBpcmF0aW9uX2RheXNcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJlcyBhdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcImV4cGlyYXRpb25fZGF0ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ2FwIGV4cGlyYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyb3dCZXR3ZWVuU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBDYW1wYWlnbiBlbmQgb3IgY2FwIGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y291cG9uRm9ybS5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOiBCb29sZWFuKGNoZWNrZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFeHBpcmF0aW9uIGNhcCBkYXRlIChvcHRpb25hbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvdXBvbkZvcm0uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ259XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5leHBpcmF0aW9uX2NhcF9hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJleHBpcmF0aW9uX2NhcF9hdFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDb2RlIHN0cmF0ZWd5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uY29kZV9zdHJhdGVneX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfc3RyYXRlZ3k6IHZhbHVlIGFzIENvZGVTdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJ1bmlxdWVfY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXF1ZSBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInNoYXJlZF9jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVkIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvZGUgcHJlZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y291cG9uRm9ybS5jb2RlX3N0cmF0ZWd5ICE9PSBcInVuaXF1ZV9jb2RlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5jb2RlX3ByZWZpeH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJjb2RlX3ByZWZpeFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTaGFyZWQgY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NvdXBvbkZvcm0uY29kZV9zdHJhdGVneSAhPT0gXCJzaGFyZWRfY29kZVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uc2hhcmVkX2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ291cG9uKFwic2hhcmVkX2NvZGVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiTWF4IGlzc3VhbmNlIHBlciBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLm1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW1cIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJQcm9tb3Rpb24gbWlycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLnByb21vdGlvbl9taXJyb3JfbW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiB2YWx1ZSBhcyBNaXJyb3JNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJub25lXCI+Tm9uZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibWFudWFsXCI+TWFudWFsPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJhdXRvXCI+QXV0bzwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cblxuICAgICAgICAgICAgICAgIHthbGxvd1Byb21vdGlvbk1pcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJjYW1wYWlnblwiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDYW1wYWlnblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ25Gb3JtLm1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogdmFsdWUgYXMgQ2FtcGFpZ25Nb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJub25lXCI+Tm8gY2FtcGFpZ248L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImV4aXN0aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGlzdGluZyBjYW1wYWlnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibmV3XCI+TmV3IGNhbXBhaWduPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAge2NhbXBhaWduRm9ybS5tb2RlID09PSBcImV4aXN0aW5nXCIgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhpc3RpbmcgY2FtcGFpZ25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0uY2FtcGFpZ25faWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5jYW1wYWlnbnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25faWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHtjYW1wYWlnbkZvcm0ubW9kZSA9PT0gXCJuZXdcIiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ25Gb3JtLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ2FtcGFpZ24oXCJuYW1lXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIklkZW50aWZpZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0uY2FtcGFpZ25faWRlbnRpZmllcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDYW1wYWlnbihcImNhbXBhaWduX2lkZW50aWZpZXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU3RhcnRzIGF0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduRm9ybS5zdGFydHNfYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ2FtcGFpZ24oXCJzdGFydHNfYXRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRW5kcyBhdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0uZW5kc19hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDYW1wYWlnbihcImVuZHNfYXRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvRm9jdXNNb2RhbC5Cb2R5PlxuICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzPlxuICAgICAgICAgIDxGb2N1c01vZGFsLkZvb3RlciBzdHlsZT17bW9kYWxTdGF0aWNSb3dTdHlsZX0+XG4gICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbE9wZW4oZmFsc2UpfT5cbiAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIHtjYW5Hb0JhY2sgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVN0ZXAodmlzaWJsZVN0ZXBzW2N1cnJlbnRTdGVwSW5kZXggLSAxXSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBCYWNrXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtjYW5Hb05leHQgJiZcbiAgICAgICAgICAgIGFjdGl2ZVN0ZXAgIT09IHZpc2libGVTdGVwc1t2aXNpYmxlU3RlcHMubGVuZ3RoIC0gMV0gPyAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlU3RlcCh2aXNpYmxlU3RlcHNbY3VycmVudFN0ZXBJbmRleCArIDFdKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENvbnRpbnVlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEJ1dHRvbiBpc0xvYWRpbmc9e3NhdmluZ30gb25DbGljaz17KCkgPT4gdm9pZCBzYXZlUHJvZHVjdCgpfT5cbiAgICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0ZvY3VzTW9kYWwuRm9vdGVyPlxuICAgICAgICA8L0ZvY3VzTW9kYWwuQ29udGVudD5cbiAgICAgIDwvRm9jdXNNb2RhbD5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBPcHRpb25TZWxlY3Qoe1xuICB2YWx1ZSxcbiAgb3B0aW9ucyxcbiAgb25DaGFuZ2UsXG59OiB7XG4gIHZhbHVlOiBzdHJpbmdcbiAgb3B0aW9uczogT3B0aW9uUmVjb3JkW11cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgdmFsdWU9e3ZhbHVlIHx8IE5PTkV9XG4gICAgICBvblZhbHVlQ2hhbmdlPXsobmV4dCkgPT4gb25DaGFuZ2UobmV4dCA9PT0gTk9ORSA/IFwiXCIgOiBuZXh0KX1cbiAgICA+XG4gICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT17Tk9ORX0+Tm9uZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgPFNlbGVjdC5JdGVtIGtleT17b3B0aW9uLmlkfSB2YWx1ZT17b3B0aW9uLmlkfT5cbiAgICAgICAgICAgIHtvcHRpb25MYWJlbChvcHRpb24pfVxuICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICA8L1NlbGVjdD5cbiAgKVxufVxuIiwgImltcG9ydCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG4gIHR5cGUgQ2hhbmdlRXZlbnQsXG4gIHR5cGUgQ1NTUHJvcGVydGllcyxcbiAgdHlwZSBEcmFnRXZlbnQsXG4gIHR5cGUgUmVhY3ROb2RlLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtcbiAgQWRqdXN0bWVudHMsXG4gIEFycm93UGF0aCxcbiAgQXJyb3dVcFRyYXksXG4gIEluZm9ybWF0aW9uQ2lyY2xlLFxuICBQZW5jaWxTcXVhcmUsXG4gIFBsdXMsXG4gIFRheEV4Y2x1c2l2ZSxcbiAgVGF4SW5jbHVzaXZlLFxuICBUcmFzaCxcbiAgWE1hcmtNaW5pLFxufSBmcm9tIFwiQG1lZHVzYWpzL2ljb25zXCJcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2hlY2tib3gsXG4gIENvbnRhaW5lcixcbiAgQ3VycmVuY3lJbnB1dCxcbiAgRGl2aWRlcixcbiAgRHJvcGRvd25NZW51LFxuICBEcmF3ZXIsXG4gIEZvY3VzTW9kYWwsXG4gIEhlYWRpbmcsXG4gIElucHV0LFxuICBMYWJlbCxcbiAgUHJvZ3Jlc3NUYWJzLFxuICBSYWRpb0dyb3VwLFxuICBTZWxlY3QsXG4gIFN0YXR1c0JhZGdlLFxuICBTd2l0Y2gsXG4gIFRhYmxlLFxuICBUZXh0LFxuICBUZXh0YXJlYSxcbiAgVG9vbHRpcCxcbiAgdG9hc3QsXG4gIHVzZVByb21wdCxcbn0gZnJvbSBcIkBtZWR1c2Fqcy91aVwiXG5pbXBvcnQgeyBDb3Vwb25FbXB0eVN0YXRlIH0gZnJvbSBcIi4vZW1wdHktc3RhdGVcIlxuXG5kZWNsYXJlIGNvbnN0IF9fQkFDS0VORF9VUkxfXzogc3RyaW5nXG5cbnR5cGUgQXBpQmFzZSA9IFwiL2FkbWluXCIgfCBcIi92ZW5kb3JcIlxudHlwZSBCZW5lZml0VHlwZSA9IFwiZml4ZWRfYW1vdW50XCIgfCBcInBlcmNlbnRhZ2VcIiB8IFwiZnJlZV9zaGlwcGluZ1wiIHwgXCJidXlfZ2V0XCJcbnR5cGUgQ291cG9uVHlwZSA9XG4gIHwgXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCJcbiAgfCBcImFtb3VudF9vZmZfb3JkZXJcIlxuICB8IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiXG4gIHwgXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gIHwgXCJidXlfeF9nZXRfeVwiXG4gIHwgXCJmcmVlX3NoaXBwaW5nXCJcbnR5cGUgQ29kZVN0cmF0ZWd5ID0gXCJ1bmlxdWVfY29kZVwiIHwgXCJzaGFyZWRfY29kZVwiXG50eXBlIE1pcnJvck1vZGUgPSBcIm5vbmVcIiB8IFwibWFudWFsXCIgfCBcImF1dG9cIlxudHlwZSBQcm9tb3Rpb25TdGF0dXMgPSBcImRyYWZ0XCIgfCBcImFjdGl2ZVwiIHwgXCJpbmFjdGl2ZVwiXG50eXBlIENhbXBhaWduTW9kZSA9IFwibm9uZVwiIHwgXCJleGlzdGluZ1wiIHwgXCJuZXdcIlxudHlwZSBFeHBpcmF0aW9uUG9saWN5VHlwZSA9IFwibm9uZVwiIHwgXCJkdXJhdGlvblwiIHwgXCJmaXhlZFwiXG50eXBlIENvdXBvbkFsbG9jYXRpb24gPSBcImVhY2hcIiB8IFwib25jZVwiXG50eXBlIFdpemFyZFN0ZXAgPSBcImRldGFpbHNcIiB8IFwib3JnYW5pemVcIiB8IFwiY2FtcGFpZ25cIiB8IFwicHJpY2VzXCJcbnR5cGUgUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGUgPVxuICB8IFwiY3VzdG9tZXIuZ3JvdXBzLmlkXCJcbiAgfCBcInJlZ2lvbi5pZFwiXG4gIHwgXCJzaGlwcGluZ19hZGRyZXNzLmNvdW50cnlfY29kZVwiXG4gIHwgXCJzYWxlc19jaGFubmVsX2lkXCJcbiAgfCBcImN1cnJlbmN5X2NvZGVcIlxudHlwZSBQdXJjaGFzZUNvbmRpdGlvbk9wZXJhdG9yID0gXCJpblwiIHwgXCJlcVwiIHwgXCJuZVwiXG5cbnR5cGUgUHVyY2hhc2VDb25kaXRpb25Gb3JtID0ge1xuICBrZXk6IHN0cmluZ1xuICBhdHRyaWJ1dGU6IFB1cmNoYXNlQ29uZGl0aW9uQXR0cmlidXRlIHwgXCJcIlxuICBvcGVyYXRvcjogUHVyY2hhc2VDb25kaXRpb25PcGVyYXRvciB8IFwiXCJcbiAgdmFsdWVzOiBzdHJpbmdbXVxufVxuXG50eXBlIE9wdGlvblJlY29yZCA9IHtcbiAgaWQ6IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICB0aXRsZT86IHN0cmluZyB8IG51bGxcbiAgdmFsdWU/OiBzdHJpbmcgfCBudWxsXG4gIGhhbmRsZT86IHN0cmluZyB8IG51bGxcbiAgY2FtcGFpZ25faWRlbnRpZmllcj86IHN0cmluZyB8IG51bGxcbiAgZGlzcGxheV9uYW1lPzogc3RyaW5nIHwgbnVsbFxuICBpc29fMj86IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBDdXJyZW5jeU9wdGlvbiA9IHtcbiAgY29kZTogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzeW1ib2w6IHN0cmluZ1xuICBzeW1ib2xfbmF0aXZlOiBzdHJpbmdcbiAgaXNfZGVmYXVsdDogYm9vbGVhblxuICBpc190YXhfaW5jbHVzaXZlPzogYm9vbGVhblxufVxuXG50eXBlIE9wdGlvbnNQYXlsb2FkID0ge1xuICBjdXJyZW5jaWVzPzogQ3VycmVuY3lPcHRpb25bXVxuICBwcm9kdWN0X3R5cGVzPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF9jb2xsZWN0aW9ucz86IE9wdGlvblJlY29yZFtdXG4gIHByb2R1Y3RfY2F0ZWdvcmllcz86IE9wdGlvblJlY29yZFtdXG4gIHByb2R1Y3RfdGFncz86IE9wdGlvblJlY29yZFtdXG4gIHNhbGVzX2NoYW5uZWxzPzogT3B0aW9uUmVjb3JkW11cbiAgc2hpcHBpbmdfcHJvZmlsZXM/OiBPcHRpb25SZWNvcmRbXVxuICBjYW1wYWlnbnM/OiBPcHRpb25SZWNvcmRbXVxuICBzZWxsZXJzPzogT3B0aW9uUmVjb3JkW11cbiAgY3VzdG9tZXJfZ3JvdXBzPzogT3B0aW9uUmVjb3JkW11cbiAgcmVnaW9ucz86IE9wdGlvblJlY29yZFtdXG4gIGNvdW50cmllcz86IE9wdGlvblJlY29yZFtdXG59XG5cbnR5cGUgQ291cG9uUHJvZHVjdENvbmZpZyA9IHtcbiAgaWQ6IHN0cmluZ1xuICBlbmFibGVkOiBib29sZWFuXG4gIHByb2R1Y3RfaWQ6IHN0cmluZ1xuICBiZW5lZml0X3R5cGU6IEJlbmVmaXRUeXBlXG4gIHB1cmNoYXNlX2NvbmRpdGlvbnM/OiBBcnJheTx7XG4gICAgYXR0cmlidXRlOiBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZVxuICAgIG9wZXJhdG9yOiBQdXJjaGFzZUNvbmRpdGlvbk9wZXJhdG9yXG4gICAgdmFsdWVzOiBzdHJpbmdbXVxuICB9PiB8IG51bGxcbiAgYW1vdW50cz86IHsgY3VycmVuY3lfY29kZTogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB9W10gfCBudWxsXG4gIGFtb3VudDogbnVtYmVyIHwgbnVsbFxuICBwZXJjZW50YWdlOiBudW1iZXIgfCBudWxsXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZyB8IG51bGxcbiAgY29kZV9zdHJhdGVneTogQ29kZVN0cmF0ZWd5XG4gIGNvZGVfcHJlZml4OiBzdHJpbmcgfCBudWxsXG4gIHNoYXJlZF9jb2RlOiBzdHJpbmcgfCBudWxsXG4gIGV4cGlyYXRpb25fcG9saWN5OlxuICB8IHsgdHlwZTogXCJub25lXCIgfVxuICB8IHtcbiAgICB0eXBlOiBcImR1cmF0aW9uXCJcbiAgICBkdXJhdGlvbl9kYXlzOiBudW1iZXJcbiAgICBjYXBfYnlfY2FtcGFpZ24/OiBib29sZWFuXG4gICAgY2FwX2F0Pzogc3RyaW5nIHwgbnVsbFxuICB9XG4gIHwge1xuICAgIHR5cGU6IFwiZml4ZWRcIlxuICAgIGV4cGlyZXNfYXQ6IHN0cmluZ1xuICAgIGNhcF9ieV9jYW1wYWlnbj86IGJvb2xlYW5cbiAgICBjYXBfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIH1cbiAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBudW1iZXJcbiAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBNaXJyb3JNb2RlXG4gIHByb21vdGlvbl9zdGF0dXM/OiBQcm9tb3Rpb25TdGF0dXMgfCBudWxsXG4gIHByb21vdGlvbl90ZW1wbGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsXG4gIGNhbXBhaWduX2lkPzogc3RyaW5nIHwgbnVsbFxuICBjYW1wYWlnbl9zbmFwc2hvdD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxufVxuXG50eXBlIFByb2R1Y3RSZWNvcmQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZyB8IG51bGxcbiAgc3VidGl0bGU/OiBzdHJpbmcgfCBudWxsXG4gIGhhbmRsZTogc3RyaW5nIHwgbnVsbFxuICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGxcbiAgc3RhdHVzOiBzdHJpbmcgfCBudWxsXG4gIHRodW1ibmFpbDogc3RyaW5nIHwgbnVsbFxuICB0aHVtYm5haWxfYXNzZXRfaWQ/OiBzdHJpbmcgfCBudWxsXG4gIGltYWdlcz86IHsgaWQ/OiBzdHJpbmc7IHVybD86IHN0cmluZyB8IG51bGw7IGFzc2V0X2lkPzogc3RyaW5nIHwgbnVsbCB9W11cbiAgZGlzY291bnRhYmxlPzogYm9vbGVhblxuICB0eXBlX2lkPzogc3RyaW5nIHwgbnVsbFxuICBjb2xsZWN0aW9uX2lkPzogc3RyaW5nIHwgbnVsbFxuICBzaGlwcGluZ19wcm9maWxlX2lkPzogc3RyaW5nIHwgbnVsbFxuICB2YXJpYW50cz86IHtcbiAgICBpZDogc3RyaW5nXG4gICAgc2t1Pzogc3RyaW5nIHwgbnVsbFxuICAgIHByaWNlcz86IHsgY3VycmVuY3lfY29kZT86IHN0cmluZzsgYW1vdW50PzogbnVtYmVyIH1bXVxuICB9W11cbiAgY2F0ZWdvcmllcz86IHsgaWQ6IHN0cmluZyB9W11cbiAgdGFncz86IHsgaWQ6IHN0cmluZyB9W11cbiAgc2FsZXNfY2hhbm5lbHM/OiB7IGlkOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfCBudWxsIH1bXVxufVxuXG50eXBlIFByb2R1Y3RNZWRpYSA9IHtcbiAgdXJsOiBzdHJpbmdcbiAgYXNzZXRfaWQ/OiBzdHJpbmdcbn1cblxudHlwZSBDb3Vwb25Qcm9kdWN0Um93ID0ge1xuICBpZDogc3RyaW5nXG4gIHByb2R1Y3Q6IFByb2R1Y3RSZWNvcmRcbiAgY291cG9uX3Byb2R1Y3RfY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnXG4gIGVudGl0bGVtZW50c19jb3VudDogbnVtYmVyXG59XG5cbnR5cGUgUHJvZHVjdEZvcm1TdGF0ZSA9IHtcbiAgdGl0bGU6IHN0cmluZ1xuICBzdWJ0aXRsZTogc3RyaW5nXG4gIGhhbmRsZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgbWVkaWE6IFByb2R1Y3RNZWRpYVtdXG4gIHNrdTogc3RyaW5nXG4gIHByaWNlX2Ftb3VudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgc3RhdHVzOiBzdHJpbmdcbiAgZGlzY291bnRhYmxlOiBib29sZWFuXG4gIHNlbGxlcl9pZDogc3RyaW5nXG4gIHR5cGVfaWQ6IHN0cmluZ1xuICBjb2xsZWN0aW9uX2lkOiBzdHJpbmdcbiAgY2F0ZWdvcnlfaWQ6IHN0cmluZ1xuICB0YWdfaWQ6IHN0cmluZ1xufVxuXG50eXBlIENvdXBvbkZvcm1TdGF0ZSA9IHtcbiAgZW5hYmxlZDogYm9vbGVhblxuICB0eXBlOiBDb3Vwb25UeXBlXG4gIHB1cmNoYXNlX2NvbmRpdGlvbnM6IFB1cmNoYXNlQ29uZGl0aW9uRm9ybVtdXG4gIGFtb3VudHM6IENvdXBvbkFtb3VudEZvcm1Sb3dbXVxuICBwZXJjZW50YWdlOiBzdHJpbmdcbiAgYWxsb2NhdGlvbjogQ291cG9uQWxsb2NhdGlvblxuICBjb2RlX3N0cmF0ZWd5OiBDb2RlU3RyYXRlZ3lcbiAgY29kZV9wcmVmaXg6IHN0cmluZ1xuICBzaGFyZWRfY29kZTogc3RyaW5nXG4gIGV4cGlyYXRpb25fdHlwZTogRXhwaXJhdGlvblBvbGljeVR5cGVcbiAgZXhwaXJhdGlvbl9kYXlzOiBzdHJpbmdcbiAgZXhwaXJhdGlvbl9kYXRlOiBzdHJpbmdcbiAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ246IGJvb2xlYW5cbiAgZXhwaXJhdGlvbl9jYXBfYXQ6IHN0cmluZ1xuICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IHN0cmluZ1xuICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IE1pcnJvck1vZGVcbiAgcHJvbW90aW9uX3N0YXR1czogUHJvbW90aW9uU3RhdHVzXG59XG5cbnR5cGUgQ291cG9uQW1vdW50Rm9ybVJvdyA9IHtcbiAga2V5OiBzdHJpbmdcbiAgY3VycmVuY3lfY29kZTogc3RyaW5nXG4gIGFtb3VudDogc3RyaW5nXG59XG5cbnR5cGUgQ2FtcGFpZ25Gb3JtU3RhdGUgPSB7XG4gIG1vZGU6IENhbXBhaWduTW9kZVxuICBjYW1wYWlnbl9pZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBjYW1wYWlnbl9pZGVudGlmaWVyOiBzdHJpbmdcbiAgc3RhcnRzX2F0OiBzdHJpbmdcbiAgZW5kc19hdDogc3RyaW5nXG59XG5cbmNvbnN0IE5PTkUgPSBcIl9fbm9uZV9fXCJcbmNvbnN0IGFsbFN0ZXBzOiBXaXphcmRTdGVwW10gPSBbXCJkZXRhaWxzXCIsIFwib3JnYW5pemVcIiwgXCJjYW1wYWlnblwiLCBcInByaWNlc1wiXVxuXG5jb25zdCBjb25kaXRpb25BdHRyaWJ1dGVzOiBBcnJheTx7XG4gIHZhbHVlOiBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZVxuICBsYWJlbDogc3RyaW5nXG59PiA9IFtcbiAgeyB2YWx1ZTogXCJjdXN0b21lci5ncm91cHMuaWRcIiwgbGFiZWw6IFwiQ3VzdG9tZXIgR3JvdXBcIiB9LFxuICB7IHZhbHVlOiBcInJlZ2lvbi5pZFwiLCBsYWJlbDogXCJSZWdpb25cIiB9LFxuICB7IHZhbHVlOiBcInNoaXBwaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlXCIsIGxhYmVsOiBcIkNvdW50cnlcIiB9LFxuICB7IHZhbHVlOiBcInNhbGVzX2NoYW5uZWxfaWRcIiwgbGFiZWw6IFwiU2FsZXMgQ2hhbm5lbFwiIH0sXG4gIHsgdmFsdWU6IFwiY3VycmVuY3lfY29kZVwiLCBsYWJlbDogXCJDdXJyZW5jeSBDb2RlXCIgfSxcbl1cblxuY29uc3QgY29uZGl0aW9uT3BlcmF0b3JzOiBBcnJheTx7XG4gIHZhbHVlOiBQdXJjaGFzZUNvbmRpdGlvbk9wZXJhdG9yXG4gIGxhYmVsOiBzdHJpbmdcbn0+ID0gW1xuICB7IHZhbHVlOiBcImluXCIsIGxhYmVsOiBcIkluXCIgfSxcbiAgeyB2YWx1ZTogXCJlcVwiLCBsYWJlbDogXCJFcXVhbHNcIiB9LFxuICB7IHZhbHVlOiBcIm5lXCIsIGxhYmVsOiBcIk5vdCBJblwiIH0sXG5dXG5cbmV4cG9ydCBjb25zdCB0eXBlQ2hvaWNlczoge1xuICB2YWx1ZTogQ291cG9uVHlwZVxuICBsYWJlbDogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbn1bXSA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCIsXG4gICAgICBsYWJlbDogXCJBbW91bnQgb2ZmIHByb2R1Y3RzXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJEaXNjb3VudCBzcGVjaWZpYyBwcm9kdWN0cyBvciBhIGNvbGxlY3Rpb24gb2YgcHJvZHVjdHNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcImFtb3VudF9vZmZfb3JkZXJcIixcbiAgICAgIGxhYmVsOiBcIkFtb3VudCBvZmYgb3JkZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRpc2NvdW50IHRoZSB0b3RhbCBvcmRlciBhbW91bnRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcInBlcmNlbnRhZ2Vfb2ZmX3Byb2R1Y3RcIixcbiAgICAgIGxhYmVsOiBcIlBlcmNlbnRhZ2Ugb2ZmIHByb2R1Y3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRpc2NvdW50IGEgcGVyY2VudGFnZSBvZmYgc2VsZWN0ZWQgcHJvZHVjdHNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCIsXG4gICAgICBsYWJlbDogXCJQZXJjZW50YWdlIG9mZiBvcmRlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRGlzY291bnQgYSBwZXJjZW50YWdlIG9mZiB0aGUgdG90YWwgb3JkZXIgYW1vdW50XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogXCJidXlfeF9nZXRfeVwiLFxuICAgICAgbGFiZWw6IFwiQnV5IFggR2V0IFlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlIGEgQnV5IFggR2V0IFkgY291cG9uIGVudGl0bGVtZW50XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogXCJmcmVlX3NoaXBwaW5nXCIsXG4gICAgICBsYWJlbDogXCJGcmVlIHNoaXBwaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBcHBseSBhIDEwMCUgZGlzY291bnQgdG8gc2hpcHBpbmcgZmVlc1wiLFxuICAgIH0sXG4gIF1cblxuY29uc3Qgc3RhdHVzQ2hvaWNlczoge1xuICB2YWx1ZTogUHJvbW90aW9uU3RhdHVzXG4gIGxhYmVsOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xufVtdID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiBcImRyYWZ0XCIsXG4gICAgICBsYWJlbDogXCJEcmFmdFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQ3VzdG9tZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHRoZSBjb2RlIHlldFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IFwiYWN0aXZlXCIsXG4gICAgICBsYWJlbDogXCJBY3RpdmVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkN1c3RvbWVycyB3aWxsIGJlIGFibGUgdG8gdXNlIHRoZSBjb2RlXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogXCJpbmFjdGl2ZVwiLFxuICAgICAgbGFiZWw6IFwiSW5hY3RpdmVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIktlZXAgdGhlIHByb21vdGlvbiB1bmF2YWlsYWJsZSB1bnRpbCByZWFjdGl2YXRlZFwiLFxuICAgIH0sXG4gIF1cblxuZnVuY3Rpb24gYmFja2VuZFVybCgpIHtcbiAgcmV0dXJuIHR5cGVvZiBfX0JBQ0tFTkRfVVJMX18gPT09IFwic3RyaW5nXCJcbiAgICA/IF9fQkFDS0VORF9VUkxfXy5yZXBsYWNlKC9cXC8kLywgXCJcIilcbiAgICA6IFwiXCJcbn1cblxuZnVuY3Rpb24gYXBpRXJyb3JNZXNzYWdlKHBheWxvYWQ6IGFueSwgZmFsbGJhY2s6IHN0cmluZykge1xuICByZXR1cm4gKFxuICAgIFtwYXlsb2FkPy5tZXNzYWdlLCBwYXlsb2FkPy5lcnJvcj8ubWVzc2FnZSwgcGF5bG9hZD8uZXJyb3JdLmZpbmQoXG4gICAgICAoY2FuZGlkYXRlKSA9PiB0eXBlb2YgY2FuZGlkYXRlID09PSBcInN0cmluZ1wiICYmIGNhbmRpZGF0ZS50cmltKCksXG4gICAgKSB8fFxuICAgIGZhbGxiYWNrIHx8XG4gICAgXCJSZXF1ZXN0IGZhaWxlZFwiXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBpRmV0Y2g8VD4oXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7fSxcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2JhY2tlbmRVcmwoKX0ke3BhdGh9YCwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihvcHRpb25zLmJvZHkgPyB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0gOiB7fSksXG4gICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgfSxcbiAgfSlcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgIHRocm93IG5ldyBFcnJvcihhcGlFcnJvck1lc3NhZ2UocGF5bG9hZCwgcmVzcG9uc2Uuc3RhdHVzVGV4dCkpXG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpXG59XG5cbmZ1bmN0aW9uIG9wdGlvbkxhYmVsKG9wdGlvbjogT3B0aW9uUmVjb3JkKSB7XG4gIHJldHVybiAoXG4gICAgb3B0aW9uLm5hbWUgfHwgb3B0aW9uLnRpdGxlIHx8IG9wdGlvbi52YWx1ZSB8fCBvcHRpb24uaGFuZGxlIHx8IG9wdGlvbi5pZFxuICApXG59XG5cbmZ1bmN0aW9uIG51bWJlck9yTnVsbCh2YWx1ZTogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIHBhcnNlZCA+IDAgPyBwYXJzZWQgOiBudWxsXG59XG5cbmZ1bmN0aW9uIG5vbk5lZ2F0aXZlTnVtYmVyT3JOdWxsKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCF2YWx1ZS50cmltKCkpIHJldHVybiBudWxsXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIHBhcnNlZCA+PSAwID8gcGFyc2VkIDogbnVsbFxufVxuXG5mdW5jdGlvbiB0b0RhdGVUaW1lTG9jYWwodmFsdWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIlwiXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBcIlwiXG4gIGNvbnN0IGxvY2FsRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjBfMDAwKVxuICByZXR1cm4gbG9jYWxEYXRlLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTYpXG59XG5cbmZ1bmN0aW9uIGN1cnJlbmN5RGVjaW1hbERpZ2l0cyhjb2RlOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwge1xuICAgICAgc3R5bGU6IFwiY3VycmVuY3lcIixcbiAgICAgIGN1cnJlbmN5OiBjb2RlLnRvVXBwZXJDYXNlKCksXG4gICAgfSkucmVzb2x2ZWRPcHRpb25zKCkubWF4aW11bUZyYWN0aW9uRGlnaXRzXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAyXG4gIH1cbn1cblxuZnVuY3Rpb24gY3VycmVuY3lTeW1ib2woY29kZTogc3RyaW5nKSB7XG4gIGlmICghY29kZSkgcmV0dXJuIFwiXCJcbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgbmV3IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwge1xuICAgICAgICBzdHlsZTogXCJjdXJyZW5jeVwiLFxuICAgICAgICBjdXJyZW5jeTogY29kZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBjdXJyZW5jeURpc3BsYXk6IFwibmFycm93U3ltYm9sXCIsXG4gICAgICB9KVxuICAgICAgICAuZm9ybWF0VG9QYXJ0cygwKVxuICAgICAgICAuZmluZCgocGFydCkgPT4gcGFydC50eXBlID09PSBcImN1cnJlbmN5XCIpPy52YWx1ZSB8fCBjb2RlLnRvVXBwZXJDYXNlKClcbiAgICApXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBjb2RlLnRvVXBwZXJDYXNlKClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY291cG9uVHlwZUZyb21Db25maWcoY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnKTogQ291cG9uVHlwZSB7XG4gIGlmIChjb25maWcuYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIikge1xuICAgIHJldHVybiBjb25maWcucHJvbW90aW9uX3RlbXBsYXRlPy5hcHBsaWNhdGlvbl9tZXRob2Q/LnRhcmdldF90eXBlID09PSBcIm9yZGVyXCJcbiAgICAgID8gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gICAgICA6IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiXG4gIH1cbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwiYnV5X2dldFwiKSByZXR1cm4gXCJidXlfeF9nZXRfeVwiXG4gIGlmIChjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZyZWVfc2hpcHBpbmdcIikgcmV0dXJuIFwiZnJlZV9zaGlwcGluZ1wiXG5cbiAgcmV0dXJuIGNvbmZpZy5wcm9tb3Rpb25fdGVtcGxhdGU/LmFwcGxpY2F0aW9uX21ldGhvZD8udGFyZ2V0X3R5cGUgPT09IFwib3JkZXJcIlxuICAgID8gXCJhbW91bnRfb2ZmX29yZGVyXCJcbiAgICA6IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiXG59XG5cbmZ1bmN0aW9uIGJlbmVmaXRUeXBlRnJvbUNvdXBvblR5cGUodHlwZTogQ291cG9uVHlwZSk6IEJlbmVmaXRUeXBlIHtcbiAgaWYgKFxuICAgIHR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiIHx8XG4gICAgdHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gICkgcmV0dXJuIFwicGVyY2VudGFnZVwiXG4gIGlmICh0eXBlID09PSBcImJ1eV94X2dldF95XCIpIHJldHVybiBcImJ1eV9nZXRcIlxuICBpZiAodHlwZSA9PT0gXCJmcmVlX3NoaXBwaW5nXCIpIHJldHVybiBcImZyZWVfc2hpcHBpbmdcIlxuICByZXR1cm4gXCJmaXhlZF9hbW91bnRcIlxufVxuXG5mdW5jdGlvbiBjb3Vwb25UeXBlTGFiZWwoY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnKSB7XG4gIHJldHVybiB0eXBlQ2hvaWNlcy5maW5kKFxuICAgIChjaG9pY2UpID0+IGNob2ljZS52YWx1ZSA9PT0gY291cG9uVHlwZUZyb21Db25maWcoY29uZmlnKSxcbiAgKT8ubGFiZWxcbn1cblxuZnVuY3Rpb24gY291cG9uU3RhdHVzQ29sb3Ioc3RhdHVzPzogUHJvbW90aW9uU3RhdHVzIHwgbnVsbCkge1xuICBpZiAoc3RhdHVzID09PSBcImFjdGl2ZVwiKSByZXR1cm4gXCJncmVlblwiIGFzIGNvbnN0XG4gIGlmIChzdGF0dXMgPT09IFwiaW5hY3RpdmVcIikgcmV0dXJuIFwib3JhbmdlXCIgYXMgY29uc3RcbiAgcmV0dXJuIFwiZ3JleVwiIGFzIGNvbnN0XG59XG5cbmZ1bmN0aW9uIHByb2R1Y3RTdGF0dXNGcm9tQ291cG9uU3RhdHVzKHN0YXR1czogUHJvbW90aW9uU3RhdHVzKSB7XG4gIHJldHVybiBzdGF0dXMgPT09IFwiYWN0aXZlXCIgPyBcInB1Ymxpc2hlZFwiIDogXCJkcmFmdFwiXG59XG5cbmZ1bmN0aW9uIGNhbXBhaWduTGFiZWwoY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnKSB7XG4gIGNvbnN0IG5hbWUgPSBjb25maWcuY2FtcGFpZ25fc25hcHNob3Q/Lm5hbWVcbiAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiICYmIG5hbWUgPyBuYW1lIDogY29uZmlnLmNhbXBhaWduX2lkIHx8IFwiTm9uZVwiXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDdXJyZW5jeShvcHRpb25zOiBPcHRpb25zUGF5bG9hZCkge1xuICByZXR1cm4gKFxuICAgIG9wdGlvbnMuY3VycmVuY2llcz8uZmluZCgoY3VycmVuY3kpID0+IGN1cnJlbmN5LmlzX2RlZmF1bHQpPy5jb2RlIHx8XG4gICAgb3B0aW9ucy5jdXJyZW5jaWVzPy5bMF0/LmNvZGUgfHxcbiAgICBcIlwiXG4gIClcbn1cblxuZnVuY3Rpb24gY29uZGl0aW9uS2V5KHByZWZpeCA9IFwiY29uZGl0aW9uXCIpIHtcbiAgcmV0dXJuIGAke3ByZWZpeH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpfWBcbn1cblxuZnVuY3Rpb24gaXNBbW91bnRDb3Vwb25UeXBlKHR5cGU6IENvdXBvblR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgPT09IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiIHx8IHR5cGUgPT09IFwiYW1vdW50X29mZl9vcmRlclwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlZmZlY3RpdmVDb3Vwb25DdXJyZW5jaWVzKFxuICBjb25kaXRpb25zOiBQdXJjaGFzZUNvbmRpdGlvbkZvcm1bXSxcbiAgY3VycmVuY2llczogQ3VycmVuY3lPcHRpb25bXSxcbikge1xuICBjb25zdCBjb25kaXRpb24gPSBjb25kaXRpb25zLmZpbmQoXG4gICAgKGl0ZW0pID0+IGl0ZW0uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIixcbiAgKVxuICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uZGl0aW9uLm9wZXJhdG9yKSByZXR1cm4gW11cbiAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgU2V0KGNvbmRpdGlvbi52YWx1ZXMpXG4gIGNvbnN0IHN1cHBvcnRlZCA9IGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSlcblxuICByZXR1cm4gY29uZGl0aW9uLm9wZXJhdG9yID09PSBcIm5lXCJcbiAgICA/IHN1cHBvcnRlZC5maWx0ZXIoKGNvZGUpID0+ICFzZWxlY3RlZC5oYXMoY29kZSkpXG4gICAgOiBzdXBwb3J0ZWQuZmlsdGVyKChjb2RlKSA9PiBzZWxlY3RlZC5oYXMoY29kZSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvbmNpbGVDb3Vwb25BbW91bnRzKFxuICBjdXJyZW50OiBDb3Vwb25BbW91bnRGb3JtUm93W10sXG4gIGN1cnJlbmN5Q29kZXM6IHN0cmluZ1tdLFxuKSB7XG4gIGNvbnN0IGJ5Q3VycmVuY3kgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgY3VycmVudC5tYXAoKHJvdykgPT4gW3Jvdy5jdXJyZW5jeV9jb2RlLCByb3ddKSxcbiAgKVxuICByZXR1cm4gY3VycmVuY3lDb2Rlcy5tYXAoKGN1cnJlbmN5Q29kZSkgPT4gKHtcbiAgICBrZXk6IGJ5Q3VycmVuY3lbY3VycmVuY3lDb2RlXT8ua2V5IHx8IGNvbmRpdGlvbktleShcImNvdXBvbi12YWx1ZVwiKSxcbiAgICBjdXJyZW5jeV9jb2RlOiBjdXJyZW5jeUNvZGUsXG4gICAgYW1vdW50OiBieUN1cnJlbmN5W2N1cnJlbmN5Q29kZV0/LmFtb3VudCB8fCBcIlwiLFxuICB9KSlcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFB1cmNoYXNlQ29uZGl0aW9ucyhvcHRpb25zOiBPcHRpb25zUGF5bG9hZCkge1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSBkZWZhdWx0Q3VycmVuY3kob3B0aW9ucylcbiAgcmV0dXJuIGN1cnJlbmN5Q29kZVxuICAgID8gW1xuICAgICAge1xuICAgICAgICBrZXk6IGNvbmRpdGlvbktleShcImN1cnJlbmN5XCIpLFxuICAgICAgICBhdHRyaWJ1dGU6IFwiY3VycmVuY3lfY29kZVwiIGFzIGNvbnN0LFxuICAgICAgICBvcGVyYXRvcjogXCJlcVwiIGFzIGNvbnN0LFxuICAgICAgICB2YWx1ZXM6IFtjdXJyZW5jeUNvZGVdLFxuICAgICAgfSxcbiAgICBdXG4gICAgOiBbXVxufVxuXG5mdW5jdGlvbiBlbXB0eVByb2R1Y3Qob3B0aW9uczogT3B0aW9uc1BheWxvYWQpOiBQcm9kdWN0Rm9ybVN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogXCJcIixcbiAgICBzdWJ0aXRsZTogXCJcIixcbiAgICBoYW5kbGU6IFwiXCIsXG4gICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgbWVkaWE6IFtdLFxuICAgIHNrdTogXCJcIixcbiAgICBwcmljZV9hbW91bnRzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAob3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdKS5tYXAoKGN1cnJlbmN5KSA9PiBbY3VycmVuY3kuY29kZSwgXCJcIl0pLFxuICAgICksXG4gICAgc3RhdHVzOiBcImRyYWZ0XCIsXG4gICAgZGlzY291bnRhYmxlOiBmYWxzZSxcbiAgICBzZWxsZXJfaWQ6IFwiXCIsXG4gICAgdHlwZV9pZDogXCJcIixcbiAgICBjb2xsZWN0aW9uX2lkOiBcIlwiLFxuICAgIGNhdGVnb3J5X2lkOiBcIlwiLFxuICAgIHRhZ19pZDogXCJcIixcbiAgfVxufVxuXG5mdW5jdGlvbiBlbXB0eUNvdXBvbihvcHRpb25zOiBPcHRpb25zUGF5bG9hZCk6IENvdXBvbkZvcm1TdGF0ZSB7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IGRlZmF1bHRDdXJyZW5jeShvcHRpb25zKVxuICBjb25zdCBwdXJjaGFzZUNvbmRpdGlvbnMgPSBkZWZhdWx0UHVyY2hhc2VDb25kaXRpb25zKG9wdGlvbnMpXG4gIHJldHVybiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICB0eXBlOiBcImFtb3VudF9vZmZfcHJvZHVjdHNcIixcbiAgICBwdXJjaGFzZV9jb25kaXRpb25zOiBwdXJjaGFzZUNvbmRpdGlvbnMsXG4gICAgYW1vdW50czogY3VycmVuY3lDb2RlXG4gICAgICA/IFtcbiAgICAgICAge1xuICAgICAgICAgIGtleTogXCJjb3Vwb24tdmFsdWUtZGVmYXVsdFwiLFxuICAgICAgICAgIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBhbW91bnQ6IFwiXCIsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgICA6IFtdLFxuICAgIHBlcmNlbnRhZ2U6IFwiXCIsXG4gICAgYWxsb2NhdGlvbjogXCJlYWNoXCIsXG4gICAgY29kZV9zdHJhdGVneTogXCJ1bmlxdWVfY29kZVwiLFxuICAgIGNvZGVfcHJlZml4OiBcIkNPVVBPTlwiLFxuICAgIHNoYXJlZF9jb2RlOiBcIlwiLFxuICAgIGV4cGlyYXRpb25fdHlwZTogXCJkdXJhdGlvblwiLFxuICAgIGV4cGlyYXRpb25fZGF5czogXCIzMFwiLFxuICAgIGV4cGlyYXRpb25fZGF0ZTogXCJcIixcbiAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjogdHJ1ZSxcbiAgICBleHBpcmF0aW9uX2NhcF9hdDogXCJcIixcbiAgICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IFwiMVwiLFxuICAgIHByb21vdGlvbl9taXJyb3JfbW9kZTogXCJub25lXCIsXG4gICAgcHJvbW90aW9uX3N0YXR1czogXCJkcmFmdFwiLFxuICB9XG59XG5cbmNvbnN0IGVtcHR5Q2FtcGFpZ246IENhbXBhaWduRm9ybVN0YXRlID0ge1xuICBtb2RlOiBcIm5vbmVcIixcbiAgY2FtcGFpZ25faWQ6IFwiXCIsXG4gIG5hbWU6IFwiXCIsXG4gIGNhbXBhaWduX2lkZW50aWZpZXI6IFwiXCIsXG4gIHN0YXJ0c19hdDogXCJcIixcbiAgZW5kc19hdDogXCJcIixcbn1cblxuZnVuY3Rpb24gZm9ybXNGcm9tUm93KFxuICByb3c6IENvdXBvblByb2R1Y3RSb3csXG4gIG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkLFxuKToge1xuICBwcm9kdWN0OiBQcm9kdWN0Rm9ybVN0YXRlXG4gIGNvdXBvbjogQ291cG9uRm9ybVN0YXRlXG4gIGNhbXBhaWduOiBDYW1wYWlnbkZvcm1TdGF0ZVxufSB7XG4gIGNvbnN0IHByb2R1Y3QgPSByb3cucHJvZHVjdFxuICBjb25zdCBjb25maWcgPSByb3cuY291cG9uX3Byb2R1Y3RfY29uZmlnXG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9kdWN0LnZhcmlhbnRzPy5bMF1cbiAgY29uc3QgcHJpY2VzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICh2YXJpYW50Py5wcmljZXMgfHwgW10pXG4gICAgICAuZmlsdGVyKChwcmljZSkgPT4gcHJpY2UuY3VycmVuY3lfY29kZSlcbiAgICAgIC5tYXAoKHByaWNlKSA9PiBbXG4gICAgICAgIFN0cmluZyhwcmljZS5jdXJyZW5jeV9jb2RlKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBwcmljZS5hbW91bnQgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcocHJpY2UuYW1vdW50KSxcbiAgICAgIF0pLFxuICApXG4gIGNvbnN0IG1lZGlhID0gQXJyYXkuZnJvbShcbiAgICBuZXcgTWFwKFxuICAgICAgW1xuICAgICAgICAuLi4ocHJvZHVjdC50aHVtYm5haWxcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVybDogcHJvZHVjdC50aHVtYm5haWwsXG4gICAgICAgICAgICAgICAgYXNzZXRfaWQ6IHByb2R1Y3QudGh1bWJuYWlsX2Fzc2V0X2lkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4uKHByb2R1Y3QuaW1hZ2VzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGltYWdlKSA9PiBpbWFnZS51cmwpXG4gICAgICAgICAgLm1hcCgoaW1hZ2UpID0+ICh7XG4gICAgICAgICAgICB1cmw6IFN0cmluZyhpbWFnZS51cmwpLFxuICAgICAgICAgICAgYXNzZXRfaWQ6IGltYWdlLmFzc2V0X2lkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KSksXG4gICAgICBdLm1hcCgoaXRlbSkgPT4gW2l0ZW0udXJsLCBpdGVtXSksXG4gICAgKS52YWx1ZXMoKSxcbiAgKVxuICBjb25zdCBjb25maWd1cmVkQW1vdW50cyA9XG4gICAgQXJyYXkuaXNBcnJheShjb25maWcuYW1vdW50cykgJiYgY29uZmlnLmFtb3VudHMubGVuZ3RoXG4gICAgICA/IGNvbmZpZy5hbW91bnRzXG4gICAgICA6IGNvbmZpZy5hbW91bnQgIT0gbnVsbCAmJiBjb25maWcuY3VycmVuY3lfY29kZVxuICAgICAgICA/IFt7IGFtb3VudDogY29uZmlnLmFtb3VudCwgY3VycmVuY3lfY29kZTogY29uZmlnLmN1cnJlbmN5X2NvZGUgfV1cbiAgICAgICAgOiBbXVxuICBjb25zdCBjb25maWd1cmVkQ29uZGl0aW9ucyA9IChjb25maWcucHVyY2hhc2VfY29uZGl0aW9ucyB8fCBbXSkubWFwKFxuICAgIChjb25kaXRpb24sIGluZGV4KSA9PiAoe1xuICAgICAga2V5OiBgY29uZGl0aW9uLSR7aW5kZXh9YCxcbiAgICAgIGF0dHJpYnV0ZTogY29uZGl0aW9uLmF0dHJpYnV0ZSxcbiAgICAgIG9wZXJhdG9yOiBjb25kaXRpb24ub3BlcmF0b3IsXG4gICAgICB2YWx1ZXM6IGNvbmRpdGlvbi52YWx1ZXMubWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgY29uZGl0aW9uLmF0dHJpYnV0ZSA9PT0gXCJjdXJyZW5jeV9jb2RlXCIgfHxcbiAgICAgICAgICBjb25kaXRpb24uYXR0cmlidXRlID09PSBcInNoaXBwaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlXCJcbiAgICAgICAgICA/IHZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA6IHZhbHVlLFxuICAgICAgKSxcbiAgICB9KSxcbiAgKVxuICBpZiAoXG4gICAgIWNvbmZpZ3VyZWRDb25kaXRpb25zLnNvbWUoXG4gICAgICAoY29uZGl0aW9uKSA9PiBjb25kaXRpb24uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIixcbiAgICApICYmXG4gICAgY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIiAmJlxuICAgIGNvbmZpZ3VyZWRBbW91bnRzLmxlbmd0aFxuICApIHtcbiAgICBjb25maWd1cmVkQ29uZGl0aW9ucy5wdXNoKHtcbiAgICAgIGtleTogXCJjb25kaXRpb24tbGVnYWN5LWN1cnJlbmN5XCIsXG4gICAgICBhdHRyaWJ1dGU6IFwiY3VycmVuY3lfY29kZVwiLFxuICAgICAgb3BlcmF0b3I6IGNvbmZpZ3VyZWRBbW91bnRzLmxlbmd0aCA9PT0gMSA/IFwiZXFcIiA6IFwiaW5cIixcbiAgICAgIHZhbHVlczogY29uZmlndXJlZEFtb3VudHMubWFwKChhbW91bnQpID0+XG4gICAgICAgIGFtb3VudC5jdXJyZW5jeV9jb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICApLFxuICAgIH0pXG4gIH1cbiAgaWYgKFxuICAgICFjb25maWd1cmVkQ29uZGl0aW9ucy5zb21lKFxuICAgICAgKGNvbmRpdGlvbikgPT4gY29uZGl0aW9uLmF0dHJpYnV0ZSA9PT0gXCJzYWxlc19jaGFubmVsX2lkXCIsXG4gICAgKSAmJlxuICAgIHByb2R1Y3Quc2FsZXNfY2hhbm5lbHM/Lmxlbmd0aFxuICApIHtcbiAgICBjb25maWd1cmVkQ29uZGl0aW9ucy5wdXNoKHtcbiAgICAgIGtleTogXCJjb25kaXRpb24tbGVnYWN5LXNhbGVzLWNoYW5uZWxcIixcbiAgICAgIGF0dHJpYnV0ZTogXCJzYWxlc19jaGFubmVsX2lkXCIsXG4gICAgICBvcGVyYXRvcjogcHJvZHVjdC5zYWxlc19jaGFubmVscy5sZW5ndGggPT09IDEgPyBcImVxXCIgOiBcImluXCIsXG4gICAgICB2YWx1ZXM6IHByb2R1Y3Quc2FsZXNfY2hhbm5lbHMubWFwKChjaGFubmVsKSA9PiBjaGFubmVsLmlkKSxcbiAgICB9KVxuICB9XG4gIGNvbnN0IGV4cGlyYXRpb25Qb2xpY3kgPSBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3lcbiAgY29uc3QgY29uZmlndXJlZEFtb3VudFJvd3MgPSBjb25maWd1cmVkQW1vdW50cy5tYXAoKHJvdywgaW5kZXgpID0+ICh7XG4gICAga2V5OiBgY291cG9uLXZhbHVlLSR7aW5kZXh9YCxcbiAgICBhbW91bnQ6IFN0cmluZyhyb3cuYW1vdW50KSxcbiAgICBjdXJyZW5jeV9jb2RlOiByb3cuY3VycmVuY3lfY29kZS50b0xvd2VyQ2FzZSgpLFxuICB9KSlcbiAgY29uc3QgYW1vdW50Um93cyA9XG4gICAgY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgPyByZWNvbmNpbGVDb3Vwb25BbW91bnRzKFxuICAgICAgICBjb25maWd1cmVkQW1vdW50Um93cyxcbiAgICAgICAgZWZmZWN0aXZlQ291cG9uQ3VycmVuY2llcyhjb25maWd1cmVkQ29uZGl0aW9ucywgb3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdKSxcbiAgICAgIClcbiAgICAgIDogY29uZmlndXJlZEFtb3VudFJvd3NcblxuICByZXR1cm4ge1xuICAgIHByb2R1Y3Q6IHtcbiAgICAgIC4uLmVtcHR5UHJvZHVjdChvcHRpb25zKSxcbiAgICAgIHRpdGxlOiBwcm9kdWN0LnRpdGxlIHx8IFwiXCIsXG4gICAgICBzdWJ0aXRsZTogcHJvZHVjdC5zdWJ0aXRsZSB8fCBcIlwiLFxuICAgICAgaGFuZGxlOiBwcm9kdWN0LmhhbmRsZSB8fCBcIlwiLFxuICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3QuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIG1lZGlhLFxuICAgICAgc2t1OiB2YXJpYW50Py5za3UgfHwgXCJcIixcbiAgICAgIHByaWNlX2Ftb3VudHM6IHtcbiAgICAgICAgLi4uZW1wdHlQcm9kdWN0KG9wdGlvbnMpLnByaWNlX2Ftb3VudHMsXG4gICAgICAgIC4uLnByaWNlcyxcbiAgICAgIH0sXG4gICAgICBzdGF0dXM6IHByb2R1Y3Quc3RhdHVzIHx8IFwiZHJhZnRcIixcbiAgICAgIGRpc2NvdW50YWJsZTogQm9vbGVhbihwcm9kdWN0LmRpc2NvdW50YWJsZSksXG4gICAgICB0eXBlX2lkOiBwcm9kdWN0LnR5cGVfaWQgfHwgXCJcIixcbiAgICAgIGNvbGxlY3Rpb25faWQ6IHByb2R1Y3QuY29sbGVjdGlvbl9pZCB8fCBcIlwiLFxuICAgICAgY2F0ZWdvcnlfaWQ6IHByb2R1Y3QuY2F0ZWdvcmllcz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgICAgdGFnX2lkOiBwcm9kdWN0LnRhZ3M/LlswXT8uaWQgfHwgXCJcIixcbiAgICB9LFxuICAgIGNvdXBvbjoge1xuICAgICAgLi4uZW1wdHlDb3Vwb24ob3B0aW9ucyksXG4gICAgICBlbmFibGVkOiBjb25maWcuZW5hYmxlZCxcbiAgICAgIHR5cGU6IGNvdXBvblR5cGVGcm9tQ29uZmlnKGNvbmZpZyksXG4gICAgICBwdXJjaGFzZV9jb25kaXRpb25zOiBjb25maWd1cmVkQ29uZGl0aW9ucyxcbiAgICAgIGFtb3VudHM6XG4gICAgICAgIGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICA/IGFtb3VudFJvd3NcbiAgICAgICAgICA6IGFtb3VudFJvd3MubGVuZ3RoXG4gICAgICAgICAgICA/IGFtb3VudFJvd3NcbiAgICAgICAgICAgIDogZW1wdHlDb3Vwb24ob3B0aW9ucykuYW1vdW50cyxcbiAgICAgIHBlcmNlbnRhZ2U6IGNvbmZpZy5wZXJjZW50YWdlID09IG51bGwgPyBcIlwiIDogU3RyaW5nKGNvbmZpZy5wZXJjZW50YWdlKSxcbiAgICAgIGFsbG9jYXRpb246XG4gICAgICAgIGNvbmZpZy5wcm9tb3Rpb25fdGVtcGxhdGU/LmFwcGxpY2F0aW9uX21ldGhvZD8uYWxsb2NhdGlvbiA9PT0gXCJvbmNlXCJcbiAgICAgICAgICA/IChcIm9uY2VcIiBhcyBjb25zdClcbiAgICAgICAgICA6IChcImVhY2hcIiBhcyBjb25zdCksXG4gICAgICBjb2RlX3N0cmF0ZWd5OiBjb25maWcuY29kZV9zdHJhdGVneSxcbiAgICAgIGNvZGVfcHJlZml4OiBjb25maWcuY29kZV9wcmVmaXggfHwgXCJcIixcbiAgICAgIHNoYXJlZF9jb2RlOiBjb25maWcuc2hhcmVkX2NvZGUgfHwgXCJcIixcbiAgICAgIGV4cGlyYXRpb25fdHlwZTogY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlIHx8IFwiZHVyYXRpb25cIixcbiAgICAgIGV4cGlyYXRpb25fZGF5czpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImR1cmF0aW9uXCJcbiAgICAgICAgICA/IFN0cmluZyhjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kuZHVyYXRpb25fZGF5cylcbiAgICAgICAgICA6IFwiMzBcIixcbiAgICAgIGV4cGlyYXRpb25fZGF0ZTpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImZpeGVkXCJcbiAgICAgICAgICA/IHRvRGF0ZVRpbWVMb2NhbChjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kuZXhwaXJlc19hdClcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjpcbiAgICAgICAgZXhwaXJhdGlvblBvbGljeS50eXBlID09PSBcIm5vbmVcIiB8fFxuICAgICAgICBleHBpcmF0aW9uUG9saWN5LmNhcF9ieV9jYW1wYWlnbiAhPT0gZmFsc2UsXG4gICAgICBleHBpcmF0aW9uX2NhcF9hdDpcbiAgICAgICAgZXhwaXJhdGlvblBvbGljeS50eXBlID09PSBcIm5vbmVcIlxuICAgICAgICAgID8gXCJcIlxuICAgICAgICAgIDogdG9EYXRlVGltZUxvY2FsKGV4cGlyYXRpb25Qb2xpY3kuY2FwX2F0KSxcbiAgICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogU3RyaW5nKFxuICAgICAgICBjb25maWcubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtIHx8IDEsXG4gICAgICApLFxuICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBjb25maWcucHJvbW90aW9uX21pcnJvcl9tb2RlIHx8IFwibm9uZVwiLFxuICAgICAgcHJvbW90aW9uX3N0YXR1czogY29uZmlnLnByb21vdGlvbl9zdGF0dXMgfHwgXCJkcmFmdFwiLFxuICAgIH0sXG4gICAgY2FtcGFpZ246IHtcbiAgICAgIC4uLmVtcHR5Q2FtcGFpZ24sXG4gICAgICBtb2RlOiBjb25maWcuY2FtcGFpZ25faWQgPyAoXCJleGlzdGluZ1wiIGFzIGNvbnN0KSA6IChcIm5vbmVcIiBhcyBjb25zdCksXG4gICAgICBjYW1wYWlnbl9pZDogY29uZmlnLmNhbXBhaWduX2lkIHx8IFwiXCIsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtb2RhbENvbnRlbnRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIG92ZXJmbG93OiBcImhpZGRlblwiLFxufVxuXG5jb25zdCBtb2RhbFdpemFyZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleDogXCIxIDEgYXV0b1wiLFxuICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICBtaW5IZWlnaHQ6IDAsXG4gIG92ZXJmbG93OiBcImhpZGRlblwiLFxufVxuXG5jb25zdCB2aXN1YWxseUhpZGRlblN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBjbGlwOiBcInJlY3QoMCAwIDAgMClcIixcbiAgY2xpcFBhdGg6IFwiaW5zZXQoNTAlKVwiLFxuICBoZWlnaHQ6IDEsXG4gIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxuICB3aWR0aDogMSxcbn1cblxuY29uc3QgbW9kYWxCb2R5U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXg6IFwiMSAxIGF1dG9cIixcbiAgbWluSGVpZ2h0OiAwLFxuICBwYWRkaW5nOiAwLFxufVxuXG5jb25zdCBtb2RhbFNjcm9sbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICBvdmVyZmxvd1k6IFwiYXV0b1wiLFxuICBwYWRkaW5nOiBcIjY0cHggMjRweCAxMTJweFwiLFxuICB3aWR0aDogXCIxMDAlXCIsXG59XG5cbmNvbnN0IG1vZGFsRm9ybVN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBtYXJnaW46IFwiMCBhdXRvXCIsXG4gIG1heFdpZHRoOiA3MjAsXG4gIHdpZHRoOiBcIm1pbig3MjBweCwgMTAwJSlcIixcbn1cblxuY29uc3Qgc3RhY2tTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIGdhcDogMjQsXG59XG5cbmNvbnN0IHR3b0NvbHVtbkdyaWRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJncmlkXCIsXG4gIGdhcDogMTYsXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjYwcHgsIDFmcikpXCIsXG59XG5cbmNvbnN0IHRocmVlQ29sdW1uR3JpZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImdyaWRcIixcbiAgZ2FwOiAxNixcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJyZXBlYXQoYXV0by1maXQsIG1pbm1heCgxODBweCwgMWZyKSlcIixcbn1cblxuY29uc3QgcGFuZWxTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgYm9yZGVyOiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgYm9yZGVyUmFkaXVzOiA4LFxuICBwYWRkaW5nOiAxNixcbn1cblxuZnVuY3Rpb24gRmllbGQoe1xuICBjaGlsZHJlbixcbiAgbGFiZWwsXG4gIG9wdGlvbmFsLFxuICB0b29sdGlwLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gIGxhYmVsOiBzdHJpbmdcbiAgb3B0aW9uYWw/OiBib29sZWFuXG4gIHRvb2x0aXA/OiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMVwiIHN0eWxlPXt7IG1pbldpZHRoOiAwIH19PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0xXCI+XG4gICAgICAgIDxMYWJlbD57bGFiZWx9PC9MYWJlbD5cbiAgICAgICAge3Rvb2x0aXAgJiYgKFxuICAgICAgICAgIDxUb29sdGlwIGNvbnRlbnQ9e3Rvb2x0aXB9PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YCR7bGFiZWx9IGluZm9ybWF0aW9uYH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJbmZvcm1hdGlvbkNpcmNsZSAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICApfVxuICAgICAgICB7b3B0aW9uYWwgJiYgKFxuICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgIChPcHRpb25hbClcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWN0aW9uKHtcbiAgY2hpbGRyZW4sXG4gIGRlc2NyaXB0aW9uLFxuICB0aXRsZSxcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG59KSB7XG4gIHJldHVybiAoXG4gICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS00XCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8SGVhZGluZyBsZXZlbD1cImgyXCI+e3RpdGxlfTwvSGVhZGluZz5cbiAgICAgICAge2Rlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zZWN0aW9uPlxuICApXG59XG5cbmZ1bmN0aW9uIE9wdGlvblNlbGVjdCh7XG4gIG9uQ2hhbmdlLFxuICBvcHRpb25zLFxuICB2YWx1ZSxcbn06IHtcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIG9wdGlvbnM6IE9wdGlvblJlY29yZFtdXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB2YWx1ZT17dmFsdWUgfHwgTk9ORX1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9eyhuZXh0KSA9PiBvbkNoYW5nZShuZXh0ID09PSBOT05FID8gXCJcIiA6IG5leHQpfVxuICAgID5cbiAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPXtOT05FfT5Ob25lPC9TZWxlY3QuSXRlbT5cbiAgICAgICAge29wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtvcHRpb24uaWR9IHZhbHVlPXtvcHRpb24uaWR9PlxuICAgICAgICAgICAge29wdGlvbkxhYmVsKG9wdGlvbil9XG4gICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgIDwvU2VsZWN0PlxuICApXG59XG5cbmZ1bmN0aW9uIEN1cnJlbmN5U2VsZWN0KHtcbiAgY3VycmVuY2llcyxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgdmFsdWU9e3ZhbHVlIHx8IHVuZGVmaW5lZH1cbiAgICAgIGRpc2FibGVkPXshY3VycmVuY2llcy5sZW5ndGh9XG4gICAgICBvblZhbHVlQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICA+XG4gICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgIDxTZWxlY3QuVmFsdWVcbiAgICAgICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgICAgICBjdXJyZW5jaWVzLmxlbmd0aCA/IFwiU2VsZWN0IGN1cnJlbmN5XCIgOiBcIk5vIGN1cnJlbmNpZXMgYXZhaWxhYmxlXCJcbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICB7Y3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiAoXG4gICAgICAgICAgPFNlbGVjdC5JdGVtIGtleT17Y3VycmVuY3kuY29kZX0gdmFsdWU9e2N1cnJlbmN5LmNvZGV9PlxuICAgICAgICAgICAge2N1cnJlbmN5Lm5hbWV9ICh7Y3VycmVuY3kuY29kZS50b1VwcGVyQ2FzZSgpfSlcbiAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgPC9TZWxlY3Q+XG4gIClcbn1cblxuZnVuY3Rpb24gQ3VycmVuY3lBbW91bnRGaWVsZCh7XG4gIGN1cnJlbmNpZXMsXG4gIGN1cnJlbmN5Q29kZSxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdXG4gIGN1cnJlbmN5Q29kZTogc3RyaW5nXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGN1cnJlbmN5Q29kZSlcbiAgY29uc3QgY29kZSA9IGN1cnJlbmN5Q29kZS50b1VwcGVyQ2FzZSgpXG4gIGNvbnN0IGRlY2ltYWxzID0gY3VycmVuY3lEZWNpbWFsRGlnaXRzKGNvZGUgfHwgXCJVU0RcIilcbiAgcmV0dXJuIChcbiAgICA8Q3VycmVuY3lJbnB1dFxuICAgICAgY29kZT17Y29kZSB8fCBcIlVTRFwifVxuICAgICAgc3ltYm9sPXtcbiAgICAgICAgY3VycmVuY3k/LnN5bWJvbF9uYXRpdmUgfHxcbiAgICAgICAgY3VycmVuY3k/LnN5bWJvbCB8fFxuICAgICAgICBjdXJyZW5jeVN5bWJvbChjb2RlIHx8IFwiVVNEXCIpXG4gICAgICB9XG4gICAgICBtaW49ezB9XG4gICAgICBkZWNpbWFsU2NhbGU9e2RlY2ltYWxzfVxuICAgICAgZGVjaW1hbHNMaW1pdD17ZGVjaW1hbHN9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBkaXNhYmxlZD17IWN1cnJlbmN5Q29kZX1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9eyhuZXh0VmFsdWUpID0+IG9uQ2hhbmdlKG5leHRWYWx1ZSB8fCBcIlwiKX1cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFBlcmNlbnRhZ2VJbnB1dCh7XG4gIG9uQ2hhbmdlLFxuICB2YWx1ZSxcbn06IHtcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLXN0cmV0Y2hcIiBzdHlsZT17eyB3aWR0aDogXCIxMDAlXCIgfX0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImJnLXVpLWJnLWZpZWxkIHRleHQtdWktZmctbXV0ZWQgZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBib3JkZXJDb2xvcjogXCJ2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiNnB4IDAgMCA2cHhcIixcbiAgICAgICAgICBib3JkZXJSaWdodDogMCxcbiAgICAgICAgICBwYWRkaW5nOiBcIjAgMTJweFwiLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICAlXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwibWluLXctMCBmbGV4LTFcIlxuICAgICAgICBzdHlsZT17eyBmbGV4OiBcIjEgMSAwJVwiLCBtaW5XaWR0aDogMCB9fVxuICAgICAgPlxuICAgICAgICA8SW5wdXRcbiAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGxcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIG1pbj17MX1cbiAgICAgICAgICBtYXg9ezEwMH1cbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCIwIDZweCA2cHggMFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gb25DaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIEhhbmRsZUlucHV0KHtcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZCBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LXktMCBsZWZ0LTAgei0xMCBmbGV4IG1pbi13LTggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1yIHB4LTIuNVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0eHQtY29tcGFjdC1zbWFsbCBmb250LW1lZGl1bVwiPi88L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxJbnB1dFxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIHBsYWNlaG9sZGVyPVwid2ludGVyLWphY2tldFwiXG4gICAgICAgIHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiAzNCB9fVxuICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5mdW5jdGlvbiBNZWRpYVVwbG9hZCh7XG4gIGlzVXBsb2FkaW5nLFxuICBtZWRpYSxcbiAgb25SZW1vdmUsXG4gIG9uVXBsb2FkLFxufToge1xuICBpc1VwbG9hZGluZzogYm9vbGVhblxuICBtZWRpYTogUHJvZHVjdE1lZGlhW11cbiAgb25SZW1vdmU6IChtZWRpYTogUHJvZHVjdE1lZGlhKSA9PiB2b2lkXG4gIG9uVXBsb2FkOiAoZmlsZXM6IEZpbGVbXSkgPT4gdm9pZFxufSkge1xuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBhY2NlcHQgPVxuICAgIFwiaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2UvZ2lmLGltYWdlL3dlYnAsaW1hZ2UvaGVpYyxpbWFnZS9zdmcreG1sXCJcblxuICBjb25zdCBoYW5kbGVGaWxlcyA9IChmaWxlczogRmlsZUxpc3QgfCBudWxsKSA9PiB7XG4gICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSByZXR1cm5cbiAgICBvblVwbG9hZChBcnJheS5mcm9tKGZpbGVzKSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSAoZXZlbnQ6IERyYWdFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgaGFuZGxlRmlsZXMoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktM1wiPlxuICAgICAge21lZGlhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtM1wiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDEyMHB4LCAxZnIpKVwiLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7bWVkaWEubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uYXNzZXRfaWQgfHwgaXRlbS51cmx9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1kIGJvcmRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e2l0ZW0udXJsfVxuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0zMiB3LWZ1bGwgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IDEyOCB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXgtMCBib3R0b20tMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYmctYmxhY2svNjAgcHgtMiBweS0xXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzbWFsbFwiIHN0eWxlPXt7IGNvbG9yOiBcIndoaXRlXCIgfX0+XG4gICAgICAgICAgICAgICAgICB7aW5kZXggPT09IDAgPyBcIlRodW1ibmFpbFwiIDogYEltYWdlICR7aW5kZXggKyAxfWB9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZSBpbWFnZVwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogXCJ3aGl0ZVwiIH19XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblJlbW92ZShpdGVtKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8WE1hcmtNaW5pIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGhpZGRlblxuICAgICAgICBtdWx0aXBsZVxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUZpbGVzKGV2ZW50LnRhcmdldC5maWxlcylcbiAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBcIlwiXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgZGlzYWJsZWQ9e2lzVXBsb2FkaW5nfVxuICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkIGZsZXggdy1mdWxsIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAteS0yIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1kYXNoZWQgcC04XCJcbiAgICAgICAgc3R5bGU9e3sgbWluSGVpZ2h0OiAxNDggfX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gaW5wdXRSZWYuY3VycmVudD8uY2xpY2soKX1cbiAgICAgICAgb25EcmFnT3Zlcj17KGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICBvbkRyb3A9e2hhbmRsZURyb3B9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtdWktZmctYmFzZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0yXCI+XG4gICAgICAgICAgPEFycm93VXBUcmF5IC8+XG4gICAgICAgICAge2lzVXBsb2FkaW5nID8gXCJVcGxvYWRpbmcgaW1hZ2VzLi4uXCIgOiBcIlVwbG9hZCBpbWFnZXNcIn1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgRHJhZyBhbmQgZHJvcCBpbWFnZXMgaGVyZSBvciBjbGljayB0byB1cGxvYWQuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApXG59XG5cbnR5cGUgQ29uZGl0aW9uVmFsdWVPcHRpb24gPSB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVxuXG5mdW5jdGlvbiBjb25kaXRpb25WYWx1ZU9wdGlvbnMoXG4gIGF0dHJpYnV0ZTogUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGUgfCBcIlwiLFxuICBvcHRpb25zOiBPcHRpb25zUGF5bG9hZCxcbik6IENvbmRpdGlvblZhbHVlT3B0aW9uW10ge1xuICBpZiAoYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIikge1xuICAgIHJldHVybiAob3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdKS5tYXAoKGN1cnJlbmN5KSA9PiAoe1xuICAgICAgdmFsdWU6IGN1cnJlbmN5LmNvZGUsXG4gICAgICBsYWJlbDogYCR7Y3VycmVuY3kubmFtZX0gKCR7Y3VycmVuY3kuY29kZS50b1VwcGVyQ2FzZSgpfSlgLFxuICAgIH0pKVxuICB9XG4gIGlmIChhdHRyaWJ1dGUgPT09IFwic2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGVcIikge1xuICAgIHJldHVybiAob3B0aW9ucy5jb3VudHJpZXMgfHwgW10pLm1hcCgoY291bnRyeSkgPT4gKHtcbiAgICAgIHZhbHVlOiBTdHJpbmcoY291bnRyeS5pc29fMiB8fCBjb3VudHJ5LmlkKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgbGFiZWw6IGNvdW50cnkuZGlzcGxheV9uYW1lIHx8IGNvdW50cnkubmFtZSB8fCBjb3VudHJ5LmlkLFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgcmVjb3JkcyA9XG4gICAgYXR0cmlidXRlID09PSBcImN1c3RvbWVyLmdyb3Vwcy5pZFwiXG4gICAgICA/IG9wdGlvbnMuY3VzdG9tZXJfZ3JvdXBzXG4gICAgICA6IGF0dHJpYnV0ZSA9PT0gXCJyZWdpb24uaWRcIlxuICAgICAgICA/IG9wdGlvbnMucmVnaW9uc1xuICAgICAgICA6IGF0dHJpYnV0ZSA9PT0gXCJzYWxlc19jaGFubmVsX2lkXCJcbiAgICAgICAgICA/IG9wdGlvbnMuc2FsZXNfY2hhbm5lbHNcbiAgICAgICAgICA6IFtdXG4gIHJldHVybiAocmVjb3JkcyB8fCBbXSkubWFwKChyZWNvcmQpID0+ICh7XG4gICAgdmFsdWU6IHJlY29yZC5pZCxcbiAgICBsYWJlbDogb3B0aW9uTGFiZWwocmVjb3JkKSxcbiAgfSkpXG59XG5cbmZ1bmN0aW9uIE11bHRpQ29uZGl0aW9uVmFsdWVzKHtcbiAgYXR0cmlidXRlLFxuICBvbkNoYW5nZSxcbiAgb3B0aW9ucyxcbiAgdmFsdWUsXG59OiB7XG4gIGF0dHJpYnV0ZTogUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGVcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nW10pID0+IHZvaWRcbiAgb3B0aW9uczogQ29uZGl0aW9uVmFsdWVPcHRpb25bXVxuICB2YWx1ZTogc3RyaW5nW11cbn0pIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtkcmFmdCwgc2V0RHJhZnRdID0gdXNlU3RhdGUodmFsdWUpXG4gIGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZShcIlwiKVxuICBjb25zdCBsYWJlbHMgPSBPYmplY3QuZnJvbUVudHJpZXMob3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gW29wdGlvbi52YWx1ZSwgb3B0aW9uLmxhYmVsXSkpXG4gIGNvbnN0IGZpbHRlcmVkID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudHJpbSgpLnRvTG93ZXJDYXNlKCkpLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0XCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHNldERyYWZ0KHZhbHVlKVxuICAgICAgICAgIHNldFNlYXJjaChcIlwiKVxuICAgICAgICAgIHNldE9wZW4odHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3ZhbHVlLmxlbmd0aFxuICAgICAgICAgID8gdmFsdWUubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/IGxhYmVsc1t2YWx1ZVswXV0gfHwgdmFsdWVbMF1cbiAgICAgICAgICAgIDogYCR7dmFsdWUubGVuZ3RofSB2YWx1ZXMgc2VsZWN0ZWRgXG4gICAgICAgICAgOiBcIlNlbGVjdCB2YWx1ZXNcIn1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAge3ZhbHVlLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBmbGV4LXdyYXAgZ2FwLTFcIj5cbiAgICAgICAgICB7dmFsdWUubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBrZXk9e2l0ZW19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXVpLWJnLWNvbXBvbmVudCB0ZXh0LXVpLWZnLXN1YnRsZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0xIHJvdW5kZWQtbWQgYm9yZGVyIHB4LTIgcHktMSB0ZXh0LXhzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xhYmVsc1tpdGVtXSB8fCBpdGVtfVxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YFJlbW92ZSAke2xhYmVsc1tpdGVtXSB8fCBpdGVtfWB9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UodmFsdWUuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkgIT09IGl0ZW0pKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxYTWFya01pbmkgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxEcmF3ZXIgb3Blbj17b3Blbn0gb25PcGVuQ2hhbmdlPXtzZXRPcGVufT5cbiAgICAgICAgPERyYXdlci5Db250ZW50PlxuICAgICAgICAgIDxEcmF3ZXIuSGVhZGVyPlxuICAgICAgICAgICAgPERyYXdlci5UaXRsZT5cbiAgICAgICAgICAgICAgU2VsZWN0IHtjb25kaXRpb25BdHRyaWJ1dGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGF0dHJpYnV0ZSk/LmxhYmVsfVxuICAgICAgICAgICAgPC9EcmF3ZXIuVGl0bGU+XG4gICAgICAgICAgPC9EcmF3ZXIuSGVhZGVyPlxuICAgICAgICAgIDxEcmF3ZXIuQm9keSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTMgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggdmFsdWVzXCJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gc2V0U2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2ZpbHRlcmVkLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgZmlsdGVyZWQubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGtleT17b3B0aW9uLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgZ2FwLXgtMyByb3VuZGVkLW1kIGJvcmRlciBwLTNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtkcmFmdC5pbmNsdWRlcyhvcHRpb24udmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldERyYWZ0KChjdXJyZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IEFycmF5LmZyb20obmV3IFNldChbLi4uY3VycmVudCwgb3B0aW9uLnZhbHVlXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gb3B0aW9uLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8VGV4dD57b3B0aW9uLmxhYmVsfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFRleHQgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPk5vIG1hdGNoaW5nIHZhbHVlcy48L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRHJhd2VyLkJvZHk+XG4gICAgICAgICAgPERyYXdlci5Gb290ZXI+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gc2V0T3BlbihmYWxzZSl9PlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFkcmFmdC5sZW5ndGh9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZShkcmFmdClcbiAgICAgICAgICAgICAgICBzZXRPcGVuKGZhbHNlKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBBcHBseVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9EcmF3ZXIuRm9vdGVyPlxuICAgICAgICA8L0RyYXdlci5Db250ZW50PlxuICAgICAgPC9EcmF3ZXI+XG4gICAgPC8+XG4gIClcbn1cblxuZnVuY3Rpb24gUHVyY2hhc2VDb25kaXRpb25zRmllbGQoe1xuICBmaXhlZEFtb3VudCxcbiAgb25DaGFuZ2UsXG4gIG9wdGlvbnMsXG4gIHZhbHVlLFxufToge1xuICBmaXhlZEFtb3VudDogYm9vbGVhblxuICBvbkNoYW5nZTogKGNvbmRpdGlvbnM6IFB1cmNoYXNlQ29uZGl0aW9uRm9ybVtdKSA9PiB2b2lkXG4gIG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkXG4gIHZhbHVlOiBQdXJjaGFzZUNvbmRpdGlvbkZvcm1bXVxufSkge1xuICBjb25zdCBzZWxlY3RlZEF0dHJpYnV0ZXMgPSBuZXcgU2V0KFxuICAgIHZhbHVlLm1hcCgoY29uZGl0aW9uKSA9PiBjb25kaXRpb24uYXR0cmlidXRlKS5maWx0ZXIoQm9vbGVhbiksXG4gIClcblxuICBjb25zdCByZXBsYWNlID0gKGtleTogc3RyaW5nLCB1cGRhdGU6IFBhcnRpYWw8UHVyY2hhc2VDb25kaXRpb25Gb3JtPikgPT5cbiAgICBvbkNoYW5nZShcbiAgICAgIHZhbHVlLm1hcCgoY29uZGl0aW9uKSA9PlxuICAgICAgICBjb25kaXRpb24ua2V5ID09PSBrZXkgPyB7IC4uLmNvbmRpdGlvbiwgLi4udXBkYXRlIH0gOiBjb25kaXRpb24sXG4gICAgICApLFxuICAgIClcblxuICByZXR1cm4gKFxuICAgIDxTZWN0aW9uXG4gICAgICB0aXRsZT1cIldobyBjYW4gcHVyY2hhc2UgdGhpcyBjb3Vwb24/XCJcbiAgICAgIGRlc2NyaXB0aW9uPVwiQ291cG9uIHByb2R1Y3RzIGNhbiBiZSBwdXJjaGFzZWQgYnkgYWxsIGN1c3RvbWVycyB3aGVuIG5vIGNvbmRpdGlvbnMgYXJlIGNvbmZpZ3VyZWQuIENvbmRpdGlvbnMgYXJlIGNvbWJpbmVkIHdpdGggQU5ELlwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTNcIj5cbiAgICAgICAge3ZhbHVlLm1hcCgoY29uZGl0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbmRpdGlvblZhbHVlT3B0aW9ucyhjb25kaXRpb24uYXR0cmlidXRlLCBvcHRpb25zKVxuICAgICAgICAgIGNvbnN0IGN1cnJlbmN5UmVxdWlyZWQgPVxuICAgICAgICAgICAgZml4ZWRBbW91bnQgJiYgY29uZGl0aW9uLmF0dHJpYnV0ZSA9PT0gXCJjdXJyZW5jeV9jb2RlXCJcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e2NvbmRpdGlvbi5rZXl9PlxuICAgICAgICAgICAgICB7aW5kZXggPiAwICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWQgZmxleCBoLTggaXRlbXMtY2VudGVyIHRleHQteHMgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIEFORFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtwYW5lbFN0eWxlfSBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGdhcC15LTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb25kaXRpb24uYXR0cmlidXRlIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVuY3lSZXF1aXJlZH1cbiAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoYXR0cmlidXRlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZShjb25kaXRpb24ua2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogYXR0cmlidXRlIGFzIFB1cmNoYXNlQ29uZGl0aW9uQXR0cmlidXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSBwbGFjZWhvbGRlcj1cIlNlbGVjdCBhdHRyaWJ1dGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbmRpdGlvbkF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlidXRlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLnZhbHVlID09PSBjb25kaXRpb24uYXR0cmlidXRlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGUudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGF0dHJpYnV0ZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e2F0dHJpYnV0ZS52YWx1ZX0gdmFsdWU9e2F0dHJpYnV0ZS52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YXR0cmlidXRlLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVuY3lSZXF1aXJlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZSBjb25kaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKHZhbHVlLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5rZXkgIT09IGNvbmRpdGlvbi5rZXkpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxYTWFya01pbmkgLz5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb25kaXRpb24ub3BlcmF0b3IgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvbmRpdGlvbi5hdHRyaWJ1dGV9XG4gICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhvcGVyYXRvcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlKGNvbmRpdGlvbi5rZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciBhcyBQdXJjaGFzZUNvbmRpdGlvbk9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gXCJlcVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb25kaXRpb24udmFsdWVzLnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25kaXRpb24udmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgcGxhY2Vob2xkZXI9XCJTZWxlY3Qgb3BlcmF0b3JcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAge2NvbmRpdGlvbk9wZXJhdG9ycy5tYXAoKG9wZXJhdG9yKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtvcGVyYXRvci52YWx1ZX0gdmFsdWU9e29wZXJhdG9yLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge29wZXJhdG9yLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAge2NvbmRpdGlvbi5hdHRyaWJ1dGUgJiYgY29uZGl0aW9uLm9wZXJhdG9yID09PSBcImVxXCIgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y29uZGl0aW9uLnZhbHVlc1swXSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHNlbGVjdGVkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZShjb25kaXRpb24ua2V5LCB7IHZhbHVlczogW3NlbGVjdGVkXSB9KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdmFsdWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlcy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtvcHRpb24udmFsdWV9IHZhbHVlPXtvcHRpb24udmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICkgOiBjb25kaXRpb24uYXR0cmlidXRlICYmIGNvbmRpdGlvbi5vcGVyYXRvciA/IChcbiAgICAgICAgICAgICAgICAgICAgPE11bHRpQ29uZGl0aW9uVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlPXtjb25kaXRpb24uYXR0cmlidXRlfVxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3ZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y29uZGl0aW9uLnZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlcykgPT4gcmVwbGFjZShjb25kaXRpb24ua2V5LCB7IHZhbHVlcyB9KX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBkaXNhYmxlZCBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkQXR0cmlidXRlcy5zaXplID49IGNvbmRpdGlvbkF0dHJpYnV0ZXMubGVuZ3RofVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgb25DaGFuZ2UoW1xuICAgICAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgICAgIHsga2V5OiBjb25kaXRpb25LZXkoKSwgYXR0cmlidXRlOiBcIlwiLCBvcGVyYXRvcjogXCJcIiwgdmFsdWVzOiBbXSB9LFxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxQbHVzIC8+IEFkZCBjb25kaXRpb25cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICBvbkNoYW5nZShmaXhlZEFtb3VudCA/IGRlZmF1bHRQdXJjaGFzZUNvbmRpdGlvbnMob3B0aW9ucykgOiBbXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICBDbGVhciBhbGxcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1NlY3Rpb24+XG4gIClcbn1cblxuZnVuY3Rpb24gUHJvZHVjdFByaWNlc1RhYmxlKHtcbiAgY3VycmVuY2llcyxcbiAgY291cG9uVmFsdWUsXG4gIG9uQ2hhbmdlLFxuICBwcmljZXMsXG59OiB7XG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5T3B0aW9uW11cbiAgY291cG9uVmFsdWU6IHN0cmluZ1xuICBvbkNoYW5nZTogKGN1cnJlbmN5Q29kZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHByaWNlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxufSkge1xuICBjb25zdCBbdmlzaWJsZUN1cnJlbmNpZXMsIHNldFZpc2libGVDdXJyZW5jaWVzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPigoKSA9PlxuICAgIGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSksXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFZpc2libGVDdXJyZW5jaWVzKChjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCBhdmFpbGFibGUgPSBuZXcgU2V0KGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSkpXG4gICAgICBjb25zdCByZXRhaW5lZCA9IGN1cnJlbnQuZmlsdGVyKChjb2RlKSA9PiBhdmFpbGFibGUuaGFzKGNvZGUpKVxuICAgICAgY29uc3QgYWRkZWQgPSBjdXJyZW5jaWVzXG4gICAgICAgIC5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKVxuICAgICAgICAuZmlsdGVyKChjb2RlKSA9PiAhY3VycmVudC5pbmNsdWRlcyhjb2RlKSlcbiAgICAgIHJldHVybiBbLi4ucmV0YWluZWQsIC4uLmFkZGVkXVxuICAgIH0pXG4gIH0sIFtjdXJyZW5jaWVzXSlcblxuICBjb25zdCBzaG93bkN1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmZpbHRlcigoY3VycmVuY3kpID0+XG4gICAgdmlzaWJsZUN1cnJlbmNpZXMuaW5jbHVkZXMoY3VycmVuY3kuY29kZSksXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLWZ1bGwgZmxleC1jb2wgZGl2aWRlLXkgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXVpLWJnLXN1YnRsZSBmbGV4IHNpemUtZnVsbCBmbGV4LWNvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXVpLWJnLWJhc2UgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIHAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtMlwiPlxuICAgICAgICAgICAgPERyb3Bkb3duTWVudT5cbiAgICAgICAgICAgICAgPERyb3Bkb3duTWVudS5UcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInNlY29uZGFyeVwiPlxuICAgICAgICAgICAgICAgICAgPEFkanVzdG1lbnRzIC8+XG4gICAgICAgICAgICAgICAgICBWaWV3XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51LlRyaWdnZXI+XG4gICAgICAgICAgICAgIDxEcm9wZG93bk1lbnUuQ29udGVudCBhbGlnbj1cInN0YXJ0XCI+XG4gICAgICAgICAgICAgICAge2N1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudS5DaGVja2JveEl0ZW1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtjdXJyZW5jeS5jb2RlfVxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt2aXNpYmxlQ3VycmVuY2llcy5pbmNsdWRlcyhjdXJyZW5jeS5jb2RlKX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXRWaXNpYmxlQ3VycmVuY2llcygoY3VycmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmN1cnJlbnQsIGN1cnJlbmN5LmNvZGVdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LmZpbHRlcigoY29kZSkgPT4gY29kZSAhPT0gY3VycmVuY3kuY29kZSksXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFByaWNlIHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudS5DaGVja2JveEl0ZW0+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51LkNvbnRlbnQ+XG4gICAgICAgICAgICA8L0Ryb3Bkb3duTWVudT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpemUtZnVsbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgPFRhYmxlXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBib3JkZXJDb2xsYXBzZTogXCJjb2xsYXBzZVwiLFxuICAgICAgICAgICAgICB0YWJsZUxheW91dDogXCJmaXhlZFwiLFxuICAgICAgICAgICAgICB3aWR0aDogXCJtYXgtY29udGVudFwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUYWJsZS5IZWFkZXIgc3R5bGU9e3sgYm9yZGVyVG9wOiBcIm5vbmVcIiB9fT5cbiAgICAgICAgICAgICAgPFRhYmxlLlJvdyBzdHlsZT17eyBoZWlnaHQ6IDQwIH19PlxuICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBcInZhcigtLWJnLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIwIDE2cHhcIixcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwic3RpY2t5XCIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogMSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ291cG9uIFZhbHVlXG4gICAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgIHtzaG93bkN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGxcbiAgICAgICAgICAgICAgICAgICAga2V5PXtjdXJyZW5jeS5jb2RlfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwidmFyKC0tYmctYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjAgMTZweFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRydW5jYXRlXCIgdGl0bGU9e2BQcmljZSAke2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByaWNlIHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW5jeS5pc190YXhfaW5jbHVzaXZlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRheEluY2x1c2l2ZSBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkIHNocmluay0wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRheEV4Y2x1c2l2ZSBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkIHNocmluay0wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICA8VGFibGUuUm93IGNsYXNzTmFtZT1cImJnLXVpLWJnLXN1YnRsZVwiIHN0eWxlPXt7IGhlaWdodDogNDAgfX0+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGxcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwidmFyKC0tYmctc3VidGxlKVwiLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSaWdodDogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMCAxNnB4XCIsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInN0aWNreVwiLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJsb2NrIHRydW5jYXRlXCI+e2NvdXBvblZhbHVlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAge3Nob3duQ3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2N1cnJlbmN5LmNvZGV9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCJ2YXIoLS1iZy1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlUHJpY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5PXtjdXJyZW5jeX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJpY2VzW2N1cnJlbmN5LmNvZGVdIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoY3VycmVuY3kuY29kZSwgdmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICA8L1RhYmxlPlxuXG4gICAgICAgICAgeyFjdXJyZW5jaWVzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNFwiPlxuICAgICAgICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgQWRkIGEgc3VwcG9ydGVkIGN1cnJlbmN5IHRvIHRoZSBzdG9yZSBiZWZvcmUgc2V0dGluZyBwcmljZXMuXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdENvdXBvblZhbHVlKFxuICBjb3Vwb246IFBpY2s8Q291cG9uRm9ybVN0YXRlLCBcImFtb3VudHNcIiB8IFwicGVyY2VudGFnZVwiIHwgXCJ0eXBlXCI+LFxuICBjdXJyZW5jaWVzOiBQaWNrPEN1cnJlbmN5T3B0aW9uLCBcImNvZGVcIiB8IFwiaXNfZGVmYXVsdFwiPltdLFxuKSB7XG4gIGlmIChcbiAgICBjb3Vwb24udHlwZSA9PT0gXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCIgfHxcbiAgICBjb3Vwb24udHlwZSA9PT0gXCJhbW91bnRfb2ZmX29yZGVyXCJcbiAgKSB7XG4gICAgY29uc3QgZGVmYXVsdENvZGUgPVxuICAgICAgY3VycmVuY2llcy5maW5kKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuaXNfZGVmYXVsdCk/LmNvZGUgfHxcbiAgICAgIGN1cnJlbmNpZXNbMF0/LmNvZGVcbiAgICBjb25zdCBwcmltYXJ5ID1cbiAgICAgIGNvdXBvbi5hbW91bnRzLmZpbmQoKHJvdykgPT4gcm93LmN1cnJlbmN5X2NvZGUgPT09IGRlZmF1bHRDb2RlKSB8fFxuICAgICAgY291cG9uLmFtb3VudHNbMF1cbiAgICBjb25zdCBhbW91bnQgPSBudW1iZXJPck51bGwocHJpbWFyeT8uYW1vdW50KVxuICAgIGlmIChhbW91bnQgPT0gbnVsbCkgcmV0dXJuIFwiXHUyMDE0XCJcbiAgICBjb25zdCBhZGRpdGlvbmFsID0gTWF0aC5tYXgoMCwgY291cG9uLmFtb3VudHMubGVuZ3RoIC0gMSlcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBgJHthbW91bnR9JHtwcmltYXJ5LmN1cnJlbmN5X2NvZGUudG9VcHBlckNhc2UoKX1gXG4gICAgcmV0dXJuIGFkZGl0aW9uYWwgPyBgJHtmb3JtYXR0ZWR9ICske2FkZGl0aW9uYWx9YCA6IGZvcm1hdHRlZFxuICB9XG5cbiAgaWYgKFxuICAgIGNvdXBvbi50eXBlID09PSBcInBlcmNlbnRhZ2Vfb2ZmX3Byb2R1Y3RcIiB8fFxuICAgIGNvdXBvbi50eXBlID09PSBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgKSB7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IG51bWJlck9yTnVsbChjb3Vwb24ucGVyY2VudGFnZSlcbiAgICBpZiAocGVyY2VudGFnZSA9PSBudWxsKSByZXR1cm4gXCJcdTIwMTRcIlxuICAgIHJldHVybiBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gICAgICA/IGAke3BlcmNlbnRhZ2V9JSBvZmYgb3JkZXJgXG4gICAgICA6IGAke3BlcmNlbnRhZ2V9JSBvZmYgcHJvZHVjdHNgXG4gIH1cblxuICByZXR1cm4gY291cG9uLnR5cGUgPT09IFwiZnJlZV9zaGlwcGluZ1wiID8gXCJGcmVlIHNoaXBwaW5nXCIgOiBcIkJ1eSBYIEdldCBZXCJcbn1cblxuZnVuY3Rpb24gVGFibGVQcmljZUlucHV0KHtcbiAgY3VycmVuY3ksXG4gIG9uQ2hhbmdlLFxuICB2YWx1ZSxcbn06IHtcbiAgY3VycmVuY3k6IEN1cnJlbmN5T3B0aW9uXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IHN5bWJvbCA9XG4gICAgY3VycmVuY3kuc3ltYm9sX25hdGl2ZSB8fFxuICAgIGN1cnJlbmN5LnN5bWJvbCB8fFxuICAgIGN1cnJlbmN5U3ltYm9sKGN1cnJlbmN5LmNvZGUgfHwgXCJVU0RcIilcblxuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3NOYW1lPVwiYmctdWktYmctYmFzZSBob3ZlcjpiZy11aS1iZy1zdWJ0bGUgZm9jdXMtd2l0aGluOnNoYWRvdy1ib3JkZXJzLWludGVyYWN0aXZlLXdpdGgtYWN0aXZlIHRleHQtdWktZmctYmFzZVwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgc3R5bGU9e3sgZmxleDogXCIwIDAgNDBweFwiLCBwYWRkaW5nTGVmdDogMTYgfX1cbiAgICAgID5cbiAgICAgICAge3N5bWJvbH1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBhcmlhLWxhYmVsPXtgUHJpY2UgJHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9YH1cbiAgICAgICAgaW5wdXRNb2RlPVwiZGVjaW1hbFwiXG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gb25DaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBhcHBlYXJhbmNlOiBcIm5vbmVcIixcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgICBmbGV4OiBcIjEgMSBhdXRvXCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgICAgb3V0bGluZTogXCJub25lXCIsXG4gICAgICAgICAgcGFkZGluZzogXCIwIDE2cHggMCAwXCIsXG4gICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgIH19XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIC8+XG4gICAgPC9sYWJlbD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb3Vwb25Qcm9kdWN0TW9kYWwoe1xuICBhbGxvd1Byb21vdGlvbk1pcnJvcixcbiAgYXBpQmFzZSxcbiAgb25PcGVuQ2hhbmdlLFxuICBvblNhdmVkLFxuICBvcGVuLFxuICBvcHRpb25zLFxuICByb3csXG59OiB7XG4gIGFsbG93UHJvbW90aW9uTWlycm9yOiBib29sZWFuXG4gIGFwaUJhc2U6IEFwaUJhc2VcbiAgb25PcGVuQ2hhbmdlOiAob3BlbjogYm9vbGVhbikgPT4gdm9pZFxuICBvblNhdmVkOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIG9wZW46IGJvb2xlYW5cbiAgb3B0aW9uczogT3B0aW9uc1BheWxvYWRcbiAgcm93OiBDb3Vwb25Qcm9kdWN0Um93IHwgbnVsbFxufSkge1xuICBjb25zdCBbYWN0aXZlU3RlcCwgc2V0QWN0aXZlU3RlcF0gPSB1c2VTdGF0ZTxXaXphcmRTdGVwPihcImRldGFpbHNcIilcbiAgY29uc3QgW3Byb2R1Y3QsIHNldFByb2R1Y3RdID0gdXNlU3RhdGU8UHJvZHVjdEZvcm1TdGF0ZT4oKCkgPT5cbiAgICBlbXB0eVByb2R1Y3Qob3B0aW9ucyksXG4gIClcbiAgY29uc3QgW2NvdXBvbiwgc2V0Q291cG9uXSA9IHVzZVN0YXRlPENvdXBvbkZvcm1TdGF0ZT4oKCkgPT5cbiAgICBlbXB0eUNvdXBvbihvcHRpb25zKSxcbiAgKVxuICBjb25zdCBbY2FtcGFpZ24sIHNldENhbXBhaWduXSA9IHVzZVN0YXRlPENhbXBhaWduRm9ybVN0YXRlPihlbXB0eUNhbXBhaWduKVxuICBjb25zdCBbc2F2aW5nLCBzZXRTYXZpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt1cGxvYWRpbmcsIHNldFVwbG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2Z1cnRoZXN0U3RlcEluZGV4LCBzZXRGdXJ0aGVzdFN0ZXBJbmRleF0gPSB1c2VTdGF0ZSgwKVxuXG4gIGNvbnN0IHZpc2libGVTdGVwcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGFsbG93UHJvbW90aW9uTWlycm9yXG4gICAgICAgID8gYWxsU3RlcHNcbiAgICAgICAgOiBhbGxTdGVwcy5maWx0ZXIoKHN0ZXApID0+IHN0ZXAgIT09IFwiY2FtcGFpZ25cIiksXG4gICAgW2FsbG93UHJvbW90aW9uTWlycm9yXSxcbiAgKVxuICBjb25zdCBjdXJyZW50U3RlcEluZGV4ID0gdmlzaWJsZVN0ZXBzLmluZGV4T2YoYWN0aXZlU3RlcClcbiAgY29uc3QgY3VycmVuY2llcyA9IG9wdGlvbnMuY3VycmVuY2llcyB8fCBbXVxuICBjb25zdCBzdXBwb3J0ZWRDdXJyZW5jeUNvZGVzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBuZXcgU2V0KGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSkpLFxuICAgIFtjdXJyZW5jaWVzXSxcbiAgKVxuICBjb25zdCBpc0Ftb3VudFR5cGUgPVxuICAgIGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfcHJvZHVjdHNcIiB8fCBjb3Vwb24udHlwZSA9PT0gXCJhbW91bnRfb2ZmX29yZGVyXCJcbiAgY29uc3QgaXNQZXJjZW50YWdlVHlwZSA9XG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiIHx8XG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfb3JkZXJcIlxuICBjb25zdCBpc0l0ZW1TY29wZWREaXNjb3VudCA9XG4gICAgY291cG9uLnR5cGUgPT09IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiIHx8XG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiXG4gIGNvbnN0IGVmZmVjdGl2ZUN1cnJlbmNpZXMgPSB1c2VNZW1vKFxuICAgICgpID0+IGVmZmVjdGl2ZUNvdXBvbkN1cnJlbmNpZXMoY291cG9uLnB1cmNoYXNlX2NvbmRpdGlvbnMsIGN1cnJlbmNpZXMpLFxuICAgIFtjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9ucywgY3VycmVuY2llc10sXG4gIClcbiAgY29uc3QgcHJvZHVjdFByaWNlcyA9IGN1cnJlbmNpZXMuZmxhdE1hcCgoY3VycmVuY3kpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb2R1Y3QucHJpY2VfYW1vdW50c1tjdXJyZW5jeS5jb2RlXSB8fCBcIlwiXG4gICAgY29uc3QgYW1vdW50ID0gbm9uTmVnYXRpdmVOdW1iZXJPck51bGwodmFsdWUpXG4gICAgcmV0dXJuIGFtb3VudCA9PSBudWxsID8gW10gOiBbeyBjdXJyZW5jeV9jb2RlOiBjdXJyZW5jeS5jb2RlLCBhbW91bnQgfV1cbiAgfSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuXG4gICAgY29uc3QgZm9ybXMgPSByb3dcbiAgICAgID8gZm9ybXNGcm9tUm93KHJvdywgb3B0aW9ucylcbiAgICAgIDoge1xuICAgICAgICBwcm9kdWN0OiBlbXB0eVByb2R1Y3Qob3B0aW9ucyksXG4gICAgICAgIGNvdXBvbjogZW1wdHlDb3Vwb24ob3B0aW9ucyksXG4gICAgICAgIGNhbXBhaWduOiBlbXB0eUNhbXBhaWduLFxuICAgICAgfVxuICAgIHNldFByb2R1Y3QoZm9ybXMucHJvZHVjdClcbiAgICBzZXRDb3Vwb24oZm9ybXMuY291cG9uKVxuICAgIHNldENhbXBhaWduKGZvcm1zLmNhbXBhaWduKVxuICAgIHNldEFjdGl2ZVN0ZXAoXCJkZXRhaWxzXCIpXG4gICAgc2V0RnVydGhlc3RTdGVwSW5kZXgoMClcbiAgfSwgW29wZW4sIHJvdywgb3B0aW9uc10pXG5cbiAgY29uc3QgdXBkYXRlUHVyY2hhc2VDb25kaXRpb25zID0gKFxuICAgIHB1cmNoYXNlQ29uZGl0aW9uczogUHVyY2hhc2VDb25kaXRpb25Gb3JtW10sXG4gICkgPT4ge1xuICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICBwdXJjaGFzZV9jb25kaXRpb25zOiBwdXJjaGFzZUNvbmRpdGlvbnMsXG4gICAgICBhbW91bnRzOiBpc0Ftb3VudENvdXBvblR5cGUoY3VycmVudC50eXBlKVxuICAgICAgICA/IHJlY29uY2lsZUNvdXBvbkFtb3VudHMoXG4gICAgICAgICAgY3VycmVudC5hbW91bnRzLFxuICAgICAgICAgIGVmZmVjdGl2ZUNvdXBvbkN1cnJlbmNpZXMocHVyY2hhc2VDb25kaXRpb25zLCBjdXJyZW5jaWVzKSxcbiAgICAgICAgKVxuICAgICAgICA6IGN1cnJlbnQuYW1vdW50cyxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZUNvdXBvblR5cGUgPSAodHlwZTogQ291cG9uVHlwZSkgPT4ge1xuICAgIHNldENvdXBvbigoY3VycmVudCkgPT4ge1xuICAgICAgbGV0IHB1cmNoYXNlQ29uZGl0aW9ucyA9IGN1cnJlbnQucHVyY2hhc2VfY29uZGl0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICBpc0Ftb3VudENvdXBvblR5cGUodHlwZSkgJiZcbiAgICAgICAgIXB1cmNoYXNlQ29uZGl0aW9ucy5zb21lKFxuICAgICAgICAgIChjb25kaXRpb24pID0+IGNvbmRpdGlvbi5hdHRyaWJ1dGUgPT09IFwiY3VycmVuY3lfY29kZVwiLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcHVyY2hhc2VDb25kaXRpb25zID0gW1xuICAgICAgICAgIC4uLnB1cmNoYXNlQ29uZGl0aW9ucyxcbiAgICAgICAgICAuLi5kZWZhdWx0UHVyY2hhc2VDb25kaXRpb25zKG9wdGlvbnMpLFxuICAgICAgICBdXG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICB0eXBlLFxuICAgICAgICBwdXJjaGFzZV9jb25kaXRpb25zOiBwdXJjaGFzZUNvbmRpdGlvbnMsXG4gICAgICAgIGFtb3VudHM6IGlzQW1vdW50Q291cG9uVHlwZSh0eXBlKVxuICAgICAgICAgID8gcmVjb25jaWxlQ291cG9uQW1vdW50cyhcbiAgICAgICAgICAgIGN1cnJlbnQuYW1vdW50cyxcbiAgICAgICAgICAgIGVmZmVjdGl2ZUNvdXBvbkN1cnJlbmNpZXMocHVyY2hhc2VDb25kaXRpb25zLCBjdXJyZW5jaWVzKSxcbiAgICAgICAgICApXG4gICAgICAgICAgOiBjdXJyZW50LmFtb3VudHMsXG4gICAgICAgIHByb21vdGlvbl9taXJyb3JfbW9kZTpcbiAgICAgICAgICB0eXBlID09PSBcImJ1eV94X2dldF95XCIgPyBcIm5vbmVcIiA6IGN1cnJlbnQucHJvbW90aW9uX21pcnJvcl9tb2RlLFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdCB1cGxvYWRNZWRpYSA9IGFzeW5jIChmaWxlczogRmlsZVtdKSA9PiB7XG4gICAgaWYgKCFmaWxlcy5sZW5ndGgpIHJldHVyblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlc1wiLCBmaWxlKSlcbiAgICBpZiAoYXBpQmFzZSA9PT0gXCIvYWRtaW5cIiAmJiBwcm9kdWN0LnNlbGxlcl9pZCkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKFwic2VsbGVyX2lkXCIsIHByb2R1Y3Quc2VsbGVyX2lkKVxuICAgIH1cbiAgICBzZXRVcGxvYWRpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgYCR7YmFja2VuZFVybCgpfSR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzL3VwbG9hZHNgLFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFwaUVycm9yTWVzc2FnZShwYXlsb2FkLCByZXNwb25zZS5zdGF0dXNUZXh0KSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheWxvYWQgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICAgIGZpbGVzPzogeyBhc3NldF9pZD86IHN0cmluZzsgdXJsPzogc3RyaW5nIH1bXVxuICAgICAgfVxuICAgICAgY29uc3QgdXBsb2FkZWQgPSAocGF5bG9hZC5maWxlcyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZmlsZSk6IGZpbGUgaXMgeyBhc3NldF9pZDogc3RyaW5nOyB1cmw6IHN0cmluZyB9ID0+XG4gICAgICAgICAgICBCb29sZWFuKGZpbGUuYXNzZXRfaWQgJiYgZmlsZS51cmwpLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKGZpbGUpID0+ICh7IGFzc2V0X2lkOiBmaWxlLmFzc2V0X2lkLCB1cmw6IGZpbGUudXJsIH0pKVxuICAgICAgaWYgKCF1cGxvYWRlZC5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSB1cGxvYWQgZGlkIG5vdCByZXR1cm4gYW4gaW1hZ2UgVVJMXCIpXG4gICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICBtZWRpYTogQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgTWFwKFxuICAgICAgICAgICAgWy4uLmN1cnJlbnQubWVkaWEsIC4uLnVwbG9hZGVkXS5tYXAoKGl0ZW0pID0+IFtpdGVtLnVybCwgaXRlbV0pLFxuICAgICAgICAgICkudmFsdWVzKCksXG4gICAgICAgICksXG4gICAgICB9KSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoXG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJJbWFnZSB1cGxvYWQgZmFpbGVkXCIsXG4gICAgICApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFVwbG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBkZXRhaWxzQ29tcGxldGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXByb2R1Y3QudGl0bGUudHJpbSgpKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoIWN1cnJlbmNpZXMubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFjb25kaXRpb24uYXR0cmlidXRlIHx8XG4gICAgICAgICFjb25kaXRpb24ub3BlcmF0b3IgfHxcbiAgICAgICAgIWNvbmRpdGlvbi52YWx1ZXMubGVuZ3RoIHx8XG4gICAgICAgIChjb25kaXRpb24ub3BlcmF0b3IgPT09IFwiZXFcIiAmJiBjb25kaXRpb24udmFsdWVzLmxlbmd0aCAhPT0gMSkgfHxcbiAgICAgICAgYXR0cmlidXRlcy5oYXMoY29uZGl0aW9uLmF0dHJpYnV0ZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGF0dHJpYnV0ZXMuYWRkKGNvbmRpdGlvbi5hdHRyaWJ1dGUpXG4gICAgfVxuXG4gICAgaWYgKGlzQW1vdW50VHlwZSkge1xuICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhcyhcImN1cnJlbmN5X2NvZGVcIikpIHJldHVybiBmYWxzZVxuICAgICAgaWYgKCFjb3Vwb24uYW1vdW50cy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICAgICAgaWYgKGNvdXBvbi5hbW91bnRzLmxlbmd0aCAhPT0gZWZmZWN0aXZlQ3VycmVuY2llcy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBjb3Vwb24uYW1vdW50cykge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZEN1cnJlbmN5Q29kZXMuaGFzKHJvdy5jdXJyZW5jeV9jb2RlKSkgcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmIChzZWVuLmhhcyhyb3cuY3VycmVuY3lfY29kZSkpIHJldHVybiBmYWxzZVxuICAgICAgICBpZiAobnVtYmVyT3JOdWxsKHJvdy5hbW91bnQpID09IG51bGwpIHJldHVybiBmYWxzZVxuICAgICAgICBzZWVuLmFkZChyb3cuY3VycmVuY3lfY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNQZXJjZW50YWdlVHlwZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBudW1iZXJPck51bGwoY291cG9uLnBlcmNlbnRhZ2UpXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA+IDEwMCkgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCIgJiYgIWNvdXBvbi5zaGFyZWRfY29kZS50cmltKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImR1cmF0aW9uXCIpIHtcbiAgICAgIGNvbnN0IGRheXMgPSBOdW1iZXIoY291cG9uLmV4cGlyYXRpb25fZGF5cylcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihkYXlzKSB8fCBkYXlzIDwgMSkgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIGlmIChjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCIpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9kYXRlKVxuICAgICAgaWYgKCFjb3Vwb24uZXhwaXJhdGlvbl9kYXRlIHx8IE51bWJlci5pc05hTihleHBpcmF0aW9uLmdldFRpbWUoKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgIT09IFwibm9uZVwiICYmIGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkge1xuICAgICAgY29uc3QgY2FwID0gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KVxuICAgICAgaWYgKE51bWJlci5pc05hTihjYXAuZ2V0VGltZSgpKSkgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbWF4SXNzdWFuY2UgPSBOdW1iZXIoY291cG9uLm1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbSlcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihtYXhJc3N1YW5jZSkgJiYgbWF4SXNzdWFuY2UgPiAwXG4gIH0sIFtcbiAgICBjb3Vwb24sXG4gICAgY3VycmVuY2llcy5sZW5ndGgsXG4gICAgZWZmZWN0aXZlQ3VycmVuY2llcy5sZW5ndGgsXG4gICAgaXNBbW91bnRUeXBlLFxuICAgIGlzUGVyY2VudGFnZVR5cGUsXG4gICAgcHJvZHVjdC50aXRsZSxcbiAgICBzdXBwb3J0ZWRDdXJyZW5jeUNvZGVzLFxuICBdKVxuXG4gIGNvbnN0IGNhbXBhaWduQ29tcGxldGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWFsbG93UHJvbW90aW9uTWlycm9yIHx8IGNhbXBhaWduLm1vZGUgPT09IFwibm9uZVwiKSByZXR1cm4gdHJ1ZVxuICAgIGlmIChjYW1wYWlnbi5tb2RlID09PSBcImV4aXN0aW5nXCIpIHJldHVybiBCb29sZWFuKGNhbXBhaWduLmNhbXBhaWduX2lkKVxuICAgIGlmICghY2FtcGFpZ24ubmFtZS50cmltKCkgfHwgIWNhbXBhaWduLmNhbXBhaWduX2lkZW50aWZpZXIudHJpbSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gW2NhbXBhaWduLnN0YXJ0c19hdCwgY2FtcGFpZ24uZW5kc19hdF0uZXZlcnkoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuICFOdW1iZXIuaXNOYU4obmV3IERhdGUodmFsdWUpLmdldFRpbWUoKSlcbiAgICB9KVxuICB9LCBbYWxsb3dQcm9tb3Rpb25NaXJyb3IsIGNhbXBhaWduXSlcblxuICBjb25zdCBwcmljZXNDb21wbGV0ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY3VycmVuY2llcy5sZW5ndGggfHwgIXByb2R1Y3RQcmljZXMubGVuZ3RoKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gY3VycmVuY2llcy5ldmVyeSgoY3VycmVuY3kpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJvZHVjdC5wcmljZV9hbW91bnRzW2N1cnJlbmN5LmNvZGVdIHx8IFwiXCJcbiAgICAgIHJldHVybiAhdmFsdWUudHJpbSgpIHx8IG5vbk5lZ2F0aXZlTnVtYmVyT3JOdWxsKHZhbHVlKSAhPSBudWxsXG4gICAgfSlcbiAgfSwgW2N1cnJlbmNpZXMsIHByb2R1Y3QucHJpY2VfYW1vdW50cywgcHJvZHVjdFByaWNlcy5sZW5ndGhdKVxuXG4gIGNvbnN0IHN0ZXBWYWxpZGl0eSA9IHVzZU1lbW88UmVjb3JkPFdpemFyZFN0ZXAsIGJvb2xlYW4+PihcbiAgICAoKSA9PiAoe1xuICAgICAgZGV0YWlsczogZGV0YWlsc0NvbXBsZXRlLFxuICAgICAgb3JnYW5pemU6IHRydWUsXG4gICAgICBjYW1wYWlnbjogY2FtcGFpZ25Db21wbGV0ZSxcbiAgICAgIHByaWNlczogcHJpY2VzQ29tcGxldGUsXG4gICAgfSksXG4gICAgW2NhbXBhaWduQ29tcGxldGUsIGRldGFpbHNDb21wbGV0ZSwgcHJpY2VzQ29tcGxldGVdLFxuICApXG5cbiAgY29uc3QgYWN0aXZlU3RlcENvbXBsZXRlID0gc3RlcFZhbGlkaXR5W2FjdGl2ZVN0ZXBdXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4gfHwgIWFjdGl2ZVN0ZXBDb21wbGV0ZSkgcmV0dXJuXG4gICAgc2V0RnVydGhlc3RTdGVwSW5kZXgoKGN1cnJlbnQpID0+XG4gICAgICBNYXRoLm1heChcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgTWF0aC5taW4oY3VycmVudFN0ZXBJbmRleCArIDEsIHZpc2libGVTdGVwcy5sZW5ndGggLSAxKSxcbiAgICAgICksXG4gICAgKVxuICB9LCBbYWN0aXZlU3RlcENvbXBsZXRlLCBjdXJyZW50U3RlcEluZGV4LCBvcGVuLCB2aXNpYmxlU3RlcHMubGVuZ3RoXSlcblxuICBjb25zdCBpc1N0ZXBEaXNhYmxlZCA9IChpbmRleDogbnVtYmVyKSA9PlxuICAgIGluZGV4ID4gZnVydGhlc3RTdGVwSW5kZXggfHxcbiAgICB2aXNpYmxlU3RlcHMuc2xpY2UoMCwgaW5kZXgpLnNvbWUoKHByZXZpb3VzKSA9PiAhc3RlcFZhbGlkaXR5W3ByZXZpb3VzXSlcblxuICBjb25zdCB2YWxpZGF0ZSA9ICgpID0+IHtcbiAgICBpZiAoIXByb2R1Y3QudGl0bGUudHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoXCJQcm9kdWN0IHRpdGxlIGlzIHJlcXVpcmVkXCIpXG4gICAgaWYgKCFjdXJyZW5jaWVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIGEgc3VwcG9ydGVkIGN1cnJlbmN5IHRvIHRoZSBzdG9yZSBiZWZvcmUgY29udGludWluZ1wiKVxuICAgIH1cbiAgICBjb25zdCBpbnZhbGlkUHJpY2UgPSBjdXJyZW5jaWVzLnNvbWUoKGN1cnJlbmN5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByb2R1Y3QucHJpY2VfYW1vdW50c1tjdXJyZW5jeS5jb2RlXSB8fCBcIlwiXG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpICYmIG5vbk5lZ2F0aXZlTnVtYmVyT3JOdWxsKHZhbHVlKSA9PSBudWxsXG4gICAgfSlcbiAgICBpZiAoaW52YWxpZFByaWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9kdWN0IHByaWNlcyBtdXN0IGJlIDAgb3IgbW9yZVwiKVxuICAgIH1cbiAgICBpZiAoIXByb2R1Y3RQcmljZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgYXQgbGVhc3Qgb25lIHByb2R1Y3QgcHJpY2VcIilcbiAgICB9XG4gICAgaWYgKGlzQW1vdW50VHlwZSkge1xuICAgICAgaWYgKCFjb3Vwb24uYW1vdW50cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIGF0IGxlYXN0IG9uZSBjb3Vwb24gdmFsdWVcIilcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKVxuICAgICAgY29uc3QgY3VycmVuY3lDb25kaXRpb24gPSBjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9ucy5maW5kKFxuICAgICAgICAoY29uZGl0aW9uKSA9PiBjb25kaXRpb24uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIixcbiAgICAgIClcbiAgICAgIGlmICghY3VycmVuY3lDb25kaXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIGEgQ3VycmVuY3kgQ29kZSBwdXJjaGFzZSBjb25kaXRpb25cIilcbiAgICAgIH1cbiAgICAgIGlmIChjb3Vwb24uYW1vdW50cy5sZW5ndGggIT09IGVmZmVjdGl2ZUN1cnJlbmNpZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNvdXBvbiB2YWx1ZXMgbXVzdCBtYXRjaCBldmVyeSBlZmZlY3RpdmUgY3VycmVuY3kgY29uZGl0aW9uIHZhbHVlXCIsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGNvdXBvbi5hbW91bnRzKSB7XG4gICAgICAgIGlmICghc3VwcG9ydGVkQ3VycmVuY3lDb2Rlcy5oYXMocm93LmN1cnJlbmN5X2NvZGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGFuIGF2YWlsYWJsZSBjb3Vwb24gY3VycmVuY3lcIilcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vlbi5oYXMocm93LmN1cnJlbmN5X2NvZGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291cG9uIHZhbHVlIGN1cnJlbmNpZXMgY2Fubm90IGJlIGR1cGxpY2F0ZWRcIilcbiAgICAgICAgfVxuICAgICAgICBpZiAobnVtYmVyT3JOdWxsKHJvdy5hbW91bnQpID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3Vwb24gdmFsdWVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDBcIilcbiAgICAgICAgfVxuICAgICAgICBzZWVuLmFkZChyb3cuY3VycmVuY3lfY29kZSlcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2VlbkF0dHJpYnV0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zKSB7XG4gICAgICBpZiAoIWNvbmRpdGlvbi5hdHRyaWJ1dGUgfHwgIWNvbmRpdGlvbi5vcGVyYXRvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb21wbGV0ZSBldmVyeSBwdXJjaGFzZSBjb25kaXRpb25cIilcbiAgICAgIH1cbiAgICAgIGlmICghY29uZGl0aW9uLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VsZWN0IGF0IGxlYXN0IG9uZSB2YWx1ZSBmb3IgZXZlcnkgcHVyY2hhc2UgY29uZGl0aW9uXCIpXG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uLm9wZXJhdG9yID09PSBcImVxXCIgJiYgY29uZGl0aW9uLnZhbHVlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXF1YWxzIGNvbmRpdGlvbnMgcmVxdWlyZSBleGFjdGx5IG9uZSB2YWx1ZVwiKVxuICAgICAgfVxuICAgICAgaWYgKHNlZW5BdHRyaWJ1dGVzLmhhcyhjb25kaXRpb24uYXR0cmlidXRlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQdXJjaGFzZSBjb25kaXRpb24gYXR0cmlidXRlcyBjYW5ub3QgYmUgZHVwbGljYXRlZFwiKVxuICAgICAgfVxuICAgICAgc2VlbkF0dHJpYnV0ZXMuYWRkKGNvbmRpdGlvbi5hdHRyaWJ1dGUpXG4gICAgfVxuICAgIGlmIChpc1BlcmNlbnRhZ2VUeXBlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG51bWJlck9yTnVsbChjb3Vwb24ucGVyY2VudGFnZSlcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID4gMTAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdXBvbiB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwIHBlcmNlbnRcIilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCIgJiYgIWNvdXBvbi5zaGFyZWRfY29kZS50cmltKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgc2hhcmVkIGNvdXBvbiBjb2RlIGlzIHJlcXVpcmVkXCIpXG4gICAgfVxuICAgIGlmIChjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCIpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9kYXRlKVxuICAgICAgaWYgKCFjb3Vwb24uZXhwaXJhdGlvbl9kYXRlIHx8IE51bWJlci5pc05hTihleHBpcmF0aW9uLmdldFRpbWUoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSB2YWxpZCBmaXhlZCBleHBpcmF0aW9uIGRhdGUgaXMgcmVxdWlyZWRcIilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgIT09IFwibm9uZVwiICYmIGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkge1xuICAgICAgY29uc3QgY2FwID0gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KVxuICAgICAgaWYgKE51bWJlci5pc05hTihjYXAuZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHZhbGlkIGV4cGlyYXRpb24gY2FwIGRhdGUgaXMgcmVxdWlyZWRcIilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbXBhaWduLm1vZGUgPT09IFwiZXhpc3RpbmdcIiAmJiAhY2FtcGFpZ24uY2FtcGFpZ25faWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBhbiBleGlzdGluZyBjYW1wYWlnblwiKVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBjYW1wYWlnbi5tb2RlID09PSBcIm5ld1wiICYmXG4gICAgICAoIWNhbXBhaWduLm5hbWUudHJpbSgpIHx8ICFjYW1wYWlnbi5jYW1wYWlnbl9pZGVudGlmaWVyLnRyaW0oKSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbXBhaWduIG5hbWUgYW5kIGlkZW50aWZpZXIgYXJlIHJlcXVpcmVkXCIpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2F2ZSA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRTYXZpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGUoKVxuICAgICAgY29uc3QgYmVuZWZpdFR5cGUgPSBiZW5lZml0VHlwZUZyb21Db3Vwb25UeXBlKGNvdXBvbi50eXBlKVxuICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9XG4gICAgICAgIGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfb3JkZXJcIiB8fFxuICAgICAgICBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gICAgICAgICAgPyBcIm9yZGVyXCJcbiAgICAgICAgICA6IFwiaXRlbXNcIlxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgcHJvZHVjdDoge1xuICAgICAgICAgIHRpdGxlOiBwcm9kdWN0LnRpdGxlLnRyaW0oKSxcbiAgICAgICAgICBzdWJ0aXRsZTogcHJvZHVjdC5zdWJ0aXRsZS50cmltKCkgfHwgbnVsbCxcbiAgICAgICAgICBoYW5kbGU6IHByb2R1Y3QuaGFuZGxlLnRyaW0oKSB8fCBudWxsLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0LmRlc2NyaXB0aW9uLnRyaW0oKSB8fCBudWxsLFxuICAgICAgICAgIHN0YXR1czogcHJvZHVjdFN0YXR1c0Zyb21Db3Vwb25TdGF0dXMoY291cG9uLnByb21vdGlvbl9zdGF0dXMpLFxuICAgICAgICAgIHRodW1ibmFpbDogcHJvZHVjdC5tZWRpYVswXT8udXJsIHx8IG51bGwsXG4gICAgICAgICAgdGh1bWJuYWlsX2Fzc2V0X2lkOiBwcm9kdWN0Lm1lZGlhWzBdPy5hc3NldF9pZCB8fCBudWxsLFxuICAgICAgICAgIGltYWdlczogcHJvZHVjdC5tZWRpYS5zbGljZSgxKS5tYXAoKG1lZGlhKSA9PiAoe1xuICAgICAgICAgICAgdXJsOiBtZWRpYS51cmwsXG4gICAgICAgICAgICAuLi4obWVkaWEuYXNzZXRfaWQgPyB7IGFzc2V0X2lkOiBtZWRpYS5hc3NldF9pZCB9IDoge30pLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBkaXNjb3VudGFibGU6IHByb2R1Y3QuZGlzY291bnRhYmxlLFxuICAgICAgICAgIHR5cGVfaWQ6IHByb2R1Y3QudHlwZV9pZCB8fCBudWxsLFxuICAgICAgICAgIGNvbGxlY3Rpb25faWQ6IHByb2R1Y3QuY29sbGVjdGlvbl9pZCB8fCBudWxsLFxuICAgICAgICAgIGNhdGVnb3JpZXM6IHByb2R1Y3QuY2F0ZWdvcnlfaWQgPyBbeyBpZDogcHJvZHVjdC5jYXRlZ29yeV9pZCB9XSA6IFtdLFxuICAgICAgICAgIHRhZ3M6IHByb2R1Y3QudGFnX2lkID8gW3sgaWQ6IHByb2R1Y3QudGFnX2lkIH1dIDogW10sXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRGVmYXVsdFwiLFxuICAgICAgICAgICAgICBza3U6IHByb2R1Y3Quc2t1LnRyaW0oKSB8fCBudWxsLFxuICAgICAgICAgICAgICBtYW5hZ2VfaW52ZW50b3J5OiBmYWxzZSxcbiAgICAgICAgICAgICAgYWxsb3dfYmFja29yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBwcmljZXM6IHByb2R1Y3RQcmljZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvdXBvbjoge1xuICAgICAgICAgIGVuYWJsZWQ6IGNvdXBvbi5lbmFibGVkLFxuICAgICAgICAgIGJlbmVmaXRfdHlwZTogYmVuZWZpdFR5cGUsXG4gICAgICAgICAgcHVyY2hhc2VfY29uZGl0aW9uczogY291cG9uLnB1cmNoYXNlX2NvbmRpdGlvbnMubWFwKChjb25kaXRpb24pID0+ICh7XG4gICAgICAgICAgICBhdHRyaWJ1dGU6IGNvbmRpdGlvbi5hdHRyaWJ1dGUsXG4gICAgICAgICAgICBvcGVyYXRvcjogY29uZGl0aW9uLm9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWVzOiBjb25kaXRpb24udmFsdWVzLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICBhbW91bnRzOiBpc0Ftb3VudFR5cGVcbiAgICAgICAgICAgID8gY291cG9uLmFtb3VudHMubWFwKChyb3cpID0+ICh7XG4gICAgICAgICAgICAgIGFtb3VudDogbnVtYmVyT3JOdWxsKHJvdy5hbW91bnQpLFxuICAgICAgICAgICAgICBjdXJyZW5jeV9jb2RlOiByb3cuY3VycmVuY3lfY29kZSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgICAgICBwZXJjZW50YWdlOiBpc1BlcmNlbnRhZ2VUeXBlID8gbnVtYmVyT3JOdWxsKGNvdXBvbi5wZXJjZW50YWdlKSA6IG51bGwsXG4gICAgICAgICAgY3VycmVuY3lfY29kZTogbnVsbCxcbiAgICAgICAgICBjb2RlX3N0cmF0ZWd5OiBjb3Vwb24uY29kZV9zdHJhdGVneSxcbiAgICAgICAgICBjb2RlX3ByZWZpeDpcbiAgICAgICAgICAgIGNvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInVuaXF1ZV9jb2RlXCJcbiAgICAgICAgICAgICAgPyBjb3Vwb24uY29kZV9wcmVmaXgudHJpbSgpIHx8IFwiQ09VUE9OXCJcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHNoYXJlZF9jb2RlOlxuICAgICAgICAgICAgY291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwic2hhcmVkX2NvZGVcIlxuICAgICAgICAgICAgICA/IGNvdXBvbi5zaGFyZWRfY29kZS50cmltKClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGV4cGlyYXRpb25fcG9saWN5OlxuICAgICAgICAgICAgY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJub25lXCJcbiAgICAgICAgICAgICAgPyB7IHR5cGU6IFwibm9uZVwiIH1cbiAgICAgICAgICAgICAgOiBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcbiAgICAgICAgICAgICAgICAgIGV4cGlyZXNfYXQ6IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2RhdGUpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBjYXBfYnlfY2FtcGFpZ246IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgICAgICAgIGNhcF9hdDogY291cG9uLmV4cGlyYXRpb25fY2FwX2F0XG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbl9kYXlzOiBOdW1iZXIoY291cG9uLmV4cGlyYXRpb25fZGF5cykgfHwgMzAsXG4gICAgICAgICAgICAgICAgICBjYXBfYnlfY2FtcGFpZ246IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgICAgICAgIGNhcF9hdDogY291cG9uLmV4cGlyYXRpb25fY2FwX2F0XG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTpcbiAgICAgICAgICAgIE51bWJlcihjb3Vwb24ubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtKSB8fCAxLFxuICAgICAgICAgIHByb21vdGlvbl90ZW1wbGF0ZTpcbiAgICAgICAgICAgIGJlbmVmaXRUeXBlID09PSBcImZpeGVkX2Ftb3VudFwiIHx8IGJlbmVmaXRUeXBlID09PSBcInBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9tZXRob2Q6IHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldF90eXBlOiB0YXJnZXRUeXBlLFxuICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VHlwZSA9PT0gXCJvcmRlclwiID8gXCJhY3Jvc3NcIiA6IGNvdXBvbi5hbGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHByb21vdGlvbl9zdGF0dXM6IGNvdXBvbi5wcm9tb3Rpb25fc3RhdHVzLFxuICAgICAgICAgIC4uLihhbGxvd1Byb21vdGlvbk1pcnJvclxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHByb21vdGlvbl9taXJyb3JfbW9kZTpcbiAgICAgICAgICAgICAgICBiZW5lZml0VHlwZSA9PT0gXCJidXlfZ2V0XCIgfHxcbiAgICAgICAgICAgICAgICAgIChiZW5lZml0VHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIiAmJiBjb3Vwb24uYW1vdW50cy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgICAgPyBcIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgOiBjb3Vwb24ucHJvbW90aW9uX21pcnJvcl9tb2RlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIGNhbXBhaWduOiBhbGxvd1Byb21vdGlvbk1pcnJvclxuICAgICAgICAgID8gY2FtcGFpZ24ubW9kZSA9PT0gXCJleGlzdGluZ1wiXG4gICAgICAgICAgICA/IHsgbW9kZTogXCJleGlzdGluZ1wiLCBjYW1wYWlnbl9pZDogY2FtcGFpZ24uY2FtcGFpZ25faWQgfVxuICAgICAgICAgICAgOiBjYW1wYWlnbi5tb2RlID09PSBcIm5ld1wiXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG1vZGU6IFwibmV3XCIsXG4gICAgICAgICAgICAgICAgY2FtcGFpZ246IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGNhbXBhaWduLm5hbWUsXG4gICAgICAgICAgICAgICAgICBjYW1wYWlnbl9pZGVudGlmaWVyOiBjYW1wYWlnbi5jYW1wYWlnbl9pZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgc3RhcnRzX2F0OiBjYW1wYWlnbi5zdGFydHNfYXRcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjYW1wYWlnbi5zdGFydHNfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgZW5kc19hdDogY2FtcGFpZ24uZW5kc19hdFxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNhbXBhaWduLmVuZHNfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7IG1vZGU6IFwibm9uZVwiIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VsbGVyX2lkOiBwcm9kdWN0LnNlbGxlcl9pZCB8fCBudWxsLFxuICAgICAgICB2YXJpYW50X292ZXJyaWRlczogW10sXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGFwaUZldGNoKFxuICAgICAgICByb3dcbiAgICAgICAgICA/IGAke2FwaUJhc2V9L2NvdXBvbi1wcm9kdWN0cy8ke3Jvdy5wcm9kdWN0LmlkfWBcbiAgICAgICAgICA6IGAke2FwaUJhc2V9L2NvdXBvbi1wcm9kdWN0c2AsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IHJvdyA/IFwiUEFUQ0hcIiA6IFwiUE9TVFwiLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgdG9hc3Quc3VjY2Vzcyhyb3cgPyBcIkNvdXBvbiBwcm9kdWN0IHVwZGF0ZWRcIiA6IFwiQ291cG9uIHByb2R1Y3QgY3JlYXRlZFwiKVxuICAgICAgb25PcGVuQ2hhbmdlKGZhbHNlKVxuICAgICAgYXdhaXQgb25TYXZlZCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRvYXN0LmVycm9yKFxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgOiBcIkZhaWxlZCB0byBzYXZlIGNvdXBvbiBwcm9kdWN0XCIsXG4gICAgICApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGVwU3RhdHVzID0gKHN0ZXA6IFdpemFyZFN0ZXApID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHZpc2libGVTdGVwcy5pbmRleE9mKHN0ZXApXG4gICAgaWYgKGluZGV4IDwgY3VycmVudFN0ZXBJbmRleCAmJiBzdGVwVmFsaWRpdHlbc3RlcF0pIHtcbiAgICAgIHJldHVybiBcImNvbXBsZXRlZFwiIGFzIGNvbnN0XG4gICAgfVxuICAgIGlmIChpbmRleCA9PT0gY3VycmVudFN0ZXBJbmRleCkgcmV0dXJuIFwiaW4tcHJvZ3Jlc3NcIiBhcyBjb25zdFxuICAgIHJldHVybiBcIm5vdC1zdGFydGVkXCIgYXMgY29uc3RcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEZvY3VzTW9kYWwgb3Blbj17b3Blbn0gb25PcGVuQ2hhbmdlPXtvbk9wZW5DaGFuZ2V9PlxuICAgICAgPEZvY3VzTW9kYWwuQ29udGVudCBzdHlsZT17bW9kYWxDb250ZW50U3R5bGV9PlxuICAgICAgICA8Rm9jdXNNb2RhbC5UaXRsZSBzdHlsZT17dmlzdWFsbHlIaWRkZW5TdHlsZX0+XG4gICAgICAgICAge3JvdyA/IFwiRWRpdCBDb3Vwb24gUHJvZHVjdFwiIDogXCJDcmVhdGUgQ291cG9uIFByb2R1Y3RcIn1cbiAgICAgICAgPC9Gb2N1c01vZGFsLlRpdGxlPlxuICAgICAgICA8UHJvZ3Jlc3NUYWJzXG4gICAgICAgICAgdmFsdWU9e2FjdGl2ZVN0ZXB9XG4gICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gdmFsdWUgYXMgV2l6YXJkU3RlcFxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB2aXNpYmxlU3RlcHMuaW5kZXhPZihzdGVwKVxuICAgICAgICAgICAgaWYgKCFpc1N0ZXBEaXNhYmxlZChpbmRleCkpIHNldEFjdGl2ZVN0ZXAoc3RlcClcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN0eWxlPXttb2RhbFdpemFyZFN0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAgPEZvY3VzTW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCItbXktMiB3LWZ1bGwgYm9yZGVyLWxcIj5cbiAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5MaXN0IGNsYXNzTmFtZT1cImp1c3RpZnktc3RhcnQtc3RhcnQgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAge3Zpc2libGVTdGVwcy5tYXAoKHN0ZXAsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLlRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtzdGVwfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c3RlcH1cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzPXtzdGVwU3RhdHVzKHN0ZXApfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdGVwRGlzYWJsZWQoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYXgtdy1bMjAwcHhdIHRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3N0ZXBbMF0udG9VcHBlckNhc2UoKSArIHN0ZXAuc2xpY2UoMSl9XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5MaXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9Gb2N1c01vZGFsLkhlYWRlcj5cblxuICAgICAgICAgIDxGb2N1c01vZGFsLkJvZHkgY2xhc3NOYW1lPVwib3ZlcmZsb3ctaGlkZGVuIHAtMFwiIHN0eWxlPXttb2RhbEJvZHlTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICBhY3RpdmVTdGVwID09PSBcInByaWNlc1wiXG4gICAgICAgICAgICAgICAgICA/IHsgaGVpZ2h0OiBcIjEwMCVcIiwgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsIHdpZHRoOiBcIjEwMCVcIiB9XG4gICAgICAgICAgICAgICAgICA6IG1vZGFsU2Nyb2xsU3R5bGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgYWN0aXZlU3RlcCA9PT0gXCJwcmljZXNcIlxuICAgICAgICAgICAgICAgICAgICA/IHsgaGVpZ2h0OiBcIjEwMCVcIiwgd2lkdGg6IFwiMTAwJVwiIH1cbiAgICAgICAgICAgICAgICAgICAgOiBtb2RhbEZvcm1TdHlsZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthY3RpdmVTdGVwID09PSBcImRldGFpbHNcIiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJkZXRhaWxzXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGluZyBsZXZlbD1cImgxXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3JvdyA/IFwiRWRpdCBDb3Vwb24gUHJvZHVjdFwiIDogXCJDcmVhdGUgQ291cG9uIFByb2R1Y3RcIn1cbiAgICAgICAgICAgICAgICAgICAgPC9IZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIkdlbmVyYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0aHJlZUNvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUaXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdC50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldpbnRlciBqYWNrZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlN1YnRpdGxlXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnN1YnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV2FybSBhbmQgY296eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiSGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cIlRoZSBVUkwtZnJpZW5kbHkgaWRlbnRpZmllciBmb3IgdGhpcyBwcm9kdWN0LiBJZiBsZWZ0IGVtcHR5LCBNZWR1c2EgZ2VuZXJhdGVzIGl0IGZyb20gdGhlIHRpdGxlLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxIYW5kbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LmhhbmRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGhhbmRsZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGhhbmRsZSB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkRlc2NyaXB0aW9uXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQSB3YXJtIGFuZCBjb3p5IGphY2tldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiTWVkaWFcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNZWRpYVVwbG9hZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VwbG9hZGluZz17dXBsb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYT17cHJvZHVjdC5tZWRpYX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25VcGxvYWQ9eyhmaWxlcykgPT4gdm9pZCB1cGxvYWRNZWRpYShmaWxlcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsobWVkaWEpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYTogY3VycmVudC5tZWRpYS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZWRpYS5hc3NldF9pZCAmJiBpdGVtLmFzc2V0X2lkICE9PSBtZWRpYS5hc3NldF9pZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW1lZGlhLmFzc2V0X2lkICYmIGl0ZW0udXJsICE9PSBtZWRpYS51cmwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNLVVwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnNrdX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDT1VQT04tMDAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPERpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPFB1cmNoYXNlQ29uZGl0aW9uc0ZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZml4ZWRBbW91bnQ9e2lzQW1vdW50VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHVyY2hhc2VDb25kaXRpb25zfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAge2FjdGl2ZVN0ZXAgPT09IFwib3JnYW5pemVcIiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJvcmdhbml6ZVwiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9XCJPcmdhbml6ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLXgtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj5EaXNjb3VudGFibGU8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3cgcHJvbW90aW9ucyB0byBkaXNjb3VudCB0aGlzIHByb2R1Y3QncyBzYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17cHJvZHVjdC5kaXNjb3VudGFibGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoZGlzY291bnRhYmxlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzY291bnRhYmxlOiBCb29sZWFuKGRpc2NvdW50YWJsZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU2VsbGVyXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3Quc2VsbGVyX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5zZWxsZXJzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhzZWxsZXJfaWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIHNlbGxlcl9pZCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlR5cGVcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnR5cGVfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X3R5cGVzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodHlwZV9pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIHR5cGVfaWQgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvbGxlY3Rpb25cIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LmNvbGxlY3Rpb25faWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X2NvbGxlY3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY29sbGVjdGlvbl9pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ2F0ZWdvcnlcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LmNhdGVnb3J5X2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnMucHJvZHVjdF9jYXRlZ29yaWVzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY2F0ZWdvcnlfaWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBjYXRlZ29yeV9pZCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiVGFnXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdC50YWdfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X3RhZ3MgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh0YWdfaWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCB0YWdfaWQgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAge2FjdGl2ZVN0ZXAgPT09IFwiZGV0YWlsc1wiICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3RhY2tTdHlsZSwgbWFyZ2luVG9wOiAyNCB9fT5cbiAgICAgICAgICAgICAgICAgICAgPERpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvdXBvblwiXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJDb25maWd1cmUgdGhlIGNvdXBvbiBpc3N1ZWQgd2hlbiB0aGlzIHByb2R1Y3QgaXMgcHVyY2hhc2VkLlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtwYW5lbFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC14LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+Q291cG9uIGlzc3VhbmNlPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzc3VlIGNvdXBvbnMgd2hlbiBjdXN0b21lcnMgcHVyY2hhc2UgdGhpcyBwcm9kdWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjb3Vwb24uZW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhlbmFibGVkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIlR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24udHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHR5cGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ291cG9uVHlwZSh0eXBlIGFzIENvdXBvblR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVDaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXAuQ2hvaWNlQm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Nob2ljZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjaG9pY2UudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17Y2hvaWNlLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2Nob2ljZS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIlN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5wcm9tb3Rpb25fc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsocHJvbW90aW9uX3N0YXR1cykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX3N0YXR1czpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX3N0YXR1cyBhcyBQcm9tb3Rpb25TdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXR1c0Nob2ljZXMubWFwKChjaG9pY2UpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cC5DaG9pY2VCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17Y2hvaWNlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Nob2ljZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtjaG9pY2UubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17Y2hvaWNlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYWRpb0dyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIHsoaXNBbW91bnRUeXBlIHx8IGlzUGVyY2VudGFnZVR5cGUpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPXtpc0Ftb3VudFR5cGUgPyBcIkNvdXBvbiBWYWx1ZXNcIiA6IFwiVmFsdWVcIn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtpc0Ftb3VudFR5cGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3Vwb24uYW1vdW50cy5tYXAoKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uY29kZSA9PT0gcm93LmN1cnJlbmN5X2NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cm93LmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNoYWRvdy1lbGV2YXRpb24tY2FyZC1yZXN0IGJnLXVpLWJnLWNvbXBvbmVudCByb3VuZGVkLW1kIHB4LTQgcHktM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cm93LmN1cnJlbmN5X2NvZGUudG9VcHBlckNhc2UoKX0gQ291cG9uIFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVuY3k/Lm5hbWUgfHwgcm93LmN1cnJlbmN5X2NvZGUudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDdXJyZW5jeUFtb3VudEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlPXtyb3cuY3VycmVuY3lfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtyb3cuYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhhbW91bnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudHM6IGN1cnJlbnQuYW1vdW50cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID09PSByb3dJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyAuLi5pdGVtLCBhbW91bnQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshY291cG9uLmFtb3VudHMubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBhdCBsZWFzdCBvbmUgZWZmZWN0aXZlIEN1cnJlbmN5IENvZGUgY29uZGl0aW9uIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvdXBvbiBWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBlcmNlbnRhZ2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLnBlcmNlbnRhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsocGVyY2VudGFnZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNJdGVtU2NvcGVkRGlzY291bnQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIkFsbG9jYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5hbGxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KGFsbG9jYXRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb246IGFsbG9jYXRpb24gYXMgQ291cG9uQWxsb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwLkNob2ljZUJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImVhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkVhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIkFwcGxpZXMgdmFsdWUgb24gZWFjaCBpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cC5DaG9pY2VCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJvbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJPbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJMaW1pdCBkaXNjb3VudCB0byBtYXggcXVhbnRpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1JhZGlvR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJFeHBpcmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwiQ29udHJvbCB3aGVuIGlzc3VlZCBjb3Vwb25zIGV4cGlyZS5cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gcG9saWN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5leHBpcmF0aW9uX3R5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoZXhwaXJhdGlvbl90eXBlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3R5cGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3R5cGUgYXMgRXhwaXJhdGlvblBvbGljeVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibm9uZVwiPk5vbmU8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJkdXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cmF0aW9uIGFmdGVyIGlzc3VlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImZpeGVkXCI+Rml4ZWQgZGF0ZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJkdXJhdGlvblwiID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gZGF5c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uZXhwaXJhdGlvbl9kYXlzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2RheXM6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJmaXhlZFwiID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyZXMgYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmV4cGlyYXRpb25fZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9kYXRlOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3Vwb24uZXhwaXJhdGlvbl90eXBlICE9PSBcIm5vbmVcIiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNhcCBleHBpcmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLXgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4ucGFuZWxTdHlsZSwgcGFkZGluZzogXCI4cHggMTJweFwiIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW1wYWlnbiBlbmQgb3IgY2FwIGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y291cG9uLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWdufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjogQm9vbGVhbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gY2FwIGRhdGVcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmV4cGlyYXRpb25fY2FwX2F0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fY2FwX2F0OiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIkNob29zZSB3aGV0aGVyIGV2ZXJ5IGlzc3VlZCBjb3Vwb24gaXMgdW5pcXVlIG9yIHNoYXJlcyBvbmUgY29kZS5cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvZGUgc3RyYXRlZ3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmNvZGVfc3RyYXRlZ3l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoY29kZV9zdHJhdGVneSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9zdHJhdGVneTogY29kZV9zdHJhdGVneSBhcyBDb2RlU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwidW5pcXVlX2NvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlxdWUgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJzaGFyZWRfY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZCBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwidW5pcXVlX2NvZGVcIiA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDb2RlIHByZWZpeFwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uY29kZV9wcmVmaXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ09VUE9OXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9wcmVmaXg6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNoYXJlZCBjb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5zaGFyZWRfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTVU1NRVIxNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9jb2RlOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiSXNzdWFuY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIk1heCBpc3N1YW5jZSBwZXIgaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLm1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbW91bnRUeXBlICYmIGNvdXBvbi5hbW91bnRzLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlByb21vdGlvbiBtaXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24ucHJvbW90aW9uX21pcnJvcl9tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb24udHlwZSA9PT0gXCJidXlfeF9nZXRfeVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhwcm9tb3Rpb25fbWlycm9yX21vZGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21vdGlvbl9taXJyb3JfbW9kZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGUgYXMgTWlycm9yTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm5vbmVcIj5Ob25lPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm1hbnVhbFwiPk1hbnVhbDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJhdXRvXCI+QXV0bzwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiYgYWN0aXZlU3RlcCA9PT0gXCJjYW1wYWlnblwiICYmIChcbiAgICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImNhbXBhaWduXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIkNhbXBhaWduXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNhbXBhaWduIG1vZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbi5tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhtb2RlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUgYXMgQ2FtcGFpZ25Nb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibm9uZVwiPk5vIGNhbXBhaWduPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImV4aXN0aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aXN0aW5nIGNhbXBhaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibmV3XCI+TmV3IGNhbXBhaWduPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FtcGFpZ24ubW9kZSA9PT0gXCJleGlzdGluZ1wiICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhpc3RpbmcgY2FtcGFpZ25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ24uY2FtcGFpZ25faWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLmNhbXBhaWducyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY2FtcGFpZ25faWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAge2NhbXBhaWduLm1vZGUgPT09IFwibmV3XCIgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ24ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJJZGVudGlmaWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduLmNhbXBhaWduX2lkZW50aWZpZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25faWRlbnRpZmllcjogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU3RhcnRzIGF0XCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduLnN0YXJ0c19hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHNfYXQ6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkVuZHMgYXRcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ24uZW5kc19hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRzX2F0OiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7YWN0aXZlU3RlcCA9PT0gXCJwcmljZXNcIiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJwcmljZXNcIiBzdHlsZT17eyBoZWlnaHQ6IFwiMTAwJVwiIH19PlxuICAgICAgICAgICAgICAgICAgICA8UHJvZHVjdFByaWNlc1RhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVuY2llcz17Y3VycmVuY2llc31cbiAgICAgICAgICAgICAgICAgICAgICBjb3Vwb25WYWx1ZT17Zm9ybWF0Q291cG9uVmFsdWUoY291cG9uLCBjdXJyZW5jaWVzKX1cbiAgICAgICAgICAgICAgICAgICAgICBwcmljZXM9e3Byb2R1Y3QucHJpY2VfYW1vdW50c31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGN1cnJlbmN5Q29kZSwgdmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZV9hbW91bnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudC5wcmljZV9hbW91bnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0ZvY3VzTW9kYWwuQm9keT5cblxuICAgICAgICAgIDxGb2N1c01vZGFsLkZvb3RlciBzdHlsZT17eyBmbGV4U2hyaW5rOiAwIH19PlxuICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gb25PcGVuQ2hhbmdlKGZhbHNlKX0+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICB7Y3VycmVudFN0ZXBJbmRleCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVN0ZXAodmlzaWJsZVN0ZXBzW2N1cnJlbnRTdGVwSW5kZXggLSAxXSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBCYWNrXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtjdXJyZW50U3RlcEluZGV4IDwgdmlzaWJsZVN0ZXBzLmxlbmd0aCAtIDEgPyAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWFjdGl2ZVN0ZXBDb21wbGV0ZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBjdXJyZW50U3RlcEluZGV4ICsgMVxuICAgICAgICAgICAgICAgICAgc2V0RnVydGhlc3RTdGVwSW5kZXgoKGN1cnJlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGN1cnJlbnQsIG5leHRJbmRleCksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBzZXRBY3RpdmVTdGVwKHZpc2libGVTdGVwc1tuZXh0SW5kZXhdKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDb250aW51ZVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWFjdGl2ZVN0ZXBDb21wbGV0ZX1cbiAgICAgICAgICAgICAgICBpc0xvYWRpbmc9e3NhdmluZ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIHNhdmUoKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRm9jdXNNb2RhbC5Gb290ZXI+XG4gICAgICAgIDwvUHJvZ3Jlc3NUYWJzPlxuICAgICAgPC9Gb2N1c01vZGFsLkNvbnRlbnQ+XG4gICAgPC9Gb2N1c01vZGFsPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb3Vwb25Qcm9kdWN0c1BhZ2Uoe1xuICBhbGxvd1Byb21vdGlvbk1pcnJvciA9IGZhbHNlLFxuICBhcGlCYXNlLFxuICB0aXRsZSxcbn06IHtcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3I/OiBib29sZWFuXG4gIGFwaUJhc2U6IEFwaUJhc2VcbiAgdGl0bGU6IHN0cmluZ1xufSkge1xuICBjb25zdCBbcHJvZHVjdHMsIHNldFByb2R1Y3RzXSA9IHVzZVN0YXRlPENvdXBvblByb2R1Y3RSb3dbXT4oW10pXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPE9wdGlvbnNQYXlsb2FkPih7fSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2xvYWRFcnJvciwgc2V0TG9hZEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFttb2RhbE9wZW4sIHNldE1vZGFsT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2VkaXRpbmdSb3csIHNldEVkaXRpbmdSb3ddID0gdXNlU3RhdGU8Q291cG9uUHJvZHVjdFJvdyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHByb21wdCA9IHVzZVByb21wdCgpXG4gIGNvbnN0IGNvdXBvbkJhc2UgPSBgJHthcGlCYXNlfS9jb3Vwb24tcHJvZHVjdHNgXG5cbiAgY29uc3QgbG9hZCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgc2V0TG9hZEVycm9yKG51bGwpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtwcm9kdWN0c1BheWxvYWQsIG9wdGlvbnNQYXlsb2FkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgYXBpRmV0Y2g8eyBjb3Vwb25fcHJvZHVjdHM6IENvdXBvblByb2R1Y3RSb3dbXSB9Pihjb3Vwb25CYXNlKSxcbiAgICAgICAgYXBpRmV0Y2g8T3B0aW9uc1BheWxvYWQ+KGAke2NvdXBvbkJhc2V9L29wdGlvbnNgKSxcbiAgICAgIF0pXG4gICAgICBzZXRQcm9kdWN0cyhwcm9kdWN0c1BheWxvYWQuY291cG9uX3Byb2R1Y3RzIHx8IFtdKVxuICAgICAgc2V0T3B0aW9ucyhvcHRpb25zUGF5bG9hZCB8fCB7fSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICA6IFwiRmFpbGVkIHRvIGxvYWQgY291cG9uIHByb2R1Y3RzXCJcbiAgICAgIHNldExvYWRFcnJvcihtZXNzYWdlKVxuICAgICAgdG9hc3QuZXJyb3IobWVzc2FnZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH0sIFtjb3Vwb25CYXNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHZvaWQgbG9hZCgpXG4gIH0sIFtsb2FkXSlcblxuICBjb25zdCByZW1vdmUgPSBhc3luYyAocm93OiBDb3Vwb25Qcm9kdWN0Um93KSA9PiB7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgcHJvbXB0KHtcbiAgICAgIHRpdGxlOiBcIlJlbW92ZSBjb3Vwb24gcHJvZHVjdD9cIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyByZW1vdmVzIGNvdXBvbiBpc3N1YW5jZSBmcm9tICR7cm93LnByb2R1Y3QudGl0bGUgfHwgcm93LnByb2R1Y3QuaWRcbiAgICAgICAgfS4gVGhlIHVuZGVybHlpbmcgTWVkdXNhIHByb2R1Y3Qgd2lsbCByZW1haW4gYXZhaWxhYmxlLmAsXG4gICAgICBjb25maXJtVGV4dDogXCJSZW1vdmUgcHJvZHVjdFwiLFxuICAgICAgY2FuY2VsVGV4dDogXCJDYW5jZWxcIixcbiAgICAgIHZhcmlhbnQ6IFwiZGFuZ2VyXCIsXG4gICAgfSlcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBpRmV0Y2goYCR7Y291cG9uQmFzZX0vJHtyb3cucHJvZHVjdC5pZH1gLCB7IG1ldGhvZDogXCJERUxFVEVcIiB9KVxuICAgICAgdG9hc3Quc3VjY2VzcyhcIkNvdXBvbiBjb25maWd1cmF0aW9uIHJlbW92ZWRcIilcbiAgICAgIGF3YWl0IGxvYWQoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiRGVsZXRlIGZhaWxlZFwiKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1pcnJvciA9IGFzeW5jIChyb3c6IENvdXBvblByb2R1Y3RSb3cpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBpRmV0Y2goXG4gICAgICAgIGAvYWRtaW4vY291cG9uLXByb2R1Y3RzLyR7cm93LnByb2R1Y3QuaWR9L21pcnJvci1wcm9tb3Rpb25gLFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7fSksXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICB0b2FzdC5zdWNjZXNzKFwiUHJvbW90aW9uIG1pcnJvciBjcmVhdGVkXCIpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRvYXN0LmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJNaXJyb3IgZmFpbGVkXCIpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS00XCI+XG4gICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDFcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIj5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIGxvYWQoKX0+XG4gICAgICAgICAgICA8QXJyb3dQYXRoIC8+IFJlZnJlc2hcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRFZGl0aW5nUm93KG51bGwpXG4gICAgICAgICAgICAgIHNldE1vZGFsT3Blbih0cnVlKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8UGx1cyAvPiBDcmVhdGVcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPVwiTG9hZGluZyBjb3Vwb24gcHJvZHVjdHNcIiAvPlxuICAgICAgKSA6IGxvYWRFcnJvciA/IChcbiAgICAgICAgPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9e2xvYWRFcnJvcn0gLz5cbiAgICAgICkgOiBwcm9kdWN0cy5sZW5ndGggPyAoXG4gICAgICAgIDxUYWJsZT5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+UHJvZHVjdDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U3RhdHVzPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5UeXBlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Db2RlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5DYW1wYWlnbjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+SXNzdWVkPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbCAvPlxuICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgICAgPFRhYmxlLkJvZHlcbiAgICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckJvdHRvbTogJ25vbmUnIH19PlxuICAgICAgICAgICAge3Byb2R1Y3RzLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHJvdy5jb3Vwb25fcHJvZHVjdF9jb25maWdcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17cm93LmlkfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQm90dG9tOiAnbm9uZScsIGJhY2tncm91bmQ6ICdub25lJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cm93LnByb2R1Y3QudGl0bGUgfHwgcm93LnByb2R1Y3QuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cucHJvZHVjdC5oYW5kbGUgfHwgcm93LnByb2R1Y3QuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8U3RhdHVzQmFkZ2VcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17Y291cG9uU3RhdHVzQ29sb3IoY29uZmlnLnByb21vdGlvbl9zdGF0dXMpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5wcm9tb3Rpb25fc3RhdHVzIHx8IFwiZHJhZnRcIn1cbiAgICAgICAgICAgICAgICAgICAgPC9TdGF0dXNCYWRnZT5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntjb3Vwb25UeXBlTGFiZWwoY29uZmlnKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAge2NvbmZpZy5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbmZpZy5zaGFyZWRfY29kZSB8fCBcIlNoYXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBgJHtjb25maWcuY29kZV9wcmVmaXggfHwgXCJDT1VQT05cIn0tKmB9XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Y2FtcGFpZ25MYWJlbChjb25maWcpfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntyb3cuZW50aXRsZW1lbnRzX2NvdW50IHx8IDB9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZCBnYXAteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjb25maWcuYW1vdW50cz8ubGVuZ3RoIHx8IDApID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgbWlycm9yKHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdGluZ1Jvdyhyb3cpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1vZGFsT3Blbih0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGVuY2lsU3F1YXJlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCByZW1vdmUocm93KX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VHJhc2ggLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgPC9UYWJsZT5cbiAgICAgICkgOiAoXG4gICAgICAgIDxDb3Vwb25FbXB0eVN0YXRlXG4gICAgICAgICAgdGl0bGU9XCJObyBjb3Vwb24gcHJvZHVjdHMgZm91bmRcIlxuICAgICAgICAgIGRlc2NyaXB0aW9uPVwiQ3JlYXRlIGEgbmV3IGNvdXBvbiBwcm9kdWN0IHRvIGdldCBzdGFydGVkLlwiXG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICA8Q291cG9uUHJvZHVjdE1vZGFsXG4gICAgICAgIG9wZW49e21vZGFsT3Blbn1cbiAgICAgICAgcm93PXtlZGl0aW5nUm93fVxuICAgICAgICBhcGlCYXNlPXthcGlCYXNlfVxuICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICBhbGxvd1Byb21vdGlvbk1pcnJvcj17YWxsb3dQcm9tb3Rpb25NaXJyb3J9XG4gICAgICAgIG9uT3BlbkNoYW5nZT17c2V0TW9kYWxPcGVufVxuICAgICAgICBvblNhdmVkPXtsb2FkfVxuICAgICAgLz5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuIiwgImltcG9ydCB7IFRleHQgfSBmcm9tIFwiQG1lZHVzYWpzL3VpXCJcblxuZXhwb3J0IGZ1bmN0aW9uIENvdXBvbkVtcHR5U3RhdGUoe1xuICBkZXNjcmlwdGlvbixcbiAgdGl0bGUsXG59OiB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGZsZXgtMSBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtaW4taC1bMjUwcHhdIHctZnVsbCBmbGV4LTEgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTYgcHktNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggc2l6ZS1mdWxsIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj57dGl0bGV9PC9UZXh0PlxuICAgICAgICAgIHtkZXNjcmlwdGlvbiA/IDxUZXh0PntkZXNjcmlwdGlvbn08L1RleHQ+IDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwgImltcG9ydCB7IENvdXBvbkRldGFpbFBhZ2VWaWV3IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2Rhc2hib2FyZC9jb3Vwb25zL2NvdXBvbi1tYW5hZ2VyXCJcblxuY29uc3QgQ291cG9uRGV0YWlsUGFnZSA9ICgpID0+IHtcbiAgcmV0dXJuIDxDb3Vwb25EZXRhaWxQYWdlVmlldyBhcGlCYXNlPVwiL2FkbWluXCIgLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ291cG9uRGV0YWlsUGFnZVxuIiwgImltcG9ydCB7IGRlZmluZVJvdXRlQ29uZmlnIH0gZnJvbSBcIkBtZWR1c2Fqcy9hZG1pbi1zZGtcIlxuaW1wb3J0IHsgUmVjZWlwdFBlcmNlbnQgfSBmcm9tIFwiQG1lZHVzYWpzL2ljb25zXCJcbmltcG9ydCB7IENvdXBvblByb2R1Y3RzUGFnZVZpZXcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGFzaGJvYXJkL2NvdXBvbnMvY291cG9uLW1hbmFnZXJcIlxuXG5leHBvcnQgY29uc3QgY29uZmlnID0gZGVmaW5lUm91dGVDb25maWcoe1xuICBsYWJlbDogXCJDb3Vwb24gUHJvZHVjdHNcIixcbiAgaWNvbjogUmVjZWlwdFBlcmNlbnQsXG59KVxuXG5jb25zdCBDb3Vwb25Qcm9kdWN0c1BhZ2UgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENvdXBvblByb2R1Y3RzUGFnZVZpZXdcbiAgICAgIGFwaUJhc2U9XCIvYWRtaW5cIlxuICAgICAgdGl0bGU9XCJDb3Vwb24gUHJvZHVjdHNcIlxuICAgICAgYWxsb3dQcm9tb3Rpb25NaXJyb3JcbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IENvdXBvblByb2R1Y3RzUGFnZVxuIiwgImltcG9ydCBpMThuUmVzb3VyY2VzIGZyb20gXCIuL2kxOG5cIlxuaW1wb3J0IENvdXBvbnNQYWdlLCB7IGNvbmZpZyBhcyBjb3Vwb25zQ29uZmlnIH0gZnJvbSBcIi4vcm91dGVzL2NvdXBvbnMvcGFnZVwiXG5pbXBvcnQgQ291cG9uRGV0YWlsUGFnZSBmcm9tIFwiLi9yb3V0ZXMvY291cG9ucy9baWRdL3BhZ2VcIlxuaW1wb3J0IENvdXBvblByb2R1Y3RzUGFnZSwge1xuICBjb25maWcgYXMgY291cG9uUHJvZHVjdHNDb25maWcsXG59IGZyb20gXCIuL3JvdXRlcy9jb3Vwb25zL3Byb2R1Y3RzL3BhZ2VcIlxuXG5jb25zdCByb3V0ZU1vZHVsZSA9IHtcbiAgcm91dGVzOiBbXG4gICAge1xuICAgICAgQ29tcG9uZW50OiBDb3Vwb25zUGFnZSxcbiAgICAgIHBhdGg6IFwiL2NvdXBvbnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIENvbXBvbmVudDogQ291cG9uUHJvZHVjdHNQYWdlLFxuICAgICAgcGF0aDogXCIvY291cG9ucy9wcm9kdWN0c1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgQ29tcG9uZW50OiBDb3Vwb25EZXRhaWxQYWdlLFxuICAgICAgcGF0aDogXCIvY291cG9ucy86aWRcIixcbiAgICB9LFxuICBdLFxufVxuXG5jb25zdCBtZW51SXRlbU1vZHVsZSA9IHtcbiAgbWVudUl0ZW1zOiBbXG4gICAge1xuICAgICAgbGFiZWw6IGNvdXBvbnNDb25maWcubGFiZWwsXG4gICAgICBpY29uOiBjb3Vwb25zQ29uZmlnLmljb24sXG4gICAgICBwYXRoOiBcIi9jb3Vwb25zXCIsXG4gICAgICByYW5rOiBjb3Vwb25zQ29uZmlnLnJhbmssXG4gICAgICBuZXN0ZWQ6IGNvdXBvbnNDb25maWcubmVzdGVkLFxuICAgICAgdHJhbnNsYXRpb25OczogY291cG9uc0NvbmZpZy50cmFuc2xhdGlvbk5zLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IGNvdXBvblByb2R1Y3RzQ29uZmlnLmxhYmVsLFxuICAgICAgaWNvbjogY291cG9uUHJvZHVjdHNDb25maWcuaWNvbixcbiAgICAgIHBhdGg6IFwiL2NvdXBvbnMvcHJvZHVjdHNcIixcbiAgICAgIHJhbms6IDExLFxuICAgICAgbmVzdGVkOiBcIi9jb3Vwb25zXCIsXG4gICAgICB0cmFuc2xhdGlvbk5zOiBjb3Vwb25Qcm9kdWN0c0NvbmZpZy50cmFuc2xhdGlvbk5zLFxuICAgIH0sXG4gIF0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgd2lkZ2V0TW9kdWxlOiB7XG4gICAgd2lkZ2V0czogW10sXG4gIH0sXG4gIHJvdXRlTW9kdWxlLFxuICBtZW51SXRlbU1vZHVsZSxcbiAgZm9ybU1vZHVsZToge1xuICAgIGN1c3RvbUZpZWxkczoge30sXG4gIH0sXG4gIGRpc3BsYXlNb2R1bGU6IHtcbiAgICBkaXNwbGF5czoge30sXG4gIH0sXG4gIGkxOG5Nb2R1bGU6IGkxOG5SZXNvdXJjZXMsXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUE7QUFBQSxFQUNFLFNBQVc7QUFBQSxJQUNULE1BQVE7QUFBQSxJQUNSLGNBQWdCO0FBQUEsRUFDbEI7QUFDRjs7O0FDSEEsSUFBTyxlQUFRO0FBQUEsRUFDYixJQUFJO0FBQUEsSUFDRixhQUFhO0FBQUEsRUFDZjtBQUNGOzs7QUNKQSxTQUFTLG1CQUFtQkEsU0FBUTtBQUNsQyxTQUFPO0FBQUEsSUFDTCxHQUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFRSCxVQUFVLE9BQU8sSUFBSSxZQUFZO0FBQUEsRUFDbkM7QUFDRjtBQUlBLFNBQVMsa0JBQWtCQyxTQUFRO0FBQ2pDLFNBQU8sbUJBQW1CQSxPQUFNO0FBQ2xDOzs7QUNuQkEsU0FBUyxzQkFBc0I7OztBQ0QvQjtBQUFBLEVBQ0UsZUFBQUM7QUFBQSxFQUNBLGFBQUFDO0FBQUEsRUFDQSxXQUFBQztBQUFBLEVBQ0EsWUFBQUM7QUFBQSxPQUlLO0FBQ1A7QUFBQSxFQUNFLGFBQUFDO0FBQUEs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QUFBQSxNQUNYLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLE1BQ0UsV0FBV0U7QUFBQSxNQUNYLE1BQU07QUFBQSxJQUNSO0FBQUEsSUFDQTtBQUFBLE1BQ0UsV0FBV0E7QUFBQSxNQUNYLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBTSxpQkFBaUI7QUFBQSxFQUNyQixXQUFXO0FBQUEsSUFDVDtBQUFBLE1BQ0UsT0FBTyxPQUFjO0FBQUEsTUFDckIsTUFBTSxPQUFjO0FBQUEsTUFDcEIsTUFBTTtBQUFBLE1BQ04sTUFBTSxPQUFjO0FBQUEsTUFDcEIsUUFBUSxPQUFjO0FBQUEsTUFDdEIsZUFBZSxPQUFjO0FBQUEsSUFDL0I7QUFBQSxJQUNBO0FBQUEsTUFDRSxPQUFPQyxRQUFxQjtBQUFBLE1BQzVCLE1BQU1BLFFBQXFCO0FBQUEsTUFDM0IsTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLE1BQ1IsZUFBZUEsUUFBcUI7QUFBQSxJQUN0QztBQUFBLEVBQ0Y7QUFDRjtBQUVBLElBQU8sZ0JBQVE7QUFBQSxFQUNiLGNBQWM7QUFBQSxJQUNaLFNBQVMsQ0FBQztBQUFBLEVBQ1o7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsWUFBWTtBQUFBLElBQ1YsY0FBYyxDQUFDO0FBQUEsRUFDakI7QUFBQSxFQUNBLGVBQWU7QUFBQSxJQUNiLFVBQVUsQ0FBQztBQUFBLEVBQ2I7QUFBQSxFQUNBLFlBQVk7QUFDZDsiLAogICJuYW1lcyI6IFsiY29uZmlnIiwgImNvbmZpZyIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJBcnJvd1BhdGgiLCAiUGVuY2lsU3F1YXJlIiwgIlBsdXMiLCAiVHJhc2giLCAiQnV0dG9uIiwgIkNvbnRhaW5lciIsICJDdXJyZW5jeUlucHV0IiwgIkZvY3VzTW9kYWwiLCAiSGVhZGluZyIsICJJbnB1dCIsICJMYWJlbCIsICJQcm9ncmVzc1RhYnMiLCAiU2VsZWN0IiwgIlN0YXR1c0JhZGdlIiwgIlN3aXRjaCIsICJUYWJsZSIsICJUZXh0IiwgIlRleHRhcmVhIiwgInRvYXN0IiwgInVzZVByb21wdCIsICJUZXh0IiwgImpzeCIsICJqc3hzIiwgImNvbmZpZyIsICJyb3ciLCAiVGV4dCIsICJqc3giLCAianN4cyIsICJUZXh0IiwgInZhbHVlIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInJvdyIsICJjb25maWciLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAiYmFja2VuZFVybCIsICJhcGlFcnJvck1lc3NhZ2UiLCAiYXBpRmV0Y2giLCAiYW1vdW50IiwgImN1cnJlbmN5IiwgImpzeHMiLCAianN4IiwgIlRleHQiLCAiSGVhZGluZyIsICJDb250YWluZXIiLCAiU3RhdHVzQmFkZ2UiLCAiRnJhZ21lbnQiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgImFwaUZldGNoIiwgInRvYXN0IiwgIlRhYmxlIiwgInVzZUNhbGxiYWNrIiwgIkJ1dHRvbiIsICJBcnJvd1BhdGgiLCAianN4IiwgImpzeCIsICJwYWdlX2RlZmF1bHQiLCAiUmVjZWlwdFBlcmNlbnQiLCAianN4IiwgImNvbmZpZyIsICJSZWNlaXB0UGVyY2VudCIsICJDb3Vwb25Qcm9kdWN0c1BhZ2UiLCAicGFnZV9kZWZhdWx0IiwgInBhZ2VfZGVmYXVsdCIsICJjb25maWciXQp9Cg==
|
|
3328
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2FkbWluL2kxOG4vZW4uanNvbiIsICIuLi8uLi8uLi8uLi9zcmMvYWRtaW4vaTE4bi9pbmRleC50cyIsICIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQG1lZHVzYWpzL2FkbWluLXNkay9kaXN0L2luZGV4Lm1qcyIsICIuLi8uLi8uLi8uLi9zcmMvYWRtaW4vcm91dGVzL2NvdXBvbnMvcGFnZS50c3giLCAiLi4vLi4vLi4vLi4vc3JjL2Rhc2hib2FyZC9jb3Vwb25zL2NvdXBvbi1tYW5hZ2VyLnRzeCIsICIuLi8uLi8uLi8uLi9zcmMvZGFzaGJvYXJkL2NvdXBvbnMvY291cG9uLXByb2R1Y3RzLXBhZ2UudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9kYXNoYm9hcmQvY291cG9ucy9lbXB0eS1zdGF0ZS50c3giLCAiLi4vLi4vLi4vLi4vc3JjL2FkbWluL3JvdXRlcy9jb3Vwb25zL1tpZF0vcGFnZS50c3giLCAiLi4vLi4vLi4vLi4vc3JjL2FkbWluL3JvdXRlcy9jb3Vwb25zL3Byb2R1Y3RzL3BhZ2UudHN4IiwgIi4uLy4uLy4uLy4uL3NyYy9hZG1pbi9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsie1xuICBcImNvdXBvbnNcIjoge1xuICAgIFwibWVudVwiOiBcIkNvdXBvbnNcIixcbiAgICBcInByb2R1Y3RzTWVudVwiOiBcIkNvdXBvbiBQcm9kdWN0c1wiXG4gIH1cbn1cbiIsICJpbXBvcnQgZW4gZnJvbSBcIi4vZW4uanNvblwiXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjogZW4sXG4gIH0sXG59XG4iLCAiLy8gc3JjL2NvbmZpZy91dGlscy50c1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ0hlbHBlcihjb25maWcpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb25maWcsXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCB0byBhbGxvdyB0aGUgY29uZmlnIHRvIGJlIGV4cG9ydGVkLFxuICAgICAqIHdoaWxlIHN0aWxsIGFsbG93aW5nIEhNUiB0byB3b3JrIGNvcnJlY3RseS5cbiAgICAgKlxuICAgICAqIEl0IHRyaWNrcyBGYXN0IFJlZnJlc2ggaW50byB0aGlua2luZyB0aGF0IHRoZSBjb25maWcgaXMgYSBSZWFjdCBjb21wb25lbnQsXG4gICAgICogd2hpY2ggYWxsb3dzIGl0IHRvIGJlIHVwZGF0ZWQgd2l0aG91dCBhIGZ1bGwgcGFnZSByZWxvYWQuXG4gICAgICovXG4gICAgJCR0eXBlb2Y6IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpXG4gIH07XG59XG5mdW5jdGlvbiBkZWZpbmVXaWRnZXRDb25maWcoY29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVDb25maWdIZWxwZXIoY29uZmlnKTtcbn1cbmZ1bmN0aW9uIGRlZmluZVJvdXRlQ29uZmlnKGNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlQ29uZmlnSGVscGVyKGNvbmZpZyk7XG59XG5leHBvcnQge1xuICBkZWZpbmVSb3V0ZUNvbmZpZyxcbiAgZGVmaW5lV2lkZ2V0Q29uZmlnXG59O1xuIiwgImltcG9ydCB7IGRlZmluZVJvdXRlQ29uZmlnIH0gZnJvbSBcIkBtZWR1c2Fqcy9hZG1pbi1zZGtcIlxuaW1wb3J0IHsgUmVjZWlwdFBlcmNlbnQgfSBmcm9tIFwiQG1lZHVzYWpzL2ljb25zXCJcbmltcG9ydCB7IENvdXBvbnNQYWdlVmlldyB9IGZyb20gXCIuLi8uLi8uLi9kYXNoYm9hcmQvY291cG9ucy9jb3Vwb24tbWFuYWdlclwiXG5cbmV4cG9ydCBjb25zdCBjb25maWcgPSBkZWZpbmVSb3V0ZUNvbmZpZyh7XG4gIGxhYmVsOiBcIkNvdXBvbnNcIixcbiAgaWNvbjogUmVjZWlwdFBlcmNlbnQsXG59KVxuXG5jb25zdCBDb3Vwb25zUGFnZSA9ICgpID0+IHtcbiAgcmV0dXJuIDxDb3Vwb25zUGFnZVZpZXcgYXBpQmFzZT1cIi9hZG1pblwiIHRpdGxlPVwiQ291cG9uc1wiIC8+XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvdXBvbnNQYWdlXG4iLCAiaW1wb3J0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHR5cGUgQ2hhbmdlRXZlbnQsXG4gIHR5cGUgQ1NTUHJvcGVydGllcyxcbiAgdHlwZSBSZWFjdE5vZGUsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge1xuICBBcnJvd1BhdGgsXG4gIFBlbmNpbFNxdWFyZSxcbiAgUGx1cyxcbiAgU2hvcHBpbmdDYXJ0LFxuICBUcmFzaCxcbiAgVHJpYW5nbGVSaWdodE1pbmksXG59IGZyb20gXCJAbWVkdXNhanMvaWNvbnNcIlxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDb250YWluZXIsXG4gIENvcHksXG4gIEN1cnJlbmN5SW5wdXQsXG4gIEZvY3VzTW9kYWwsXG4gIEhlYWRpbmcsXG4gIElucHV0LFxuICBMYWJlbCxcbiAgUHJvZ3Jlc3NUYWJzLFxuICBTZWxlY3QsXG4gIFN0YXR1c0JhZGdlLFxuICBTd2l0Y2gsXG4gIFRhYmxlLFxuICBUYWJzLFxuICBUZXh0LFxuICBUZXh0YXJlYSxcbiAgdG9hc3QsXG4gIHVzZVByb21wdCxcbn0gZnJvbSBcIkBtZWR1c2Fqcy91aVwiXG5pbXBvcnQgeyBDb3Vwb25Qcm9kdWN0c1BhZ2UgfSBmcm9tIFwiLi9jb3Vwb24tcHJvZHVjdHMtcGFnZVwiXG5pbXBvcnQgeyBDb3Vwb25FbXB0eVN0YXRlIH0gZnJvbSBcIi4vZW1wdHktc3RhdGVcIlxuXG5kZWNsYXJlIGNvbnN0IF9fQkFDS0VORF9VUkxfXzogc3RyaW5nXG5cbnR5cGUgQXBpQmFzZSA9IFwiL2FkbWluXCIgfCBcIi92ZW5kb3JcIlxudHlwZSBCZW5lZml0VHlwZSA9IFwiZml4ZWRfYW1vdW50XCIgfCBcInBlcmNlbnRhZ2VcIiB8IFwiZnJlZV9zaGlwcGluZ1wiIHwgXCJidXlfZ2V0XCJcbnR5cGUgQ29kZVN0cmF0ZWd5ID0gXCJ1bmlxdWVfY29kZVwiIHwgXCJzaGFyZWRfY29kZVwiXG50eXBlIE1pcnJvck1vZGUgPSBcIm5vbmVcIiB8IFwibWFudWFsXCIgfCBcImF1dG9cIlxudHlwZSBQcm9tb3Rpb25TdGF0dXMgPSBcImRyYWZ0XCIgfCBcImFjdGl2ZVwiIHwgXCJpbmFjdGl2ZVwiXG50eXBlIENhbXBhaWduTW9kZSA9IFwibm9uZVwiIHwgXCJleGlzdGluZ1wiIHwgXCJuZXdcIlxudHlwZSBFeHBpcmF0aW9uUG9saWN5VHlwZSA9IFwibm9uZVwiIHwgXCJtb250aF9lbmRcIiB8IFwiZHVyYXRpb25cIiB8IFwiZml4ZWRcIlxudHlwZSBFeHBpcmF0aW9uRHVyYXRpb25Vbml0ID0gXCJkYXlzXCIgfCBcIm1vbnRoc1wiXG50eXBlIEV4cGlyYXRpb25UaW1lUG9saWN5ID0gXCJleGFjdGx5XCIgfCBcImRheV9lbmRcIlxudHlwZSBXaXphcmRTdGVwID0gXCJkZXRhaWxzXCIgfCBcIm9yZ2FuaXplXCIgfCBcInZhcmlhbnRzXCIgfCBcImNvdXBvblwiIHwgXCJjYW1wYWlnblwiXG5cbnR5cGUgQ291cG9uUHJvZHVjdENvbmZpZyA9IHtcbiAgaWQ6IHN0cmluZ1xuICBlbmFibGVkOiBib29sZWFuXG4gIHByb2R1Y3RfaWQ6IHN0cmluZ1xuICBiZW5lZml0X3R5cGU6IEJlbmVmaXRUeXBlXG4gIGFtb3VudDogbnVtYmVyIHwgbnVsbFxuICBwZXJjZW50YWdlOiBudW1iZXIgfCBudWxsXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZyB8IG51bGxcbiAgY29kZV9zdHJhdGVneTogQ29kZVN0cmF0ZWd5XG4gIGNvZGVfcHJlZml4OiBzdHJpbmcgfCBudWxsXG4gIHNoYXJlZF9jb2RlOiBzdHJpbmcgfCBudWxsXG4gIGV4cGlyYXRpb25fcG9saWN5OlxuICAgIHwgeyB0eXBlOiBcIm5vbmVcIiB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6IFwibW9udGhfZW5kXCJcbiAgICAgICAgdGltZV9wb2xpY3k6IEV4cGlyYXRpb25UaW1lUG9saWN5XG4gICAgICAgIGNhcF9ieV9jYW1wYWlnbj86IGJvb2xlYW5cbiAgICAgICAgY2FwX2F0Pzogc3RyaW5nIHwgbnVsbFxuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiBcImR1cmF0aW9uXCJcbiAgICAgICAgZHVyYXRpb246IG51bWJlclxuICAgICAgICBkdXJhdGlvbl9kYXlzPzogbnVtYmVyXG4gICAgICAgIGR1cmF0aW9uX3VuaXQ6IEV4cGlyYXRpb25EdXJhdGlvblVuaXRcbiAgICAgICAgdGltZV9wb2xpY3k6IEV4cGlyYXRpb25UaW1lUG9saWN5XG4gICAgICAgIGNhcF9ieV9jYW1wYWlnbj86IGJvb2xlYW5cbiAgICAgICAgY2FwX2F0Pzogc3RyaW5nIHwgbnVsbFxuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiBcImZpeGVkXCJcbiAgICAgICAgZXhwaXJlc19hdDogc3RyaW5nXG4gICAgICAgIGNhcF9ieV9jYW1wYWlnbj86IGJvb2xlYW5cbiAgICAgICAgY2FwX2F0Pzogc3RyaW5nIHwgbnVsbFxuICAgICAgfVxuICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IG51bWJlclxuICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IE1pcnJvck1vZGVcbiAgcHJvbW90aW9uX3N0YXR1cz86IFByb21vdGlvblN0YXR1cyB8IG51bGxcbiAgY2FtcGFpZ25fbW9kZT86IENhbXBhaWduTW9kZSB8IG51bGxcbiAgY2FtcGFpZ25faWQ/OiBzdHJpbmcgfCBudWxsXG4gIGNhbXBhaWduX3NuYXBzaG90PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIGNvbmZpZ192ZXJzaW9uOiBudW1iZXJcbn1cblxudHlwZSBDb3Vwb25WYXJpYW50Q29uZmlnID0gUGFydGlhbDxDb3Vwb25Qcm9kdWN0Q29uZmlnPiAmIHtcbiAgaWQ6IHN0cmluZ1xuICBwcm9kdWN0X2NvbmZpZ19pZDogc3RyaW5nXG4gIHZhcmlhbnRfaWQ6IHN0cmluZ1xufVxuXG50eXBlIFByb2R1Y3RWYXJpYW50ID0ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsXG4gIHNrdT86IHN0cmluZyB8IG51bGxcbiAgcHJpY2VzPzogeyBjdXJyZW5jeV9jb2RlPzogc3RyaW5nOyBhbW91bnQ/OiBudW1iZXIgfVtdXG59XG5cbnR5cGUgUHJvZHVjdFJlY29yZCA9IHtcbiAgaWQ6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbFxuICBzdWJ0aXRsZT86IHN0cmluZyB8IG51bGxcbiAgaGFuZGxlOiBzdHJpbmcgfCBudWxsXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbFxuICBzdGF0dXM6IHN0cmluZyB8IG51bGxcbiAgdGh1bWJuYWlsOiBzdHJpbmcgfCBudWxsXG4gIGRpc2NvdW50YWJsZT86IGJvb2xlYW5cbiAgdHlwZV9pZD86IHN0cmluZyB8IG51bGxcbiAgY29sbGVjdGlvbl9pZD86IHN0cmluZyB8IG51bGxcbiAgc2hpcHBpbmdfcHJvZmlsZV9pZD86IHN0cmluZyB8IG51bGxcbiAgdmFyaWFudHM/OiBQcm9kdWN0VmFyaWFudFtdXG4gIGNhdGVnb3JpZXM/OiB7IGlkOiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfCBudWxsIH1bXVxuICB0YWdzPzogeyBpZDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bGwgfVtdXG4gIHNhbGVzX2NoYW5uZWxzPzogeyBpZDogc3RyaW5nOyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9W11cbn1cblxudHlwZSBDb3Vwb25Qcm9kdWN0Um93ID0ge1xuICBpZDogc3RyaW5nXG4gIHByb2R1Y3Q6IFByb2R1Y3RSZWNvcmRcbiAgY291cG9uX3Byb2R1Y3RfY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnXG4gIGNvdXBvbl9wcm9kdWN0X3ZhcmlhbnRfY29uZmlnczogQ291cG9uVmFyaWFudENvbmZpZ1tdXG4gIGVudGl0bGVtZW50c19jb3VudDogbnVtYmVyXG59XG5cbnR5cGUgQ291cG9uRW50aXRsZW1lbnQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgb3JpZ2luPzogXCJwdXJjaGFzZVwiIHwgXCJleHRlcm5hbFwiXG4gIGN1c3RvbWVyX2lkOiBzdHJpbmcgfCBudWxsXG4gIGVtYWlsOiBzdHJpbmcgfCBudWxsXG4gIGNvZGU6IHN0cmluZyB8IG51bGxcbiAgc2hhcmVkX2NvZGU6IHN0cmluZyB8IG51bGxcbiAgc3RhdHVzOiBzdHJpbmdcbiAgcHJvZHVjdF9pZDogc3RyaW5nIHwgbnVsbFxuICB2YXJpYW50X2lkOiBzdHJpbmcgfCBudWxsXG4gIG9yZGVyX2lkOiBzdHJpbmcgfCBudWxsXG4gIGxpbmVfaXRlbV9pZDogc3RyaW5nIHwgbnVsbFxuICBpc3N1YW5jZV9pZD86IHN0cmluZyB8IG51bGxcbiAgY29uZmlnX2lkPzogc3RyaW5nIHwgbnVsbFxuICB2YXJpYW50X2NvbmZpZ19pZD86IHN0cmluZyB8IG51bGxcbiAgZXhwaXJlc19hdDogc3RyaW5nIHwgbnVsbFxuICByZWRlZW1lZF9hdDogc3RyaW5nIHwgbnVsbFxuICBjcmVhdGVkX2F0Pzogc3RyaW5nXG4gIGJlbmVmaXRfc25hcHNob3Q/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgc291cmNlX3NuYXBzaG90PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIGV4dGVybmFsX3JlZmVyZW5jZT86IHN0cmluZyB8IG51bGxcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgc2VsbGVyX3RhcmdldHM/OiBBcnJheTx7XG4gICAgc2VsbGVyX2lkOiBzdHJpbmdcbiAgICBzZWxsZXJfbWVtYmVyX2lkPzogc3RyaW5nIHwgbnVsbFxuICB9PlxufVxuXG50eXBlIENvdXBvbklzc3VhbmNlUmVjb3JkID0ge1xuICBpZDogc3RyaW5nXG4gIHN0YXR1cz86IHN0cmluZyB8IG51bGxcbiAgcXVhbnRpdHk/OiBudW1iZXIgfCBudWxsXG4gIGNvbmZpZ19zbmFwc2hvdD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICBpc3N1ZWRfY291bnQ/OiBudW1iZXIgfCBudWxsXG4gIGZhaWxlZF9jb3VudD86IG51bWJlciB8IG51bGxcbiAgY3JlYXRlZF9hdD86IHN0cmluZ1xuICB1cGRhdGVkX2F0Pzogc3RyaW5nXG59XG5cbnR5cGUgQ291cG9uT3JkZXJTdW1tYXJ5ID0ge1xuICBpZDogc3RyaW5nXG4gIGRpc3BsYXlfaWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgZW1haWw6IHN0cmluZyB8IG51bGxcbiAgY3VzdG9tZXJfaWQ6IHN0cmluZyB8IG51bGxcbiAgY3VycmVuY3lfY29kZTogc3RyaW5nIHwgbnVsbFxuICB0b3RhbDogbnVtYmVyIHwgbnVsbFxuICBjcmVhdGVkX2F0OiBzdHJpbmcgfCBudWxsXG59XG5cbnR5cGUgQ291cG9uRW50aXRsZW1lbnREZXRhaWwgPSB7XG4gIGN1c3RvbWVyX2NvdXBvbl9lbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnRcbiAgY291cG9uX2lzc3VhbmNlPzogQ291cG9uSXNzdWFuY2VSZWNvcmQgfCBudWxsXG4gIG9yZGVyPzogQ291cG9uT3JkZXJTdW1tYXJ5IHwgbnVsbFxufVxuXG50eXBlIE9wdGlvblJlY29yZCA9IHtcbiAgaWQ6IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbFxuICB0aXRsZT86IHN0cmluZyB8IG51bGxcbiAgdmFsdWU/OiBzdHJpbmcgfCBudWxsXG4gIGhhbmRsZT86IHN0cmluZyB8IG51bGxcbiAgY2FtcGFpZ25faWRlbnRpZmllcj86IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBDdXJyZW5jeU9wdGlvbiA9IHtcbiAgY29kZTogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzeW1ib2w6IHN0cmluZ1xuICBzeW1ib2xfbmF0aXZlOiBzdHJpbmdcbiAgaXNfZGVmYXVsdDogYm9vbGVhblxufVxuXG50eXBlIE9wdGlvbnNQYXlsb2FkID0ge1xuICBjdXJyZW5jaWVzPzogQ3VycmVuY3lPcHRpb25bXVxuICBwcm9kdWN0X3R5cGVzPzogT3B0aW9uUmVjb3JkW11cbiAgcHJvZHVjdF9jb2xsZWN0aW9ucz86IE9wdGlvblJlY29yZFtdXG4gIHByb2R1Y3RfY2F0ZWdvcmllcz86IE9wdGlvblJlY29yZFtdXG4gIHByb2R1Y3RfdGFncz86IE9wdGlvblJlY29yZFtdXG4gIHNhbGVzX2NoYW5uZWxzPzogT3B0aW9uUmVjb3JkW11cbiAgc2hpcHBpbmdfcHJvZmlsZXM/OiBPcHRpb25SZWNvcmRbXVxuICBjYW1wYWlnbnM/OiBPcHRpb25SZWNvcmRbXVxuICBzZWxsZXJzPzogT3B0aW9uUmVjb3JkW11cbn1cblxudHlwZSBQcm9kdWN0Rm9ybVN0YXRlID0ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgc3VidGl0bGU6IHN0cmluZ1xuICBoYW5kbGU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIHRodW1ibmFpbDogc3RyaW5nXG4gIHN0YXR1czogc3RyaW5nXG4gIGRpc2NvdW50YWJsZTogYm9vbGVhblxuICBzZWxsZXJfaWQ6IHN0cmluZ1xuICB0eXBlX2lkOiBzdHJpbmdcbiAgY29sbGVjdGlvbl9pZDogc3RyaW5nXG4gIGNhdGVnb3J5X2lkOiBzdHJpbmdcbiAgdGFnX2lkOiBzdHJpbmdcbiAgc2FsZXNfY2hhbm5lbF9pZDogc3RyaW5nXG4gIHZhcmlhbnRzOiBWYXJpYW50Rm9ybVN0YXRlW11cbn1cblxudHlwZSBWYXJpYW50Rm9ybVN0YXRlID0ge1xuICBpZD86IHN0cmluZ1xuICBvdmVycmlkZV9jb25maWdfaWQ/OiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZ1xuICBza3U6IHN0cmluZ1xuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmdcbiAgYW1vdW50OiBzdHJpbmdcbiAgb3ZlcnJpZGVfZW5hYmxlZDogYm9vbGVhblxuICBvdmVycmlkZV9iZW5lZml0X3R5cGU6IEJlbmVmaXRUeXBlXG4gIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGU6IHN0cmluZ1xuICBvdmVycmlkZV9hbW91bnQ6IHN0cmluZ1xuICBvdmVycmlkZV9wZXJjZW50YWdlOiBzdHJpbmdcbn1cblxudHlwZSBDb3Vwb25Gb3JtU3RhdGUgPSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW5cbiAgYmVuZWZpdF90eXBlOiBCZW5lZml0VHlwZVxuICBhbW91bnQ6IHN0cmluZ1xuICBwZXJjZW50YWdlOiBzdHJpbmdcbiAgY3VycmVuY3lfY29kZTogc3RyaW5nXG4gIGNvZGVfc3RyYXRlZ3k6IENvZGVTdHJhdGVneVxuICBjb2RlX3ByZWZpeDogc3RyaW5nXG4gIHNoYXJlZF9jb2RlOiBzdHJpbmdcbiAgZXhwaXJhdGlvbl90eXBlOiBFeHBpcmF0aW9uUG9saWN5VHlwZVxuICBleHBpcmF0aW9uX2R1cmF0aW9uOiBzdHJpbmdcbiAgZXhwaXJhdGlvbl9kdXJhdGlvbl91bml0OiBFeHBpcmF0aW9uRHVyYXRpb25Vbml0XG4gIGV4cGlyYXRpb25fdGltZV9wb2xpY3k6IEV4cGlyYXRpb25UaW1lUG9saWN5XG4gIGV4cGlyYXRpb25fZGF0ZTogc3RyaW5nXG4gIGV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduOiBib29sZWFuXG4gIGV4cGlyYXRpb25fY2FwX2F0OiBzdHJpbmdcbiAgbWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtOiBzdHJpbmdcbiAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBNaXJyb3JNb2RlXG4gIHByb21vdGlvbl9zdGF0dXM6IFByb21vdGlvblN0YXR1c1xufVxuXG50eXBlIENhbXBhaWduRm9ybVN0YXRlID0ge1xuICBtb2RlOiBDYW1wYWlnbk1vZGVcbiAgY2FtcGFpZ25faWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgY2FtcGFpZ25faWRlbnRpZmllcjogc3RyaW5nXG4gIHN0YXJ0c19hdDogc3RyaW5nXG4gIGVuZHNfYXQ6IHN0cmluZ1xufVxuXG5jb25zdCBOT05FID0gXCJfX25vbmVfX1wiXG5jb25zdCBzdGVwczogV2l6YXJkU3RlcFtdID0gW1xuICBcImRldGFpbHNcIixcbiAgXCJvcmdhbml6ZVwiLFxuICBcInZhcmlhbnRzXCIsXG4gIFwiY291cG9uXCIsXG4gIFwiY2FtcGFpZ25cIixcbl1cblxuY29uc3QgZW1wdHlWYXJpYW50OiBWYXJpYW50Rm9ybVN0YXRlID0ge1xuICB0aXRsZTogXCJEZWZhdWx0IHZhcmlhbnRcIixcbiAgc2t1OiBcIlwiLFxuICBjdXJyZW5jeV9jb2RlOiBcIlwiLFxuICBhbW91bnQ6IFwiXCIsXG4gIG92ZXJyaWRlX2VuYWJsZWQ6IGZhbHNlLFxuICBvdmVycmlkZV9iZW5lZml0X3R5cGU6IFwiZml4ZWRfYW1vdW50XCIsXG4gIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGU6IFwiXCIsXG4gIG92ZXJyaWRlX2Ftb3VudDogXCJcIixcbiAgb3ZlcnJpZGVfcGVyY2VudGFnZTogXCJcIixcbn1cblxuY29uc3QgZW1wdHlQcm9kdWN0OiBQcm9kdWN0Rm9ybVN0YXRlID0ge1xuICBpZDogXCJcIixcbiAgdGl0bGU6IFwiXCIsXG4gIHN1YnRpdGxlOiBcIlwiLFxuICBoYW5kbGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICB0aHVtYm5haWw6IFwiXCIsXG4gIHN0YXR1czogXCJkcmFmdFwiLFxuICBkaXNjb3VudGFibGU6IGZhbHNlLFxuICBzZWxsZXJfaWQ6IFwiXCIsXG4gIHR5cGVfaWQ6IFwiXCIsXG4gIGNvbGxlY3Rpb25faWQ6IFwiXCIsXG4gIGNhdGVnb3J5X2lkOiBcIlwiLFxuICB0YWdfaWQ6IFwiXCIsXG4gIHNhbGVzX2NoYW5uZWxfaWQ6IFwiXCIsXG4gIHZhcmlhbnRzOiBbZW1wdHlWYXJpYW50XSxcbn1cblxuY29uc3QgZW1wdHlDb3Vwb246IENvdXBvbkZvcm1TdGF0ZSA9IHtcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgYmVuZWZpdF90eXBlOiBcImZpeGVkX2Ftb3VudFwiLFxuICBhbW91bnQ6IFwiXCIsXG4gIHBlcmNlbnRhZ2U6IFwiXCIsXG4gIGN1cnJlbmN5X2NvZGU6IFwiXCIsXG4gIGNvZGVfc3RyYXRlZ3k6IFwidW5pcXVlX2NvZGVcIixcbiAgY29kZV9wcmVmaXg6IFwiQ09VUE9OXCIsXG4gIHNoYXJlZF9jb2RlOiBcIlwiLFxuICBleHBpcmF0aW9uX3R5cGU6IFwiZHVyYXRpb25cIixcbiAgZXhwaXJhdGlvbl9kdXJhdGlvbjogXCIzMFwiLFxuICBleHBpcmF0aW9uX2R1cmF0aW9uX3VuaXQ6IFwiZGF5c1wiLFxuICBleHBpcmF0aW9uX3RpbWVfcG9saWN5OiBcImRheV9lbmRcIixcbiAgZXhwaXJhdGlvbl9kYXRlOiBcIlwiLFxuICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjogdHJ1ZSxcbiAgZXhwaXJhdGlvbl9jYXBfYXQ6IFwiXCIsXG4gIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogXCIxXCIsXG4gIHByb21vdGlvbl9taXJyb3JfbW9kZTogXCJub25lXCIsXG4gIHByb21vdGlvbl9zdGF0dXM6IFwiZHJhZnRcIixcbn1cblxuY29uc3QgZW1wdHlDYW1wYWlnbjogQ2FtcGFpZ25Gb3JtU3RhdGUgPSB7XG4gIG1vZGU6IFwibm9uZVwiLFxuICBjYW1wYWlnbl9pZDogXCJcIixcbiAgbmFtZTogXCJcIixcbiAgY2FtcGFpZ25faWRlbnRpZmllcjogXCJcIixcbiAgc3RhcnRzX2F0OiBcIlwiLFxuICBlbmRzX2F0OiBcIlwiLFxufVxuXG5jb25zdCBtb2RhbENvbnRlbnRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIG92ZXJmbG93OiBcImhpZGRlblwiLFxufVxuXG5jb25zdCBtb2RhbFN0YXRpY1Jvd1N0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBmbGV4U2hyaW5rOiAwLFxufVxuXG5jb25zdCBtb2RhbFdpemFyZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleDogXCIxIDEgYXV0b1wiLFxuICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICBtaW5IZWlnaHQ6IDAsXG59XG5cbmNvbnN0IG1vZGFsQm9keVN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBmbGV4OiBcIjEgMSBhdXRvXCIsXG4gIG1pbkhlaWdodDogMCxcbiAgb3ZlcmZsb3dZOiBcImF1dG9cIixcbiAgcGFkZGluZzogXCIzMnB4IDI0cHhcIixcbn1cblxuY29uc3QgbW9kYWxGb3JtU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIG1hcmdpbjogXCIwIGF1dG9cIixcbiAgbWF4V2lkdGg6IDkyMCxcbiAgd2lkdGg6IFwibWluKDkyMHB4LCAxMDAlKVwiLFxufVxuXG5jb25zdCBzdGFja1N0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgZ2FwOiAxNixcbn1cblxuY29uc3QgdHdvQ29sdW1uR3JpZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImdyaWRcIixcbiAgZ2FwOiAxNixcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJyZXBlYXQoYXV0by1maXQsIG1pbm1heCgyNjBweCwgMWZyKSlcIixcbn1cblxuY29uc3QgdGhyZWVDb2x1bW5HcmlkU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGRpc3BsYXk6IFwiZ3JpZFwiLFxuICBnYXA6IDE2LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiBcInJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIyMHB4LCAxZnIpKVwiLFxufVxuXG5jb25zdCBmb3VyQ29sdW1uR3JpZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImdyaWRcIixcbiAgZ2FwOiAxNixcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJyZXBlYXQoYXV0by1maXQsIG1pbm1heCgxNjBweCwgMWZyKSlcIixcbn1cblxuY29uc3QgcGFuZWxTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgYm9yZGVyOiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgYm9yZGVyUmFkaXVzOiA4LFxuICBwYWRkaW5nOiAxNixcbn1cblxuY29uc3Qgcm93QmV0d2VlblN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZ2FwOiAxNixcbiAganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLFxufVxuXG5mdW5jdGlvbiBiYWNrZW5kVXJsKCkge1xuICByZXR1cm4gdHlwZW9mIF9fQkFDS0VORF9VUkxfXyA9PT0gXCJzdHJpbmdcIlxuICAgID8gX19CQUNLRU5EX1VSTF9fLnJlcGxhY2UoL1xcLyQvLCBcIlwiKVxuICAgIDogXCJcIlxufVxuXG5mdW5jdGlvbiBhcGlFcnJvck1lc3NhZ2UocGF5bG9hZDogYW55LCBmYWxsYmFjazogc3RyaW5nKSB7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXG4gICAgcGF5bG9hZD8ubWVzc2FnZSxcbiAgICBwYXlsb2FkPy5lcnJvcj8ubWVzc2FnZSxcbiAgICBwYXlsb2FkPy5lcnJvcixcbiAgICBwYXlsb2FkPy5lcnJvcnM/LlswXT8ubWVzc2FnZSxcbiAgXVxuICBjb25zdCBtZXNzYWdlID0gY2FuZGlkYXRlcy5maW5kKFxuICAgIChjYW5kaWRhdGUpID0+IHR5cGVvZiBjYW5kaWRhdGUgPT09IFwic3RyaW5nXCIgJiYgY2FuZGlkYXRlLnRyaW0oKSxcbiAgKVxuXG4gIHJldHVybiBtZXNzYWdlIHx8IGZhbGxiYWNrIHx8IFwiUmVxdWVzdCBmYWlsZWRcIlxufVxuXG5hc3luYyBmdW5jdGlvbiBhcGlGZXRjaDxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHt9LFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFja2VuZFVybCgpfSR7cGF0aH1gLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKG9wdGlvbnMuYm9keSA/IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSA6IHt9KSxcbiAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICB9LFxuICB9KVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gICAgdGhyb3cgbmV3IEVycm9yKGFwaUVycm9yTWVzc2FnZShwYXlsb2FkLCByZXNwb25zZS5zdGF0dXNUZXh0KSlcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZS5qc29uKClcbn1cblxuZnVuY3Rpb24gbnVtYmVyT3JOdWxsKHZhbHVlOiBzdHJpbmcpIHtcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgJiYgcGFyc2VkID4gMCA/IHBhcnNlZCA6IG51bGxcbn1cblxuZnVuY3Rpb24gb3B0aW9uTGFiZWwob3B0aW9uOiBPcHRpb25SZWNvcmQpIHtcbiAgcmV0dXJuIChcbiAgICBvcHRpb24ubmFtZSB8fCBvcHRpb24udGl0bGUgfHwgb3B0aW9uLnZhbHVlIHx8IG9wdGlvbi5oYW5kbGUgfHwgb3B0aW9uLmlkXG4gIClcbn1cblxuZnVuY3Rpb24gYmVuZWZpdExhYmVsKFxuICBjb25maWc6IFBpY2s8XG4gICAgQ291cG9uUHJvZHVjdENvbmZpZyxcbiAgICBcImJlbmVmaXRfdHlwZVwiIHwgXCJhbW91bnRcIiB8IFwicGVyY2VudGFnZVwiIHwgXCJjdXJyZW5jeV9jb2RlXCJcbiAgPixcbikge1xuICBpZiAoY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIikge1xuICAgIHJldHVybiBgJHtjb25maWcuYW1vdW50IHx8IDB9ICR7KGNvbmZpZy5jdXJyZW5jeV9jb2RlIHx8IFwiXCIpLnRvVXBwZXJDYXNlKCl9YFxuICB9XG4gIGlmIChjb25maWcuYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIikge1xuICAgIHJldHVybiBgJHtjb25maWcucGVyY2VudGFnZSB8fCAwfSVgXG4gIH1cbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwiZnJlZV9zaGlwcGluZ1wiKSB7XG4gICAgcmV0dXJuIFwiRnJlZSBzaGlwcGluZ1wiXG4gIH1cbiAgcmV0dXJuIFwiQnV5IGdldFwiXG59XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGUodmFsdWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIi1cIlxuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gXCItXCJcbiAgcmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF0ZVRpbWUodmFsdWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIi1cIlxuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIGlmIChOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gXCItXCJcbiAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsRGF0ZSh2YWx1ZT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiLVwiXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBcIi1cIlxuICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHtcbiAgICBkYXk6IFwibnVtZXJpY1wiLFxuICAgIGhvdXI6IFwibnVtZXJpY1wiLFxuICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgbW9udGg6IFwic2hvcnRcIixcbiAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVEYXRlKHZhbHVlPzogc3RyaW5nIHwgbnVsbCkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gXCItXCJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIFwiLVwiXG5cbiAgY29uc3QgZGlmZlNlY29uZHMgPSBNYXRoLnJvdW5kKChkYXRlLmdldFRpbWUoKSAtIERhdGUubm93KCkpIC8gMTAwMClcbiAgY29uc3QgYWJzU2Vjb25kcyA9IE1hdGguYWJzKGRpZmZTZWNvbmRzKVxuICBjb25zdCB1bml0czogQXJyYXk8W0ludGwuUmVsYXRpdmVUaW1lRm9ybWF0VW5pdCwgbnVtYmVyXT4gPSBbXG4gICAgW1wieWVhclwiLCA2MCAqIDYwICogMjQgKiAzNjVdLFxuICAgIFtcIm1vbnRoXCIsIDYwICogNjAgKiAyNCAqIDMwXSxcbiAgICBbXCJ3ZWVrXCIsIDYwICogNjAgKiAyNCAqIDddLFxuICAgIFtcImRheVwiLCA2MCAqIDYwICogMjRdLFxuICAgIFtcImhvdXJcIiwgNjAgKiA2MF0sXG4gICAgW1wibWludXRlXCIsIDYwXSxcbiAgXVxuICBjb25zdCBbdW5pdCwgc2Vjb25kc10gPVxuICAgIHVuaXRzLmZpbmQoKFssIHNlY29uZHNQZXJVbml0XSkgPT4gYWJzU2Vjb25kcyA+PSBzZWNvbmRzUGVyVW5pdCkgfHwgW11cblxuICBpZiAoIXVuaXQgfHwgIXNlY29uZHMpIHtcbiAgICByZXR1cm4gXCJqdXN0IG5vd1wiXG4gIH1cblxuICByZXR1cm4gbmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KHVuZGVmaW5lZCwgeyBudW1lcmljOiBcImF1dG9cIiB9KS5mb3JtYXQoXG4gICAgTWF0aC5yb3VuZChkaWZmU2Vjb25kcyAvIHNlY29uZHMpLFxuICAgIHVuaXQsXG4gIClcbn1cblxuZnVuY3Rpb24gZm9ybWF0U25hcHNob3RBbW91bnQoYW1vdW50OiBudW1iZXIgfCBudWxsLCBjdXJyZW5jeT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKGFtb3VudCA9PSBudWxsKSByZXR1cm4gXCItXCJcbiAgY29uc3QgY29kZSA9IGN1cnJlbmN5ID8gY3VycmVuY3kudG9VcHBlckNhc2UoKSA6IFwiXCJcbiAgcmV0dXJuIFtjb2RlLCBhbW91bnQudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7IG1heGltdW1GcmFjdGlvbkRpZ2l0czogMiB9KV1cbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmpvaW4oXCIgXCIpXG59XG5cbmZ1bmN0aW9uIHRvRGF0ZVRpbWVMb2NhbCh2YWx1ZT86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCJcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIFwiXCJcbiAgY29uc3QgbG9jYWxEYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MF8wMDApXG4gIHJldHVybiBsb2NhbERhdGUudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxNilcbn1cblxuZnVuY3Rpb24gZW50aXRsZW1lbnRTdGF0dXNDb2xvcihzdGF0dXM6IHN0cmluZykge1xuICBpZiAoc3RhdHVzID09PSBcImlzc3VlZFwiKSByZXR1cm4gXCJncmVlblwiIGFzIGNvbnN0XG4gIGlmIChzdGF0dXMgPT09IFwicmVkZWVtZWRcIikgcmV0dXJuIFwiYmx1ZVwiIGFzIGNvbnN0XG4gIGlmIChzdGF0dXMgPT09IFwiZXhwaXJlZFwiIHx8IHN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSByZXR1cm4gXCJncmV5XCIgYXMgY29uc3RcbiAgcmV0dXJuIFwib3JhbmdlXCIgYXMgY29uc3Rcbn1cblxuZnVuY3Rpb24gcHJvZHVjdFN0YXR1c0NvbG9yKHN0YXR1cz86IHN0cmluZyB8IG51bGwpIHtcbiAgaWYgKHN0YXR1cyA9PT0gXCJwdWJsaXNoZWRcIikgcmV0dXJuIFwiZ3JlZW5cIiBhcyBjb25zdFxuICBpZiAoc3RhdHVzID09PSBcInJlamVjdGVkXCIpIHJldHVybiBcInJlZFwiIGFzIGNvbnN0XG4gIGlmIChzdGF0dXMgPT09IFwicHJvcG9zZWRcIikgcmV0dXJuIFwib3JhbmdlXCIgYXMgY29uc3RcbiAgcmV0dXJuIFwiZ3JleVwiIGFzIGNvbnN0XG59XG5cbmZ1bmN0aW9uIHNuYXBzaG90U3RyaW5nKFxuICBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBrZXk6IHN0cmluZyxcbikge1xuICBjb25zdCB2YWx1ZSA9IHNuYXBzaG90Py5ba2V5XVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRyaW0oKSkgcmV0dXJuIHZhbHVlXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHJldHVybiBTdHJpbmcodmFsdWUpXG4gIHJldHVybiBcIlwiXG59XG5cbmZ1bmN0aW9uIHNuYXBzaG90TnVtYmVyKFxuICBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBrZXk6IHN0cmluZyxcbikge1xuICBjb25zdCB2YWx1ZSA9IHNuYXBzaG90Py5ba2V5XVxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IG51bGxcbn1cblxuZnVuY3Rpb24ganNvbkJsb2NrKHZhbHVlOiB1bmtub3duKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gXCJ7fVwiXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMilcbn1cblxuZnVuY3Rpb24gY291cG9uQ29kZShlbnRpdGxlbWVudDogQ291cG9uRW50aXRsZW1lbnQpIHtcbiAgcmV0dXJuIGVudGl0bGVtZW50LmNvZGUgfHwgZW50aXRsZW1lbnQuc2hhcmVkX2NvZGUgfHwgXCItXCJcbn1cblxuZnVuY3Rpb24gZW50aXRsZW1lbnRTb3VyY2UoZW50aXRsZW1lbnQ6IENvdXBvbkVudGl0bGVtZW50KSB7XG4gIGlmIChlbnRpdGxlbWVudC5vcmlnaW4gPT09IFwiZXh0ZXJuYWxcIikgcmV0dXJuIFwiRXh0ZXJuYWxcIlxuICByZXR1cm4gXCJQdXJjaGFzZVwiXG59XG5cbmZ1bmN0aW9uIGVudGl0bGVtZW50U2VsbGVyU2NvcGUoZW50aXRsZW1lbnQ6IENvdXBvbkVudGl0bGVtZW50KSB7XG4gIGNvbnN0IGNvdW50ID0gZW50aXRsZW1lbnQuc2VsbGVyX3RhcmdldHM/Lmxlbmd0aCB8fCAwXG4gIGlmIChlbnRpdGxlbWVudC5vcmlnaW4gIT09IFwiZXh0ZXJuYWxcIikge1xuICAgIGlmICghY291bnQpIHJldHVybiBcIlByb2R1Y3Qgc2VsbGVyXCJcbiAgICByZXR1cm4gYFByb2R1Y3Qgc2VsbGVyICsgJHtjb3VudH0gbGlua2VkYFxuICB9XG4gIGlmICghY291bnQpIHJldHVybiBcIkFkbWluIG9ubHlcIlxuICByZXR1cm4gY291bnQgPT09IDEgPyBcIjEgbGlua2VkIHNlbGxlclwiIDogYCR7Y291bnR9IGxpbmtlZCBzZWxsZXJzYFxufVxuXG5mdW5jdGlvbiBvcmRlckRpc3BsYXlJZChvcmRlcjogQ291cG9uT3JkZXJTdW1tYXJ5IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICBpZiAoIW9yZGVyKSByZXR1cm4gXCItXCJcbiAgcmV0dXJuIG9yZGVyLmRpc3BsYXlfaWQgPT0gbnVsbCA/IG9yZGVyLmlkIDogYCMke29yZGVyLmRpc3BsYXlfaWR9YFxufVxuXG5mdW5jdGlvbiBkYXNoYm9hcmRCYXNlUGF0aChhcGlCYXNlOiBBcGlCYXNlKSB7XG4gIHJldHVybiBhcGlCYXNlID09PSBcIi92ZW5kb3JcIiA/IFwiL3NlbGxlclwiIDogXCIvZGFzaGJvYXJkXCJcbn1cblxuZnVuY3Rpb24gY291cG9uRGV0YWlsUGF0aChhcGlCYXNlOiBBcGlCYXNlLCBlbnRpdGxlbWVudElkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGAke2Rhc2hib2FyZEJhc2VQYXRoKGFwaUJhc2UpfS9jb3Vwb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgIGVudGl0bGVtZW50SWQsXG4gICl9YFxufVxuXG5mdW5jdGlvbiBvcmRlckRldGFpbFBhdGgoYXBpQmFzZTogQXBpQmFzZSwgb3JkZXJJZDogc3RyaW5nKSB7XG4gIHJldHVybiBgJHtkYXNoYm9hcmRCYXNlUGF0aChhcGlCYXNlKX0vb3JkZXJzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZGVySWQpfWBcbn1cblxuZnVuY3Rpb24gY3VycmVudENvdXBvbkRldGFpbElkKGFwaUJhc2U6IEFwaUJhc2UpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gXCJcIlxuICB9XG5cbiAgY29uc3QgcHJlZml4ID0gYCR7ZGFzaGJvYXJkQmFzZVBhdGgoYXBpQmFzZSl9L2NvdXBvbnMvYFxuICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lXG4gIGNvbnN0IGluZGV4ID0gcGF0aC5pbmRleE9mKHByZWZpeClcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBcIlwiXG4gIH1cblxuICBjb25zdCBpZCA9IHBhdGguc2xpY2UoaW5kZXggKyBwcmVmaXgubGVuZ3RoKS5zcGxpdChcIi9cIilbMF1cbiAgaWYgKCFpZCB8fCBpZCA9PT0gXCJwcm9kdWN0c1wiKSB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpZClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGlkXG4gIH1cbn1cblxuZnVuY3Rpb24gYmVuZWZpdFNuYXBzaG90TGFiZWwoXG4gIHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4pIHtcbiAgY29uc3QgdHlwZSA9IHNuYXBzaG90U3RyaW5nKHNuYXBzaG90LCBcImJlbmVmaXRfdHlwZVwiKVxuICBpZiAodHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIikge1xuICAgIGNvbnN0IGFtb3VudHMgPSBBcnJheS5pc0FycmF5KHNuYXBzaG90Py5hbW91bnRzKVxuICAgICAgPyAoc25hcHNob3QuYW1vdW50cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pXG4gICAgICA6IFtdXG4gICAgaWYgKGFtb3VudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYW1vdW50c1xuICAgICAgICAubWFwKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCBhbW91bnQgPSBzbmFwc2hvdE51bWJlcihyb3csIFwiYW1vdW50XCIpXG4gICAgICAgICAgY29uc3QgY3VycmVuY3kgPSBzbmFwc2hvdFN0cmluZyhyb3csIFwiY3VycmVuY3lfY29kZVwiKS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgcmV0dXJuIGAke2Ftb3VudCA/PyAwfSAke2N1cnJlbmN5fWAudHJpbSgpXG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiLCBcIilcbiAgICB9XG5cbiAgICBjb25zdCBhbW91bnQgPSBzbmFwc2hvdE51bWJlcihzbmFwc2hvdCwgXCJhbW91bnRcIilcbiAgICBjb25zdCBjdXJyZW5jeSA9IHNuYXBzaG90U3RyaW5nKHNuYXBzaG90LCBcImN1cnJlbmN5X2NvZGVcIikudG9VcHBlckNhc2UoKVxuICAgIHJldHVybiBgJHthbW91bnQgPz8gMH0gJHtjdXJyZW5jeX1gLnRyaW0oKVxuICB9XG5cbiAgaWYgKHR5cGUgPT09IFwicGVyY2VudGFnZVwiKSB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBzbmFwc2hvdD8ucHJvbW90aW9uX3RlbXBsYXRlIGFzXG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB8IG51bGxcbiAgICAgIHwgdW5kZWZpbmVkXG4gICAgY29uc3QgbWV0aG9kID0gdGVtcGxhdGU/LmFwcGxpY2F0aW9uX21ldGhvZCBhc1xuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgfCBudWxsXG4gICAgICB8IHVuZGVmaW5lZFxuICAgIGNvbnN0IHNjb3BlID0gc25hcHNob3RTdHJpbmcobWV0aG9kLCBcInRhcmdldF90eXBlXCIpID09PSBcIm9yZGVyXCJcbiAgICAgID8gXCJvcmRlclwiXG4gICAgICA6IFwicHJvZHVjdHNcIlxuICAgIHJldHVybiBgJHtzbmFwc2hvdE51bWJlcihzbmFwc2hvdCwgXCJwZXJjZW50YWdlXCIpID8/IDB9JSBvZmYgJHtzY29wZX1gXG4gIH1cblxuICBpZiAodHlwZSA9PT0gXCJmcmVlX3NoaXBwaW5nXCIpIHtcbiAgICByZXR1cm4gXCJGcmVlIHNoaXBwaW5nXCJcbiAgfVxuXG4gIGlmICh0eXBlID09PSBcImJ1eV9nZXRcIikge1xuICAgIHJldHVybiBcIkJ1eSBYIEdldCBZXCJcbiAgfVxuXG4gIHJldHVybiBcIlVua25vd25cIlxufVxuXG5mdW5jdGlvbiBleHBpcmF0aW9uUG9saWN5TGFiZWwoXG4gIHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4pIHtcbiAgY29uc3QgcG9saWN5ID0gc25hcHNob3Q/LmV4cGlyYXRpb25fcG9saWN5IGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgbnVsbFxuICAgIHwgdW5kZWZpbmVkXG4gIGNvbnN0IHR5cGUgPSBzbmFwc2hvdFN0cmluZyhwb2xpY3ksIFwidHlwZVwiKVxuXG4gIGlmICh0eXBlID09PSBcIm5vbmVcIikgcmV0dXJuIFwiTm8gZXhwaXJhdGlvblwiXG4gIGlmICh0eXBlID09PSBcIm1vbnRoX2VuZFwiKSB7XG4gICAgcmV0dXJuIGBFbmQgb2Ygc2FtZSBtb250aCAoJHtzbmFwc2hvdFN0cmluZyhwb2xpY3ksIFwidGltZV9wb2xpY3lcIikgfHwgXCJkYXlfZW5kXCJ9KWBcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJkdXJhdGlvblwiKSB7XG4gICAgY29uc3QgZHVyYXRpb24gPVxuICAgICAgc25hcHNob3ROdW1iZXIocG9saWN5LCBcImR1cmF0aW9uXCIpID8/XG4gICAgICBzbmFwc2hvdE51bWJlcihwb2xpY3ksIFwiZHVyYXRpb25fZGF5c1wiKSA/P1xuICAgICAgMFxuICAgIGNvbnN0IHVuaXQgPSBzbmFwc2hvdFN0cmluZyhwb2xpY3ksIFwiZHVyYXRpb25fdW5pdFwiKSB8fCBcImRheXNcIlxuICAgIHJldHVybiBgJHtkdXJhdGlvbn0gJHt1bml0fSBhZnRlciBpc3N1YW5jZWBcbiAgfVxuICBpZiAodHlwZSA9PT0gXCJmaXhlZFwiKSB7XG4gICAgcmV0dXJuIGBGaXhlZCBkYXRlICR7Zm9ybWF0RGF0ZVRpbWUoc25hcHNob3RTdHJpbmcocG9saWN5LCBcImV4cGlyZXNfYXRcIikpfWBcbiAgfVxuXG4gIHJldHVybiBcIi1cIlxufVxuXG5mdW5jdGlvbiBjYW1wYWlnblNuYXBzaG90TGFiZWwoXG4gIHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4pIHtcbiAgY29uc3QgY2FtcGFpZ25TbmFwc2hvdCA9IHNuYXBzaG90Py5jYW1wYWlnbl9zbmFwc2hvdCBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IG51bGxcbiAgICB8IHVuZGVmaW5lZFxuICByZXR1cm4gKFxuICAgIHNuYXBzaG90U3RyaW5nKGNhbXBhaWduU25hcHNob3QsIFwibmFtZVwiKSB8fFxuICAgIHNuYXBzaG90U3RyaW5nKGNhbXBhaWduU25hcHNob3QsIFwiY2FtcGFpZ25faWRlbnRpZmllclwiKSB8fFxuICAgIHNuYXBzaG90U3RyaW5nKHNuYXBzaG90LCBcImNhbXBhaWduX2lkXCIpIHx8XG4gICAgXCJOb25lXCJcbiAgKVxufVxuXG5mdW5jdGlvbiBwcm9tb3Rpb25TbmFwc2hvdExhYmVsKFxuICBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuKSB7XG4gIGNvbnN0IHRlbXBsYXRlID0gc25hcHNob3Q/LnByb21vdGlvbl90ZW1wbGF0ZSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IG51bGxcbiAgICB8IHVuZGVmaW5lZFxuICBjb25zdCBtZXRob2QgPSB0ZW1wbGF0ZT8uYXBwbGljYXRpb25fbWV0aG9kIGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgbnVsbFxuICAgIHwgdW5kZWZpbmVkXG4gIGNvbnN0IHRhcmdldCA9IHNuYXBzaG90U3RyaW5nKG1ldGhvZCwgXCJ0YXJnZXRfdHlwZVwiKVxuICBjb25zdCBhbGxvY2F0aW9uID0gc25hcHNob3RTdHJpbmcobWV0aG9kLCBcImFsbG9jYXRpb25cIilcblxuICByZXR1cm4gW3RhcmdldCwgYWxsb2NhdGlvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgLyBcIikgfHwgXCJOb25lXCJcbn1cblxuZnVuY3Rpb24gY2FtcGFpZ25MYWJlbChjb25maWc6IENvdXBvblByb2R1Y3RDb25maWcpIHtcbiAgY29uc3QgbmFtZSA9IGNvbmZpZy5jYW1wYWlnbl9zbmFwc2hvdD8ubmFtZVxuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgJiYgbmFtZSkge1xuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICByZXR1cm4gY29uZmlnLmNhbXBhaWduX2lkIHx8IFwiTm9uZVwiXG59XG5cbmZ1bmN0aW9uIGZvcm1Gcm9tUm93KHJvdzogQ291cG9uUHJvZHVjdFJvdywgZGVmYXVsdEN1cnJlbmN5Q29kZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByb2R1Y3QgPSByb3cucHJvZHVjdCB8fCAoe30gYXMgUHJvZHVjdFJlY29yZClcbiAgY29uc3QgY29uZmlnID0gcm93LmNvdXBvbl9wcm9kdWN0X2NvbmZpZ1xuICBjb25zdCB2YXJpYW50Q29uZmlnQnlWYXJpYW50SWQgPSBuZXcgTWFwKFxuICAgIChyb3cuY291cG9uX3Byb2R1Y3RfdmFyaWFudF9jb25maWdzIHx8IFtdKS5tYXAoKHZhcmlhbnRDb25maWcpID0+IFtcbiAgICAgIHZhcmlhbnRDb25maWcudmFyaWFudF9pZCxcbiAgICAgIHZhcmlhbnRDb25maWcsXG4gICAgXSksXG4gIClcbiAgY29uc3QgZHVyYXRpb24gPVxuICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8udHlwZSA9PT0gXCJkdXJhdGlvblwiXG4gICAgICA/IGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5kdXJhdGlvbiA/P1xuICAgICAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kuZHVyYXRpb25fZGF5cyA/P1xuICAgICAgICAzMFxuICAgICAgOiAzMFxuXG4gIHJldHVybiB7XG4gICAgcHJvZHVjdDoge1xuICAgICAgLi4uZW1wdHlQcm9kdWN0LFxuICAgICAgaWQ6IHByb2R1Y3QuaWQgfHwgXCJcIixcbiAgICAgIHRpdGxlOiBwcm9kdWN0LnRpdGxlIHx8IFwiXCIsXG4gICAgICBzdWJ0aXRsZTogcHJvZHVjdC5zdWJ0aXRsZSB8fCBcIlwiLFxuICAgICAgaGFuZGxlOiBwcm9kdWN0LmhhbmRsZSB8fCBcIlwiLFxuICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3QuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIHRodW1ibmFpbDogcHJvZHVjdC50aHVtYm5haWwgfHwgXCJcIixcbiAgICAgIHN0YXR1czogcHJvZHVjdC5zdGF0dXMgfHwgXCJkcmFmdFwiLFxuICAgICAgZGlzY291bnRhYmxlOiBCb29sZWFuKHByb2R1Y3QuZGlzY291bnRhYmxlKSxcbiAgICAgIHR5cGVfaWQ6IHByb2R1Y3QudHlwZV9pZCB8fCBcIlwiLFxuICAgICAgY29sbGVjdGlvbl9pZDogcHJvZHVjdC5jb2xsZWN0aW9uX2lkIHx8IFwiXCIsXG4gICAgICBjYXRlZ29yeV9pZDogcHJvZHVjdC5jYXRlZ29yaWVzPy5bMF0/LmlkIHx8IFwiXCIsXG4gICAgICB0YWdfaWQ6IHByb2R1Y3QudGFncz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgICAgc2FsZXNfY2hhbm5lbF9pZDogcHJvZHVjdC5zYWxlc19jaGFubmVscz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgICAgdmFyaWFudHM6IChwcm9kdWN0LnZhcmlhbnRzPy5sZW5ndGggPyBwcm9kdWN0LnZhcmlhbnRzIDogW10pLm1hcChcbiAgICAgICAgKHZhcmlhbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdmVycmlkZSA9IHZhcmlhbnRDb25maWdCeVZhcmlhbnRJZC5nZXQodmFyaWFudC5pZClcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZW1wdHlWYXJpYW50LFxuICAgICAgICAgICAgaWQ6IHZhcmlhbnQuaWQsXG4gICAgICAgICAgICBvdmVycmlkZV9jb25maWdfaWQ6IG92ZXJyaWRlPy5pZCxcbiAgICAgICAgICAgIHRpdGxlOiB2YXJpYW50LnRpdGxlIHx8IFwiXCIsXG4gICAgICAgICAgICBza3U6IHZhcmlhbnQuc2t1IHx8IFwiXCIsXG4gICAgICAgICAgICBjdXJyZW5jeV9jb2RlOlxuICAgICAgICAgICAgICB2YXJpYW50LnByaWNlcz8uWzBdPy5jdXJyZW5jeV9jb2RlIHx8XG4gICAgICAgICAgICAgIG92ZXJyaWRlPy5jdXJyZW5jeV9jb2RlIHx8XG4gICAgICAgICAgICAgIGNvbmZpZy5jdXJyZW5jeV9jb2RlIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRDdXJyZW5jeUNvZGUsXG4gICAgICAgICAgICBhbW91bnQ6XG4gICAgICAgICAgICAgIHZhcmlhbnQucHJpY2VzPy5bMF0/LmFtb3VudCA9PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiBTdHJpbmcodmFyaWFudC5wcmljZXM/LlswXT8uYW1vdW50KSxcbiAgICAgICAgICAgIG92ZXJyaWRlX2VuYWJsZWQ6IG92ZXJyaWRlID8gb3ZlcnJpZGUuZW5hYmxlZCAhPT0gZmFsc2UgOiBmYWxzZSxcbiAgICAgICAgICAgIG92ZXJyaWRlX2JlbmVmaXRfdHlwZTpcbiAgICAgICAgICAgICAgb3ZlcnJpZGU/LmJlbmVmaXRfdHlwZSB8fCBjb25maWcuYmVuZWZpdF90eXBlIHx8IFwiZml4ZWRfYW1vdW50XCIsXG4gICAgICAgICAgICBvdmVycmlkZV9jdXJyZW5jeV9jb2RlOlxuICAgICAgICAgICAgICBvdmVycmlkZT8uY3VycmVuY3lfY29kZSB8fFxuICAgICAgICAgICAgICBjb25maWcuY3VycmVuY3lfY29kZSB8fFxuICAgICAgICAgICAgICBkZWZhdWx0Q3VycmVuY3lDb2RlLFxuICAgICAgICAgICAgb3ZlcnJpZGVfYW1vdW50OlxuICAgICAgICAgICAgICBvdmVycmlkZT8uYW1vdW50ID09IG51bGwgPyBcIlwiIDogU3RyaW5nKG92ZXJyaWRlLmFtb3VudCksXG4gICAgICAgICAgICBvdmVycmlkZV9wZXJjZW50YWdlOlxuICAgICAgICAgICAgICBvdmVycmlkZT8ucGVyY2VudGFnZSA9PSBudWxsID8gXCJcIiA6IFN0cmluZyhvdmVycmlkZS5wZXJjZW50YWdlKSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApLFxuICAgIH0sXG4gICAgY291cG9uOiB7XG4gICAgICAuLi5lbXB0eUNvdXBvbixcbiAgICAgIGVuYWJsZWQ6IGNvbmZpZy5lbmFibGVkLFxuICAgICAgYmVuZWZpdF90eXBlOiBjb25maWcuYmVuZWZpdF90eXBlLFxuICAgICAgYW1vdW50OiBjb25maWcuYW1vdW50ID09IG51bGwgPyBcIlwiIDogU3RyaW5nKGNvbmZpZy5hbW91bnQpLFxuICAgICAgcGVyY2VudGFnZTogY29uZmlnLnBlcmNlbnRhZ2UgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcoY29uZmlnLnBlcmNlbnRhZ2UpLFxuICAgICAgY3VycmVuY3lfY29kZTogY29uZmlnLmN1cnJlbmN5X2NvZGUgfHwgZGVmYXVsdEN1cnJlbmN5Q29kZSxcbiAgICAgIGNvZGVfc3RyYXRlZ3k6IGNvbmZpZy5jb2RlX3N0cmF0ZWd5LFxuICAgICAgY29kZV9wcmVmaXg6IGNvbmZpZy5jb2RlX3ByZWZpeCB8fCBcIlwiLFxuICAgICAgc2hhcmVkX2NvZGU6IGNvbmZpZy5zaGFyZWRfY29kZSB8fCBcIlwiLFxuICAgICAgZXhwaXJhdGlvbl90eXBlOiBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3k/LnR5cGUgfHwgXCJkdXJhdGlvblwiLFxuICAgICAgZXhwaXJhdGlvbl9kdXJhdGlvbjogU3RyaW5nKGR1cmF0aW9uKSxcbiAgICAgIGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdDpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImR1cmF0aW9uXCJcbiAgICAgICAgICA/IGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5kdXJhdGlvbl91bml0IHx8IFwiZGF5c1wiXG4gICAgICAgICAgOiBcImRheXNcIixcbiAgICAgIGV4cGlyYXRpb25fdGltZV9wb2xpY3k6XG4gICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8udHlwZSA9PT0gXCJkdXJhdGlvblwiIHx8XG4gICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8udHlwZSA9PT0gXCJtb250aF9lbmRcIlxuICAgICAgICAgID8gY29uZmlnLmV4cGlyYXRpb25fcG9saWN5LnRpbWVfcG9saWN5IHx8IFwiZXhhY3RseVwiXG4gICAgICAgICAgOiBcImRheV9lbmRcIixcbiAgICAgIGV4cGlyYXRpb25fZGF0ZTpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImZpeGVkXCJcbiAgICAgICAgICA/IHRvRGF0ZVRpbWVMb2NhbChjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kuZXhwaXJlc19hdClcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py5jYXBfYnlfY2FtcGFpZ24gIT09IGZhbHNlLFxuICAgICAgZXhwaXJhdGlvbl9jYXBfYXQ6IGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8uY2FwX2F0XG4gICAgICAgID8gdG9EYXRlVGltZUxvY2FsKGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5jYXBfYXQpXG4gICAgICAgIDogXCJcIixcbiAgICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogU3RyaW5nKFxuICAgICAgICBjb25maWcubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtIHx8IDEsXG4gICAgICApLFxuICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBjb25maWcucHJvbW90aW9uX21pcnJvcl9tb2RlIHx8IFwibm9uZVwiLFxuICAgICAgcHJvbW90aW9uX3N0YXR1czogY29uZmlnLnByb21vdGlvbl9zdGF0dXMgfHwgXCJkcmFmdFwiLFxuICAgIH0sXG4gICAgY2FtcGFpZ246IHtcbiAgICAgIC4uLmVtcHR5Q2FtcGFpZ24sXG4gICAgICBtb2RlOiBjb25maWcuY2FtcGFpZ25faWQgPyBcImV4aXN0aW5nXCIgOiBcIm5vbmVcIixcbiAgICAgIGNhbXBhaWduX2lkOiBjb25maWcuY2FtcGFpZ25faWQgfHwgXCJcIixcbiAgICB9LFxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ291cG9uUGF5bG9hZChcbiAgY291cG9uOiBDb3Vwb25Gb3JtU3RhdGUsXG4gIGFsbG93UHJvbW90aW9uTWlycm9yOiBib29sZWFuLFxuKSB7XG4gIHJldHVybiB7XG4gICAgZW5hYmxlZDogY291cG9uLmVuYWJsZWQsXG4gICAgYmVuZWZpdF90eXBlOiBjb3Vwb24uYmVuZWZpdF90eXBlLFxuICAgIGFtb3VudDpcbiAgICAgIGNvdXBvbi5iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgPyBudW1iZXJPck51bGwoY291cG9uLmFtb3VudClcbiAgICAgICAgOiBudWxsLFxuICAgIHBlcmNlbnRhZ2U6XG4gICAgICBjb3Vwb24uYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIlxuICAgICAgICA/IG51bWJlck9yTnVsbChjb3Vwb24ucGVyY2VudGFnZSlcbiAgICAgICAgOiBudWxsLFxuICAgIGN1cnJlbmN5X2NvZGU6XG4gICAgICBjb3Vwb24uYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiXG4gICAgICAgID8gY291cG9uLmN1cnJlbmN5X2NvZGUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgOiBudWxsLFxuICAgIGNvZGVfc3RyYXRlZ3k6IGNvdXBvbi5jb2RlX3N0cmF0ZWd5LFxuICAgIGNvZGVfcHJlZml4OlxuICAgICAgY291cG9uLmNvZGVfc3RyYXRlZ3kgPT09IFwidW5pcXVlX2NvZGVcIlxuICAgICAgICA/IGNvdXBvbi5jb2RlX3ByZWZpeC50cmltKCkgfHwgXCJDT1VQT05cIlxuICAgICAgICA6IG51bGwsXG4gICAgc2hhcmVkX2NvZGU6XG4gICAgICBjb3Vwb24uY29kZV9zdHJhdGVneSA9PT0gXCJzaGFyZWRfY29kZVwiID8gY291cG9uLnNoYXJlZF9jb2RlLnRyaW0oKSA6IG51bGwsXG4gICAgZXhwaXJhdGlvbl9wb2xpY3k6XG4gICAgICBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcIm5vbmVcIlxuICAgICAgICA/IHsgdHlwZTogXCJub25lXCIgYXMgY29uc3QgfVxuICAgICAgICA6IGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwiZml4ZWRcIlxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogXCJmaXhlZFwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgZXhwaXJlc19hdDogbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fZGF0ZSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIGNhcF9ieV9jYW1wYWlnbjogY291cG9uLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWduLFxuICAgICAgICAgICAgY2FwX2F0OiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXRcbiAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcIm1vbnRoX2VuZFwiXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHR5cGU6IFwibW9udGhfZW5kXCIgYXMgY29uc3QsXG4gICAgICAgICAgICAgIHRpbWVfcG9saWN5OiBjb3Vwb24uZXhwaXJhdGlvbl90aW1lX3BvbGljeSxcbiAgICAgICAgICAgICAgY2FwX2J5X2NhbXBhaWduOiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ24sXG4gICAgICAgICAgICAgIGNhcF9hdDogY291cG9uLmV4cGlyYXRpb25fY2FwX2F0XG4gICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiZHVyYXRpb25cIiBhcyBjb25zdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IE51bWJlcihjb3Vwb24uZXhwaXJhdGlvbl9kdXJhdGlvbikgfHwgMzAsXG4gICAgICAgICAgICAgIGR1cmF0aW9uX3VuaXQ6IGNvdXBvbi5leHBpcmF0aW9uX2R1cmF0aW9uX3VuaXQsXG4gICAgICAgICAgICAgIHRpbWVfcG9saWN5OiBjb3Vwb24uZXhwaXJhdGlvbl90aW1lX3BvbGljeSxcbiAgICAgICAgICAgICAgY2FwX2J5X2NhbXBhaWduOiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ24sXG4gICAgICAgICAgICAgIGNhcF9hdDogY291cG9uLmV4cGlyYXRpb25fY2FwX2F0XG4gICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTpcbiAgICAgIE51bWJlcihjb3Vwb24ubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtKSB8fCAxLFxuICAgIC4uLihhbGxvd1Byb21vdGlvbk1pcnJvclxuICAgICAgPyB7XG4gICAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBjb3Vwb24ucHJvbW90aW9uX21pcnJvcl9tb2RlLFxuICAgICAgICAgIHByb21vdGlvbl9zdGF0dXM6IGNvdXBvbi5wcm9tb3Rpb25fc3RhdHVzLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENhbXBhaWduUGF5bG9hZChcbiAgY2FtcGFpZ246IENhbXBhaWduRm9ybVN0YXRlLFxuICBhbGxvd0NhbXBhaWduOiBib29sZWFuLFxuKSB7XG4gIGlmICghYWxsb3dDYW1wYWlnbikge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICBpZiAoY2FtcGFpZ24ubW9kZSA9PT0gXCJleGlzdGluZ1wiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiZXhpc3RpbmdcIixcbiAgICAgIGNhbXBhaWduX2lkOiBjYW1wYWlnbi5jYW1wYWlnbl9pZCB8fCBudWxsLFxuICAgIH1cbiAgfVxuICBpZiAoY2FtcGFpZ24ubW9kZSA9PT0gXCJuZXdcIikge1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcIm5ld1wiLFxuICAgICAgY2FtcGFpZ246IHtcbiAgICAgICAgbmFtZTogY2FtcGFpZ24ubmFtZSxcbiAgICAgICAgY2FtcGFpZ25faWRlbnRpZmllcjogY2FtcGFpZ24uY2FtcGFpZ25faWRlbnRpZmllcixcbiAgICAgICAgc3RhcnRzX2F0OiBjYW1wYWlnbi5zdGFydHNfYXRcbiAgICAgICAgICA/IG5ldyBEYXRlKGNhbXBhaWduLnN0YXJ0c19hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgZW5kc19hdDogY2FtcGFpZ24uZW5kc19hdFxuICAgICAgICAgID8gbmV3IERhdGUoY2FtcGFpZ24uZW5kc19hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfVxuICB9XG4gIHJldHVybiB7IG1vZGU6IFwibm9uZVwiIH1cbn1cblxuZnVuY3Rpb24gc3RlcFN0YXR1cyhzdGVwOiBXaXphcmRTdGVwLCBhY3RpdmU6IFdpemFyZFN0ZXApIHtcbiAgY29uc3Qgc3RlcEluZGV4ID0gc3RlcHMuaW5kZXhPZihzdGVwKVxuICBjb25zdCBhY3RpdmVJbmRleCA9IHN0ZXBzLmluZGV4T2YoYWN0aXZlKVxuICBpZiAoc3RlcEluZGV4IDwgYWN0aXZlSW5kZXgpIHJldHVybiBcImNvbXBsZXRlZFwiXG4gIGlmIChzdGVwSW5kZXggPT09IGFjdGl2ZUluZGV4KSByZXR1cm4gXCJpbi1wcm9ncmVzc1wiXG4gIHJldHVybiBcIm5vdC1zdGFydGVkXCJcbn1cblxuZnVuY3Rpb24gRmllbGQoeyBsYWJlbCwgY2hpbGRyZW4gfTogeyBsYWJlbDogc3RyaW5nOyBjaGlsZHJlbjogUmVhY3ROb2RlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMVwiIHN0eWxlPXt7IG1pbldpZHRoOiAwIH19PlxuICAgICAgPExhYmVsPntsYWJlbH08L0xhYmVsPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIGN1cnJlbmN5RGVjaW1hbERpZ2l0cyhjb2RlOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwge1xuICAgICAgc3R5bGU6IFwiY3VycmVuY3lcIixcbiAgICAgIGN1cnJlbmN5OiBjb2RlLnRvVXBwZXJDYXNlKCksXG4gICAgfSkucmVzb2x2ZWRPcHRpb25zKCkubWF4aW11bUZyYWN0aW9uRGlnaXRzXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAyXG4gIH1cbn1cblxuZnVuY3Rpb24gY3VycmVuY3lTeW1ib2woY29kZTogc3RyaW5nKSB7XG4gIGlmICghY29kZSkgcmV0dXJuIFwiXCJcblxuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlblwiLCB7XG4gICAgICAgIHN0eWxlOiBcImN1cnJlbmN5XCIsXG4gICAgICAgIGN1cnJlbmN5OiBjb2RlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIGN1cnJlbmN5RGlzcGxheTogXCJuYXJyb3dTeW1ib2xcIixcbiAgICAgIH0pXG4gICAgICAgIC5mb3JtYXRUb1BhcnRzKDApXG4gICAgICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09IFwiY3VycmVuY3lcIik/LnZhbHVlIHx8IGNvZGUudG9VcHBlckNhc2UoKVxuICAgIClcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGNvZGUudG9VcHBlckNhc2UoKVxuICB9XG59XG5cbmZ1bmN0aW9uIEN1cnJlbmN5U2VsZWN0KHtcbiAgY3VycmVuY2llcyxcbiAgZGlzYWJsZWQsXG4gIG9uQ2hhbmdlLFxuICB2YWx1ZSxcbn06IHtcbiAgY3VycmVuY2llczogQ3VycmVuY3lPcHRpb25bXVxuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB2YWx1ZT17dmFsdWUgfHwgdW5kZWZpbmVkfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8ICFjdXJyZW5jaWVzLmxlbmd0aH1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9e29uQ2hhbmdlfVxuICAgID5cbiAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgPFNlbGVjdC5WYWx1ZVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtcbiAgICAgICAgICAgIGN1cnJlbmNpZXMubGVuZ3RoID8gXCJTZWxlY3QgY3VycmVuY3lcIiA6IFwiTm8gY3VycmVuY2llcyBhdmFpbGFibGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgLz5cbiAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgIHtjdXJyZW5jaWVzLm1hcCgoY3VycmVuY3kpID0+IChcbiAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtjdXJyZW5jeS5jb2RlfSB2YWx1ZT17Y3VycmVuY3kuY29kZX0+XG4gICAgICAgICAgICB7Y3VycmVuY3kubmFtZX0gKHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9KVxuICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICA8L1NlbGVjdD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDdXJyZW5jeUFtb3VudElucHV0KHtcbiAgY3VycmVuY2llcyxcbiAgY3VycmVuY3lDb2RlLFxuICBkaXNhYmxlZCxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdXG4gIGN1cnJlbmN5Q29kZTogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICBjb25zdCBjdXJyZW5jeSA9IGN1cnJlbmNpZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2RlID09PSBjdXJyZW5jeUNvZGUpXG4gIGNvbnN0IGNvZGUgPSBjdXJyZW5jeUNvZGUudG9VcHBlckNhc2UoKVxuICBjb25zdCBkZWNpbWFscyA9IGN1cnJlbmN5RGVjaW1hbERpZ2l0cyhjb2RlIHx8IFwiVVNEXCIpXG5cbiAgcmV0dXJuIChcbiAgICA8Q3VycmVuY3lJbnB1dFxuICAgICAgY29kZT17Y29kZSB8fCBcIlVTRFwifVxuICAgICAgc3ltYm9sPXtcbiAgICAgICAgY3VycmVuY3k/LnN5bWJvbF9uYXRpdmUgfHxcbiAgICAgICAgY3VycmVuY3k/LnN5bWJvbCB8fFxuICAgICAgICBjdXJyZW5jeVN5bWJvbChjb2RlIHx8IFwiVVNEXCIpXG4gICAgICB9XG4gICAgICBtaW49ezB9XG4gICAgICBkZWNpbWFsU2NhbGU9e2RlY2ltYWxzfVxuICAgICAgZGVjaW1hbHNMaW1pdD17ZGVjaW1hbHN9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgIWN1cnJlbmN5Q29kZX1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9eyhuZXh0VmFsdWUpID0+IG9uQ2hhbmdlKG5leHRWYWx1ZSB8fCBcIlwiKX1cbiAgICAvPlxuICApXG59XG5cbmNvbnN0IGVudGl0bGVtZW50RmlsdGVycyA9IFtcbiAgeyBsYWJlbDogXCJBbGxcIiwgdmFsdWU6IFwiYWxsXCIgfSxcbiAgeyBsYWJlbDogXCJJc3N1ZWRcIiwgdmFsdWU6IFwiaXNzdWVkXCIgfSxcbiAgeyBsYWJlbDogXCJSZWRlZW1lZFwiLCB2YWx1ZTogXCJyZWRlZW1lZFwiIH0sXG4gIHsgbGFiZWw6IFwiRXhwaXJlZFwiLCB2YWx1ZTogXCJleHBpcmVkXCIgfSxcbiAgeyBsYWJlbDogXCJDYW5jZWxlZFwiLCB2YWx1ZTogXCJjYW5jZWxlZFwiIH0sXG5dIGFzIGNvbnN0XG5cbnR5cGUgRW50aXRsZW1lbnRGaWx0ZXIgPSAodHlwZW9mIGVudGl0bGVtZW50RmlsdGVycylbbnVtYmVyXVtcInZhbHVlXCJdXG5cbmZ1bmN0aW9uIFNuYXBzaG90QmxvY2soeyB0aXRsZSwgdmFsdWUgfTogeyB0aXRsZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSB7XG4gIHJldHVybiAoXG4gICAgPGRldGFpbHMgY2xhc3NOYW1lPVwicm91bmRlZC1sZyBib3JkZXIgcC0zXCI+XG4gICAgICA8c3VtbWFyeSBjbGFzc05hbWU9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LXVpLWZnLWJhc2UgdHh0LXNtYWxsLXBsdXNcIj5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9zdW1tYXJ5PlxuICAgICAgPHByZVxuICAgICAgICBjbGFzc05hbWU9XCJtdC0zIHJvdW5kZWQtbWQgYmctdWktYmctc3VidGxlIHAtMyB0ZXh0LXVpLWZnLXN1YnRsZSB0eHQtY29tcGFjdC14c21hbGxcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIG1heEhlaWdodDogMjIwLFxuICAgICAgICAgIG92ZXJmbG93OiBcImF1dG9cIixcbiAgICAgICAgICB3aGl0ZVNwYWNlOiBcInByZS13cmFwXCIsXG4gICAgICAgICAgd29yZEJyZWFrOiBcImJyZWFrLXdvcmRcIixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2pzb25CbG9jayh2YWx1ZSl9XG4gICAgICA8L3ByZT5cbiAgICA8L2RldGFpbHM+XG4gIClcbn1cblxuZnVuY3Rpb24gVHdvQ29sdW1uTGF5b3V0KHtcbiAgZmlyc3RDb2wsXG4gIHNlY29uZENvbCxcbn06IHtcbiAgZmlyc3RDb2w6IFJlYWN0Tm9kZVxuICBzZWNvbmRDb2w6IFJlYWN0Tm9kZVxufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteC00IGdhcC15LTMgeGw6ZmxleC1yb3cgeGw6aXRlbXMtc3RhcnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLXktM1wiPntmaXJzdENvbH08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgbWF4LXctWzEwMCVdIGZsZXgtY29sIGdhcC15LTMgeGw6bXQtMCB4bDptYXgtdy1bNDQwcHhdXCI+XG4gICAgICAgIHtzZWNvbmRDb2x9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWN0aW9uUm93KHtcbiAgdGl0bGUsXG4gIHZhbHVlLFxufToge1xuICB0aXRsZTogc3RyaW5nXG4gIHZhbHVlOiBSZWFjdE5vZGVcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtdWktZmctc3VidGxlIGdyaWQgZ3JpZC1jb2xzLTIgaXRlbXMtY2VudGVyIGdhcC14LTQgcHgtNiBweS00XCI+XG4gICAgICA8VGV4dCBzaXplPVwic21hbGxcIiB3ZWlnaHQ9XCJwbHVzXCIgbGVhZGluZz1cImNvbXBhY3RcIj5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9UZXh0PlxuICAgICAge3R5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSA9PSBudWxsID8gKFxuICAgICAgICA8VGV4dFxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgbGVhZGluZz1cImNvbXBhY3RcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtcHJldHR5IHdoaXRlc3BhY2UtcHJlLWxpbmVcIlxuICAgICAgICA+XG4gICAgICAgICAge3ZhbHVlIHx8IFwiLVwifVxuICAgICAgICA8L1RleHQ+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj57dmFsdWV9PC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIFdpZGdldEhlYWRlcih7IHRpdGxlIH06IHsgdGl0bGU6IHN0cmluZyB9KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS00XCI+XG4gICAgICA8SGVhZGluZyBsZXZlbD1cImgyXCI+e3RpdGxlfTwvSGVhZGluZz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTaWRlYmFyTGluayh7XG4gIGhyZWYsXG4gIGxhYmVsLFxuICBkZXNjcmlwdGlvbixcbiAgaWNvbixcbn06IHtcbiAgaHJlZjogc3RyaW5nXG4gIGxhYmVsOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBpY29uPzogUmVhY3ROb2RlXG59KSB7XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17aHJlZn0gY2xhc3NOYW1lPVwiZ3JvdXAgb3V0bGluZS1ub25lXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTIgcHgtMiBwYi0yXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2hhZG93LWVsZXZhdGlvbi1jYXJkLXJlc3QgYmctdWktYmctY29tcG9uZW50IHRyYW5zaXRpb24tZmcgaG92ZXI6YmctdWktYmctY29tcG9uZW50LWhvdmVyIGFjdGl2ZTpiZy11aS1iZy1jb21wb25lbnQtcHJlc3NlZCBncm91cC1mb2N1cy12aXNpYmxlOnNoYWRvdy1ib3JkZXJzLWludGVyYWN0aXZlLXdpdGgtYWN0aXZlIHJvdW5kZWQtbWQgcHgtNCBweS0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgICAge2ljb24gJiYgPGRpdj57aWNvbn08L2Rpdj59XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGxlYWRpbmc9XCJjb21wYWN0XCIgd2VpZ2h0PVwicGx1c1wiPlxuICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgbGVhZGluZz1cImNvbXBhY3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtdWktZmctc3VidGxlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxUcmlhbmdsZVJpZ2h0TWluaSBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5mdW5jdGlvbiBTdW1tYXJ5V2lkZ2V0KHtcbiAgbGFiZWwsXG4gIHZhbHVlLFxuICB0b25lID0gXCJncmVlblwiLFxufToge1xuICBsYWJlbDogc3RyaW5nXG4gIHZhbHVlOiBzdHJpbmdcbiAgdG9uZT86IFwiZ3JlZW5cIiB8IFwibmV1dHJhbFwiXG59KSB7XG4gIHJldHVybiAoXG4gICAgPENvbnRhaW5lciBjbGFzc05hbWU9XCJweC02IHB5LTRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1zdWJ0bGUgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtM1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtgaC04IHctMSByb3VuZGVkLWZ1bGwgJHtcbiAgICAgICAgICAgIHRvbmUgPT09IFwiZ3JlZW5cIlxuICAgICAgICAgICAgICA/IFwiYmctdWktdGFnLWdyZWVuLWljb25cIlxuICAgICAgICAgICAgICA6IFwiYmctdWktdGFnLW5ldXRyYWwtaWNvblwiXG4gICAgICAgICAgfWB9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMFwiPlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIiBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLXN1YnRsZVwiPlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgd2VpZ2h0PVwicGx1c1wiXG4gICAgICAgICAgICBzaXplPVwieGxhcmdlXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRhYnVsYXItbnVtcyB0ZXh0LXVpLWZnLWJhc2UgYnJlYWstd29yZHNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt2YWx1ZX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Db250YWluZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gQ291cG9uR2VuZXJhbFNlY3Rpb24oeyBkZXRhaWwgfTogeyBkZXRhaWw6IENvdXBvbkVudGl0bGVtZW50RGV0YWlsIH0pIHtcbiAgY29uc3QgZW50aXRsZW1lbnQgPSBkZXRhaWwuY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50XG4gIGNvbnN0IGlzc3VhbmNlID0gZGV0YWlsLmNvdXBvbl9pc3N1YW5jZSB8fCBudWxsXG4gIGNvbnN0IGJlbmVmaXRTbmFwc2hvdCA9IGVudGl0bGVtZW50LmJlbmVmaXRfc25hcHNob3QgfHwgbnVsbFxuICBjb25zdCBzb3VyY2VTbmFwc2hvdCA9IGVudGl0bGVtZW50LnNvdXJjZV9zbmFwc2hvdCB8fCBudWxsXG4gIGNvbnN0IGNvZGUgPSBjb3Vwb25Db2RlKGVudGl0bGVtZW50KVxuICBjb25zdCBleHRlcm5hbCA9IGVudGl0bGVtZW50Lm9yaWdpbiA9PT0gXCJleHRlcm5hbFwiXG4gIGNvbnN0IHByb2R1Y3RMYWJlbCA9XG4gICAgc25hcHNob3RTdHJpbmcoc291cmNlU25hcHNob3QsIFwidGl0bGVcIikgfHxcbiAgICBzbmFwc2hvdFN0cmluZyhzb3VyY2VTbmFwc2hvdCwgXCJzb3VyY2VcIikgfHxcbiAgICBlbnRpdGxlbWVudC5wcm9kdWN0X2lkIHx8XG4gICAgXCJFeHRlcm5hbFwiXG4gIGNvbnN0IHZhcmlhbnRMYWJlbCA9XG4gICAgc25hcHNob3RTdHJpbmcoc291cmNlU25hcHNob3QsIFwidmFyaWFudF9pZFwiKSB8fCBlbnRpdGxlbWVudC52YXJpYW50X2lkIHx8IFwiLVwiXG4gIGNvbnN0IGlzc3VlZERhdGUgPSBlbnRpdGxlbWVudC5jcmVhdGVkX2F0IHx8IGlzc3VhbmNlPy5jcmVhdGVkX2F0IHx8IG51bGxcblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPVwiZGl2aWRlLXkgcC0wXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0xXCI+XG4gICAgICAgICAgICA8SGVhZGluZyBjbGFzc05hbWU9XCJicmVhay1hbGxcIj4je2NvZGV9PC9IZWFkaW5nPlxuICAgICAgICAgICAge2NvZGUgIT09IFwiLVwiICYmIChcbiAgICAgICAgICAgICAgPENvcHkgY29udGVudD17Y29kZX0gY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctc3VidGxlXCI+XG4gICAgICAgICAgICB7Zm9ybWF0RnVsbERhdGUoaXNzdWVkRGF0ZSl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPFN0YXR1c0JhZGdlIGNvbG9yPXtlbnRpdGxlbWVudFN0YXR1c0NvbG9yKGVudGl0bGVtZW50LnN0YXR1cyl9PlxuICAgICAgICAgIHtlbnRpdGxlbWVudC5zdGF0dXN9XG4gICAgICAgIDwvU3RhdHVzQmFkZ2U+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiRGF0ZSBpc3N1ZWRcIiB2YWx1ZT17Zm9ybWF0UmVsYXRpdmVEYXRlKGlzc3VlZERhdGUpfSAvPlxuICAgICAgPFNlY3Rpb25Sb3dcbiAgICAgICAgdGl0bGU9XCJDdXN0b21lclwiXG4gICAgICAgIHZhbHVlPXtlbnRpdGxlbWVudC5lbWFpbCB8fCBlbnRpdGxlbWVudC5jdXN0b21lcl9pZCB8fCBcIi1cIn1cbiAgICAgIC8+XG4gICAgICA8U2VjdGlvblJvdyB0aXRsZT1cIk9yaWdpblwiIHZhbHVlPXtlbnRpdGxlbWVudFNvdXJjZShlbnRpdGxlbWVudCl9IC8+XG4gICAgICA8U2VjdGlvblJvd1xuICAgICAgICB0aXRsZT17ZXh0ZXJuYWwgPyBcIlNvdXJjZVwiIDogXCJDb3Vwb24gcHJvZHVjdFwifVxuICAgICAgICB2YWx1ZT17cHJvZHVjdExhYmVsfVxuICAgICAgLz5cbiAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiU2VsbGVyIHNjb3BlXCIgdmFsdWU9e2VudGl0bGVtZW50U2VsbGVyU2NvcGUoZW50aXRsZW1lbnQpfSAvPlxuICAgICAgeyFleHRlcm5hbCAmJiA8U2VjdGlvblJvdyB0aXRsZT1cIlZhcmlhbnRcIiB2YWx1ZT17dmFyaWFudExhYmVsfSAvPn1cbiAgICAgIHshZXh0ZXJuYWwgJiYgKFxuICAgICAgICA8U2VjdGlvblJvd1xuICAgICAgICAgIHRpdGxlPVwiUXVhbnRpdHlcIlxuICAgICAgICAgIHZhbHVlPXtTdHJpbmcoXG4gICAgICAgICAgICBzbmFwc2hvdE51bWJlcihzb3VyY2VTbmFwc2hvdCwgXCJxdWFudGl0eVwiKSA/PyBpc3N1YW5jZT8ucXVhbnRpdHkgPz8gMSxcbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgIHRpdGxlPVwiQmVuZWZpdFwiXG4gICAgICAgIHZhbHVlPXtiZW5lZml0U25hcHNob3RMYWJlbChiZW5lZml0U25hcHNob3QpfVxuICAgICAgLz5cbiAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgIHRpdGxlPVwiRXhwaXJhdGlvbiBwb2xpY3lcIlxuICAgICAgICB2YWx1ZT17ZXhwaXJhdGlvblBvbGljeUxhYmVsKGJlbmVmaXRTbmFwc2hvdCl9XG4gICAgICAvPlxuICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJFeHBpcmF0aW9uIERhdGVcIiB2YWx1ZT17Zm9ybWF0RGF0ZShlbnRpdGxlbWVudC5leHBpcmVzX2F0KX0gLz5cbiAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiUmVkZWVtZWQgRGF0ZVwiIHZhbHVlPXtmb3JtYXREYXRlKGVudGl0bGVtZW50LnJlZGVlbWVkX2F0KX0gLz5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBSZWxhdGVkT3JkZXJTZWN0aW9uKHtcbiAgYXBpQmFzZSxcbiAgZGV0YWlsLFxufToge1xuICBhcGlCYXNlOiBBcGlCYXNlXG4gIGRldGFpbDogQ291cG9uRW50aXRsZW1lbnREZXRhaWxcbn0pIHtcbiAgY29uc3QgZW50aXRsZW1lbnQgPSBkZXRhaWwuY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50XG4gIGNvbnN0IG9yZGVyID0gZGV0YWlsLm9yZGVyIHx8IG51bGxcbiAgY29uc3Qgb3JkZXJJZCA9IG9yZGVyPy5pZCB8fCBlbnRpdGxlbWVudC5vcmRlcl9pZFxuICBpZiAoIW9yZGVySWQpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cInAtMFwiPlxuICAgICAgPFdpZGdldEhlYWRlciB0aXRsZT1cIlJlbGF0ZWQgT3JkZXJcIiAvPlxuICAgICAgPFNpZGViYXJMaW5rXG4gICAgICAgIGhyZWY9e29yZGVyRGV0YWlsUGF0aChhcGlCYXNlLCBvcmRlcklkKX1cbiAgICAgICAgbGFiZWw9e29yZGVyID8gb3JkZXJEaXNwbGF5SWQob3JkZXIpIDogb3JkZXJJZH1cbiAgICAgICAgZGVzY3JpcHRpb249e1xuICAgICAgICAgIG9yZGVyPy5jcmVhdGVkX2F0XG4gICAgICAgICAgICA/IGBPcmRlciBwbGFjZWQgJHtmb3JtYXRSZWxhdGl2ZURhdGUob3JkZXIuY3JlYXRlZF9hdCl9YFxuICAgICAgICAgICAgOiBcIlB1cmNoYXNlZCBjb3Vwb24gb3JkZXJcIlxuICAgICAgICB9XG4gICAgICAgIGljb249ezxTaG9wcGluZ0NhcnQgLz59XG4gICAgICAvPlxuICAgIDwvQ29udGFpbmVyPlxuICApXG59XG5cbmZ1bmN0aW9uIENvdXBvblNuYXBzaG90c1NlY3Rpb24oe1xuICBkZXRhaWwsXG59OiB7XG4gIGRldGFpbDogQ291cG9uRW50aXRsZW1lbnREZXRhaWxcbn0pIHtcbiAgY29uc3QgZW50aXRsZW1lbnQgPSBkZXRhaWwuY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50XG4gIGNvbnN0IGlzc3VhbmNlID0gZGV0YWlsLmNvdXBvbl9pc3N1YW5jZSB8fCBudWxsXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cInAtMFwiPlxuICAgICAgPFdpZGdldEhlYWRlciB0aXRsZT1cIkpTT05cIiAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTMgcHgtNiBwYi02XCI+XG4gICAgICAgIDxTbmFwc2hvdEJsb2NrXG4gICAgICAgICAgdGl0bGU9XCJCZW5lZml0IHNuYXBzaG90XCJcbiAgICAgICAgICB2YWx1ZT17ZW50aXRsZW1lbnQuYmVuZWZpdF9zbmFwc2hvdH1cbiAgICAgICAgLz5cbiAgICAgICAgPFNuYXBzaG90QmxvY2tcbiAgICAgICAgICB0aXRsZT1cIlNvdXJjZSBzbmFwc2hvdFwiXG4gICAgICAgICAgdmFsdWU9e2VudGl0bGVtZW50LnNvdXJjZV9zbmFwc2hvdH1cbiAgICAgICAgLz5cbiAgICAgICAgPFNuYXBzaG90QmxvY2tcbiAgICAgICAgICB0aXRsZT1cIklzc3VhbmNlIGNvbmZpZyBzbmFwc2hvdFwiXG4gICAgICAgICAgdmFsdWU9e2lzc3VhbmNlPy5jb25maWdfc25hcHNob3R9XG4gICAgICAgIC8+XG4gICAgICAgIDxTbmFwc2hvdEJsb2NrIHRpdGxlPVwiU2VsbGVyIHRhcmdldHNcIiB2YWx1ZT17ZW50aXRsZW1lbnQuc2VsbGVyX3RhcmdldHN9IC8+XG4gICAgICAgIDxTbmFwc2hvdEJsb2NrIHRpdGxlPVwiTWV0YWRhdGFcIiB2YWx1ZT17ZW50aXRsZW1lbnQubWV0YWRhdGF9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb3Vwb25TdW1tYXJ5U2VjdGlvbnMoe1xuICBkZXRhaWwsXG59OiB7XG4gIGRldGFpbDogQ291cG9uRW50aXRsZW1lbnREZXRhaWxcbn0pIHtcbiAgY29uc3QgZW50aXRsZW1lbnQgPSBkZXRhaWwuY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50XG4gIGNvbnN0IGlzc3VhbmNlID0gZGV0YWlsLmNvdXBvbl9pc3N1YW5jZSB8fCBudWxsXG4gIGNvbnN0IGJlbmVmaXRTbmFwc2hvdCA9IGVudGl0bGVtZW50LmJlbmVmaXRfc25hcHNob3QgfHwgbnVsbFxuICBjb25zdCBzb3VyY2VTbmFwc2hvdCA9IGVudGl0bGVtZW50LnNvdXJjZV9zbmFwc2hvdCB8fCBudWxsXG4gIGNvbnN0IG9yZGVyID0gZGV0YWlsLm9yZGVyIHx8IG51bGxcbiAgY29uc3QgbGluZVRvdGFsID0gc25hcHNob3ROdW1iZXIoc291cmNlU25hcHNob3QsIFwidG90YWxcIilcbiAgY29uc3QgZXh0ZXJuYWwgPSBlbnRpdGxlbWVudC5vcmlnaW4gPT09IFwiZXh0ZXJuYWxcIlxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdW1tYXJ5V2lkZ2V0XG4gICAgICAgIGxhYmVsPVwiQmVuZWZpdFwiXG4gICAgICAgIHZhbHVlPXtiZW5lZml0U25hcHNob3RMYWJlbChiZW5lZml0U25hcHNob3QpfVxuICAgICAgLz5cbiAgICAgIHshZXh0ZXJuYWwgJiYgKFxuICAgICAgICA8U3VtbWFyeVdpZGdldFxuICAgICAgICAgIGxhYmVsPVwiTGluZSBUb3RhbFwiXG4gICAgICAgICAgdmFsdWU9e2Zvcm1hdFNuYXBzaG90QW1vdW50KGxpbmVUb3RhbCwgb3JkZXI/LmN1cnJlbmN5X2NvZGUpfVxuICAgICAgICAgIHRvbmU9XCJuZXV0cmFsXCJcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7IWV4dGVybmFsICYmIChcbiAgICAgICAgPENvbnRhaW5lciBjbGFzc05hbWU9XCJkaXZpZGUteSBwLTBcIj5cbiAgICAgICAgICA8V2lkZ2V0SGVhZGVyIHRpdGxlPVwiQ2FtcGFpZ25cIiAvPlxuICAgICAgICAgIDxTZWN0aW9uUm93IHRpdGxlPVwiQ2FtcGFpZ25cIiB2YWx1ZT17Y2FtcGFpZ25TbmFwc2hvdExhYmVsKGJlbmVmaXRTbmFwc2hvdCl9IC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJQcm9tb3Rpb25cIiB2YWx1ZT17cHJvbW90aW9uU25hcHNob3RMYWJlbChiZW5lZml0U25hcHNob3QpfSAvPlxuICAgICAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgICAgICB0aXRsZT1cIlByb21vdGlvbiBzdGF0dXNcIlxuICAgICAgICAgICAgdmFsdWU9e3NuYXBzaG90U3RyaW5nKGJlbmVmaXRTbmFwc2hvdCwgXCJwcm9tb3Rpb25fc3RhdHVzXCIpIHx8IFwiLVwifVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQ29udGFpbmVyPlxuICAgICAgKX1cbiAgICAgIHshZXh0ZXJuYWwgJiYgKFxuICAgICAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgICAgIDxXaWRnZXRIZWFkZXIgdGl0bGU9XCJJc3N1YW5jZVwiIC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJTdGF0dXNcIiB2YWx1ZT17aXNzdWFuY2U/LnN0YXR1cyB8fCBcIi1cIn0gLz5cbiAgICAgICAgICA8U2VjdGlvblJvd1xuICAgICAgICAgICAgdGl0bGU9XCJJc3N1ZWQgLyBmYWlsZWRcIlxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICBpc3N1YW5jZVxuICAgICAgICAgICAgICAgID8gYCR7aXNzdWFuY2UuaXNzdWVkX2NvdW50ID8/IDB9IC8gJHtpc3N1YW5jZS5mYWlsZWRfY291bnQgPz8gMH1gXG4gICAgICAgICAgICAgICAgOiBcIi1cIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFNlY3Rpb25Sb3cgdGl0bGU9XCJDb25maWdcIiB2YWx1ZT17ZW50aXRsZW1lbnQuY29uZmlnX2lkIHx8IFwiLVwifSAvPlxuICAgICAgICAgIDxTZWN0aW9uUm93XG4gICAgICAgICAgICB0aXRsZT1cIlZhcmlhbnQgY29uZmlnXCJcbiAgICAgICAgICAgIHZhbHVlPXtlbnRpdGxlbWVudC52YXJpYW50X2NvbmZpZ19pZCB8fCBcIi1cIn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0NvbnRhaW5lcj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvdXBvbkRldGFpbFBhZ2VWaWV3KHsgYXBpQmFzZSB9OiB7IGFwaUJhc2U6IEFwaUJhc2UgfSkge1xuICBjb25zdCBpZCA9IGN1cnJlbnRDb3Vwb25EZXRhaWxJZChhcGlCYXNlKVxuICBjb25zdCBbZGV0YWlsLCBzZXREZXRhaWxdID0gdXNlU3RhdGU8Q291cG9uRW50aXRsZW1lbnREZXRhaWwgfCBudWxsPihudWxsKVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBhY3RpdmUgPSB0cnVlXG4gICAgYXN5bmMgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgc2V0TG9hZEVycm9yKFwiTWlzc2luZyBjb3Vwb24gaWRcIilcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldExvYWRFcnJvcihudWxsKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgYXBpRmV0Y2g8Q291cG9uRW50aXRsZW1lbnREZXRhaWw+KFxuICAgICAgICAgIGAke2FwaUJhc2V9L2NvdXBvbi1wcm9kdWN0cy9lbnRpdGxlbWVudHMvJHtlbmNvZGVVUklDb21wb25lbnQoaWQpfWAsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgIHNldERldGFpbChwYXlsb2FkKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgIDogXCJGYWlsZWQgdG8gbG9hZCBjb3Vwb24gZGV0YWlsc1wiXG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICBzZXRMb2FkRXJyb3IobWVzc2FnZSlcbiAgICAgICAgICB0b2FzdC5lcnJvcihtZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZvaWQgbG9hZCgpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWN0aXZlID0gZmFsc2VcbiAgICB9XG4gIH0sIFthcGlCYXNlLCBpZF0pXG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9XCJMb2FkaW5nIGNvdXBvblwiIC8+XG4gIH1cblxuICBpZiAobG9hZEVycm9yKSB7XG4gICAgcmV0dXJuIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPXtsb2FkRXJyb3J9IC8+XG4gIH1cblxuICBpZiAoIWRldGFpbCkge1xuICAgIHJldHVybiA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT1cIkNvdXBvbiBub3QgZm91bmRcIiAvPlxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VHdvQ29sdW1uTGF5b3V0XG4gICAgICBmaXJzdENvbD17XG4gICAgICAgIDw+XG4gICAgICAgICAgPENvdXBvbkdlbmVyYWxTZWN0aW9uIGRldGFpbD17ZGV0YWlsfSAvPlxuICAgICAgICAgIDxSZWxhdGVkT3JkZXJTZWN0aW9uIGFwaUJhc2U9e2FwaUJhc2V9IGRldGFpbD17ZGV0YWlsfSAvPlxuICAgICAgICAgIDxDb3Vwb25TbmFwc2hvdHNTZWN0aW9uIGRldGFpbD17ZGV0YWlsfSAvPlxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICAgIHNlY29uZENvbD17PENvdXBvblN1bW1hcnlTZWN0aW9ucyBkZXRhaWw9e2RldGFpbH0gLz59XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBFbnRpdGxlbWVudHNUYWJsZSh7XG4gIGVudGl0bGVtZW50cyxcbiAgbG9hZGluZyxcbiAgZXJyb3IsXG4gIG9uT3Blbixcbn06IHtcbiAgZW50aXRsZW1lbnRzOiBDb3Vwb25FbnRpdGxlbWVudFtdXG4gIGxvYWRpbmc6IGJvb2xlYW5cbiAgZXJyb3I6IHN0cmluZyB8IG51bGxcbiAgb25PcGVuOiAoZW50aXRsZW1lbnQ6IENvdXBvbkVudGl0bGVtZW50KSA9PiB2b2lkXG59KSB7XG4gIGlmIChsb2FkaW5nKSB7XG4gICAgcmV0dXJuIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPVwiTG9hZGluZyBjb3Vwb25zXCIgLz5cbiAgfVxuICBpZiAoZXJyb3IpIHtcbiAgICByZXR1cm4gPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9e2Vycm9yfSAvPlxuICB9XG4gIGlmICghZW50aXRsZW1lbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q291cG9uRW1wdHlTdGF0ZVxuICAgICAgICB0aXRsZT1cIk5vIGNvdXBvbnMgZm91bmRcIlxuICAgICAgICBkZXNjcmlwdGlvbj1cIlB1cmNoYXNlZCBjb3Vwb25zIHdpbGwgYXBwZWFyIGhlcmUgYWZ0ZXIgdGhleSBhcmUgaXNzdWVkLlwiXG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFRhYmxlPlxuICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TdGF0dXM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Q29kZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5EYXRlIGlzc3VlZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5PcmRlcjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5DdXN0b21lcjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5PcmlnaW48L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U2VsbGVyIHNjb3BlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlNvdXJjZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5FeHBpcmVzPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgIHtlbnRpdGxlbWVudHMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgPFRhYmxlLlJvd1xuICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctdWktYmctc3VidGxlXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uT3BlbihpdGVtKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgPFN0YXR1c0JhZGdlIGNvbG9yPXtlbnRpdGxlbWVudFN0YXR1c0NvbG9yKGl0ZW0uc3RhdHVzKX0+XG4gICAgICAgICAgICAgICAge2l0ZW0uc3RhdHVzfVxuICAgICAgICAgICAgICA8L1N0YXR1c0JhZGdlPlxuICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2l0ZW0uY29kZSB8fCBpdGVtLnNoYXJlZF9jb2RlIHx8IFwiLVwifTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5DZWxsIHRpdGxlPXtmb3JtYXRGdWxsRGF0ZShpdGVtLmNyZWF0ZWRfYXQpfT5cbiAgICAgICAgICAgICAge2Zvcm1hdFJlbGF0aXZlRGF0ZShpdGVtLmNyZWF0ZWRfYXQpfVxuICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2l0ZW0ub3JkZXJfaWQgfHwgXCItXCJ9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2l0ZW0uZW1haWwgfHwgaXRlbS5jdXN0b21lcl9pZCB8fCBcIi1cIn08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8VGFibGUuQ2VsbD57ZW50aXRsZW1lbnRTb3VyY2UoaXRlbSl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2VudGl0bGVtZW50U2VsbGVyU2NvcGUoaXRlbSl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgIHtzbmFwc2hvdFN0cmluZyhpdGVtLnNvdXJjZV9zbmFwc2hvdCwgXCJ0aXRsZVwiKSB8fFxuICAgICAgICAgICAgICAgIHNuYXBzaG90U3RyaW5nKGl0ZW0uc291cmNlX3NuYXBzaG90LCBcInNvdXJjZVwiKSB8fFxuICAgICAgICAgICAgICAgIGl0ZW0ucHJvZHVjdF9pZCB8fFxuICAgICAgICAgICAgICAgIFwiRXh0ZXJuYWxcIn1cbiAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5DZWxsPntmb3JtYXREYXRlKGl0ZW0uZXhwaXJlc19hdCl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICApKX1cbiAgICAgIDwvVGFibGUuQm9keT5cbiAgICA8L1RhYmxlPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb3Vwb25zUGFnZVZpZXcoe1xuICBhcGlCYXNlLFxuICB0aXRsZSxcbn06IHtcbiAgYXBpQmFzZTogQXBpQmFzZVxuICB0aXRsZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IFtlbnRpdGxlbWVudHMsIHNldEVudGl0bGVtZW50c10gPSB1c2VTdGF0ZTxDb3Vwb25FbnRpdGxlbWVudFtdPihbXSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2xvYWRFcnJvciwgc2V0TG9hZEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtmaWx0ZXIsIHNldEZpbHRlcl0gPSB1c2VTdGF0ZTxFbnRpdGxlbWVudEZpbHRlcj4oXCJhbGxcIilcblxuICBjb25zdCBsb2FkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRMb2FkRXJyb3IobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGFwaUZldGNoPHtcbiAgICAgICAgY3VzdG9tZXJfY291cG9uX2VudGl0bGVtZW50czogQ291cG9uRW50aXRsZW1lbnRbXVxuICAgICAgfT4oYCR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzL2VudGl0bGVtZW50c2ApXG4gICAgICBzZXRFbnRpdGxlbWVudHMocGF5bG9hZC5jdXN0b21lcl9jb3Vwb25fZW50aXRsZW1lbnRzIHx8IFtdKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkZhaWxlZCB0byBsb2FkIGNvdXBvbnNcIlxuICAgICAgc2V0TG9hZEVycm9yKG1lc3NhZ2UpXG4gICAgICB0b2FzdC5lcnJvcihtZXNzYWdlKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW2FwaUJhc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCBsb2FkKClcbiAgfSwgW2xvYWRdKVxuXG4gIGNvbnN0IG9wZW5EZXRhaWwgPSB1c2VDYWxsYmFjayhcbiAgICAoZW50aXRsZW1lbnQ6IENvdXBvbkVudGl0bGVtZW50KSA9PiB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGNvdXBvbkRldGFpbFBhdGgoYXBpQmFzZSwgZW50aXRsZW1lbnQuaWQpKVxuICAgIH0sXG4gICAgW2FwaUJhc2VdLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIGNsYXNzTmFtZT1cImRpdmlkZS15IHAtMFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS00XCI+XG4gICAgICAgIDxIZWFkaW5nIGxldmVsPVwiaDFcIj57dGl0bGV9PC9IZWFkaW5nPlxuICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIGxvYWQoKX0+XG4gICAgICAgICAgPEFycm93UGF0aCAvPlxuICAgICAgICAgIFJlZnJlc2hcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxUYWJzXG4gICAgICAgIHZhbHVlPXtmaWx0ZXJ9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT4gc2V0RmlsdGVyKHZhbHVlIGFzIEVudGl0bGVtZW50RmlsdGVyKX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJweC02IHB5LTIgYm9yZGVyLWJcIj5cbiAgICAgICAgICA8VGFicy5MaXN0PlxuICAgICAgICAgICAge2VudGl0bGVtZW50RmlsdGVycy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgICAgPFRhYnMuVHJpZ2dlciBrZXk9e2l0ZW0udmFsdWV9IHZhbHVlPXtpdGVtLnZhbHVlfT5cbiAgICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cbiAgICAgICAgICAgICAgPC9UYWJzLlRyaWdnZXI+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1RhYnMuTGlzdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtlbnRpdGxlbWVudEZpbHRlcnMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgPFRhYnMuQ29udGVudCBrZXk9e2l0ZW0udmFsdWV9IHZhbHVlPXtpdGVtLnZhbHVlfT5cbiAgICAgICAgICAgIDxFbnRpdGxlbWVudHNUYWJsZVxuICAgICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgICAgICBlcnJvcj17bG9hZEVycm9yfVxuICAgICAgICAgICAgICBvbk9wZW49e29wZW5EZXRhaWx9XG4gICAgICAgICAgICAgIGVudGl0bGVtZW50cz17XG4gICAgICAgICAgICAgICAgaXRlbS52YWx1ZSA9PT0gXCJhbGxcIlxuICAgICAgICAgICAgICAgICAgPyBlbnRpdGxlbWVudHNcbiAgICAgICAgICAgICAgICAgIDogZW50aXRsZW1lbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAoZW50aXRsZW1lbnQpID0+IGVudGl0bGVtZW50LnN0YXR1cyA9PT0gaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVGFicy5Db250ZW50PlxuICAgICAgICApKX1cbiAgICAgIDwvVGFicz5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ291cG9uUHJvZHVjdHNQYWdlVmlldyh7XG4gIGFwaUJhc2UsXG4gIHRpdGxlLFxuICBhbGxvd1Byb21vdGlvbk1pcnJvciA9IGZhbHNlLFxufToge1xuICBhcGlCYXNlOiBBcGlCYXNlXG4gIHRpdGxlOiBzdHJpbmdcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3I/OiBib29sZWFuXG59KSB7XG4gIHJldHVybiAoXG4gICAgPENvdXBvblByb2R1Y3RzUGFnZVxuICAgICAgYXBpQmFzZT17YXBpQmFzZX1cbiAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgIGFsbG93UHJvbW90aW9uTWlycm9yPXthbGxvd1Byb21vdGlvbk1pcnJvcn1cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIExlZ2FjeUNvdXBvblByb2R1Y3RzUGFnZVZpZXcoe1xuICBhcGlCYXNlLFxuICB0aXRsZSxcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3IgPSBmYWxzZSxcbn06IHtcbiAgYXBpQmFzZTogQXBpQmFzZVxuICB0aXRsZTogc3RyaW5nXG4gIGFsbG93UHJvbW90aW9uTWlycm9yPzogYm9vbGVhblxufSkge1xuICBjb25zdCBbcHJvZHVjdHMsIHNldFByb2R1Y3RzXSA9IHVzZVN0YXRlPENvdXBvblByb2R1Y3RSb3dbXT4oW10pXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPE9wdGlvbnNQYXlsb2FkPih7fSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2xvYWRFcnJvciwgc2V0TG9hZEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFttb2RhbE9wZW4sIHNldE1vZGFsT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NhdmluZywgc2V0U2F2aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbYWN0aXZlU3RlcCwgc2V0QWN0aXZlU3RlcF0gPSB1c2VTdGF0ZTxXaXphcmRTdGVwPihcImRldGFpbHNcIilcbiAgY29uc3QgW3Byb2R1Y3RGb3JtLCBzZXRQcm9kdWN0Rm9ybV0gPSB1c2VTdGF0ZTxQcm9kdWN0Rm9ybVN0YXRlPihlbXB0eVByb2R1Y3QpXG4gIGNvbnN0IFtjb3Vwb25Gb3JtLCBzZXRDb3Vwb25Gb3JtXSA9IHVzZVN0YXRlPENvdXBvbkZvcm1TdGF0ZT4oZW1wdHlDb3Vwb24pXG4gIGNvbnN0IFtjYW1wYWlnbkZvcm0sIHNldENhbXBhaWduRm9ybV0gPVxuICAgIHVzZVN0YXRlPENhbXBhaWduRm9ybVN0YXRlPihlbXB0eUNhbXBhaWduKVxuICBjb25zdCBwcm9tcHQgPSB1c2VQcm9tcHQoKVxuXG4gIGNvbnN0IGNvdXBvbkJhc2UgPSBgJHthcGlCYXNlfS9jb3Vwb24tcHJvZHVjdHNgXG5cbiAgY29uc3QgbG9hZCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgc2V0TG9hZEVycm9yKG51bGwpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtwcm9kdWN0c1BheWxvYWQsIG9wdGlvbnNQYXlsb2FkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgYXBpRmV0Y2g8eyBjb3Vwb25fcHJvZHVjdHM6IENvdXBvblByb2R1Y3RSb3dbXSB9Pihjb3Vwb25CYXNlKSxcbiAgICAgICAgYXBpRmV0Y2g8T3B0aW9uc1BheWxvYWQ+KGAke2NvdXBvbkJhc2V9L29wdGlvbnNgKSxcbiAgICAgIF0pXG4gICAgICBzZXRQcm9kdWN0cyhwcm9kdWN0c1BheWxvYWQuY291cG9uX3Byb2R1Y3RzIHx8IFtdKVxuICAgICAgc2V0T3B0aW9ucyhvcHRpb25zUGF5bG9hZCB8fCB7fSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICA6IFwiRmFpbGVkIHRvIGxvYWQgY291cG9uIHByb2R1Y3RzXCJcbiAgICAgIHNldExvYWRFcnJvcihtZXNzYWdlKVxuICAgICAgdG9hc3QuZXJyb3IobWVzc2FnZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH0sIFtjb3Vwb25CYXNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHZvaWQgbG9hZCgpXG4gIH0sIFtsb2FkXSlcblxuICBjb25zdCBvcHRpb25EZWZhdWx0cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNhbGVzX2NoYW5uZWxfaWQ6IG9wdGlvbnMuc2FsZXNfY2hhbm5lbHM/LlswXT8uaWQgfHwgXCJcIixcbiAgICAgIGN1cnJlbmN5X2NvZGU6XG4gICAgICAgIG9wdGlvbnMuY3VycmVuY2llcz8uZmluZCgoY3VycmVuY3kpID0+IGN1cnJlbmN5LmlzX2RlZmF1bHQpPy5jb2RlIHx8XG4gICAgICAgIG9wdGlvbnMuY3VycmVuY2llcz8uWzBdPy5jb2RlIHx8XG4gICAgICAgIFwiXCIsXG4gICAgfSksXG4gICAgW29wdGlvbnNdLFxuICApXG5cbiAgY29uc3QgY3VycmVuY2llcyA9IG9wdGlvbnMuY3VycmVuY2llcyB8fCBbXVxuICBjb25zdCBzdXBwb3J0ZWRDdXJyZW5jeUNvZGVzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBuZXcgU2V0KGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSkpLFxuICAgIFtjdXJyZW5jaWVzXSxcbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZVByb2R1Y3QgPVxuICAgIChmaWVsZDoga2V5b2YgUHJvZHVjdEZvcm1TdGF0ZSkgPT5cbiAgICAoZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgIFtmaWVsZF06IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgIH0pKVxuICAgIH1cblxuICBjb25zdCB1cGRhdGVDb3Vwb24gPVxuICAgIChmaWVsZDoga2V5b2YgQ291cG9uRm9ybVN0YXRlKSA9PlxuICAgIChldmVudDogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIFtmaWVsZF06IGV2ZW50LnRhcmdldC52YWx1ZSB9KSlcbiAgICB9XG5cbiAgY29uc3QgdXBkYXRlQ2FtcGFpZ24gPVxuICAgIChmaWVsZDoga2V5b2YgQ2FtcGFpZ25Gb3JtU3RhdGUpID0+XG4gICAgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Q2FtcGFpZ25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICBbZmllbGRdOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICB9KSlcbiAgICB9XG5cbiAgZnVuY3Rpb24gb3BlbkNyZWF0ZSgpIHtcbiAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSBvcHRpb25EZWZhdWx0cy5jdXJyZW5jeV9jb2RlXG4gICAgc2V0UHJvZHVjdEZvcm0oe1xuICAgICAgLi4uZW1wdHlQcm9kdWN0LFxuICAgICAgLi4ub3B0aW9uRGVmYXVsdHMsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgLi4uZW1wdHlWYXJpYW50LFxuICAgICAgICAgIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBvdmVycmlkZV9jdXJyZW5jeV9jb2RlOiBjdXJyZW5jeUNvZGUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgc2V0Q291cG9uRm9ybSh7IC4uLmVtcHR5Q291cG9uLCBjdXJyZW5jeV9jb2RlOiBjdXJyZW5jeUNvZGUgfSlcbiAgICBzZXRDYW1wYWlnbkZvcm0oZW1wdHlDYW1wYWlnbilcbiAgICBzZXRBY3RpdmVTdGVwKFwiZGV0YWlsc1wiKVxuICAgIHNldE1vZGFsT3Blbih0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlbkVkaXQocm93OiBDb3Vwb25Qcm9kdWN0Um93KSB7XG4gICAgY29uc3QgZm9ybXMgPSBmb3JtRnJvbVJvdyhyb3csIG9wdGlvbkRlZmF1bHRzLmN1cnJlbmN5X2NvZGUpXG4gICAgc2V0UHJvZHVjdEZvcm0oe1xuICAgICAgLi4uZm9ybXMucHJvZHVjdCxcbiAgICAgIHZhcmlhbnRzOiBmb3Jtcy5wcm9kdWN0LnZhcmlhbnRzLmxlbmd0aFxuICAgICAgICA/IGZvcm1zLnByb2R1Y3QudmFyaWFudHNcbiAgICAgICAgOiBbeyAuLi5lbXB0eVZhcmlhbnQgfV0sXG4gICAgfSlcbiAgICBzZXRDb3Vwb25Gb3JtKGZvcm1zLmNvdXBvbilcbiAgICBzZXRDYW1wYWlnbkZvcm0oZm9ybXMuY2FtcGFpZ24pXG4gICAgc2V0QWN0aXZlU3RlcChcImRldGFpbHNcIilcbiAgICBzZXRNb2RhbE9wZW4odHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFZhcmlhbnQoaW5kZXg6IG51bWJlciwgcGF0Y2g6IFBhcnRpYWw8VmFyaWFudEZvcm1TdGF0ZT4pIHtcbiAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YXJpYW50czogY3VycmVudC52YXJpYW50cy5tYXAoKHZhcmlhbnQsIHZhcmlhbnRJbmRleCkgPT5cbiAgICAgICAgdmFyaWFudEluZGV4ID09PSBpbmRleCA/IHsgLi4udmFyaWFudCwgLi4ucGF0Y2ggfSA6IHZhcmlhbnQsXG4gICAgICApLFxuICAgIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkVmFyaWFudCgpIHtcbiAgICBjb25zdCBjdXJyZW5jeUNvZGUgPVxuICAgICAgY291cG9uRm9ybS5jdXJyZW5jeV9jb2RlIHx8IG9wdGlvbkRlZmF1bHRzLmN1cnJlbmN5X2NvZGVcbiAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICAuLi5jdXJyZW50LnZhcmlhbnRzLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZW1wdHlWYXJpYW50LFxuICAgICAgICAgIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBvdmVycmlkZV9jdXJyZW5jeV9jb2RlOiBjdXJyZW5jeUNvZGUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlVmFyaWFudChpbmRleDogbnVtYmVyKSB7XG4gICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgdmFyaWFudHM6IGN1cnJlbnQudmFyaWFudHMuZmlsdGVyKFxuICAgICAgICAoXywgdmFyaWFudEluZGV4KSA9PiB2YXJpYW50SW5kZXggIT09IGluZGV4LFxuICAgICAgKSxcbiAgICB9KSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2R1Y3RQYXlsb2FkKGluY2x1ZGVWYXJpYW50czogYm9vbGVhbikge1xuICAgIGNvbnN0IHByb2R1Y3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgdGl0bGU6IHByb2R1Y3RGb3JtLnRpdGxlLFxuICAgICAgc3VidGl0bGU6IHByb2R1Y3RGb3JtLnN1YnRpdGxlIHx8IG51bGwsXG4gICAgICBoYW5kbGU6IHByb2R1Y3RGb3JtLmhhbmRsZSB8fCBudWxsLFxuICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3RGb3JtLmRlc2NyaXB0aW9uIHx8IG51bGwsXG4gICAgICBzdGF0dXM6IHByb2R1Y3RGb3JtLnN0YXR1cyxcbiAgICAgIHRodW1ibmFpbDogcHJvZHVjdEZvcm0udGh1bWJuYWlsIHx8IG51bGwsXG4gICAgICBkaXNjb3VudGFibGU6IHByb2R1Y3RGb3JtLmRpc2NvdW50YWJsZSxcbiAgICAgIHR5cGVfaWQ6IHByb2R1Y3RGb3JtLnR5cGVfaWQgfHwgbnVsbCxcbiAgICAgIGNvbGxlY3Rpb25faWQ6IHByb2R1Y3RGb3JtLmNvbGxlY3Rpb25faWQgfHwgbnVsbCxcbiAgICAgIGNhdGVnb3JpZXM6IHByb2R1Y3RGb3JtLmNhdGVnb3J5X2lkXG4gICAgICAgID8gW3sgaWQ6IHByb2R1Y3RGb3JtLmNhdGVnb3J5X2lkIH1dXG4gICAgICAgIDogW10sXG4gICAgICB0YWdzOiBwcm9kdWN0Rm9ybS50YWdfaWQgPyBbeyBpZDogcHJvZHVjdEZvcm0udGFnX2lkIH1dIDogW10sXG4gICAgICBzYWxlc19jaGFubmVsczogcHJvZHVjdEZvcm0uc2FsZXNfY2hhbm5lbF9pZFxuICAgICAgICA/IFt7IGlkOiBwcm9kdWN0Rm9ybS5zYWxlc19jaGFubmVsX2lkIH1dXG4gICAgICAgIDogW10sXG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVWYXJpYW50cykge1xuICAgICAgcHJvZHVjdC52YXJpYW50cyA9IHByb2R1Y3RGb3JtLnZhcmlhbnRzLm1hcCgodmFyaWFudCkgPT4gKHtcbiAgICAgICAgdGl0bGU6IHZhcmlhbnQudGl0bGUsXG4gICAgICAgIHNrdTogdmFyaWFudC5za3UgfHwgbnVsbCxcbiAgICAgICAgbWFuYWdlX2ludmVudG9yeTogZmFsc2UsXG4gICAgICAgIGFsbG93X2JhY2tvcmRlcjogdHJ1ZSxcbiAgICAgICAgcHJpY2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3VycmVuY3lfY29kZTogdmFyaWFudC5jdXJyZW5jeV9jb2RlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgYW1vdW50OiBOdW1iZXIodmFyaWFudC5hbW91bnQpIHx8IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pKVxuICAgIH1cblxuICAgIHJldHVybiBwcm9kdWN0XG4gIH1cblxuICBmdW5jdGlvbiB2YXJpYW50T3ZlcnJpZGVzKCkge1xuICAgIHJldHVybiBwcm9kdWN0Rm9ybS52YXJpYW50c1xuICAgICAgLm1hcCgodmFyaWFudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCF2YXJpYW50Lm92ZXJyaWRlX2VuYWJsZWQpIHJldHVybiBudWxsXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFyaWFudF9pbmRleDogaW5kZXgsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBiZW5lZml0X3R5cGU6IHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlLFxuICAgICAgICAgIGFtb3VudDpcbiAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiXG4gICAgICAgICAgICAgID8gbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfYW1vdW50KVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgcGVyY2VudGFnZTpcbiAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICA/IG51bWJlck9yTnVsbCh2YXJpYW50Lm92ZXJyaWRlX3BlcmNlbnRhZ2UpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBjdXJyZW5jeV9jb2RlOlxuICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgPyB2YXJpYW50Lm92ZXJyaWRlX2N1cnJlbmN5X2NvZGUudHJpbSgpLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgICAgICBjb3Vwb25Gb3JtLmN1cnJlbmN5X2NvZGVcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVGb3JtKCkge1xuICAgIGlmICghcHJvZHVjdEZvcm0udGl0bGUudHJpbSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9kdWN0IHRpdGxlIGlzIHJlcXVpcmVkXCIpXG4gICAgfVxuICAgIGlmICghcHJvZHVjdEZvcm0uaWQgJiYgIXByb2R1Y3RGb3JtLnZhcmlhbnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXQgbGVhc3Qgb25lIHByb2R1Y3QgdmFyaWFudCBpcyByZXF1aXJlZFwiKVxuICAgIH1cbiAgICBpZiAoIWN1cnJlbmNpZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBZGQgYSBzdXBwb3J0ZWQgY3VycmVuY3kgdG8gdGhlIHN0b3JlIGJlZm9yZSBjb250aW51aW5nXCIpXG4gICAgfVxuICAgIGlmICghcHJvZHVjdEZvcm0uaWQpIHtcbiAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBwcm9kdWN0Rm9ybS52YXJpYW50cykge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZEN1cnJlbmN5Q29kZXMuaGFzKHZhcmlhbnQuY3VycmVuY3lfY29kZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlbGVjdCBhbiBhdmFpbGFibGUgY3VycmVuY3kgZm9yICR7dmFyaWFudC50aXRsZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNvdXBvbkZvcm0uYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgICBudW1iZXJPck51bGwoY291cG9uRm9ybS5hbW91bnQpID09IG51bGxcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgcG9zaXRpdmUgY291cG9uIGFtb3VudCBpcyByZXF1aXJlZFwiKVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIiAmJlxuICAgICAgIXN1cHBvcnRlZEN1cnJlbmN5Q29kZXMuaGFzKGNvdXBvbkZvcm0uY3VycmVuY3lfY29kZSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBhbiBhdmFpbGFibGUgY291cG9uIGN1cnJlbmN5XCIpXG4gICAgfVxuICAgIGlmIChjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSA9PT0gXCJwZXJjZW50YWdlXCIpIHtcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBudW1iZXJPck51bGwoY291cG9uRm9ybS5wZXJjZW50YWdlKVxuICAgICAgaWYgKHBlcmNlbnRhZ2UgPT0gbnVsbCB8fCBwZXJjZW50YWdlID4gMTAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdXBvbiBwZXJjZW50YWdlIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDBcIilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgY291cG9uRm9ybS5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCIgJiZcbiAgICAgICFjb3Vwb25Gb3JtLnNoYXJlZF9jb2RlLnRyaW0oKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBzaGFyZWQgY291cG9uIGNvZGUgaXMgcmVxdWlyZWRcIilcbiAgICB9XG4gICAgaWYgKGNvdXBvbkZvcm0uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCIpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSBuZXcgRGF0ZShjb3Vwb25Gb3JtLmV4cGlyYXRpb25fZGF0ZSlcbiAgICAgIGlmICghY291cG9uRm9ybS5leHBpcmF0aW9uX2RhdGUgfHwgTnVtYmVyLmlzTmFOKGV4cGlyYXRpb24uZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHZhbGlkIGZpeGVkIGV4cGlyYXRpb24gZGF0ZSBpcyByZXF1aXJlZFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGUgPT09IFwiZHVyYXRpb25cIikge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBOdW1iZXIoY291cG9uRm9ybS5leHBpcmF0aW9uX2R1cmF0aW9uKVxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGR1cmF0aW9uKSB8fCBkdXJhdGlvbiA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBwb3NpdGl2ZSB3aG9sZS1udW1iZXIgZXhwaXJhdGlvbiBkdXJhdGlvbiBpcyByZXF1aXJlZFwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY291cG9uRm9ybS5leHBpcmF0aW9uX2NhcF9hdCkge1xuICAgICAgY29uc3QgZXhwaXJhdGlvbkNhcCA9IG5ldyBEYXRlKGNvdXBvbkZvcm0uZXhwaXJhdGlvbl9jYXBfYXQpXG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKGV4cGlyYXRpb25DYXAuZ2V0VGltZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHZhbGlkIGV4cGlyYXRpb24gY2FwIGRhdGUgaXMgcmVxdWlyZWRcIilcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHByb2R1Y3RGb3JtLnZhcmlhbnRzKSB7XG4gICAgICBpZiAoIXZhcmlhbnQub3ZlcnJpZGVfZW5hYmxlZCkgY29udGludWVcbiAgICAgIGlmIChcbiAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCIgJiZcbiAgICAgICAgbnVtYmVyT3JOdWxsKHZhcmlhbnQub3ZlcnJpZGVfYW1vdW50KSA9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBIHBvc2l0aXZlIGNvdXBvbiBhbW91bnQgaXMgcmVxdWlyZWQgZm9yICR7dmFyaWFudC50aXRsZX1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlID09PSBcImZpeGVkX2Ftb3VudFwiICYmXG4gICAgICAgICFzdXBwb3J0ZWRDdXJyZW5jeUNvZGVzLmhhcyh2YXJpYW50Lm92ZXJyaWRlX2N1cnJlbmN5X2NvZGUpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTZWxlY3QgYW4gYXZhaWxhYmxlIGNvdXBvbiBjdXJyZW5jeSBmb3IgJHt2YXJpYW50LnRpdGxlfWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmICh2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJwZXJjZW50YWdlXCIpIHtcbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IG51bWJlck9yTnVsbCh2YXJpYW50Lm92ZXJyaWRlX3BlcmNlbnRhZ2UpXG4gICAgICAgIGlmIChwZXJjZW50YWdlID09IG51bGwgfHwgcGVyY2VudGFnZSA+IDEwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDb3Vwb24gcGVyY2VudGFnZSBmb3IgJHt2YXJpYW50LnRpdGxlfSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAwYCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgYWxsb3dQcm9tb3Rpb25NaXJyb3IgJiZcbiAgICAgIGNhbXBhaWduRm9ybS5tb2RlID09PSBcImV4aXN0aW5nXCIgJiZcbiAgICAgICFjYW1wYWlnbkZvcm0uY2FtcGFpZ25faWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBhbiBleGlzdGluZyBjYW1wYWlnblwiKVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBhbGxvd1Byb21vdGlvbk1pcnJvciAmJlxuICAgICAgY2FtcGFpZ25Gb3JtLm1vZGUgPT09IFwibmV3XCIgJiZcbiAgICAgICghY2FtcGFpZ25Gb3JtLm5hbWUudHJpbSgpIHx8ICFjYW1wYWlnbkZvcm0uY2FtcGFpZ25faWRlbnRpZmllci50cmltKCkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW1wYWlnbiBuYW1lIGFuZCBpZGVudGlmaWVyIGFyZSByZXF1aXJlZFwiKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN5bmNWYXJpYW50T3ZlcnJpZGVzKHByb2R1Y3RJZDogc3RyaW5nKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwcm9kdWN0Rm9ybS52YXJpYW50cy5tYXAoYXN5bmMgKHZhcmlhbnQpID0+IHtcbiAgICAgICAgaWYgKCF2YXJpYW50LmlkKSByZXR1cm5cblxuICAgICAgICBpZiAoIXZhcmlhbnQub3ZlcnJpZGVfZW5hYmxlZCkge1xuICAgICAgICAgIGlmICh2YXJpYW50Lm92ZXJyaWRlX2NvbmZpZ19pZCkge1xuICAgICAgICAgICAgYXdhaXQgYXBpRmV0Y2goYCR7Y291cG9uQmFzZX0vJHtwcm9kdWN0SWR9L3ZhcmlhbnRzYCwge1xuICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgdmFyaWFudF9pZDogdmFyaWFudC5pZCxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGFwaUZldGNoKGAke2NvdXBvbkJhc2V9LyR7cHJvZHVjdElkfS92YXJpYW50c2AsIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHZhcmlhbnRfaWQ6IHZhcmlhbnQuaWQsXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgYmVuZWZpdF90eXBlOiB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSxcbiAgICAgICAgICAgIGFtb3VudDpcbiAgICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgICA/IG51bWJlck9yTnVsbCh2YXJpYW50Lm92ZXJyaWRlX2Ftb3VudClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBwZXJjZW50YWdlOlxuICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSA9PT0gXCJwZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICA/IG51bWJlck9yTnVsbCh2YXJpYW50Lm92ZXJyaWRlX3BlcmNlbnRhZ2UpXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgY3VycmVuY3lfY29kZTpcbiAgICAgICAgICAgICAgdmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgICA/IHZhcmlhbnQub3ZlcnJpZGVfY3VycmVuY3lfY29kZS50cmltKCkudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAgICAgICAgICAgY291cG9uRm9ybS5jdXJyZW5jeV9jb2RlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2F2ZVByb2R1Y3QoKSB7XG4gICAgc2V0U2F2aW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlRm9ybSgpXG4gICAgICBjb25zdCBpc0VkaXQgPSBCb29sZWFuKHByb2R1Y3RGb3JtLmlkKVxuICAgICAgY29uc3QgcGF0aCA9IGlzRWRpdCA/IGAke2NvdXBvbkJhc2V9LyR7cHJvZHVjdEZvcm0uaWR9YCA6IGNvdXBvbkJhc2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGlzRWRpdCA/IFwiUEFUQ0hcIiA6IFwiUE9TVFwiXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBwcm9kdWN0OiBwcm9kdWN0UGF5bG9hZCghaXNFZGl0KSxcbiAgICAgICAgY291cG9uOiBidWlsZENvdXBvblBheWxvYWQoY291cG9uRm9ybSwgYWxsb3dQcm9tb3Rpb25NaXJyb3IpLFxuICAgICAgICBjYW1wYWlnbjogYnVpbGRDYW1wYWlnblBheWxvYWQoY2FtcGFpZ25Gb3JtLCBhbGxvd1Byb21vdGlvbk1pcnJvciksXG4gICAgICAgIHNlbGxlcl9pZDogcHJvZHVjdEZvcm0uc2VsbGVyX2lkIHx8IG51bGwsXG4gICAgICAgIHZhcmlhbnRfb3ZlcnJpZGVzOiBpc0VkaXQgPyBbXSA6IHZhcmlhbnRPdmVycmlkZXMoKSxcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYXBpRmV0Y2gocGF0aCwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgICAgfSlcbiAgICAgIGlmIChpc0VkaXQpIHtcbiAgICAgICAgYXdhaXQgc3luY1ZhcmlhbnRPdmVycmlkZXMocHJvZHVjdEZvcm0uaWQpXG4gICAgICB9XG4gICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICBpc0VkaXQgPyBcIkNvdXBvbiBwcm9kdWN0IHVwZGF0ZWRcIiA6IFwiQ291cG9uIHByb2R1Y3QgY3JlYXRlZFwiLFxuICAgICAgKVxuICAgICAgc2V0TW9kYWxPcGVuKGZhbHNlKVxuICAgICAgYXdhaXQgbG9hZCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRvYXN0LmVycm9yKFxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgOiBcIkZhaWxlZCB0byBzYXZlIGNvdXBvbiBwcm9kdWN0XCIsXG4gICAgICApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVQcm9kdWN0KHJvdzogQ291cG9uUHJvZHVjdFJvdykge1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHByb21wdCh7XG4gICAgICB0aXRsZTogXCJSZW1vdmUgY291cG9uIHByb2R1Y3Q/XCIsXG4gICAgICBkZXNjcmlwdGlvbjogYFRoaXMgcmVtb3ZlcyBjb3Vwb24gaXNzdWFuY2UgZnJvbSAke1xuICAgICAgICByb3cucHJvZHVjdC50aXRsZSB8fCByb3cucHJvZHVjdC5pZFxuICAgICAgfS4gVGhlIHVuZGVybHlpbmcgTWVkdXNhIHByb2R1Y3Qgd2lsbCByZW1haW4gYXZhaWxhYmxlLmAsXG4gICAgICBjb25maXJtVGV4dDogXCJSZW1vdmUgcHJvZHVjdFwiLFxuICAgICAgY2FuY2VsVGV4dDogXCJDYW5jZWxcIixcbiAgICAgIHZhcmlhbnQ6IFwiZGFuZ2VyXCIsXG4gICAgfSlcbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBpRmV0Y2goYCR7Y291cG9uQmFzZX0vJHtyb3cucHJvZHVjdC5pZH1gLCB7IG1ldGhvZDogXCJERUxFVEVcIiB9KVxuICAgICAgdG9hc3Quc3VjY2VzcyhcIkNvdXBvbiBjb25maWd1cmF0aW9uIHJlbW92ZWRcIilcbiAgICAgIGF3YWl0IGxvYWQoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICAgIDogXCJGYWlsZWQgdG8gcmVtb3ZlIGNvdXBvbiBwcm9kdWN0XCIsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gbWlycm9yUHJvbW90aW9uKHJvdzogQ291cG9uUHJvZHVjdFJvdykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhcGlGZXRjaChcbiAgICAgICAgYC9hZG1pbi9jb3Vwb24tcHJvZHVjdHMvJHtyb3cucHJvZHVjdC5pZH0vbWlycm9yLXByb21vdGlvbmAsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHt9KSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIHRvYXN0LnN1Y2Nlc3MoXCJQcm9tb3Rpb24gbWlycm9yIGNyZWF0ZWRcIilcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIk1pcnJvciBmYWlsZWRcIilcbiAgICB9XG4gIH1cblxuICBjb25zdCBjdXJyZW50U3RlcEluZGV4ID0gc3RlcHMuaW5kZXhPZihhY3RpdmVTdGVwKVxuICBjb25zdCBjYW5Hb0JhY2sgPSBjdXJyZW50U3RlcEluZGV4ID4gMFxuICBjb25zdCBjYW5Hb05leHQgPSBjdXJyZW50U3RlcEluZGV4IDwgc3RlcHMubGVuZ3RoIC0gMVxuICBjb25zdCBzaG93Q2FtcGFpZ25TdGVwID0gYWxsb3dQcm9tb3Rpb25NaXJyb3JcbiAgY29uc3QgdmlzaWJsZVN0ZXBzID0gc2hvd0NhbXBhaWduU3RlcFxuICAgID8gc3RlcHNcbiAgICA6IHN0ZXBzLmZpbHRlcigoc3RlcCkgPT4gc3RlcCAhPT0gXCJjYW1wYWlnblwiKVxuXG4gIHJldHVybiAoXG4gICAgPENvbnRhaW5lciBjbGFzc05hbWU9XCJkaXZpZGUteSBwLTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTYgcHktNFwiPlxuICAgICAgICA8SGVhZGluZyBsZXZlbD1cImgxXCI+e3RpdGxlfTwvSGVhZGluZz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0yXCI+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gdm9pZCBsb2FkKCl9PlxuICAgICAgICAgICAgPEFycm93UGF0aCAvPlxuICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgb25DbGljaz17b3BlbkNyZWF0ZX0+XG4gICAgICAgICAgICA8UGx1cyAvPlxuICAgICAgICAgICAgQ3JlYXRlXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgPENvdXBvbkVtcHR5U3RhdGUgdGl0bGU9XCJMb2FkaW5nIGNvdXBvbiBwcm9kdWN0c1wiIC8+XG4gICAgICApIDogbG9hZEVycm9yID8gKFxuICAgICAgICA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT17bG9hZEVycm9yfSAvPlxuICAgICAgKSA6IHByb2R1Y3RzLmxlbmd0aCA/IChcbiAgICAgICAgPFRhYmxlPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Qcm9kdWN0PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TdGF0dXM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkJlbmVmaXQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNvZGU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNhbXBhaWduPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Jc3N1ZWQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsIC8+XG4gICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgIHtwcm9kdWN0cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSByb3cuY291cG9uX3Byb2R1Y3RfY29uZmlnXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e3Jvdy5pZH0+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Jvdy5wcm9kdWN0LnRpdGxlIHx8IHJvdy5wcm9kdWN0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cm93LnByb2R1Y3QuaGFuZGxlIHx8IHJvdy5wcm9kdWN0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFN0YXR1c0JhZGdlIGNvbG9yPXtwcm9kdWN0U3RhdHVzQ29sb3Iocm93LnByb2R1Y3Quc3RhdHVzKX0+XG4gICAgICAgICAgICAgICAgICAgICAge3Jvdy5wcm9kdWN0LnN0YXR1cyB8fCBcImRyYWZ0XCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvU3RhdHVzQmFkZ2U+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57YmVuZWZpdExhYmVsKGNvbmZpZyl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIHtjb25maWcuY29kZV9zdHJhdGVneSA9PT0gXCJzaGFyZWRfY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb25maWcuc2hhcmVkX2NvZGUgfHwgXCItXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IGNvbmZpZy5jb2RlX3ByZWZpeCB8fCBcIkNPVVBPTlwifVxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2NhbXBhaWduTGFiZWwoY29uZmlnKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cm93LmVudGl0bGVtZW50c19jb3VudCB8fCAwfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIHthbGxvd1Byb21vdGlvbk1pcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIG1pcnJvclByb21vdGlvbihyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBNaXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb3BlbkVkaXQocm93KX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGVuY2lsU3F1YXJlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCBkZWxldGVQcm9kdWN0KHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgY29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgIDwvVGFibGU+XG4gICAgICApIDogKFxuICAgICAgICA8Q291cG9uRW1wdHlTdGF0ZVxuICAgICAgICAgIHRpdGxlPVwiTm8gY291cG9uIHByb2R1Y3RzIGZvdW5kXCJcbiAgICAgICAgICBkZXNjcmlwdGlvbj1cIkNyZWF0ZSBhIG5ldyBjb3Vwb24gcHJvZHVjdCB0byBnZXQgc3RhcnRlZC5cIlxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAgPEZvY3VzTW9kYWwgb3Blbj17bW9kYWxPcGVufSBvbk9wZW5DaGFuZ2U9e3NldE1vZGFsT3Blbn0+XG4gICAgICAgIDxGb2N1c01vZGFsLkNvbnRlbnQgc3R5bGU9e21vZGFsQ29udGVudFN0eWxlfT5cbiAgICAgICAgICA8Rm9jdXNNb2RhbC5IZWFkZXIgc3R5bGU9e21vZGFsU3RhdGljUm93U3R5bGV9PlxuICAgICAgICAgICAgPEZvY3VzTW9kYWwuVGl0bGU+XG4gICAgICAgICAgICAgIHtwcm9kdWN0Rm9ybS5pZCA/IFwiRWRpdCBDb3Vwb24gUHJvZHVjdFwiIDogXCJDcmVhdGUgQ291cG9uIFByb2R1Y3RcIn1cbiAgICAgICAgICAgIDwvRm9jdXNNb2RhbC5UaXRsZT5cbiAgICAgICAgICA8L0ZvY3VzTW9kYWwuSGVhZGVyPlxuICAgICAgICAgIDxQcm9ncmVzc1RhYnNcbiAgICAgICAgICAgIHZhbHVlPXthY3RpdmVTdGVwfVxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PiBzZXRBY3RpdmVTdGVwKHZhbHVlIGFzIFdpemFyZFN0ZXApfVxuICAgICAgICAgICAgc3R5bGU9e21vZGFsV2l6YXJkU3R5bGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFByb2dyZXNzVGFicy5MaXN0IGNsYXNzTmFtZT1cImJvcmRlci1iXCIgc3R5bGU9e21vZGFsU3RhdGljUm93U3R5bGV9PlxuICAgICAgICAgICAgICB7dmlzaWJsZVN0ZXBzLm1hcCgoc3RlcCkgPT4gKFxuICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuVHJpZ2dlclxuICAgICAgICAgICAgICAgICAga2V5PXtzdGVwfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3N0ZXB9XG4gICAgICAgICAgICAgICAgICBzdGF0dXM9e3N0ZXBTdGF0dXMoc3RlcCwgYWN0aXZlU3RlcCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3N0ZXAgPT09IFwiZGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICAgID8gXCJEZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgOiBzdGVwID09PSBcIm9yZ2FuaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiT3JnYW5pemVcIlxuICAgICAgICAgICAgICAgICAgICAgIDogc3RlcCA9PT0gXCJ2YXJpYW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiVmFyaWFudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGVwID09PSBcImNvdXBvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJDb3Vwb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiQ2FtcGFpZ25cIn1cbiAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5UcmlnZ2VyPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkxpc3Q+XG4gICAgICAgICAgICA8Rm9jdXNNb2RhbC5Cb2R5IHN0eWxlPXttb2RhbEJvZHlTdHlsZX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsRm9ybVN0eWxlfT5cbiAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJkZXRhaWxzXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dGhyZWVDb2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUaXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZVByb2R1Y3QoXCJ0aXRsZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnN1YnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZVByb2R1Y3QoXCJzdWJ0aXRsZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJIYW5kbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5oYW5kbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHJvZHVjdChcImhhbmRsZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVQcm9kdWN0KFwiZGVzY3JpcHRpb25cIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiTWVkaWEgVVJMXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0udGh1bWJuYWlsfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZVByb2R1Y3QoXCJ0aHVtYm5haWxcIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzLkNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJvcmdhbml6ZVwiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJkcmFmdFwiPkRyYWZ0PC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwicHVibGlzaGVkXCI+UHVibGlzaGVkPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwicHJvcG9zZWRcIj5Qcm9wb3NlZDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInJlamVjdGVkXCI+UmVqZWN0ZWQ8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAge2FwaUJhc2UgPT09IFwiL2FkbWluXCIgJiYgIXByb2R1Y3RGb3JtLmlkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTZWxsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RGb3JtLnNlbGxlcl9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5zZWxsZXJzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGxlcl9pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiVHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS50eXBlX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X3R5cGVzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2lkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ29sbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0Rm9ybS5jb2xsZWN0aW9uX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X2NvbGxlY3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdEZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uX2lkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0uY2F0ZWdvcnlfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zLnByb2R1Y3RfY2F0ZWdvcmllcyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3RGb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUYWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0udGFnX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X3RhZ3MgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ19pZDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNhbGVzIGNoYW5uZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdEZvcm0uc2FsZXNfY2hhbm5lbF9pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnMuc2FsZXNfY2hhbm5lbHMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbGVzX2NoYW5uZWxfaWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtwYW5lbFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cm93QmV0d2VlblN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiPkRpc2NvdW50YWJsZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY291bnRzIGNhbiBhcHBseSB0byB0aGlzIHByb2R1Y3RcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtwcm9kdWN0Rm9ybS5kaXNjb3VudGFibGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0Rm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NvdW50YWJsZTogQm9vbGVhbihjaGVja2VkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuXG4gICAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5Db250ZW50IHZhbHVlPVwidmFyaWFudHNcIiBzdHlsZT17c3RhY2tTdHlsZX0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyb3dCZXR3ZWVuU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGluZyBsZXZlbD1cImgyXCI+VmFyaWFudHM8L0hlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgIHshcHJvZHVjdEZvcm0uaWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2FkZFZhcmlhbnR9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBsdXMgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB2YXJpYW50XG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS00XCI+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9kdWN0Rm9ybS52YXJpYW50cy5tYXAoKHZhcmlhbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2Ake3ZhcmlhbnQuaWQgfHwgaW5kZXh9YH0gc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17Zm91ckNvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKHByb2R1Y3RGb3JtLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHsgdGl0bGU6IGV2ZW50LnRhcmdldC52YWx1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNLVVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQuc2t1fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4ocHJvZHVjdEZvcm0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwgeyBza3U6IGV2ZW50LnRhcmdldC52YWx1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQuY3VycmVuY3lfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKHByb2R1Y3RGb3JtLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY3VycmVuY3lfY29kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiUHJpY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q3VycmVuY3lBbW91bnRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY2llcz17Y3VycmVuY2llc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZT17dmFyaWFudC5jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQuYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e0Jvb2xlYW4ocHJvZHVjdEZvcm0uaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhhbW91bnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhcmlhbnQoaW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclRvcDogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nVG9wOiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cm93QmV0d2VlblN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+Q291cG9uIGJlbmVmaXQgb3ZlcnJpZGU8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17dmFyaWFudC5vdmVycmlkZV9lbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX2VuYWJsZWQ6IEJvb2xlYW4oY2hlY2tlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt2YXJpYW50Lm92ZXJyaWRlX2VuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IC4uLmZvdXJDb2x1bW5HcmlkU3R5bGUsIG1hcmdpblRvcDogMTIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJCZW5lZml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5vdmVycmlkZV9iZW5lZml0X3R5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFyaWFudChpbmRleCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZV9iZW5lZml0X3R5cGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgQmVuZWZpdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImZpeGVkX2Ftb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXhlZCBhbW91bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJwZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmNlbnRhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJmcmVlX3NoaXBwaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWUgc2hpcHBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY2llcz17Y3VycmVuY2llc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFyaWFudC5vdmVycmlkZV9jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub3ZlcnJpZGVfYmVuZWZpdF90eXBlICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXhlZF9hbW91bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG92ZXJyaWRlX2N1cnJlbmN5X2NvZGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX2N1cnJlbmN5X2NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJBbW91bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5QW1vdW50SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5Q29kZT17dmFyaWFudC5vdmVycmlkZV9jdXJyZW5jeV9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YXJpYW50Lm92ZXJyaWRlX2Ftb3VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhvdmVycmlkZV9hbW91bnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX2Ftb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlBlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhbnQub3ZlcnJpZGVfcGVyY2VudGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm92ZXJyaWRlX2JlbmVmaXRfdHlwZSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVyY2VudGFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRWYXJpYW50KGluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlX3BlcmNlbnRhZ2U6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyFwcm9kdWN0Rm9ybS5pZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RGb3JtLnZhcmlhbnRzLmxlbmd0aCA+IDEgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAxNiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcmVtb3ZlVmFyaWFudChpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSB2YXJpYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cblxuICAgICAgICAgICAgICAgIDxQcm9ncmVzc1RhYnMuQ29udGVudCB2YWx1ZT1cImNvdXBvblwiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyb3dCZXR3ZWVuU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+Q291cG9uIGlzc3VhbmNlPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBJc3N1ZSBjb3Vwb25zIHdoZW4gY3VzdG9tZXJzIHB1cmNoYXNlIHRoaXMgcHJvZHVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NvdXBvbkZvcm0uZW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBCb29sZWFuKGNoZWNrZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQmVuZWZpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbmVmaXRfdHlwZTogdmFsdWUgYXMgQmVuZWZpdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZml4ZWRfYW1vdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQgYW1vdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInBlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZXJjZW50YWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImZyZWVfc2hpcHBpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmVlIHNoaXBwaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICB7YWxsb3dQcm9tb3Rpb25NaXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlByb21vdGlvbiBzdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0ucHJvbW90aW9uX3N0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX3N0YXR1czogdmFsdWUgYXMgUHJvbW90aW9uU3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJkcmFmdFwiPkRyYWZ0PC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJhY3RpdmVcIj5BY3RpdmU8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImluYWN0aXZlXCI+SW5hY3RpdmU8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQW1vdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5QW1vdW50SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU9e2NvdXBvbkZvcm0uY3VycmVuY3lfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSAhPT0gXCJmaXhlZF9hbW91bnRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmFtb3VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoYW1vdW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBhbW91bnQgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiUGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y291cG9uRm9ybS5iZW5lZml0X3R5cGUgIT09IFwicGVyY2VudGFnZVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0ucGVyY2VudGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJwZXJjZW50YWdlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPEN1cnJlbmN5U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uY3VycmVuY3lfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtjb3Vwb25Gb3JtLmJlbmVmaXRfdHlwZSAhPT0gXCJmaXhlZF9hbW91bnRcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY3VycmVuY3lfY29kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gcG9saWN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uZXhwaXJhdGlvbl90eXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb25Gb3JtKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl90eXBlOiB2YWx1ZSBhcyBFeHBpcmF0aW9uUG9saWN5VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJub25lXCI+Tm8gZXhwaXJhdGlvbjwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm1vbnRoX2VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZCBvZiBzYW1lIG1vbnRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImR1cmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVyYXRpb24gYWZ0ZXIgaXNzdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZml4ZWRcIj5GaXhlZCBkYXRlPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJkdXJhdGlvblwiID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJEdXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uZXhwaXJhdGlvbl9kdXJhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ291cG9uKFwiZXhwaXJhdGlvbl9kdXJhdGlvblwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJEdXJhdGlvbiB1bml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5leHBpcmF0aW9uX2R1cmF0aW9uX3VuaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2R1cmF0aW9uX3VuaXQgYXMgRXhwaXJhdGlvbkR1cmF0aW9uVW5pdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj48U2VsZWN0LlZhbHVlIC8+PC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJkYXlzXCI+RGF5czwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJtb250aHNcIj5Nb250aHM8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IGNvdXBvbkZvcm0uZXhwaXJhdGlvbl90eXBlID09PSBcImZpeGVkXCIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJlcyBhdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcImV4cGlyYXRpb25fZGF0ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIHsoY291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGUgPT09IFwiZHVyYXRpb25cIiB8fFxuICAgICAgICAgICAgICAgICAgICAgIGNvdXBvbkZvcm0uZXhwaXJhdGlvbl90eXBlID09PSBcIm1vbnRoX2VuZFwiKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhwaXJhdGlvbiB0aW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fdGltZV9wb2xpY3l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhleHBpcmF0aW9uX3RpbWVfcG9saWN5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl90aW1lX3BvbGljeTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl90aW1lX3BvbGljeSBhcyBFeHBpcmF0aW9uVGltZVBvbGljeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+PFNlbGVjdC5WYWx1ZSAvPjwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJkYXlfZW5kXCI+RW5kIG9mIGRheTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZXhhY3RseVwiPkV4YWN0bHk8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge2NvdXBvbkZvcm0uZXhwaXJhdGlvbl90eXBlICE9PSBcIm5vbmVcIiAmJiA8RmllbGQgbGFiZWw9XCJDYXAgZXhwaXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3Jvd0JldHdlZW5TdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIENhbXBhaWduIGVuZCBvciBjYXAgZGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fY2FwX2J5X2NhbXBhaWdufVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ246IEJvb2xlYW4oY2hlY2tlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+fVxuICAgICAgICAgICAgICAgICAgICB7Y291cG9uRm9ybS5leHBpcmF0aW9uX3R5cGUgIT09IFwibm9uZVwiICYmIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gY2FwIGRhdGUgKG9wdGlvbmFsKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY291cG9uRm9ybS5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLmV4cGlyYXRpb25fY2FwX2F0fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3VwZGF0ZUNvdXBvbihcImV4cGlyYXRpb25fY2FwX2F0XCIpfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+fVxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDb2RlIHN0cmF0ZWd5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uY29kZV9zdHJhdGVneX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfc3RyYXRlZ3k6IHZhbHVlIGFzIENvZGVTdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJ1bmlxdWVfY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXF1ZSBjb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInNoYXJlZF9jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVkIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvZGUgcHJlZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y291cG9uRm9ybS5jb2RlX3N0cmF0ZWd5ICE9PSBcInVuaXF1ZV9jb2RlXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uRm9ybS5jb2RlX3ByZWZpeH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJjb2RlX3ByZWZpeFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTaGFyZWQgY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2NvdXBvbkZvcm0uY29kZV9zdHJhdGVneSAhPT0gXCJzaGFyZWRfY29kZVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbkZvcm0uc2hhcmVkX2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ291cG9uKFwic2hhcmVkX2NvZGVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiTWF4IGlzc3VhbmNlIHBlciBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLm1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDb3Vwb24oXCJtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW1cIil9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJQcm9tb3Rpb24gbWlycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb25Gb3JtLnByb21vdGlvbl9taXJyb3JfbW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiB2YWx1ZSBhcyBNaXJyb3JNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJub25lXCI+Tm9uZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibWFudWFsXCI+TWFudWFsPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJhdXRvXCI+QXV0bzwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cblxuICAgICAgICAgICAgICAgIHthbGxvd1Byb21vdGlvbk1pcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJjYW1wYWlnblwiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDYW1wYWlnblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ25Gb3JtLm1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbkZvcm0oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogdmFsdWUgYXMgQ2FtcGFpZ25Nb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJub25lXCI+Tm8gY2FtcGFpZ248L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImV4aXN0aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGlzdGluZyBjYW1wYWlnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibmV3XCI+TmV3IGNhbXBhaWduPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAge2NhbXBhaWduRm9ybS5tb2RlID09PSBcImV4aXN0aW5nXCIgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRXhpc3RpbmcgY2FtcGFpZ25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0uY2FtcGFpZ25faWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5jYW1wYWlnbnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduRm9ybSgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25faWQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHtjYW1wYWlnbkZvcm0ubW9kZSA9PT0gXCJuZXdcIiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ25Gb3JtLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ2FtcGFpZ24oXCJuYW1lXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIklkZW50aWZpZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0uY2FtcGFpZ25faWRlbnRpZmllcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDYW1wYWlnbihcImNhbXBhaWduX2lkZW50aWZpZXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU3RhcnRzIGF0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduRm9ybS5zdGFydHNfYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlQ2FtcGFpZ24oXCJzdGFydHNfYXRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRW5kcyBhdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbkZvcm0uZW5kc19hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt1cGRhdGVDYW1wYWlnbihcImVuZHNfYXRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvRm9jdXNNb2RhbC5Cb2R5PlxuICAgICAgICAgIDwvUHJvZ3Jlc3NUYWJzPlxuICAgICAgICAgIDxGb2N1c01vZGFsLkZvb3RlciBzdHlsZT17bW9kYWxTdGF0aWNSb3dTdHlsZX0+XG4gICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBvbkNsaWNrPXsoKSA9PiBzZXRNb2RhbE9wZW4oZmFsc2UpfT5cbiAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIHtjYW5Hb0JhY2sgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVN0ZXAodmlzaWJsZVN0ZXBzW2N1cnJlbnRTdGVwSW5kZXggLSAxXSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBCYWNrXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtjYW5Hb05leHQgJiZcbiAgICAgICAgICAgIGFjdGl2ZVN0ZXAgIT09IHZpc2libGVTdGVwc1t2aXNpYmxlU3RlcHMubGVuZ3RoIC0gMV0gPyAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlU3RlcCh2aXNpYmxlU3RlcHNbY3VycmVudFN0ZXBJbmRleCArIDFdKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIENvbnRpbnVlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEJ1dHRvbiBpc0xvYWRpbmc9e3NhdmluZ30gb25DbGljaz17KCkgPT4gdm9pZCBzYXZlUHJvZHVjdCgpfT5cbiAgICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0ZvY3VzTW9kYWwuRm9vdGVyPlxuICAgICAgICA8L0ZvY3VzTW9kYWwuQ29udGVudD5cbiAgICAgIDwvRm9jdXNNb2RhbD5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBPcHRpb25TZWxlY3Qoe1xuICB2YWx1ZSxcbiAgb3B0aW9ucyxcbiAgb25DaGFuZ2UsXG59OiB7XG4gIHZhbHVlOiBzdHJpbmdcbiAgb3B0aW9uczogT3B0aW9uUmVjb3JkW11cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgdmFsdWU9e3ZhbHVlIHx8IE5PTkV9XG4gICAgICBvblZhbHVlQ2hhbmdlPXsobmV4dCkgPT4gb25DaGFuZ2UobmV4dCA9PT0gTk9ORSA/IFwiXCIgOiBuZXh0KX1cbiAgICA+XG4gICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT17Tk9ORX0+Tm9uZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgPFNlbGVjdC5JdGVtIGtleT17b3B0aW9uLmlkfSB2YWx1ZT17b3B0aW9uLmlkfT5cbiAgICAgICAgICAgIHtvcHRpb25MYWJlbChvcHRpb24pfVxuICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICA8L1NlbGVjdD5cbiAgKVxufVxuIiwgImltcG9ydCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG4gIHR5cGUgQ2hhbmdlRXZlbnQsXG4gIHR5cGUgQ1NTUHJvcGVydGllcyxcbiAgdHlwZSBEcmFnRXZlbnQsXG4gIHR5cGUgUmVhY3ROb2RlLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtcbiAgQWRqdXN0bWVudHMsXG4gIEFycm93UGF0aCxcbiAgQXJyb3dVcFRyYXksXG4gIEluZm9ybWF0aW9uQ2lyY2xlLFxuICBQZW5jaWxTcXVhcmUsXG4gIFBsdXMsXG4gIFRheEV4Y2x1c2l2ZSxcbiAgVGF4SW5jbHVzaXZlLFxuICBUcmFzaCxcbiAgWE1hcmtNaW5pLFxufSBmcm9tIFwiQG1lZHVzYWpzL2ljb25zXCJcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2hlY2tib3gsXG4gIENvbnRhaW5lcixcbiAgQ3VycmVuY3lJbnB1dCxcbiAgRGl2aWRlcixcbiAgRHJvcGRvd25NZW51LFxuICBEcmF3ZXIsXG4gIEZvY3VzTW9kYWwsXG4gIEhlYWRpbmcsXG4gIElucHV0LFxuICBMYWJlbCxcbiAgUHJvZ3Jlc3NUYWJzLFxuICBSYWRpb0dyb3VwLFxuICBTZWxlY3QsXG4gIFN0YXR1c0JhZGdlLFxuICBTd2l0Y2gsXG4gIFRhYmxlLFxuICBUZXh0LFxuICBUZXh0YXJlYSxcbiAgVG9vbHRpcCxcbiAgdG9hc3QsXG4gIHVzZVByb21wdCxcbn0gZnJvbSBcIkBtZWR1c2Fqcy91aVwiXG5pbXBvcnQgeyBDb3Vwb25FbXB0eVN0YXRlIH0gZnJvbSBcIi4vZW1wdHktc3RhdGVcIlxuXG5kZWNsYXJlIGNvbnN0IF9fQkFDS0VORF9VUkxfXzogc3RyaW5nXG5cbnR5cGUgQXBpQmFzZSA9IFwiL2FkbWluXCIgfCBcIi92ZW5kb3JcIlxudHlwZSBCZW5lZml0VHlwZSA9IFwiZml4ZWRfYW1vdW50XCIgfCBcInBlcmNlbnRhZ2VcIiB8IFwiZnJlZV9zaGlwcGluZ1wiIHwgXCJidXlfZ2V0XCJcbnR5cGUgQ291cG9uVHlwZSA9XG4gIHwgXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCJcbiAgfCBcImFtb3VudF9vZmZfb3JkZXJcIlxuICB8IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiXG4gIHwgXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gIHwgXCJidXlfeF9nZXRfeVwiXG4gIHwgXCJmcmVlX3NoaXBwaW5nXCJcbnR5cGUgQ29kZVN0cmF0ZWd5ID0gXCJ1bmlxdWVfY29kZVwiIHwgXCJzaGFyZWRfY29kZVwiXG50eXBlIE1pcnJvck1vZGUgPSBcIm5vbmVcIiB8IFwibWFudWFsXCIgfCBcImF1dG9cIlxudHlwZSBQcm9tb3Rpb25TdGF0dXMgPSBcImRyYWZ0XCIgfCBcImFjdGl2ZVwiIHwgXCJpbmFjdGl2ZVwiXG50eXBlIENhbXBhaWduTW9kZSA9IFwibm9uZVwiIHwgXCJleGlzdGluZ1wiIHwgXCJuZXdcIlxudHlwZSBFeHBpcmF0aW9uUG9saWN5VHlwZSA9IFwibm9uZVwiIHwgXCJtb250aF9lbmRcIiB8IFwiZHVyYXRpb25cIiB8IFwiZml4ZWRcIlxudHlwZSBFeHBpcmF0aW9uRHVyYXRpb25Vbml0ID0gXCJkYXlzXCIgfCBcIm1vbnRoc1wiXG50eXBlIEV4cGlyYXRpb25UaW1lUG9saWN5ID0gXCJleGFjdGx5XCIgfCBcImRheV9lbmRcIlxudHlwZSBDb3Vwb25BbGxvY2F0aW9uID0gXCJlYWNoXCIgfCBcIm9uY2VcIlxudHlwZSBXaXphcmRTdGVwID0gXCJkZXRhaWxzXCIgfCBcIm9yZ2FuaXplXCIgfCBcImNhbXBhaWduXCIgfCBcInByaWNlc1wiXG50eXBlIFB1cmNoYXNlQ29uZGl0aW9uQXR0cmlidXRlID1cbiAgfCBcImN1c3RvbWVyLmdyb3Vwcy5pZFwiXG4gIHwgXCJyZWdpb24uaWRcIlxuICB8IFwic2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGVcIlxuICB8IFwic2FsZXNfY2hhbm5lbF9pZFwiXG4gIHwgXCJjdXJyZW5jeV9jb2RlXCJcbnR5cGUgUHVyY2hhc2VDb25kaXRpb25PcGVyYXRvciA9IFwiaW5cIiB8IFwiZXFcIiB8IFwibmVcIlxuXG50eXBlIFB1cmNoYXNlQ29uZGl0aW9uRm9ybSA9IHtcbiAga2V5OiBzdHJpbmdcbiAgYXR0cmlidXRlOiBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZSB8IFwiXCJcbiAgb3BlcmF0b3I6IFB1cmNoYXNlQ29uZGl0aW9uT3BlcmF0b3IgfCBcIlwiXG4gIHZhbHVlczogc3RyaW5nW11cbn1cblxudHlwZSBPcHRpb25SZWNvcmQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZyB8IG51bGxcbiAgdGl0bGU/OiBzdHJpbmcgfCBudWxsXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVsbFxuICBoYW5kbGU/OiBzdHJpbmcgfCBudWxsXG4gIGNhbXBhaWduX2lkZW50aWZpZXI/OiBzdHJpbmcgfCBudWxsXG4gIGRpc3BsYXlfbmFtZT86IHN0cmluZyB8IG51bGxcbiAgaXNvXzI/OiBzdHJpbmcgfCBudWxsXG59XG5cbnR5cGUgQ3VycmVuY3lPcHRpb24gPSB7XG4gIGNvZGU6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc3ltYm9sOiBzdHJpbmdcbiAgc3ltYm9sX25hdGl2ZTogc3RyaW5nXG4gIGlzX2RlZmF1bHQ6IGJvb2xlYW5cbiAgaXNfdGF4X2luY2x1c2l2ZT86IGJvb2xlYW5cbn1cblxudHlwZSBPcHRpb25zUGF5bG9hZCA9IHtcbiAgY3VycmVuY2llcz86IEN1cnJlbmN5T3B0aW9uW11cbiAgcHJvZHVjdF90eXBlcz86IE9wdGlvblJlY29yZFtdXG4gIHByb2R1Y3RfY29sbGVjdGlvbnM/OiBPcHRpb25SZWNvcmRbXVxuICBwcm9kdWN0X2NhdGVnb3JpZXM/OiBPcHRpb25SZWNvcmRbXVxuICBwcm9kdWN0X3RhZ3M/OiBPcHRpb25SZWNvcmRbXVxuICBzYWxlc19jaGFubmVscz86IE9wdGlvblJlY29yZFtdXG4gIHNoaXBwaW5nX3Byb2ZpbGVzPzogT3B0aW9uUmVjb3JkW11cbiAgY2FtcGFpZ25zPzogT3B0aW9uUmVjb3JkW11cbiAgc2VsbGVycz86IE9wdGlvblJlY29yZFtdXG4gIGN1c3RvbWVyX2dyb3Vwcz86IE9wdGlvblJlY29yZFtdXG4gIHJlZ2lvbnM/OiBPcHRpb25SZWNvcmRbXVxuICBjb3VudHJpZXM/OiBPcHRpb25SZWNvcmRbXVxufVxuXG50eXBlIENvdXBvblByb2R1Y3RDb25maWcgPSB7XG4gIGlkOiBzdHJpbmdcbiAgZW5hYmxlZDogYm9vbGVhblxuICBwcm9kdWN0X2lkOiBzdHJpbmdcbiAgYmVuZWZpdF90eXBlOiBCZW5lZml0VHlwZVxuICBwdXJjaGFzZV9jb25kaXRpb25zPzogQXJyYXk8e1xuICAgIGF0dHJpYnV0ZTogUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGVcbiAgICBvcGVyYXRvcjogUHVyY2hhc2VDb25kaXRpb25PcGVyYXRvclxuICAgIHZhbHVlczogc3RyaW5nW11cbiAgfT4gfCBudWxsXG4gIGFtb3VudHM/OiB7IGN1cnJlbmN5X2NvZGU6IHN0cmluZzsgYW1vdW50OiBudW1iZXIgfVtdIHwgbnVsbFxuICBhbW91bnQ6IG51bWJlciB8IG51bGxcbiAgcGVyY2VudGFnZTogbnVtYmVyIHwgbnVsbFxuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmcgfCBudWxsXG4gIGNvZGVfc3RyYXRlZ3k6IENvZGVTdHJhdGVneVxuICBjb2RlX3ByZWZpeDogc3RyaW5nIHwgbnVsbFxuICBzaGFyZWRfY29kZTogc3RyaW5nIHwgbnVsbFxuICBleHBpcmF0aW9uX3BvbGljeTpcbiAgfCB7IHR5cGU6IFwibm9uZVwiIH1cbiAgfCB7XG4gICAgdHlwZTogXCJtb250aF9lbmRcIlxuICAgIHRpbWVfcG9saWN5OiBFeHBpcmF0aW9uVGltZVBvbGljeVxuICAgIGNhcF9ieV9jYW1wYWlnbj86IGJvb2xlYW5cbiAgICBjYXBfYXQ/OiBzdHJpbmcgfCBudWxsXG4gIH1cbiAgfCB7XG4gICAgdHlwZTogXCJkdXJhdGlvblwiXG4gICAgZHVyYXRpb246IG51bWJlclxuICAgIGR1cmF0aW9uX2RheXM/OiBudW1iZXJcbiAgICBkdXJhdGlvbl91bml0OiBFeHBpcmF0aW9uRHVyYXRpb25Vbml0XG4gICAgdGltZV9wb2xpY3k6IEV4cGlyYXRpb25UaW1lUG9saWN5XG4gICAgY2FwX2J5X2NhbXBhaWduPzogYm9vbGVhblxuICAgIGNhcF9hdD86IHN0cmluZyB8IG51bGxcbiAgfVxuICB8IHtcbiAgICB0eXBlOiBcImZpeGVkXCJcbiAgICBleHBpcmVzX2F0OiBzdHJpbmdcbiAgICBjYXBfYnlfY2FtcGFpZ24/OiBib29sZWFuXG4gICAgY2FwX2F0Pzogc3RyaW5nIHwgbnVsbFxuICB9XG4gIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogbnVtYmVyXG4gIHByb21vdGlvbl9taXJyb3JfbW9kZTogTWlycm9yTW9kZVxuICBwcm9tb3Rpb25fc3RhdHVzPzogUHJvbW90aW9uU3RhdHVzIHwgbnVsbFxuICBwcm9tb3Rpb25fdGVtcGxhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbFxuICBjYW1wYWlnbl9pZD86IHN0cmluZyB8IG51bGxcbiAgY2FtcGFpZ25fc25hcHNob3Q/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbn1cblxudHlwZSBQcm9kdWN0UmVjb3JkID0ge1xuICBpZDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsXG4gIHN1YnRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICBoYW5kbGU6IHN0cmluZyB8IG51bGxcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsXG4gIHN0YXR1czogc3RyaW5nIHwgbnVsbFxuICB0aHVtYm5haWw6IHN0cmluZyB8IG51bGxcbiAgdGh1bWJuYWlsX2Fzc2V0X2lkPzogc3RyaW5nIHwgbnVsbFxuICBpbWFnZXM/OiB7IGlkPzogc3RyaW5nOyB1cmw/OiBzdHJpbmcgfCBudWxsOyBhc3NldF9pZD86IHN0cmluZyB8IG51bGwgfVtdXG4gIGRpc2NvdW50YWJsZT86IGJvb2xlYW5cbiAgdHlwZV9pZD86IHN0cmluZyB8IG51bGxcbiAgY29sbGVjdGlvbl9pZD86IHN0cmluZyB8IG51bGxcbiAgc2hpcHBpbmdfcHJvZmlsZV9pZD86IHN0cmluZyB8IG51bGxcbiAgdmFyaWFudHM/OiB7XG4gICAgaWQ6IHN0cmluZ1xuICAgIHNrdT86IHN0cmluZyB8IG51bGxcbiAgICBwcmljZXM/OiB7IGN1cnJlbmN5X2NvZGU/OiBzdHJpbmc7IGFtb3VudD86IG51bWJlciB9W11cbiAgfVtdXG4gIGNhdGVnb3JpZXM/OiB7IGlkOiBzdHJpbmcgfVtdXG4gIHRhZ3M/OiB7IGlkOiBzdHJpbmcgfVtdXG4gIHNhbGVzX2NoYW5uZWxzPzogeyBpZDogc3RyaW5nOyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9W11cbn1cblxudHlwZSBQcm9kdWN0TWVkaWEgPSB7XG4gIHVybDogc3RyaW5nXG4gIGFzc2V0X2lkPzogc3RyaW5nXG59XG5cbnR5cGUgQ291cG9uUHJvZHVjdFJvdyA9IHtcbiAgaWQ6IHN0cmluZ1xuICBwcm9kdWN0OiBQcm9kdWN0UmVjb3JkXG4gIGNvdXBvbl9wcm9kdWN0X2NvbmZpZzogQ291cG9uUHJvZHVjdENvbmZpZ1xuICBlbnRpdGxlbWVudHNfY291bnQ6IG51bWJlclxufVxuXG50eXBlIFByb2R1Y3RGb3JtU3RhdGUgPSB7XG4gIHRpdGxlOiBzdHJpbmdcbiAgc3VidGl0bGU6IHN0cmluZ1xuICBoYW5kbGU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIG1lZGlhOiBQcm9kdWN0TWVkaWFbXVxuICBza3U6IHN0cmluZ1xuICBwcmljZV9hbW91bnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIHN0YXR1czogc3RyaW5nXG4gIGRpc2NvdW50YWJsZTogYm9vbGVhblxuICBzZWxsZXJfaWQ6IHN0cmluZ1xuICB0eXBlX2lkOiBzdHJpbmdcbiAgY29sbGVjdGlvbl9pZDogc3RyaW5nXG4gIGNhdGVnb3J5X2lkOiBzdHJpbmdcbiAgdGFnX2lkOiBzdHJpbmdcbn1cblxudHlwZSBDb3Vwb25Gb3JtU3RhdGUgPSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW5cbiAgdHlwZTogQ291cG9uVHlwZVxuICBwdXJjaGFzZV9jb25kaXRpb25zOiBQdXJjaGFzZUNvbmRpdGlvbkZvcm1bXVxuICBhbW91bnRzOiBDb3Vwb25BbW91bnRGb3JtUm93W11cbiAgcGVyY2VudGFnZTogc3RyaW5nXG4gIGFsbG9jYXRpb246IENvdXBvbkFsbG9jYXRpb25cbiAgY29kZV9zdHJhdGVneTogQ29kZVN0cmF0ZWd5XG4gIGNvZGVfcHJlZml4OiBzdHJpbmdcbiAgc2hhcmVkX2NvZGU6IHN0cmluZ1xuICBleHBpcmF0aW9uX3R5cGU6IEV4cGlyYXRpb25Qb2xpY3lUeXBlXG4gIGV4cGlyYXRpb25fZHVyYXRpb246IHN0cmluZ1xuICBleHBpcmF0aW9uX2R1cmF0aW9uX3VuaXQ6IEV4cGlyYXRpb25EdXJhdGlvblVuaXRcbiAgZXhwaXJhdGlvbl90aW1lX3BvbGljeTogRXhwaXJhdGlvblRpbWVQb2xpY3lcbiAgZXhwaXJhdGlvbl9kYXRlOiBzdHJpbmdcbiAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ246IGJvb2xlYW5cbiAgZXhwaXJhdGlvbl9jYXBfYXQ6IHN0cmluZ1xuICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IHN0cmluZ1xuICBwcm9tb3Rpb25fbWlycm9yX21vZGU6IE1pcnJvck1vZGVcbiAgcHJvbW90aW9uX3N0YXR1czogUHJvbW90aW9uU3RhdHVzXG59XG5cbnR5cGUgQ291cG9uQW1vdW50Rm9ybVJvdyA9IHtcbiAga2V5OiBzdHJpbmdcbiAgY3VycmVuY3lfY29kZTogc3RyaW5nXG4gIGFtb3VudDogc3RyaW5nXG59XG5cbnR5cGUgQ2FtcGFpZ25Gb3JtU3RhdGUgPSB7XG4gIG1vZGU6IENhbXBhaWduTW9kZVxuICBjYW1wYWlnbl9pZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBjYW1wYWlnbl9pZGVudGlmaWVyOiBzdHJpbmdcbiAgc3RhcnRzX2F0OiBzdHJpbmdcbiAgZW5kc19hdDogc3RyaW5nXG59XG5cbmNvbnN0IE5PTkUgPSBcIl9fbm9uZV9fXCJcbmNvbnN0IGFsbFN0ZXBzOiBXaXphcmRTdGVwW10gPSBbXCJkZXRhaWxzXCIsIFwib3JnYW5pemVcIiwgXCJjYW1wYWlnblwiLCBcInByaWNlc1wiXVxuXG5jb25zdCBjb25kaXRpb25BdHRyaWJ1dGVzOiBBcnJheTx7XG4gIHZhbHVlOiBQdXJjaGFzZUNvbmRpdGlvbkF0dHJpYnV0ZVxuICBsYWJlbDogc3RyaW5nXG59PiA9IFtcbiAgeyB2YWx1ZTogXCJjdXN0b21lci5ncm91cHMuaWRcIiwgbGFiZWw6IFwiQ3VzdG9tZXIgR3JvdXBcIiB9LFxuICB7IHZhbHVlOiBcInJlZ2lvbi5pZFwiLCBsYWJlbDogXCJSZWdpb25cIiB9LFxuICB7IHZhbHVlOiBcInNoaXBwaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlXCIsIGxhYmVsOiBcIkNvdW50cnlcIiB9LFxuICB7IHZhbHVlOiBcInNhbGVzX2NoYW5uZWxfaWRcIiwgbGFiZWw6IFwiU2FsZXMgQ2hhbm5lbFwiIH0sXG4gIHsgdmFsdWU6IFwiY3VycmVuY3lfY29kZVwiLCBsYWJlbDogXCJDdXJyZW5jeSBDb2RlXCIgfSxcbl1cblxuY29uc3QgY29uZGl0aW9uT3BlcmF0b3JzOiBBcnJheTx7XG4gIHZhbHVlOiBQdXJjaGFzZUNvbmRpdGlvbk9wZXJhdG9yXG4gIGxhYmVsOiBzdHJpbmdcbn0+ID0gW1xuICB7IHZhbHVlOiBcImluXCIsIGxhYmVsOiBcIkluXCIgfSxcbiAgeyB2YWx1ZTogXCJlcVwiLCBsYWJlbDogXCJFcXVhbHNcIiB9LFxuICB7IHZhbHVlOiBcIm5lXCIsIGxhYmVsOiBcIk5vdCBJblwiIH0sXG5dXG5cbmV4cG9ydCBjb25zdCB0eXBlQ2hvaWNlczoge1xuICB2YWx1ZTogQ291cG9uVHlwZVxuICBsYWJlbDogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbn1bXSA9IFtcbiAgICB7XG4gICAgICB2YWx1ZTogXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCIsXG4gICAgICBsYWJlbDogXCJBbW91bnQgb2ZmIHByb2R1Y3RzXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJEaXNjb3VudCBzcGVjaWZpYyBwcm9kdWN0cyBvciBhIGNvbGxlY3Rpb24gb2YgcHJvZHVjdHNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcImFtb3VudF9vZmZfb3JkZXJcIixcbiAgICAgIGxhYmVsOiBcIkFtb3VudCBvZmYgb3JkZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRpc2NvdW50IHRoZSB0b3RhbCBvcmRlciBhbW91bnRcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcInBlcmNlbnRhZ2Vfb2ZmX3Byb2R1Y3RcIixcbiAgICAgIGxhYmVsOiBcIlBlcmNlbnRhZ2Ugb2ZmIHByb2R1Y3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkRpc2NvdW50IGEgcGVyY2VudGFnZSBvZmYgc2VsZWN0ZWQgcHJvZHVjdHNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCIsXG4gICAgICBsYWJlbDogXCJQZXJjZW50YWdlIG9mZiBvcmRlclwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiRGlzY291bnQgYSBwZXJjZW50YWdlIG9mZiB0aGUgdG90YWwgb3JkZXIgYW1vdW50XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogXCJidXlfeF9nZXRfeVwiLFxuICAgICAgbGFiZWw6IFwiQnV5IFggR2V0IFlcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlIGEgQnV5IFggR2V0IFkgY291cG9uIGVudGl0bGVtZW50XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogXCJmcmVlX3NoaXBwaW5nXCIsXG4gICAgICBsYWJlbDogXCJGcmVlIHNoaXBwaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJBcHBseSBhIDEwMCUgZGlzY291bnQgdG8gc2hpcHBpbmcgZmVlc1wiLFxuICAgIH0sXG4gIF1cblxuY29uc3Qgc3RhdHVzQ2hvaWNlczoge1xuICB2YWx1ZTogUHJvbW90aW9uU3RhdHVzXG4gIGxhYmVsOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xufVtdID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiBcImRyYWZ0XCIsXG4gICAgICBsYWJlbDogXCJEcmFmdFwiLFxuICAgICAgZGVzY3JpcHRpb246IFwiQ3VzdG9tZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIHRoZSBjb2RlIHlldFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IFwiYWN0aXZlXCIsXG4gICAgICBsYWJlbDogXCJBY3RpdmVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkN1c3RvbWVycyB3aWxsIGJlIGFibGUgdG8gdXNlIHRoZSBjb2RlXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogXCJpbmFjdGl2ZVwiLFxuICAgICAgbGFiZWw6IFwiSW5hY3RpdmVcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIktlZXAgdGhlIHByb21vdGlvbiB1bmF2YWlsYWJsZSB1bnRpbCByZWFjdGl2YXRlZFwiLFxuICAgIH0sXG4gIF1cblxuZnVuY3Rpb24gYmFja2VuZFVybCgpIHtcbiAgcmV0dXJuIHR5cGVvZiBfX0JBQ0tFTkRfVVJMX18gPT09IFwic3RyaW5nXCJcbiAgICA/IF9fQkFDS0VORF9VUkxfXy5yZXBsYWNlKC9cXC8kLywgXCJcIilcbiAgICA6IFwiXCJcbn1cblxuZnVuY3Rpb24gYXBpRXJyb3JNZXNzYWdlKHBheWxvYWQ6IGFueSwgZmFsbGJhY2s6IHN0cmluZykge1xuICByZXR1cm4gKFxuICAgIFtwYXlsb2FkPy5tZXNzYWdlLCBwYXlsb2FkPy5lcnJvcj8ubWVzc2FnZSwgcGF5bG9hZD8uZXJyb3JdLmZpbmQoXG4gICAgICAoY2FuZGlkYXRlKSA9PiB0eXBlb2YgY2FuZGlkYXRlID09PSBcInN0cmluZ1wiICYmIGNhbmRpZGF0ZS50cmltKCksXG4gICAgKSB8fFxuICAgIGZhbGxiYWNrIHx8XG4gICAgXCJSZXF1ZXN0IGZhaWxlZFwiXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBpRmV0Y2g8VD4oXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7fSxcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2JhY2tlbmRVcmwoKX0ke3BhdGh9YCwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihvcHRpb25zLmJvZHkgPyB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0gOiB7fSksXG4gICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgfSxcbiAgfSlcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgIHRocm93IG5ldyBFcnJvcihhcGlFcnJvck1lc3NhZ2UocGF5bG9hZCwgcmVzcG9uc2Uuc3RhdHVzVGV4dCkpXG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpXG59XG5cbmZ1bmN0aW9uIG9wdGlvbkxhYmVsKG9wdGlvbjogT3B0aW9uUmVjb3JkKSB7XG4gIHJldHVybiAoXG4gICAgb3B0aW9uLm5hbWUgfHwgb3B0aW9uLnRpdGxlIHx8IG9wdGlvbi52YWx1ZSB8fCBvcHRpb24uaGFuZGxlIHx8IG9wdGlvbi5pZFxuICApXG59XG5cbmZ1bmN0aW9uIG51bWJlck9yTnVsbCh2YWx1ZTogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIHBhcnNlZCA+IDAgPyBwYXJzZWQgOiBudWxsXG59XG5cbmZ1bmN0aW9uIG5vbk5lZ2F0aXZlTnVtYmVyT3JOdWxsKHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCF2YWx1ZS50cmltKCkpIHJldHVybiBudWxsXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIHBhcnNlZCA+PSAwID8gcGFyc2VkIDogbnVsbFxufVxuXG5mdW5jdGlvbiB0b0RhdGVUaW1lTG9jYWwodmFsdWU/OiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBcIlwiXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgaWYgKE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBcIlwiXG4gIGNvbnN0IGxvY2FsRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjBfMDAwKVxuICByZXR1cm4gbG9jYWxEYXRlLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTYpXG59XG5cbmZ1bmN0aW9uIGN1cnJlbmN5RGVjaW1hbERpZ2l0cyhjb2RlOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwge1xuICAgICAgc3R5bGU6IFwiY3VycmVuY3lcIixcbiAgICAgIGN1cnJlbmN5OiBjb2RlLnRvVXBwZXJDYXNlKCksXG4gICAgfSkucmVzb2x2ZWRPcHRpb25zKCkubWF4aW11bUZyYWN0aW9uRGlnaXRzXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAyXG4gIH1cbn1cblxuZnVuY3Rpb24gY3VycmVuY3lTeW1ib2woY29kZTogc3RyaW5nKSB7XG4gIGlmICghY29kZSkgcmV0dXJuIFwiXCJcbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgbmV3IEludGwuTnVtYmVyRm9ybWF0KFwiZW5cIiwge1xuICAgICAgICBzdHlsZTogXCJjdXJyZW5jeVwiLFxuICAgICAgICBjdXJyZW5jeTogY29kZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBjdXJyZW5jeURpc3BsYXk6IFwibmFycm93U3ltYm9sXCIsXG4gICAgICB9KVxuICAgICAgICAuZm9ybWF0VG9QYXJ0cygwKVxuICAgICAgICAuZmluZCgocGFydCkgPT4gcGFydC50eXBlID09PSBcImN1cnJlbmN5XCIpPy52YWx1ZSB8fCBjb2RlLnRvVXBwZXJDYXNlKClcbiAgICApXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBjb2RlLnRvVXBwZXJDYXNlKClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY291cG9uVHlwZUZyb21Db25maWcoY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnKTogQ291cG9uVHlwZSB7XG4gIGlmIChjb25maWcuYmVuZWZpdF90eXBlID09PSBcInBlcmNlbnRhZ2VcIikge1xuICAgIHJldHVybiBjb25maWcucHJvbW90aW9uX3RlbXBsYXRlPy5hcHBsaWNhdGlvbl9tZXRob2Q/LnRhcmdldF90eXBlID09PSBcIm9yZGVyXCJcbiAgICAgID8gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gICAgICA6IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiXG4gIH1cbiAgaWYgKGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwiYnV5X2dldFwiKSByZXR1cm4gXCJidXlfeF9nZXRfeVwiXG4gIGlmIChjb25maWcuYmVuZWZpdF90eXBlID09PSBcImZyZWVfc2hpcHBpbmdcIikgcmV0dXJuIFwiZnJlZV9zaGlwcGluZ1wiXG5cbiAgcmV0dXJuIGNvbmZpZy5wcm9tb3Rpb25fdGVtcGxhdGU/LmFwcGxpY2F0aW9uX21ldGhvZD8udGFyZ2V0X3R5cGUgPT09IFwib3JkZXJcIlxuICAgID8gXCJhbW91bnRfb2ZmX29yZGVyXCJcbiAgICA6IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiXG59XG5cbmZ1bmN0aW9uIGJlbmVmaXRUeXBlRnJvbUNvdXBvblR5cGUodHlwZTogQ291cG9uVHlwZSk6IEJlbmVmaXRUeXBlIHtcbiAgaWYgKFxuICAgIHR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiIHx8XG4gICAgdHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gICkgcmV0dXJuIFwicGVyY2VudGFnZVwiXG4gIGlmICh0eXBlID09PSBcImJ1eV94X2dldF95XCIpIHJldHVybiBcImJ1eV9nZXRcIlxuICBpZiAodHlwZSA9PT0gXCJmcmVlX3NoaXBwaW5nXCIpIHJldHVybiBcImZyZWVfc2hpcHBpbmdcIlxuICByZXR1cm4gXCJmaXhlZF9hbW91bnRcIlxufVxuXG5mdW5jdGlvbiBjb3Vwb25UeXBlTGFiZWwoY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnKSB7XG4gIHJldHVybiB0eXBlQ2hvaWNlcy5maW5kKFxuICAgIChjaG9pY2UpID0+IGNob2ljZS52YWx1ZSA9PT0gY291cG9uVHlwZUZyb21Db25maWcoY29uZmlnKSxcbiAgKT8ubGFiZWxcbn1cblxuZnVuY3Rpb24gY291cG9uU3RhdHVzQ29sb3Ioc3RhdHVzPzogUHJvbW90aW9uU3RhdHVzIHwgbnVsbCkge1xuICBpZiAoc3RhdHVzID09PSBcImFjdGl2ZVwiKSByZXR1cm4gXCJncmVlblwiIGFzIGNvbnN0XG4gIGlmIChzdGF0dXMgPT09IFwiaW5hY3RpdmVcIikgcmV0dXJuIFwib3JhbmdlXCIgYXMgY29uc3RcbiAgcmV0dXJuIFwiZ3JleVwiIGFzIGNvbnN0XG59XG5cbmZ1bmN0aW9uIHByb2R1Y3RTdGF0dXNGcm9tQ291cG9uU3RhdHVzKHN0YXR1czogUHJvbW90aW9uU3RhdHVzKSB7XG4gIHJldHVybiBzdGF0dXMgPT09IFwiYWN0aXZlXCIgPyBcInB1Ymxpc2hlZFwiIDogXCJkcmFmdFwiXG59XG5cbmZ1bmN0aW9uIGNhbXBhaWduTGFiZWwoY29uZmlnOiBDb3Vwb25Qcm9kdWN0Q29uZmlnKSB7XG4gIGNvbnN0IG5hbWUgPSBjb25maWcuY2FtcGFpZ25fc25hcHNob3Q/Lm5hbWVcbiAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSBcInN0cmluZ1wiICYmIG5hbWUgPyBuYW1lIDogY29uZmlnLmNhbXBhaWduX2lkIHx8IFwiTm9uZVwiXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDdXJyZW5jeShvcHRpb25zOiBPcHRpb25zUGF5bG9hZCkge1xuICByZXR1cm4gKFxuICAgIG9wdGlvbnMuY3VycmVuY2llcz8uZmluZCgoY3VycmVuY3kpID0+IGN1cnJlbmN5LmlzX2RlZmF1bHQpPy5jb2RlIHx8XG4gICAgb3B0aW9ucy5jdXJyZW5jaWVzPy5bMF0/LmNvZGUgfHxcbiAgICBcIlwiXG4gIClcbn1cblxuZnVuY3Rpb24gY29uZGl0aW9uS2V5KHByZWZpeCA9IFwiY29uZGl0aW9uXCIpIHtcbiAgcmV0dXJuIGAke3ByZWZpeH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpfWBcbn1cblxuZnVuY3Rpb24gaXNBbW91bnRDb3Vwb25UeXBlKHR5cGU6IENvdXBvblR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgPT09IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiIHx8IHR5cGUgPT09IFwiYW1vdW50X29mZl9vcmRlclwiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlZmZlY3RpdmVDb3Vwb25DdXJyZW5jaWVzKFxuICBjb25kaXRpb25zOiBQdXJjaGFzZUNvbmRpdGlvbkZvcm1bXSxcbiAgY3VycmVuY2llczogQ3VycmVuY3lPcHRpb25bXSxcbikge1xuICBjb25zdCBjb25kaXRpb24gPSBjb25kaXRpb25zLmZpbmQoXG4gICAgKGl0ZW0pID0+IGl0ZW0uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIixcbiAgKVxuICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uZGl0aW9uLm9wZXJhdG9yKSByZXR1cm4gW11cbiAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgU2V0KGNvbmRpdGlvbi52YWx1ZXMpXG4gIGNvbnN0IHN1cHBvcnRlZCA9IGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSlcblxuICByZXR1cm4gY29uZGl0aW9uLm9wZXJhdG9yID09PSBcIm5lXCJcbiAgICA/IHN1cHBvcnRlZC5maWx0ZXIoKGNvZGUpID0+ICFzZWxlY3RlZC5oYXMoY29kZSkpXG4gICAgOiBzdXBwb3J0ZWQuZmlsdGVyKChjb2RlKSA9PiBzZWxlY3RlZC5oYXMoY29kZSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWNvbmNpbGVDb3Vwb25BbW91bnRzKFxuICBjdXJyZW50OiBDb3Vwb25BbW91bnRGb3JtUm93W10sXG4gIGN1cnJlbmN5Q29kZXM6IHN0cmluZ1tdLFxuKSB7XG4gIGNvbnN0IGJ5Q3VycmVuY3kgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgY3VycmVudC5tYXAoKHJvdykgPT4gW3Jvdy5jdXJyZW5jeV9jb2RlLCByb3ddKSxcbiAgKVxuICByZXR1cm4gY3VycmVuY3lDb2Rlcy5tYXAoKGN1cnJlbmN5Q29kZSkgPT4gKHtcbiAgICBrZXk6IGJ5Q3VycmVuY3lbY3VycmVuY3lDb2RlXT8ua2V5IHx8IGNvbmRpdGlvbktleShcImNvdXBvbi12YWx1ZVwiKSxcbiAgICBjdXJyZW5jeV9jb2RlOiBjdXJyZW5jeUNvZGUsXG4gICAgYW1vdW50OiBieUN1cnJlbmN5W2N1cnJlbmN5Q29kZV0/LmFtb3VudCB8fCBcIlwiLFxuICB9KSlcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFB1cmNoYXNlQ29uZGl0aW9ucyhvcHRpb25zOiBPcHRpb25zUGF5bG9hZCkge1xuICBjb25zdCBjdXJyZW5jeUNvZGUgPSBkZWZhdWx0Q3VycmVuY3kob3B0aW9ucylcbiAgcmV0dXJuIGN1cnJlbmN5Q29kZVxuICAgID8gW1xuICAgICAge1xuICAgICAgICBrZXk6IGNvbmRpdGlvbktleShcImN1cnJlbmN5XCIpLFxuICAgICAgICBhdHRyaWJ1dGU6IFwiY3VycmVuY3lfY29kZVwiIGFzIGNvbnN0LFxuICAgICAgICBvcGVyYXRvcjogXCJlcVwiIGFzIGNvbnN0LFxuICAgICAgICB2YWx1ZXM6IFtjdXJyZW5jeUNvZGVdLFxuICAgICAgfSxcbiAgICBdXG4gICAgOiBbXVxufVxuXG5mdW5jdGlvbiBlbXB0eVByb2R1Y3Qob3B0aW9uczogT3B0aW9uc1BheWxvYWQpOiBQcm9kdWN0Rm9ybVN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogXCJcIixcbiAgICBzdWJ0aXRsZTogXCJcIixcbiAgICBoYW5kbGU6IFwiXCIsXG4gICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgbWVkaWE6IFtdLFxuICAgIHNrdTogXCJcIixcbiAgICBwcmljZV9hbW91bnRzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAob3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdKS5tYXAoKGN1cnJlbmN5KSA9PiBbY3VycmVuY3kuY29kZSwgXCJcIl0pLFxuICAgICksXG4gICAgc3RhdHVzOiBcImRyYWZ0XCIsXG4gICAgZGlzY291bnRhYmxlOiBmYWxzZSxcbiAgICBzZWxsZXJfaWQ6IFwiXCIsXG4gICAgdHlwZV9pZDogXCJcIixcbiAgICBjb2xsZWN0aW9uX2lkOiBcIlwiLFxuICAgIGNhdGVnb3J5X2lkOiBcIlwiLFxuICAgIHRhZ19pZDogXCJcIixcbiAgfVxufVxuXG5mdW5jdGlvbiBlbXB0eUNvdXBvbihvcHRpb25zOiBPcHRpb25zUGF5bG9hZCk6IENvdXBvbkZvcm1TdGF0ZSB7XG4gIGNvbnN0IGN1cnJlbmN5Q29kZSA9IGRlZmF1bHRDdXJyZW5jeShvcHRpb25zKVxuICBjb25zdCBwdXJjaGFzZUNvbmRpdGlvbnMgPSBkZWZhdWx0UHVyY2hhc2VDb25kaXRpb25zKG9wdGlvbnMpXG4gIHJldHVybiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICB0eXBlOiBcImFtb3VudF9vZmZfcHJvZHVjdHNcIixcbiAgICBwdXJjaGFzZV9jb25kaXRpb25zOiBwdXJjaGFzZUNvbmRpdGlvbnMsXG4gICAgYW1vdW50czogY3VycmVuY3lDb2RlXG4gICAgICA/IFtcbiAgICAgICAge1xuICAgICAgICAgIGtleTogXCJjb3Vwb24tdmFsdWUtZGVmYXVsdFwiLFxuICAgICAgICAgIGN1cnJlbmN5X2NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBhbW91bnQ6IFwiXCIsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgICA6IFtdLFxuICAgIHBlcmNlbnRhZ2U6IFwiXCIsXG4gICAgYWxsb2NhdGlvbjogXCJlYWNoXCIsXG4gICAgY29kZV9zdHJhdGVneTogXCJ1bmlxdWVfY29kZVwiLFxuICAgIGNvZGVfcHJlZml4OiBcIkNPVVBPTlwiLFxuICAgIHNoYXJlZF9jb2RlOiBcIlwiLFxuICAgIGV4cGlyYXRpb25fdHlwZTogXCJkdXJhdGlvblwiLFxuICAgIGV4cGlyYXRpb25fZHVyYXRpb246IFwiMzBcIixcbiAgICBleHBpcmF0aW9uX2R1cmF0aW9uX3VuaXQ6IFwiZGF5c1wiLFxuICAgIGV4cGlyYXRpb25fdGltZV9wb2xpY3k6IFwiZGF5X2VuZFwiLFxuICAgIGV4cGlyYXRpb25fZGF0ZTogXCJcIixcbiAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjogdHJ1ZSxcbiAgICBleHBpcmF0aW9uX2NhcF9hdDogXCJcIixcbiAgICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IFwiMVwiLFxuICAgIHByb21vdGlvbl9taXJyb3JfbW9kZTogXCJub25lXCIsXG4gICAgcHJvbW90aW9uX3N0YXR1czogXCJkcmFmdFwiLFxuICB9XG59XG5cbmNvbnN0IGVtcHR5Q2FtcGFpZ246IENhbXBhaWduRm9ybVN0YXRlID0ge1xuICBtb2RlOiBcIm5vbmVcIixcbiAgY2FtcGFpZ25faWQ6IFwiXCIsXG4gIG5hbWU6IFwiXCIsXG4gIGNhbXBhaWduX2lkZW50aWZpZXI6IFwiXCIsXG4gIHN0YXJ0c19hdDogXCJcIixcbiAgZW5kc19hdDogXCJcIixcbn1cblxuZnVuY3Rpb24gZm9ybXNGcm9tUm93KFxuICByb3c6IENvdXBvblByb2R1Y3RSb3csXG4gIG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkLFxuKToge1xuICBwcm9kdWN0OiBQcm9kdWN0Rm9ybVN0YXRlXG4gIGNvdXBvbjogQ291cG9uRm9ybVN0YXRlXG4gIGNhbXBhaWduOiBDYW1wYWlnbkZvcm1TdGF0ZVxufSB7XG4gIGNvbnN0IHByb2R1Y3QgPSByb3cucHJvZHVjdFxuICBjb25zdCBjb25maWcgPSByb3cuY291cG9uX3Byb2R1Y3RfY29uZmlnXG4gIGNvbnN0IHZhcmlhbnQgPSBwcm9kdWN0LnZhcmlhbnRzPy5bMF1cbiAgY29uc3QgcHJpY2VzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICh2YXJpYW50Py5wcmljZXMgfHwgW10pXG4gICAgICAuZmlsdGVyKChwcmljZSkgPT4gcHJpY2UuY3VycmVuY3lfY29kZSlcbiAgICAgIC5tYXAoKHByaWNlKSA9PiBbXG4gICAgICAgIFN0cmluZyhwcmljZS5jdXJyZW5jeV9jb2RlKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBwcmljZS5hbW91bnQgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcocHJpY2UuYW1vdW50KSxcbiAgICAgIF0pLFxuICApXG4gIGNvbnN0IG1lZGlhID0gQXJyYXkuZnJvbShcbiAgICBuZXcgTWFwKFxuICAgICAgW1xuICAgICAgICAuLi4ocHJvZHVjdC50aHVtYm5haWxcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVybDogcHJvZHVjdC50aHVtYm5haWwsXG4gICAgICAgICAgICAgICAgYXNzZXRfaWQ6IHByb2R1Y3QudGh1bWJuYWlsX2Fzc2V0X2lkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4uKHByb2R1Y3QuaW1hZ2VzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGltYWdlKSA9PiBpbWFnZS51cmwpXG4gICAgICAgICAgLm1hcCgoaW1hZ2UpID0+ICh7XG4gICAgICAgICAgICB1cmw6IFN0cmluZyhpbWFnZS51cmwpLFxuICAgICAgICAgICAgYXNzZXRfaWQ6IGltYWdlLmFzc2V0X2lkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KSksXG4gICAgICBdLm1hcCgoaXRlbSkgPT4gW2l0ZW0udXJsLCBpdGVtXSksXG4gICAgKS52YWx1ZXMoKSxcbiAgKVxuICBjb25zdCBjb25maWd1cmVkQW1vdW50cyA9XG4gICAgQXJyYXkuaXNBcnJheShjb25maWcuYW1vdW50cykgJiYgY29uZmlnLmFtb3VudHMubGVuZ3RoXG4gICAgICA/IGNvbmZpZy5hbW91bnRzXG4gICAgICA6IGNvbmZpZy5hbW91bnQgIT0gbnVsbCAmJiBjb25maWcuY3VycmVuY3lfY29kZVxuICAgICAgICA/IFt7IGFtb3VudDogY29uZmlnLmFtb3VudCwgY3VycmVuY3lfY29kZTogY29uZmlnLmN1cnJlbmN5X2NvZGUgfV1cbiAgICAgICAgOiBbXVxuICBjb25zdCBjb25maWd1cmVkQ29uZGl0aW9ucyA9IChjb25maWcucHVyY2hhc2VfY29uZGl0aW9ucyB8fCBbXSkubWFwKFxuICAgIChjb25kaXRpb24sIGluZGV4KSA9PiAoe1xuICAgICAga2V5OiBgY29uZGl0aW9uLSR7aW5kZXh9YCxcbiAgICAgIGF0dHJpYnV0ZTogY29uZGl0aW9uLmF0dHJpYnV0ZSxcbiAgICAgIG9wZXJhdG9yOiBjb25kaXRpb24ub3BlcmF0b3IsXG4gICAgICB2YWx1ZXM6IGNvbmRpdGlvbi52YWx1ZXMubWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgY29uZGl0aW9uLmF0dHJpYnV0ZSA9PT0gXCJjdXJyZW5jeV9jb2RlXCIgfHxcbiAgICAgICAgICBjb25kaXRpb24uYXR0cmlidXRlID09PSBcInNoaXBwaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlXCJcbiAgICAgICAgICA/IHZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICA6IHZhbHVlLFxuICAgICAgKSxcbiAgICB9KSxcbiAgKVxuICBpZiAoXG4gICAgIWNvbmZpZ3VyZWRDb25kaXRpb25zLnNvbWUoXG4gICAgICAoY29uZGl0aW9uKSA9PiBjb25kaXRpb24uYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIixcbiAgICApICYmXG4gICAgY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIiAmJlxuICAgIGNvbmZpZ3VyZWRBbW91bnRzLmxlbmd0aFxuICApIHtcbiAgICBjb25maWd1cmVkQ29uZGl0aW9ucy5wdXNoKHtcbiAgICAgIGtleTogXCJjb25kaXRpb24tbGVnYWN5LWN1cnJlbmN5XCIsXG4gICAgICBhdHRyaWJ1dGU6IFwiY3VycmVuY3lfY29kZVwiLFxuICAgICAgb3BlcmF0b3I6IGNvbmZpZ3VyZWRBbW91bnRzLmxlbmd0aCA9PT0gMSA/IFwiZXFcIiA6IFwiaW5cIixcbiAgICAgIHZhbHVlczogY29uZmlndXJlZEFtb3VudHMubWFwKChhbW91bnQpID0+XG4gICAgICAgIGFtb3VudC5jdXJyZW5jeV9jb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICApLFxuICAgIH0pXG4gIH1cbiAgaWYgKFxuICAgICFjb25maWd1cmVkQ29uZGl0aW9ucy5zb21lKFxuICAgICAgKGNvbmRpdGlvbikgPT4gY29uZGl0aW9uLmF0dHJpYnV0ZSA9PT0gXCJzYWxlc19jaGFubmVsX2lkXCIsXG4gICAgKSAmJlxuICAgIHByb2R1Y3Quc2FsZXNfY2hhbm5lbHM/Lmxlbmd0aFxuICApIHtcbiAgICBjb25maWd1cmVkQ29uZGl0aW9ucy5wdXNoKHtcbiAgICAgIGtleTogXCJjb25kaXRpb24tbGVnYWN5LXNhbGVzLWNoYW5uZWxcIixcbiAgICAgIGF0dHJpYnV0ZTogXCJzYWxlc19jaGFubmVsX2lkXCIsXG4gICAgICBvcGVyYXRvcjogcHJvZHVjdC5zYWxlc19jaGFubmVscy5sZW5ndGggPT09IDEgPyBcImVxXCIgOiBcImluXCIsXG4gICAgICB2YWx1ZXM6IHByb2R1Y3Quc2FsZXNfY2hhbm5lbHMubWFwKChjaGFubmVsKSA9PiBjaGFubmVsLmlkKSxcbiAgICB9KVxuICB9XG4gIGNvbnN0IGV4cGlyYXRpb25Qb2xpY3kgPSBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3lcbiAgY29uc3QgY29uZmlndXJlZEFtb3VudFJvd3MgPSBjb25maWd1cmVkQW1vdW50cy5tYXAoKHJvdywgaW5kZXgpID0+ICh7XG4gICAga2V5OiBgY291cG9uLXZhbHVlLSR7aW5kZXh9YCxcbiAgICBhbW91bnQ6IFN0cmluZyhyb3cuYW1vdW50KSxcbiAgICBjdXJyZW5jeV9jb2RlOiByb3cuY3VycmVuY3lfY29kZS50b0xvd2VyQ2FzZSgpLFxuICB9KSlcbiAgY29uc3QgYW1vdW50Um93cyA9XG4gICAgY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIlxuICAgICAgPyByZWNvbmNpbGVDb3Vwb25BbW91bnRzKFxuICAgICAgICBjb25maWd1cmVkQW1vdW50Um93cyxcbiAgICAgICAgZWZmZWN0aXZlQ291cG9uQ3VycmVuY2llcyhjb25maWd1cmVkQ29uZGl0aW9ucywgb3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdKSxcbiAgICAgIClcbiAgICAgIDogY29uZmlndXJlZEFtb3VudFJvd3NcblxuICByZXR1cm4ge1xuICAgIHByb2R1Y3Q6IHtcbiAgICAgIC4uLmVtcHR5UHJvZHVjdChvcHRpb25zKSxcbiAgICAgIHRpdGxlOiBwcm9kdWN0LnRpdGxlIHx8IFwiXCIsXG4gICAgICBzdWJ0aXRsZTogcHJvZHVjdC5zdWJ0aXRsZSB8fCBcIlwiLFxuICAgICAgaGFuZGxlOiBwcm9kdWN0LmhhbmRsZSB8fCBcIlwiLFxuICAgICAgZGVzY3JpcHRpb246IHByb2R1Y3QuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIG1lZGlhLFxuICAgICAgc2t1OiB2YXJpYW50Py5za3UgfHwgXCJcIixcbiAgICAgIHByaWNlX2Ftb3VudHM6IHtcbiAgICAgICAgLi4uZW1wdHlQcm9kdWN0KG9wdGlvbnMpLnByaWNlX2Ftb3VudHMsXG4gICAgICAgIC4uLnByaWNlcyxcbiAgICAgIH0sXG4gICAgICBzdGF0dXM6IHByb2R1Y3Quc3RhdHVzIHx8IFwiZHJhZnRcIixcbiAgICAgIGRpc2NvdW50YWJsZTogQm9vbGVhbihwcm9kdWN0LmRpc2NvdW50YWJsZSksXG4gICAgICB0eXBlX2lkOiBwcm9kdWN0LnR5cGVfaWQgfHwgXCJcIixcbiAgICAgIGNvbGxlY3Rpb25faWQ6IHByb2R1Y3QuY29sbGVjdGlvbl9pZCB8fCBcIlwiLFxuICAgICAgY2F0ZWdvcnlfaWQ6IHByb2R1Y3QuY2F0ZWdvcmllcz8uWzBdPy5pZCB8fCBcIlwiLFxuICAgICAgdGFnX2lkOiBwcm9kdWN0LnRhZ3M/LlswXT8uaWQgfHwgXCJcIixcbiAgICB9LFxuICAgIGNvdXBvbjoge1xuICAgICAgLi4uZW1wdHlDb3Vwb24ob3B0aW9ucyksXG4gICAgICBlbmFibGVkOiBjb25maWcuZW5hYmxlZCxcbiAgICAgIHR5cGU6IGNvdXBvblR5cGVGcm9tQ29uZmlnKGNvbmZpZyksXG4gICAgICBwdXJjaGFzZV9jb25kaXRpb25zOiBjb25maWd1cmVkQ29uZGl0aW9ucyxcbiAgICAgIGFtb3VudHM6XG4gICAgICAgIGNvbmZpZy5iZW5lZml0X3R5cGUgPT09IFwiZml4ZWRfYW1vdW50XCJcbiAgICAgICAgICA/IGFtb3VudFJvd3NcbiAgICAgICAgICA6IGFtb3VudFJvd3MubGVuZ3RoXG4gICAgICAgICAgICA/IGFtb3VudFJvd3NcbiAgICAgICAgICAgIDogZW1wdHlDb3Vwb24ob3B0aW9ucykuYW1vdW50cyxcbiAgICAgIHBlcmNlbnRhZ2U6IGNvbmZpZy5wZXJjZW50YWdlID09IG51bGwgPyBcIlwiIDogU3RyaW5nKGNvbmZpZy5wZXJjZW50YWdlKSxcbiAgICAgIGFsbG9jYXRpb246XG4gICAgICAgIGNvbmZpZy5wcm9tb3Rpb25fdGVtcGxhdGU/LmFwcGxpY2F0aW9uX21ldGhvZD8uYWxsb2NhdGlvbiA9PT0gXCJvbmNlXCJcbiAgICAgICAgICA/IChcIm9uY2VcIiBhcyBjb25zdClcbiAgICAgICAgICA6IChcImVhY2hcIiBhcyBjb25zdCksXG4gICAgICBjb2RlX3N0cmF0ZWd5OiBjb25maWcuY29kZV9zdHJhdGVneSxcbiAgICAgIGNvZGVfcHJlZml4OiBjb25maWcuY29kZV9wcmVmaXggfHwgXCJcIixcbiAgICAgIHNoYXJlZF9jb2RlOiBjb25maWcuc2hhcmVkX2NvZGUgfHwgXCJcIixcbiAgICAgIGV4cGlyYXRpb25fdHlwZTogY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlIHx8IFwiZHVyYXRpb25cIixcbiAgICAgIGV4cGlyYXRpb25fZHVyYXRpb246XG4gICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8udHlwZSA9PT0gXCJkdXJhdGlvblwiXG4gICAgICAgICAgPyBTdHJpbmcoXG4gICAgICAgICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5kdXJhdGlvbiA/P1xuICAgICAgICAgICAgICBjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kuZHVyYXRpb25fZGF5cyA/P1xuICAgICAgICAgICAgICAzMCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFwiMzBcIixcbiAgICAgIGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdDpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImR1cmF0aW9uXCJcbiAgICAgICAgICA/IGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeS5kdXJhdGlvbl91bml0IHx8IFwiZGF5c1wiXG4gICAgICAgICAgOiBcImRheXNcIixcbiAgICAgIGV4cGlyYXRpb25fdGltZV9wb2xpY3k6XG4gICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8udHlwZSA9PT0gXCJkdXJhdGlvblwiIHx8XG4gICAgICAgIGNvbmZpZy5leHBpcmF0aW9uX3BvbGljeT8udHlwZSA9PT0gXCJtb250aF9lbmRcIlxuICAgICAgICAgID8gY29uZmlnLmV4cGlyYXRpb25fcG9saWN5LnRpbWVfcG9saWN5IHx8IFwiZXhhY3RseVwiXG4gICAgICAgICAgOiBcImRheV9lbmRcIixcbiAgICAgIGV4cGlyYXRpb25fZGF0ZTpcbiAgICAgICAgY29uZmlnLmV4cGlyYXRpb25fcG9saWN5Py50eXBlID09PSBcImZpeGVkXCJcbiAgICAgICAgICA/IHRvRGF0ZVRpbWVMb2NhbChjb25maWcuZXhwaXJhdGlvbl9wb2xpY3kuZXhwaXJlc19hdClcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbjpcbiAgICAgICAgZXhwaXJhdGlvblBvbGljeS50eXBlID09PSBcIm5vbmVcIiB8fFxuICAgICAgICBleHBpcmF0aW9uUG9saWN5LmNhcF9ieV9jYW1wYWlnbiAhPT0gZmFsc2UsXG4gICAgICBleHBpcmF0aW9uX2NhcF9hdDpcbiAgICAgICAgZXhwaXJhdGlvblBvbGljeS50eXBlID09PSBcIm5vbmVcIlxuICAgICAgICAgID8gXCJcIlxuICAgICAgICAgIDogdG9EYXRlVGltZUxvY2FsKGV4cGlyYXRpb25Qb2xpY3kuY2FwX2F0KSxcbiAgICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTogU3RyaW5nKFxuICAgICAgICBjb25maWcubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtIHx8IDEsXG4gICAgICApLFxuICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlOiBjb25maWcucHJvbW90aW9uX21pcnJvcl9tb2RlIHx8IFwibm9uZVwiLFxuICAgICAgcHJvbW90aW9uX3N0YXR1czogY29uZmlnLnByb21vdGlvbl9zdGF0dXMgfHwgXCJkcmFmdFwiLFxuICAgIH0sXG4gICAgY2FtcGFpZ246IHtcbiAgICAgIC4uLmVtcHR5Q2FtcGFpZ24sXG4gICAgICBtb2RlOiBjb25maWcuY2FtcGFpZ25faWQgPyAoXCJleGlzdGluZ1wiIGFzIGNvbnN0KSA6IChcIm5vbmVcIiBhcyBjb25zdCksXG4gICAgICBjYW1wYWlnbl9pZDogY29uZmlnLmNhbXBhaWduX2lkIHx8IFwiXCIsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtb2RhbENvbnRlbnRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIG92ZXJmbG93OiBcImhpZGRlblwiLFxufVxuXG5jb25zdCBtb2RhbFdpemFyZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImZsZXhcIixcbiAgZmxleDogXCIxIDEgYXV0b1wiLFxuICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICBtaW5IZWlnaHQ6IDAsXG4gIG92ZXJmbG93OiBcImhpZGRlblwiLFxufVxuXG5jb25zdCB2aXN1YWxseUhpZGRlblN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBjbGlwOiBcInJlY3QoMCAwIDAgMClcIixcbiAgY2xpcFBhdGg6IFwiaW5zZXQoNTAlKVwiLFxuICBoZWlnaHQ6IDEsXG4gIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxuICB3aWR0aDogMSxcbn1cblxuY29uc3QgbW9kYWxCb2R5U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGZsZXg6IFwiMSAxIGF1dG9cIixcbiAgbWluSGVpZ2h0OiAwLFxuICBwYWRkaW5nOiAwLFxufVxuXG5jb25zdCBtb2RhbFNjcm9sbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICBvdmVyZmxvd1k6IFwiYXV0b1wiLFxuICBwYWRkaW5nOiBcIjY0cHggMjRweCAxMTJweFwiLFxuICB3aWR0aDogXCIxMDAlXCIsXG59XG5cbmNvbnN0IG1vZGFsRm9ybVN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBtYXJnaW46IFwiMCBhdXRvXCIsXG4gIG1heFdpZHRoOiA3MjAsXG4gIHdpZHRoOiBcIm1pbig3MjBweCwgMTAwJSlcIixcbn1cblxuY29uc3Qgc3RhY2tTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gIGdhcDogMjQsXG59XG5cbmNvbnN0IHR3b0NvbHVtbkdyaWRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgZGlzcGxheTogXCJncmlkXCIsXG4gIGdhcDogMTYsXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjYwcHgsIDFmcikpXCIsXG59XG5cbmNvbnN0IHRocmVlQ29sdW1uR3JpZFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICBkaXNwbGF5OiBcImdyaWRcIixcbiAgZ2FwOiAxNixcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJyZXBlYXQoYXV0by1maXQsIG1pbm1heCgxODBweCwgMWZyKSlcIixcbn1cblxuY29uc3QgcGFuZWxTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgYm9yZGVyOiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgYm9yZGVyUmFkaXVzOiA4LFxuICBwYWRkaW5nOiAxNixcbn1cblxuZnVuY3Rpb24gRmllbGQoe1xuICBjaGlsZHJlbixcbiAgbGFiZWwsXG4gIG9wdGlvbmFsLFxuICB0b29sdGlwLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gIGxhYmVsOiBzdHJpbmdcbiAgb3B0aW9uYWw/OiBib29sZWFuXG4gIHRvb2x0aXA/OiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktMVwiIHN0eWxlPXt7IG1pbldpZHRoOiAwIH19PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0xXCI+XG4gICAgICAgIDxMYWJlbD57bGFiZWx9PC9MYWJlbD5cbiAgICAgICAge3Rvb2x0aXAgJiYgKFxuICAgICAgICAgIDxUb29sdGlwIGNvbnRlbnQ9e3Rvb2x0aXB9PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YCR7bGFiZWx9IGluZm9ybWF0aW9uYH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJbmZvcm1hdGlvbkNpcmNsZSAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICApfVxuICAgICAgICB7b3B0aW9uYWwgJiYgKFxuICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgIChPcHRpb25hbClcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWN0aW9uKHtcbiAgY2hpbGRyZW4sXG4gIGRlc2NyaXB0aW9uLFxuICB0aXRsZSxcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG59KSB7XG4gIHJldHVybiAoXG4gICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS00XCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8SGVhZGluZyBsZXZlbD1cImgyXCI+e3RpdGxlfTwvSGVhZGluZz5cbiAgICAgICAge2Rlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zZWN0aW9uPlxuICApXG59XG5cbmZ1bmN0aW9uIE9wdGlvblNlbGVjdCh7XG4gIG9uQ2hhbmdlLFxuICBvcHRpb25zLFxuICB2YWx1ZSxcbn06IHtcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIG9wdGlvbnM6IE9wdGlvblJlY29yZFtdXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0XG4gICAgICB2YWx1ZT17dmFsdWUgfHwgTk9ORX1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9eyhuZXh0KSA9PiBvbkNoYW5nZShuZXh0ID09PSBOT05FID8gXCJcIiA6IG5leHQpfVxuICAgID5cbiAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPXtOT05FfT5Ob25lPC9TZWxlY3QuSXRlbT5cbiAgICAgICAge29wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtvcHRpb24uaWR9IHZhbHVlPXtvcHRpb24uaWR9PlxuICAgICAgICAgICAge29wdGlvbkxhYmVsKG9wdGlvbil9XG4gICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgKSl9XG4gICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgIDwvU2VsZWN0PlxuICApXG59XG5cbmZ1bmN0aW9uIEN1cnJlbmN5U2VsZWN0KHtcbiAgY3VycmVuY2llcyxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFxuICAgICAgdmFsdWU9e3ZhbHVlIHx8IHVuZGVmaW5lZH1cbiAgICAgIGRpc2FibGVkPXshY3VycmVuY2llcy5sZW5ndGh9XG4gICAgICBvblZhbHVlQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICA+XG4gICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgIDxTZWxlY3QuVmFsdWVcbiAgICAgICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgICAgICBjdXJyZW5jaWVzLmxlbmd0aCA/IFwiU2VsZWN0IGN1cnJlbmN5XCIgOiBcIk5vIGN1cnJlbmNpZXMgYXZhaWxhYmxlXCJcbiAgICAgICAgICB9XG4gICAgICAgIC8+XG4gICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICB7Y3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiAoXG4gICAgICAgICAgPFNlbGVjdC5JdGVtIGtleT17Y3VycmVuY3kuY29kZX0gdmFsdWU9e2N1cnJlbmN5LmNvZGV9PlxuICAgICAgICAgICAge2N1cnJlbmN5Lm5hbWV9ICh7Y3VycmVuY3kuY29kZS50b1VwcGVyQ2FzZSgpfSlcbiAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICApKX1cbiAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgPC9TZWxlY3Q+XG4gIClcbn1cblxuZnVuY3Rpb24gQ3VycmVuY3lBbW91bnRGaWVsZCh7XG4gIGN1cnJlbmNpZXMsXG4gIGN1cnJlbmN5Q29kZSxcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBjdXJyZW5jaWVzOiBDdXJyZW5jeU9wdGlvbltdXG4gIGN1cnJlbmN5Q29kZTogc3RyaW5nXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGN1cnJlbmN5Q29kZSlcbiAgY29uc3QgY29kZSA9IGN1cnJlbmN5Q29kZS50b1VwcGVyQ2FzZSgpXG4gIGNvbnN0IGRlY2ltYWxzID0gY3VycmVuY3lEZWNpbWFsRGlnaXRzKGNvZGUgfHwgXCJVU0RcIilcbiAgcmV0dXJuIChcbiAgICA8Q3VycmVuY3lJbnB1dFxuICAgICAgY29kZT17Y29kZSB8fCBcIlVTRFwifVxuICAgICAgc3ltYm9sPXtcbiAgICAgICAgY3VycmVuY3k/LnN5bWJvbF9uYXRpdmUgfHxcbiAgICAgICAgY3VycmVuY3k/LnN5bWJvbCB8fFxuICAgICAgICBjdXJyZW5jeVN5bWJvbChjb2RlIHx8IFwiVVNEXCIpXG4gICAgICB9XG4gICAgICBtaW49ezB9XG4gICAgICBkZWNpbWFsU2NhbGU9e2RlY2ltYWxzfVxuICAgICAgZGVjaW1hbHNMaW1pdD17ZGVjaW1hbHN9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBkaXNhYmxlZD17IWN1cnJlbmN5Q29kZX1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9eyhuZXh0VmFsdWUpID0+IG9uQ2hhbmdlKG5leHRWYWx1ZSB8fCBcIlwiKX1cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFBlcmNlbnRhZ2VJbnB1dCh7XG4gIG9uQ2hhbmdlLFxuICB2YWx1ZSxcbn06IHtcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHZhbHVlOiBzdHJpbmdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLXN0cmV0Y2hcIiBzdHlsZT17eyB3aWR0aDogXCIxMDAlXCIgfX0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImJnLXVpLWJnLWZpZWxkIHRleHQtdWktZmctbXV0ZWQgZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBib3JkZXJDb2xvcjogXCJ2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiNnB4IDAgMCA2cHhcIixcbiAgICAgICAgICBib3JkZXJSaWdodDogMCxcbiAgICAgICAgICBwYWRkaW5nOiBcIjAgMTJweFwiLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICAlXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwibWluLXctMCBmbGV4LTFcIlxuICAgICAgICBzdHlsZT17eyBmbGV4OiBcIjEgMSAwJVwiLCBtaW5XaWR0aDogMCB9fVxuICAgICAgPlxuICAgICAgICA8SW5wdXRcbiAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGxcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIG1pbj17MX1cbiAgICAgICAgICBtYXg9ezEwMH1cbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCIwIDZweCA2cHggMFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gb25DaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIEhhbmRsZUlucHV0KHtcbiAgb25DaGFuZ2UsXG4gIHZhbHVlLFxufToge1xuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgdmFsdWU6IHN0cmluZ1xufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZCBwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LXktMCBsZWZ0LTAgei0xMCBmbGV4IG1pbi13LTggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1yIHB4LTIuNVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0eHQtY29tcGFjdC1zbWFsbCBmb250LW1lZGl1bVwiPi88L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxJbnB1dFxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIHBsYWNlaG9sZGVyPVwid2ludGVyLWphY2tldFwiXG4gICAgICAgIHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiAzNCB9fVxuICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5mdW5jdGlvbiBNZWRpYVVwbG9hZCh7XG4gIGlzVXBsb2FkaW5nLFxuICBtZWRpYSxcbiAgb25SZW1vdmUsXG4gIG9uVXBsb2FkLFxufToge1xuICBpc1VwbG9hZGluZzogYm9vbGVhblxuICBtZWRpYTogUHJvZHVjdE1lZGlhW11cbiAgb25SZW1vdmU6IChtZWRpYTogUHJvZHVjdE1lZGlhKSA9PiB2b2lkXG4gIG9uVXBsb2FkOiAoZmlsZXM6IEZpbGVbXSkgPT4gdm9pZFxufSkge1xuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBhY2NlcHQgPVxuICAgIFwiaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2UvZ2lmLGltYWdlL3dlYnAsaW1hZ2UvaGVpYyxpbWFnZS9zdmcreG1sXCJcblxuICBjb25zdCBoYW5kbGVGaWxlcyA9IChmaWxlczogRmlsZUxpc3QgfCBudWxsKSA9PiB7XG4gICAgaWYgKCFmaWxlcz8ubGVuZ3RoKSByZXR1cm5cbiAgICBvblVwbG9hZChBcnJheS5mcm9tKGZpbGVzKSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyb3AgPSAoZXZlbnQ6IERyYWdFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgaGFuZGxlRmlsZXMoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLXktM1wiPlxuICAgICAge21lZGlhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtM1wiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDEyMHB4LCAxZnIpKVwiLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7bWVkaWEubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uYXNzZXRfaWQgfHwgaXRlbS51cmx9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1kIGJvcmRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e2l0ZW0udXJsfVxuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0zMiB3LWZ1bGwgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IDEyOCB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXgtMCBib3R0b20tMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYmctYmxhY2svNjAgcHgtMiBweS0xXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzbWFsbFwiIHN0eWxlPXt7IGNvbG9yOiBcIndoaXRlXCIgfX0+XG4gICAgICAgICAgICAgICAgICB7aW5kZXggPT09IDAgPyBcIlRodW1ibmFpbFwiIDogYEltYWdlICR7aW5kZXggKyAxfWB9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZSBpbWFnZVwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogXCJ3aGl0ZVwiIH19XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblJlbW92ZShpdGVtKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8WE1hcmtNaW5pIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxpbnB1dFxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGhpZGRlblxuICAgICAgICBtdWx0aXBsZVxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUZpbGVzKGV2ZW50LnRhcmdldC5maWxlcylcbiAgICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSBcIlwiXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgZGlzYWJsZWQ9e2lzVXBsb2FkaW5nfVxuICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkIGZsZXggdy1mdWxsIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAteS0yIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1kYXNoZWQgcC04XCJcbiAgICAgICAgc3R5bGU9e3sgbWluSGVpZ2h0OiAxNDggfX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gaW5wdXRSZWYuY3VycmVudD8uY2xpY2soKX1cbiAgICAgICAgb25EcmFnT3Zlcj17KGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICBvbkRyb3A9e2hhbmRsZURyb3B9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtdWktZmctYmFzZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0yXCI+XG4gICAgICAgICAgPEFycm93VXBUcmF5IC8+XG4gICAgICAgICAge2lzVXBsb2FkaW5nID8gXCJVcGxvYWRpbmcgaW1hZ2VzLi4uXCIgOiBcIlVwbG9hZCBpbWFnZXNcIn1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgRHJhZyBhbmQgZHJvcCBpbWFnZXMgaGVyZSBvciBjbGljayB0byB1cGxvYWQuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApXG59XG5cbnR5cGUgQ29uZGl0aW9uVmFsdWVPcHRpb24gPSB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVxuXG5mdW5jdGlvbiBjb25kaXRpb25WYWx1ZU9wdGlvbnMoXG4gIGF0dHJpYnV0ZTogUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGUgfCBcIlwiLFxuICBvcHRpb25zOiBPcHRpb25zUGF5bG9hZCxcbik6IENvbmRpdGlvblZhbHVlT3B0aW9uW10ge1xuICBpZiAoYXR0cmlidXRlID09PSBcImN1cnJlbmN5X2NvZGVcIikge1xuICAgIHJldHVybiAob3B0aW9ucy5jdXJyZW5jaWVzIHx8IFtdKS5tYXAoKGN1cnJlbmN5KSA9PiAoe1xuICAgICAgdmFsdWU6IGN1cnJlbmN5LmNvZGUsXG4gICAgICBsYWJlbDogYCR7Y3VycmVuY3kubmFtZX0gKCR7Y3VycmVuY3kuY29kZS50b1VwcGVyQ2FzZSgpfSlgLFxuICAgIH0pKVxuICB9XG4gIGlmIChhdHRyaWJ1dGUgPT09IFwic2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGVcIikge1xuICAgIHJldHVybiAob3B0aW9ucy5jb3VudHJpZXMgfHwgW10pLm1hcCgoY291bnRyeSkgPT4gKHtcbiAgICAgIHZhbHVlOiBTdHJpbmcoY291bnRyeS5pc29fMiB8fCBjb3VudHJ5LmlkKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgbGFiZWw6IGNvdW50cnkuZGlzcGxheV9uYW1lIHx8IGNvdW50cnkubmFtZSB8fCBjb3VudHJ5LmlkLFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgcmVjb3JkcyA9XG4gICAgYXR0cmlidXRlID09PSBcImN1c3RvbWVyLmdyb3Vwcy5pZFwiXG4gICAgICA/IG9wdGlvbnMuY3VzdG9tZXJfZ3JvdXBzXG4gICAgICA6IGF0dHJpYnV0ZSA9PT0gXCJyZWdpb24uaWRcIlxuICAgICAgICA/IG9wdGlvbnMucmVnaW9uc1xuICAgICAgICA6IGF0dHJpYnV0ZSA9PT0gXCJzYWxlc19jaGFubmVsX2lkXCJcbiAgICAgICAgICA/IG9wdGlvbnMuc2FsZXNfY2hhbm5lbHNcbiAgICAgICAgICA6IFtdXG4gIHJldHVybiAocmVjb3JkcyB8fCBbXSkubWFwKChyZWNvcmQpID0+ICh7XG4gICAgdmFsdWU6IHJlY29yZC5pZCxcbiAgICBsYWJlbDogb3B0aW9uTGFiZWwocmVjb3JkKSxcbiAgfSkpXG59XG5cbmZ1bmN0aW9uIE11bHRpQ29uZGl0aW9uVmFsdWVzKHtcbiAgYXR0cmlidXRlLFxuICBvbkNoYW5nZSxcbiAgb3B0aW9ucyxcbiAgdmFsdWUsXG59OiB7XG4gIGF0dHJpYnV0ZTogUHVyY2hhc2VDb25kaXRpb25BdHRyaWJ1dGVcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nW10pID0+IHZvaWRcbiAgb3B0aW9uczogQ29uZGl0aW9uVmFsdWVPcHRpb25bXVxuICB2YWx1ZTogc3RyaW5nW11cbn0pIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtkcmFmdCwgc2V0RHJhZnRdID0gdXNlU3RhdGUodmFsdWUpXG4gIGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZShcIlwiKVxuICBjb25zdCBsYWJlbHMgPSBPYmplY3QuZnJvbUVudHJpZXMob3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gW29wdGlvbi52YWx1ZSwgb3B0aW9uLmxhYmVsXSkpXG4gIGNvbnN0IGZpbHRlcmVkID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudHJpbSgpLnRvTG93ZXJDYXNlKCkpLFxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0XCJcbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHNldERyYWZ0KHZhbHVlKVxuICAgICAgICAgIHNldFNlYXJjaChcIlwiKVxuICAgICAgICAgIHNldE9wZW4odHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3ZhbHVlLmxlbmd0aFxuICAgICAgICAgID8gdmFsdWUubGVuZ3RoID09PSAxXG4gICAgICAgICAgICA/IGxhYmVsc1t2YWx1ZVswXV0gfHwgdmFsdWVbMF1cbiAgICAgICAgICAgIDogYCR7dmFsdWUubGVuZ3RofSB2YWx1ZXMgc2VsZWN0ZWRgXG4gICAgICAgICAgOiBcIlNlbGVjdCB2YWx1ZXNcIn1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAge3ZhbHVlLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmxleCBmbGV4LXdyYXAgZ2FwLTFcIj5cbiAgICAgICAgICB7dmFsdWUubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBrZXk9e2l0ZW19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXVpLWJnLWNvbXBvbmVudCB0ZXh0LXVpLWZnLXN1YnRsZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0xIHJvdW5kZWQtbWQgYm9yZGVyIHB4LTIgcHktMSB0ZXh0LXhzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xhYmVsc1tpdGVtXSB8fCBpdGVtfVxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YFJlbW92ZSAke2xhYmVsc1tpdGVtXSB8fCBpdGVtfWB9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UodmFsdWUuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkgIT09IGl0ZW0pKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxYTWFya01pbmkgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxEcmF3ZXIgb3Blbj17b3Blbn0gb25PcGVuQ2hhbmdlPXtzZXRPcGVufT5cbiAgICAgICAgPERyYXdlci5Db250ZW50PlxuICAgICAgICAgIDxEcmF3ZXIuSGVhZGVyPlxuICAgICAgICAgICAgPERyYXdlci5UaXRsZT5cbiAgICAgICAgICAgICAgU2VsZWN0IHtjb25kaXRpb25BdHRyaWJ1dGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IGF0dHJpYnV0ZSk/LmxhYmVsfVxuICAgICAgICAgICAgPC9EcmF3ZXIuVGl0bGU+XG4gICAgICAgICAgPC9EcmF3ZXIuSGVhZGVyPlxuICAgICAgICAgIDxEcmF3ZXIuQm9keSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTMgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggdmFsdWVzXCJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gc2V0U2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2ZpbHRlcmVkLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgZmlsdGVyZWQubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGtleT17b3B0aW9uLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgZ2FwLXgtMyByb3VuZGVkLW1kIGJvcmRlciBwLTNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtkcmFmdC5pbmNsdWRlcyhvcHRpb24udmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldERyYWZ0KChjdXJyZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IEFycmF5LmZyb20obmV3IFNldChbLi4uY3VycmVudCwgb3B0aW9uLnZhbHVlXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gb3B0aW9uLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8VGV4dD57b3B0aW9uLmxhYmVsfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFRleHQgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPk5vIG1hdGNoaW5nIHZhbHVlcy48L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRHJhd2VyLkJvZHk+XG4gICAgICAgICAgPERyYXdlci5Gb290ZXI+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gc2V0T3BlbihmYWxzZSl9PlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFkcmFmdC5sZW5ndGh9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZShkcmFmdClcbiAgICAgICAgICAgICAgICBzZXRPcGVuKGZhbHNlKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBBcHBseVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9EcmF3ZXIuRm9vdGVyPlxuICAgICAgICA8L0RyYXdlci5Db250ZW50PlxuICAgICAgPC9EcmF3ZXI+XG4gICAgPC8+XG4gIClcbn1cblxuZnVuY3Rpb24gUHVyY2hhc2VDb25kaXRpb25zRmllbGQoe1xuICBmaXhlZEFtb3VudCxcbiAgb25DaGFuZ2UsXG4gIG9wdGlvbnMsXG4gIHZhbHVlLFxufToge1xuICBmaXhlZEFtb3VudDogYm9vbGVhblxuICBvbkNoYW5nZTogKGNvbmRpdGlvbnM6IFB1cmNoYXNlQ29uZGl0aW9uRm9ybVtdKSA9PiB2b2lkXG4gIG9wdGlvbnM6IE9wdGlvbnNQYXlsb2FkXG4gIHZhbHVlOiBQdXJjaGFzZUNvbmRpdGlvbkZvcm1bXVxufSkge1xuICBjb25zdCBzZWxlY3RlZEF0dHJpYnV0ZXMgPSBuZXcgU2V0KFxuICAgIHZhbHVlLm1hcCgoY29uZGl0aW9uKSA9PiBjb25kaXRpb24uYXR0cmlidXRlKS5maWx0ZXIoQm9vbGVhbiksXG4gIClcblxuICBjb25zdCByZXBsYWNlID0gKGtleTogc3RyaW5nLCB1cGRhdGU6IFBhcnRpYWw8UHVyY2hhc2VDb25kaXRpb25Gb3JtPikgPT5cbiAgICBvbkNoYW5nZShcbiAgICAgIHZhbHVlLm1hcCgoY29uZGl0aW9uKSA9PlxuICAgICAgICBjb25kaXRpb24ua2V5ID09PSBrZXkgPyB7IC4uLmNvbmRpdGlvbiwgLi4udXBkYXRlIH0gOiBjb25kaXRpb24sXG4gICAgICApLFxuICAgIClcblxuICByZXR1cm4gKFxuICAgIDxTZWN0aW9uXG4gICAgICB0aXRsZT1cIldobyBjYW4gcHVyY2hhc2UgdGhpcyBjb3Vwb24/XCJcbiAgICAgIGRlc2NyaXB0aW9uPVwiQ291cG9uIHByb2R1Y3RzIGNhbiBiZSBwdXJjaGFzZWQgYnkgYWxsIGN1c3RvbWVycyB3aGVuIG5vIGNvbmRpdGlvbnMgYXJlIGNvbmZpZ3VyZWQuIENvbmRpdGlvbnMgYXJlIGNvbWJpbmVkIHdpdGggQU5ELlwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTNcIj5cbiAgICAgICAge3ZhbHVlLm1hcCgoY29uZGl0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbmRpdGlvblZhbHVlT3B0aW9ucyhjb25kaXRpb24uYXR0cmlidXRlLCBvcHRpb25zKVxuICAgICAgICAgIGNvbnN0IGN1cnJlbmN5UmVxdWlyZWQgPVxuICAgICAgICAgICAgZml4ZWRBbW91bnQgJiYgY29uZGl0aW9uLmF0dHJpYnV0ZSA9PT0gXCJjdXJyZW5jeV9jb2RlXCJcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e2NvbmRpdGlvbi5rZXl9PlxuICAgICAgICAgICAgICB7aW5kZXggPiAwICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWQgZmxleCBoLTggaXRlbXMtY2VudGVyIHRleHQteHMgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIEFORFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtwYW5lbFN0eWxlfSBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGdhcC15LTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtc3RhcnQgZ2FwLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb25kaXRpb24uYXR0cmlidXRlIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVuY3lSZXF1aXJlZH1cbiAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoYXR0cmlidXRlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZShjb25kaXRpb24ua2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogYXR0cmlidXRlIGFzIFB1cmNoYXNlQ29uZGl0aW9uQXR0cmlidXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSBwbGFjZWhvbGRlcj1cIlNlbGVjdCBhdHRyaWJ1dGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbmRpdGlvbkF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlidXRlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlLnZhbHVlID09PSBjb25kaXRpb24uYXR0cmlidXRlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc2VsZWN0ZWRBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGUudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGF0dHJpYnV0ZSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSBrZXk9e2F0dHJpYnV0ZS52YWx1ZX0gdmFsdWU9e2F0dHJpYnV0ZS52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YXR0cmlidXRlLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVuY3lSZXF1aXJlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlbW92ZSBjb25kaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKHZhbHVlLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5rZXkgIT09IGNvbmRpdGlvbi5rZXkpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxYTWFya01pbmkgLz5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb25kaXRpb24ub3BlcmF0b3IgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvbmRpdGlvbi5hdHRyaWJ1dGV9XG4gICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhvcGVyYXRvcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlKGNvbmRpdGlvbi5rZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciBhcyBQdXJjaGFzZUNvbmRpdGlvbk9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gXCJlcVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb25kaXRpb24udmFsdWVzLnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb25kaXRpb24udmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgcGxhY2Vob2xkZXI9XCJTZWxlY3Qgb3BlcmF0b3JcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAge2NvbmRpdGlvbk9wZXJhdG9ycy5tYXAoKG9wZXJhdG9yKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtvcGVyYXRvci52YWx1ZX0gdmFsdWU9e29wZXJhdG9yLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge29wZXJhdG9yLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAge2NvbmRpdGlvbi5hdHRyaWJ1dGUgJiYgY29uZGl0aW9uLm9wZXJhdG9yID09PSBcImVxXCIgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y29uZGl0aW9uLnZhbHVlc1swXSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHNlbGVjdGVkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZShjb25kaXRpb24ua2V5LCB7IHZhbHVlczogW3NlbGVjdGVkXSB9KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdmFsdWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlcy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0ga2V5PXtvcHRpb24udmFsdWV9IHZhbHVlPXtvcHRpb24udmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICkgOiBjb25kaXRpb24uYXR0cmlidXRlICYmIGNvbmRpdGlvbi5vcGVyYXRvciA/IChcbiAgICAgICAgICAgICAgICAgICAgPE11bHRpQ29uZGl0aW9uVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlPXtjb25kaXRpb24uYXR0cmlidXRlfVxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3ZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y29uZGl0aW9uLnZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlcykgPT4gcmVwbGFjZShjb25kaXRpb24ua2V5LCB7IHZhbHVlcyB9KX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBkaXNhYmxlZCBjbGFzc05hbWU9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgZGlzYWJsZWQ9e3NlbGVjdGVkQXR0cmlidXRlcy5zaXplID49IGNvbmRpdGlvbkF0dHJpYnV0ZXMubGVuZ3RofVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT5cbiAgICAgICAgICAgICAgb25DaGFuZ2UoW1xuICAgICAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgICAgIHsga2V5OiBjb25kaXRpb25LZXkoKSwgYXR0cmlidXRlOiBcIlwiLCBvcGVyYXRvcjogXCJcIiwgdmFsdWVzOiBbXSB9LFxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxQbHVzIC8+IEFkZCBjb25kaXRpb25cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICBvbkNoYW5nZShmaXhlZEFtb3VudCA/IGRlZmF1bHRQdXJjaGFzZUNvbmRpdGlvbnMob3B0aW9ucykgOiBbXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICBDbGVhciBhbGxcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1NlY3Rpb24+XG4gIClcbn1cblxuZnVuY3Rpb24gUHJvZHVjdFByaWNlc1RhYmxlKHtcbiAgY3VycmVuY2llcyxcbiAgY291cG9uVmFsdWUsXG4gIG9uQ2hhbmdlLFxuICBwcmljZXMsXG59OiB7XG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5T3B0aW9uW11cbiAgY291cG9uVmFsdWU6IHN0cmluZ1xuICBvbkNoYW5nZTogKGN1cnJlbmN5Q29kZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIHByaWNlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxufSkge1xuICBjb25zdCBbdmlzaWJsZUN1cnJlbmNpZXMsIHNldFZpc2libGVDdXJyZW5jaWVzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPigoKSA9PlxuICAgIGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSksXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFZpc2libGVDdXJyZW5jaWVzKChjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCBhdmFpbGFibGUgPSBuZXcgU2V0KGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSkpXG4gICAgICBjb25zdCByZXRhaW5lZCA9IGN1cnJlbnQuZmlsdGVyKChjb2RlKSA9PiBhdmFpbGFibGUuaGFzKGNvZGUpKVxuICAgICAgY29uc3QgYWRkZWQgPSBjdXJyZW5jaWVzXG4gICAgICAgIC5tYXAoKGN1cnJlbmN5KSA9PiBjdXJyZW5jeS5jb2RlKVxuICAgICAgICAuZmlsdGVyKChjb2RlKSA9PiAhY3VycmVudC5pbmNsdWRlcyhjb2RlKSlcbiAgICAgIHJldHVybiBbLi4ucmV0YWluZWQsIC4uLmFkZGVkXVxuICAgIH0pXG4gIH0sIFtjdXJyZW5jaWVzXSlcblxuICBjb25zdCBzaG93bkN1cnJlbmNpZXMgPSBjdXJyZW5jaWVzLmZpbHRlcigoY3VycmVuY3kpID0+XG4gICAgdmlzaWJsZUN1cnJlbmNpZXMuaW5jbHVkZXMoY3VycmVuY3kuY29kZSksXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLWZ1bGwgZmxleC1jb2wgZGl2aWRlLXkgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXVpLWJnLXN1YnRsZSBmbGV4IHNpemUtZnVsbCBmbGV4LWNvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXVpLWJnLWJhc2UgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIHAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtMlwiPlxuICAgICAgICAgICAgPERyb3Bkb3duTWVudT5cbiAgICAgICAgICAgICAgPERyb3Bkb3duTWVudS5UcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc2l6ZT1cInNtYWxsXCIgdmFyaWFudD1cInNlY29uZGFyeVwiPlxuICAgICAgICAgICAgICAgICAgPEFkanVzdG1lbnRzIC8+XG4gICAgICAgICAgICAgICAgICBWaWV3XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51LlRyaWdnZXI+XG4gICAgICAgICAgICAgIDxEcm9wZG93bk1lbnUuQ29udGVudCBhbGlnbj1cInN0YXJ0XCI+XG4gICAgICAgICAgICAgICAge2N1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudS5DaGVja2JveEl0ZW1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtjdXJyZW5jeS5jb2RlfVxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt2aXNpYmxlQ3VycmVuY2llcy5pbmNsdWRlcyhjdXJyZW5jeS5jb2RlKX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXRWaXNpYmxlQ3VycmVuY2llcygoY3VycmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmN1cnJlbnQsIGN1cnJlbmN5LmNvZGVdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LmZpbHRlcigoY29kZSkgPT4gY29kZSAhPT0gY3VycmVuY3kuY29kZSksXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFByaWNlIHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudS5DaGVja2JveEl0ZW0+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51LkNvbnRlbnQ+XG4gICAgICAgICAgICA8L0Ryb3Bkb3duTWVudT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTJcIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpemUtZnVsbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgPFRhYmxlXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBib3JkZXJDb2xsYXBzZTogXCJjb2xsYXBzZVwiLFxuICAgICAgICAgICAgICB0YWJsZUxheW91dDogXCJmaXhlZFwiLFxuICAgICAgICAgICAgICB3aWR0aDogXCJtYXgtY29udGVudFwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUYWJsZS5IZWFkZXIgc3R5bGU9e3sgYm9yZGVyVG9wOiBcIm5vbmVcIiB9fT5cbiAgICAgICAgICAgICAgPFRhYmxlLlJvdyBzdHlsZT17eyBoZWlnaHQ6IDQwIH19PlxuICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBcInZhcigtLWJnLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIwIDE2cHhcIixcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwic3RpY2t5XCIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogMSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQ291cG9uIFZhbHVlXG4gICAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgIHtzaG93bkN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGxcbiAgICAgICAgICAgICAgICAgICAga2V5PXtjdXJyZW5jeS5jb2RlfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwidmFyKC0tYmctYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCB2YXIoLS1ib3JkZXItYmFzZSlcIixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjAgMTZweFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRydW5jYXRlXCIgdGl0bGU9e2BQcmljZSAke2N1cnJlbmN5LmNvZGUudG9VcHBlckNhc2UoKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByaWNlIHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW5jeS5pc190YXhfaW5jbHVzaXZlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRheEluY2x1c2l2ZSBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkIHNocmluay0wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRheEV4Y2x1c2l2ZSBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkIHNocmluay0wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICA8VGFibGUuUm93IGNsYXNzTmFtZT1cImJnLXVpLWJnLXN1YnRsZVwiIHN0eWxlPXt7IGhlaWdodDogNDAgfX0+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGxcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwidmFyKC0tYmctc3VidGxlKVwiLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSaWdodDogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMCAxNnB4XCIsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInN0aWNreVwiLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJsb2NrIHRydW5jYXRlXCI+e2NvdXBvblZhbHVlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAge3Nob3duQ3VycmVuY2llcy5tYXAoKGN1cnJlbmN5KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2N1cnJlbmN5LmNvZGV9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCJ2YXIoLS1iZy1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgdmFyKC0tYm9yZGVyLWJhc2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkIHZhcigtLWJvcmRlci1iYXNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlUHJpY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5PXtjdXJyZW5jeX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJpY2VzW2N1cnJlbmN5LmNvZGVdIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoY3VycmVuY3kuY29kZSwgdmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICA8L1RhYmxlPlxuXG4gICAgICAgICAgeyFjdXJyZW5jaWVzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtNFwiPlxuICAgICAgICAgICAgICA8VGV4dCBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgQWRkIGEgc3VwcG9ydGVkIGN1cnJlbmN5IHRvIHRoZSBzdG9yZSBiZWZvcmUgc2V0dGluZyBwcmljZXMuXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdENvdXBvblZhbHVlKFxuICBjb3Vwb246IFBpY2s8Q291cG9uRm9ybVN0YXRlLCBcImFtb3VudHNcIiB8IFwicGVyY2VudGFnZVwiIHwgXCJ0eXBlXCI+LFxuICBjdXJyZW5jaWVzOiBQaWNrPEN1cnJlbmN5T3B0aW9uLCBcImNvZGVcIiB8IFwiaXNfZGVmYXVsdFwiPltdLFxuKSB7XG4gIGlmIChcbiAgICBjb3Vwb24udHlwZSA9PT0gXCJhbW91bnRfb2ZmX3Byb2R1Y3RzXCIgfHxcbiAgICBjb3Vwb24udHlwZSA9PT0gXCJhbW91bnRfb2ZmX29yZGVyXCJcbiAgKSB7XG4gICAgY29uc3QgZGVmYXVsdENvZGUgPVxuICAgICAgY3VycmVuY2llcy5maW5kKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuaXNfZGVmYXVsdCk/LmNvZGUgfHxcbiAgICAgIGN1cnJlbmNpZXNbMF0/LmNvZGVcbiAgICBjb25zdCBwcmltYXJ5ID1cbiAgICAgIGNvdXBvbi5hbW91bnRzLmZpbmQoKHJvdykgPT4gcm93LmN1cnJlbmN5X2NvZGUgPT09IGRlZmF1bHRDb2RlKSB8fFxuICAgICAgY291cG9uLmFtb3VudHNbMF1cbiAgICBjb25zdCBhbW91bnQgPSBudW1iZXJPck51bGwocHJpbWFyeT8uYW1vdW50KVxuICAgIGlmIChhbW91bnQgPT0gbnVsbCkgcmV0dXJuIFwiXHUyMDE0XCJcbiAgICBjb25zdCBhZGRpdGlvbmFsID0gTWF0aC5tYXgoMCwgY291cG9uLmFtb3VudHMubGVuZ3RoIC0gMSlcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBgJHthbW91bnR9JHtwcmltYXJ5LmN1cnJlbmN5X2NvZGUudG9VcHBlckNhc2UoKX1gXG4gICAgcmV0dXJuIGFkZGl0aW9uYWwgPyBgJHtmb3JtYXR0ZWR9ICske2FkZGl0aW9uYWx9YCA6IGZvcm1hdHRlZFxuICB9XG5cbiAgaWYgKFxuICAgIGNvdXBvbi50eXBlID09PSBcInBlcmNlbnRhZ2Vfb2ZmX3Byb2R1Y3RcIiB8fFxuICAgIGNvdXBvbi50eXBlID09PSBcInBlcmNlbnRhZ2Vfb2ZmX29yZGVyXCJcbiAgKSB7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IG51bWJlck9yTnVsbChjb3Vwb24ucGVyY2VudGFnZSlcbiAgICBpZiAocGVyY2VudGFnZSA9PSBudWxsKSByZXR1cm4gXCJcdTIwMTRcIlxuICAgIHJldHVybiBjb3Vwb24udHlwZSA9PT0gXCJwZXJjZW50YWdlX29mZl9vcmRlclwiXG4gICAgICA/IGAke3BlcmNlbnRhZ2V9JSBvZmYgb3JkZXJgXG4gICAgICA6IGAke3BlcmNlbnRhZ2V9JSBvZmYgcHJvZHVjdHNgXG4gIH1cblxuICByZXR1cm4gY291cG9uLnR5cGUgPT09IFwiZnJlZV9zaGlwcGluZ1wiID8gXCJGcmVlIHNoaXBwaW5nXCIgOiBcIkJ1eSBYIEdldCBZXCJcbn1cblxuZnVuY3Rpb24gVGFibGVQcmljZUlucHV0KHtcbiAgY3VycmVuY3ksXG4gIG9uQ2hhbmdlLFxuICB2YWx1ZSxcbn06IHtcbiAgY3VycmVuY3k6IEN1cnJlbmN5T3B0aW9uXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICB2YWx1ZTogc3RyaW5nXG59KSB7XG4gIGNvbnN0IHN5bWJvbCA9XG4gICAgY3VycmVuY3kuc3ltYm9sX25hdGl2ZSB8fFxuICAgIGN1cnJlbmN5LnN5bWJvbCB8fFxuICAgIGN1cnJlbmN5U3ltYm9sKGN1cnJlbmN5LmNvZGUgfHwgXCJVU0RcIilcblxuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3NOYW1lPVwiYmctdWktYmctYmFzZSBob3ZlcjpiZy11aS1iZy1zdWJ0bGUgZm9jdXMtd2l0aGluOnNoYWRvdy1ib3JkZXJzLWludGVyYWN0aXZlLXdpdGgtYWN0aXZlIHRleHQtdWktZmctYmFzZVwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgc3R5bGU9e3sgZmxleDogXCIwIDAgNDBweFwiLCBwYWRkaW5nTGVmdDogMTYgfX1cbiAgICAgID5cbiAgICAgICAge3N5bWJvbH1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBhcmlhLWxhYmVsPXtgUHJpY2UgJHtjdXJyZW5jeS5jb2RlLnRvVXBwZXJDYXNlKCl9YH1cbiAgICAgICAgaW5wdXRNb2RlPVwiZGVjaW1hbFwiXG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gb25DaGFuZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBhcHBlYXJhbmNlOiBcIm5vbmVcIixcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgICBmbGV4OiBcIjEgMSBhdXRvXCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgICAgb3V0bGluZTogXCJub25lXCIsXG4gICAgICAgICAgcGFkZGluZzogXCIwIDE2cHggMCAwXCIsXG4gICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgIH19XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIC8+XG4gICAgPC9sYWJlbD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb3Vwb25Qcm9kdWN0TW9kYWwoe1xuICBhbGxvd1Byb21vdGlvbk1pcnJvcixcbiAgYXBpQmFzZSxcbiAgb25PcGVuQ2hhbmdlLFxuICBvblNhdmVkLFxuICBvcGVuLFxuICBvcHRpb25zLFxuICByb3csXG59OiB7XG4gIGFsbG93UHJvbW90aW9uTWlycm9yOiBib29sZWFuXG4gIGFwaUJhc2U6IEFwaUJhc2VcbiAgb25PcGVuQ2hhbmdlOiAob3BlbjogYm9vbGVhbikgPT4gdm9pZFxuICBvblNhdmVkOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIG9wZW46IGJvb2xlYW5cbiAgb3B0aW9uczogT3B0aW9uc1BheWxvYWRcbiAgcm93OiBDb3Vwb25Qcm9kdWN0Um93IHwgbnVsbFxufSkge1xuICBjb25zdCBbYWN0aXZlU3RlcCwgc2V0QWN0aXZlU3RlcF0gPSB1c2VTdGF0ZTxXaXphcmRTdGVwPihcImRldGFpbHNcIilcbiAgY29uc3QgW3Byb2R1Y3QsIHNldFByb2R1Y3RdID0gdXNlU3RhdGU8UHJvZHVjdEZvcm1TdGF0ZT4oKCkgPT5cbiAgICBlbXB0eVByb2R1Y3Qob3B0aW9ucyksXG4gIClcbiAgY29uc3QgW2NvdXBvbiwgc2V0Q291cG9uXSA9IHVzZVN0YXRlPENvdXBvbkZvcm1TdGF0ZT4oKCkgPT5cbiAgICBlbXB0eUNvdXBvbihvcHRpb25zKSxcbiAgKVxuICBjb25zdCBbY2FtcGFpZ24sIHNldENhbXBhaWduXSA9IHVzZVN0YXRlPENhbXBhaWduRm9ybVN0YXRlPihlbXB0eUNhbXBhaWduKVxuICBjb25zdCBbc2F2aW5nLCBzZXRTYXZpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt1cGxvYWRpbmcsIHNldFVwbG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2Z1cnRoZXN0U3RlcEluZGV4LCBzZXRGdXJ0aGVzdFN0ZXBJbmRleF0gPSB1c2VTdGF0ZSgwKVxuXG4gIGNvbnN0IHZpc2libGVTdGVwcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGFsbG93UHJvbW90aW9uTWlycm9yXG4gICAgICAgID8gYWxsU3RlcHNcbiAgICAgICAgOiBhbGxTdGVwcy5maWx0ZXIoKHN0ZXApID0+IHN0ZXAgIT09IFwiY2FtcGFpZ25cIiksXG4gICAgW2FsbG93UHJvbW90aW9uTWlycm9yXSxcbiAgKVxuICBjb25zdCBjdXJyZW50U3RlcEluZGV4ID0gdmlzaWJsZVN0ZXBzLmluZGV4T2YoYWN0aXZlU3RlcClcbiAgY29uc3QgY3VycmVuY2llcyA9IG9wdGlvbnMuY3VycmVuY2llcyB8fCBbXVxuICBjb25zdCBzdXBwb3J0ZWRDdXJyZW5jeUNvZGVzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBuZXcgU2V0KGN1cnJlbmNpZXMubWFwKChjdXJyZW5jeSkgPT4gY3VycmVuY3kuY29kZSkpLFxuICAgIFtjdXJyZW5jaWVzXSxcbiAgKVxuICBjb25zdCBpc0Ftb3VudFR5cGUgPVxuICAgIGNvdXBvbi50eXBlID09PSBcImFtb3VudF9vZmZfcHJvZHVjdHNcIiB8fCBjb3Vwb24udHlwZSA9PT0gXCJhbW91bnRfb2ZmX29yZGVyXCJcbiAgY29uc3QgaXNQZXJjZW50YWdlVHlwZSA9XG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiIHx8XG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfb3JkZXJcIlxuICBjb25zdCBpc0l0ZW1TY29wZWREaXNjb3VudCA9XG4gICAgY291cG9uLnR5cGUgPT09IFwiYW1vdW50X29mZl9wcm9kdWN0c1wiIHx8XG4gICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfcHJvZHVjdFwiXG4gIGNvbnN0IGVmZmVjdGl2ZUN1cnJlbmNpZXMgPSB1c2VNZW1vKFxuICAgICgpID0+IGVmZmVjdGl2ZUNvdXBvbkN1cnJlbmNpZXMoY291cG9uLnB1cmNoYXNlX2NvbmRpdGlvbnMsIGN1cnJlbmNpZXMpLFxuICAgIFtjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9ucywgY3VycmVuY2llc10sXG4gIClcbiAgY29uc3QgcHJvZHVjdFByaWNlcyA9IGN1cnJlbmNpZXMuZmxhdE1hcCgoY3VycmVuY3kpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb2R1Y3QucHJpY2VfYW1vdW50c1tjdXJyZW5jeS5jb2RlXSB8fCBcIlwiXG4gICAgY29uc3QgYW1vdW50ID0gbm9uTmVnYXRpdmVOdW1iZXJPck51bGwodmFsdWUpXG4gICAgcmV0dXJuIGFtb3VudCA9PSBudWxsID8gW10gOiBbeyBjdXJyZW5jeV9jb2RlOiBjdXJyZW5jeS5jb2RlLCBhbW91bnQgfV1cbiAgfSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuXG4gICAgY29uc3QgZm9ybXMgPSByb3dcbiAgICAgID8gZm9ybXNGcm9tUm93KHJvdywgb3B0aW9ucylcbiAgICAgIDoge1xuICAgICAgICBwcm9kdWN0OiBlbXB0eVByb2R1Y3Qob3B0aW9ucyksXG4gICAgICAgIGNvdXBvbjogZW1wdHlDb3Vwb24ob3B0aW9ucyksXG4gICAgICAgIGNhbXBhaWduOiBlbXB0eUNhbXBhaWduLFxuICAgICAgfVxuICAgIHNldFByb2R1Y3QoZm9ybXMucHJvZHVjdClcbiAgICBzZXRDb3Vwb24oZm9ybXMuY291cG9uKVxuICAgIHNldENhbXBhaWduKGZvcm1zLmNhbXBhaWduKVxuICAgIHNldEFjdGl2ZVN0ZXAoXCJkZXRhaWxzXCIpXG4gICAgc2V0RnVydGhlc3RTdGVwSW5kZXgoMClcbiAgfSwgW29wZW4sIHJvdywgb3B0aW9uc10pXG5cbiAgY29uc3QgdXBkYXRlUHVyY2hhc2VDb25kaXRpb25zID0gKFxuICAgIHB1cmNoYXNlQ29uZGl0aW9uczogUHVyY2hhc2VDb25kaXRpb25Gb3JtW10sXG4gICkgPT4ge1xuICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICBwdXJjaGFzZV9jb25kaXRpb25zOiBwdXJjaGFzZUNvbmRpdGlvbnMsXG4gICAgICBhbW91bnRzOiBpc0Ftb3VudENvdXBvblR5cGUoY3VycmVudC50eXBlKVxuICAgICAgICA/IHJlY29uY2lsZUNvdXBvbkFtb3VudHMoXG4gICAgICAgICAgY3VycmVudC5hbW91bnRzLFxuICAgICAgICAgIGVmZmVjdGl2ZUNvdXBvbkN1cnJlbmNpZXMocHVyY2hhc2VDb25kaXRpb25zLCBjdXJyZW5jaWVzKSxcbiAgICAgICAgKVxuICAgICAgICA6IGN1cnJlbnQuYW1vdW50cyxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZUNvdXBvblR5cGUgPSAodHlwZTogQ291cG9uVHlwZSkgPT4ge1xuICAgIHNldENvdXBvbigoY3VycmVudCkgPT4ge1xuICAgICAgbGV0IHB1cmNoYXNlQ29uZGl0aW9ucyA9IGN1cnJlbnQucHVyY2hhc2VfY29uZGl0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICBpc0Ftb3VudENvdXBvblR5cGUodHlwZSkgJiZcbiAgICAgICAgIXB1cmNoYXNlQ29uZGl0aW9ucy5zb21lKFxuICAgICAgICAgIChjb25kaXRpb24pID0+IGNvbmRpdGlvbi5hdHRyaWJ1dGUgPT09IFwiY3VycmVuY3lfY29kZVwiLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcHVyY2hhc2VDb25kaXRpb25zID0gW1xuICAgICAgICAgIC4uLnB1cmNoYXNlQ29uZGl0aW9ucyxcbiAgICAgICAgICAuLi5kZWZhdWx0UHVyY2hhc2VDb25kaXRpb25zKG9wdGlvbnMpLFxuICAgICAgICBdXG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICB0eXBlLFxuICAgICAgICBwdXJjaGFzZV9jb25kaXRpb25zOiBwdXJjaGFzZUNvbmRpdGlvbnMsXG4gICAgICAgIGFtb3VudHM6IGlzQW1vdW50Q291cG9uVHlwZSh0eXBlKVxuICAgICAgICAgID8gcmVjb25jaWxlQ291cG9uQW1vdW50cyhcbiAgICAgICAgICAgIGN1cnJlbnQuYW1vdW50cyxcbiAgICAgICAgICAgIGVmZmVjdGl2ZUNvdXBvbkN1cnJlbmNpZXMocHVyY2hhc2VDb25kaXRpb25zLCBjdXJyZW5jaWVzKSxcbiAgICAgICAgICApXG4gICAgICAgICAgOiBjdXJyZW50LmFtb3VudHMsXG4gICAgICAgIHByb21vdGlvbl9taXJyb3JfbW9kZTpcbiAgICAgICAgICB0eXBlID09PSBcImJ1eV94X2dldF95XCIgPyBcIm5vbmVcIiA6IGN1cnJlbnQucHJvbW90aW9uX21pcnJvcl9tb2RlLFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdCB1cGxvYWRNZWRpYSA9IGFzeW5jIChmaWxlczogRmlsZVtdKSA9PiB7XG4gICAgaWYgKCFmaWxlcy5sZW5ndGgpIHJldHVyblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlc1wiLCBmaWxlKSlcbiAgICBpZiAoYXBpQmFzZSA9PT0gXCIvYWRtaW5cIiAmJiBwcm9kdWN0LnNlbGxlcl9pZCkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKFwic2VsbGVyX2lkXCIsIHByb2R1Y3Quc2VsbGVyX2lkKVxuICAgIH1cbiAgICBzZXRVcGxvYWRpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgYCR7YmFja2VuZFVybCgpfSR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzL3VwbG9hZHNgLFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFwaUVycm9yTWVzc2FnZShwYXlsb2FkLCByZXNwb25zZS5zdGF0dXNUZXh0KSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheWxvYWQgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICAgIGZpbGVzPzogeyBhc3NldF9pZD86IHN0cmluZzsgdXJsPzogc3RyaW5nIH1bXVxuICAgICAgfVxuICAgICAgY29uc3QgdXBsb2FkZWQgPSAocGF5bG9hZC5maWxlcyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZmlsZSk6IGZpbGUgaXMgeyBhc3NldF9pZDogc3RyaW5nOyB1cmw6IHN0cmluZyB9ID0+XG4gICAgICAgICAgICBCb29sZWFuKGZpbGUuYXNzZXRfaWQgJiYgZmlsZS51cmwpLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKGZpbGUpID0+ICh7IGFzc2V0X2lkOiBmaWxlLmFzc2V0X2lkLCB1cmw6IGZpbGUudXJsIH0pKVxuICAgICAgaWYgKCF1cGxvYWRlZC5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSB1cGxvYWQgZGlkIG5vdCByZXR1cm4gYW4gaW1hZ2UgVVJMXCIpXG4gICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICBtZWRpYTogQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgTWFwKFxuICAgICAgICAgICAgWy4uLmN1cnJlbnQubWVkaWEsIC4uLnVwbG9hZGVkXS5tYXAoKGl0ZW0pID0+IFtpdGVtLnVybCwgaXRlbV0pLFxuICAgICAgICAgICkudmFsdWVzKCksXG4gICAgICAgICksXG4gICAgICB9KSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoXG4gICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJJbWFnZSB1cGxvYWQgZmFpbGVkXCIsXG4gICAgICApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFVwbG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBkZXRhaWxzQ29tcGxldGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXByb2R1Y3QudGl0bGUudHJpbSgpKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoIWN1cnJlbmNpZXMubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFjb25kaXRpb24uYXR0cmlidXRlIHx8XG4gICAgICAgICFjb25kaXRpb24ub3BlcmF0b3IgfHxcbiAgICAgICAgIWNvbmRpdGlvbi52YWx1ZXMubGVuZ3RoIHx8XG4gICAgICAgIChjb25kaXRpb24ub3BlcmF0b3IgPT09IFwiZXFcIiAmJiBjb25kaXRpb24udmFsdWVzLmxlbmd0aCAhPT0gMSkgfHxcbiAgICAgICAgYXR0cmlidXRlcy5oYXMoY29uZGl0aW9uLmF0dHJpYnV0ZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGF0dHJpYnV0ZXMuYWRkKGNvbmRpdGlvbi5hdHRyaWJ1dGUpXG4gICAgfVxuXG4gICAgaWYgKGlzQW1vdW50VHlwZSkge1xuICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhcyhcImN1cnJlbmN5X2NvZGVcIikpIHJldHVybiBmYWxzZVxuICAgICAgaWYgKCFjb3Vwb24uYW1vdW50cy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICAgICAgaWYgKGNvdXBvbi5hbW91bnRzLmxlbmd0aCAhPT0gZWZmZWN0aXZlQ3VycmVuY2llcy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICAgICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBjb3Vwb24uYW1vdW50cykge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZEN1cnJlbmN5Q29kZXMuaGFzKHJvdy5jdXJyZW5jeV9jb2RlKSkgcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmIChzZWVuLmhhcyhyb3cuY3VycmVuY3lfY29kZSkpIHJldHVybiBmYWxzZVxuICAgICAgICBpZiAobnVtYmVyT3JOdWxsKHJvdy5hbW91bnQpID09IG51bGwpIHJldHVybiBmYWxzZVxuICAgICAgICBzZWVuLmFkZChyb3cuY3VycmVuY3lfY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNQZXJjZW50YWdlVHlwZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBudW1iZXJPck51bGwoY291cG9uLnBlcmNlbnRhZ2UpXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA+IDEwMCkgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCIgJiYgIWNvdXBvbi5zaGFyZWRfY29kZS50cmltKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChjb3Vwb24uZXhwaXJhdGlvbl90eXBlID09PSBcImR1cmF0aW9uXCIpIHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gTnVtYmVyKGNvdXBvbi5leHBpcmF0aW9uX2R1cmF0aW9uKVxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGR1cmF0aW9uKSB8fCBkdXJhdGlvbiA8IDEpIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAoY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJmaXhlZFwiKSB7XG4gICAgICBjb25zdCBleHBpcmF0aW9uID0gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fZGF0ZSlcbiAgICAgIGlmICghY291cG9uLmV4cGlyYXRpb25fZGF0ZSB8fCBOdW1iZXIuaXNOYU4oZXhwaXJhdGlvbi5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb3Vwb24uZXhwaXJhdGlvbl90eXBlICE9PSBcIm5vbmVcIiAmJiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpIHtcbiAgICAgIGNvbnN0IGNhcCA9IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdClcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4oY2FwLmdldFRpbWUoKSkpIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IG1heElzc3VhbmNlID0gTnVtYmVyKGNvdXBvbi5tYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW0pXG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobWF4SXNzdWFuY2UpICYmIG1heElzc3VhbmNlID4gMFxuICB9LCBbXG4gICAgY291cG9uLFxuICAgIGN1cnJlbmNpZXMubGVuZ3RoLFxuICAgIGVmZmVjdGl2ZUN1cnJlbmNpZXMubGVuZ3RoLFxuICAgIGlzQW1vdW50VHlwZSxcbiAgICBpc1BlcmNlbnRhZ2VUeXBlLFxuICAgIHByb2R1Y3QudGl0bGUsXG4gICAgc3VwcG9ydGVkQ3VycmVuY3lDb2RlcyxcbiAgXSlcblxuICBjb25zdCBjYW1wYWlnbkNvbXBsZXRlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFhbGxvd1Byb21vdGlvbk1pcnJvciB8fCBjYW1wYWlnbi5tb2RlID09PSBcIm5vbmVcIikgcmV0dXJuIHRydWVcbiAgICBpZiAoY2FtcGFpZ24ubW9kZSA9PT0gXCJleGlzdGluZ1wiKSByZXR1cm4gQm9vbGVhbihjYW1wYWlnbi5jYW1wYWlnbl9pZClcbiAgICBpZiAoIWNhbXBhaWduLm5hbWUudHJpbSgpIHx8ICFjYW1wYWlnbi5jYW1wYWlnbl9pZGVudGlmaWVyLnRyaW0oKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIFtjYW1wYWlnbi5zdGFydHNfYXQsIGNhbXBhaWduLmVuZHNfYXRdLmV2ZXJ5KCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRydWVcbiAgICAgIHJldHVybiAhTnVtYmVyLmlzTmFOKG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCkpXG4gICAgfSlcbiAgfSwgW2FsbG93UHJvbW90aW9uTWlycm9yLCBjYW1wYWlnbl0pXG5cbiAgY29uc3QgcHJpY2VzQ29tcGxldGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWN1cnJlbmNpZXMubGVuZ3RoIHx8ICFwcm9kdWN0UHJpY2VzLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIGN1cnJlbmNpZXMuZXZlcnkoKGN1cnJlbmN5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByb2R1Y3QucHJpY2VfYW1vdW50c1tjdXJyZW5jeS5jb2RlXSB8fCBcIlwiXG4gICAgICByZXR1cm4gIXZhbHVlLnRyaW0oKSB8fCBub25OZWdhdGl2ZU51bWJlck9yTnVsbCh2YWx1ZSkgIT0gbnVsbFxuICAgIH0pXG4gIH0sIFtjdXJyZW5jaWVzLCBwcm9kdWN0LnByaWNlX2Ftb3VudHMsIHByb2R1Y3RQcmljZXMubGVuZ3RoXSlcblxuICBjb25zdCBzdGVwVmFsaWRpdHkgPSB1c2VNZW1vPFJlY29yZDxXaXphcmRTdGVwLCBib29sZWFuPj4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGRldGFpbHM6IGRldGFpbHNDb21wbGV0ZSxcbiAgICAgIG9yZ2FuaXplOiB0cnVlLFxuICAgICAgY2FtcGFpZ246IGNhbXBhaWduQ29tcGxldGUsXG4gICAgICBwcmljZXM6IHByaWNlc0NvbXBsZXRlLFxuICAgIH0pLFxuICAgIFtjYW1wYWlnbkNvbXBsZXRlLCBkZXRhaWxzQ29tcGxldGUsIHByaWNlc0NvbXBsZXRlXSxcbiAgKVxuXG4gIGNvbnN0IGFjdGl2ZVN0ZXBDb21wbGV0ZSA9IHN0ZXBWYWxpZGl0eVthY3RpdmVTdGVwXVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuIHx8ICFhY3RpdmVTdGVwQ29tcGxldGUpIHJldHVyblxuICAgIHNldEZ1cnRoZXN0U3RlcEluZGV4KChjdXJyZW50KSA9PlxuICAgICAgTWF0aC5tYXgoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIE1hdGgubWluKGN1cnJlbnRTdGVwSW5kZXggKyAxLCB2aXNpYmxlU3RlcHMubGVuZ3RoIC0gMSksXG4gICAgICApLFxuICAgIClcbiAgfSwgW2FjdGl2ZVN0ZXBDb21wbGV0ZSwgY3VycmVudFN0ZXBJbmRleCwgb3BlbiwgdmlzaWJsZVN0ZXBzLmxlbmd0aF0pXG5cbiAgY29uc3QgaXNTdGVwRGlzYWJsZWQgPSAoaW5kZXg6IG51bWJlcikgPT5cbiAgICBpbmRleCA+IGZ1cnRoZXN0U3RlcEluZGV4IHx8XG4gICAgdmlzaWJsZVN0ZXBzLnNsaWNlKDAsIGluZGV4KS5zb21lKChwcmV2aW91cykgPT4gIXN0ZXBWYWxpZGl0eVtwcmV2aW91c10pXG5cbiAgY29uc3QgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKCFwcm9kdWN0LnRpdGxlLnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKFwiUHJvZHVjdCB0aXRsZSBpcyByZXF1aXJlZFwiKVxuICAgIGlmICghY3VycmVuY2llcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFkZCBhIHN1cHBvcnRlZCBjdXJyZW5jeSB0byB0aGUgc3RvcmUgYmVmb3JlIGNvbnRpbnVpbmdcIilcbiAgICB9XG4gICAgY29uc3QgaW52YWxpZFByaWNlID0gY3VycmVuY2llcy5zb21lKChjdXJyZW5jeSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBwcm9kdWN0LnByaWNlX2Ftb3VudHNbY3VycmVuY3kuY29kZV0gfHwgXCJcIlxuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAmJiBub25OZWdhdGl2ZU51bWJlck9yTnVsbCh2YWx1ZSkgPT0gbnVsbFxuICAgIH0pXG4gICAgaWYgKGludmFsaWRQcmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvZHVjdCBwcmljZXMgbXVzdCBiZSAwIG9yIG1vcmVcIilcbiAgICB9XG4gICAgaWYgKCFwcm9kdWN0UHJpY2VzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWRkIGF0IGxlYXN0IG9uZSBwcm9kdWN0IHByaWNlXCIpXG4gICAgfVxuICAgIGlmIChpc0Ftb3VudFR5cGUpIHtcbiAgICAgIGlmICghY291cG9uLmFtb3VudHMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFkZCBhdCBsZWFzdCBvbmUgY291cG9uIHZhbHVlXCIpXG4gICAgICB9XG4gICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KClcbiAgICAgIGNvbnN0IGN1cnJlbmN5Q29uZGl0aW9uID0gY291cG9uLnB1cmNoYXNlX2NvbmRpdGlvbnMuZmluZChcbiAgICAgICAgKGNvbmRpdGlvbikgPT4gY29uZGl0aW9uLmF0dHJpYnV0ZSA9PT0gXCJjdXJyZW5jeV9jb2RlXCIsXG4gICAgICApXG4gICAgICBpZiAoIWN1cnJlbmN5Q29uZGl0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFkZCBhIEN1cnJlbmN5IENvZGUgcHVyY2hhc2UgY29uZGl0aW9uXCIpXG4gICAgICB9XG4gICAgICBpZiAoY291cG9uLmFtb3VudHMubGVuZ3RoICE9PSBlZmZlY3RpdmVDdXJyZW5jaWVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDb3Vwb24gdmFsdWVzIG11c3QgbWF0Y2ggZXZlcnkgZWZmZWN0aXZlIGN1cnJlbmN5IGNvbmRpdGlvbiB2YWx1ZVwiLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBjb3Vwb24uYW1vdW50cykge1xuICAgICAgICBpZiAoIXN1cHBvcnRlZEN1cnJlbmN5Q29kZXMuaGFzKHJvdy5jdXJyZW5jeV9jb2RlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBhbiBhdmFpbGFibGUgY291cG9uIGN1cnJlbmN5XCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlZW4uaGFzKHJvdy5jdXJyZW5jeV9jb2RlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdXBvbiB2YWx1ZSBjdXJyZW5jaWVzIGNhbm5vdCBiZSBkdXBsaWNhdGVkXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bWJlck9yTnVsbChyb3cuYW1vdW50KSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291cG9uIHZhbHVlcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpXG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQocm93LmN1cnJlbmN5X2NvZGUpXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHNlZW5BdHRyaWJ1dGVzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9ucykge1xuICAgICAgaWYgKCFjb25kaXRpb24uYXR0cmlidXRlIHx8ICFjb25kaXRpb24ub3BlcmF0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tcGxldGUgZXZlcnkgcHVyY2hhc2UgY29uZGl0aW9uXCIpXG4gICAgICB9XG4gICAgICBpZiAoIWNvbmRpdGlvbi52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBhdCBsZWFzdCBvbmUgdmFsdWUgZm9yIGV2ZXJ5IHB1cmNoYXNlIGNvbmRpdGlvblwiKVxuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbi5vcGVyYXRvciA9PT0gXCJlcVwiICYmIGNvbmRpdGlvbi52YWx1ZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVxdWFscyBjb25kaXRpb25zIHJlcXVpcmUgZXhhY3RseSBvbmUgdmFsdWVcIilcbiAgICAgIH1cbiAgICAgIGlmIChzZWVuQXR0cmlidXRlcy5oYXMoY29uZGl0aW9uLmF0dHJpYnV0ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHVyY2hhc2UgY29uZGl0aW9uIGF0dHJpYnV0ZXMgY2Fubm90IGJlIGR1cGxpY2F0ZWRcIilcbiAgICAgIH1cbiAgICAgIHNlZW5BdHRyaWJ1dGVzLmFkZChjb25kaXRpb24uYXR0cmlidXRlKVxuICAgIH1cbiAgICBpZiAoaXNQZXJjZW50YWdlVHlwZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBudW1iZXJPck51bGwoY291cG9uLnBlcmNlbnRhZ2UpXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA+IDEwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3Vwb24gdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwMCBwZXJjZW50XCIpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb3Vwb24uY29kZV9zdHJhdGVneSA9PT0gXCJzaGFyZWRfY29kZVwiICYmICFjb3Vwb24uc2hhcmVkX2NvZGUudHJpbSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIHNoYXJlZCBjb3Vwb24gY29kZSBpcyByZXF1aXJlZFwiKVxuICAgIH1cbiAgICBpZiAoY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJmaXhlZFwiKSB7XG4gICAgICBjb25zdCBleHBpcmF0aW9uID0gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fZGF0ZSlcbiAgICAgIGlmICghY291cG9uLmV4cGlyYXRpb25fZGF0ZSB8fCBOdW1iZXIuaXNOYU4oZXhwaXJhdGlvbi5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgdmFsaWQgZml4ZWQgZXhwaXJhdGlvbiBkYXRlIGlzIHJlcXVpcmVkXCIpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb3Vwb24uZXhwaXJhdGlvbl90eXBlICE9PSBcIm5vbmVcIiAmJiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpIHtcbiAgICAgIGNvbnN0IGNhcCA9IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdClcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4oY2FwLmdldFRpbWUoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSB2YWxpZCBleHBpcmF0aW9uIGNhcCBkYXRlIGlzIHJlcXVpcmVkXCIpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjYW1wYWlnbi5tb2RlID09PSBcImV4aXN0aW5nXCIgJiYgIWNhbXBhaWduLmNhbXBhaWduX2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgYW4gZXhpc3RpbmcgY2FtcGFpZ25cIilcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2FtcGFpZ24ubW9kZSA9PT0gXCJuZXdcIiAmJlxuICAgICAgKCFjYW1wYWlnbi5uYW1lLnRyaW0oKSB8fCAhY2FtcGFpZ24uY2FtcGFpZ25faWRlbnRpZmllci50cmltKCkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW1wYWlnbiBuYW1lIGFuZCBpZGVudGlmaWVyIGFyZSByZXF1aXJlZFwiKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNhdmUgPSBhc3luYyAoKSA9PiB7XG4gICAgc2V0U2F2aW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlKClcbiAgICAgIGNvbnN0IGJlbmVmaXRUeXBlID0gYmVuZWZpdFR5cGVGcm9tQ291cG9uVHlwZShjb3Vwb24udHlwZSlcbiAgICAgIGNvbnN0IHRhcmdldFR5cGUgPVxuICAgICAgICBjb3Vwb24udHlwZSA9PT0gXCJhbW91bnRfb2ZmX29yZGVyXCIgfHxcbiAgICAgICAgY291cG9uLnR5cGUgPT09IFwicGVyY2VudGFnZV9vZmZfb3JkZXJcIlxuICAgICAgICAgID8gXCJvcmRlclwiXG4gICAgICAgICAgOiBcIml0ZW1zXCJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIHByb2R1Y3Q6IHtcbiAgICAgICAgICB0aXRsZTogcHJvZHVjdC50aXRsZS50cmltKCksXG4gICAgICAgICAgc3VidGl0bGU6IHByb2R1Y3Quc3VidGl0bGUudHJpbSgpIHx8IG51bGwsXG4gICAgICAgICAgaGFuZGxlOiBwcm9kdWN0LmhhbmRsZS50cmltKCkgfHwgbnVsbCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdC5kZXNjcmlwdGlvbi50cmltKCkgfHwgbnVsbCxcbiAgICAgICAgICBzdGF0dXM6IHByb2R1Y3RTdGF0dXNGcm9tQ291cG9uU3RhdHVzKGNvdXBvbi5wcm9tb3Rpb25fc3RhdHVzKSxcbiAgICAgICAgICB0aHVtYm5haWw6IHByb2R1Y3QubWVkaWFbMF0/LnVybCB8fCBudWxsLFxuICAgICAgICAgIHRodW1ibmFpbF9hc3NldF9pZDogcHJvZHVjdC5tZWRpYVswXT8uYXNzZXRfaWQgfHwgbnVsbCxcbiAgICAgICAgICBpbWFnZXM6IHByb2R1Y3QubWVkaWEuc2xpY2UoMSkubWFwKChtZWRpYSkgPT4gKHtcbiAgICAgICAgICAgIHVybDogbWVkaWEudXJsLFxuICAgICAgICAgICAgLi4uKG1lZGlhLmFzc2V0X2lkID8geyBhc3NldF9pZDogbWVkaWEuYXNzZXRfaWQgfSA6IHt9KSxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgZGlzY291bnRhYmxlOiBwcm9kdWN0LmRpc2NvdW50YWJsZSxcbiAgICAgICAgICB0eXBlX2lkOiBwcm9kdWN0LnR5cGVfaWQgfHwgbnVsbCxcbiAgICAgICAgICBjb2xsZWN0aW9uX2lkOiBwcm9kdWN0LmNvbGxlY3Rpb25faWQgfHwgbnVsbCxcbiAgICAgICAgICBjYXRlZ29yaWVzOiBwcm9kdWN0LmNhdGVnb3J5X2lkID8gW3sgaWQ6IHByb2R1Y3QuY2F0ZWdvcnlfaWQgfV0gOiBbXSxcbiAgICAgICAgICB0YWdzOiBwcm9kdWN0LnRhZ19pZCA/IFt7IGlkOiBwcm9kdWN0LnRhZ19pZCB9XSA6IFtdLFxuICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRpdGxlOiBcIkRlZmF1bHRcIixcbiAgICAgICAgICAgICAgc2t1OiBwcm9kdWN0LnNrdS50cmltKCkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgbWFuYWdlX2ludmVudG9yeTogZmFsc2UsXG4gICAgICAgICAgICAgIGFsbG93X2JhY2tvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgcHJpY2VzOiBwcm9kdWN0UHJpY2VzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBjb3Vwb246IHtcbiAgICAgICAgICBlbmFibGVkOiBjb3Vwb24uZW5hYmxlZCxcbiAgICAgICAgICBiZW5lZml0X3R5cGU6IGJlbmVmaXRUeXBlLFxuICAgICAgICAgIHB1cmNoYXNlX2NvbmRpdGlvbnM6IGNvdXBvbi5wdXJjaGFzZV9jb25kaXRpb25zLm1hcCgoY29uZGl0aW9uKSA9PiAoe1xuICAgICAgICAgICAgYXR0cmlidXRlOiBjb25kaXRpb24uYXR0cmlidXRlLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbi5vcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlczogY29uZGl0aW9uLnZhbHVlcyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgYW1vdW50czogaXNBbW91bnRUeXBlXG4gICAgICAgICAgICA/IGNvdXBvbi5hbW91bnRzLm1hcCgocm93KSA9PiAoe1xuICAgICAgICAgICAgICBhbW91bnQ6IG51bWJlck9yTnVsbChyb3cuYW1vdW50KSxcbiAgICAgICAgICAgICAgY3VycmVuY3lfY29kZTogcm93LmN1cnJlbmN5X2NvZGUsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBhbW91bnQ6IG51bGwsXG4gICAgICAgICAgcGVyY2VudGFnZTogaXNQZXJjZW50YWdlVHlwZSA/IG51bWJlck9yTnVsbChjb3Vwb24ucGVyY2VudGFnZSkgOiBudWxsLFxuICAgICAgICAgIGN1cnJlbmN5X2NvZGU6IG51bGwsXG4gICAgICAgICAgY29kZV9zdHJhdGVneTogY291cG9uLmNvZGVfc3RyYXRlZ3ksXG4gICAgICAgICAgY29kZV9wcmVmaXg6XG4gICAgICAgICAgICBjb3Vwb24uY29kZV9zdHJhdGVneSA9PT0gXCJ1bmlxdWVfY29kZVwiXG4gICAgICAgICAgICAgID8gY291cG9uLmNvZGVfcHJlZml4LnRyaW0oKSB8fCBcIkNPVVBPTlwiXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzaGFyZWRfY29kZTpcbiAgICAgICAgICAgIGNvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInNoYXJlZF9jb2RlXCJcbiAgICAgICAgICAgICAgPyBjb3Vwb24uc2hhcmVkX2NvZGUudHJpbSgpXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBleHBpcmF0aW9uX3BvbGljeTpcbiAgICAgICAgICAgIGNvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwibm9uZVwiXG4gICAgICAgICAgICAgID8geyB0eXBlOiBcIm5vbmVcIiB9XG4gICAgICAgICAgICAgIDogY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJmaXhlZFwiXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImZpeGVkXCIsXG4gICAgICAgICAgICAgICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9kYXRlKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgY2FwX2J5X2NhbXBhaWduOiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ24sXG4gICAgICAgICAgICAgICAgICBjYXBfYXQ6IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdFxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNvdXBvbi5leHBpcmF0aW9uX2NhcF9hdCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJtb250aF9lbmRcIlxuICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibW9udGhfZW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVfcG9saWN5OiBjb3Vwb24uZXhwaXJhdGlvbl90aW1lX3BvbGljeSxcbiAgICAgICAgICAgICAgICAgICAgY2FwX2J5X2NhbXBhaWduOiBjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ24sXG4gICAgICAgICAgICAgICAgICAgIGNhcF9hdDogY291cG9uLmV4cGlyYXRpb25fY2FwX2F0XG4gICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogTnVtYmVyKGNvdXBvbi5leHBpcmF0aW9uX2R1cmF0aW9uKSB8fCAzMCxcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX3VuaXQ6IGNvdXBvbi5leHBpcmF0aW9uX2R1cmF0aW9uX3VuaXQsXG4gICAgICAgICAgICAgICAgICB0aW1lX3BvbGljeTogY291cG9uLmV4cGlyYXRpb25fdGltZV9wb2xpY3ksXG4gICAgICAgICAgICAgICAgICBjYXBfYnlfY2FtcGFpZ246IGNvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgICAgICAgIGNhcF9hdDogY291cG9uLmV4cGlyYXRpb25fY2FwX2F0XG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoY291cG9uLmV4cGlyYXRpb25fY2FwX2F0KS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgIG1heF9pc3N1YW5jZV9wZXJfb3JkZXJfaXRlbTpcbiAgICAgICAgICAgIE51bWJlcihjb3Vwb24ubWF4X2lzc3VhbmNlX3Blcl9vcmRlcl9pdGVtKSB8fCAxLFxuICAgICAgICAgIHByb21vdGlvbl90ZW1wbGF0ZTpcbiAgICAgICAgICAgIGJlbmVmaXRUeXBlID09PSBcImZpeGVkX2Ftb3VudFwiIHx8IGJlbmVmaXRUeXBlID09PSBcInBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9tZXRob2Q6IHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldF90eXBlOiB0YXJnZXRUeXBlLFxuICAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VHlwZSA9PT0gXCJvcmRlclwiID8gXCJhY3Jvc3NcIiA6IGNvdXBvbi5hbGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHByb21vdGlvbl9zdGF0dXM6IGNvdXBvbi5wcm9tb3Rpb25fc3RhdHVzLFxuICAgICAgICAgIC4uLihhbGxvd1Byb21vdGlvbk1pcnJvclxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHByb21vdGlvbl9taXJyb3JfbW9kZTpcbiAgICAgICAgICAgICAgICBiZW5lZml0VHlwZSA9PT0gXCJidXlfZ2V0XCIgfHxcbiAgICAgICAgICAgICAgICAgIChiZW5lZml0VHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIiAmJiBjb3Vwb24uYW1vdW50cy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgICAgPyBcIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgOiBjb3Vwb24ucHJvbW90aW9uX21pcnJvcl9tb2RlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIGNhbXBhaWduOiBhbGxvd1Byb21vdGlvbk1pcnJvclxuICAgICAgICAgID8gY2FtcGFpZ24ubW9kZSA9PT0gXCJleGlzdGluZ1wiXG4gICAgICAgICAgICA/IHsgbW9kZTogXCJleGlzdGluZ1wiLCBjYW1wYWlnbl9pZDogY2FtcGFpZ24uY2FtcGFpZ25faWQgfVxuICAgICAgICAgICAgOiBjYW1wYWlnbi5tb2RlID09PSBcIm5ld1wiXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG1vZGU6IFwibmV3XCIsXG4gICAgICAgICAgICAgICAgY2FtcGFpZ246IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGNhbXBhaWduLm5hbWUsXG4gICAgICAgICAgICAgICAgICBjYW1wYWlnbl9pZGVudGlmaWVyOiBjYW1wYWlnbi5jYW1wYWlnbl9pZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgc3RhcnRzX2F0OiBjYW1wYWlnbi5zdGFydHNfYXRcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShjYW1wYWlnbi5zdGFydHNfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgZW5kc19hdDogY2FtcGFpZ24uZW5kc19hdFxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKGNhbXBhaWduLmVuZHNfYXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7IG1vZGU6IFwibm9uZVwiIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VsbGVyX2lkOiBwcm9kdWN0LnNlbGxlcl9pZCB8fCBudWxsLFxuICAgICAgICB2YXJpYW50X292ZXJyaWRlczogW10sXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGFwaUZldGNoKFxuICAgICAgICByb3dcbiAgICAgICAgICA/IGAke2FwaUJhc2V9L2NvdXBvbi1wcm9kdWN0cy8ke3Jvdy5wcm9kdWN0LmlkfWBcbiAgICAgICAgICA6IGAke2FwaUJhc2V9L2NvdXBvbi1wcm9kdWN0c2AsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IHJvdyA/IFwiUEFUQ0hcIiA6IFwiUE9TVFwiLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgdG9hc3Quc3VjY2Vzcyhyb3cgPyBcIkNvdXBvbiBwcm9kdWN0IHVwZGF0ZWRcIiA6IFwiQ291cG9uIHByb2R1Y3QgY3JlYXRlZFwiKVxuICAgICAgb25PcGVuQ2hhbmdlKGZhbHNlKVxuICAgICAgYXdhaXQgb25TYXZlZCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRvYXN0LmVycm9yKFxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgOiBcIkZhaWxlZCB0byBzYXZlIGNvdXBvbiBwcm9kdWN0XCIsXG4gICAgICApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNhdmluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGVwU3RhdHVzID0gKHN0ZXA6IFdpemFyZFN0ZXApID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHZpc2libGVTdGVwcy5pbmRleE9mKHN0ZXApXG4gICAgaWYgKGluZGV4IDwgY3VycmVudFN0ZXBJbmRleCAmJiBzdGVwVmFsaWRpdHlbc3RlcF0pIHtcbiAgICAgIHJldHVybiBcImNvbXBsZXRlZFwiIGFzIGNvbnN0XG4gICAgfVxuICAgIGlmIChpbmRleCA9PT0gY3VycmVudFN0ZXBJbmRleCkgcmV0dXJuIFwiaW4tcHJvZ3Jlc3NcIiBhcyBjb25zdFxuICAgIHJldHVybiBcIm5vdC1zdGFydGVkXCIgYXMgY29uc3RcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEZvY3VzTW9kYWwgb3Blbj17b3Blbn0gb25PcGVuQ2hhbmdlPXtvbk9wZW5DaGFuZ2V9PlxuICAgICAgPEZvY3VzTW9kYWwuQ29udGVudCBzdHlsZT17bW9kYWxDb250ZW50U3R5bGV9PlxuICAgICAgICA8Rm9jdXNNb2RhbC5UaXRsZSBzdHlsZT17dmlzdWFsbHlIaWRkZW5TdHlsZX0+XG4gICAgICAgICAge3JvdyA/IFwiRWRpdCBDb3Vwb24gUHJvZHVjdFwiIDogXCJDcmVhdGUgQ291cG9uIFByb2R1Y3RcIn1cbiAgICAgICAgPC9Gb2N1c01vZGFsLlRpdGxlPlxuICAgICAgICA8UHJvZ3Jlc3NUYWJzXG4gICAgICAgICAgdmFsdWU9e2FjdGl2ZVN0ZXB9XG4gICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gdmFsdWUgYXMgV2l6YXJkU3RlcFxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB2aXNpYmxlU3RlcHMuaW5kZXhPZihzdGVwKVxuICAgICAgICAgICAgaWYgKCFpc1N0ZXBEaXNhYmxlZChpbmRleCkpIHNldEFjdGl2ZVN0ZXAoc3RlcClcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN0eWxlPXttb2RhbFdpemFyZFN0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAgPEZvY3VzTW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCItbXktMiB3LWZ1bGwgYm9yZGVyLWxcIj5cbiAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5MaXN0IGNsYXNzTmFtZT1cImp1c3RpZnktc3RhcnQtc3RhcnQgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAge3Zpc2libGVTdGVwcy5tYXAoKHN0ZXAsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLlRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtzdGVwfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c3RlcH1cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzPXtzdGVwU3RhdHVzKHN0ZXApfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdGVwRGlzYWJsZWQoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYXgtdy1bMjAwcHhdIHRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3N0ZXBbMF0udG9VcHBlckNhc2UoKSArIHN0ZXAuc2xpY2UoMSl9XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5MaXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9Gb2N1c01vZGFsLkhlYWRlcj5cblxuICAgICAgICAgIDxGb2N1c01vZGFsLkJvZHkgY2xhc3NOYW1lPVwib3ZlcmZsb3ctaGlkZGVuIHAtMFwiIHN0eWxlPXttb2RhbEJvZHlTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXtcbiAgICAgICAgICAgICAgICBhY3RpdmVTdGVwID09PSBcInByaWNlc1wiXG4gICAgICAgICAgICAgICAgICA/IHsgaGVpZ2h0OiBcIjEwMCVcIiwgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsIHdpZHRoOiBcIjEwMCVcIiB9XG4gICAgICAgICAgICAgICAgICA6IG1vZGFsU2Nyb2xsU3R5bGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICAgICAgYWN0aXZlU3RlcCA9PT0gXCJwcmljZXNcIlxuICAgICAgICAgICAgICAgICAgICA/IHsgaGVpZ2h0OiBcIjEwMCVcIiwgd2lkdGg6IFwiMTAwJVwiIH1cbiAgICAgICAgICAgICAgICAgICAgOiBtb2RhbEZvcm1TdHlsZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthY3RpdmVTdGVwID09PSBcImRldGFpbHNcIiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJkZXRhaWxzXCIgc3R5bGU9e3N0YWNrU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGluZyBsZXZlbD1cImgxXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3JvdyA/IFwiRWRpdCBDb3Vwb24gUHJvZHVjdFwiIDogXCJDcmVhdGUgQ291cG9uIFByb2R1Y3RcIn1cbiAgICAgICAgICAgICAgICAgICAgPC9IZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIkdlbmVyYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0aHJlZUNvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJUaXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdC50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldpbnRlciBqYWNrZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlN1YnRpdGxlXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnN1YnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV2FybSBhbmQgY296eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiSGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cIlRoZSBVUkwtZnJpZW5kbHkgaWRlbnRpZmllciBmb3IgdGhpcyBwcm9kdWN0LiBJZiBsZWZ0IGVtcHR5LCBNZWR1c2EgZ2VuZXJhdGVzIGl0IGZyb20gdGhlIHRpdGxlLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxIYW5kbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LmhhbmRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGhhbmRsZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGhhbmRsZSB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkRlc2NyaXB0aW9uXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3QuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQSB3YXJtIGFuZCBjb3p5IGphY2tldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiTWVkaWFcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNZWRpYVVwbG9hZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VwbG9hZGluZz17dXBsb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYT17cHJvZHVjdC5tZWRpYX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25VcGxvYWQ9eyhmaWxlcykgPT4gdm9pZCB1cGxvYWRNZWRpYShmaWxlcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsobWVkaWEpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYTogY3VycmVudC5tZWRpYS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZWRpYS5hc3NldF9pZCAmJiBpdGVtLmFzc2V0X2lkICE9PSBtZWRpYS5hc3NldF9pZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW1lZGlhLmFzc2V0X2lkICYmIGl0ZW0udXJsICE9PSBtZWRpYS51cmwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlNLVVwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnNrdX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDT1VQT04tMDAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPERpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPFB1cmNoYXNlQ29uZGl0aW9uc0ZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZml4ZWRBbW91bnQ9e2lzQW1vdW50VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24ucHVyY2hhc2VfY29uZGl0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dXBkYXRlUHVyY2hhc2VDb25kaXRpb25zfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAge2FjdGl2ZVN0ZXAgPT09IFwib3JnYW5pemVcIiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJvcmdhbml6ZVwiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9XCJPcmdhbml6ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3BhbmVsU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLXgtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cInBsdXNcIj5EaXNjb3VudGFibGU8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3cgcHJvbW90aW9ucyB0byBkaXNjb3VudCB0aGlzIHByb2R1Y3QncyBzYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17cHJvZHVjdC5kaXNjb3VudGFibGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoZGlzY291bnRhYmxlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzY291bnRhYmxlOiBCb29sZWFuKGRpc2NvdW50YWJsZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiU2VsbGVyXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3Quc2VsbGVyX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5zZWxsZXJzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhzZWxsZXJfaWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIHNlbGxlcl9pZCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlR5cGVcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LnR5cGVfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X3R5cGVzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsodHlwZV9pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIHR5cGVfaWQgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvbGxlY3Rpb25cIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LmNvbGxlY3Rpb25faWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X2NvbGxlY3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY29sbGVjdGlvbl9pZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2R1Y3QoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ2F0ZWdvcnlcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9kdWN0LmNhdGVnb3J5X2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnMucHJvZHVjdF9jYXRlZ29yaWVzIHx8IFtdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoY2F0ZWdvcnlfaWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBjYXRlZ29yeV9pZCB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiVGFnXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdC50YWdfaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5wcm9kdWN0X3RhZ3MgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh0YWdfaWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9kdWN0KChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCB0YWdfaWQgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAge2FjdGl2ZVN0ZXAgPT09IFwiZGV0YWlsc1wiICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3RhY2tTdHlsZSwgbWFyZ2luVG9wOiAyNCB9fT5cbiAgICAgICAgICAgICAgICAgICAgPERpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvdXBvblwiXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJDb25maWd1cmUgdGhlIGNvdXBvbiBpc3N1ZWQgd2hlbiB0aGlzIHByb2R1Y3QgaXMgcHVyY2hhc2VkLlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtwYW5lbFN0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC14LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+Q291cG9uIGlzc3VhbmNlPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbWFsbFwiIGNsYXNzTmFtZT1cInRleHQtdWktZmctbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzc3VlIGNvdXBvbnMgd2hlbiBjdXN0b21lcnMgcHVyY2hhc2UgdGhpcyBwcm9kdWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjb3Vwb24uZW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhlbmFibGVkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIlR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24udHlwZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KHR5cGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ291cG9uVHlwZSh0eXBlIGFzIENvdXBvblR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAteS0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVDaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXAuQ2hvaWNlQm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Nob2ljZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjaG9pY2UudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17Y2hvaWNlLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e2Nob2ljZS5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIlN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5wcm9tb3Rpb25fc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsocHJvbW90aW9uX3N0YXR1cykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX3N0YXR1czpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX3N0YXR1cyBhcyBQcm9tb3Rpb25TdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXR1c0Nob2ljZXMubWFwKChjaG9pY2UpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cC5DaG9pY2VCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17Y2hvaWNlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Nob2ljZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtjaG9pY2UubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17Y2hvaWNlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYWRpb0dyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIHsoaXNBbW91bnRUeXBlIHx8IGlzUGVyY2VudGFnZVR5cGUpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPXtpc0Ftb3VudFR5cGUgPyBcIkNvdXBvbiBWYWx1ZXNcIiA6IFwiVmFsdWVcIn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtpc0Ftb3VudFR5cGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3Vwb24uYW1vdW50cy5tYXAoKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uY29kZSA9PT0gcm93LmN1cnJlbmN5X2NvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cm93LmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNoYWRvdy1lbGV2YXRpb24tY2FyZC1yZXN0IGJnLXVpLWJnLWNvbXBvbmVudCByb3VuZGVkLW1kIHB4LTQgcHktM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cm93LmN1cnJlbmN5X2NvZGUudG9VcHBlckNhc2UoKX0gQ291cG9uIFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVuY3k/Lm5hbWUgfHwgcm93LmN1cnJlbmN5X2NvZGUudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDdXJyZW5jeUFtb3VudEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jaWVzPXtjdXJyZW5jaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlPXtyb3cuY3VycmVuY3lfY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtyb3cuYW1vdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhhbW91bnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudHM6IGN1cnJlbnQuYW1vdW50cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID09PSByb3dJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyAuLi5pdGVtLCBhbW91bnQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshY291cG9uLmFtb3VudHMubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBhdCBsZWFzdCBvbmUgZWZmZWN0aXZlIEN1cnJlbmN5IENvZGUgY29uZGl0aW9uIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkNvdXBvbiBWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBlcmNlbnRhZ2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLnBlcmNlbnRhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsocGVyY2VudGFnZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNJdGVtU2NvcGVkRGlzY291bnQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIkFsbG9jYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5hbGxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KGFsbG9jYXRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb246IGFsbG9jYXRpb24gYXMgQ291cG9uQWxsb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17dHdvQ29sdW1uR3JpZFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0dyb3VwLkNob2ljZUJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImVhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkVhY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIkFwcGxpZXMgdmFsdWUgb24gZWFjaCBpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cC5DaG9pY2VCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJvbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJPbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJMaW1pdCBkaXNjb3VudCB0byBtYXggcXVhbnRpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1JhZGlvR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJFeHBpcmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwiQ29udHJvbCB3aGVuIGlzc3VlZCBjb3Vwb25zIGV4cGlyZS5cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gcG9saWN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5leHBpcmF0aW9uX3R5cGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsoZXhwaXJhdGlvbl90eXBlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3R5cGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3R5cGUgYXMgRXhwaXJhdGlvblBvbGljeVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5WYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGV4cGlyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwibW9udGhfZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kIG9mIHNhbWUgbW9udGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiZHVyYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdXJhdGlvbiBhZnRlciBpc3N1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJmaXhlZFwiPkZpeGVkIGRhdGU8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdXBvbi5leHBpcmF0aW9uX3R5cGUgPT09IFwiZHVyYXRpb25cIiA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRHVyYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPXsxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uZXhwaXJhdGlvbl9kdXJhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2R1cmF0aW9uOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiRHVyYXRpb24gdW5pdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5leHBpcmF0aW9uX2R1cmF0aW9uX3VuaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9kdXJhdGlvbl91bml0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyYXRpb25fZHVyYXRpb25fdW5pdCBhcyBFeHBpcmF0aW9uRHVyYXRpb25Vbml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5UcmlnZ2VyPjxTZWxlY3QuVmFsdWUgLz48L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImRheXNcIj5EYXlzPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm1vbnRoc1wiPk1vbnRoczwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJmaXhlZFwiID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyZXMgYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmV4cGlyYXRpb25fZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9kYXRlOiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsoY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJkdXJhdGlvblwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cG9uLmV4cGlyYXRpb25fdHlwZSA9PT0gXCJtb250aF9lbmRcIikgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4cGlyYXRpb24gdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmV4cGlyYXRpb25fdGltZV9wb2xpY3l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eyhleHBpcmF0aW9uX3RpbWVfcG9saWN5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3RpbWVfcG9saWN5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX3RpbWVfcG9saWN5IGFzIEV4cGlyYXRpb25UaW1lUG9saWN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj48U2VsZWN0LlZhbHVlIC8+PC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cImRheV9lbmRcIj5FbmQgb2YgZGF5PC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJleGFjdGx5XCI+RXhhY3RseTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y291cG9uLmV4cGlyYXRpb25fdHlwZSAhPT0gXCJub25lXCIgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDYXAgZXhwaXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC14LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IC4uLnBhbmVsU3R5bGUsIHBhZGRpbmc6IFwiOHB4IDEycHhcIiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPVwidGV4dC11aS1mZy1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FtcGFpZ24gZW5kIG9yIGNhcCBkYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NvdXBvbi5leHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ246IEJvb2xlYW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2NhcF9ieV9jYW1wYWlnbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFeHBpcmF0aW9uIGNhcCBkYXRlXCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjb3Vwb24uZXhwaXJhdGlvbl9jYXBfYnlfY2FtcGFpZ259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5leHBpcmF0aW9uX2NhcF9hdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmF0aW9uX2NhcF9hdDogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJDaG9vc2Ugd2hldGhlciBldmVyeSBpc3N1ZWQgY291cG9uIGlzIHVuaXF1ZSBvciBzaGFyZXMgb25lIGNvZGUuXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDb2RlIHN0cmF0ZWd5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5jb2RlX3N0cmF0ZWd5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KGNvZGVfc3RyYXRlZ3kpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfc3RyYXRlZ3k6IGNvZGVfc3RyYXRlZ3kgYXMgQ29kZVN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cInVuaXF1ZV9jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pcXVlIGNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwic2hhcmVkX2NvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWQgY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdXBvbi5jb2RlX3N0cmF0ZWd5ID09PSBcInVuaXF1ZV9jb2RlXCIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiQ29kZSBwcmVmaXhcIiBvcHRpb25hbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLmNvZGVfcHJlZml4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNPVVBPTlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfcHJlZml4OiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJTaGFyZWQgY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb3Vwb24uc2hhcmVkX2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU1VNTUVSMTVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvdXBvbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfY29kZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIklzc3VhbmNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt0d29Db2x1bW5HcmlkU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJNYXggaXNzdWFuY2UgcGVyIGl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPXsxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvdXBvbi5tYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb3Vwb24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfaXNzdWFuY2VfcGVyX29yZGVyX2l0ZW06IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW1vdW50VHlwZSAmJiBjb3Vwb24uYW1vdW50cy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJQcm9tb3Rpb24gbWlycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y291cG9uLnByb21vdGlvbl9taXJyb3JfbW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y291cG9uLnR5cGUgPT09IFwiYnV5X3hfZ2V0X3lcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsocHJvbW90aW9uX21pcnJvcl9tb2RlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q291cG9uKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tb3Rpb25fbWlycm9yX21vZGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbW90aW9uX21pcnJvcl9tb2RlIGFzIE1pcnJvck1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LlZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJub25lXCI+Tm9uZTwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJtYW51YWxcIj5NYW51YWw8L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdC5JdGVtIHZhbHVlPVwiYXV0b1wiPkF1dG88L1NlbGVjdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAge2FsbG93UHJvbW90aW9uTWlycm9yICYmIGFjdGl2ZVN0ZXAgPT09IFwiY2FtcGFpZ25cIiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UHJvZ3Jlc3NUYWJzLkNvbnRlbnQgdmFsdWU9XCJjYW1wYWlnblwiIHN0eWxlPXtzdGFja1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9XCJDYW1wYWlnblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3R3b0NvbHVtbkdyaWRTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJDYW1wYWlnbiBtb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2FtcGFpZ24ubW9kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXsobW9kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBtb2RlIGFzIENhbXBhaWduTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuVmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdC5UcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm5vbmVcIj5ObyBjYW1wYWlnbjwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0Lkl0ZW0gdmFsdWU9XCJleGlzdGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGlzdGluZyBjYW1wYWlnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3QuSXRlbSB2YWx1ZT1cIm5ld1wiPk5ldyBjYW1wYWlnbjwvU2VsZWN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhbXBhaWduLm1vZGUgPT09IFwiZXhpc3RpbmdcIiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIkV4aXN0aW5nIGNhbXBhaWduXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPE9wdGlvblNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduLmNhbXBhaWduX2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9ucy5jYW1wYWlnbnMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGNhbXBhaWduX2lkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDYW1wYWlnbigoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbXBhaWduX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYW1wYWlnbi5tb2RlID09PSBcIm5ld1wiICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIGxhYmVsPVwiSWRlbnRpZmllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbi5jYW1wYWlnbl9pZGVudGlmaWVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENhbXBhaWduKChjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbXBhaWduX2lkZW50aWZpZXI6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBsYWJlbD1cIlN0YXJ0cyBhdFwiIG9wdGlvbmFsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjYW1wYWlnbi5zdGFydHNfYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRzX2F0OiBldmVudC50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbGFiZWw9XCJFbmRzIGF0XCIgb3B0aW9uYWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NhbXBhaWduLmVuZHNfYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2FtcGFpZ24oKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kc19hdDogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9Qcm9ncmVzc1RhYnMuQ29udGVudD5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAge2FjdGl2ZVN0ZXAgPT09IFwicHJpY2VzXCIgJiYgKFxuICAgICAgICAgICAgICAgICAgPFByb2dyZXNzVGFicy5Db250ZW50IHZhbHVlPVwicHJpY2VzXCIgc3R5bGU9e3sgaGVpZ2h0OiBcIjEwMCVcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgPFByb2R1Y3RQcmljZXNUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmNpZXM9e2N1cnJlbmNpZXN9XG4gICAgICAgICAgICAgICAgICAgICAgY291cG9uVmFsdWU9e2Zvcm1hdENvdXBvblZhbHVlKGNvdXBvbiwgY3VycmVuY2llcyl9XG4gICAgICAgICAgICAgICAgICAgICAgcHJpY2VzPXtwcm9kdWN0LnByaWNlX2Ftb3VudHN9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjdXJyZW5jeUNvZGUsIHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZHVjdCgoY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VfYW1vdW50czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnQucHJpY2VfYW1vdW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb2RlXTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L1Byb2dyZXNzVGFicy5Db250ZW50PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9Gb2N1c01vZGFsLkJvZHk+XG5cbiAgICAgICAgICA8Rm9jdXNNb2RhbC5Gb290ZXIgc3R5bGU9e3sgZmxleFNocmluazogMCB9fT5cbiAgICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cInNlY29uZGFyeVwiIG9uQ2xpY2s9eygpID0+IG9uT3BlbkNoYW5nZShmYWxzZSl9PlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAge2N1cnJlbnRTdGVwSW5kZXggPiAwICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgICAgICBzZXRBY3RpdmVTdGVwKHZpc2libGVTdGVwc1tjdXJyZW50U3RlcEluZGV4IC0gMV0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQmFja1xuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7Y3VycmVudFN0ZXBJbmRleCA8IHZpc2libGVTdGVwcy5sZW5ndGggLSAxID8gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFhY3RpdmVTdGVwQ29tcGxldGV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gY3VycmVudFN0ZXBJbmRleCArIDFcbiAgICAgICAgICAgICAgICAgIHNldEZ1cnRoZXN0U3RlcEluZGV4KChjdXJyZW50KSA9PlxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChjdXJyZW50LCBuZXh0SW5kZXgpLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlU3RlcCh2aXNpYmxlU3RlcHNbbmV4dEluZGV4XSlcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ29udGludWVcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFhY3RpdmVTdGVwQ29tcGxldGV9XG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtzYXZpbmd9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCBzYXZlKCl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0ZvY3VzTW9kYWwuRm9vdGVyPlxuICAgICAgICA8L1Byb2dyZXNzVGFicz5cbiAgICAgIDwvRm9jdXNNb2RhbC5Db250ZW50PlxuICAgIDwvRm9jdXNNb2RhbD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ291cG9uUHJvZHVjdHNQYWdlKHtcbiAgYWxsb3dQcm9tb3Rpb25NaXJyb3IgPSBmYWxzZSxcbiAgYXBpQmFzZSxcbiAgdGl0bGUsXG59OiB7XG4gIGFsbG93UHJvbW90aW9uTWlycm9yPzogYm9vbGVhblxuICBhcGlCYXNlOiBBcGlCYXNlXG4gIHRpdGxlOiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgW3Byb2R1Y3RzLCBzZXRQcm9kdWN0c10gPSB1c2VTdGF0ZTxDb3Vwb25Qcm9kdWN0Um93W10+KFtdKVxuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxPcHRpb25zUGF5bG9hZD4oe30pXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtsb2FkRXJyb3IsIHNldExvYWRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbbW9kYWxPcGVuLCBzZXRNb2RhbE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlZGl0aW5nUm93LCBzZXRFZGl0aW5nUm93XSA9IHVzZVN0YXRlPENvdXBvblByb2R1Y3RSb3cgfCBudWxsPihudWxsKVxuICBjb25zdCBwcm9tcHQgPSB1c2VQcm9tcHQoKVxuICBjb25zdCBjb3Vwb25CYXNlID0gYCR7YXBpQmFzZX0vY291cG9uLXByb2R1Y3RzYFxuXG4gIGNvbnN0IGxvYWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0TG9hZGluZyh0cnVlKVxuICAgIHNldExvYWRFcnJvcihudWxsKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBbcHJvZHVjdHNQYXlsb2FkLCBvcHRpb25zUGF5bG9hZF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGFwaUZldGNoPHsgY291cG9uX3Byb2R1Y3RzOiBDb3Vwb25Qcm9kdWN0Um93W10gfT4oY291cG9uQmFzZSksXG4gICAgICAgIGFwaUZldGNoPE9wdGlvbnNQYXlsb2FkPihgJHtjb3Vwb25CYXNlfS9vcHRpb25zYCksXG4gICAgICBdKVxuICAgICAgc2V0UHJvZHVjdHMocHJvZHVjdHNQYXlsb2FkLmNvdXBvbl9wcm9kdWN0cyB8fCBbXSlcbiAgICAgIHNldE9wdGlvbnMob3B0aW9uc1BheWxvYWQgfHwge30pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgOiBcIkZhaWxlZCB0byBsb2FkIGNvdXBvbiBwcm9kdWN0c1wiXG4gICAgICBzZXRMb2FkRXJyb3IobWVzc2FnZSlcbiAgICAgIHRvYXN0LmVycm9yKG1lc3NhZ2UpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9LCBbY291cG9uQmFzZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB2b2lkIGxvYWQoKVxuICB9LCBbbG9hZF0pXG5cbiAgY29uc3QgcmVtb3ZlID0gYXN5bmMgKHJvdzogQ291cG9uUHJvZHVjdFJvdykgPT4ge1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHByb21wdCh7XG4gICAgICB0aXRsZTogXCJSZW1vdmUgY291cG9uIHByb2R1Y3Q/XCIsXG4gICAgICBkZXNjcmlwdGlvbjogYFRoaXMgcmVtb3ZlcyBjb3Vwb24gaXNzdWFuY2UgZnJvbSAke3Jvdy5wcm9kdWN0LnRpdGxlIHx8IHJvdy5wcm9kdWN0LmlkXG4gICAgICAgIH0uIFRoZSB1bmRlcmx5aW5nIE1lZHVzYSBwcm9kdWN0IHdpbGwgcmVtYWluIGF2YWlsYWJsZS5gLFxuICAgICAgY29uZmlybVRleHQ6IFwiUmVtb3ZlIHByb2R1Y3RcIixcbiAgICAgIGNhbmNlbFRleHQ6IFwiQ2FuY2VsXCIsXG4gICAgICB2YXJpYW50OiBcImRhbmdlclwiLFxuICAgIH0pXG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVyblxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwaUZldGNoKGAke2NvdXBvbkJhc2V9LyR7cm93LnByb2R1Y3QuaWR9YCwgeyBtZXRob2Q6IFwiREVMRVRFXCIgfSlcbiAgICAgIHRvYXN0LnN1Y2Nlc3MoXCJDb3Vwb24gY29uZmlndXJhdGlvbiByZW1vdmVkXCIpXG4gICAgICBhd2FpdCBsb2FkKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkRlbGV0ZSBmYWlsZWRcIilcbiAgICB9XG4gIH1cblxuICBjb25zdCBtaXJyb3IgPSBhc3luYyAocm93OiBDb3Vwb25Qcm9kdWN0Um93KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwaUZldGNoKFxuICAgICAgICBgL2FkbWluL2NvdXBvbi1wcm9kdWN0cy8ke3Jvdy5wcm9kdWN0LmlkfS9taXJyb3ItcHJvbW90aW9uYCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe30pLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgdG9hc3Quc3VjY2VzcyhcIlByb21vdGlvbiBtaXJyb3IgY3JlYXRlZFwiKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiTWlycm9yIGZhaWxlZFwiKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbnRhaW5lciBjbGFzc05hbWU9XCJkaXZpZGUteSBwLTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTYgcHktNFwiPlxuICAgICAgICA8SGVhZGluZyBsZXZlbD1cImgxXCI+e3RpdGxlfTwvSGVhZGluZz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0yXCI+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgb25DbGljaz17KCkgPT4gdm9pZCBsb2FkKCl9PlxuICAgICAgICAgICAgPEFycm93UGF0aCAvPiBSZWZyZXNoXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0RWRpdGluZ1JvdyhudWxsKVxuICAgICAgICAgICAgICBzZXRNb2RhbE9wZW4odHJ1ZSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFBsdXMgLz4gQ3JlYXRlXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICA8Q291cG9uRW1wdHlTdGF0ZSB0aXRsZT1cIkxvYWRpbmcgY291cG9uIHByb2R1Y3RzXCIgLz5cbiAgICAgICkgOiBsb2FkRXJyb3IgPyAoXG4gICAgICAgIDxDb3Vwb25FbXB0eVN0YXRlIHRpdGxlPXtsb2FkRXJyb3J9IC8+XG4gICAgICApIDogcHJvZHVjdHMubGVuZ3RoID8gKFxuICAgICAgICA8VGFibGU+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlByb2R1Y3Q8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlN0YXR1czwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+VHlwZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Q29kZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Q2FtcGFpZ248L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPklzc3VlZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgLz5cbiAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgIDxUYWJsZS5Cb2R5XG4gICAgICAgICAgICBzdHlsZT17eyBib3JkZXJCb3R0b206ICdub25lJyB9fT5cbiAgICAgICAgICAgIHtwcm9kdWN0cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSByb3cuY291cG9uX3Byb2R1Y3RfY29uZmlnXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e3Jvdy5pZH1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckJvdHRvbTogJ25vbmUnLCBiYWNrZ3JvdW5kOiAnbm9uZScgfX0+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwicGx1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Jvdy5wcm9kdWN0LnRpdGxlIHx8IHJvdy5wcm9kdWN0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21hbGxcIiBjbGFzc05hbWU9XCJ0ZXh0LXVpLWZnLW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cm93LnByb2R1Y3QuaGFuZGxlIHx8IHJvdy5wcm9kdWN0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFN0YXR1c0JhZGdlXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2NvdXBvblN0YXR1c0NvbG9yKGNvbmZpZy5wcm9tb3Rpb25fc3RhdHVzKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtjb25maWcucHJvbW90aW9uX3N0YXR1cyB8fCBcImRyYWZ0XCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvU3RhdHVzQmFkZ2U+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Y291cG9uVHlwZUxhYmVsKGNvbmZpZyl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIHtjb25maWcuY29kZV9zdHJhdGVneSA9PT0gXCJzaGFyZWRfY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb25maWcuc2hhcmVkX2NvZGUgfHwgXCJTaGFyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIDogYCR7Y29uZmlnLmNvZGVfcHJlZml4IHx8IFwiQ09VUE9OXCJ9LSpgfVxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2NhbXBhaWduTGFiZWwoY29uZmlnKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cm93LmVudGl0bGVtZW50c19jb3VudCB8fCAwfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1lbmQgZ2FwLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIHthbGxvd1Byb21vdGlvbk1pcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmJlbmVmaXRfdHlwZSA9PT0gXCJmaXhlZF9hbW91bnRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlnLmFtb3VudHM/Lmxlbmd0aCB8fCAwKSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIG1pcnJvcihyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRpbmdSb3cocm93KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNb2RhbE9wZW4odHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBlbmNpbFNxdWFyZSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgcmVtb3ZlKHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgIDwvVGFibGU+XG4gICAgICApIDogKFxuICAgICAgICA8Q291cG9uRW1wdHlTdGF0ZVxuICAgICAgICAgIHRpdGxlPVwiTm8gY291cG9uIHByb2R1Y3RzIGZvdW5kXCJcbiAgICAgICAgICBkZXNjcmlwdGlvbj1cIkNyZWF0ZSBhIG5ldyBjb3Vwb24gcHJvZHVjdCB0byBnZXQgc3RhcnRlZC5cIlxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAgPENvdXBvblByb2R1Y3RNb2RhbFxuICAgICAgICBvcGVuPXttb2RhbE9wZW59XG4gICAgICAgIHJvdz17ZWRpdGluZ1Jvd31cbiAgICAgICAgYXBpQmFzZT17YXBpQmFzZX1cbiAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgYWxsb3dQcm9tb3Rpb25NaXJyb3I9e2FsbG93UHJvbW90aW9uTWlycm9yfVxuICAgICAgICBvbk9wZW5DaGFuZ2U9e3NldE1vZGFsT3Blbn1cbiAgICAgICAgb25TYXZlZD17bG9hZH1cbiAgICAgIC8+XG4gICAgPC9Db250YWluZXI+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBUZXh0IH0gZnJvbSBcIkBtZWR1c2Fqcy91aVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBDb3Vwb25FbXB0eVN0YXRlKHtcbiAgZGVzY3JpcHRpb24sXG4gIHRpdGxlLFxufToge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBmbGV4LTEgZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWluLWgtWzI1MHB4XSB3LWZ1bGwgZmxleC0xIGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC02IHB5LTRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtZnVsbCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJwbHVzXCI+e3RpdGxlfTwvVGV4dD5cbiAgICAgICAgICB7ZGVzY3JpcHRpb24gPyA8VGV4dD57ZGVzY3JpcHRpb259PC9UZXh0PiA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBDb3Vwb25EZXRhaWxQYWdlVmlldyB9IGZyb20gXCIuLi8uLi8uLi8uLi9kYXNoYm9hcmQvY291cG9ucy9jb3Vwb24tbWFuYWdlclwiXG5cbmNvbnN0IENvdXBvbkRldGFpbFBhZ2UgPSAoKSA9PiB7XG4gIHJldHVybiA8Q291cG9uRGV0YWlsUGFnZVZpZXcgYXBpQmFzZT1cIi9hZG1pblwiIC8+XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvdXBvbkRldGFpbFBhZ2VcbiIsICJpbXBvcnQgeyBkZWZpbmVSb3V0ZUNvbmZpZyB9IGZyb20gXCJAbWVkdXNhanMvYWRtaW4tc2RrXCJcbmltcG9ydCB7IFJlY2VpcHRQZXJjZW50IH0gZnJvbSBcIkBtZWR1c2Fqcy9pY29uc1wiXG5pbXBvcnQgeyBDb3Vwb25Qcm9kdWN0c1BhZ2VWaWV3IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2Rhc2hib2FyZC9jb3Vwb25zL2NvdXBvbi1tYW5hZ2VyXCJcblxuZXhwb3J0IGNvbnN0IGNvbmZpZyA9IGRlZmluZVJvdXRlQ29uZmlnKHtcbiAgbGFiZWw6IFwiQ291cG9uIFByb2R1Y3RzXCIsXG4gIGljb246IFJlY2VpcHRQZXJjZW50LFxufSlcblxuY29uc3QgQ291cG9uUHJvZHVjdHNQYWdlID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxDb3Vwb25Qcm9kdWN0c1BhZ2VWaWV3XG4gICAgICBhcGlCYXNlPVwiL2FkbWluXCJcbiAgICAgIHRpdGxlPVwiQ291cG9uIFByb2R1Y3RzXCJcbiAgICAgIGFsbG93UHJvbW90aW9uTWlycm9yXG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBDb3Vwb25Qcm9kdWN0c1BhZ2VcbiIsICJpbXBvcnQgaTE4blJlc291cmNlcyBmcm9tIFwiLi9pMThuXCJcbmltcG9ydCBDb3Vwb25zUGFnZSwgeyBjb25maWcgYXMgY291cG9uc0NvbmZpZyB9IGZyb20gXCIuL3JvdXRlcy9jb3Vwb25zL3BhZ2VcIlxuaW1wb3J0IENvdXBvbkRldGFpbFBhZ2UgZnJvbSBcIi4vcm91dGVzL2NvdXBvbnMvW2lkXS9wYWdlXCJcbmltcG9ydCBDb3Vwb25Qcm9kdWN0c1BhZ2UsIHtcbiAgY29uZmlnIGFzIGNvdXBvblByb2R1Y3RzQ29uZmlnLFxufSBmcm9tIFwiLi9yb3V0ZXMvY291cG9ucy9wcm9kdWN0cy9wYWdlXCJcblxuY29uc3Qgcm91dGVNb2R1bGUgPSB7XG4gIHJvdXRlczogW1xuICAgIHtcbiAgICAgIENvbXBvbmVudDogQ291cG9uc1BhZ2UsXG4gICAgICBwYXRoOiBcIi9jb3Vwb25zXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBDb21wb25lbnQ6IENvdXBvblByb2R1Y3RzUGFnZSxcbiAgICAgIHBhdGg6IFwiL2NvdXBvbnMvcHJvZHVjdHNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIENvbXBvbmVudDogQ291cG9uRGV0YWlsUGFnZSxcbiAgICAgIHBhdGg6IFwiL2NvdXBvbnMvOmlkXCIsXG4gICAgfSxcbiAgXSxcbn1cblxuY29uc3QgbWVudUl0ZW1Nb2R1bGUgPSB7XG4gIG1lbnVJdGVtczogW1xuICAgIHtcbiAgICAgIGxhYmVsOiBjb3Vwb25zQ29uZmlnLmxhYmVsLFxuICAgICAgaWNvbjogY291cG9uc0NvbmZpZy5pY29uLFxuICAgICAgcGF0aDogXCIvY291cG9uc1wiLFxuICAgICAgcmFuazogY291cG9uc0NvbmZpZy5yYW5rLFxuICAgICAgbmVzdGVkOiBjb3Vwb25zQ29uZmlnLm5lc3RlZCxcbiAgICAgIHRyYW5zbGF0aW9uTnM6IGNvdXBvbnNDb25maWcudHJhbnNsYXRpb25OcyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBjb3Vwb25Qcm9kdWN0c0NvbmZpZy5sYWJlbCxcbiAgICAgIGljb246IGNvdXBvblByb2R1Y3RzQ29uZmlnLmljb24sXG4gICAgICBwYXRoOiBcIi9jb3Vwb25zL3Byb2R1Y3RzXCIsXG4gICAgICByYW5rOiAxMSxcbiAgICAgIG5lc3RlZDogXCIvY291cG9uc1wiLFxuICAgICAgdHJhbnNsYXRpb25OczogY291cG9uUHJvZHVjdHNDb25maWcudHJhbnNsYXRpb25OcyxcbiAgICB9LFxuICBdLFxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHdpZGdldE1vZHVsZToge1xuICAgIHdpZGdldHM6IFtdLFxuICB9LFxuICByb3V0ZU1vZHVsZSxcbiAgbWVudUl0ZW1Nb2R1bGUsXG4gIGZvcm1Nb2R1bGU6IHtcbiAgICBjdXN0b21GaWVsZHM6IHt9LFxuICB9LFxuICBkaXNwbGF5TW9kdWxlOiB7XG4gICAgZGlzcGxheXM6IHt9LFxuICB9LFxuICBpMThuTW9kdWxlOiBpMThuUmVzb3VyY2VzLFxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBO0FBQUEsRUFDRSxTQUFXO0FBQUEsSUFDVCxNQUFRO0FBQUEsSUFDUixjQUFnQjtBQUFBLEVBQ2xCO0FBQ0Y7OztBQ0hBLElBQU8sZUFBUTtBQUFBLEVBQ2IsSUFBSTtBQUFBLElBQ0YsYUFBYTtBQUFBLEVBQ2Y7QUFDRjs7O0FDSkEsU0FBUyxtQkFBbUJBLFNBQVE7QUFDbEMsU0FBTztBQUFBLElBQ0wsR0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUUgsVUFBVSxPQUFPLElBQUksWUFBWTtBQUFBLEVBQ25DO0FBQ0Y7QUFJQSxTQUFTLGtCQUFrQkMsU0FBUTtBQUNqQyxTQUFPLG1CQUFtQkEsT0FBTTtBQUNsQzs7O0FDbkJBLFNBQVMsc0JBQXNCOzs7QUNEL0I7QUFBQSxFQUNFLGVBQUFDO0FBQUEsRUFDQSxhQUFBQztBQUFBLEVBQ0EsV0FBQUM7QUFBQSxFQUNBLFlBQUFDO0FBQUEsT0FJSztBQUNQO0FBQUEsRUFDRSxhQUFBQztBQUFBLEVBQ0EsZ0JBQUFDO0FBQUEsRUFDQSxRQUFBQztBQUFBLEVBQ0E7QUFBQSxFQUNBLFNBQUFDO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0UsVUFBQUM7QUFBQSxFQUNBLGFBQUFDO0FBQUEsRUFDQTtBQUFBLEVBQ0EsaUJBQUFDO0FBQUEsRUFDQSxjQUFBQztBQUFBLEVBQ0EsV0FBQUM7QUFBQSxFQUNBLFNBQUFDO0FBQUEsRUFDQSxTQUFBQztBQUFBLEVBQ0EsZ0JBQUFDO0FBQUEsRUFDQSxVQUFBQztBQUFBLEVBQ0EsZUFBQUM7QUFBQSxFQUNBLFVBQUFDO0FBQUEsRUFDQSxTQUFBQztBQUFBLEVBQ0E7QUFBQSxFQUNBLFFBQUFDO0FBQUEsRUFDQSxZQUFBQztBQUFBLEVBQ0EsU0FBQUM7QUFBQSxFQUNBLGFBQUFDO0FBQUEsT0FDSzs7O0FDcENQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUtLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFFBQUFDO0FBQUEs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LE1BQ1gsTUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxJQUFNLGlCQUFpQjtBQUFBLEVBQ3JCLFdBQVc7QUFBQSxJQUNUO0FBQUEsTUFDRSxPQUFPLE9BQWM7QUFBQSxNQUNyQixNQUFNLE9BQWM7QUFBQSxNQUNwQixNQUFNO0FBQUEsTUFDTixNQUFNLE9BQWM7QUFBQSxNQUNwQixRQUFRLE9BQWM7QUFBQSxNQUN0QixlQUFlLE9BQWM7QUFBQSxJQUMvQjtBQUFBLElBQ0E7QUFBQSxNQUNFLE9BQU9DLFFBQXFCO0FBQUEsTUFDNUIsTUFBTUEsUUFBcUI7QUFBQSxNQUMzQixNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixlQUFlQSxRQUFxQjtBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBTyxnQkFBUTtBQUFBLEVBQ2IsY0FBYztBQUFBLElBQ1osU0FBUyxDQUFDO0FBQUEsRUFDWjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxZQUFZO0FBQUEsSUFDVixjQUFjLENBQUM7QUFBQSxFQUNqQjtBQUFBLEVBQ0EsZUFBZTtBQUFBLElBQ2IsVUFBVSxDQUFDO0FBQUEsRUFDYjtBQUFBLEVBQ0EsWUFBWTtBQUNkOyIsCiAgIm5hbWVzIjogWyJjb25maWciLCAiY29uZmlnIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgIkFycm93UGF0aCIsICJQZW5jaWxTcXVhcmUiLCAiUGx1cyIsICJUcmFzaCIsICJCdXR0b24iLCAiQ29udGFpbmVyIiwgIkN1cnJlbmN5SW5wdXQiLCAiRm9jdXNNb2RhbCIsICJIZWFkaW5nIiwgIklucHV0IiwgIkxhYmVsIiwgIlByb2dyZXNzVGFicyIsICJTZWxlY3QiLCAiU3RhdHVzQmFkZ2UiLCAiU3dpdGNoIiwgIlRhYmxlIiwgIlRleHQiLCAiVGV4dGFyZWEiLCAidG9hc3QiLCAidXNlUHJvbXB0IiwgIlRleHQiLCAianN4IiwgImpzeHMiLCAiY29uZmlnIiwgInJvdyIsICJUZXh0IiwgImpzeCIsICJqc3hzIiwgIlRleHQiLCAidmFsdWUiLCAidmFsdWVzIiwgInBheWxvYWQiLCAicm93IiwgImNvbmZpZyIsICJGcmFnbWVudCIsICJqc3giLCAianN4cyIsICJiYWNrZW5kVXJsIiwgImFwaUVycm9yTWVzc2FnZSIsICJhcGlGZXRjaCIsICJhbW91bnQiLCAiY3VycmVuY3kiLCAianN4cyIsICJqc3giLCAiVGV4dCIsICJIZWFkaW5nIiwgIkNvbnRhaW5lciIsICJTdGF0dXNCYWRnZSIsICJGcmFnbWVudCIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAiYXBpRmV0Y2giLCAidG9hc3QiLCAiVGFibGUiLCAidXNlQ2FsbGJhY2siLCAiQnV0dG9uIiwgIkFycm93UGF0aCIsICJqc3giLCAianN4IiwgInBhZ2VfZGVmYXVsdCIsICJSZWNlaXB0UGVyY2VudCIsICJqc3giLCAiY29uZmlnIiwgIlJlY2VpcHRQZXJjZW50IiwgIkNvdXBvblByb2R1Y3RzUGFnZSIsICJwYWdlX2RlZmF1bHQiLCAicGFnZV9kZWZhdWx0IiwgImNvbmZpZyJdCn0K
|