@thinremote/thinr-cli 1.3.4 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -0
- package/README.md +117 -123
- package/bin/thinr.js +43 -105
- package/commands/_shared.js +10 -90
- package/commands/device/_shared.js +2 -2
- package/commands/device/exec.js +2 -2
- package/commands/device/fs.js +2 -2
- package/commands/device/index.js +5 -19
- package/commands/device/logs.js +4 -4
- package/commands/device/status.js +1 -1
- package/commands/device/transfer.js +2 -2
- package/commands/device/update.js +8 -2
- package/commands/fleet/upgrade.js +3 -3
- package/commands/playbook/run.js +2 -2
- package/commands/playbook/validate.js +2 -2
- package/commands/product/_shared.js +1 -1
- package/commands/product/exec.js +2 -2
- package/commands/product/fs.js +2 -2
- package/commands/product/index.js +4 -11
- package/commands/product/logs.js +2 -2
- package/commands/product/metric.js +2 -2
- package/commands/product/playbook.js +5 -5
- package/commands/product/property.js +4 -4
- package/commands/product/push.js +2 -2
- package/commands/product/resource.js +4 -4
- package/commands/product/status.js +3 -3
- package/dist/dashboard.js +12 -12
- package/docs/guides/thinremote-metrics-logs.md +59 -0
- package/docs/guides/thinremote-playbooks.md +133 -0
- package/docs/guides/thinremote-scripts.md +115 -0
- package/docs/guides/thinremote.md +116 -0
- package/lib/command-stream.js +3 -2
- package/lib/console.js +6 -6
- package/lib/constants.js +1 -19
- package/lib/dashboard/event-stream.js +5 -5
- package/lib/device-api.js +4 -4
- package/lib/guides.js +41 -0
- package/lib/identity.js +75 -0
- package/lib/local-files.js +54 -0
- package/lib/mcp/{tools-install.js → agent-install.js} +12 -61
- package/lib/mcp/helpers.js +5 -25
- package/lib/mcp/playbook-ops.js +393 -0
- package/lib/mcp/registry.js +9 -43
- package/lib/mcp/resource-hooks.js +53 -0
- package/lib/mcp/resource-types.js +857 -0
- package/lib/mcp/tools-exec.js +217 -177
- package/lib/monitoring.js +3 -3
- package/lib/playbook/actions.js +30 -18
- package/lib/playbook/expression.js +1 -4
- package/lib/playbook/fleet.js +4 -1
- package/lib/playbook/loader.js +16 -8
- package/lib/playbook/runner.js +40 -8
- package/lib/playbook/schema.js +108 -34
- package/lib/product/log-presets.js +1 -1
- package/lib/product/logs.js +2 -2
- package/lib/product-orchestrator.js +14 -9
- package/lib/product.js +29 -227
- package/lib/proxy.js +4 -4
- package/lib/status.js +13 -5
- package/package.json +4 -2
- package/commands/device/delete.js +0 -53
- package/commands/device/list.js +0 -55
- package/commands/device/property.js +0 -52
- package/commands/device/resource.js +0 -52
- package/commands/logout.js +0 -47
- package/commands/product/list.js +0 -86
- package/commands/product/props.js +0 -125
- package/commands/profile.js +0 -173
- package/lib/alarms.js +0 -223
- package/lib/api.js +0 -89
- package/lib/auth.js +0 -428
- package/lib/bucket.js +0 -82
- package/lib/concurrency.js +0 -52
- package/lib/config.js +0 -230
- package/lib/devices.js +0 -60
- package/lib/errors.js +0 -65
- package/lib/format.js +0 -114
- package/lib/mcp/server.js +0 -67
- package/lib/mcp/tools-alarms.js +0 -507
- package/lib/mcp/tools-buckets.js +0 -99
- package/lib/mcp/tools-devices.js +0 -235
- package/lib/mcp/tools-filesystem.js +0 -281
- package/lib/mcp/tools-logs.js +0 -225
- package/lib/mcp/tools-playbook.js +0 -210
- package/lib/mcp/tools-products.js +0 -1557
- package/lib/mcp/tools-profile.js +0 -635
- package/lib/mcp/tools-profiles.js +0 -30
- package/lib/mcp/tools-properties.js +0 -79
- package/lib/mcp/tools-resources.js +0 -78
- package/lib/mcp/tools-scripts.js +0 -212
- package/lib/mcp/tools-tokens.js +0 -369
- package/lib/output.js +0 -114
- package/lib/paths.js +0 -32
- package/lib/profile.js +0 -657
- package/lib/property.js +0 -75
- package/lib/resource.js +0 -151
- package/lib/storage.js +0 -117
- package/lib/tokens.js +0 -366
package/dist/dashboard.js
CHANGED
|
@@ -243,7 +243,7 @@ function colorForPct(p) {
|
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
// src/dashboard/lib/status.js
|
|
246
|
-
import { ALARM_SEVERITY } from "
|
|
246
|
+
import { ALARM_SEVERITY } from "@thinger-io/cli-core/alarms";
|
|
247
247
|
import { debugLog } from "../lib/debug-log.js";
|
|
248
248
|
import { normalizeAgentVersion, compareAgentVersions } from "../lib/agent-versions.js";
|
|
249
249
|
function deviceHealth(device, alarmSeverity) {
|
|
@@ -1282,7 +1282,7 @@ function DevicePickerModal({ title, devices, onSelect, onCancel }) {
|
|
|
1282
1282
|
// src/dashboard/components/OverviewTab.jsx
|
|
1283
1283
|
import React9, { useEffect as useEffect5, useMemo as useMemo5, useRef as useRef4, useState as useState5 } from "react";
|
|
1284
1284
|
import { Box as Box7, Text as Text8, useStdout as useStdout3 } from "ink";
|
|
1285
|
-
import { ALARM_SEVERITY as ALARM_SEVERITY2, ALARM_STATE } from "
|
|
1285
|
+
import { ALARM_SEVERITY as ALARM_SEVERITY2, ALARM_STATE } from "@thinger-io/cli-core/alarms";
|
|
1286
1286
|
import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1287
1287
|
var FLEET_HINT = [
|
|
1288
1288
|
{ k: "1-5", label: "tabs" },
|
|
@@ -2149,7 +2149,7 @@ function OverviewTab({
|
|
|
2149
2149
|
// src/dashboard/components/AlertsTab.jsx
|
|
2150
2150
|
import React10, { useMemo as useMemo6 } from "react";
|
|
2151
2151
|
import { Box as Box8, Text as Text9 } from "ink";
|
|
2152
|
-
import { ALARM_SEVERITY as ALARM_SEVERITY3, ALARM_STATE as ALARM_STATE2 } from "
|
|
2152
|
+
import { ALARM_SEVERITY as ALARM_SEVERITY3, ALARM_STATE as ALARM_STATE2 } from "@thinger-io/cli-core/alarms";
|
|
2153
2153
|
import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
2154
2154
|
var SEVERITY_STYLE = {
|
|
2155
2155
|
[ALARM_SEVERITY3.CRITICAL]: { glyph: "\u25CF", color: theme.red, label: "CRIT" },
|
|
@@ -3108,7 +3108,7 @@ import {
|
|
|
3108
3108
|
import {
|
|
3109
3109
|
listStorageFiles,
|
|
3110
3110
|
readStorageFile
|
|
3111
|
-
} from "
|
|
3111
|
+
} from "@thinger-io/cli-core/storage";
|
|
3112
3112
|
import { parsePlaybook } from "../lib/playbook/loader.js";
|
|
3113
3113
|
import { debugCount, debugLog as debugLog2 } from "../lib/debug-log.js";
|
|
3114
3114
|
var RUNS_PREFIX = "playbooks/runs/";
|
|
@@ -3318,7 +3318,7 @@ import { useCallback as useCallback4, useRef as useRef6, useState as useState9 }
|
|
|
3318
3318
|
import { runPlaybook } from "../lib/playbook/runner.js";
|
|
3319
3319
|
import { DEFAULT_FAILURE_THRESHOLD, runFleetPlaybook } from "../lib/playbook/fleet.js";
|
|
3320
3320
|
import { uploadFleetRunReport } from "../lib/product.js";
|
|
3321
|
-
import { readConfig } from "
|
|
3321
|
+
import { readConfig } from "@thinger-io/cli-core/config";
|
|
3322
3322
|
var DEFAULT_BATCH_SIZE = 5;
|
|
3323
3323
|
function usePlaybookRunController() {
|
|
3324
3324
|
const [state, setState] = useState9({ phase: "idle" });
|
|
@@ -3686,7 +3686,7 @@ function buildRunReport({
|
|
|
3686
3686
|
}
|
|
3687
3687
|
|
|
3688
3688
|
// src/dashboard/components/PlaybooksTab.jsx
|
|
3689
|
-
import { filterActiveDevices } from "
|
|
3689
|
+
import { filterActiveDevices } from "@thinger-io/cli-core/devices";
|
|
3690
3690
|
import { Fragment as Fragment5, jsx as jsx15, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3691
3691
|
var PANELS = ["list", "detail", "reports"];
|
|
3692
3692
|
function PlaybookList({ playbooks, loading, error, selectedIdx, focused }) {
|
|
@@ -4246,7 +4246,7 @@ function ProfilePickerModal({ profiles, active, onSelect, onCancel }) {
|
|
|
4246
4246
|
|
|
4247
4247
|
// src/dashboard/hooks/useDevices.js
|
|
4248
4248
|
import { useEffect as useEffect9, useState as useState12 } from "react";
|
|
4249
|
-
import { getDevices } from "
|
|
4249
|
+
import { getDevices } from "@thinger-io/cli-core/devices";
|
|
4250
4250
|
import { debugCount as debugCount2, debugLog as debugLog3 } from "../lib/debug-log.js";
|
|
4251
4251
|
function useDevices({ pollMs = 6e4 } = {}) {
|
|
4252
4252
|
const [devices, setDevices] = useState12([]);
|
|
@@ -4522,7 +4522,7 @@ function useFleetMonitoringStream(devices) {
|
|
|
4522
4522
|
|
|
4523
4523
|
// src/dashboard/hooks/useFleetAlarms.js
|
|
4524
4524
|
import { useEffect as useEffect11, useRef as useRef8, useState as useState14 } from "react";
|
|
4525
|
-
import { getAlarmInstances, ALARM_STATE as ALARM_STATE3 } from "
|
|
4525
|
+
import { getAlarmInstances, ALARM_STATE as ALARM_STATE3 } from "@thinger-io/cli-core/alarms";
|
|
4526
4526
|
import { eventStream as eventStream2 } from "../lib/dashboard/event-stream.js";
|
|
4527
4527
|
import { debugLog as debugLog5 } from "../lib/debug-log.js";
|
|
4528
4528
|
var ACTIVE_STATES = [
|
|
@@ -4677,7 +4677,7 @@ function useFleetAlarms() {
|
|
|
4677
4677
|
|
|
4678
4678
|
// src/dashboard/hooks/useFleetProducts.js
|
|
4679
4679
|
import { useEffect as useEffect12, useMemo as useMemo12, useState as useState15 } from "react";
|
|
4680
|
-
import { getProduct } from "
|
|
4680
|
+
import { getProduct } from "@thinger-io/cli-core/product";
|
|
4681
4681
|
import { debugLog as debugLog6 } from "../lib/debug-log.js";
|
|
4682
4682
|
function useFleetProducts(productIds) {
|
|
4683
4683
|
const idsKey = useMemo12(() => {
|
|
@@ -4787,7 +4787,7 @@ function useProductLogSources(productId) {
|
|
|
4787
4787
|
|
|
4788
4788
|
// src/dashboard/hooks/useProductMetrics.js
|
|
4789
4789
|
import { useEffect as useEffect14, useMemo as useMemo13, useState as useState17 } from "react";
|
|
4790
|
-
import { getProductProperty } from "
|
|
4790
|
+
import { getProductProperty } from "@thinger-io/cli-core/product";
|
|
4791
4791
|
import { debugCount as debugCount3, debugLog as debugLog8 } from "../lib/debug-log.js";
|
|
4792
4792
|
import { eventStream as eventStream3 } from "../lib/dashboard/event-stream.js";
|
|
4793
4793
|
import { aggregate, getPath } from "../lib/dashboard/metric-aggregate.js";
|
|
@@ -5559,7 +5559,7 @@ import {
|
|
|
5559
5559
|
listProfiles,
|
|
5560
5560
|
getActiveProfile,
|
|
5561
5561
|
setActiveProfile
|
|
5562
|
-
} from "
|
|
5562
|
+
} from "@thinger-io/cli-core/config";
|
|
5563
5563
|
import { connectToDeviceConsole } from "../lib/console.js";
|
|
5564
5564
|
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
5565
5565
|
var ENTER_ALT_SCREEN = "\x1B[?1049h";
|
|
@@ -5641,4 +5641,4 @@ Console error: ${err.message || err}
|
|
|
5641
5641
|
export {
|
|
5642
5642
|
run
|
|
5643
5643
|
};
|
|
5644
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2Rhc2hib2FyZC9pbmRleC5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9BcHAuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvdGhlbWUuanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0hlYWRlci5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0Zvb3Rlci5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0RldmljZXNQYW5lbC5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL1BhbmVsLmpzeCIsICIuLi9zcmMvZGFzaGJvYXJkL2NvbXBvbmVudHMvU3BhcmtsaW5lLmpzeCIsICIuLi9zcmMvZGFzaGJvYXJkL2xpYi9zdGF0dXMuanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0RldmljZURldGFpbFBhbmVsLmpzeCIsICIuLi9zcmMvZGFzaGJvYXJkL2hvb2tzL3VzZUxvZ3MuanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0RldmljZVBpY2tlck1vZGFsLmpzeCIsICIuLi9zcmMvZGFzaGJvYXJkL2xpYi9mb2N1cy5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2NvbXBvbmVudHMvT3ZlcnZpZXdUYWIuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9BbGVydHNUYWIuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9FdmVudHNUYWIuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9QbGF5Ym9va3NUYWIuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9QbGF5Ym9va1J1blZpZXcuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9QbGF5Ym9va1JlcG9ydFZpZXcuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9QbGF5Ym9va1ZhcnNNb2RhbC5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0NvbmZpcm1Nb2RhbC5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9ob29rcy91c2VQcm9kdWN0UGxheWJvb2tzLmpzIiwgIi4uL3NyYy9kYXNoYm9hcmQvaG9va3MvdXNlUGxheWJvb2tSdW5Db250cm9sbGVyLmpzIiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9Qcm9maWxlUGlja2VyTW9kYWwuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvaG9va3MvdXNlRGV2aWNlcy5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2hvb2tzL3VzZUZsZWV0TW9uaXRvcmluZ1N0cmVhbS5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2hvb2tzL3VzZUZsZWV0QWxhcm1zLmpzIiwgIi4uL3NyYy9kYXNoYm9hcmQvaG9va3MvdXNlRmxlZXRQcm9kdWN0cy5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2hvb2tzL3VzZVByb2R1Y3RMb2dTb3VyY2VzLmpzIiwgIi4uL3NyYy9kYXNoYm9hcmQvaG9va3MvdXNlUHJvZHVjdE1ldHJpY3MuanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9ob29rcy91c2VMYXRlc3RBZ2VudFZlcnNpb24uanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9ob29rcy91c2VVcGdyYWRlQ29udHJvbGxlci5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2NvbXBvbmVudHMvVXBncmFkZU1vZGFsLmpzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuL0FwcC5qc3gnO1xuaW1wb3J0IHtcbiAgICByZWFkQ29uZmlnLFxuICAgIGxpc3RQcm9maWxlcyxcbiAgICBnZXRBY3RpdmVQcm9maWxlLFxuICAgIHNldEFjdGl2ZVByb2ZpbGUsXG59IGZyb20gJy4uLy4uL2xpYi9jb25maWcuanMnO1xuaW1wb3J0IHsgY29ubmVjdFRvRGV2aWNlQ29uc29sZSB9IGZyb20gJy4uLy4uL2xpYi9jb25zb2xlLmpzJztcblxuY29uc3QgRU5URVJfQUxUX1NDUkVFTiA9ICdcXHgxYls/MTA0OWgnO1xuY29uc3QgTEVBVkVfQUxUX1NDUkVFTiA9ICdcXHgxYls/MTA0OWwnO1xuY29uc3QgSElERV9DVVJTT1IgPSAnXFx4MWJbPzI1bCc7XG5jb25zdCBTSE9XX0NVUlNPUiA9ICdcXHgxYls/MjVoJztcbi8vIENsZWFyIHNjcmVlbiArIHNjcm9sbGJhY2sgKyBob21lOiBzdGFydHMgdGhlIGNvbnNvbGUgc2Vzc2lvbiBvbiBhblxuLy8gZW1wdHkgY2FudmFzIHNvIGJhbm5lcnMgZnJvbSBwcmV2aW91cyBzZXNzaW9ucyBkb24ndCBwaWxlIHVwLlxuY29uc3QgQ0xFQVJfU0NSRUVOID0gJ1xceDFiWzJKXFx4MWJbM0pcXHgxYltIJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICBsZXQgY29uZmlnID0gcmVhZENvbmZpZygpO1xuICAgIGxldCBzZXJ2ZXIgPSBjb25maWc/LnNlcnZlciB8fCBudWxsO1xuICAgIGxldCBwcm9maWxlID0gZ2V0QWN0aXZlUHJvZmlsZSgpO1xuICAgIGxldCBwcm9maWxlcyA9IGxpc3RQcm9maWxlcygpO1xuXG4gICAgbGV0IGFsdFNjcmVlbkFjdGl2ZSA9IGZhbHNlO1xuICAgIGNvbnN0IGVudGVyQWx0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoYWx0U2NyZWVuQWN0aXZlKSByZXR1cm47XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEVOVEVSX0FMVF9TQ1JFRU4gKyBISURFX0NVUlNPUik7XG4gICAgICAgIGFsdFNjcmVlbkFjdGl2ZSA9IHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBsZWF2ZUFsdCA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFhbHRTY3JlZW5BY3RpdmUpIHJldHVybjtcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoU0hPV19DVVJTT1IgKyBMRUFWRV9BTFRfU0NSRUVOKTtcbiAgICAgICAgYWx0U2NyZWVuQWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIC8vIEJlbHQgYW5kIGJyYWNlczogcmVzdG9yZSBvbiBldmVyeSB3YXkgdGhlIHByb2Nlc3MgY2FuIGV4aXQsIHNvIHRoZVxuICAgIC8vIHVzZXIgbmV2ZXIgZW5kcyB1cCB3aXRoIGEgYmxhbmsgdGVybWluYWwgaWYgc29tZXRoaW5nIGdvZXMgc2lkZXdheXMuXG4gICAgY29uc3Qgb25FeGl0ID0gKCkgPT4gbGVhdmVBbHQoKTtcbiAgICBwcm9jZXNzLm9uKCdleGl0Jywgb25FeGl0KTtcbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBvbkV4aXQpO1xuICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBvbkV4aXQpO1xuICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgb25FeGl0KTtcblxuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgYWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIGVudGVyQWx0KCk7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHJlbmRlcihcbiAgICAgICAgICAgICAgICA8QXBwXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcj17c2VydmVyfVxuICAgICAgICAgICAgICAgICAgICBwcm9maWxlPXtwcm9maWxlfVxuICAgICAgICAgICAgICAgICAgICBwcm9maWxlcz17cHJvZmlsZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uQWN0aW9uPXsoYSkgPT4gKGFjdGlvbiA9IGEpfVxuICAgICAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgICAgIHsgZXhpdE9uQ3RybEM6IHRydWUgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBpbnN0YW5jZS53YWl0VW50aWxFeGl0KCk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24/LnR5cGUgPT09ICdjb25zb2xlJykge1xuICAgICAgICAgICAgICAgIGxlYXZlQWx0KCk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoQ0xFQVJfU0NSRUVOKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0VG9EZXZpY2VDb25zb2xlKGFjdGlvbi5kZXZpY2VJZCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBcXG5Db25zb2xlIGVycm9yOiAke2Vyci5tZXNzYWdlIHx8IGVycn1cXG5gKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTUwMCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShDTEVBUl9TQ1JFRU4pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbj8udHlwZSA9PT0gJ3Byb2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlUHJvZmlsZShhY3Rpb24ubmFtZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnID0gcmVhZENvbmZpZygpO1xuICAgICAgICAgICAgICAgIHNlcnZlciA9IGNvbmZpZz8uc2VydmVyIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgcHJvZmlsZSA9IGdldEFjdGl2ZVByb2ZpbGUoKTtcbiAgICAgICAgICAgICAgICBwcm9maWxlcyA9IGxpc3RQcm9maWxlcygpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKENMRUFSX1NDUkVFTik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxlYXZlQWx0KCk7XG4gICAgICAgIHByb2Nlc3Mub2ZmKCdleGl0Jywgb25FeGl0KTtcbiAgICAgICAgcHJvY2Vzcy5vZmYoJ1NJR0lOVCcsIG9uRXhpdCk7XG4gICAgICAgIHByb2Nlc3Mub2ZmKCdTSUdURVJNJywgb25FeGl0KTtcbiAgICAgICAgcHJvY2Vzcy5vZmYoJ3VuY2F1Z2h0RXhjZXB0aW9uJywgb25FeGl0KTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VBcHAsIHVzZVN0ZG91dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4vdGhlbWUuanMnO1xuaW1wb3J0IHsgSGVhZGVyLCBUQUJTIH0gZnJvbSAnLi9jb21wb25lbnRzL0hlYWRlci5qc3gnO1xuaW1wb3J0IHsgRm9vdGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL0Zvb3Rlci5qc3gnO1xuaW1wb3J0IHsgU09SVF9PUFRJT05TIH0gZnJvbSAnLi9jb21wb25lbnRzL0RldmljZXNQYW5lbC5qc3gnO1xuaW1wb3J0IHsgRGV2aWNlRGV0YWlsUGFuZWwgfSBmcm9tICcuL2NvbXBvbmVudHMvRGV2aWNlRGV0YWlsUGFuZWwuanN4JztcbmltcG9ydCB7IERldmljZVBpY2tlck1vZGFsIH0gZnJvbSAnLi9jb21wb25lbnRzL0RldmljZVBpY2tlck1vZGFsLmpzeCc7XG5pbXBvcnQgeyBPdmVydmlld1RhYiB9IGZyb20gJy4vY29tcG9uZW50cy9PdmVydmlld1RhYi5qc3gnO1xuaW1wb3J0IHsgQWxlcnRzVGFiIH0gZnJvbSAnLi9jb21wb25lbnRzL0FsZXJ0c1RhYi5qc3gnO1xuaW1wb3J0IHsgRXZlbnRzVGFiIH0gZnJvbSAnLi9jb21wb25lbnRzL0V2ZW50c1RhYi5qc3gnO1xuaW1wb3J0IHsgUGxheWJvb2tzVGFiIH0gZnJvbSAnLi9jb21wb25lbnRzL1BsYXlib29rc1RhYi5qc3gnO1xuaW1wb3J0IHsgUHJvZmlsZVBpY2tlck1vZGFsIH0gZnJvbSAnLi9jb21wb25lbnRzL1Byb2ZpbGVQaWNrZXJNb2RhbC5qc3gnO1xuaW1wb3J0IHsgdXNlRGV2aWNlcyB9IGZyb20gJy4vaG9va3MvdXNlRGV2aWNlcy5qcyc7XG5pbXBvcnQgeyB1c2VGbGVldE1vbml0b3JpbmdTdHJlYW0gfSBmcm9tICcuL2hvb2tzL3VzZUZsZWV0TW9uaXRvcmluZ1N0cmVhbS5qcyc7XG5pbXBvcnQgeyB1c2VGbGVldEFsYXJtcyB9IGZyb20gJy4vaG9va3MvdXNlRmxlZXRBbGFybXMuanMnO1xuaW1wb3J0IHsgdXNlRmxlZXRQcm9kdWN0cyB9IGZyb20gJy4vaG9va3MvdXNlRmxlZXRQcm9kdWN0cy5qcyc7XG5pbXBvcnQgeyB1c2VQcm9kdWN0TG9nU291cmNlcyB9IGZyb20gJy4vaG9va3MvdXNlUHJvZHVjdExvZ1NvdXJjZXMuanMnO1xuaW1wb3J0IHsgdXNlUHJvZHVjdE1ldHJpY3MgfSBmcm9tICcuL2hvb2tzL3VzZVByb2R1Y3RNZXRyaWNzLmpzJztcbmltcG9ydCB7IHVzZUxhdGVzdEFnZW50VmVyc2lvbiB9IGZyb20gJy4vaG9va3MvdXNlTGF0ZXN0QWdlbnRWZXJzaW9uLmpzJztcbmltcG9ydCB7IHVzZVVwZ3JhZGVDb250cm9sbGVyIH0gZnJvbSAnLi9ob29rcy91c2VVcGdyYWRlQ29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyBVcGdyYWRlTW9kYWwgfSBmcm9tICcuL2NvbXBvbmVudHMvVXBncmFkZU1vZGFsLmpzeCc7XG5pbXBvcnQgeyBmbGVldENvdW50cywgbWF4U2V2ZXJpdHlCeURldmljZSwgb3V0ZGF0ZWREZXZpY2VzIH0gZnJvbSAnLi9saWIvc3RhdHVzLmpzJztcbmltcG9ydCB7XG4gICAgRm9jdXNQcm92aWRlcixcbiAgICB1c2VGb2N1c2FibGUsXG4gICAgdXNlRm9jdXNIaW50cyxcbiAgICB1c2VHbG9iYWxLZXlzLFxuICAgIHVzZU1vZGFsLFxuICAgIHVzZVRhYkN5Y2xlLFxufSBmcm9tICcuL2xpYi9mb2N1cy5qcyc7XG5cbmNvbnN0IE1JTl9DT0xTID0gOTA7XG5jb25zdCBNSU5fUk9XUyA9IDE4O1xuXG4vLyBIaW50cyB0aGF0IGRvbid0IGJlbG9uZyB0byBhIHNpbmdsZSBwYW5lbCB3aXRoaW4gYSB0YWIuIFBlci1wYW5lbCBoaW50c1xuLy8gbGl2ZSB3aXRoIHRoZSBwYW5lbCB2aWEgdXNlRm9jdXNhYmxlLCBzbyB0aGlzIG1hcCBvbmx5IG5lZWRzIHRvIGNvdmVyXG4vLyBpbmZvLW9ubHkgdGFicyBhbmQgdGhlIGdsb2JhbCBiYXNlbGluZS5cbmNvbnN0IFNUQVRJQ19UQUJfSElOVFMgPSB7XG4gICAgYWxlcnRzOiBbXG4gICAgICAgIHsgazogJzEtNScsIGxhYmVsOiAndGFicycgfSxcbiAgICAgICAgeyBrOiAncScsIGxhYmVsOiAncXVpdCcgfSxcbiAgICBdLFxuICAgIGV2ZW50czogW1xuICAgICAgICB7IGs6ICcxLTUnLCBsYWJlbDogJ3RhYnMnIH0sXG4gICAgICAgIHsgazogJ3EnLCBsYWJlbDogJ3F1aXQnIH0sXG4gICAgXSxcbiAgICBwbGF5Ym9va3M6IFtcbiAgICAgICAgeyBrOiAnMS01JywgbGFiZWw6ICd0YWJzJyB9LFxuICAgICAgICB7IGs6ICdcdTIxOTFcdTIxOTMnLCBsYWJlbDogJ25hdicgfSxcbiAgICAgICAgeyBrOiAndGFiJywgbGFiZWw6ICdwYW5lbCcgfSxcbiAgICAgICAgeyBrOiAndCcsIGxhYmVsOiAndGVzdCcgfSxcbiAgICAgICAgeyBrOiAnYScsIGxhYmVsOiAnYXBwbHknIH0sXG4gICAgICAgIHsgazogJ3gnLCBsYWJlbDogJ2RlbGV0ZScgfSxcbiAgICAgICAgeyBrOiAncicsIGxhYmVsOiAncmVmcmVzaCcgfSxcbiAgICAgICAgeyBrOiAncCcsIGxhYmVsOiAncHJvZHVjdCcgfSxcbiAgICAgICAgeyBrOiAncScsIGxhYmVsOiAncXVpdCcgfSxcbiAgICBdLFxufTtcblxuY29uc3QgRklMVEVSX0hJTlQgPSBbXG4gICAgeyBrOiAnZW50ZXInLCBsYWJlbDogJ2FwcGx5JyB9LFxuICAgIHsgazogJ2VzYycsIGxhYmVsOiAnY2FuY2VsJyB9LFxuXTtcblxuY29uc3QgREVWSUNFU19ERVRBSUxfSElOVF9CQVNFID0gW1xuICAgIHsgazogJzEtNScsIGxhYmVsOiAndGFicycgfSxcbiAgICB7IGs6ICcvJywgbGFiZWw6ICdzd2l0Y2gnIH0sXG4gICAgeyBrOiAncCcsIGxhYmVsOiAncGF1c2UnIH0sXG4gICAgeyBrOiAnYycsIGxhYmVsOiAnY2xlYXInIH0sXG5dO1xuY29uc3QgREVWSUNFU19ERVRBSUxfSElOVF9UQUlMID0gW1xuICAgIHsgazogJ2VudGVyJywgbGFiZWw6ICdjb25zb2xlJyB9LFxuICAgIHsgazogJ3EnLCBsYWJlbDogJ3F1aXQnIH0sXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gQXBwKHsgc2VydmVyLCBwcm9maWxlLCBwcm9maWxlcywgb25BY3Rpb24gfSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxGb2N1c1Byb3ZpZGVyPlxuICAgICAgICAgICAgPEFwcElubmVyXG4gICAgICAgICAgICAgICAgc2VydmVyPXtzZXJ2ZXJ9XG4gICAgICAgICAgICAgICAgcHJvZmlsZT17cHJvZmlsZX1cbiAgICAgICAgICAgICAgICBwcm9maWxlcz17cHJvZmlsZXN9XG4gICAgICAgICAgICAgICAgb25BY3Rpb249e29uQWN0aW9ufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9Gb2N1c1Byb3ZpZGVyPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIEFwcElubmVyKHsgc2VydmVyLCBwcm9maWxlLCBwcm9maWxlcywgb25BY3Rpb24gfSkge1xuICAgIGNvbnN0IHsgZXhpdCB9ID0gdXNlQXBwKCk7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHVzZVN0ZG91dCgpO1xuICAgIGNvbnN0IFt0YWIsIHNldFRhYl0gPSB1c2VTdGF0ZSgnb3ZlcnZpZXcnKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRJZCwgc2V0U2VsZWN0ZWRJZF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbc29ydCwgc2V0U29ydF0gPSB1c2VTdGF0ZSgnc3RhdHVzJyk7XG4gICAgY29uc3QgW2ZpbHRlciwgc2V0RmlsdGVyXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbZmlsdGVyaW5nLCBzZXRGaWx0ZXJpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtwYXVzZWQsIHNldFBhdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgLy8gQWN0aXZlIGRpc3RyaWJ1dGlvbi1idWNrZXQgZmlsdGVyIG9uIHRoZSBkZXZpY2VzIGxpc3QuIE93bmVkIGF0XG4gICAgLy8gdGhlIEFwcCBsZXZlbCBzbyB0aGUgcGFuZWwgdGhhdCBlbWl0cyBpdCAoYSBmb2N1c2FibGUgaW5cbiAgICAvLyBPdmVydmlld1RhYikgYW5kIHRoZSBwYW5lbCB0aGF0IGNvbnN1bWVzIGl0IChEZXZpY2VzUGFuZWwpIGRvbid0XG4gICAgLy8gbmVlZCB0byBzaGFyZSBhIHNpYmxpbmcgcmVmZXJlbmNlLlxuICAgIGNvbnN0IFttZXRyaWNGaWx0ZXIsIHNldE1ldHJpY0ZpbHRlcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBoYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2UgPSB1c2VDYWxsYmFjaygocGF5bG9hZCwgY2xlYXJlZEtleSkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQSBwYW5lbCBzaWduYWxlZCBpdCBzdG9wcGVkIG93bmluZyB0aGUgZmlsdGVyLiBPbmx5IGNsZWFyXG4gICAgICAgICAgICAvLyBpZiB3ZSBzdGlsbCBob2xkIGl0cyBidWNrZXQgXHUyMDE0IGEgc2libGluZyBtYXkgaGF2ZSBhbHJlYWR5XG4gICAgICAgICAgICAvLyB0YWtlbiBvdmVyIGFuZCB3ZSBkb24ndCB3YW50IHRvIHdpcGUgdGhlaXIgc2VsZWN0aW9uLlxuICAgICAgICAgICAgc2V0TWV0cmljRmlsdGVyKChjdXIpID0+XG4gICAgICAgICAgICAgICAgY3VyICYmIGN1ci5tZXRyaWNLZXkgPT09IGNsZWFyZWRLZXkgPyBudWxsIDogY3VyLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRNZXRyaWNGaWx0ZXIocGF5bG9hZCk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IFtsb2dzQ2xlYXJUb2tlbiwgc2V0TG9nc0NsZWFyVG9rZW5dID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW3BsYXlib29rTW9kYWxBY3RpdmUsIHNldFBsYXlib29rTW9kYWxBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtkZXZpY2VQaWNrZXJPcGVuLCBzZXREZXZpY2VQaWNrZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbcHJvZmlsZVBpY2tlck9wZW4sIHNldFByb2ZpbGVQaWNrZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBwcm9maWxlTGlzdCA9IHByb2ZpbGVzIHx8IFtdO1xuICAgIGNvbnN0IG11bHRpcGxlUHJvZmlsZXMgPSBwcm9maWxlTGlzdC5sZW5ndGggPiAxO1xuICAgIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IHVzZVN0YXRlKCgpID0+ICh7XG4gICAgICAgIGNvbHM6IHN0ZG91dD8uY29sdW1ucyA/PyA4MCxcbiAgICAgICAgcm93czogc3Rkb3V0Py5yb3dzID8/IDI0LFxuICAgIH0pKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghc3Rkb3V0KSByZXR1cm47XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+XG4gICAgICAgICAgICBzZXRTaXplKHsgY29sczogc3Rkb3V0LmNvbHVtbnMsIHJvd3M6IHN0ZG91dC5yb3dzIH0pO1xuICAgICAgICBjb25zdCB0ID0gc2V0VGltZW91dCh1cGRhdGUsIDMwKTtcbiAgICAgICAgc3Rkb3V0Lm9uKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHQpO1xuICAgICAgICAgICAgc3Rkb3V0Lm9mZigncmVzaXplJywgdXBkYXRlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbc3Rkb3V0XSk7XG5cbiAgICBjb25zdCB7IGRldmljZXMsIGxvYWRpbmcsIGVycm9yIH0gPSB1c2VEZXZpY2VzKCk7XG4gICAgY29uc3QgeyBzYW1wbGVzLCBoaXN0b3J5LCBjcHVIaXN0b3J5LCBldmVudHMsIHB1c2hFdmVudCB9ID0gdXNlRmxlZXRNb25pdG9yaW5nU3RyZWFtKGRldmljZXMpO1xuICAgIGNvbnN0IGFsYXJtcyA9IHVzZUZsZWV0QWxhcm1zKCk7XG4gICAgY29uc3QgZmxlZXRQcm9kdWN0SWRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCBkIG9mIGRldmljZXMpIHtcbiAgICAgICAgICAgIGlmIChkPy5wcm9kdWN0KSBzZXQuYWRkKGQucHJvZHVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5zZXRdO1xuICAgIH0sIFtkZXZpY2VzXSk7XG4gICAgY29uc3QgZmxlZXRQcm9kdWN0cyA9IHVzZUZsZWV0UHJvZHVjdHMoZmxlZXRQcm9kdWN0SWRzKTtcbiAgICBjb25zdCBwcm9kdWN0TWV0cmljcyA9IHVzZVByb2R1Y3RNZXRyaWNzKGZsZWV0UHJvZHVjdElkcyk7XG4gICAgY29uc3QgeyBsYXRlc3Q6IGxhdGVzdEFnZW50VmVyc2lvbiB9ID0gdXNlTGF0ZXN0QWdlbnRWZXJzaW9uKCk7XG4gICAgY29uc3QgdXBncmFkZSA9IHVzZVVwZ3JhZGVDb250cm9sbGVyKHsgb25FdmVudDogcHVzaEV2ZW50IH0pO1xuICAgIGNvbnN0IGFsYXJtU2V2ZXJpdHlCeURldmljZSA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IG1heFNldmVyaXR5QnlEZXZpY2UoYWxhcm1zLmluc3RhbmNlcywgZGV2aWNlcyksXG4gICAgICAgIFthbGFybXMuaW5zdGFuY2VzLCBkZXZpY2VzXSxcbiAgICApO1xuICAgIGNvbnN0IGNvdW50cyA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IGZsZWV0Q291bnRzKGRldmljZXMsIGFsYXJtU2V2ZXJpdHlCeURldmljZSksXG4gICAgICAgIFtkZXZpY2VzLCBhbGFybVNldmVyaXR5QnlEZXZpY2VdLFxuICAgICk7XG4gICAgY29uc3Qgb3V0ZGF0ZWQgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgbGF0ZXN0QWdlbnRWZXJzaW9uID8gb3V0ZGF0ZWREZXZpY2VzKGRldmljZXMsIHNhbXBsZXMsIGxhdGVzdEFnZW50VmVyc2lvbikgOiBbXSxcbiAgICAgICAgW2RldmljZXMsIHNhbXBsZXMsIGxhdGVzdEFnZW50VmVyc2lvbl0sXG4gICAgKTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGRldmljZXMuZmluZCgoZCkgPT4gZC5kZXZpY2UgPT09IHNlbGVjdGVkSWQpO1xuICAgIGNvbnN0IHNlbGVjdGVkT25saW5lID0gISFzZWxlY3RlZD8uY29ubmVjdGlvbj8uYWN0aXZlO1xuICAgIGNvbnN0IHNlbGVjdGVkUHJvZHVjdElkID0gc2VsZWN0ZWQ/LnByb2R1Y3QgfHwgbnVsbDtcbiAgICBjb25zdCBsb2dTb3VyY2VzID0gdXNlUHJvZHVjdExvZ1NvdXJjZXMoc2VsZWN0ZWRQcm9kdWN0SWQpO1xuICAgIGNvbnN0IFthY3RpdmVTb3VyY2VOYW1lLCBzZXRBY3RpdmVTb3VyY2VOYW1lXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgLy8gUmVzZXQgdGhlIGFjdGl2ZSBzb3VyY2Ugd2hlbmV2ZXIgdGhlIHNlbGVjdGVkIGRldmljZSBvciBwcm9kdWN0XG4gICAgLy8gY2hhbmdlcywgb3Igd2hlbiB0aGUgc291cmNlcyBmaW5pc2ggbG9hZGluZy4gS2VlcCB0aGUgY3VycmVudFxuICAgIC8vIHNlbGVjdGlvbiBpZiBpdCBzdGlsbCBleGlzdHMgaW4gdGhlIG5ldyBsaXN0IFx1MjAxNCB0aGF0IHdheSBjeWNsaW5nXG4gICAgLy8gc291cmNlcyBpc24ndCBpbnRlcnJ1cHRlZCBieSBhbiB1bnJlbGF0ZWQgcmUtcmVuZGVyLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChsb2dTb3VyY2VzLmxvYWRpbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgbGlzdCA9IGxvZ1NvdXJjZXMuc291cmNlcztcbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVTb3VyY2VOYW1lKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEFjdGl2ZVNvdXJjZU5hbWUoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmV2ICYmIGxpc3Quc29tZSgocykgPT4gcy5uYW1lID09PSBwcmV2KSkgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICByZXR1cm4gbG9nU291cmNlcy5kZWZhdWx0IHx8IGxpc3RbMF0ubmFtZTtcbiAgICAgICAgfSk7XG4gICAgfSwgW3NlbGVjdGVkSWQsIHNlbGVjdGVkUHJvZHVjdElkLCBsb2dTb3VyY2VzLmxvYWRpbmcsIGxvZ1NvdXJjZXMuc291cmNlcywgbG9nU291cmNlcy5kZWZhdWx0XSk7XG5cbiAgICBjb25zdCBhY3RpdmVTb3VyY2VJbmRleCA9IGFjdGl2ZVNvdXJjZU5hbWVcbiAgICAgICAgPyBsb2dTb3VyY2VzLnNvdXJjZXMuZmluZEluZGV4KChzKSA9PiBzLm5hbWUgPT09IGFjdGl2ZVNvdXJjZU5hbWUpXG4gICAgICAgIDogLTE7XG4gICAgY29uc3QgYWN0aXZlU291cmNlID0gYWN0aXZlU291cmNlSW5kZXggPj0gMCA/IGxvZ1NvdXJjZXMuc291cmNlc1thY3RpdmVTb3VyY2VJbmRleF0gOiBudWxsO1xuICAgIGNvbnN0IHNvdXJjZUNvdW50ID0gbG9nU291cmNlcy5zb3VyY2VzLmxlbmd0aDtcblxuICAgIGNvbnN0IGN5Y2xlTG9nU291cmNlID0gKCkgPT4ge1xuICAgICAgICBpZiAoc291cmNlQ291bnQgPD0gMSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpID0gYWN0aXZlU291cmNlSW5kZXggPj0gMCA/IGFjdGl2ZVNvdXJjZUluZGV4IDogMDtcbiAgICAgICAgY29uc3QgbmV4dCA9IGxvZ1NvdXJjZXMuc291cmNlc1soaSArIDEpICUgc291cmNlQ291bnRdO1xuICAgICAgICBzZXRBY3RpdmVTb3VyY2VOYW1lKG5leHQubmFtZSk7XG4gICAgICAgIHNldExvZ3NDbGVhclRva2VuKChuKSA9PiBuICsgMSk7XG4gICAgfTtcblxuICAgIC8vIExldmVsIGZpbHRlciBmb3IgdGhlIGxvZyBwYW5lbC4gQ3ljbGVzIGBhbGwgXHUyMTkyIGluZm8gXHUyMTkyIHdhcm4gXHUyMTkyIGVycm9yYDtcbiAgICAvLyBkaXNhYmxlZCAoYW5kIHJlc2V0IHRvIGBhbGxgKSB3aGVuIHRoZSBhY3RpdmUgc291cmNlIGhhcyBub1xuICAgIC8vIHBhdHRlcm4sIHNpbmNlIHdpdGhvdXQgYSBjYXB0dXJlZCBgbGV2ZWxgIHdlIGhhdmUgbm90aGluZyB0b1xuICAgIC8vIGNvbXBhcmUuIExpbmVzIHdpdGhvdXQgYSBjYXB0dXJlZCBsZXZlbCBhbHdheXMgcGFzcyBcdTIwMTQgd2UgZG9uJ3RcbiAgICAvLyBoaWRlIHdoYXQgd2UgY2FuJ3QgY2xhc3NpZnkuXG4gICAgY29uc3QgW2xldmVsRmlsdGVyLCBzZXRMZXZlbEZpbHRlcl0gPSB1c2VTdGF0ZSgnYWxsJyk7XG4gICAgY29uc3QgYWN0aXZlUGF0dGVybiA9IGFjdGl2ZVNvdXJjZT8ucmVzb2x2ZWRQYXR0ZXJuIHx8IG51bGw7XG4gICAgLy8gSGV1cmlzdGljOiBhIHJlZ2V4IHRoYXQgbmFtZXMgYSBgbGV2ZWxgIGNhcHR1cmUgZ3JvdXAgaGFzIGFcbiAgICAvLyBgKD88bGV2ZWw+YCBzdWJzdHJpbmcuIENoZWFwLCBjb3JyZWN0IGZvciBhbnkgcmVnZXggd2UnbGwgc2hpcFxuICAgIC8vIGFuZCBhbnkgb3BlcmF0b3Itc3VwcGxpZWQgcGF0dGVybi5cbiAgICBjb25zdCBmaWx0ZXJFbmFibGVkID0gISEoYWN0aXZlUGF0dGVybiAmJiAvXFwoXFw/PGxldmVsPi8udGVzdChhY3RpdmVQYXR0ZXJuKSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFmaWx0ZXJFbmFibGVkICYmIGxldmVsRmlsdGVyICE9PSAnYWxsJykgc2V0TGV2ZWxGaWx0ZXIoJ2FsbCcpO1xuICAgIH0sIFtmaWx0ZXJFbmFibGVkLCBsZXZlbEZpbHRlcl0pO1xuICAgIGNvbnN0IGN5Y2xlTGV2ZWxGaWx0ZXIgPSAoKSA9PiB7XG4gICAgICAgIGlmICghZmlsdGVyRW5hYmxlZCkgcmV0dXJuO1xuICAgICAgICBzZXRMZXZlbEZpbHRlcigoY3VyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmRlciA9IFsnYWxsJywgJ2luZm8nLCAnd2FybicsICdlcnJvciddO1xuICAgICAgICAgICAgY29uc3QgaSA9IG9yZGVyLmluZGV4T2YoY3VyKTtcbiAgICAgICAgICAgIHJldHVybiBvcmRlclsoaSArIDEpICUgb3JkZXIubGVuZ3RoXTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRldmljZXNEZXRhaWxIaW50ID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gW1xuICAgICAgICAgICAgLi4uREVWSUNFU19ERVRBSUxfSElOVF9CQVNFLFxuICAgICAgICAgICAgLi4uKHNvdXJjZUNvdW50ID4gMSA/IFt7IGs6ICdsJywgbGFiZWw6ICdsb2cgc3JjJyB9XSA6IFtdKSxcbiAgICAgICAgICAgIC4uLihmaWx0ZXJFbmFibGVkID8gW3sgazogJ2YnLCBsYWJlbDogJ2xldmVsJyB9XSA6IFtdKSxcbiAgICAgICAgICAgIC4uLkRFVklDRVNfREVUQUlMX0hJTlRfVEFJTCxcbiAgICAgICAgXSxcbiAgICAgICAgW3NvdXJjZUNvdW50LCBmaWx0ZXJFbmFibGVkXSxcbiAgICApO1xuXG4gICAgLy8gVG9wLWxldmVsIHRhYiByb3V0aW5nICsgcXVpdC4gWWllbGRzIHRvIGFueSBtb2RhbCBvbiB0aGUgc3RhY2sgc29cbiAgICAvLyBgMS01YCBhbmQgYHFgIGRvbid0IGVzY2FwZSBmaWx0ZXIgbW9kZSBvciBtb2RhbHMgdW5leHBlY3RlZGx5LlxuICAgIHVzZUdsb2JhbEtleXMoXG4gICAgICAgIChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWJIaXQgPSBUQUJTLmZpbmQoKHQpID0+IHQua2V5ID09PSBpbnB1dCk7XG4gICAgICAgICAgICBpZiAodGFiSGl0KSB7XG4gICAgICAgICAgICAgICAgc2V0VGFiKHRhYkhpdC5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAncScgfHwgKGtleS5jdHJsICYmIGlucHV0ID09PSAnYycpKSBleGl0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgd2hlbjogIXBsYXlib29rTW9kYWxBY3RpdmUgfSxcbiAgICApO1xuXG4gICAgdXNlR2xvYmFsS2V5cyhcbiAgICAgICAgKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICdwJykgc2V0UHJvZmlsZVBpY2tlck9wZW4odHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgd2hlbjogdGFiID09PSAnb3ZlcnZpZXcnICYmIG11bHRpcGxlUHJvZmlsZXMgJiYgIXBsYXlib29rTW9kYWxBY3RpdmUgfSxcbiAgICApO1xuXG4gICAgLy8gRmlsdGVyIG1vZGU6IHdoaWxlIGFjdGl2ZSwgbW9kYWwgb3ducyBpbnB1dCBhbmQgc2hvd3MgaXRzIG93biBoaW50cy5cbiAgICB1c2VNb2RhbChcbiAgICAgICAgKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkuZXNjYXBlKSB7XG4gICAgICAgICAgICAgICAgc2V0RmlsdGVyKCcnKTtcbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXJpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuIHx8IGtleS5kb3duQXJyb3cgfHwga2V5LnVwQXJyb3cpIHtcbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXJpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkuYmFja3NwYWNlIHx8IGtleS5kZWxldGUpIHtcbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXIoKGYpID0+IGYuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgJiYgIWtleS5jdHJsICYmICFrZXkubWV0YSAmJiBpbnB1dC5sZW5ndGggPT09IDEgJiYgaW5wdXQgPj0gJyAnKSB7XG4gICAgICAgICAgICAgICAgc2V0RmlsdGVyKChmKSA9PiBmICsgaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IHdoZW46IGZpbHRlcmluZywgaGludDogRklMVEVSX0hJTlQgfSxcbiAgICApO1xuXG4gICAgLy8gVGFiIGN5Y2xlICsgcGVyLXBhbmVsIGZvY3VzYWJsZSBoYW5kbGVycyBmb3IgdGhlIGRldmljZXMtZGV0YWlsIHRhYi5cbiAgICB1c2VUYWJDeWNsZSgnZGV2aWNlcycsIHsgd2hlbjogdGFiID09PSAnZGV2aWNlcycgfSk7XG4gICAgdXNlRm9jdXNhYmxlKHtcbiAgICAgICAgaWQ6ICdkZXZpY2VzLWRldGFpbCcsXG4gICAgICAgIHBhcmVudDogJ2RldmljZXMnLFxuICAgICAgICB3aGVuOiB0YWIgPT09ICdkZXZpY2VzJyxcbiAgICAgICAgaGludDogZGV2aWNlc0RldGFpbEhpbnQsXG4gICAgICAgIGhhbmRsZXJzOiAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICBzZXREZXZpY2VQaWNrZXJPcGVuKHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuICYmIHNlbGVjdGVkICYmIHNlbGVjdGVkT25saW5lKSB7XG4gICAgICAgICAgICAgICAgb25BY3Rpb24/Lih7IHR5cGU6ICdjb25zb2xlJywgZGV2aWNlSWQ6IHNlbGVjdGVkLmRldmljZSB9KTtcbiAgICAgICAgICAgICAgICBleGl0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAncCcpIHNldFBhdXNlZCgocCkgPT4gIXApO1xuICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXQgPT09ICdjJykgc2V0TG9nc0NsZWFyVG9rZW4oKG4pID0+IG4gKyAxKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0ID09PSAnbCcpIGN5Y2xlTG9nU291cmNlKCk7XG4gICAgICAgICAgICBlbHNlIGlmIChpbnB1dCA9PT0gJ2YnKSBjeWNsZUxldmVsRmlsdGVyKCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBvdmVydmlld0hpbnRzID0gdXNlRm9jdXNIaW50cygnb3ZlcnZpZXcnKTtcbiAgICBjb25zdCBkZXZpY2VzSGludHMgPSB1c2VGb2N1c0hpbnRzKCdkZXZpY2VzJyk7XG4gICAgY29uc3QgZm9vdGVySGludHMgPVxuICAgICAgICB0YWIgPT09ICdvdmVydmlldydcbiAgICAgICAgICAgID8gb3ZlcnZpZXdIaW50c1xuICAgICAgICAgICAgOiB0YWIgPT09ICdkZXZpY2VzJ1xuICAgICAgICAgICAgICA/IGRldmljZXNIaW50c1xuICAgICAgICAgICAgICA6IFNUQVRJQ19UQUJfSElOVFNbdGFiXSB8fCBbXTtcblxuICAgIGlmIChzaXplLmNvbHMgPCBNSU5fQ09MUyB8fCBzaXplLnJvd3MgPCBNSU5fUk9XUykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgIHdpZHRoPXtzaXplLmNvbHN9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXtzaXplLnJvd3N9XG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS53YXJufT50ZXJtaW5hbCB0b28gc21hbGw8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLm11dGVkfT5cbiAgICAgICAgICAgICAgICAgICAgbmVlZCBhdCBsZWFzdCB7TUlOX0NPTFN9XHUwMEQ3e01JTl9ST1dTfSAoe3NpemUuY29sc31cdTAwRDd7c2l6ZS5yb3dzfSlcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiB3aWR0aD17c2l6ZS5jb2xzfSBoZWlnaHQ9e3NpemUucm93c30+XG4gICAgICAgICAgICA8SGVhZGVyXG4gICAgICAgICAgICAgICAgdGFiPXt0YWJ9XG4gICAgICAgICAgICAgICAgb25UYWI9e3NldFRhYn1cbiAgICAgICAgICAgICAgICBjb3VudHM9e2NvdW50c31cbiAgICAgICAgICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgICAgICAgICBwcm9maWxlPXtwcm9maWxlfVxuICAgICAgICAgICAgICAgIG11bHRpcGxlUHJvZmlsZXM9e211bHRpcGxlUHJvZmlsZXN9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICB7dGFiID09PSAnZGV2aWNlcycgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPERldmljZURldGFpbFBhbmVsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2U9e3NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlPXtzZWxlY3RlZCA/IHNhbXBsZXNbc2VsZWN0ZWQuZGV2aWNlXSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGFybVNldmVyaXR5PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA/IGFsYXJtU2V2ZXJpdHlCeURldmljZS5nZXQoc2VsZWN0ZWQuZGV2aWNlKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VkPXtwYXVzZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRva2VuPXtsb2dzQ2xlYXJUb2tlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1NvdXJjZXM9e2xvZ1NvdXJjZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVTb3VyY2U9e2FjdGl2ZVNvdXJjZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVNvdXJjZUluZGV4PXthY3RpdmVTb3VyY2VJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsRmlsdGVyPXtsZXZlbEZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckVuYWJsZWQ9e2ZpbHRlckVuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7dGFiID09PSAnb3ZlcnZpZXcnICYmIChcbiAgICAgICAgICAgICAgICA8T3ZlcnZpZXdUYWJcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlcz17ZGV2aWNlc31cbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcz17c2FtcGxlc31cbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeT17aGlzdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgY3B1SGlzdG9yeT17Y3B1SGlzdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzPXtldmVudHN9XG4gICAgICAgICAgICAgICAgICAgIGFsYXJtcz17YWxhcm1zfVxuICAgICAgICAgICAgICAgICAgICBhbGFybVNldmVyaXR5QnlEZXZpY2U9e2FsYXJtU2V2ZXJpdHlCeURldmljZX1cbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdE1ldHJpY3M9e3Byb2R1Y3RNZXRyaWNzfVxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SW5mbz17ZmxlZXRQcm9kdWN0c31cbiAgICAgICAgICAgICAgICAgICAgbGF0ZXN0QWdlbnRWZXJzaW9uPXtsYXRlc3RBZ2VudFZlcnNpb259XG4gICAgICAgICAgICAgICAgICAgIG91dGRhdGVkQ291bnQ9e291dGRhdGVkLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgdXBncmFkZVN0YXRlPXt1cGdyYWRlLnN0YXRlfVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZElkPXtzZWxlY3RlZElkfVxuICAgICAgICAgICAgICAgICAgICBvblNlbGVjdERldmljZT17c2V0U2VsZWN0ZWRJZH1cbiAgICAgICAgICAgICAgICAgICAgc29ydD17c29ydH1cbiAgICAgICAgICAgICAgICAgICAgb25DeWNsZVNvcnQ9eygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTb3J0KChjdXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpID0gU09SVF9PUFRJT05TLmluZGV4T2YoY3VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU09SVF9PUFRJT05TWyhpICsgMSkgJSBTT1JUX09QVElPTlMubGVuZ3RoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyPXtmaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmluZz17ZmlsdGVyaW5nfVxuICAgICAgICAgICAgICAgICAgICBvblN0YXJ0RmlsdGVyPXsoKSA9PiBzZXRGaWx0ZXJpbmcodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybURldmljZT17KCkgPT4gc2V0VGFiKCdkZXZpY2VzJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uUmVxdWVzdFVwZ3JhZGU9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RBZ2VudFZlcnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRlZC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZS5zdGF0ZS5waGFzZSA9PT0gJ2lkbGUnXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlLm9wZW5Db25maXJtKGxhdGVzdEFnZW50VmVyc2lvbiwgb3V0ZGF0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VzTG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlc0Vycm9yPXtlcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgbWV0cmljRmlsdGVyPXttZXRyaWNGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIG9uTWV0cmljRmlsdGVyQ2hhbmdlPXtoYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHt1cGdyYWRlLnN0YXRlLnBoYXNlID09PSAnY29uZmlybWluZycgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249XCJhYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPXtzaXplLmNvbHN9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17c2l6ZS5yb3dzfVxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFVwZ3JhZGVNb2RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0ZWRDb3VudD17dXBncmFkZS5zdGF0ZS5vdXRkYXRlZENvdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PXt1cGdyYWRlLnN0YXRlLnRhcmdldH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybT17KG9wdHMpID0+IHVwZ3JhZGUuc3RhcnQob3B0cyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gdXBncmFkZS5jYW5jZWxDb25maXJtKCl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZGV2aWNlUGlja2VyT3BlbiAmJiAoXG4gICAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9e3NpemUuY29sc31cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXtzaXplLnJvd3N9XG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8RGV2aWNlUGlja2VyTW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiU1dJVENIIERFVklDRVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzPXtkZXZpY2VzfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9eyhkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJZChkLmRldmljZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGV2aWNlUGlja2VyT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHNldERldmljZVBpY2tlck9wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge3Byb2ZpbGVQaWNrZXJPcGVuICYmIChcbiAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD17c2l6ZS5jb2xzfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3NpemUucm93c31cbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxQcm9maWxlUGlja2VyTW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzPXtwcm9maWxlTGlzdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZT17cHJvZmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXsobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFByb2ZpbGVQaWNrZXJPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFjdGlvbj8uKHsgdHlwZTogJ3Byb2ZpbGUnLCBuYW1lIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0UHJvZmlsZVBpY2tlck9wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge3RhYiA9PT0gJ2FsZXJ0cycgJiYgPEFsZXJ0c1RhYiBhbGFybXM9e2FsYXJtc30gLz59XG5cbiAgICAgICAgICAgIHt0YWIgPT09ICdldmVudHMnICYmIDxFdmVudHNUYWIgZXZlbnRzPXtldmVudHN9IC8+fVxuXG4gICAgICAgICAgICB7dGFiID09PSAncGxheWJvb2tzJyAmJiAoXG4gICAgICAgICAgICAgICAgPFBsYXlib29rc1RhYlxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VzPXtkZXZpY2VzfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXt0YWIgPT09ICdwbGF5Ym9va3MnfVxuICAgICAgICAgICAgICAgICAgICBvbk1vZGFsQWN0aXZlQ2hhbmdlPXtzZXRQbGF5Ym9va01vZGFsQWN0aXZlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICA8Rm9vdGVyIGhpbnRzPXtmb290ZXJIaW50c30gcmlnaHQ9XCJ2MS4yLjAgXHUwMEI3IGFnZW50IG9rXCIgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICIvLyBQYWxldHRlIG1pcnJvcnMgdGhlIFRVSSByZWRlc2lnbiBtb2NrdXAuIEhleCB2YWx1ZXMgZ28gZGlyZWN0bHkgaW50byBJbmsnc1xuLy8gYGNvbG9yYCAvIGBib3JkZXJDb2xvcmAgcHJvcHMgXHUyMDE0IDI0LWJpdCB0cnVlY29sb3IgaW4gdGVybWluYWxzIHRoYXQgc3VwcG9ydCBpdC5cbmV4cG9ydCBjb25zdCB0aGVtZSA9IHtcbiAgICBmZzogJyNkN2RhZTUnLFxuICAgIGZnRGltOiAnIzdhODA5NScsXG4gICAgZmdGYWludDogJyM0YTUwNjMnLFxuXG4gICAgLy8gYGJvcmRlcmAgaXMgdGhlIHZpc2libGUgZGVmYXVsdCBmb3IgcGFuZWxzIGluIHRlcm1pbmFsIFx1MjAxNCB0aGUgdmVyeSBkYXJrXG4gICAgLy8gYCMxZjIyMzBgIGZyb20gdGhlIHdlYiBtb2NrdXAgZ2V0cyBjcnVzaGVkIGFnYWluc3QgdGhlIGFsdC1zY3JlZW5cbiAgICAvLyBiYWNrZ3JvdW5kLCBzbyB3ZSBwcm9tb3RlIGBib3JkZXJTdHJvbmdgIHRvIHRoZSBldmVyeWRheSBib3JkZXIgYW5kIGtlZXBcbiAgICAvLyB0aGUgZGltIHZhbHVlIGFzIGBib3JkZXJEaW1gIGZvciBpbm5lciBzZXBhcmF0b3JzLlxuICAgIGJvcmRlcjogJyMyYjJmNDInLFxuICAgIGJvcmRlckRpbTogJyMxZjIyMzAnLFxuICAgIGJvcmRlclN0cm9uZzogJyMzYTNmNTUnLFxuICAgIGJvcmRlckZvY3VzOiAnIzAwZTVmZicsXG5cbiAgICBhY2NlbnQ6ICcjMDBlNWZmJywgLy8gY3lhblxuICAgIG1hZ2VudGE6ICcjZmYyYmQ2JyxcbiAgICBsaW1lOiAnI2I2ZmYzYycsXG4gICAgYW1iZXI6ICcjZmZiMDIwJyxcbiAgICByZWQ6ICcjZmY0ZDZkJyxcbiAgICBncmVlbjogJyMyZmQ2N2EnLFxuXG4gICAgLy8gbGVnYWN5IGFsaWFzZXMga2VwdCBmb3IgZ3JhZHVhbCBtaWdyYXRpb25cbiAgICBtdXRlZDogJyM3YTgwOTUnLFxuICAgIGRpbTogJyM0YTUwNjMnLFxuICAgIG9rOiAnIzJmZDY3YScsXG4gICAgd2FybjogJyNmZmIwMjAnLFxuICAgIGVycjogJyNmZjRkNmQnLFxuXG4gICAgLy8gTW9kYWwgLyBvdmVybGF5IGZpbGwuIFNsaWdodGx5IGxpZ2h0ZXIgdGhhbiB0aGUgdGVybWluYWwgZGVmYXVsdCBzb1xuICAgIC8vIGZsb2F0aW5nIHBhbmVscyBzdGFuZCBvdXQgYWdhaW5zdCBhIGRhcmsgYmFja2dyb3VuZCwgYnV0IGRhcmsgZW5vdWdoXG4gICAgLy8gdGhhdCB0aGUgcGFsZXR0ZSAoYWNjZW50L2xpbWUvYW1iZXIpIGtlZXBzIHRoZSBzYW1lIGNvbnRyYXN0IGl0IGhhc1xuICAgIC8vIG9uIGJhcmUgdGVybWluYWwuIFRleHQgaW5zaWRlIGluaGVyaXRzIHZpYSBJbmsncyBCYWNrZ3JvdW5kQ29udGV4dC5cbiAgICBvdmVybGF5Qmc6ICcjMTQxODI2Jyxcbn07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcblxuY29uc3QgVEFCUyA9IFtcbiAgICB7IGlkOiAnb3ZlcnZpZXcnLCBsYWJlbDogJ292ZXJ2aWV3Jywga2V5OiAnMScgfSxcbiAgICB7IGlkOiAnZGV2aWNlcycsIGxhYmVsOiAnZGV2aWNlcycsIGtleTogJzInIH0sXG4gICAgeyBpZDogJ2FsZXJ0cycsIGxhYmVsOiAnYWxlcnRzJywga2V5OiAnMycgfSxcbiAgICB7IGlkOiAnZXZlbnRzJywgbGFiZWw6ICdldmVudHMnLCBrZXk6ICc0JyB9LFxuICAgIHsgaWQ6ICdwbGF5Ym9va3MnLCBsYWJlbDogJ3BsYXlib29rcycsIGtleTogJzUnIH0sXG5dO1xuXG5mdW5jdGlvbiBUYWIoeyBsYWJlbCwga2V5SGludCwgYWN0aXZlIH0pIHtcbiAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8VGV4dCBiYWNrZ3JvdW5kQ29sb3I9e3RoZW1lLmFjY2VudH0gY29sb3I9XCIjMGEwYjEwXCIgYm9sZD5cbiAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgIHtrZXlIaW50fSB7bGFiZWx9eycgJ31cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubWFnZW50YX0+e2tleUhpbnR9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4ge2xhYmVsfTwvVGV4dD5cbiAgICAgICAgPC9UZXh0PlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXIoeyB0YWIsIG9uVGFiLCBjb3VudHMsIHNlcnZlciwgcHJvZmlsZSwgbXVsdGlwbGVQcm9maWxlcyB9KSB7XG4gICAgY29uc3QgeyB0b3RhbCA9IDAsIG9ubGluZSA9IDAsIHdhcm4gPSAwLCBiYWQgPSAwIH0gPSBjb3VudHMgfHwge307XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveFxuICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj17dGhlbWUuYm9yZGVyfVxuICAgICAgICAgICAgcGFkZGluZ1g9ezF9XG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8Qm94IGdhcD17Mn0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgdGhpbnJcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAge1RBQlMubWFwKCh0LCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e3QuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2kgPT09IDAgJiYgPFRleHQgY29sb3I9e3RoZW1lLmJvcmRlcn0+XHUyNTAyPC9UZXh0Pn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWIgbGFiZWw9e3QubGFiZWx9IGtleUhpbnQ9e3Qua2V5fSBhY3RpdmU9e3RhYiA9PT0gdC5pZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCBnYXA9ezJ9PlxuICAgICAgICAgICAgICAgIHtwcm9maWxlICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+cHJvZmlsZSA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9maWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAge211bHRpcGxlUHJvZmlsZXMgJiYgdGFiID09PSAnb3ZlcnZpZXcnICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDBCNyA8VGV4dCBjb2xvcj17dGhlbWUubWFnZW50YX0+cDwvVGV4dD4gc3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge3NlcnZlciAmJiA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PntzZXJ2ZXJ9PC9UZXh0Pn1cbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmxpbWV9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7b25saW5lfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+IC8ge3RvdGFsfSBvbmxpbmU8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIHt3YXJuID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFtYmVyfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt3YXJufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gd2FybjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2JhZCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2JhZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+IGNyaXQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmV4cG9ydCB7IFRBQlMgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi4vdGhlbWUuanMnO1xuXG5mdW5jdGlvbiBLZXkoeyBrLCBsYWJlbCB9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubWFnZW50YX0+e2t9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4ge2xhYmVsfTwvVGV4dD5cbiAgICAgICAgPC9UZXh0PlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGb290ZXIoeyBoaW50cywgcmlnaHQgfSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggYm9yZGVyU3R5bGU9XCJzaW5nbGVcIiBib3JkZXJDb2xvcj17dGhlbWUuYm9yZGVyfSBwYWRkaW5nWD17MX0ganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8Qm94IGdhcD17Mn0+XG4gICAgICAgICAgICAgICAge2hpbnRzLm1hcCgoaCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8S2V5IGtleT17aX0gaz17aC5rfSBsYWJlbD17aC5sYWJlbH0gLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAge3JpZ2h0ICYmIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT57cmlnaHR9PC9UZXh0Pn1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCwgdXNlU3Rkb3V0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tICcuL1BhbmVsLmpzeCc7XG5pbXBvcnQgeyBTcGFya2xpbmUsIGNvbG9yRm9yUGN0IH0gZnJvbSAnLi9TcGFya2xpbmUuanN4JztcbmltcG9ydCB7IGRldmljZUhlYWx0aCB9IGZyb20gJy4uL2xpYi9zdGF0dXMuanMnO1xuaW1wb3J0IHsgZmlsdGVyRGV2aWNlc0J5TWV0cmljIH0gZnJvbSAnLi4vLi4vLi4vbGliL2Rhc2hib2FyZC9tZXRyaWMtZmlsdGVyLmpzJztcblxuY29uc3QgU09SVF9PUFRJT05TID0gWydzdGF0dXMnLCAnbmFtZScsICdjcHUnLCAnbWVtJywgJ2Rpc2snLCAndXAnXTtcblxuZnVuY3Rpb24gZG90Rm9yKGhlYWx0aCkge1xuICAgIGlmIChoZWFsdGggPT09ICdvbicpIHJldHVybiB7IGdseXBoOiAnXHUyNUNGJywgY29sb3I6IHRoZW1lLmxpbWUgfTtcbiAgICBpZiAoaGVhbHRoID09PSAnd2FybicpIHJldHVybiB7IGdseXBoOiAnXHUyNUIyJywgY29sb3I6IHRoZW1lLmFtYmVyIH07XG4gICAgaWYgKGhlYWx0aCA9PT0gJ2JhZCcpIHJldHVybiB7IGdseXBoOiAnXHUyNzE1JywgY29sb3I6IHRoZW1lLnJlZCB9O1xuICAgIHJldHVybiB7IGdseXBoOiAnXHUyNUNCJywgY29sb3I6IHRoZW1lLmZnRmFpbnQgfTtcbn1cblxuZnVuY3Rpb24gdXB0aW1lU2Vjb25kcyhzYW1wbGUpIHtcbiAgICBpZiAoIXNhbXBsZT8udXB0aW1lKSByZXR1cm4gMDtcbiAgICByZXR1cm4gTnVtYmVyKHNhbXBsZS51cHRpbWUpIHx8IDA7XG59XG5cbmZ1bmN0aW9uIGZtdE51bSh2YWx1ZSwgY29sb3IpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cdTIwMTQ8L1RleHQ+O1xuICAgIHJldHVybiA8VGV4dCBjb2xvcj17Y29sb3J9PntNYXRoLnJvdW5kKHZhbHVlKX08L1RleHQ+O1xufVxuXG5mdW5jdGlvbiBjb2xvclBjdChwLCB3YXJuID0gNzUsIGJhZCA9IDkwKSB7XG4gICAgaWYgKHAgPT0gbnVsbCkgcmV0dXJuIHRoZW1lLmZnRmFpbnQ7XG4gICAgaWYgKHAgPj0gYmFkKSByZXR1cm4gdGhlbWUucmVkO1xuICAgIGlmIChwID49IHdhcm4pIHJldHVybiB0aGVtZS5hbWJlcjtcbiAgICByZXR1cm4gdGhlbWUuZmc7XG59XG5cbi8vIEtlZXAgdGhlIHVwdGltZSBjb2x1bW4gdG8gYXQgbW9zdCA1IGNoYXJhY3RlcnMgc28gaXQgZml0cyB0aGUgaGVhZGVyXG4vLyB3aWR0aCB3aXRob3V0IHdyYXBwaW5nIGV2ZW4gb24gbG9uZy1saXZlZCBzZXJ2ZXJzICg4MDArIGRheXMpLiBBdFxuLy8gbXVsdGktZGF5IHNjYWxlIGhvdXJzIHN0b3AgYmVpbmcgaW5mb3JtYXRpdmUsIHNvIHdlIGRyb3AgdGhlbS5cbmZ1bmN0aW9uIGZtdFVwKHNlY29uZHMpIHtcbiAgICBpZiAoIXNlY29uZHMpIHJldHVybiAnXHUyMDE0JztcbiAgICBjb25zdCBkID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gODY0MDApO1xuICAgIGlmIChkID49IDEwKSByZXR1cm4gYCR7ZH1kYDtcbiAgICBjb25zdCBoID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApO1xuICAgIGlmIChkID4gMCkgcmV0dXJuIGAke2R9ZCR7aH1oYDtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDM2MDApIC8gNjApO1xuICAgIGlmIChoID4gMCkgcmV0dXJuIGAke2h9aCR7bX1tYDtcbiAgICByZXR1cm4gYCR7bX1tYDtcbn1cblxuZnVuY3Rpb24gSGVhZGVyQ2VsbCh7IGxhYmVsLCBzb3J0S2V5LCBjdXJyZW50U29ydCwgd2lkdGgsIGFsaWduID0gJ2xlZnQnIH0pIHtcbiAgICBjb25zdCBhY3RpdmUgPSBjdXJyZW50U29ydCA9PT0gc29ydEtleTtcbiAgICBjb25zdCBjb2xvciA9IGFjdGl2ZSA/IHRoZW1lLmFjY2VudCA6IHRoZW1lLmZnRmFpbnQ7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCB3aWR0aD17d2lkdGh9IGp1c3RpZnlDb250ZW50PXthbGlnbiA9PT0gJ3JpZ2h0JyA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCd9PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e2NvbG9yfT57bGFiZWx9PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGV2aWNlc1BhbmVsKHtcbiAgICBkZXZpY2VzLFxuICAgIHNhbXBsZXMsXG4gICAgY3B1SGlzdG9yeSxcbiAgICBhbGFybVNldmVyaXR5QnlEZXZpY2UsXG4gICAgbG9hZGluZyxcbiAgICBlcnJvcixcbiAgICBmb2N1c2VkLFxuICAgIHNlbGVjdGVkSWQsXG4gICAgb25TZWxlY3QsXG4gICAgc29ydCA9ICdzdGF0dXMnLFxuICAgIGZpbHRlciA9ICcnLFxuICAgIGZpbHRlcmluZyA9IGZhbHNlLFxuICAgIG1ldHJpY0ZpbHRlciA9IG51bGwsXG4gICAgdmFsdWVzQnlEZXZpY2UgPSBudWxsLFxufSkge1xuICAgIGNvbnN0IHNjb3BlZERldmljZXMgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiBmaWx0ZXJEZXZpY2VzQnlNZXRyaWMoZGV2aWNlcywgdmFsdWVzQnlEZXZpY2UsIG1ldHJpY0ZpbHRlciksXG4gICAgICAgIFtkZXZpY2VzLCB2YWx1ZXNCeURldmljZSwgbWV0cmljRmlsdGVyXSxcbiAgICApO1xuXG4gICAgY29uc3QgZW5yaWNoZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHNjb3BlZERldmljZXMubWFwKChkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYW1wbGUgPSBzYW1wbGVzPy5bZC5kZXZpY2VdO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkLFxuICAgICAgICAgICAgICAgIHNhbXBsZSxcbiAgICAgICAgICAgICAgICBoZWFsdGg6IGRldmljZUhlYWx0aChkLCBhbGFybVNldmVyaXR5QnlEZXZpY2U/LmdldChkLmRldmljZSkpLFxuICAgICAgICAgICAgICAgIGNwdTogc2FtcGxlPy5jcHU/LnVzYWdlID8/IG51bGwsXG4gICAgICAgICAgICAgICAgbWVtOiBzYW1wbGU/Lm1lbW9yeT8udXNhZ2UgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBkaXNrOiBzYW1wbGU/LmRpc2s/LnJvb3Q/LnVzYWdlID8/IG51bGwsXG4gICAgICAgICAgICAgICAgdXA6IHVwdGltZVNlY29uZHMoc2FtcGxlKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH0sIFtzY29wZWREZXZpY2VzLCBzYW1wbGVzLCBhbGFybVNldmVyaXR5QnlEZXZpY2VdKTtcblxuICAgIGNvbnN0IHNvcnRlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBvcmRlciA9IHsgYmFkOiAwLCB3YXJuOiAxLCBvbjogMiwgb2ZmOiAzIH07XG4gICAgICAgIGNvbnN0IGNvcHkgPSBbLi4uZW5yaWNoZWRdO1xuICAgICAgICBjb3B5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGlmIChzb3J0ID09PSAnbmFtZScpIHJldHVybiBhLmQuZGV2aWNlLmxvY2FsZUNvbXBhcmUoYi5kLmRldmljZSk7XG4gICAgICAgICAgICBpZiAoc29ydCA9PT0gJ2NwdScpIHJldHVybiAoYi5jcHUgPz8gLTEpIC0gKGEuY3B1ID8/IC0xKTtcbiAgICAgICAgICAgIGlmIChzb3J0ID09PSAnbWVtJykgcmV0dXJuIChiLm1lbSA/PyAtMSkgLSAoYS5tZW0gPz8gLTEpO1xuICAgICAgICAgICAgaWYgKHNvcnQgPT09ICdkaXNrJykgcmV0dXJuIChiLmRpc2sgPz8gLTEpIC0gKGEuZGlzayA/PyAtMSk7XG4gICAgICAgICAgICBpZiAoc29ydCA9PT0gJ3VwJykgcmV0dXJuIGIudXAgLSBhLnVwO1xuICAgICAgICAgICAgLy8gc3RhdHVzIChkZWZhdWx0KTogd29yc3QgZmlyc3QsIHRoZW4gbmFtZVxuICAgICAgICAgICAgY29uc3Qgb28gPSBvcmRlclthLmhlYWx0aF0gLSBvcmRlcltiLmhlYWx0aF07XG4gICAgICAgICAgICBpZiAob28gIT09IDApIHJldHVybiBvbztcbiAgICAgICAgICAgIHJldHVybiBhLmQuZGV2aWNlLmxvY2FsZUNvbXBhcmUoYi5kLmRldmljZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWZpbHRlcikgcmV0dXJuIGNvcHk7XG4gICAgICAgIGNvbnN0IG5lZWRsZSA9IGZpbHRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gY29weS5maWx0ZXIoXG4gICAgICAgICAgICAoZSkgPT5cbiAgICAgICAgICAgICAgICBlLmQuZGV2aWNlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmVlZGxlKSB8fFxuICAgICAgICAgICAgICAgIChlLmQubmFtZSAmJiBlLmQubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5lZWRsZSkpLFxuICAgICAgICApO1xuICAgIH0sIFtlbnJpY2hlZCwgc29ydCwgZmlsdGVyXSk7XG5cbiAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHNvcnRlZC5maW5kSW5kZXgoKGUpID0+IGUuZC5kZXZpY2UgPT09IHNlbGVjdGVkSWQpO1xuICAgICAgICByZXR1cm4gaWR4ID49IDAgPyBpZHggOiAwO1xuICAgIH0sIFtzb3J0ZWQsIHNlbGVjdGVkSWRdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzb3J0ZWQubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzb3J0ZWRbc2VsZWN0ZWRJbmRleF07XG4gICAgICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuICAgICAgICBpZiAoY3VycmVudC5kLmRldmljZSAhPT0gc2VsZWN0ZWRJZCkgb25TZWxlY3QoY3VycmVudC5kLmRldmljZSk7XG4gICAgfSwgW3NvcnRlZCwgc2VsZWN0ZWRJbmRleCwgc2VsZWN0ZWRJZCwgb25TZWxlY3RdKTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmb2N1c2VkIHx8IGZpbHRlcmluZyB8fCBzb3J0ZWQubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBsZXQgbmV4dCA9IHNlbGVjdGVkSW5kZXg7XG4gICAgICAgICAgICBpZiAoa2V5LnVwQXJyb3cgfHwgaW5wdXQgPT09ICdrJykgbmV4dCA9IE1hdGgubWF4KDAsIHNlbGVjdGVkSW5kZXggLSAxKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGtleS5kb3duQXJyb3cgfHwgaW5wdXQgPT09ICdqJylcbiAgICAgICAgICAgICAgICBuZXh0ID0gTWF0aC5taW4oc29ydGVkLmxlbmd0aCAtIDEsIHNlbGVjdGVkSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGtleS5wYWdlVXApIG5leHQgPSBNYXRoLm1heCgwLCBzZWxlY3RlZEluZGV4IC0gMTApO1xuICAgICAgICAgICAgZWxzZSBpZiAoa2V5LnBhZ2VEb3duKSBuZXh0ID0gTWF0aC5taW4oc29ydGVkLmxlbmd0aCAtIDEsIHNlbGVjdGVkSW5kZXggKyAxMCk7XG4gICAgICAgICAgICBlbHNlIGlmIChpbnB1dCA9PT0gJ2cnKSBuZXh0ID0gMDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0ID09PSAnRycpIG5leHQgPSBzb3J0ZWQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgICAgICAgb25TZWxlY3Qoc29ydGVkW25leHRdLmQuZGV2aWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpc0FjdGl2ZTogZm9jdXNlZCB9LFxuICAgICk7XG5cbiAgICBjb25zdCBpZFdpZHRoID0gc29ydGVkLnJlZHVjZSgodywgZSkgPT4gTWF0aC5tYXgodywgZS5kLmRldmljZS5sZW5ndGgpLCA4KTtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gdXNlU3Rkb3V0KCk7XG4gICAgLy8gSGVhZGVyICh+MykgKyBmb290ZXIgKH4zKSArIHBhbmVsIGJvcmRlciAoMikgKyB0aXRsZSByb3cgKyBtYXJnaW4gKDEpICtcbiAgICAvLyBwb3NzaWJsZSBvdmVyZmxvdyBpbmRpY2F0b3JzICgyKSArIGNvbHVtbiBoZWFkZXIgKDEpOiB0aGUgbGlzdCBpdHNlbGZcbiAgICAvLyBnZXRzIHRoZSByZXN0LlxuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IE1hdGgubWF4KDMsIChzdGRvdXQ/LnJvd3MgPz8gNDApIC0gMTIpO1xuXG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBsZXQgZW5kID0gc29ydGVkLmxlbmd0aDtcbiAgICBpZiAoc29ydGVkLmxlbmd0aCA+IHZpc2libGVDb3VudCkge1xuICAgICAgICBjb25zdCBoYWxmID0gTWF0aC5mbG9vcih2aXNpYmxlQ291bnQgLyAyKTtcbiAgICAgICAgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzZWxlY3RlZEluZGV4IC0gaGFsZiwgc29ydGVkLmxlbmd0aCAtIHZpc2libGVDb3VudCkpO1xuICAgICAgICBlbmQgPSBzdGFydCArIHZpc2libGVDb3VudDtcbiAgICB9XG4gICAgY29uc3Qgc2xpY2UgPSBzb3J0ZWQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgY29uc3QgaGlkZGVuQWJvdmUgPSBzdGFydDtcbiAgICBjb25zdCBoaWRkZW5CZWxvdyA9IHNvcnRlZC5sZW5ndGggLSBlbmQ7XG5cbiAgICBjb25zdCBzdWJUZXh0ID1cbiAgICAgICAgbWV0cmljRmlsdGVyIHx8IGZpbHRlclxuICAgICAgICAgICAgPyBgJHtzb3J0ZWQubGVuZ3RofSAvICR7ZGV2aWNlcy5sZW5ndGh9YFxuICAgICAgICAgICAgOiBgJHtzb3J0ZWQubGVuZ3RofWA7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICB0aXRsZT1cIkRFVklDRVNcIlxuICAgICAgICAgICAgc3ViPXtzdWJUZXh0fVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHJpZ2h0PXtcbiAgICAgICAgICAgICAgICBtZXRyaWNGaWx0ZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttZXRyaWNGaWx0ZXIubGFiZWwgfHwgbWV0cmljRmlsdGVyLm1ldHJpY0tleX0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttZXRyaWNGaWx0ZXIuYnVja2V0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKSA6IGZpbHRlcmluZyB8fCBmaWx0ZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17ZmlsdGVyaW5nID8gdGhlbWUuYWNjZW50IDogdGhlbWUuZmdEaW19Pi88L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntmaWx0ZXJ9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAge2ZpbHRlcmluZyAmJiA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fT5cdTI1OEM8L1RleHQ+fVxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5zb3J0IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9Pntzb3J0fTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyfSAvPlxuICAgICAgICAgICAgICAgIDxIZWFkZXJDZWxsIGxhYmVsPVwibmFtZVwiIHNvcnRLZXk9XCJuYW1lXCIgY3VycmVudFNvcnQ9e3NvcnR9IHdpZHRoPXtpZFdpZHRoICsgMn0gLz5cbiAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyfSAvPlxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezEyfSBtYXJnaW5SaWdodD17MX0gcGFkZGluZ1JpZ2h0PXsyfSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT4zMG08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPEhlYWRlckNlbGwgbGFiZWw9XCJjcHVcIiBzb3J0S2V5PVwiY3B1XCIgY3VycmVudFNvcnQ9e3NvcnR9IHdpZHRoPXs1fSBhbGlnbj1cInJpZ2h0XCIgLz5cbiAgICAgICAgICAgICAgICA8SGVhZGVyQ2VsbCBsYWJlbD1cIm1lbVwiIHNvcnRLZXk9XCJtZW1cIiBjdXJyZW50U29ydD17c29ydH0gd2lkdGg9ezV9IGFsaWduPVwicmlnaHRcIiAvPlxuICAgICAgICAgICAgICAgIDxIZWFkZXJDZWxsIGxhYmVsPVwiZGlza1wiIHNvcnRLZXk9XCJkaXNrXCIgY3VycmVudFNvcnQ9e3NvcnR9IHdpZHRoPXs1fSBhbGlnbj1cInJpZ2h0XCIgLz5cbiAgICAgICAgICAgICAgICA8SGVhZGVyQ2VsbCBsYWJlbD1cInVwXCIgc29ydEtleT1cInVwXCIgY3VycmVudFNvcnQ9e3NvcnR9IHdpZHRoPXs2fSBhbGlnbj1cInJpZ2h0XCIgLz5cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7bG9hZGluZyAmJiBzb3J0ZWQubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PmxvYWRpbmdcdTIwMjY8L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yICYmIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9PntlcnJvcn08L1RleHQ+fVxuXG4gICAgICAgICAgICB7aGlkZGVuQWJvdmUgPiAwICYmIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cdTIxOTEge2hpZGRlbkFib3ZlfSBtb3JlPC9UZXh0Pn1cblxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAge3NsaWNlLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbCA9IGUuZC5kZXZpY2UgPT09IHNlbGVjdGVkSWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdCA9IGRvdEZvcihlLmhlYWx0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZS5kLmRldmljZS5wYWRFbmQoaWRXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNwdVNlcmllcyA9IGNwdUhpc3Rvcnk/LltlLmQuZGV2aWNlXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzU3BhcmsgPSBBcnJheS5pc0FycmF5KGNwdVNlcmllcykgJiYgY3B1U2VyaWVzLmxlbmd0aCA+PSAyO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGFya0NvbG9yID0gZS5jcHUgPT0gbnVsbCA/IHRoZW1lLmZnRGltIDogY29sb3JGb3JQY3QoZS5jcHUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e2UuZC5kZXZpY2V9IGJhY2tncm91bmRDb2xvcj17aXNTZWwgPyAnIzFhMjAzMCcgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aXNTZWwgPyB0aGVtZS5hY2NlbnQgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsID8gJ1x1MjAzQScgOiAnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXtpZFdpZHRoICsgMn0gbWFyZ2luUmlnaHQ9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17ZG90LmNvbG9yfT57ZG90LmdseXBofTwvVGV4dD57JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2lzU2VsID8gdGhlbWUuZmcgOiB0aGVtZS5mZ0RpbX0+e2lkfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezEyfSBtYXJnaW5SaWdodD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtoYXNTcGFyayA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTcGFya2xpbmUgc2VyaWVzPXtjcHVTZXJpZXN9IHdpZHRoPXsxMH0gY29sb3I9e3NwYXJrQ29sb3J9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+eydcdTAwQjcnLnJlcGVhdCgxMCl9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezV9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZtdE51bShlLmNwdSwgY29sb3JQY3QoZS5jcHUpKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs1fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmbXROdW0oZS5tZW0sIGNvbG9yUGN0KGUubWVtKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17NX0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm10TnVtKGUuZGlzaywgY29sb3JQY3QoZS5kaXNrLCA4NSwgOTUpKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs2fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgZmxleFNocmluaz17MH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm10VXAoZS51cCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIHtoaWRkZW5CZWxvdyA+IDAgJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Plx1MjE5MyB7aGlkZGVuQmVsb3d9IG1vcmU8L1RleHQ+fVxuICAgICAgICA8L1BhbmVsPlxuICAgICk7XG59XG5cbmV4cG9ydCB7IFNPUlRfT1BUSU9OUyB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBQYW5lbCh7XG4gICAgdGl0bGUsXG4gICAgc3ViLFxuICAgIHJpZ2h0LFxuICAgIGZvY3VzZWQgPSBmYWxzZSxcbiAgICBjaGlsZHJlbixcbiAgICBmbGV4R3JvdyA9IDEsXG4gICAgZmxleEJhc2lzLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBwYWRkaW5nWCA9IDEsXG4gICAgcGFkZGluZ1kgPSAwLFxuICAgIGZsZXhTaHJpbmssXG4gICAgbWluSGVpZ2h0LFxuICAgIC8vIERlZmF1bHQgdG8gaGlkaW5nIG92ZXJmbG93OiBjb250ZW50IHRoYXQgZG9lc24ndCBmaXQgaW5zaWRlIHRoZSBwYW5lbFxuICAgIC8vIGJvZHkgZ2V0cyBjbGlwcGVkIHJhdGhlciB0aGFuIHNwaWxsaW5nIHBhc3QgdGhlIGJvcmRlciAod2hlcmUgaXQgd291bGRcbiAgICAvLyBvdmVyd3JpdGUgd2hhdGV2ZXIgaXMgYmVsb3cgb3Igd3JhcCBpbnRvIHRoZSBuZXh0IHBhbmVsJ3MgY2hyb21lKS5cbiAgICBvdmVyZmxvdyA9ICdoaWRkZW4nLFxufSkge1xuICAgIGNvbnN0IGJvcmRlckNvbG9yID0gZm9jdXNlZCA/IHRoZW1lLmJvcmRlckZvY3VzIDogdGhlbWUuYm9yZGVyO1xuICAgIGNvbnN0IHRpdGxlQ29sb3IgPSBmb2N1c2VkID8gdGhlbWUuYWNjZW50IDogdGhlbWUuZmc7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPXtib3JkZXJDb2xvcn1cbiAgICAgICAgICAgIHBhZGRpbmdYPXtwYWRkaW5nWH1cbiAgICAgICAgICAgIHBhZGRpbmdZPXtwYWRkaW5nWX1cbiAgICAgICAgICAgIGZsZXhHcm93PXtmbGV4R3Jvd31cbiAgICAgICAgICAgIGZsZXhCYXNpcz17ZmxleEJhc2lzfVxuICAgICAgICAgICAgZmxleFNocmluaz17ZmxleFNocmlua31cbiAgICAgICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0fVxuICAgICAgICAgICAgbWluSGVpZ2h0PXttaW5IZWlnaHR9XG4gICAgICAgID5cbiAgICAgICAgICAgIHt0aXRsZSAmJiAoXG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RpdGxlQ29sb3J9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAge3N1YiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT4gXHUwMEI3IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N1Yn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAge3JpZ2h0ICYmIDxCb3g+e3JpZ2h0fTwvQm94Pn1cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBmbGV4R3Jvdz17MX0gb3ZlcmZsb3c9e292ZXJmbG93fT5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcblxuY29uc3QgU1BBUktfR0xZUEhTID0gJ1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTcGFya2xpbmUoeyBzZXJpZXMsIHdpZHRoID0gMjAsIGNvbG9yID0gdGhlbWUuYWNjZW50LCBtYXggfSkge1xuICAgIGNvbnN0IGRhdGEgPSAoc2VyaWVzIHx8IFtdKS5maWx0ZXIoKHYpID0+IHYgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodikpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA8IDIpIHJldHVybiA8VGV4dD57JyAnLnJlcGVhdCh3aWR0aCl9PC9UZXh0PjtcbiAgICBjb25zdCBzbGljZSA9IGRhdGEuc2xpY2UoLXdpZHRoKTtcbiAgICBjb25zdCBjZWlsID0gbWF4ID8/IDEwMDtcbiAgICBjb25zdCBvdXQgPSBzbGljZVxuICAgICAgICAubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2VpbCwgdikpO1xuICAgICAgICAgICAgY29uc3QgaSA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgIFNQQVJLX0dMWVBIUy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoKG4gLyBjZWlsKSAqIChTUEFSS19HTFlQSFMubGVuZ3RoIC0gMSkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBTUEFSS19HTFlQSFNbaV07XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcnKTtcbiAgICBjb25zdCBwYWQgPSB3aWR0aCAtIHNsaWNlLmxlbmd0aDtcbiAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHtwYWQgPiAwICYmICcgJy5yZXBlYXQocGFkKX1cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtjb2xvcn0+e291dH08L1RleHQ+XG4gICAgICAgIDwvVGV4dD5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFyKHsgdmFsdWUsIHdpZHRoID0gMjAsIGNvbG9yLCBjZWlsID0gMTAwIH0pIHtcbiAgICBjb25zdCBwY3QgPSB2YWx1ZSA9PSBudWxsID8gMCA6IE1hdGgubWF4KDAsIE1hdGgubWluKGNlaWwsIHZhbHVlKSk7XG4gICAgY29uc3QgZmlsbGVkID0gTWF0aC5yb3VuZCgocGN0IC8gY2VpbCkgKiB3aWR0aCk7XG4gICAgY29uc3QgZW1wdHkgPSB3aWR0aCAtIGZpbGxlZDtcbiAgICBjb25zdCBmaWxsQ29sb3IgPSBjb2xvciA/PyBjb2xvckZvclBjdCh2YWx1ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+WzwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtmaWxsQ29sb3J9PnsnXHUyNTg4Jy5yZXBlYXQoZmlsbGVkKX08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+eydcdTI1OTEnLnJlcGVhdChlbXB0eSl9PC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pl08L1RleHQ+XG4gICAgICAgIDwvVGV4dD5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JGb3JQY3QocCkge1xuICAgIGlmIChwID09IG51bGwpIHJldHVybiB0aGVtZS5mZ0RpbTtcbiAgICBpZiAocCA+PSA5MCkgcmV0dXJuIHRoZW1lLnJlZDtcbiAgICBpZiAocCA+PSA3NSkgcmV0dXJuIHRoZW1lLmFtYmVyO1xuICAgIHJldHVybiB0aGVtZS5saW1lO1xufVxuIiwgImltcG9ydCB7IEFMQVJNX1NFVkVSSVRZIH0gZnJvbSAnLi4vLi4vLi4vbGliL2FsYXJtcy5qcyc7XG5pbXBvcnQgeyBkZWJ1Z0xvZyB9IGZyb20gJy4uLy4uLy4uL2xpYi9kZWJ1Zy1sb2cuanMnO1xuXG4vLyBIZWFsdGggPSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGFjcm9zcyB0aGUgZGFzaGJvYXJkLiBTZXZlcml0eSB3aW5zIG92ZXJcbi8vIGNvbm5lY3Rpb24gc3RhdGUgXHUyMDE0IGEgY3JpdGljYWwgYWxhcm0gb24gYSBkaXNjb25uZWN0ZWQgYWdlbnQgKGUuZy5cbi8vIFwiTWlzc2luZyBNb25pdG9yaW5nIERhdGFcIikgc2hvdWxkIHN0aWxsIHN1cmZhY2UgYXMgXHUyNzE1LCBub3QgYXMgXHUyNUNCLlxuLy8gICAtICdiYWQnIDogYWxhcm0gc2V2ZXJpdHkgXHUyMjY1IEhJR0ggKHJlZ2FyZGxlc3Mgb2YgY29ubmVjdGlvbilcbi8vICAgLSAnd2Fybic6IGFsYXJtIHNldmVyaXR5IExPVyBvciBNRURJVU0gKHJlZ2FyZGxlc3Mgb2YgY29ubmVjdGlvbilcbi8vICAgLSAnb2ZmJyA6IG5vdCBjb25uZWN0ZWQgYW5kIG5vIGFjdGl2ZSBhbGFybVxuLy8gICAtICdvbicgIDogY29ubmVjdGVkLCBubyBhY3RpdmUgYWxhcm1cbmV4cG9ydCBmdW5jdGlvbiBkZXZpY2VIZWFsdGgoZGV2aWNlLCBhbGFybVNldmVyaXR5KSB7XG4gICAgY29uc3Qgc2V2ID0gYWxhcm1TZXZlcml0eSA/PyBBTEFSTV9TRVZFUklUWS5OT05FO1xuICAgIGlmIChzZXYgPj0gQUxBUk1fU0VWRVJJVFkuSElHSCkgcmV0dXJuICdiYWQnO1xuICAgIGlmIChzZXYgPj0gQUxBUk1fU0VWRVJJVFkuTE9XKSByZXR1cm4gJ3dhcm4nO1xuICAgIGlmICghZGV2aWNlPy5jb25uZWN0aW9uPy5hY3RpdmUpIHJldHVybiAnb2ZmJztcbiAgICByZXR1cm4gJ29uJztcbn1cblxuLy8gTWFwIGRldmljZUlkIFx1MjE5MiBoaWdoZXN0IGFjdGl2ZSBhbGFybSBzZXZlcml0eS4gRmlsdGVycyBieSBgb3JpZ2luLnNvdXJjZWBcbi8vIHNvIHVzZXItc2NvcGVkIGFsYXJtcyBkb24ndCBsZWFrIGludG8gYSBwZXItZGV2aWNlIGNvdW50LlxuLy9cbi8vIEFsYXJtcyBmcm9tIHJ1bGVzIGRyaXZlbiBieSBhc3NldCBob3N0bmFtZS9uYW1lIG9jY2FzaW9uYWxseSBhcnJpdmUgd2l0aFxuLy8gYG9yaWdpbi5pZGAgdGhhdCBkb2Vzbid0IG1hdGNoIGBkZXZpY2UuZGV2aWNlYC4gVG8gc3RpbGwgc3VyZmFjZSB0aG9zZSBvblxuLy8gdGhlIG1hdGNoaW5nIGRldmljZSByb3csIHdlIGFsc28gcmVzb2x2ZSB2aWEgYG9yaWdpbi5uYW1lIFx1MjE5MiBkZXZpY2UubmFtZWBcbi8vIGFzIGEgZmFsbGJhY2sgXHUyMDE0IGBkZXZpY2VzYCBpcyBvcHRpb25hbCwgY2FsbGVycyB0aGF0IHBhc3MgaXQgZ2V0IHRoZVxuLy8gZXh0cmEgY292ZXJhZ2UuXG5leHBvcnQgZnVuY3Rpb24gbWF4U2V2ZXJpdHlCeURldmljZShpbnN0YW5jZXMsIGRldmljZXMpIHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgaWYgKCFpbnN0YW5jZXMpIHJldHVybiBtYXA7XG4gICAgY29uc3QgaWRTZXQgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgbmFtZVRvSWQgPSBuZXcgTWFwKCk7XG4gICAgaWYgKGRldmljZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBkIG9mIGRldmljZXMpIHtcbiAgICAgICAgICAgIGlmICghZD8uZGV2aWNlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlkU2V0LmFkZChkLmRldmljZSk7XG4gICAgICAgICAgICBpZiAoZC5uYW1lKSBuYW1lVG9JZC5zZXQoZC5uYW1lLCBkLmRldmljZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYnVtcCA9IChrZXksIHNldikgPT4ge1xuICAgICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjdXIgPSBtYXAuZ2V0KGtleSkgPz8gQUxBUk1fU0VWRVJJVFkuTk9ORTtcbiAgICAgICAgaWYgKHNldiA+IGN1cikgbWFwLnNldChrZXksIHNldik7XG4gICAgfTtcbiAgICBjb25zdCB1bm1hdGNoZWQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGkgb2YgaW5zdGFuY2VzKSB7XG4gICAgICAgIGlmIChpPy5vcmlnaW4/LnNvdXJjZSAhPT0gJ2RldmljZScpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBzZXYgPSBpLnNldmVyaXR5ID8/IEFMQVJNX1NFVkVSSVRZLk5PTkU7XG4gICAgICAgIGNvbnN0IGlkID0gaS5vcmlnaW4uaWQ7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBpLm9yaWdpbi5uYW1lO1xuICAgICAgICAvLyBQcmVmZXIgaWQgd2hlbiBpdCByZXNvbHZlcyB0byBhIGtub3duIGRldmljZTsgb3RoZXJ3aXNlIHRyeSBuYW1lLlxuICAgICAgICBpZiAoaWQgJiYgaWRTZXQuaGFzKGlkKSkge1xuICAgICAgICAgICAgYnVtcChpZCwgc2V2KTtcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lICYmIG5hbWVUb0lkLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgYnVtcChuYW1lVG9JZC5nZXQobmFtZSksIHNldik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyBtYXRjaDoga2VlcCBrZXllZCBieSBpZCBzbyBhIGxhdGVyIGRldmljZS1saXN0IHJlZnJlc2hcbiAgICAgICAgICAgIC8vIGNhbiBzdGlsbCBwaWNrIGl0IHVwLCBhbmQgc3VyZmFjZSBpdCB0byB0aGUgZGVidWcgbG9nIHNvXG4gICAgICAgICAgICAvLyB0aGUgY2F1c2UgKGRpZmZlcmVudCBzY29wZSwgYXNzZXQtbm90LWRldmljZSBvcmlnaW4sIGV0Yy4pXG4gICAgICAgICAgICAvLyBpcyB2aXNpYmxlIHdpdGhvdXQgc3BlbHVua2luZyB0aGUgV1MgZnJhbWVzLlxuICAgICAgICAgICAgaWYgKGlkKSBidW1wKGlkLCBzZXYpO1xuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goeyBpZCwgbmFtZSwgaW5zdGFuY2U6IGkuaW5zdGFuY2UsIHNldmVyaXR5OiBzZXYgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVubWF0Y2hlZC5sZW5ndGggPiAwICYmIGRldmljZXMpIHtcbiAgICAgICAgZGVidWdMb2coJ2FsYXJtczptYXRjaCcsICd1bm1hdGNoZWQtb3JpZ2lucycsIHtcbiAgICAgICAgICAgIHVubWF0Y2hlZF9jb3VudDogdW5tYXRjaGVkLmxlbmd0aCxcbiAgICAgICAgICAgIHNhbXBsZTogdW5tYXRjaGVkLnNsaWNlKDAsIDUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsZWV0Q291bnRzKGRldmljZXMsIGFsYXJtU2V2ZXJpdHlCeURldmljZSkge1xuICAgIGNvbnN0IG91dCA9IHsgdG90YWw6IGRldmljZXMubGVuZ3RoLCBvbmxpbmU6IDAsIG9mZmxpbmU6IDAsIHdhcm46IDAsIGJhZDogMCB9O1xuICAgIGZvciAoY29uc3QgZCBvZiBkZXZpY2VzKSB7XG4gICAgICAgIGNvbnN0IGggPSBkZXZpY2VIZWFsdGgoZCwgYWxhcm1TZXZlcml0eUJ5RGV2aWNlPy5nZXQoZC5kZXZpY2UpKTtcbiAgICAgICAgaWYgKGggPT09ICdvZmYnKSBvdXQub2ZmbGluZSsrO1xuICAgICAgICBlbHNlIG91dC5vbmxpbmUrKztcbiAgICAgICAgaWYgKGggPT09ICd3YXJuJykgb3V0Lndhcm4rKztcbiAgICAgICAgZWxzZSBpZiAoaCA9PT0gJ2JhZCcpIG91dC5iYWQrKztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn1cblxuLy8gVmVyc2lvbiBoZWxwZXJzIGxpdmUgaW4gYGxpYi9hZ2VudC12ZXJzaW9ucy5qc2Agc28gdGhlIENMSSBjYW4gcmV1c2Vcbi8vIHRoZW0gd2l0aG91dCBwdWxsaW5nIGRhc2hib2FyZC1zcGVjaWZpYyBjb2RlLiBSZS1leHBvcnRlZCBmcm9tIGhlcmUgZm9yXG4vLyBjYWxsLXNpdGVzIHRoYXQgYWxyZWFkeSBpbXBvcnQgYG5vcm1hbGl6ZUFnZW50VmVyc2lvbmAgLyBgY29tcGFyZUFnZW50VmVyc2lvbnNgXG4vLyBmcm9tIHRoZSBkYXNoYm9hcmQgbW9kdWxlLlxuaW1wb3J0IHsgbm9ybWFsaXplQWdlbnRWZXJzaW9uLCBjb21wYXJlQWdlbnRWZXJzaW9ucyB9IGZyb20gJy4uLy4uLy4uL2xpYi9hZ2VudC12ZXJzaW9ucy5qcyc7XG5leHBvcnQgeyBub3JtYWxpemVBZ2VudFZlcnNpb24sIGNvbXBhcmVBZ2VudFZlcnNpb25zIH07XG5cbi8vIFJldHVybnMgW3ZlcnNpb24sIGNvdW50XSB0dXBsZXMgc29ydGVkIG5ld2VzdC1maXJzdCBieSBzZW12ZXIuIENhbGxlcnMgdGhhdFxuLy8gbmVlZCBwb3B1bGFyaXR5IG9yZGVyIGNhbiByZS1zb3J0LiBTb3J0aW5nIGJ5IHNlbXZlciBpcyB3aGF0IGxldHMgdGhlIFVJXG4vLyBsYWJlbCBhIHJvdyBhcyBcIm91dGRhdGVkXCIgd2l0aG91dCByZWx5aW5nIG9uIGEgcG9wdWxhcml0eSBoZXVyaXN0aWMgKHdoaWNoXG4vLyBtaXNmaXJlcyB0aGUgbW9tZW50IGEgbmV3ZXIgcmVsZWFzZSByb2xscyBvdXQgdG8gPDUwJSBvZiB0aGUgZmxlZXQpLlxuZXhwb3J0IGZ1bmN0aW9uIGFnZW50VmVyc2lvbkNvdW50cyhkZXZpY2VzLCBzYW1wbGVzKSB7XG4gICAgY29uc3QgbSA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGV2aWNlcykge1xuICAgICAgICBjb25zdCBzID0gc2FtcGxlcz8uW2QuZGV2aWNlXTtcbiAgICAgICAgY29uc3QgdiA9IG5vcm1hbGl6ZUFnZW50VmVyc2lvbihzPy5hZ2VudD8udmVyc2lvbik7XG4gICAgICAgIGlmICghdikgY29udGludWU7XG4gICAgICAgIG0uc2V0KHYsIChtLmdldCh2KSB8fCAwKSArIDEpO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLm0uZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBjb21wYXJlQWdlbnRWZXJzaW9ucyhhWzBdLCBiWzBdKSk7XG59XG5cbi8vIERldmljZXMgd2hvc2UgcmVwb3J0ZWQgYWdlbnQgdmVyc2lvbiBpcyBvbGRlciB0aGFuIGB0YXJnZXRgLiBEZXZpY2VzIHdpdGhvdXRcbi8vIGEga25vd24gdmVyc2lvbiAobmV2ZXIgcmVwb3J0ZWQgYSBzYW1wbGUsIG9yIHJlcG9ydGVkIGEgc3RyaW5nIHRoYXQgZG9lc24ndFxuLy8gcGFyc2UpIGFyZSBza2lwcGVkIFx1MjAxNCB3ZSBkb24ndCB3YW50IHRvIFwidXBncmFkZVwiIHNvbWV0aGluZyB3ZSBjYW4ndCBpZGVudGlmeS5cbmV4cG9ydCBmdW5jdGlvbiBvdXRkYXRlZERldmljZXMoZGV2aWNlcywgc2FtcGxlcywgdGFyZ2V0KSB7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybiBbXTtcbiAgICBjb25zdCBvdXQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGV2aWNlcykge1xuICAgICAgICBjb25zdCBzID0gc2FtcGxlcz8uW2QuZGV2aWNlXTtcbiAgICAgICAgY29uc3QgdiA9IG5vcm1hbGl6ZUFnZW50VmVyc2lvbihzPy5hZ2VudD8udmVyc2lvbik7XG4gICAgICAgIGlmICghdikgY29udGludWU7XG4gICAgICAgIGlmIChjb21wYXJlQWdlbnRWZXJzaW9ucyh2LCB0YXJnZXQpID4gMCkgb3V0LnB1c2goZCk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBjb25zdCBVTkFTU0lHTkVEX1BST0RVQ1RfS0VZID0gJ19fdW5hc3NpZ25lZF9fJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRldmljZUtpbmRDb3VudHMoZGV2aWNlcykge1xuICAgIGNvbnN0IG0gPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCBkIG9mIGRldmljZXMpIHtcbiAgICAgICAgY29uc3Qga2luZCA9IGQucHJvZHVjdCB8fCBVTkFTU0lHTkVEX1BST0RVQ1RfS0VZO1xuICAgICAgICBtLnNldChraW5kLCAobS5nZXQoa2luZCkgfHwgMCkgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5tLmVudHJpZXMoKV0uc29ydCgoYSwgYikgPT4gYlsxXSAtIGFbMV0pO1xufVxuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZVN0ZG91dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSAnLi9QYW5lbC5qc3gnO1xuaW1wb3J0IHsgU3BhcmtsaW5lLCBCYXIsIGNvbG9yRm9yUGN0IH0gZnJvbSAnLi9TcGFya2xpbmUuanN4JztcbmltcG9ydCB7IHVzZUxvZ3MgfSBmcm9tICcuLi9ob29rcy91c2VMb2dzLmpzJztcbmltcG9ydCB7IGRldmljZUhlYWx0aCwgbm9ybWFsaXplQWdlbnRWZXJzaW9uIH0gZnJvbSAnLi4vbGliL3N0YXR1cy5qcyc7XG5pbXBvcnQge1xuICAgIGxldmVsUGFzc2VzVGhyZXNob2xkLFxuICAgIHBhcnNlTG9nTGluZSxcbn0gZnJvbSAnLi4vLi4vLi4vbGliL3Byb2R1Y3QvbG9nLXByZXNldHMuanMnO1xuXG5jb25zdCBISVNUT1JZX0xFTiA9IDQwO1xuXG5mdW5jdGlvbiB1c2VEZXZpY2VIaXN0b3J5KGRldmljZUlkLCBzYW1wbGUpIHtcbiAgICBjb25zdCBoaXN0b3J5UmVmID0gdXNlUmVmKHsgY3B1OiBbXSwgbWVtOiBbXSwgc3dhcDogW10sIGRpc2s6IFtdIH0pO1xuICAgIGNvbnN0IGxhc3REZXZpY2VSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgWywgc2V0VGlja10gPSB1c2VTdGF0ZSgwKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChsYXN0RGV2aWNlUmVmLmN1cnJlbnQgIT09IGRldmljZUlkKSB7XG4gICAgICAgICAgICBoaXN0b3J5UmVmLmN1cnJlbnQgPSB7IGNwdTogW10sIG1lbTogW10sIHN3YXA6IFtdLCBkaXNrOiBbXSB9O1xuICAgICAgICAgICAgbGFzdERldmljZVJlZi5jdXJyZW50ID0gZGV2aWNlSWQ7XG4gICAgICAgICAgICBzZXRUaWNrKChuKSA9PiBuICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzYW1wbGUpIHJldHVybjtcbiAgICAgICAgY29uc3QgcHVzaCA9IChhcnIsIHYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG91dCA9IFsuLi5hcnIsIHYgPT0gbnVsbCA/IG51bGwgOiBOdW1iZXIodildO1xuICAgICAgICAgICAgcmV0dXJuIG91dC5sZW5ndGggPiBISVNUT1JZX0xFTiA/IG91dC5zbGljZSgtSElTVE9SWV9MRU4pIDogb3V0O1xuICAgICAgICB9O1xuICAgICAgICBoaXN0b3J5UmVmLmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBjcHU6IHB1c2goaGlzdG9yeVJlZi5jdXJyZW50LmNwdSwgc2FtcGxlLmNwdT8udXNhZ2UpLFxuICAgICAgICAgICAgbWVtOiBwdXNoKGhpc3RvcnlSZWYuY3VycmVudC5tZW0sIHNhbXBsZS5tZW1vcnk/LnVzYWdlKSxcbiAgICAgICAgICAgIHN3YXA6IHB1c2goaGlzdG9yeVJlZi5jdXJyZW50LnN3YXAsIHNhbXBsZS5tZW1vcnk/LnN3YXA/LnVzYWdlKSxcbiAgICAgICAgICAgIGRpc2s6IHB1c2goaGlzdG9yeVJlZi5jdXJyZW50LmRpc2ssIHNhbXBsZS5kaXNrPy5yb290Py51c2FnZSksXG4gICAgICAgIH07XG4gICAgICAgIHNldFRpY2soKG4pID0+IG4gKyAxKTtcbiAgICB9LCBbZGV2aWNlSWQsIHNhbXBsZV0pO1xuXG4gICAgcmV0dXJuIGhpc3RvcnlSZWYuY3VycmVudDtcbn1cblxuLy8gQ29sb3IgbWFwcGluZyBmb3IgcGFyc2VkIGxvZyBsZXZlbHMuIEtleXMgYXJlIG5vcm1hbGl6ZWQgKGxvd2VyY2FzZSkuXG4vLyBBbnl0aGluZyBvdXRzaWRlIHRoaXMgdGFibGUgZmFsbHMgYmFjayB0byBgdGhlbWUuZmdgIHNvIHVua25vd24gbGV2ZWxzXG4vLyBmcm9tIGEgY3VzdG9tIHBhdHRlcm4gc3RheSByZWFkYWJsZSBpbnN0ZWFkIG9mIGRpc2FwcGVhcmluZy5cbmNvbnN0IExFVkVMX1NUWUxFID0ge1xuICAgIHRyYWNlOiB7IGNvbG9yOiB0aGVtZS5mZ0RpbSwgYm9sZDogZmFsc2UgfSxcbiAgICB0cmM6IHsgY29sb3I6IHRoZW1lLmZnRGltLCBib2xkOiBmYWxzZSB9LFxuICAgIGRlYnVnOiB7IGNvbG9yOiB0aGVtZS5mZ0RpbSwgYm9sZDogZmFsc2UgfSxcbiAgICBkYmc6IHsgY29sb3I6IHRoZW1lLmZnRGltLCBib2xkOiBmYWxzZSB9LFxuICAgIGluZm86IHsgY29sb3I6IHRoZW1lLmZnLCBib2xkOiBmYWxzZSB9LFxuICAgIGluZjogeyBjb2xvcjogdGhlbWUuZmcsIGJvbGQ6IGZhbHNlIH0sXG4gICAgbm90aWNlOiB7IGNvbG9yOiB0aGVtZS5hY2NlbnQsIGJvbGQ6IGZhbHNlIH0sXG4gICAgd2FybjogeyBjb2xvcjogdGhlbWUuYW1iZXIsIGJvbGQ6IGZhbHNlIH0sXG4gICAgd2FybmluZzogeyBjb2xvcjogdGhlbWUuYW1iZXIsIGJvbGQ6IGZhbHNlIH0sXG4gICAgd3JuOiB7IGNvbG9yOiB0aGVtZS5hbWJlciwgYm9sZDogZmFsc2UgfSxcbiAgICBlcnJvcjogeyBjb2xvcjogdGhlbWUucmVkLCBib2xkOiBmYWxzZSB9LFxuICAgIGVycjogeyBjb2xvcjogdGhlbWUucmVkLCBib2xkOiBmYWxzZSB9LFxuICAgIGNyaXQ6IHsgY29sb3I6IHRoZW1lLnJlZCwgYm9sZDogdHJ1ZSB9LFxuICAgIGNyaXRpY2FsOiB7IGNvbG9yOiB0aGVtZS5yZWQsIGJvbGQ6IHRydWUgfSxcbiAgICBmYXRhbDogeyBjb2xvcjogdGhlbWUucmVkLCBib2xkOiB0cnVlIH0sXG4gICAgZmF0OiB7IGNvbG9yOiB0aGVtZS5yZWQsIGJvbGQ6IHRydWUgfSxcbn07XG5cbmNvbnN0IExFVkVMX1BBRCA9IDU7XG5mdW5jdGlvbiBwYWRMZXZlbChzKSB7XG4gICAgaWYgKHMubGVuZ3RoID49IExFVkVMX1BBRCkgcmV0dXJuIHMuc2xpY2UoMCwgTEVWRUxfUEFEKTtcbiAgICByZXR1cm4gcyArICcgJy5yZXBlYXQoTEVWRUxfUEFEIC0gcy5sZW5ndGgpO1xufVxuXG5jb25zdCBGSUxURVJfTEFCRUwgPSB7XG4gICAgYWxsOiBudWxsLFxuICAgIGluZm86ICdsZXZlbCBcdTIyNjUgaW5mbycsXG4gICAgd2FybjogJ2xldmVsIFx1MjI2NSB3YXJuJyxcbiAgICBlcnJvcjogJ2xldmVsIFx1MjI2NSBlcnJvcicsXG59O1xuXG5mdW5jdGlvbiBmbXRCeXRlcyhuKSB7XG4gICAgaWYgKG4gPT0gbnVsbCkgcmV0dXJuICdcdTIwMTQnO1xuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCB2ID0gTnVtYmVyKG4pO1xuICAgIHdoaWxlICh2ID49IDEwMjQgJiYgaSA8IHVuaXRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdiAvPSAxMDI0O1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBgJHt2LnRvRml4ZWQodiA+PSAxMCA/IDAgOiAxKX0gJHt1bml0c1tpXX1gO1xufVxuXG5mdW5jdGlvbiBmbXRVcChzZWNzKSB7XG4gICAgaWYgKHNlY3MgPT0gbnVsbCkgcmV0dXJuICdcdTIwMTQnO1xuICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKHNlY3MpO1xuICAgIGNvbnN0IGQgPSBNYXRoLmZsb29yKHMgLyA4NjQwMCk7XG4gICAgY29uc3QgaCA9IE1hdGguZmxvb3IoKHMgJSA4NjQwMCkgLyAzNjAwKTtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcigocyAlIDM2MDApIC8gNjApO1xuICAgIGlmIChkKSByZXR1cm4gYCR7ZH1kICR7aH1oYDtcbiAgICBpZiAoaCkgcmV0dXJuIGAke2h9aCAke219bWA7XG4gICAgcmV0dXJuIGAke219bWA7XG59XG5cbmZ1bmN0aW9uIE1ldHJpY1Jvdyh7IGxhYmVsLCB2YWx1ZSwgY29sb3IsIGhpc3RvcnksIGRldGFpbCB9KSB7XG4gICAgY29uc3QgdmFsdWVDb2xvciA9IGNvbG9yRm9yUGN0KHZhbHVlKTtcbiAgICBjb25zdCB2YWx1ZVRleHQgPSB2YWx1ZSA9PSBudWxsID8gJyAgXHUyMDE0JyA6IGAke01hdGgucm91bmQodmFsdWUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMyl9JWA7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs1fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgbWFyZ2luUmlnaHQ9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt2YWx1ZUNvbG9yfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWVUZXh0fVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJhciB2YWx1ZT17dmFsdWUgPz8gMH0gd2lkdGg9ezI4fSBjb2xvcj17dmFsdWVDb2xvcn0gLz5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgPFNwYXJrbGluZSBzZXJpZXM9e2hpc3Rvcnl9IHdpZHRoPXsyMH0gY29sb3I9e2NvbG9yfSAvPlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezJ9IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAge2RldGFpbCB8fCAnJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gQWN0aW9uQnRuKHsgaywgbGFiZWwsIGRpc2FibGVkIH0pIHtcbiAgICBjb25zdCBjb2xvciA9IGRpc2FibGVkID8gdGhlbWUuZmdGYWludCA6IHRoZW1lLmZnO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggbWFyZ2luUmlnaHQ9ezJ9PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2Rpc2FibGVkID8gdGhlbWUuZmdGYWludCA6IHRoZW1lLm1hZ2VudGF9PntrfTwvVGV4dD57JyAnfVxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtjb2xvcn0+e2xhYmVsfTwvVGV4dD5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZG90Rm9ySGVhbHRoKGgpIHtcbiAgICBpZiAoaCA9PT0gJ29uJykgcmV0dXJuIHsgZ2x5cGg6ICdcdTI1Q0YnLCBjb2xvcjogdGhlbWUubGltZSB9O1xuICAgIGlmIChoID09PSAnd2FybicpIHJldHVybiB7IGdseXBoOiAnXHUyNUIyJywgY29sb3I6IHRoZW1lLmFtYmVyIH07XG4gICAgaWYgKGggPT09ICdiYWQnKSByZXR1cm4geyBnbHlwaDogJ1x1MjcxNScsIGNvbG9yOiB0aGVtZS5yZWQgfTtcbiAgICByZXR1cm4geyBnbHlwaDogJ1x1MjVDQicsIGNvbG9yOiB0aGVtZS5mZ0ZhaW50IH07XG59XG5cbmZ1bmN0aW9uIFNlcCgpIHtcbiAgICByZXR1cm4gPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PnsnICBcdTAwQjcgICd9PC9UZXh0Pjtcbn1cblxuLy8gUmVuZGVyIGEgc2luZ2xlIGxvZyBsaW5lLiBXaGVuIGBwYXJzZWRgIGlzIG5vbi1udWxsIHRoZSBsaW5lIGlzIHNwbGl0XG4vLyBpbnRvIHRpbWUgLyBsZXZlbCAvIG1zZyB3aXRoIHRoZW1lLWF3YXJlIGNvbG91cnM7IG90aGVyd2lzZSB0aGUgcmF3XG4vLyB0ZXh0IGlzIHNob3duIHNvIHdlIG5ldmVyIHNpbGVudGx5IGRyb3AgbGluZXMgdGhhdCBkaWRuJ3QgbWF0Y2ggdGhlXG4vLyBwYXR0ZXJuIChtdWx0aS1saW5lIHN0YWNrIHRyYWNlcywgYmFubmVycywgZXRjLikuXG5mdW5jdGlvbiBMb2dMaW5lUm93KHsgdGV4dCwgcGFyc2VkIH0pIHtcbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAge3RleHQgfHwgJyAnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCB7IHRpbWUsIGxldmVsLCBsZXZlbF9ub3JtOiBsZXZlbE5vcm0sIG1zZyB9ID0gcGFyc2VkO1xuICAgIGNvbnN0IHN0eWxlID0gbGV2ZWxOb3JtID8gTEVWRUxfU1RZTEVbbGV2ZWxOb3JtXSA6IG51bGw7XG4gICAgY29uc3QgbGV2ZWxDb2xvciA9IHN0eWxlPy5jb2xvciB8fCB0aGVtZS5mZztcbiAgICBjb25zdCBsZXZlbEJvbGQgPSAhIXN0eWxlPy5ib2xkO1xuICAgIC8vIENyaXRpY2FsL2ZhdGFsIGxpbmVzIGFsc28gcGFpbnQgdGhlIG1lc3NhZ2UgaW4gcmVkIHNvIHRoZSB3aG9sZVxuICAgIC8vIGVudHJ5IHN0YW5kcyBvdXQsIG5vdCBqdXN0IHRoZSA1LWNoYXIgbGV2ZWwgc2xvdC5cbiAgICBjb25zdCBtc2dSZWQgPSBsZXZlbE5vcm0gPT09ICdmYXRhbCcgfHwgbGV2ZWxOb3JtID09PSAnY3JpdGljYWwnIHx8IGxldmVsTm9ybSA9PT0gJ2NyaXQnO1xuICAgIGNvbnN0IG1zZ0NvbG9yID0gbXNnUmVkID8gdGhlbWUucmVkIDogdGhlbWUuZmc7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxUZXh0IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICB7dGltZSAmJiA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+e3RpbWV9IDwvVGV4dD59XG4gICAgICAgICAgICAgICAge2xldmVsICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2xldmVsQ29sb3J9IGJvbGQ9e2xldmVsQm9sZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGFkTGV2ZWwobGV2ZWwudG9VcHBlckNhc2UoKSl9eycgJ31cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e21zZ0NvbG9yfSBib2xkPXtsZXZlbEJvbGQgJiYgbXNnUmVkfT5cbiAgICAgICAgICAgICAgICAgICAge21zZyB8fCAnICd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGV2aWNlRGV0YWlsUGFuZWwoe1xuICAgIGRldmljZSxcbiAgICBzYW1wbGUsXG4gICAgYWxhcm1TZXZlcml0eSxcbiAgICBwYXVzZWQsXG4gICAgY2xlYXJUb2tlbixcbiAgICBmb2N1c2VkLFxuICAgIGxvZ1NvdXJjZXMsXG4gICAgYWN0aXZlU291cmNlLFxuICAgIGFjdGl2ZVNvdXJjZUluZGV4LFxuICAgIGxldmVsRmlsdGVyID0gJ2FsbCcsXG4gICAgZmlsdGVyRW5hYmxlZCA9IGZhbHNlLFxufSkge1xuICAgIGNvbnN0IGlkID0gZGV2aWNlPy5kZXZpY2UgfHwgbnVsbDtcbiAgICBjb25zdCBvbmxpbmUgPSAhIWRldmljZT8uY29ubmVjdGlvbj8uYWN0aXZlO1xuICAgIGNvbnN0IGxhdGVzdCA9IHNhbXBsZSB8fCBudWxsO1xuICAgIGNvbnN0IGhpc3RvcnkgPSB1c2VEZXZpY2VIaXN0b3J5KGlkLCBzYW1wbGUpO1xuICAgIGNvbnN0IG1vbkVycm9yID0gbnVsbDtcbiAgICBjb25zdCBzb3VyY2VzID0gbG9nU291cmNlcz8uc291cmNlcyB8fCBbXTtcbiAgICBjb25zdCBzb3VyY2VDb3VudCA9IHNvdXJjZXMubGVuZ3RoO1xuICAgIGNvbnN0IHNvdXJjZU5hbWUgPSBhY3RpdmVTb3VyY2U/Lm5hbWUgfHwgbnVsbDtcbiAgICBjb25zdCBzb3VyY2VDb21tYW5kID0gYWN0aXZlU291cmNlPy5jb21tYW5kIHx8IG51bGw7XG4gICAgY29uc3Qgc291cmNlUGF0dGVybiA9IGFjdGl2ZVNvdXJjZT8ucmVzb2x2ZWRQYXR0ZXJuIHx8IG51bGw7XG4gICAgLy8gQ29tcGlsZSB0aGUgYWN0aXZlIHBhdHRlcm4gb25jZSBwZXIgc291cmNlIGNoYW5nZS4gYG51bGxgIG1lYW5zXG4gICAgLy8gXCJyZW5kZXIgcmF3XCIgXHUyMDE0IGtlZXBzIHRoZSBwYW5lbCBjb21wYXRpYmxlIHdpdGggc291cmNlcyB0aGF0XG4gICAgLy8gZGVjbGFyZSBuZWl0aGVyIGEgcGF0dGVybiBub3IgYSBwcmVzZXQuXG4gICAgY29uc3QgY29tcGlsZWRQYXR0ZXJuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghc291cmNlUGF0dGVybikgcmV0dXJuIG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzb3VyY2VQYXR0ZXJuKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sIFtzb3VyY2VQYXR0ZXJuXSk7XG4gICAgY29uc3QgeyBsaW5lcywgc3RhdHVzOiBsb2dTdGF0dXMsIGVycm9yOiBsb2dFcnJvciwgY2xlYXIgfSA9IHVzZUxvZ3Moe1xuICAgICAgICBkZXZpY2VJZDogaWQsXG4gICAgICAgIG9ubGluZSxcbiAgICAgICAgcGF1c2VkLFxuICAgICAgICBjb21tYW5kOiBzb3VyY2VDb21tYW5kLFxuICAgIH0pO1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSB1c2VTdGRvdXQoKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChjbGVhclRva2VuID4gMCkgY2xlYXIoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtjbGVhclRva2VuXSk7XG5cbiAgICBjb25zdCBoZWFsdGggPSBkZXZpY2VIZWFsdGgoZGV2aWNlLCBhbGFybVNldmVyaXR5KTtcbiAgICBjb25zdCBkb3QgPSBkb3RGb3JIZWFsdGgoaGVhbHRoKTtcbiAgICBjb25zdCBtZW1Vc2VkID1cbiAgICAgICAgbGF0ZXN0Py5tZW1vcnk/LnRvdGFsICE9IG51bGwgJiYgbGF0ZXN0Py5tZW1vcnk/LmF2YWlsYWJsZSAhPSBudWxsXG4gICAgICAgICAgICA/IGxhdGVzdC5tZW1vcnkudG90YWwgLSBsYXRlc3QubWVtb3J5LmF2YWlsYWJsZVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG1lbURldGFpbCA9XG4gICAgICAgIG1lbVVzZWQgIT0gbnVsbCAmJiBsYXRlc3Q/Lm1lbW9yeT8udG90YWwgIT0gbnVsbFxuICAgICAgICAgICAgPyBgJHtmbXRCeXRlcyhtZW1Vc2VkKX0gLyAke2ZtdEJ5dGVzKGxhdGVzdC5tZW1vcnkudG90YWwpfWBcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzd2FwID0gbGF0ZXN0Py5tZW1vcnk/LnN3YXA7XG4gICAgY29uc3QgaGFzU3dhcCA9IHN3YXAgJiYgc3dhcC50b3RhbCAhPSBudWxsICYmIHN3YXAudG90YWwgPiAwO1xuICAgIGNvbnN0IHN3YXBEZXRhaWwgPSBoYXNTd2FwXG4gICAgICAgID8gYCR7Zm10Qnl0ZXMoc3dhcC50b3RhbCAtIChzd2FwLmZyZWUgPz8gMCkpfSAvICR7Zm10Qnl0ZXMoc3dhcC50b3RhbCl9YFxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgZGlza0RldGFpbCA9XG4gICAgICAgIGxhdGVzdD8uZGlzaz8ucm9vdD8uYXZhaWxhYmxlICE9IG51bGwgJiYgbGF0ZXN0Py5kaXNrPy5yb290Py50b3RhbCAhPSBudWxsXG4gICAgICAgICAgICA/IGAke2ZtdEJ5dGVzKGxhdGVzdC5kaXNrLnJvb3QudG90YWwgLSBsYXRlc3QuZGlzay5yb290LmF2YWlsYWJsZSl9IC8gJHtmbXRCeXRlcyhsYXRlc3QuZGlzay5yb290LnRvdGFsKX1gXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgbG9hZCA9IGxhdGVzdD8ubG9hZFxuICAgICAgICA/IFtsYXRlc3QubG9hZFsnMW0nXSwgbGF0ZXN0LmxvYWRbJzVtJ10sIGxhdGVzdC5sb2FkWycxNW0nXV1cbiAgICAgICAgICAgICAgLm1hcCgodikgPT4gKHYgIT0gbnVsbCA/IHYudG9GaXhlZCgyKSA6ICdcdTIwMTQnKSlcbiAgICAgICAgICAgICAgLmpvaW4oJyAvICcpXG4gICAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IGlwID0gZGV2aWNlPy5jb25uZWN0aW9uPy5pcF9hZGRyZXNzIHx8IG51bGw7XG4gICAgY29uc3QgcHJvdG8gPSBkZXZpY2U/LmNvbm5lY3Rpb24/LnByb3RvY29sIHx8IG51bGw7XG4gICAgY29uc3QgYWdlbnRWID0gbm9ybWFsaXplQWdlbnRWZXJzaW9uKGxhdGVzdD8uYWdlbnQ/LnZlcnNpb24pIHx8ICdcdTIwMTQnO1xuICAgIGNvbnN0IHRlbXAgPSBsYXRlc3Q/LmNwdT8udGVtcGVyYXR1cmU7XG4gICAgLy8gQ2hyb21lIGluc2lkZSB0aGUgcGFuZWw6IHRpdGxlICgxKSArIGlkZW50aXR5ICgxKSArIG1ldGErZ2FwICgyKSArXG4gICAgLy8gbWV0cmljcyByb3dzICgzIG9yIDQgaWYgc3dhcCkgKyBhY3Rpb25zK2dhcCAoMikgKyBqb3VybmFsIGhlYWRlcitnYXAgKDIpICtcbiAgICAvLyBwYW5lbCBib3JkZXJzICgyKS4gUGx1cyBkYXNoYm9hcmQgaGVhZGVyK2Zvb3RlciAoMikuIFRvdGFsIFx1MjI0OCAxNSAoKzEgc3dhcCkuXG4gICAgY29uc3QgY2hyb21lUmVzZXJ2ZSA9IDE1ICsgKGhhc1N3YXAgPyAxIDogMCk7XG4gICAgY29uc3QgbG9nSGVpZ2h0ID0gTWF0aC5tYXgoNCwgKHN0ZG91dD8ucm93cyB8fCA0MCkgLSBjaHJvbWVSZXNlcnZlKTtcblxuICAgIC8vIFBhcnNlICsgZmlsdGVyIG9uY2Ugc28gdGhlIHNsaWNlIHRoYXQgZmlsbHMgdGhlIHZpc2libGUgd2luZG93XG4gICAgLy8gYWxyZWFkeSBhY2NvdW50cyBmb3IgaGlkZGVuIGxpbmVzLiBXZSBkb24ndCB3YW50IGEgYHdhcm4rYCBmaWx0ZXJcbiAgICAvLyB0byBsZWF2ZSB0aGUgcGFuZWwgaGFsZi1lbXB0eSB3aGVuIG1vc3QgbGluZXMgd2VyZSBgaW5mb2AuXG4gICAgY29uc3QgcGFyc2VkTGluZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGxpbmVzLm1hcCgobG4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTG9nTGluZShsbi50ZXh0LCBjb21waWxlZFBhdHRlcm4pO1xuICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogbG4sIHBhcnNlZCB9O1xuICAgICAgICB9KTtcbiAgICB9LCBbbGluZXMsIGNvbXBpbGVkUGF0dGVybl0pO1xuICAgIGNvbnN0IGZpbHRlcmVkTGluZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKGxldmVsRmlsdGVyID09PSAnYWxsJykgcmV0dXJuIHBhcnNlZExpbmVzO1xuICAgICAgICByZXR1cm4gcGFyc2VkTGluZXMuZmlsdGVyKChwKSA9PlxuICAgICAgICAgICAgbGV2ZWxQYXNzZXNUaHJlc2hvbGQocC5wYXJzZWQ/LmxldmVsX25vcm0sIGxldmVsRmlsdGVyKSxcbiAgICAgICAgKTtcbiAgICB9LCBbcGFyc2VkTGluZXMsIGxldmVsRmlsdGVyXSk7XG4gICAgY29uc3QgdmlzaWJsZUxvZ3MgPSBmaWx0ZXJlZExpbmVzLnNsaWNlKC1sb2dIZWlnaHQpO1xuXG4gICAgY29uc3QgbG9nU3RhdHVzTGFiZWwgPSAoKCkgPT4ge1xuICAgICAgICBpZiAoIWlkKSByZXR1cm4geyB0ZXh0OiAnc2VsZWN0IGEgZGV2aWNlJywgY29sb3I6IHRoZW1lLmZnRGltIH07XG4gICAgICAgIGlmICghb25saW5lKSByZXR1cm4geyB0ZXh0OiAnZGV2aWNlIG9mZmxpbmUnLCBjb2xvcjogdGhlbWUuZmdEaW0gfTtcbiAgICAgICAgaWYgKGxvZ0Vycm9yKSByZXR1cm4geyB0ZXh0OiBsb2dFcnJvciwgY29sb3I6IHRoZW1lLnJlZCB9O1xuICAgICAgICBpZiAocGF1c2VkKSByZXR1cm4geyB0ZXh0OiAncGF1c2VkJywgY29sb3I6IHRoZW1lLmFtYmVyIH07XG4gICAgICAgIGlmIChsb2dTdGF0dXMgPT09ICdjb25uZWN0aW5nJykgcmV0dXJuIHsgdGV4dDogJ2Nvbm5lY3RpbmdcdTIwMjYnLCBjb2xvcjogdGhlbWUuZmdEaW0gfTtcbiAgICAgICAgaWYgKGxvZ1N0YXR1cyA9PT0gJ3N0cmVhbWluZycpIHJldHVybiB7IHRleHQ6ICdsaXZlJywgY29sb3I6IHRoZW1lLmxpbWUgfTtcbiAgICAgICAgaWYgKGxvZ1N0YXR1cyA9PT0gJ2VuZGVkJykgcmV0dXJuIHsgdGV4dDogJ2VuZGVkJywgY29sb3I6IHRoZW1lLmZnRGltIH07XG4gICAgICAgIHJldHVybiB7IHRleHQ6IGxvZ1N0YXR1cywgY29sb3I6IHRoZW1lLmZnRGltIH07XG4gICAgfSkoKTtcblxuICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8UGFuZWwgdGl0bGU9XCJERVZJQ0VcIiBmb2N1c2VkPXtmb2N1c2VkfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+c2VsZWN0IGEgZGV2aWNlIG9uIHRoZSBsZWZ0PC9UZXh0PlxuICAgICAgICAgICAgPC9QYW5lbD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmcmllbmRseU5hbWUgPSBkZXZpY2UubmFtZSB8fCBpcCB8fCBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICB0aXRsZT1cIkRFVklDRVwiXG4gICAgICAgICAgICBzdWI9e2RldmljZS5kZXZpY2V9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgcmlnaHQ9e1xuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICB7cHJvdG8gJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57cHJvdG99IDwvVGV4dD59XG4gICAgICAgICAgICAgICAgICAgIHtpcCAmJiA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntpcH08L1RleHQ+fVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgICAgey8qIElkZW50aXR5IGxpbmUgKi99XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtkb3QuY29sb3J9Pntkb3QuZ2x5cGh9IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17b25saW5lID8gdGhlbWUuZmcgOiB0aGVtZS5mZ0RpbX0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge2RldmljZS5kZXZpY2V9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIHtmcmllbmRseU5hbWUgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlcCAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57ZnJpZW5kbHlOYW1lfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7LyogTWV0YSBsaW5lICovfVxuICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5hZ2VudCA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57YWdlbnRWfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8U2VwIC8+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PnVwIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntmbXRVcChsYXRlc3Q/LnVwdGltZSl9PC9UZXh0PlxuICAgICAgICAgICAgICAgIHtsb2FkICYmIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZXAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5sb2FkIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2xvYWR9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIHsvKiBNZXRyaWNzLCBvbmUgcm93IGVhY2gsIGFsaWduZWQgaW4gY29sdW1ucyAqL31cbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxNZXRyaWNSb3dcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJDUFVcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bGF0ZXN0Py5jcHU/LnVzYWdlfVxuICAgICAgICAgICAgICAgICAgICBoaXN0b3J5PXtoaXN0b3J5LmNwdX1cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3RoZW1lLmFjY2VudH1cbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdD8uY3B1Py5jb3JlcyAhPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtsYXRlc3QuY3B1LmNvcmVzfSBjb3JlJHtsYXRlc3QuY3B1LmNvcmVzID09PSAxID8gJycgOiAncyd9JHt0ZW1wICE9IG51bGwgPyBgIFx1MDBCNyAke3RlbXAudG9GaXhlZCgxKX1cdTAwQjBDYCA6ICcnfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxNZXRyaWNSb3dcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJNRU1cIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bGF0ZXN0Py5tZW1vcnk/LnVzYWdlfVxuICAgICAgICAgICAgICAgICAgICBoaXN0b3J5PXtoaXN0b3J5Lm1lbX1cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9e3RoZW1lLm1hZ2VudGF9XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbD17bWVtRGV0YWlsIHx8ICcnfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc1N3YXAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8TWV0cmljUm93XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlNXQVBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3N3YXAudXNhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBoaXN0b3J5PXtoaXN0b3J5LnN3YXB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17dGhlbWUuYW1iZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw9e3N3YXBEZXRhaWwgfHwgJyd9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8TWV0cmljUm93XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRElTS1wiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtsYXRlc3Q/LmRpc2s/LnJvb3Q/LnVzYWdlfVxuICAgICAgICAgICAgICAgICAgICBoaXN0b3J5PXtoaXN0b3J5LmRpc2t9XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXt0aGVtZS5saW1lfVxuICAgICAgICAgICAgICAgICAgICBkZXRhaWw9e2Rpc2tEZXRhaWwgfHwgJyd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7bW9uRXJyb3IgJiYgIWxhdGVzdCAmJiAoXG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUucmVkfT57bW9uRXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshbGF0ZXN0ICYmIG9ubGluZSAmJiAhbW9uRXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT53YWl0aW5nIGZvciBtb25pdG9yaW5nIHNhbXBsZVx1MjAyNjwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBRdWljayBhY3Rpb25zICovfVxuICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgIDxBY3Rpb25CdG4gaz1cImVudGVyXCIgbGFiZWw9XCJzc2hcIiBkaXNhYmxlZD17IW9ubGluZX0gLz5cbiAgICAgICAgICAgICAgICA8QWN0aW9uQnRuIGs9XCJwXCIgbGFiZWw9XCJwYXVzZSBsb2dzXCIgLz5cbiAgICAgICAgICAgICAgICA8QWN0aW9uQnRuIGs9XCJjXCIgbGFiZWw9XCJjbGVhciBsb2dzXCIgLz5cbiAgICAgICAgICAgICAgICA8QWN0aW9uQnRuIGs9XCJyXCIgbGFiZWw9XCJyZWRlcGxveVwiIGRpc2FibGVkIC8+XG4gICAgICAgICAgICAgICAgPEFjdGlvbkJ0biBrPVwieFwiIGxhYmVsPVwicmVib290XCIgZGlzYWJsZWQgLz5cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7LyogTG9ncyAqL31cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfSBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19Pntzb3VyY2VOYW1lIHx8ICdsb2dzJ30gPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+dGFpbCBcdTAwQjcge2RldmljZS5kZXZpY2V9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICB7c291cmNlQ291bnQgPiAxICYmIGFjdGl2ZVNvdXJjZUluZGV4ID49IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VwIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWN0aXZlU291cmNlSW5kZXggKyAxfS97c291cmNlQ291bnR9eycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLm1hZ2VudGF9Pmw8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge2ZpbHRlckVuYWJsZWQgJiYgRklMVEVSX0xBQkVMW2xldmVsRmlsdGVyXSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZXAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubWFnZW50YX0+e0ZJTFRFUl9MQUJFTFtsZXZlbEZpbHRlcl19PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHshZmlsdGVyRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZXAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+c2V0IGEgcGF0dGVybiB0byBmaWx0ZXIgYnkgbGV2ZWw8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17bG9nU3RhdHVzTGFiZWwuY29sb3J9Plx1MjVDRiB7bG9nU3RhdHVzTGFiZWwudGV4dH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgICAgICB7dmlzaWJsZUxvZ3MubGVuZ3RoID09PSAwICYmIG9ubGluZSAmJiAhbG9nRXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+d2FpdGluZyBmb3IgbG9nIHN0cmVhbVx1MjAyNjwvVGV4dD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHt2aXNpYmxlTG9ncy5tYXAoKHsgbGluZSwgcGFyc2VkIH0sIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPExvZ0xpbmVSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7ZmlsdGVyZWRMaW5lcy5sZW5ndGggLSB2aXNpYmxlTG9ncy5sZW5ndGggKyBpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PXtsaW5lLnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQ9e3BhcnNlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L1BhbmVsPlxuICAgICk7XG59XG4iLCAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZURldmljZUFQSSB9IGZyb20gJy4uLy4uLy4uL2xpYi9kZXZpY2UtYXBpLmpzJztcbmltcG9ydCB7IEZBTExCQUNLX0xPR1NfQ09NTUFORCB9IGZyb20gJy4uLy4uLy4uL2xpYi9wcm9kdWN0L2xvZ3MuanMnO1xuXG5jb25zdCBNQVhfTElORVMgPSA1MDA7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMb2dzKHsgZGV2aWNlSWQsIG9ubGluZSwgcGF1c2VkLCBjb21tYW5kIH0pIHtcbiAgICBjb25zdCBbbGluZXMsIHNldExpbmVzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGUoJ2lkbGUnKTsgLy8gaWRsZSB8IGNvbm5lY3RpbmcgfCBzdHJlYW1pbmcgfCBlbmRlZCB8IGVycm9yXG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBidWZmZXJSZWYgPSB1c2VSZWYoW10pO1xuICAgIGNvbnN0IHJlbWFpbmRlclJlZiA9IHVzZVJlZignJyk7XG5cbiAgICBjb25zdCBjbGVhciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgYnVmZmVyUmVmLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgcmVtYWluZGVyUmVmLmN1cnJlbnQgPSAnJztcbiAgICAgICAgc2V0TGluZXMoW10pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZUNtZCA9IGNvbW1hbmQgfHwgRkFMTEJBQ0tfTE9HU19DT01NQU5EO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgYnVmZmVyUmVmLmN1cnJlbnQgPSBbXTtcbiAgICAgICAgcmVtYWluZGVyUmVmLmN1cnJlbnQgPSAnJztcbiAgICAgICAgc2V0TGluZXMoW10pO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBpZiAoIWRldmljZUlkKSB7XG4gICAgICAgICAgICBzZXRTdGF0dXMoJ2lkbGUnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9ubGluZSkge1xuICAgICAgICAgICAgc2V0U3RhdHVzKCdpZGxlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdXNlZCkge1xuICAgICAgICAgICAgc2V0U3RhdHVzKCdpZGxlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2FuY2VsRm4gPSBudWxsO1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHNldFN0YXR1cygnY29ubmVjdGluZycpO1xuXG4gICAgICAgIGZ1bmN0aW9uIHB1c2hDaHVuayhjaHVuaywgc3RyZWFtTGFiZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSByZW1haW5kZXJSZWYuY3VycmVudCArIGNodW5rO1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHJlbWFpbmRlclJlZi5jdXJyZW50ID0gcGFydHMucG9wKCkgPz8gJyc7XG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gWy4uLmJ1ZmZlclJlZi5jdXJyZW50XTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbG4gb2YgcGFydHMpIHtcbiAgICAgICAgICAgICAgICBuZXh0LnB1c2goeyB0ZXh0OiBsbiwgc3RyZWFtOiBzdHJlYW1MYWJlbCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Lmxlbmd0aCA+IE1BWF9MSU5FUykgbmV4dC5zcGxpY2UoMCwgbmV4dC5sZW5ndGggLSBNQVhfTElORVMpO1xuICAgICAgICAgICAgYnVmZmVyUmVmLmN1cnJlbnQgPSBuZXh0O1xuICAgICAgICAgICAgc2V0TGluZXMobmV4dCk7XG4gICAgICAgICAgICBzZXRTdGF0dXMoJ3N0cmVhbWluZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gY3JlYXRlRGV2aWNlQVBJKGRldmljZUlkKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGkuZXhlY1N0cmVhbShlZmZlY3RpdmVDbWQsIHtcbiAgICAgICAgICAgICAgICAgICAgb25TdGRvdXQ6IChzKSA9PiAhY2FuY2VsbGVkICYmIHB1c2hDaHVuayhzLCAnb3V0JyksXG4gICAgICAgICAgICAgICAgICAgIG9uU3RkZXJyOiAocykgPT4gIWNhbmNlbGxlZCAmJiBwdXNoQ2h1bmsocywgJ2VycicpLFxuICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKGZuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxGbiA9IGZuO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRpbWVkT3V0KSBzZXRFcnJvcignbG9nIHN0cmVhbSB0aW1lZCBvdXQnKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuZXhpdENvZGUgIT0gbnVsbCAmJiByZXN1bHQuZXhpdENvZGUgIT09IDApXG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yKGBsb2cgc3RyZWFtIGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuZXhpdENvZGV9YCk7XG4gICAgICAgICAgICAgICAgc2V0U3RhdHVzKCdlbmRlZCcpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpKTtcbiAgICAgICAgICAgICAgICBzZXRTdGF0dXMoJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoY2FuY2VsRm4pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxGbigpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW2RldmljZUlkLCBvbmxpbmUsIHBhdXNlZCwgZWZmZWN0aXZlQ21kXSk7XG5cbiAgICByZXR1cm4geyBsaW5lcywgc3RhdHVzLCBlcnJvciwgY2xlYXIgfTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJy4uL2xpYi9mb2N1cy5qcyc7XG5cbmNvbnN0IFBBR0UgPSAxMjtcblxuY29uc3QgSElOVCA9IFtcbiAgICB7IGs6ICdcdTIxOTFcdTIxOTMnLCBsYWJlbDogJ21vdmUnIH0sXG4gICAgeyBrOiAnZW50ZXInLCBsYWJlbDogJ3BpY2snIH0sXG4gICAgeyBrOiAnZXNjJywgbGFiZWw6ICdjYW5jZWwnIH0sXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gRGV2aWNlUGlja2VyTW9kYWwoeyB0aXRsZSwgZGV2aWNlcywgb25TZWxlY3QsIG9uQ2FuY2VsIH0pIHtcbiAgICBjb25zdCBzb3J0ZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIFsuLi4oZGV2aWNlcyB8fCBbXSldLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFvID0gYS5jb25uZWN0aW9uPy5hY3RpdmUgPyAwIDogMTtcbiAgICAgICAgICAgIGNvbnN0IGJvID0gYi5jb25uZWN0aW9uPy5hY3RpdmUgPyAwIDogMTtcbiAgICAgICAgICAgIGlmIChhbyAhPT0gYm8pIHJldHVybiBhbyAtIGJvO1xuICAgICAgICAgICAgcmV0dXJuIChhLmRldmljZSB8fCAnJykubG9jYWxlQ29tcGFyZShiLmRldmljZSB8fCAnJyk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtkZXZpY2VzXSk7XG5cbiAgICBjb25zdCBbZmlsdGVyLCBzZXRGaWx0ZXJdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSB1c2VTdGF0ZSgwKTtcblxuICAgIGNvbnN0IGZpbHRlcmVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghZmlsdGVyKSByZXR1cm4gc29ydGVkO1xuICAgICAgICBjb25zdCBxID0gZmlsdGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBzb3J0ZWQuZmlsdGVyKFxuICAgICAgICAgICAgKGQpID0+XG4gICAgICAgICAgICAgICAgZC5kZXZpY2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSB8fFxuICAgICAgICAgICAgICAgIChkLm5hbWUgJiYgZC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkpLFxuICAgICAgICApO1xuICAgIH0sIFtzb3J0ZWQsIGZpbHRlcl0pO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlQ3Vyc29yID0gTWF0aC5taW4oY3Vyc29yLCBNYXRoLm1heCgwLCBmaWx0ZXJlZC5sZW5ndGggLSAxKSk7XG4gICAgY29uc3Qgdmlld1N0YXJ0ID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIE1hdGgubWluKGVmZmVjdGl2ZUN1cnNvciAtIE1hdGguZmxvb3IoUEFHRSAvIDIpLCBNYXRoLm1heCgwLCBmaWx0ZXJlZC5sZW5ndGggLSBQQUdFKSksXG4gICAgKTtcbiAgICBjb25zdCB2aWV3U2xpY2UgPSBmaWx0ZXJlZC5zbGljZSh2aWV3U3RhcnQsIHZpZXdTdGFydCArIFBBR0UpO1xuXG4gICAgdXNlTW9kYWwoXG4gICAgICAgIChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5LmVzY2FwZSkge1xuICAgICAgICAgICAgICAgIG9uQ2FuY2VsPy4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2sgPSBmaWx0ZXJlZFtlZmZlY3RpdmVDdXJzb3JdO1xuICAgICAgICAgICAgICAgIGlmIChwaWNrKSBvblNlbGVjdD8uKHBpY2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkudXBBcnJvdykge1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gTWF0aC5tYXgoMCwgYyAtIDEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5LmRvd25BcnJvdykge1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gTWF0aC5taW4oZmlsdGVyZWQubGVuZ3RoIC0gMSwgYyArIDEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5LmJhY2tzcGFjZSB8fCBrZXkuZGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0RmlsdGVyKChmKSA9PiBmLnNsaWNlKDAsIC0xKSk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dCAmJiAha2V5LmN0cmwgJiYgIWtleS5tZXRhICYmIGlucHV0Lmxlbmd0aCA9PT0gMSAmJiBpbnB1dCA+PSAnICcpIHtcbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXIoKGYpID0+IGYgKyBpbnB1dCk7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IGhpbnQ6IEhJTlQgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveFxuICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj17dGhlbWUuYm9yZGVyRm9jdXN9XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e3RoZW1lLm92ZXJsYXlCZ31cbiAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgcGFkZGluZ1k9ezF9XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgICAgIHdpZHRoPXs2NH1cbiAgICAgICAgPlxuICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHt0aXRsZSB8fCAnUElDSyBBIERFVklDRSd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+XG4gICAgICAgICAgICAgICAgICAgIHtmaWx0ZXJlZC5sZW5ndGh9L3tzb3J0ZWQubGVuZ3RofVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5maWx0ZXI6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntmaWx0ZXIgfHwgJyAnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBpbnZlcnNlPlxuICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7ZmlsdGVyZWQubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+bm8gbWF0Y2hpbmcgZGV2aWNlczwvVGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7dmlld1NsaWNlLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFic0lkeCA9IHZpZXdTdGFydCArIGk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNGb2N1c2VkID0gYWJzSWR4ID09PSBlZmZlY3RpdmVDdXJzb3I7XG4gICAgICAgICAgICAgICAgY29uc3Qgb25saW5lID0gISFkLmNvbm5lY3Rpb24/LmFjdGl2ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17ZC5kZXZpY2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2lzRm9jdXNlZCA/IHRoZW1lLmFjY2VudCA6IHRoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNGb2N1c2VkID8gJ1x1MjVCNicgOiAnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17b25saW5lID8gdGhlbWUubGltZSA6IHRoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b25saW5lID8gJ1x1MjVDRicgOiAnXHUyNUNCJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc0ZvY3VzZWQgPyB0aGVtZS5mZyA6IHRoZW1lLmZnRGltfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2QuZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZC5uYW1lID8gYCAgKCR7ZC5uYW1lfSlgIDogJyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+XHUyMTkxXHUyMTkzIG1vdmUgXHUwMEI3IGVudGVyIHBpY2sgXHUwMEI3IGVzYyBjYW5jZWw8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHtcbiAgICBjcmVhdGVDb250ZXh0LFxuICAgIHVzZUNhbGxiYWNrLFxuICAgIHVzZUNvbnRleHQsXG4gICAgdXNlRWZmZWN0LFxuICAgIHVzZU1lbW8sXG4gICAgdXNlUmVmLFxuICAgIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VJbnB1dCB9IGZyb20gJ2luayc7XG5cbi8vIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIFwid2hhdCBpcyBmb2N1c2VkXCIgYW5kIFwid2hhdCBvdmVybGF5cyBvd24gaW5wdXRcIi5cbi8vXG4vLyBUd28gcHJpbWl0aXZlczpcbi8vICAgdXNlRm9jdXNhYmxlKHsgaWQsIHBhcmVudCwgaGFuZGxlcnMsIGhpbnQsIHdoZW4gfSkgXHUyMDE0IHJlZ2lzdGVycyBhblxuLy8gICAgIGludGVyYWN0aXZlIGFyZWEuIGBwYXJlbnRgIGdyb3VwcyBmb2N1c2FibGVzIChlLmcuIGFsbCBwYW5lbHMgb2YgdGhlXG4vLyAgICAgb3ZlcnZpZXcgdGFiKTsgb25seSBvbmUgZm9jdXNhYmxlIHBlciBncm91cCBpcyBmb2N1c2VkIGF0IGEgdGltZS5cbi8vICAgdXNlTW9kYWwoaGFuZGxlciwgeyB3aGVuLCBoaW50IH0pIFx1MjAxNCBwdXNoZXMgb250byBhIG1vZGFsIHN0YWNrLiBXaGlsZVxuLy8gICAgIGFueXRoaW5nIGlzIG9uIHRoZSBzdGFjaywgbm8gdXNlRm9jdXNhYmxlIGhhbmRsZXJzIHJ1bjsgdGhlIHRvcG1vc3Rcbi8vICAgICBtb2RhbCBvd25zIGlucHV0IGFuZCBpdHMgaGludHMgc3VyZmFjZSBpbiB0aGUgZm9vdGVyLlxuLy9cbi8vIGB1c2VUYWJDeWNsZShwYXJlbnQpYCBtb3VudHMgb25jZSBuZWFyIHRoZSBncm91cCByb290IGFuZCBoYW5kbGVzXG4vLyB0YWIvc2hpZnQtdGFiLiBgdXNlRm9jdXNIaW50cyhwYXJlbnQpYCBleHBvc2VzIHRoZSBjdXJyZW50bHkgYWN0aXZlIGhpbnRzXG4vLyB0byB0aGUgZm9vdGVyIFx1MjAxNCBubyBzdGF0aWMgaGludCB0YWJsZSB0byBtYWludGFpbiBhbG9uZ3NpZGUgaGFuZGxlcnMuXG4vL1xuLy8gSW50ZXJuYWxseSB3ZSBzcGxpdCB0aGUgY29udGV4dCBpbiB0d28gc28gdGhhdDpcbi8vICAgLSBEaXNwYXRjaEN0eCBob2xkcyBzdGFibGUgY2FsbGJhY2tzIChyZWdpc3RlciwgZm9jdXMsIGN5Y2xlLCAuLi4pLlxuLy8gICAgIENvbXBvbmVudHMgZGVwZW5kaW5nIG9ubHkgb24gdGhlc2UgKGVmZmVjdHMgdGhhdCByZWdpc3Rlci91bnJlZ2lzdGVyKVxuLy8gICAgIGRvbid0IHJlLXJ1biB3aGVuIGZvY3VzIGNoYW5nZXMuXG4vLyAgIC0gU2lnbmFsQ3R4IGV4cG9zZXMgYSB0aWNrIHRoYXQgZmxpcHMgb24gZXZlcnkgZm9jdXMgY2hhbmdlLiBDb21wb25lbnRzXG4vLyAgICAgcmVhZGluZyBmb2N1cyBzdGF0ZSAoc2VsZWN0b3JzKSBzdWJzY3JpYmUgdG8gdGhpcyBjdHggYW5kIHJlLXJlbmRlclxuLy8gICAgIHdoZW4gdGhlIHRpY2sgYWR2YW5jZXMuXG5cbmNvbnN0IERpc3BhdGNoQ3R4ID0gY3JlYXRlQ29udGV4dChudWxsKTtcbmNvbnN0IFNpZ25hbEN0eCA9IGNyZWF0ZUNvbnRleHQoMCk7XG5cbmZ1bmN0aW9uIHVzZURpc3BhdGNoKCkge1xuICAgIGNvbnN0IGQgPSB1c2VDb250ZXh0KERpc3BhdGNoQ3R4KTtcbiAgICBpZiAoIWQpIHRocm93IG5ldyBFcnJvcignRm9jdXNQcm92aWRlciBtaXNzaW5nIFx1MjAxNCB3cmFwIHRoZSBkYXNoYm9hcmQgdHJlZS4nKTtcbiAgICByZXR1cm4gZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZvY3VzUHJvdmlkZXIoeyBjaGlsZHJlbiB9KSB7XG4gICAgY29uc3QgZm9jdXNhYmxlc1JlZiA9IHVzZVJlZihuZXcgTWFwKCkpOyAvLyBpZCBcdTIxOTIgeyBpZCwgcGFyZW50LCBoYW5kbGVyc1JlZiwgaGludFJlZiwgb3JkZXIgfVxuICAgIGNvbnN0IGZvY3VzZWRSZWYgPSB1c2VSZWYobmV3IE1hcCgpKTsgLy8gcGFyZW50IFx1MjE5MiBpZFxuICAgIGNvbnN0IG1vZGFsc1JlZiA9IHVzZVJlZihbXSk7IC8vIFt7IGhhbmRsZXJSZWYsIGhpbnRSZWYgfV1cbiAgICBjb25zdCBvcmRlclJlZiA9IHVzZVJlZigwKTtcbiAgICBjb25zdCBbdGljaywgc2V0VGlja10gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCByZXJlbmRlciA9IHVzZUNhbGxiYWNrKCgpID0+IHNldFRpY2soKHQpID0+IHQgKyAxKSwgW10pO1xuXG4gICAgLy8gRGlzcGF0Y2ggaXMgc3RhYmxlIFx1MjAxNCByZWZlcmVuY2luZyBvbmx5IGByZXJlbmRlcmAgd2hpY2ggaXMgaXRzZWxmXG4gICAgLy8gc3RhYmxlLiBFZmZlY3RzIHRoYXQgZGVwZW5kIG9uIGRpc3BhdGNoIGRvbid0IHJlLXJ1biBvbiBmb2N1c1xuICAgIC8vIGNoYW5nZXM7IG9ubHkgb24gcHJvdmlkZXIgbW91bnQuXG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVnaXN0ZXIgPSAoZW50cnkpID0+IHtcbiAgICAgICAgICAgIGZvY3VzYWJsZXNSZWYuY3VycmVudC5zZXQoZW50cnkuaWQsIHtcbiAgICAgICAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICAgICAgICBvcmRlcjogb3JkZXJSZWYuY3VycmVudCsrLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWZvY3VzZWRSZWYuY3VycmVudC5oYXMoZW50cnkucGFyZW50KSkge1xuICAgICAgICAgICAgICAgIGZvY3VzZWRSZWYuY3VycmVudC5zZXQoZW50cnkucGFyZW50LCBlbnRyeS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXJlbmRlcigpO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb2N1c2FibGVzUmVmLmN1cnJlbnQuZGVsZXRlKGVudHJ5LmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZFJlZi5jdXJyZW50LmdldChlbnRyeS5wYXJlbnQpID09PSBlbnRyeS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWJsaW5nID0gWy4uLmZvY3VzYWJsZXNSZWYuY3VycmVudC52YWx1ZXMoKV0uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChlKSA9PiBlLnBhcmVudCA9PT0gZW50cnkucGFyZW50LFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2libGluZykgZm9jdXNlZFJlZi5jdXJyZW50LnNldChlbnRyeS5wYXJlbnQsIHNpYmxpbmcuaWQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGZvY3VzZWRSZWYuY3VycmVudC5kZWxldGUoZW50cnkucGFyZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVyZW5kZXIoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZm9jdXMgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZm9jdXNhYmxlc1JlZi5jdXJyZW50LmdldChpZCk7XG4gICAgICAgICAgICBpZiAoIWVudHJ5KSByZXR1cm47XG4gICAgICAgICAgICBmb2N1c2VkUmVmLmN1cnJlbnQuc2V0KGVudHJ5LnBhcmVudCwgaWQpO1xuICAgICAgICAgICAgcmVyZW5kZXIoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjeWNsZSA9IChkaXJlY3Rpb24sIHBhcmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2libGluZ3MgPSBbLi4uZm9jdXNhYmxlc1JlZi5jdXJyZW50LnZhbHVlcygpXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGUpID0+IGUucGFyZW50ID09PSBwYXJlbnQpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgICAgICAgICAgIGlmIChzaWJsaW5ncy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGN1cklkID0gZm9jdXNlZFJlZi5jdXJyZW50LmdldChwYXJlbnQpO1xuICAgICAgICAgICAgY29uc3QgaSA9IHNpYmxpbmdzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gY3VySWQpO1xuICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBkaXJlY3Rpb24gPT09ICdwcmV2JyA/IC0xIDogMTtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBzaWJsaW5nc1soaSArIGRlbHRhICsgc2libGluZ3MubGVuZ3RoKSAlIHNpYmxpbmdzLmxlbmd0aF07XG4gICAgICAgICAgICBmb2N1c2VkUmVmLmN1cnJlbnQuc2V0KHBhcmVudCwgbmV4dC5pZCk7XG4gICAgICAgICAgICByZXJlbmRlcigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHB1c2hNb2RhbCA9IChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgbW9kYWxzUmVmLmN1cnJlbnQucHVzaChlbnRyeSk7XG4gICAgICAgICAgICByZXJlbmRlcigpO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBtb2RhbHNSZWYuY3VycmVudCA9IG1vZGFsc1JlZi5jdXJyZW50LmZpbHRlcigobSkgPT4gbSAhPT0gZW50cnkpO1xuICAgICAgICAgICAgICAgIHJlcmVuZGVyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFNlbGVjdG9ycyByZWFkIGZyb20gcmVmcy4gVGhleSdyZSBjaGVhcCBhbmQgZG9uJ3QgYWxsb2NhdGUuXG4gICAgICAgIGNvbnN0IGlzRm9jdXNlZCA9IChpZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBmb2N1c2FibGVzUmVmLmN1cnJlbnQuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmICghZW50cnkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChtb2RhbHNSZWYuY3VycmVudC5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gZm9jdXNlZFJlZi5jdXJyZW50LmdldChlbnRyeS5wYXJlbnQpID09PSBpZDtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdG9wTW9kYWwgPSAoKSA9PlxuICAgICAgICAgICAgbW9kYWxzUmVmLmN1cnJlbnQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gbW9kYWxzUmVmLmN1cnJlbnRbbW9kYWxzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IGlzTW9kYWxBY3RpdmUgPSAoKSA9PiBtb2RhbHNSZWYuY3VycmVudC5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBmb2N1c2VkSGludEZvciA9IChwYXJlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZm9jdXNlZFJlZi5jdXJyZW50LmdldChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGZvY3VzYWJsZXNSZWYuY3VycmVudC5nZXQoaWQpO1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5Py5oaW50UmVmPy5jdXJyZW50ID8/IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlZ2lzdGVyLFxuICAgICAgICAgICAgZm9jdXMsXG4gICAgICAgICAgICBjeWNsZSxcbiAgICAgICAgICAgIHB1c2hNb2RhbCxcbiAgICAgICAgICAgIGlzRm9jdXNlZCxcbiAgICAgICAgICAgIHRvcE1vZGFsLFxuICAgICAgICAgICAgaXNNb2RhbEFjdGl2ZSxcbiAgICAgICAgICAgIGZvY3VzZWRIaW50Rm9yLFxuICAgICAgICB9O1xuICAgIH0sIFtyZXJlbmRlcl0pO1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIERpc3BhdGNoQ3R4LlByb3ZpZGVyLFxuICAgICAgICB7IHZhbHVlOiBkaXNwYXRjaCB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZ25hbEN0eC5Qcm92aWRlciwgeyB2YWx1ZTogdGljayB9LCBjaGlsZHJlbiksXG4gICAgKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhbiBpbnRlcmFjdGl2ZSBhcmVhLlxuICpcbiAqIEhpbnRzIGFyZSByZWFkIHRocm91Z2ggYSByZWYgc28gY2FsbGVycyBjYW4gcGFzcyBkeW5hbWljIGFycmF5cyB3aXRob3V0XG4gKiBmb3JjaW5nIHRoZSByZWdpc3RyeSB0byByZS1hZGQgdGhlIGVudHJ5IG9uIGV2ZXJ5IHJlbmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZvY3VzYWJsZSh7IGlkLCBwYXJlbnQsIGhhbmRsZXJzLCBoaW50LCB3aGVuID0gdHJ1ZSB9KSB7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICAgIC8vIFN1YnNjcmliZSB0byBmb2N1cyBjaGFuZ2VzOiByZS1yZW5kZXIgd2hlbiB0aGUgc2lnbmFsIGFkdmFuY2VzLlxuICAgIHVzZUNvbnRleHQoU2lnbmFsQ3R4KTtcblxuICAgIGNvbnN0IGhhbmRsZXJzUmVmID0gdXNlUmVmKGhhbmRsZXJzKTtcbiAgICBjb25zdCBoaW50UmVmID0gdXNlUmVmKGhpbnQpO1xuICAgIGhhbmRsZXJzUmVmLmN1cnJlbnQgPSBoYW5kbGVycztcbiAgICBoaW50UmVmLmN1cnJlbnQgPSBoaW50O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCF3aGVuKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gucmVnaXN0ZXIoeyBpZCwgcGFyZW50LCBoYW5kbGVyc1JlZiwgaGludFJlZiB9KTtcbiAgICB9LCBbZGlzcGF0Y2gsIGlkLCBwYXJlbnQsIHdoZW5dKTtcblxuICAgIGNvbnN0IGZvY3VzZWQgPSBkaXNwYXRjaC5pc0ZvY3VzZWQoaWQpO1xuXG4gICAgdXNlSW5wdXQoXG4gICAgICAgIChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmbiA9IGhhbmRsZXJzUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSBmbihpbnB1dCwga2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpc0FjdGl2ZTogd2hlbiAmJiBmb2N1c2VkIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGZvY3VzU2VsZiA9IHVzZUNhbGxiYWNrKCgpID0+IGRpc3BhdGNoLmZvY3VzKGlkKSwgW2Rpc3BhdGNoLCBpZF0pO1xuICAgIHJldHVybiB7IGZvY3VzZWQsIGZvY3VzOiBmb2N1c1NlbGYgfTtcbn1cblxuLyoqXG4gKiBQdXNoIGEgbW9kYWwgb250byB0aGUgaW5wdXQgc3RhY2suIFdoaWxlIHRvcG1vc3QsIHRoaXMgaGFuZGxlciBvd25zIGlucHV0XG4gKiBhbmQgYWxsIHVzZUZvY3VzYWJsZSBzaWJsaW5ncyBzdG9wIHJlY2VpdmluZyBrZXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTW9kYWwoaGFuZGxlciwgeyB3aGVuID0gdHJ1ZSwgaGludCB9ID0ge30pIHtcbiAgICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gICAgdXNlQ29udGV4dChTaWduYWxDdHgpOyAvLyByZS1yZW5kZXIgd2hlbiBzdGFjayBjaGFuZ2VzXG5cbiAgICBjb25zdCBoYW5kbGVyUmVmID0gdXNlUmVmKGhhbmRsZXIpO1xuICAgIGNvbnN0IGhpbnRSZWYgPSB1c2VSZWYoaGludCk7XG4gICAgY29uc3QgZW50cnlSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgaGFuZGxlclJlZi5jdXJyZW50ID0gaGFuZGxlcjtcbiAgICBoaW50UmVmLmN1cnJlbnQgPSBoaW50O1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCF3aGVuKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHsgaGFuZGxlclJlZiwgaGludFJlZiB9O1xuICAgICAgICBlbnRyeVJlZi5jdXJyZW50ID0gZW50cnk7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaC5wdXNoTW9kYWwoZW50cnkpO1xuICAgIH0sIFtkaXNwYXRjaCwgd2hlbl0pO1xuXG4gICAgY29uc3QgaXNUb3AgPSBkaXNwYXRjaC50b3BNb2RhbCgpID09PSBlbnRyeVJlZi5jdXJyZW50O1xuICAgIHVzZUlucHV0KFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm4gPSBoYW5kbGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSBmbihpbnB1dCwga2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpc0FjdGl2ZTogd2hlbiAmJiBpc1RvcCB9LFxuICAgICk7XG59XG5cbi8qKlxuICogVGFiL3NoaWZ0LXRhYiBjeWNsZSB3aXRoaW4gYSBwYXJlbnQgZ3JvdXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VUYWJDeWNsZShwYXJlbnQsIHsgd2hlbiA9IHRydWUgfSA9IHt9KSB7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICAgIHVzZUNvbnRleHQoU2lnbmFsQ3R4KTtcbiAgICBjb25zdCBpc01vZGFsID0gZGlzcGF0Y2guaXNNb2RhbEFjdGl2ZSgpO1xuICAgIHVzZUlucHV0KFxuICAgICAgICAoX2lucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICgha2V5LnRhYikgcmV0dXJuO1xuICAgICAgICAgICAgZGlzcGF0Y2guY3ljbGUoa2V5LnNoaWZ0ID8gJ3ByZXYnIDogJ25leHQnLCBwYXJlbnQpO1xuICAgICAgICB9LFxuICAgICAgICB7IGlzQWN0aXZlOiB3aGVuICYmICFpc01vZGFsIH0sXG4gICAgKTtcbn1cblxuLyoqXG4gKiBGb290ZXIgaGludHMgZm9yIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBmb2N1c2FibGUgaW4gYHBhcmVudGAuIEZhbGxzIGJhY2tcbiAqIHRvIHRoZSB0b3Btb3N0IG1vZGFsJ3MgaGludCB3aGVuIGFuIG92ZXJsYXkgb3ducyBpbnB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZvY3VzSGludHMocGFyZW50KSB7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICAgIHVzZUNvbnRleHQoU2lnbmFsQ3R4KTtcbiAgICBjb25zdCB0b3AgPSBkaXNwYXRjaC50b3BNb2RhbCgpO1xuICAgIGlmICh0b3A/LmhpbnRSZWY/LmN1cnJlbnQpIHJldHVybiB0b3AuaGludFJlZi5jdXJyZW50O1xuICAgIHJldHVybiBkaXNwYXRjaC5mb2N1c2VkSGludEZvcihwYXJlbnQpIHx8IFtdO1xufVxuXG4vKipcbiAqIEdsb2JhbCBrZXlzIHRoYXQgYWx3YXlzIHdvcmsgd2hlbiBubyBtb2RhbCBpcyBhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VHbG9iYWxLZXlzKGhhbmRsZXIsIHsgd2hlbiA9IHRydWUgfSA9IHt9KSB7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICAgIHVzZUNvbnRleHQoU2lnbmFsQ3R4KTtcbiAgICBjb25zdCBpc01vZGFsID0gZGlzcGF0Y2guaXNNb2RhbEFjdGl2ZSgpO1xuICAgIGNvbnN0IHJlZiA9IHVzZVJlZihoYW5kbGVyKTtcbiAgICByZWYuY3VycmVudCA9IGhhbmRsZXI7XG4gICAgdXNlSW5wdXQoXG4gICAgICAgIChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmbiA9IHJlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykgZm4oaW5wdXQsIGtleSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgaXNBY3RpdmU6IHdoZW4gJiYgIWlzTW9kYWwgfSxcbiAgICApO1xufVxuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZVN0ZG91dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSAnLi9QYW5lbC5qc3gnO1xuaW1wb3J0IHsgU3BhcmtsaW5lIH0gZnJvbSAnLi9TcGFya2xpbmUuanN4JztcbmltcG9ydCB7IEJhciwgY29sb3JGb3JQY3QgfSBmcm9tICcuL1NwYXJrbGluZS5qc3gnO1xuaW1wb3J0IHsgRGV2aWNlc1BhbmVsIH0gZnJvbSAnLi9EZXZpY2VzUGFuZWwuanN4JztcbmltcG9ydCB7XG4gICAgZmxlZXRDb3VudHMsXG4gICAgYWdlbnRWZXJzaW9uQ291bnRzLFxuICAgIGNvbXBhcmVBZ2VudFZlcnNpb25zLFxuICAgIGRldmljZUtpbmRDb3VudHMsXG4gICAgVU5BU1NJR05FRF9QUk9EVUNUX0tFWSxcbn0gZnJvbSAnLi4vbGliL3N0YXR1cy5qcyc7XG5pbXBvcnQgeyBBTEFSTV9TRVZFUklUWSwgQUxBUk1fU1RBVEUgfSBmcm9tICcuLi8uLi8uLi9saWIvYWxhcm1zLmpzJztcbmltcG9ydCB7IHVzZUZvY3VzYWJsZSwgdXNlVGFiQ3ljbGUgfSBmcm9tICcuLi9saWIvZm9jdXMuanMnO1xuXG5jb25zdCBGTEVFVF9ISU5UID0gW1xuICAgIHsgazogJzEtNScsIGxhYmVsOiAndGFicycgfSxcbiAgICB7IGs6ICd0YWInLCBsYWJlbDogJ3BhbmVsJyB9LFxuICAgIHsgazogJ1x1MjE5MVx1MjE5MycsIGxhYmVsOiAnbmF2JyB9LFxuICAgIHsgazogJ3MnLCBsYWJlbDogJ3NvcnQnIH0sXG4gICAgeyBrOiAnLycsIGxhYmVsOiAnZmlsdGVyJyB9LFxuICAgIHsgazogJ2VudGVyJywgbGFiZWw6ICdkZXRhaWwnIH0sXG4gICAgeyBrOiAncScsIGxhYmVsOiAncXVpdCcgfSxcbl07XG5cbmNvbnN0IEFMRVJUU19ISU5UID0gW1xuICAgIHsgazogJzEtNScsIGxhYmVsOiAndGFicycgfSxcbiAgICB7IGs6ICd0YWInLCBsYWJlbDogJ3BhbmVsJyB9LFxuICAgIHsgazogJ3YnLCBsYWJlbDogJ3ZpZXcnIH0sXG4gICAgeyBrOiAncScsIGxhYmVsOiAncXVpdCcgfSxcbl07XG5cbmNvbnN0IFZFUlNJT05TX0hJTlQgPSBbXG4gICAgeyBrOiAnMS01JywgbGFiZWw6ICd0YWJzJyB9LFxuICAgIHsgazogJ3RhYicsIGxhYmVsOiAncGFuZWwnIH0sXG4gICAgeyBrOiAndScsIGxhYmVsOiAndXBncmFkZScgfSxcbiAgICB7IGs6ICdxJywgbGFiZWw6ICdxdWl0JyB9LFxuXTtcblxuY29uc3QgTUVUUklDX0xJU1RfSElOVCA9IFtcbiAgICB7IGs6ICcxLTUnLCBsYWJlbDogJ3RhYnMnIH0sXG4gICAgeyBrOiAndGFiJywgbGFiZWw6ICdwYW5lbCcgfSxcbiAgICB7IGs6ICdcdTIxOTFcdTIxOTMnLCBsYWJlbDogJ2J1Y2tldCcgfSxcbiAgICB7IGs6ICdlc2MnLCBsYWJlbDogJ2NsZWFyJyB9LFxuICAgIHsgazogJ3EnLCBsYWJlbDogJ3F1aXQnIH0sXG5dO1xuXG5mdW5jdGlvbiBLcGkoeyBsYWJlbCwgdmFsdWUsIGNvbG9yID0gdGhlbWUuZmcsIHN1ZmZpeCB9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2NvbG9yfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWV9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIHtzdWZmaXggJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntzdWZmaXh9PC9UZXh0Pn1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+e2xhYmVsfTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gTWluaU1ldHJpYyh7IGxhYmVsLCB2YWx1ZSwgaGlzdG9yeSwgY29sb3IgfSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSB2YWx1ZSA9PSBudWxsID8gJ1x1MjAxNCcgOiBgJHtNYXRoLnJvdW5kKHZhbHVlKX0lYDtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17NX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57bGFiZWx9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8QmFyIHZhbHVlPXt2YWx1ZSA/PyAwfSB3aWR0aD17MTB9IGNvbG9yPXtjb2xvckZvclBjdCh2YWx1ZSl9IC8+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezF9PlxuICAgICAgICAgICAgICAgIDxTcGFya2xpbmUgc2VyaWVzPXtoaXN0b3J5fSB3aWR0aD17MTJ9IGNvbG9yPXtjb2xvcn0gLz5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17Nn0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2Rpc3BsYXl9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIFZlcnNpb25CYXIoeyB2LCBjb3VudCwgbWF4LCBsZXZlbCB9KSB7XG4gICAgY29uc3Qgd2lkdGggPSAxNjtcbiAgICBjb25zdCBmaWxsZWQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKChjb3VudCAvIG1heCkgKiB3aWR0aCkpO1xuICAgIC8vIGxldmVsIG1hcHMgc2VtYW50aWMgcm93cyB0byBwYWxldHRlIHNsb3RzOlxuICAgIC8vICAgdGFyZ2V0ICBcdTIxOTIgY3VycmVudC9kZXNpcmVkIHZlcnNpb24gKGxpbWUpXG4gICAgLy8gICBvbGQgICAgIFx1MjE5MiBiZWhpbmQgYnkgb25lIG1pbm9yL3BhdGNoIChhbWJlcilcbiAgICAvLyAgIGFuY2llbnQgXHUyMTkyIG1vcmUgdGhhbiBvbmUgcmVsZWFzZSBiZWhpbmQgKHJlZClcbiAgICBjb25zdCBjb2xvciA9XG4gICAgICAgIGxldmVsID09PSAndGFyZ2V0JyA/IHRoZW1lLmxpbWUgOiBsZXZlbCA9PT0gJ29sZCcgPyB0aGVtZS5hbWJlciA6IHRoZW1lLnJlZDtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17OX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2NvbG9yfT57dn08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtjb2xvcn0+eydcdTI1ODgnLnJlcGVhdChmaWxsZWQpfTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5ib3JkZXJEaW19PnsnXHUyNTkxJy5yZXBlYXQod2lkdGggLSBmaWxsZWQpfTwvVGV4dD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezR9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19Pntjb3VudH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gc2V2ZXJpdHlWaXN1YWwoc2V2KSB7XG4gICAgaWYgKHNldiA9PT0gQUxBUk1fU0VWRVJJVFkuQ1JJVElDQUwgfHwgc2V2ID09PSBBTEFSTV9TRVZFUklUWS5ISUdIKSB7XG4gICAgICAgIHJldHVybiB7IGNvbG9yOiB0aGVtZS5yZWQsIGdseXBoOiAnXHUyNUNGJyB9O1xuICAgIH1cbiAgICBpZiAoc2V2ID09PSBBTEFSTV9TRVZFUklUWS5NRURJVU0pIHJldHVybiB7IGNvbG9yOiB0aGVtZS5hbWJlciwgZ2x5cGg6ICdcdTI1QjInIH07XG4gICAgaWYgKHNldiA9PT0gQUxBUk1fU0VWRVJJVFkuTE9XKSByZXR1cm4geyBjb2xvcjogdGhlbWUuYWNjZW50LCBnbHlwaDogJ2knIH07XG4gICAgcmV0dXJuIHsgY29sb3I6IHRoZW1lLmZnRGltLCBnbHlwaDogJ1x1MDBCNycgfTtcbn1cblxuZnVuY3Rpb24gQWxhcm1Hcm91cFJvdyh7IGdyb3VwLCBub3cgfSkge1xuICAgIGNvbnN0IHsgY29sb3IsIGdseXBoIH0gPSBzZXZlcml0eVZpc3VhbChncm91cC5zZXZlcml0eSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgbWFyZ2luQm90dG9tPXsxfT5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtjb2xvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnbHlwaH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezN9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIiBtYXJnaW5SaWdodD17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtncm91cC5jb3VudH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2dyb3VwLm5hbWV9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezZ9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICB7Z3JvdXAuZGV2aWNlcy5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gc3RhdGVMYWJlbChkLnN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luY2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZC5pbml0aWF0ZWQgIT0gbnVsbCA/IGR1cmF0aW9uTGFiZWwobm93IC0gZC5pbml0aWF0ZWQpIDogJ1x1MjAxNCc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17YCR7ZC5uYW1lfS0ke2l9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0gZmxleEJhc2lzPXswfSBtaW5XaWR0aD17MH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2QubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIiBtYXJnaW5MZWZ0PXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2QudmFsdWUgPyB0aGVtZS5mZyA6IHRoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2QudmFsdWUgfHwgJ1x1MjAxNCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs1fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+e3NpbmNlfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs2fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtzdGF0ZUNvbG9yKGQuc3RhdGUpfT57dGFnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGR1cmF0aW9uTGFiZWwobXMpIHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtcykgfHwgbXMgPCAwKSByZXR1cm4gJ1x1MjAxNCc7XG4gICAgY29uc3QgcyA9IE1hdGguZmxvb3IobXMgLyAxMDAwKTtcbiAgICBpZiAocyA8IDYwKSByZXR1cm4gYCR7c31zYDtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcihzIC8gNjApO1xuICAgIGlmIChtIDwgNjApIHJldHVybiBgJHttfW1gO1xuICAgIGNvbnN0IGggPSBNYXRoLmZsb29yKG0gLyA2MCk7XG4gICAgaWYgKGggPCAyNCkgcmV0dXJuIGAke2h9aGA7XG4gICAgY29uc3QgZCA9IE1hdGguZmxvb3IoaCAvIDI0KTtcbiAgICByZXR1cm4gYCR7ZH1kYDtcbn1cblxuZnVuY3Rpb24gYWN0aXZhdGlvbk1zKGluc3QpIHtcbiAgICBjb25zdCB2ID0gaW5zdD8uYWN0aXZhdGlvbj8uaW5pdGlhdGVkO1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHJldHVybiB2O1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdCA9IERhdGUucGFyc2Uodik7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodCkgPyB0IDogbnVsbDtcbiAgICB9XG4gICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYuJGRhdGUgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIHYuJGRhdGUgPT09ICdudW1iZXInKSByZXR1cm4gdi4kZGF0ZTtcbiAgICAgICAgY29uc3QgdCA9IERhdGUucGFyc2Uodi4kZGF0ZSk7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodCkgPyB0IDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHN0YXRlVGFnKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlID09PSBBTEFSTV9TVEFURS5BQ0tOT1dMRURHRUQpIHJldHVybiAnQUNLJztcbiAgICBpZiAoc3RhdGUgPT09IEFMQVJNX1NUQVRFLkxBVENIRUQpIHJldHVybiAnTEFUQ0gnO1xuICAgIGlmIChzdGF0ZSA9PT0gQUxBUk1fU1RBVEUuU0hFTFZFRCkgcmV0dXJuICdTSEVMVic7XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHN0YXRlTGFiZWwoc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUgPT09IEFMQVJNX1NUQVRFLk5PTkUpIHJldHVybiAnUEVORCc7XG4gICAgaWYgKHN0YXRlID09PSBBTEFSTV9TVEFURS5BQ1RJVkFURUQpIHJldHVybiAnQUNUSVZFJztcbiAgICBpZiAoc3RhdGUgPT09IEFMQVJNX1NUQVRFLkNMRUFSRUQpIHJldHVybiAnQ0xFQVInO1xuICAgIHJldHVybiBzdGF0ZVRhZyhzdGF0ZSkgfHwgJyc7XG59XG5cbmZ1bmN0aW9uIHN0YXRlQ29sb3Ioc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUgPT09IEFMQVJNX1NUQVRFLkFDVElWQVRFRCkgcmV0dXJuIHRoZW1lLnJlZDtcbiAgICBpZiAoXG4gICAgICAgIHN0YXRlID09PSBBTEFSTV9TVEFURS5BQ0tOT1dMRURHRUQgfHxcbiAgICAgICAgc3RhdGUgPT09IEFMQVJNX1NUQVRFLkxBVENIRUQgfHxcbiAgICAgICAgc3RhdGUgPT09IEFMQVJNX1NUQVRFLlNIRUxWRURcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoZW1lLmFtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gdGhlbWUuZmdEaW07XG59XG5cbi8vIFB1bGxzIGEgY29tcGFjdCBkaXNwbGF5IHZhbHVlIGZyb20gYGV2YWx1YXRpb24ubGFzdF92YWx1ZXNgLiBUaGUgbWFwXG4vLyB1c3VhbGx5IGhhcyBhIHNpbmdsZSBrZXkgKHRoZSBmaWVsZCB0aGF0IGRyb3ZlIHRoZSBhbGFybSBydWxlKS4gTnVtYmVyc1xuLy8gaW4gdGhlIDAuLjEwMCByYW5nZSByZW5kZXIgYXMgcGVyY2VudGFnZXMgXHUyMDE0IHRoYXQncyBob3cgZXZlcnkgZGVmYXVsdFxuLy8gbW9uaXRvcmluZyBydWxlIChjcHUvbWVtL2Rpc2svc3dhcCB1c2FnZSkgaXMgcGFyYW1ldGVyaXNlZC5cbmZ1bmN0aW9uIGV2YWx1YXRpb25WYWx1ZShpbnN0KSB7XG4gICAgY29uc3QgbHYgPSBpbnN0Py5ldmFsdWF0aW9uPy5sYXN0X3ZhbHVlcztcbiAgICBpZiAoIWx2IHx8IHR5cGVvZiBsdiAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhsdik7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYXcgPSBsdltrZXlzWzBdXTtcbiAgICBpZiAocmF3ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG4gPSBOdW1iZXIocmF3KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSkgcmV0dXJuIFN0cmluZyhyYXcpO1xuICAgIGlmIChuID49IDAgJiYgbiA8PSAxMDApIHJldHVybiBgJHtNYXRoLnJvdW5kKG4pfSVgO1xuICAgIGlmIChNYXRoLmFicyhuKSA+PSAxMDAwKSByZXR1cm4gbi50b0ZpeGVkKDApO1xuICAgIGlmIChNYXRoLmFicyhuKSA+PSAxMCkgcmV0dXJuIG4udG9GaXhlZCgxKTtcbiAgICByZXR1cm4gbi50b0ZpeGVkKDIpO1xufVxuXG5mdW5jdGlvbiBBbGFybUluc3RhbmNlUm93KHsgaW5zdCwgaG9zdFdpZHRoLCBub3cgfSkge1xuICAgIGNvbnN0IHsgY29sb3IsIGdseXBoIH0gPSBzZXZlcml0eVZpc3VhbChpbnN0LnNldmVyaXR5KTtcbiAgICBjb25zdCBkZXYgPSBpbnN0Lm9yaWdpbj8ubmFtZSB8fCBpbnN0Lm9yaWdpbj8uaWQgfHwgJ1x1MjAxNCc7XG4gICAgY29uc3QgbGFiZWwgPSBpbnN0Lm5hbWUgfHwgaW5zdC5hbGFybT8ucnVsZSB8fCAnYWxhcm0nO1xuICAgIGNvbnN0IGluaXRpYXRlZCA9IGFjdGl2YXRpb25NcyhpbnN0KTtcbiAgICBjb25zdCBzaW5jZSA9IGluaXRpYXRlZCAhPSBudWxsID8gZHVyYXRpb25MYWJlbChub3cgLSBpbml0aWF0ZWQpIDogJ1x1MjAxNCc7XG4gICAgY29uc3QgdmFsdWUgPSBldmFsdWF0aW9uVmFsdWUoaW5zdCk7XG4gICAgY29uc3Qgc3RUYWcgPSBzdGF0ZUxhYmVsKGluc3Quc3RhdGUpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17Y29sb3J9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtnbHlwaH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9e2hvc3RXaWR0aCArIDJ9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICB7ZGV2fVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0gZmxleEJhc2lzPXswfSBtaW5XaWR0aD17MH0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIiBtYXJnaW5MZWZ0PXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dmFsdWUgPyB0aGVtZS5mZyA6IHRoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUgfHwgJ1x1MjAxNCd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs1fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57c2luY2V9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs2fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3N0YXRlQ29sb3IoaW5zdC5zdGF0ZSl9PntzdFRhZ308L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gRXZlbnRSb3coeyBlLCBpc0ZpcnN0IH0pIHtcbiAgICAvLyBgdXBkYCAodXBkYXRlIGFwcGxpZWQpIGlzIGtlcHQgdmlzdWFsbHkgZGlzdGluY3QgZnJvbSBgam9pbmBcbiAgICAvLyAoY29ubmVjdGVkKS4gQm90aCBhcmUgXCJnb29kXCIgb3V0Y29tZXMgYnV0IHRoZXkgbWVhbiBkaWZmZXJlbnQgdGhpbmdzIFx1MjAxNFxuICAgIC8vIHRoZSByb2xsb3V0IGFmdGVybWF0aCB0eXBpY2FsbHkgcHJvZHVjZXMgb25lIG9mIGVhY2ggcGVyIGRldmljZSAoYWdlbnRcbiAgICAvLyBzd2FwcyBiaW5hcnkgXHUyMTkyIExFQVZFIFx1MjE5MiBKT0lOIG9uIHJlY29ubmVjdCwgd2l0aCBteSBzeW50aGV0aWMgVVBEXG4gICAgLy8gdGhyZWFkZWQgaW4gYmV0d2VlbiksIHNvIHNlcGFyYXRlIGNvbG9ycyBrZWVwIHRoZSBsb2cgc2Nhbm5hYmxlLlxuICAgIGNvbnN0IHRhZ0NvbG9yID1cbiAgICAgICAgZS5raW5kID09PSAndXBkJ1xuICAgICAgICAgICAgPyB0aGVtZS5hY2NlbnRcbiAgICAgICAgICAgIDogZS5raW5kID09PSAnam9pbidcbiAgICAgICAgICAgICAgPyB0aGVtZS5saW1lXG4gICAgICAgICAgICAgIDogZS5raW5kID09PSAnbGVhdmUnXG4gICAgICAgICAgICAgICAgPyB0aGVtZS5hbWJlclxuICAgICAgICAgICAgICAgIDogZS5raW5kID09PSAnZXJyJ1xuICAgICAgICAgICAgICAgICAgPyB0aGVtZS5yZWRcbiAgICAgICAgICAgICAgICAgIDogdGhlbWUuYWNjZW50O1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs5fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+e2UudH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezd9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0YWdDb2xvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge2Uua2luZC50b1VwcGVyQ2FzZSgpfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPFRleHQgd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2UuZGV2fTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiB7ZS5tc2d9PC9UZXh0PlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBncm91cE1ldHJpY3NCeVByb2R1Y3QobWV0cmljcykge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IG0gb2YgbWV0cmljcykge1xuICAgICAgICBjb25zdCBrZXkgPSBtLnByb2R1Y3QgfHwgJyc7XG4gICAgICAgIGlmICghbWFwLmhhcyhrZXkpKSBtYXAuc2V0KGtleSwgW10pO1xuICAgICAgICBtYXAuZ2V0KGtleSkucHVzaChtKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5tYXAuZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSkpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNZXRyaWNWYWx1ZSh2LCB1bml0KSB7XG4gICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuICdcdTIwMTQnO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSByZXR1cm4gU3RyaW5nKHYubGVuZ3RoKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShOdW1iZXIodikpKSByZXR1cm4gU3RyaW5nKHYpO1xuICAgIGNvbnN0IG4gPSBOdW1iZXIodik7XG4gICAgY29uc3Qgcm91bmRlZCA9IE1hdGguYWJzKG4pID49IDEwMCA/IE1hdGgucm91bmQobikgOiBNYXRoLnJvdW5kKG4gKiAxMCkgLyAxMDtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByb3VuZGVkLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpO1xuICAgIHJldHVybiB1bml0ID8gYCR7Zm9ybWF0dGVkfSAke3VuaXR9YCA6IGZvcm1hdHRlZDtcbn1cblxuZnVuY3Rpb24gRGlzdHJpYnV0aW9uUm93cyh7IG1ldHJpYywgdmFsdWUsIGxhc3RVcGRhdGUgfSkge1xuICAgIGNvbnN0IGFnZVMgPSBsYXN0VXBkYXRlID8gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIGxhc3RVcGRhdGUpIC8gMTAwMCkgOiBudWxsO1xuICAgIGNvbnN0IGlzUGxhaW5PYmplY3QgPVxuICAgICAgICB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICBjb25zdCBidWNrZXRzID0gaXNQbGFpbk9iamVjdFxuICAgICAgICA/IE9iamVjdC5lbnRyaWVzKHZhbHVlKS5maWx0ZXIoXG4gICAgICAgICAgICAgIChbLCBjXSkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihjKSkgJiYgTnVtYmVyKGMpID4gMCxcbiAgICAgICAgICApXG4gICAgICAgIDogW107XG4gICAgY29uc3QgdG90YWwgPSBidWNrZXRzLnJlZHVjZSgoYWNjLCBbLCBjXSkgPT4gYWNjICsgTnVtYmVyKGMpLCAwKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uYnVja2V0c10uc29ydChcbiAgICAgICAgKGEsIGIpID0+IE51bWJlcihiWzFdKSAtIE51bWJlcihhWzFdKSB8fCBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSksXG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0gZmxleEJhc2lzPXswfSBtaW5XaWR0aD17MH0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge21ldHJpYy5sYWJlbCB8fCBtZXRyaWMubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2FnZVMgPT0gbnVsbCA/ICdcdTIwMTQnIDogYCR7YWdlU31zYH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICB7c29ydGVkLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+bm8gc2FtcGxlcyB5ZXQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtzb3J0ZWQubWFwKChbaywgY10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gTnVtYmVyKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGN0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCA+IDAgPyBNYXRoLnJvdW5kKChjb3VudCAvIHRvdGFsKSAqIDEwMCkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17a30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9IGZsZXhCYXNpcz17MH0gbWluV2lkdGg9ezB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Nn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17NX0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntwY3R9JTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGZsZXhHcm93PXsxfSBmbGV4QmFzaXM9ezB9IG1pbldpZHRoPXswfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PnRvdGFsPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dG90YWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs1fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGJ1Y2tldHNGcm9tVmFsdWUodmFsdWUpIHtcbiAgICBjb25zdCBpc1BsYWluT2JqZWN0ID1cbiAgICAgICAgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KSByZXR1cm4gW107XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKVxuICAgICAgICAuZmlsdGVyKChbLCBjXSkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihjKSkgJiYgTnVtYmVyKGMpID4gMClcbiAgICAgICAgLnNvcnQoXG4gICAgICAgICAgICAoYSwgYikgPT4gTnVtYmVyKGJbMV0pIC0gTnVtYmVyKGFbMV0pIHx8IGFbMF0ubG9jYWxlQ29tcGFyZShiWzBdKSxcbiAgICAgICAgKTtcbn1cblxuLy8gRm9jdXNhYmxlIHBlci1tZXRyaWMgcGFuZWw6IGN1cnNvciB3YWxrcyB0aGUgYnVja2V0cywgdGhlIHNsaWNlIHdpbmRvd1xuLy8ga2VlcHMgdGhlIHNlbGVjdGlvbiB2aXNpYmxlIHdoZW4gdGhlcmUgYXJlIG1vcmUgYnVja2V0cyB0aGFuIHJvd3MsIGFuZFxuLy8gdGhlIGN1cnJlbnQgYnVja2V0IGJ1YmJsZXMgdXAgdmlhIGBvbkJ1Y2tldENoYW5nZWAgc28gdGhlIGRldmljZXMgcGFuZWxcbi8vIGNhbiBmaWx0ZXIgdG8gdGhlIG1hdGNoaW5nIG1hY2hpbmVzLlxuZnVuY3Rpb24gRGlzdHJpYnV0aW9uUGFuZWwoe1xuICAgIG1ldHJpYyxcbiAgICB2YWx1ZSxcbiAgICBsYXN0VXBkYXRlLFxuICAgIHByb2R1Y3RJbmZvLFxuICAgIGFjdGl2ZU1ldHJpY0tleSxcbiAgICBvbkJ1Y2tldENoYW5nZSxcbiAgICBtYXhSb3dzLFxufSkge1xuICAgIGNvbnN0IG1ldHJpY0tleSA9IGAke21ldHJpYy5wcm9kdWN0fToke21ldHJpYy5uYW1lfWA7XG4gICAgY29uc3QgZGlzcGxheSA9IHByb2R1Y3RJbmZvPy5bbWV0cmljLnByb2R1Y3RdPy5uYW1lIHx8IG1ldHJpYy5wcm9kdWN0IHx8ICcnO1xuICAgIGNvbnN0IHNvcnRlZCA9IHVzZU1lbW8oKCkgPT4gYnVja2V0c0Zyb21WYWx1ZSh2YWx1ZSksIFt2YWx1ZV0pO1xuICAgIGNvbnN0IHRvdGFsID0gc29ydGVkLnJlZHVjZSgoYWNjLCBbLCBjXSkgPT4gYWNjICsgTnVtYmVyKGMpLCAwKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRJZHgsIHNldFNlbGVjdGVkSWR4XSA9IHVzZVN0YXRlKC0xKTtcblxuICAgIGNvbnN0IGZvY3VzID0gdXNlRm9jdXNhYmxlKHtcbiAgICAgICAgaWQ6IGBvdmVydmlldy1tZXRyaWMtJHttZXRyaWNLZXl9YCxcbiAgICAgICAgcGFyZW50OiAnb3ZlcnZpZXcnLFxuICAgICAgICBoaW50OiBNRVRSSUNfTElTVF9ISU5ULFxuICAgICAgICBoYW5kbGVyczogKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChzb3J0ZWQubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoa2V5LmVzY2FwZSkge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWR4KC0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5LnVwQXJyb3cpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZElkeCgoY3VyKSA9PlxuICAgICAgICAgICAgICAgICAgICBjdXIgPCAwID8gMCA6IE1hdGgubWF4KDAsIGN1ciAtIDEpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZElkeCgoY3VyKSA9PlxuICAgICAgICAgICAgICAgICAgICBjdXIgPCAwID8gMCA6IE1hdGgubWluKHNvcnRlZC5sZW5ndGggLSAxLCBjdXIgKyAxKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ2cnKSByZXR1cm4gc2V0U2VsZWN0ZWRJZHgoMCk7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICdHJykgcmV0dXJuIHNldFNlbGVjdGVkSWR4KHNvcnRlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIERyb3AgdGhlIGN1cnNvciBvbiBkZWZvY3VzIHNvIHRoZSBmaWx0ZXIgZG9lc24ndCBvdXRsaXZlIHRoZSBwYW5lbFxuICAgIC8vIHRoYXQgb3ducyBpdCAoZS5nLiB1c2VyIHRhYnMgdG8gYSBzaWJsaW5nLCBvcGVucyBhIG1vZGFsLCBvclxuICAgIC8vIHN3aXRjaGVzIHRhYnMpLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghZm9jdXMuZm9jdXNlZCkgc2V0U2VsZWN0ZWRJZHgoLTEpO1xuICAgIH0sIFtmb2N1cy5mb2N1c2VkXSk7XG5cbiAgICAvLyBDbGFtcCB0aGUgY3Vyc29yIHRvIHRoZSB2aXNpYmxlIHJhbmdlIHdoZW4gdGhlIGJ1Y2tldCBsaXN0IHNocmlua3NcbiAgICAvLyBcdTIwMTQgc2FtcGxlIHVwZGF0ZXMgY2FuIGRyb3AgYSBidWNrZXQgb3V0IGZyb20gdW5kZXIgdGhlIHNlbGVjdGlvbi5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWRJZHggPj0gMCAmJiBzZWxlY3RlZElkeCA+PSBzb3J0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZElkeChzb3J0ZWQubGVuZ3RoID09PSAwID8gLTEgOiBzb3J0ZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICB9LCBbc29ydGVkLmxlbmd0aCwgc2VsZWN0ZWRJZHhdKTtcblxuICAgIGNvbnN0IGN1cnJlbnRCdWNrZXQgPVxuICAgICAgICBmb2N1cy5mb2N1c2VkICYmIHNlbGVjdGVkSWR4ID49IDAgJiYgc29ydGVkW3NlbGVjdGVkSWR4XVxuICAgICAgICAgICAgPyBzb3J0ZWRbc2VsZWN0ZWRJZHhdWzBdXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAvLyBPbmx5IGVtaXQgdHJhbnNpdGlvbnM6IHdoZW4gdGhlIGJ1Y2tldCB3ZSBvd24gY2hhbmdlcywgd2hlbiB3ZVxuICAgIC8vIHN0YXJ0IGVtaXR0aW5nLCBvciB3aGVuIHdlIHN0b3AuIFdpdGhvdXQgdGhlIHJlZiBndWFyZCBldmVyeSBwYW5lbFxuICAgIC8vIHdvdWxkIHJhY2UgdG8gY2xlYXIgdGhlIGdsb2JhbCBmaWx0ZXIgb24gZXZlcnkgcmVuZGVyLlxuICAgIGNvbnN0IHdhc0VtaXR0aW5nUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEJ1Y2tldCAhPSBudWxsKSB7XG4gICAgICAgICAgICBvbkJ1Y2tldENoYW5nZT8uKHtcbiAgICAgICAgICAgICAgICBwcm9kdWN0OiBtZXRyaWMucHJvZHVjdCxcbiAgICAgICAgICAgICAgICBtZXRyaWNLZXksXG4gICAgICAgICAgICAgICAgYnVja2V0OiBjdXJyZW50QnVja2V0LFxuICAgICAgICAgICAgICAgIGxhYmVsOiBtZXRyaWMubGFiZWwgfHwgbWV0cmljLm5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHdhc0VtaXR0aW5nUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdhc0VtaXR0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHdhc0VtaXR0aW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIG9uQnVja2V0Q2hhbmdlPy4obnVsbCwgbWV0cmljS2V5KTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgY3VycmVudEJ1Y2tldCxcbiAgICAgICAgbWV0cmljS2V5LFxuICAgICAgICBtZXRyaWMucHJvZHVjdCxcbiAgICAgICAgbWV0cmljLmxhYmVsLFxuICAgICAgICBtZXRyaWMubmFtZSxcbiAgICAgICAgb25CdWNrZXRDaGFuZ2UsXG4gICAgXSk7XG5cbiAgICBjb25zdCB0b3RhbF9idWNrZXRzID0gc29ydGVkLmxlbmd0aDtcbiAgICBjb25zdCB2aXNpYmxlID0gTWF0aC5taW4obWF4Um93cywgdG90YWxfYnVja2V0cyk7XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBpZiAodG90YWxfYnVja2V0cyA+IHZpc2libGUgJiYgc2VsZWN0ZWRJZHggPj0gMCkge1xuICAgICAgICBjb25zdCBoYWxmID0gTWF0aC5mbG9vcih2aXNpYmxlIC8gMik7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgTWF0aC5taW4oc2VsZWN0ZWRJZHggLSBoYWxmLCB0b3RhbF9idWNrZXRzIC0gdmlzaWJsZSksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRvdGFsX2J1Y2tldHMsIHN0YXJ0ICsgdmlzaWJsZSk7XG4gICAgY29uc3Qgc2xpY2UgPSBzb3J0ZWQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgY29uc3QgaGlkZGVuQWJvdmUgPSBzdGFydDtcbiAgICBjb25zdCBoaWRkZW5CZWxvdyA9IHRvdGFsX2J1Y2tldHMgLSBlbmQ7XG4gICAgY29uc3QgYWdlUyA9IGxhc3RVcGRhdGUgPyBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gbGFzdFVwZGF0ZSkgLyAxMDAwKSA6IG51bGw7XG4gICAgY29uc3QgZmlsdGVyZWRCeVRoaXNQYW5lbCA9IGFjdGl2ZU1ldHJpY0tleSA9PT0gbWV0cmljS2V5O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICB0aXRsZT17KG1ldHJpYy5sYWJlbCB8fCBtZXRyaWMubmFtZSkudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgIHN1Yj17dG90YWxfYnVja2V0cyA+IDAgPyBgJHt0b3RhbF9idWNrZXRzfWAgOiBudWxsfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXMuZm9jdXNlZH1cbiAgICAgICAgICAgIHJpZ2h0PXtcbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkQnlUaGlzUGFuZWwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0+XHUyNUNGIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntkaXNwbGF5fTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2FnZVMgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+IFx1MDBCNyB7YWdlU31zPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZsZXhHcm93PXswfVxuICAgICAgICAgICAgZmxleFNocmluaz17MH1cbiAgICAgICAgPlxuICAgICAgICAgICAge3NvcnRlZC5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pm5vIHNhbXBsZXMgeWV0PC9UZXh0PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7aGlkZGVuQWJvdmUgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cdTIxOTEge2hpZGRlbkFib3ZlfSBtb3JlPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7c2xpY2UubWFwKChbaywgY10sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IHN0YXJ0ICsgaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsID0gaWR4ID09PSBzZWxlY3RlZElkeCAmJiBmb2N1cy5mb2N1c2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBOdW1iZXIoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwY3QgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsID4gMCA/IE1hdGgucm91bmQoKGNvdW50IC8gdG90YWwpICogMTAwKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e2lzU2VsID8gJyMxYTIwMzAnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aXNTZWwgPyB0aGVtZS5hY2NlbnQgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbCA/ICdcdTI1QjYnIDogJyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0gZmxleEJhc2lzPXswfSBtaW5XaWR0aD17MH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc1NlbCA/IHRoZW1lLmZnIDogdGhlbWUuZmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD1cInRydW5jYXRlLWVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Nn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17NX0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntwY3R9JTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAge2hpZGRlbkJlbG93ID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XHUyMTkzIHtoaWRkZW5CZWxvd30gbW9yZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvUGFuZWw+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gTWV0cmljUm93KHsgbWV0cmljLCB2YWx1ZSwgaGlzdG9yeSwgbGFzdFVwZGF0ZSB9KSB7XG4gICAgaWYgKG1ldHJpYy5hZ2dyZWdhdGlvbiA9PT0gJ2Rpc3RyaWJ1dGlvbicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxEaXN0cmlidXRpb25Sb3dzXG4gICAgICAgICAgICAgICAgbWV0cmljPXttZXRyaWN9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgIGxhc3RVcGRhdGU9e2xhc3RVcGRhdGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBhZ2VTID0gbGFzdFVwZGF0ZSA/IE1hdGgucm91bmQoKERhdGUubm93KCkgLSBsYXN0VXBkYXRlKSAvIDEwMDApIDogbnVsbDtcbiAgICBjb25zdCBzaG93U3BhcmtsaW5lID0gbWV0cmljLnZpc3VhbGl6YXRpb24gPT09ICdzcGFya2xpbmUnO1xuICAgIC8vIEF1dG8tc2NhbGUgYWdhaW5zdCB0aGUgdmlzaWJsZSB3aW5kb3cgc28gdmFsdWVzIG9mIGFueSBtYWduaXR1ZGVcbiAgICAvLyAocGVyY2VudGFnZXMsIGNvdW50cyBpbiB0aGUgdGhvdXNhbmRzKSByZW5kZXIgd2l0aCBmdWxsIGR5bmFtaWMgcmFuZ2UuXG4gICAgY29uc3Qgc3BhcmtNYXggPSBzaG93U3BhcmtsaW5lXG4gICAgICAgID8gTWF0aC5tYXgoMSwgLi4uKGhpc3RvcnkgfHwgW10pLmZpbHRlcigodikgPT4gTnVtYmVyLmlzRmluaXRlKHYpKSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9IGZsZXhCYXNpcz17MH0gbWluV2lkdGg9ezB9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICB7bWV0cmljLmxhYmVsIHx8IG1ldHJpYy5uYW1lfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAge3Nob3dTcGFya2xpbmUgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luUmlnaHQ9ezF9PlxuICAgICAgICAgICAgICAgICAgICA8U3BhcmtsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXM9e2hpc3Rvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17dGhlbWUuYWNjZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4PXtzcGFya01heH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXsxNH0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiIG1hcmdpblJpZ2h0PXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0TWV0cmljVmFsdWUodmFsdWUsIG1ldHJpYy51bml0KX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+e2FnZVMgPT0gbnVsbCA/ICdcdTIwMTQnIDogYCR7YWdlU31zYH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE92ZXJ2aWV3VGFiKHtcbiAgICBkZXZpY2VzLFxuICAgIHNhbXBsZXMsXG4gICAgaGlzdG9yeSxcbiAgICBjcHVIaXN0b3J5LFxuICAgIGV2ZW50cyxcbiAgICBhbGFybXMsXG4gICAgYWxhcm1TZXZlcml0eUJ5RGV2aWNlLFxuICAgIHByb2R1Y3RNZXRyaWNzLFxuICAgIHByb2R1Y3RJbmZvLFxuICAgIGxhdGVzdEFnZW50VmVyc2lvbixcbiAgICBvdXRkYXRlZENvdW50LFxuICAgIHVwZ3JhZGVTdGF0ZSxcbiAgICBzZWxlY3RlZElkLFxuICAgIG9uU2VsZWN0RGV2aWNlLFxuICAgIHNvcnQsXG4gICAgb25DeWNsZVNvcnQsXG4gICAgZmlsdGVyLFxuICAgIGZpbHRlcmluZyxcbiAgICBvblN0YXJ0RmlsdGVyLFxuICAgIG9uQ29uZmlybURldmljZSxcbiAgICBvblJlcXVlc3RVcGdyYWRlLFxuICAgIGRldmljZXNMb2FkaW5nLFxuICAgIGRldmljZXNFcnJvcixcbiAgICBtZXRyaWNGaWx0ZXIsXG4gICAgb25NZXRyaWNGaWx0ZXJDaGFuZ2UsXG59KSB7XG4gICAgdXNlVGFiQ3ljbGUoJ292ZXJ2aWV3Jyk7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHVzZVN0ZG91dCgpO1xuICAgIC8vIFN1YnNjcmliZSB0byByZXNpemUgc28gdGhlIHBlci1wYW5lbCByb3cgYWxsb2NhdGlvbiBiZWxvdyBwaWNrcyB1cFxuICAgIC8vIHRoZSBuZXcgdGVybWluYWwgaGVpZ2h0IG9uIHRoZSBuZXh0IHJlbmRlci4gYHN0ZG91dC5yb3dzYCBpcyBhXG4gICAgLy8gZ2V0dGVyIHRoYXQgcmVmbGVjdHMgdGhlIGN1cnJlbnQgc2l6ZSwgYnV0IHJlYWRpbmcgaXQgZHVyaW5nIHJlbmRlclxuICAgIC8vIGRvZXMgbm90LCBieSBpdHNlbGYsIHNjaGVkdWxlIGEgcmUtcmVuZGVyIHdoZW4gdGhlIHRlcm1pbmFsIGlzXG4gICAgLy8gcmVzaXplZCBcdTIwMTQgdGhlIGxpc3RlbmVyIGJlbG93IGRvZXMuXG4gICAgY29uc3QgW3Rlcm1pbmFsUm93cywgc2V0VGVybWluYWxSb3dzXSA9IHVzZVN0YXRlKCgpID0+IHN0ZG91dD8ucm93cyA/PyAzNik7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFzdGRvdXQpIHJldHVybjtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gKCkgPT4gc2V0VGVybWluYWxSb3dzKHN0ZG91dC5yb3dzID8/IDM2KTtcbiAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgIHN0ZG91dC5vbigncmVzaXplJywgdXBkYXRlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHN0ZG91dC5vZmYoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSwgW3N0ZG91dF0pO1xuXG4gICAgLy8gVHdvIHZpZXdzIG92ZXIgdGhlIHNhbWUgYWxhcm0gbGlzdDogJ3J1bGUnIGNvbGxhcHNlcyB0byBvbmUgcm93IHBlclxuICAgIC8vIGFsYXJtIHJ1bGUgKGJldHRlciBmb3IgdHJpYWdlKSwgJ2luc3RhbmNlJyBzaG93cyBvbmUgcm93IHBlciBkZXZpY2VcbiAgICAvLyAoYmV0dGVyIHdoZW4geW91IHdhbnQgdG8gc3BvdCBhIHNwZWNpZmljIG1hY2hpbmUgcXVpY2tseSkuXG4gICAgY29uc3QgW2FsYXJtVmlldywgc2V0QWxhcm1WaWV3XSA9IHVzZVN0YXRlKCdydWxlJyk7XG5cbiAgICBjb25zdCBmbGVldCA9IHVzZUZvY3VzYWJsZSh7XG4gICAgICAgIGlkOiAnb3ZlcnZpZXctZmxlZXQnLFxuICAgICAgICBwYXJlbnQ6ICdvdmVydmlldycsXG4gICAgICAgIGhpbnQ6IEZMRUVUX0hJTlQsXG4gICAgICAgIGhhbmRsZXJzOiAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnLycpIHJldHVybiBvblN0YXJ0RmlsdGVyPy4oKTtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ3MnKSByZXR1cm4gb25DeWNsZVNvcnQ/LigpO1xuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4gJiYgc2VsZWN0ZWRJZCkgcmV0dXJuIG9uQ29uZmlybURldmljZT8uKCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgYWxlcnRzSGFzSW5zdGFuY2VzID0gKGFsYXJtcz8uaW5zdGFuY2VzPy5sZW5ndGggfHwgMCkgPiAwO1xuICAgIGNvbnN0IGFsZXJ0c1BhbmVsID0gdXNlRm9jdXNhYmxlKHtcbiAgICAgICAgaWQ6ICdvdmVydmlldy1hbGVydHMnLFxuICAgICAgICBwYXJlbnQ6ICdvdmVydmlldycsXG4gICAgICAgIGhpbnQ6IEFMRVJUU19ISU5ULFxuICAgICAgICBoYW5kbGVyczogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICd2JyAmJiBhbGVydHNIYXNJbnN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICBzZXRBbGFybVZpZXcoKHYpID0+ICh2ID09PSAncnVsZScgPyAnaW5zdGFuY2UnIDogJ3J1bGUnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgdmVyc2lvbnNQYW5lbCA9IHVzZUZvY3VzYWJsZSh7XG4gICAgICAgIGlkOiAnb3ZlcnZpZXctdmVyc2lvbnMnLFxuICAgICAgICBwYXJlbnQ6ICdvdmVydmlldycsXG4gICAgICAgIGhpbnQ6IFZFUlNJT05TX0hJTlQsXG4gICAgICAgIGhhbmRsZXJzOiAoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ3UnKSBvblJlcXVlc3RVcGdyYWRlPy4oKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjb3VudHMgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiBmbGVldENvdW50cyhkZXZpY2VzLCBhbGFybVNldmVyaXR5QnlEZXZpY2UpLFxuICAgICAgICBbZGV2aWNlcywgYWxhcm1TZXZlcml0eUJ5RGV2aWNlXSxcbiAgICApO1xuICAgIGNvbnN0IGFsYXJtSW5zdGFuY2VzID0gYWxhcm1zPy5pbnN0YW5jZXMgPz8gW107XG4gICAgY29uc3QgYWxhcm1Db3VudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0ID0geyBjcml0OiAwLCBoaWdoOiAwLCBtZWQ6IDAsIGxvdzogMCB9O1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgYWxhcm1JbnN0YW5jZXMpIHtcbiAgICAgICAgICAgIGlmIChpLnNldmVyaXR5ID09PSBBTEFSTV9TRVZFUklUWS5DUklUSUNBTCkgb3V0LmNyaXQrKztcbiAgICAgICAgICAgIGVsc2UgaWYgKGkuc2V2ZXJpdHkgPT09IEFMQVJNX1NFVkVSSVRZLkhJR0gpIG91dC5oaWdoKys7XG4gICAgICAgICAgICBlbHNlIGlmIChpLnNldmVyaXR5ID09PSBBTEFSTV9TRVZFUklUWS5NRURJVU0pIG91dC5tZWQrKztcbiAgICAgICAgICAgIGVsc2Ugb3V0LmxvdysrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSwgW2FsYXJtSW5zdGFuY2VzXSk7XG4gICAgY29uc3QgYWxhcm1TdGF0ZUNvdW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBvdXQgPSB7IGFjdGl2ZTogMCwgYWNrOiAwLCBsYXRjaGVkOiAwLCBzaGVsdmVkOiAwIH07XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBhbGFybUluc3RhbmNlcykge1xuICAgICAgICAgICAgaWYgKGkuc3RhdGUgPT09IEFMQVJNX1NUQVRFLkFDS05PV0xFREdFRCkgb3V0LmFjaysrO1xuICAgICAgICAgICAgZWxzZSBpZiAoaS5zdGF0ZSA9PT0gQUxBUk1fU1RBVEUuTEFUQ0hFRCkgb3V0LmxhdGNoZWQrKztcbiAgICAgICAgICAgIGVsc2UgaWYgKGkuc3RhdGUgPT09IEFMQVJNX1NUQVRFLlNIRUxWRUQpIG91dC5zaGVsdmVkKys7XG4gICAgICAgICAgICBlbHNlIG91dC5hY3RpdmUrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sIFthbGFybUluc3RhbmNlc10pO1xuICAgIC8vIEdyb3VwIGFjdGl2ZSBpbnN0YW5jZXMgYnkgcnVsZSBuYW1lLiBFYWNoIGdyb3VwIGxpc3RzIHdoaWNoIGRldmljZXNcbiAgICAvLyBhcmUgZmlyaW5nIFx1MjAxNCBlYXNpZXIgdG8gc2NhbiBcIjUgYm94ZXMgaGl0IEhpZ2ggTWVtb3J5XCIgdGhhbiByZWFkaW5nXG4gICAgLy8gdGhlIHNhbWUgcnVsZSBuYW1lIGRvd24gNSByb3dzLiBFYWNoIGRldmljZSBlbnRyeSBjYXJyaWVzIHRoZSB2YWx1ZVxuICAgIC8vIGFuZCBzdGF0ZSBzbyB0aGUgcm93IHJlbmRlcnMgcGFyaXR5IHdpdGggdGhlIGluc3RhbmNlIHZpZXcuXG4gICAgY29uc3QgYWxhcm1Hcm91cHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgYWxhcm1JbnN0YW5jZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGkubmFtZSB8fCBpLmFsYXJtPy5ydWxlIHx8ICdhbGFybSc7XG4gICAgICAgICAgICBjb25zdCBkZXYgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogaS5vcmlnaW4/Lm5hbWUgfHwgaS5vcmlnaW4/LmlkIHx8ICdcdTIwMTQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBldmFsdWF0aW9uVmFsdWUoaSksXG4gICAgICAgICAgICAgICAgc3RhdGU6IGkuc3RhdGUsXG4gICAgICAgICAgICAgICAgaW5pdGlhdGVkOiBhY3RpdmF0aW9uTXMoaSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc2V2ID0gaS5zZXZlcml0eSA/PyBBTEFSTV9TRVZFUklUWS5OT05FO1xuICAgICAgICAgICAgY29uc3QgY3VyID0gZ3JvdXBzLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGN1cikge1xuICAgICAgICAgICAgICAgIGN1ci5jb3VudCArPSAxO1xuICAgICAgICAgICAgICAgIGN1ci5kZXZpY2VzLnB1c2goZGV2KTtcbiAgICAgICAgICAgICAgICBpZiAoc2V2ID4gY3VyLnNldmVyaXR5KSBjdXIuc2V2ZXJpdHkgPSBzZXY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3Vwcy5zZXQoa2V5LCB7IG5hbWU6IGtleSwgY291bnQ6IDEsIHNldmVyaXR5OiBzZXYsIGRldmljZXM6IFtkZXZdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uZ3JvdXBzLnZhbHVlcygpXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBpZiAoYS5zZXZlcml0eSAhPT0gYi5zZXZlcml0eSkgcmV0dXJuIGIuc2V2ZXJpdHkgLSBhLnNldmVyaXR5O1xuICAgICAgICAgICAgcmV0dXJuIGIuY291bnQgLSBhLmNvdW50O1xuICAgICAgICB9KTtcbiAgICB9LCBbYWxhcm1JbnN0YW5jZXNdKTtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IHVzZU1lbW8oKCkgPT4gYWdlbnRWZXJzaW9uQ291bnRzKGRldmljZXMsIHNhbXBsZXMpLCBbZGV2aWNlcywgc2FtcGxlc10pO1xuICAgIGNvbnN0IGtpbmRzID0gdXNlTWVtbygoKSA9PiBkZXZpY2VLaW5kQ291bnRzKGRldmljZXMpLCBbZGV2aWNlc10pO1xuICAgIC8vIFByZS1jb21wdXRlIHRoZSB3aWRlc3QgaG9zdG5hbWUgYWNyb3NzIGluc3RhbmNlcyBzbyB0aGUgcnVsZSBjb2x1bW5cbiAgICAvLyBhbGlnbnMuIENhcHBlZCB0byBrZWVwIHRoZSBydWxlIGNvbHVtbiBmcm9tIGJlaW5nIHNxdWVlemVkIHdoZW4gb25lXG4gICAgLy8gZGV2aWNlIGhhcyBhIHJ1bmF3YXkgaG9zdG5hbWUuXG4gICAgY29uc3QgYWxhcm1Ib3N0V2lkdGggPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgMzIsXG4gICAgICAgICAgICAgICAgYWxhcm1JbnN0YW5jZXMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAodywgaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHcsIChpLm9yaWdpbj8ubmFtZSB8fCBpLm9yaWdpbj8uaWQgfHwgJycpLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgIDE0LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICBbYWxhcm1JbnN0YW5jZXNdLFxuICAgICk7XG4gICAgY29uc3Qgbm93VHMgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3QgbGFzdENwdSA9IGhpc3RvcnkuY3B1Py5hdD8uKC0xKTtcbiAgICBjb25zdCBsYXN0TWVtID0gaGlzdG9yeS5tZW0/LmF0Py4oLTEpO1xuICAgIGNvbnN0IGxhc3REaXNrID0gaGlzdG9yeS5kaXNrPy5hdD8uKC0xKTtcblxuICAgIGNvbnN0IHZlcnNpb25zTWF4ID0gTWF0aC5tYXgoMSwgLi4udmVyc2lvbnMubWFwKChbLCBjXSkgPT4gYykpO1xuICAgIC8vIFRhcmdldCA9IHdoaWNoZXZlciBpcyBuZXdlcjogdGhlIENETidzIHB1Ymxpc2hlZCBgbGF0ZXN0YCBvciB0aGVcbiAgICAvLyBoaWdoZXN0IHNlbXZlciB3ZSd2ZSBhY3R1YWxseSBvYnNlcnZlZCBvbiB0aGUgZmxlZXQuIFdlIGZhbGwgYmFjayB0b1xuICAgIC8vIHRoZSBsb2NhbCBtYXggc28gdGhlIHBhbmVsIHN0YXlzIHVzZWZ1bCB3aGVuIHRoZSBDRE4gbG9va3VwIGZhaWxzXG4gICAgLy8gKGFpcmdhcCwgRE5TLCB3aGF0ZXZlcikgXHUyMDE0IG91dGRhdGVkIHN0aWxsIHJlc29sdmVzIGFnYWluc3QgdGhlIG5ld2VzdFxuICAgIC8vIHRoaW5nIHdlIGtub3cgYWJvdXQuXG4gICAgY29uc3QgbG9jYWxNYXggPSB2ZXJzaW9uc1swXT8uWzBdO1xuICAgIGNvbnN0IHRhcmdldCA9ICgoKSA9PiB7XG4gICAgICAgIGlmICghbGF0ZXN0QWdlbnRWZXJzaW9uKSByZXR1cm4gbG9jYWxNYXggfHwgbnVsbDtcbiAgICAgICAgaWYgKCFsb2NhbE1heCkgcmV0dXJuIGxhdGVzdEFnZW50VmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVBZ2VudFZlcnNpb25zKGxhdGVzdEFnZW50VmVyc2lvbiwgbG9jYWxNYXgpIDw9IDBcbiAgICAgICAgICAgID8gbGF0ZXN0QWdlbnRWZXJzaW9uXG4gICAgICAgICAgICA6IGxvY2FsTWF4O1xuICAgIH0pKCk7XG4gICAgY29uc3QgdmVyc2lvblJvd3MgPSB2ZXJzaW9ucy5tYXAoKFt2LCBjXSkgPT4ge1xuICAgICAgICBsZXQgbGV2ZWw7XG4gICAgICAgIGlmICghdGFyZ2V0IHx8IHYgPT09IHRhcmdldCkgbGV2ZWwgPSAndGFyZ2V0JztcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gY29tcGFyZUFnZW50VmVyc2lvbnModiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIHBvc2l0aXZlID0gb2xkZXIgdGhhbiB0YXJnZXQ7ID4wIGJ1dCBvbmx5IGEgc3RlcCBhd2F5IGlzIFwib2xkXCIsXG4gICAgICAgICAgICAvLyBhbnl0aGluZyBiaWdnZXIgaXMgXCJhbmNpZW50XCIuIFdlIGFwcHJveGltYXRlIFwiYSBzdGVwXCIgYXMgdGhlXG4gICAgICAgICAgICAvLyByb3cgcmlnaHQgYWZ0ZXIgdGFyZ2V0IGluIHRoZSBzb3J0ZWQgbGlzdC5cbiAgICAgICAgICAgIGxldmVsID0gZGlmZiA+IDAgPyAnb2xkJyA6ICd0YXJnZXQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHYsIGMsIGxldmVsIH07XG4gICAgfSk7XG4gICAgLy8gUmUtbWFyayByb3dzOiBmaXJzdCBub24tdGFyZ2V0IGlzIFwib2xkXCIsIHRoZSByZXN0IGFyZSBcImFuY2llbnRcIi5cbiAgICBsZXQgc2Vlbk9sZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHZlcnNpb25Sb3dzKSB7XG4gICAgICAgIGlmIChyb3cubGV2ZWwgPT09ICd0YXJnZXQnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFzZWVuT2xkKSB7XG4gICAgICAgICAgICByb3cubGV2ZWwgPSAnb2xkJztcbiAgICAgICAgICAgIHNlZW5PbGQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93LmxldmVsID0gJ2FuY2llbnQnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YWxlID1cbiAgICAgICAgdHlwZW9mIG91dGRhdGVkQ291bnQgPT09ICdudW1iZXInXG4gICAgICAgICAgICA/IG91dGRhdGVkQ291bnRcbiAgICAgICAgICAgIDogdmVyc2lvbnNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKFt2XSkgPT4gdGFyZ2V0ICYmIHYgIT09IHRhcmdldCAmJiBjb21wYXJlQWdlbnRWZXJzaW9ucyh2LCB0YXJnZXQpID4gMClcbiAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGEsIFssIGNdKSA9PiBhICsgYywgMCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgIHsvKiBMZWZ0IGNvbHVtbjogS1BJcyArIEFjdGl2ZSBhbGVydHMgKi99XG4gICAgICAgICAgICA8Qm94IHdpZHRoPVwiMzIlXCIgZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxQYW5lbCB0aXRsZT1cIkZMRUVUXCIgc3ViPVwicmVhbHRpbWVcIiByaWdodD17PFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pmxhc3Qgc3luYyAwczwvVGV4dD59IGZsZXhHcm93PXswfSBmbGV4U2hyaW5rPXswfT5cbiAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgbWFyZ2luQm90dG9tPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxLcGkgbGFiZWw9XCJPTkxJTkVcIiB2YWx1ZT17Y291bnRzLm9ubGluZX0gY29sb3I9e3RoZW1lLmxpbWV9IHN1ZmZpeD17YCAvICR7Y291bnRzLnRvdGFsfWB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8S3BpIGxhYmVsPVwiT0ZGTElORVwiIHZhbHVlPXtjb3VudHMub2ZmbGluZX0gY29sb3I9e3RoZW1lLmZnRGltfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEtwaSBsYWJlbD1cIkRFR1JBREVEXCIgdmFsdWU9e2NvdW50cy53YXJufSBjb2xvcj17Y291bnRzLndhcm4gPyB0aGVtZS5hbWJlciA6IHRoZW1lLmZnRGltfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEtwaSBsYWJlbD1cIkNSSVRJQ0FMXCIgdmFsdWU9e2NvdW50cy5iYWR9IGNvbG9yPXtjb3VudHMuYmFkID8gdGhlbWUucmVkIDogdGhlbWUuZmdEaW19IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1pbmlNZXRyaWMgbGFiZWw9XCJDUFVcIiB2YWx1ZT17bGFzdENwdX0gaGlzdG9yeT17aGlzdG9yeS5jcHV9IGNvbG9yPXt0aGVtZS5hY2NlbnR9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWluaU1ldHJpYyBsYWJlbD1cIk1FTVwiIHZhbHVlPXtsYXN0TWVtfSBoaXN0b3J5PXtoaXN0b3J5Lm1lbX0gY29sb3I9e3RoZW1lLm1hZ2VudGF9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWluaU1ldHJpYyBsYWJlbD1cIkRJU0tcIiB2YWx1ZT17bGFzdERpc2t9IGhpc3Rvcnk9e2hpc3RvcnkuZGlza30gY29sb3I9e3RoZW1lLmxpbWV9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICB7a2luZHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtraW5kcy5zbGljZSgwLCA4KS5tYXAoKFtrLCBjXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1VuYXNzaWduZWQgPSBrID09PSBVTkFTU0lHTkVEX1BST0RVQ1RfS0VZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGlzVW5hc3NpZ25lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbm8gcHJvZHVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvZHVjdEluZm8/LltrXT8ubmFtZSB8fCBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9IGZsZXhCYXNpcz17MH0gbWluV2lkdGg9ezB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5hc3NpZ25lZCA/IHRoZW1lLmZnRmFpbnQgOiB0aGVtZS5mZ0RpbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD1cInRydW5jYXRlLWVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGFsaWM9e2lzVW5hc3NpZ25lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Nn0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5hc3NpZ25lZCA/IHRoZW1lLmZnRGltIDogdGhlbWUuYWNjZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkPXshaXNVbmFzc2lnbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgICAgIHtwcm9kdWN0TWV0cmljcz8ubWV0cmljcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBncm91cE1ldHJpY3NCeVByb2R1Y3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0TWV0cmljcy5tZXRyaWNzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobSkgPT4gbS52aXN1YWxpemF0aW9uICE9PSAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgIChbcHJvZHVjdCwgbGlzdF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdEluZm8/Lltwcm9kdWN0XT8ubmFtZSB8fCBwcm9kdWN0IHx8ICdtZXRyaWNzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cHJvZHVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtkaXNwbGF5LnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWI9e2Ake2xpc3QubGVuZ3RofWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdE1ldHJpY3MuZXJyb3IgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9PmVycjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+e3Byb2R1Y3R9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhHcm93PXswfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFNocmluaz17MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpc3QubWFwKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgayA9IGAke20ucHJvZHVjdH06JHttLm5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWV0cmljUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWM9e219XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdE1ldHJpY3MudmFsdWVzW2tdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeT17cHJvZHVjdE1ldHJpY3MuaGlzdG9yeT8uW2tdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFVwZGF0ZT17cHJvZHVjdE1ldHJpY3MubGFzdFVwZGF0ZVtrXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUGFuZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQUNUSVZFIEFMRVJUU1wiXG4gICAgICAgICAgICAgICAgICAgIHN1Yj17YWxhcm1JbnN0YW5jZXMubGVuZ3RoID4gMCA/IGAke2FsYXJtSW5zdGFuY2VzLmxlbmd0aH1gIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17YWxlcnRzUGFuZWwuZm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1JbnN0YW5jZXMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FsYXJtU3RhdGVDb3VudHMuYWNrICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtU3RhdGVDb3VudHMubGF0Y2hlZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybVN0YXRlQ291bnRzLnNoZWx2ZWQgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FsYXJtU3RhdGVDb3VudHMuYWNrID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHthbGFybVN0YXRlQ291bnRzLmFja30gYWNrIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FsYXJtU3RhdGVDb3VudHMubGF0Y2hlZCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7YWxhcm1TdGF0ZUNvdW50cy5sYXRjaGVkfSBsYXRjaGVkIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FsYXJtU3RhdGVDb3VudHMuc2hlbHZlZCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7YWxhcm1TdGF0ZUNvdW50cy5zaGVsdmVkfSBzaGVsdmVkIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Plx1MDBCNyA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT52IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0+e2FsYXJtVmlld308L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2FsYXJtcz8uZXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnJlZH0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthbGFybXMuZXJyb3I/Lm1lc3NhZ2UgfHwgJ2ZhaWxlZCB0byBsb2FkIGFsYXJtcyd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHshYWxhcm1zPy5lcnJvciAmJiBhbGFybUluc3RhbmNlcy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthbGFybXM/LmxvYWRpbmcgPyAnbG9hZGluZyBhbGFybXNcdTIwMjYnIDogJ25vIGFjdGl2ZSBhbGVydHMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7YWxhcm1JbnN0YW5jZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiIG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLcGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQ1JJVFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YWxhcm1Db3VudHMuY3JpdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXthbGFybUNvdW50cy5jcml0ID8gdGhlbWUucmVkIDogdGhlbWUuZmdEaW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLcGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiSElHSFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YWxhcm1Db3VudHMuaGlnaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXthbGFybUNvdW50cy5oaWdoID8gdGhlbWUucmVkIDogdGhlbWUuZmdEaW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLcGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiTUVEXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXthbGFybUNvdW50cy5tZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YWxhcm1Db3VudHMubWVkID8gdGhlbWUuYW1iZXIgOiB0aGVtZS5mZ0RpbX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEtwaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJMT1dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2FsYXJtQ291bnRzLmxvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXthbGFybUNvdW50cy5sb3cgPyB0aGVtZS5hY2NlbnQgOiB0aGVtZS5mZ0RpbX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWxhcm1WaWV3ID09PSAncnVsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhbGFybUdyb3Vwcy5tYXAoKGcpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFsYXJtR3JvdXBSb3cga2V5PXtnLm5hbWV9IGdyb3VwPXtnfSBub3c9e25vd1RzfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWxhcm1JbnN0YW5jZXMubWFwKChpbnN0KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBbGFybUluc3RhbmNlUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luc3QuaW5zdGFuY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0PXtpbnN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdFdpZHRoPXthbGFybUhvc3RXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdz17bm93VHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIHsvKiBNaWRkbGUgY29sdW1uOiBpbnRlcmFjdGl2ZSBkZXZpY2VzIGxpc3QgKi99XG4gICAgICAgICAgICA8Qm94IHdpZHRoPVwiNDAlXCIgZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxEZXZpY2VzUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlcz17ZGV2aWNlc31cbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcz17c2FtcGxlc31cbiAgICAgICAgICAgICAgICAgICAgY3B1SGlzdG9yeT17Y3B1SGlzdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgYWxhcm1TZXZlcml0eUJ5RGV2aWNlPXthbGFybVNldmVyaXR5QnlEZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2RldmljZXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICBlcnJvcj17ZGV2aWNlc0Vycm9yfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtmbGVldC5mb2N1c2VkfVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZElkPXtzZWxlY3RlZElkfVxuICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17b25TZWxlY3REZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgIHNvcnQ9e3NvcnR9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJpbmc9e2ZpbHRlcmluZ31cbiAgICAgICAgICAgICAgICAgICAgbWV0cmljRmlsdGVyPXttZXRyaWNGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc0J5RGV2aWNlPXtwcm9kdWN0TWV0cmljcz8udmFsdWVzQnlEZXZpY2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7LyogUmlnaHQgY29sdW1uOiB2ZXJzaW9ucyArIGV2ZW50cyAqL31cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9XCIyOCVcIiBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQUdFTlQgVkVSU0lPTlNcIlxuICAgICAgICAgICAgICAgICAgICBzdWI9e3RhcmdldCA/IGBsYXRlc3QgJHt0YXJnZXR9YCA6ICdkZXBsb3llZCd9XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e3ZlcnNpb25zUGFuZWwuZm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZVN0YXRlPy5waGFzZSA9PT0gJ3J1bm5pbmcnID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9Plx1MjVDRiBydW5uaW5nPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHN0YWxlID4gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+dSBcdTAwQjcgdXBncmFkZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmxleEdyb3c9ezB9XG4gICAgICAgICAgICAgICAgICAgIGZsZXhTaHJpbms9ezB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dmVyc2lvblJvd3MubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT53YWl0aW5nIGZvciBzYW1wbGVzXHUyMDI2PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7dmVyc2lvblJvd3MubWFwKChyKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VmVyc2lvbkJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ci52fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY9e3Iudn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD17ci5jfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD17dmVyc2lvbnNNYXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9e3IubGV2ZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAge3VwZ3JhZGVTdGF0ZT8ucGhhc2UgPT09ICdydW5uaW5nJyAmJiB1cGdyYWRlU3RhdGUucHJvZ3Jlc3MgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9Plx1MjFCQiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRpbmcge3VwZ3JhZGVTdGF0ZS5wcm9ncmVzcy5kb25lfS97dXBncmFkZVN0YXRlLnByb2dyZXNzLnRvdGFsfVx1MjAyNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7dXBncmFkZVN0YXRlPy5waGFzZSA9PT0gJ2RvbmUnICYmIHVwZ3JhZGVTdGF0ZS5zdW1tYXJ5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dXBncmFkZVN0YXRlLmFib3J0ZWQgPyB0aGVtZS5hbWJlciA6IHRoZW1lLmxpbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dXBncmFkZVN0YXRlLmFib3J0ZWQgPyAnXHUyNkEwICcgOiAnXHUyNzEzICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1cGdyYWRlU3RhdGUuc3VtbWFyeS5va30gb2sgXHUwMEI3IHt1cGdyYWRlU3RhdGUuc3VtbWFyeS5mYWlsZWR9IGZhaWxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dXBncmFkZVN0YXRlLmFib3J0ZWQgPyBgICgke3VwZ3JhZGVTdGF0ZS5yZWFzb259KWAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge3VwZ3JhZGVTdGF0ZT8ucGhhc2UgIT09ICdydW5uaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZVN0YXRlPy5waGFzZSAhPT0gJ2RvbmUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFsZSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFtYmVyfT5cdTI2QTAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YWxlfSBwZW5kaW5nIHVwZ3JhZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgICAgIHtwcm9kdWN0TWV0cmljcz8ubWV0cmljcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdE1ldHJpY3MgPSBwcm9kdWN0TWV0cmljcy5tZXRyaWNzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobSkgPT4gbS52aXN1YWxpemF0aW9uID09PSAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RNZXRyaWNzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUd28tcGFzcyByb3cgYWxsb2NhdGlvbiBhY3Jvc3MgZGlzdHJpYnV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYW5lbHMgaW4gdGhpcyBjb2x1bW4uIEVhY2ggcGFuZWwgcGF5cyBhIGZpeGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaHJvbWUgY29zdCAoYm9yZGVyICsgdGl0bGUgKyBnYXBzIFx1MjI0OCA0IHJvd3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXJ2ZSB+MTQgcm93cyB1cCB0b3AgZm9yIGRhc2hib2FyZCBjaHJvbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBBR0VOVCBWRVJTSU9OUy4gUGhhc2UgMTogZXZlcnkgcGFuZWwgdGhhdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZml0cyB1bmRlciBmYWlyLXNoYXJlIHRha2VzIGV4YWN0bHkgaXRzIGJ1Y2tldFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY291bnQuIFBoYXNlIDI6IHRoZSBsZWZ0b3ZlciBidWRnZXQgaXMgc3BsaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFtb25nIHBhbmVscyB0aGF0IHdhbnRlZCBtb3JlIChrZXJuZWwpIHNvIHRoZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgc3VycGx1cyBpbnN0ZWFkIG9mIGNsaXBwaW5nIHRoZSByZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxSb3dzID0gdGVybWluYWxSb3dzO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGVyIHBhbmVsOiBib3JkZXIgdG9wICsgdGl0bGUgKyBtYXJnaW5Cb3R0b20gK1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9yZGVyIGJvdHRvbSA9IDQgZml4ZWQgY2hyb21lIHJvd3MuIFNjcm9sbGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhbmVscyBhbHNvIHBheSBvbmUgcm93IGZvciB0aGUgXCJcdTIxOTMgTiBtb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGljYXRvciAoYW5kIGFub3RoZXIgZm9yIFwiXHUyMTkxIE4gbW9yZVwiIHdoZW4gdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXJzb3Igc2Nyb2xsZWQgcGFzdCB0aGUgdG9wKSwgY291bnRlZCBiZWxvdy5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNocm9tZVBlclBhbmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhc2hib2FyZCBjaHJvbWUgYWJvdmUgdGhpcyBjb2x1bW46IHRhYnMgKDEpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFHRU5UIFZFUlNJT05TIHBhbmVsICh+NS02IHJvd3MpICsgZm9vdGVyICgxLTIpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyArIGEgdGlueSBzYWZldHkgbWFyZ2luLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzZXJ2ZWRUb3AgPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsQ2hyb21lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZFRvcCArIGxpc3RNZXRyaWNzLmxlbmd0aCAqIGNocm9tZVBlclBhbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVkZ2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdE1ldHJpY3MubGVuZ3RoICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFJvd3MgLSB0b3RhbENocm9tZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmYWlyU2hhcmUgPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoYnVkZ2V0IC8gbGlzdE1ldHJpY3MubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudHMgPSBsaXN0TWV0cmljcy5tYXAoKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrID0gYCR7bS5wcm9kdWN0fToke20ubmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBwcm9kdWN0TWV0cmljcy52YWx1ZXNba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXModikubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdGVkID0gY291bnRzLm1hcCgoYykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID4gMCAmJiBjIDw9IGZhaXJTaGFyZSA/IGMgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZWRTb0ZhciA9IGFsbG9jYXRlZC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFjYywgbikgPT4gYWNjICsgKG4gfHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncmVlZHkgPSBhbGxvY2F0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChuLCBpKSA9PiAobiA9PT0gbnVsbCA/IGkgOiAtMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoaSkgPT4gaSA+PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVhY2ggZ3JlZWR5IHBhbmVsIHBheXMgb25lIGV4dHJhIHJvdyBmb3IgaXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBcIlx1MjE5MyBOIG1vcmVcIiBpbmRpY2F0b3IgaW5zaWRlIHRoZSBjb250ZW50IGFyZWE7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaHJpbmsgdGhlIGxlZnRvdmVyIGJ1ZGdldCBieSB0aGF0IG92ZXJoZWFkIHNvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aG9zZSBwYW5lbHMgZG9uJ3QgcHVzaCBwYXN0IHRoZSBjb2x1bW4uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncmVlZHlPdmVyaGVhZCA9IGdyZWVkeS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZWZ0b3ZlciA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVkZ2V0IC0gdXNlZFNvRmFyIC0gZ3JlZWR5T3ZlcmhlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSBsZWZ0b3ZlciBhbW9uZyBncmVlZHkgcGFuZWxzIHdpdGggdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9vciByZW1haW5kZXIgc3ByZWFkIGFjcm9zcyB0aGUgZmlyc3QgZmV3IHNvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBsZWF2ZSBlbXB0eSByb3dzIGF0IHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2x1bW4uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncmVlZHlCYXNlID0gZ3JlZWR5Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTWF0aC5mbG9vcihsZWZ0b3ZlciAvIGdyZWVkeS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JlZWR5RXh0cmEgPSBncmVlZHkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsZWZ0b3ZlciAtIGdyZWVkeUJhc2UgKiBncmVlZHkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JlZWR5QnlJZHggPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBncmVlZHkuZm9yRWFjaCgoaWR4LCBnaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWVkeUJ5SWR4LnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgyLCBncmVlZHlCYXNlICsgKGdpIDwgZ3JlZWR5RXh0cmEgPyAxIDogMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFJvd3NQZXIgPSBhbGxvY2F0ZWQubWFwKChuLCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBncmVlZHlCeUlkeC5nZXQoaSkgfHwgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1hdGgubWF4KDIsIG4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0TWV0cmljcy5tYXAoKG0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrID0gYCR7bS5wcm9kdWN0fToke20ubmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEaXN0cmlidXRpb25QYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljPXttfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RNZXRyaWNzLnZhbHVlc1trXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVcGRhdGU9e3Byb2R1Y3RNZXRyaWNzLmxhc3RVcGRhdGVba119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SW5mbz17cHJvZHVjdEluZm99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVNZXRyaWNLZXk9e21ldHJpY0ZpbHRlcj8ubWV0cmljS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25CdWNrZXRDaGFuZ2U9e29uTWV0cmljRmlsdGVyQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Um93cz17bWF4Um93c1BlcltpXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSAnLi9QYW5lbC5qc3gnO1xuaW1wb3J0IHsgQUxBUk1fU0VWRVJJVFksIEFMQVJNX1NUQVRFIH0gZnJvbSAnLi4vLi4vLi4vbGliL2FsYXJtcy5qcyc7XG5cbmNvbnN0IFNFVkVSSVRZX1NUWUxFID0ge1xuICAgIFtBTEFSTV9TRVZFUklUWS5DUklUSUNBTF06IHsgZ2x5cGg6ICdcdTI1Q0YnLCBjb2xvcjogdGhlbWUucmVkLCBsYWJlbDogJ0NSSVQnIH0sXG4gICAgW0FMQVJNX1NFVkVSSVRZLkhJR0hdOiB7IGdseXBoOiAnXHUyNUNGJywgY29sb3I6IHRoZW1lLnJlZCwgbGFiZWw6ICdISUdIJyB9LFxuICAgIFtBTEFSTV9TRVZFUklUWS5NRURJVU1dOiB7IGdseXBoOiAnXHUyNUIyJywgY29sb3I6IHRoZW1lLmFtYmVyLCBsYWJlbDogJ01FRCcgfSxcbiAgICBbQUxBUk1fU0VWRVJJVFkuTE9XXTogeyBnbHlwaDogJ2knLCBjb2xvcjogdGhlbWUuYWNjZW50LCBsYWJlbDogJ0xPVycgfSxcbiAgICBbQUxBUk1fU0VWRVJJVFkuTk9ORV06IHsgZ2x5cGg6ICdcdTAwQjcnLCBjb2xvcjogdGhlbWUuZmdEaW0sIGxhYmVsOiAnXHUyMDE0JyB9LFxufTtcblxuY29uc3QgU1RBVEVfU1RZTEUgPSB7XG4gICAgW0FMQVJNX1NUQVRFLk5PTkVdOiB7IGNvbG9yOiB0aGVtZS5mZ0RpbSwgbGFiZWw6ICdQRU5EJyB9LFxuICAgIFtBTEFSTV9TVEFURS5BQ1RJVkFURURdOiB7IGNvbG9yOiB0aGVtZS5yZWQsIGxhYmVsOiAnQUNUSVZFJyB9LFxuICAgIFtBTEFSTV9TVEFURS5BQ0tOT1dMRURHRURdOiB7IGNvbG9yOiB0aGVtZS5hbWJlciwgbGFiZWw6ICdBQ0snIH0sXG4gICAgW0FMQVJNX1NUQVRFLkxBVENIRURdOiB7IGNvbG9yOiB0aGVtZS5hbWJlciwgbGFiZWw6ICdMQVRDSEVEJyB9LFxuICAgIFtBTEFSTV9TVEFURS5TSEVMVkVEXTogeyBjb2xvcjogdGhlbWUuZmdEaW0sIGxhYmVsOiAnU0hFTFZFRCcgfSxcbiAgICBbQUxBUk1fU1RBVEUuQ0xFQVJFRF06IHsgY29sb3I6IHRoZW1lLmdyZWVuLCBsYWJlbDogJ0NMRUFSRUQnIH0sXG59O1xuXG5mdW5jdGlvbiBzZXZlcml0eVN0eWxlKHNldikge1xuICAgIHJldHVybiBTRVZFUklUWV9TVFlMRVtzZXZdID8/IFNFVkVSSVRZX1NUWUxFW0FMQVJNX1NFVkVSSVRZLk5PTkVdO1xufVxuXG5mdW5jdGlvbiBzdGF0ZVN0eWxlKHN0YXRlKSB7XG4gICAgcmV0dXJuIFNUQVRFX1NUWUxFW3N0YXRlXSA/PyBTVEFURV9TVFlMRVtBTEFSTV9TVEFURS5OT05FXTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25MYWJlbChtcykge1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG1zKSB8fCBtcyA8IDApIHJldHVybiAnXHUyMDE0JztcbiAgICBjb25zdCBzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApO1xuICAgIGlmIChzIDwgNjApIHJldHVybiBgJHtzfXNgO1xuICAgIGNvbnN0IG0gPSBNYXRoLmZsb29yKHMgLyA2MCk7XG4gICAgaWYgKG0gPCA2MCkgcmV0dXJuIGAke219bWA7XG4gICAgY29uc3QgaCA9IE1hdGguZmxvb3IobSAvIDYwKTtcbiAgICBpZiAoaCA8IDI0KSByZXR1cm4gYCR7aH1oYDtcbiAgICBjb25zdCBkID0gTWF0aC5mbG9vcihoIC8gMjQpO1xuICAgIHJldHVybiBgJHtkfWRgO1xufVxuXG5mdW5jdGlvbiBhY3RpdmF0aW9uTXMoaW5zdCkge1xuICAgIGNvbnN0IHYgPSBpbnN0Py5hY3RpdmF0aW9uPy5pbml0aWF0ZWQ7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykgcmV0dXJuIHY7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB0ID0gRGF0ZS5wYXJzZSh2KTtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSA/IHQgOiBudWxsO1xuICAgIH1cbiAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdi4kZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygdi4kZGF0ZSA9PT0gJ251bWJlcicpIHJldHVybiB2LiRkYXRlO1xuICAgICAgICBjb25zdCB0ID0gRGF0ZS5wYXJzZSh2LiRkYXRlKTtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSA/IHQgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gSGVhZGVyQ2VsbCh7IGxhYmVsLCB3aWR0aCwgYWxpZ24gPSAnbGVmdCcgfSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggd2lkdGg9e3dpZHRofSBqdXN0aWZ5Q29udGVudD17YWxpZ24gPT09ICdyaWdodCcgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnfT5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT57bGFiZWx9PC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBBbGFybVJvdyh7IGluc3QsIGRldldpZHRoLCBuYW1lV2lkdGgsIG5vdyB9KSB7XG4gICAgY29uc3Qgc2V2ID0gc2V2ZXJpdHlTdHlsZShpbnN0LnNldmVyaXR5KTtcbiAgICBjb25zdCBzdCA9IHN0YXRlU3R5bGUoaW5zdC5zdGF0ZSk7XG4gICAgY29uc3QgZGV2ID0gaW5zdC5vcmlnaW4/Lm5hbWUgfHwgaW5zdC5vcmlnaW4/LmlkIHx8ICdcdTIwMTQnO1xuICAgIGNvbnN0IG5hbWUgPSBpbnN0Lm5hbWUgfHwgaW5zdC5hbGFybT8ucnVsZSB8fCAnXHUyMDE0JztcbiAgICBjb25zdCBpbml0aWF0ZWQgPSBhY3RpdmF0aW9uTXMoaW5zdCk7XG4gICAgY29uc3Qgc2luY2UgPSBpbml0aWF0ZWQgIT0gbnVsbCA/IGR1cmF0aW9uTGFiZWwobm93IC0gaW5pdGlhdGVkKSA6ICdcdTIwMTQnO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs2fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17c2V2LmNvbG9yfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7c2V2LmdseXBofSB7c2V2LmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17OX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3N0LmNvbG9yfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7c3QubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXtkZXZXaWR0aCArIDJ9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICB7ZGV2fVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17bmFtZVdpZHRoICsgMn0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtuYW1lfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+e3NpbmNlfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjb3VudHNCeVNldmVyaXR5KGluc3RhbmNlcykge1xuICAgIGNvbnN0IG91dCA9IHsgY3JpdDogMCwgaGlnaDogMCwgbWVkOiAwLCBsb3c6IDAgfTtcbiAgICBmb3IgKGNvbnN0IGkgb2YgaW5zdGFuY2VzKSB7XG4gICAgICAgIGlmIChpLnNldmVyaXR5ID09PSBBTEFSTV9TRVZFUklUWS5DUklUSUNBTCkgb3V0LmNyaXQrKztcbiAgICAgICAgZWxzZSBpZiAoaS5zZXZlcml0eSA9PT0gQUxBUk1fU0VWRVJJVFkuSElHSCkgb3V0LmhpZ2grKztcbiAgICAgICAgZWxzZSBpZiAoaS5zZXZlcml0eSA9PT0gQUxBUk1fU0VWRVJJVFkuTUVESVVNKSBvdXQubWVkKys7XG4gICAgICAgIGVsc2UgaWYgKGkuc2V2ZXJpdHkgPT09IEFMQVJNX1NFVkVSSVRZLkxPVykgb3V0LmxvdysrO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQWxlcnRzVGFiKHsgYWxhcm1zIH0pIHtcbiAgICBjb25zdCB7IGluc3RhbmNlcywgbG9hZGluZywgZXJyb3IgfSA9IGFsYXJtcztcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGNvdW50cyA9IHVzZU1lbW8oKCkgPT4gY291bnRzQnlTZXZlcml0eShpbnN0YW5jZXMpLCBbaW5zdGFuY2VzXSk7XG4gICAgY29uc3QgZGV2V2lkdGggPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgaW5zdGFuY2VzLnJlZHVjZShcbiAgICAgICAgICAgICAgICAodywgaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgodywgKGkub3JpZ2luPy5uYW1lIHx8IGkub3JpZ2luPy5pZCB8fCAnJykubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAxMixcbiAgICAgICAgICAgICksXG4gICAgICAgIFtpbnN0YW5jZXNdLFxuICAgICk7XG4gICAgY29uc3QgbmFtZVdpZHRoID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGluc3RhbmNlcy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKHcsIGkpID0+IE1hdGgubWF4KHcsIChpLm5hbWUgfHwgaS5hbGFybT8ucnVsZSB8fCAnJykubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAxNixcbiAgICAgICAgICAgICksXG4gICAgICAgIFtpbnN0YW5jZXNdLFxuICAgICk7XG5cbiAgICBsZXQgYm9keTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgYm9keSA9IChcbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9PlxuICAgICAgICAgICAgICAgIGZhaWxlZCB0byBsb2FkIGFsYXJtczoge2Vycm9yPy5tZXNzYWdlIHx8IFN0cmluZyhlcnJvcil9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2FkaW5nICYmIGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYm9keSA9IDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5sb2FkaW5nIGFsYXJtc1x1MjAyNjwvVGV4dD47XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJvZHkgPSA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+bm8gYWN0aXZlIGFsYXJtcyBcdTIwMTQgZmxlZXQgaXMgaGVhbHRoeTwvVGV4dD47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYm9keSA9IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGVyQ2VsbCBsYWJlbD1cInNldmVyaXR5XCIgd2lkdGg9ezZ9IC8+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkZXJDZWxsIGxhYmVsPVwic3RhdGVcIiB3aWR0aD17OX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPEhlYWRlckNlbGwgbGFiZWw9XCJkZXZpY2VcIiB3aWR0aD17ZGV2V2lkdGggKyAyfSAvPlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGVyQ2VsbCBsYWJlbD1cInJ1bGVcIiB3aWR0aD17bmFtZVdpZHRoICsgMn0gLz5cbiAgICAgICAgICAgICAgICAgICAgPEhlYWRlckNlbGwgbGFiZWw9XCJzaW5jZVwiIHdpZHRoPXs4fSBhbGlnbj1cInJpZ2h0XCIgLz5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICB7aW5zdGFuY2VzLm1hcCgoaW5zdCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8QWxhcm1Sb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5zdC5pbnN0YW5jZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3Q9e2luc3R9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXZXaWR0aD17ZGV2V2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lV2lkdGg9e25hbWVXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdz17bm93fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0+XG4gICAgICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkFMRVJUU1wiXG4gICAgICAgICAgICAgICAgc3ViPXtgJHtpbnN0YW5jZXMubGVuZ3RofSBhY3RpdmVgfVxuICAgICAgICAgICAgICAgIHJpZ2h0PXtcbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUucmVkfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3VudHMuY3JpdCArIGNvdW50cy5oaWdofVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gY3JpdCBcdTAwQjcgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFtYmVyfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3VudHMubWVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gbWVkIFx1MDBCNyA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3VudHMubG93fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gbG93PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtib2R5fVxuICAgICAgICAgICAgPC9QYW5lbD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSAnLi9QYW5lbC5qc3gnO1xuXG5jb25zdCBLSU5EID0ge1xuICAgIGpvaW46IHsgY29sb3I6IHRoZW1lLmxpbWUgfSxcbiAgICBsZWF2ZTogeyBjb2xvcjogdGhlbWUuYW1iZXIgfSxcbiAgICBlcnI6IHsgY29sb3I6IHRoZW1lLnJlZCB9LFxuICAgIGluZm86IHsgY29sb3I6IHRoZW1lLmFjY2VudCB9LFxuICAgIHVwZDogeyBjb2xvcjogdGhlbWUuYWNjZW50IH0sXG4gICAgZGVwbG95OiB7IGNvbG9yOiB0aGVtZS5tYWdlbnRhIH0sXG59O1xuXG5mdW5jdGlvbiBFdmVudFJvdyh7IGUsIGRldldpZHRoIH0pIHtcbiAgICBjb25zdCBrID0gS0lORFtlLmtpbmRdIHx8IEtJTkQuaW5mbztcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17MTB9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT57ZS50fTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17OH0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2suY29sb3J9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtlLmtpbmQudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9e2RldldpZHRoICsgMn0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtlLmRldn1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICB7ZS5tc2d9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNUYWIoeyBldmVudHMgfSkge1xuICAgIGNvbnN0IGNvdW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBvdXQgPSB7IGpvaW46IDAsIGxlYXZlOiAwIH07XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiBldmVudHMpIHtcbiAgICAgICAgICAgIGlmIChlLmtpbmQgPT09ICdqb2luJykgb3V0LmpvaW4rKztcbiAgICAgICAgICAgIGVsc2UgaWYgKGUua2luZCA9PT0gJ2xlYXZlJykgb3V0LmxlYXZlKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LCBbZXZlbnRzXSk7XG4gICAgY29uc3QgZGV2V2lkdGggPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiBldmVudHMucmVkdWNlKCh3LCBlKSA9PiBNYXRoLm1heCh3LCBlLmRldi5sZW5ndGgpLCAxMiksXG4gICAgICAgIFtldmVudHNdLFxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgIDxQYW5lbFxuICAgICAgICAgICAgICAgIHRpdGxlPVwiRVZFTlRTXCJcbiAgICAgICAgICAgICAgICBzdWI9e2Ake2V2ZW50cy5sZW5ndGh9IGNhcHR1cmVkYH1cbiAgICAgICAgICAgICAgICByaWdodD17XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmxpbWV9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdW50cy5qb2lufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gam9pbnMgXHUwMEI3IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hbWJlcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y291bnRzLmxlYXZlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gbGVhdmVzIFx1MDBCNyA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubGltZX0+XHUyNUNGIGxpdmU8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2V2ZW50cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB3YWl0aW5nIGZvciBjb25uZWN0aW9uIGV2ZW50c1x1MjAyNiAoam9pbnMvbGVhdmVzIGRlcml2ZWQgZnJvbSBkZXZpY2UgcG9sbGluZylcbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2V2ZW50cy5tYXAoKGUsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPEV2ZW50Um93IGtleT17YCR7ZS50fS0ke2UuZGV2fS0ke2l9YH0gZT17ZX0gZGV2V2lkdGg9e2RldldpZHRofSAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9QYW5lbD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCwgdXNlSW5wdXQsIHVzZVN0ZG91dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSAnLi9QYW5lbC5qc3gnO1xuaW1wb3J0IHsgUGxheWJvb2tSdW5WaWV3IH0gZnJvbSAnLi9QbGF5Ym9va1J1blZpZXcuanN4JztcbmltcG9ydCB7IFBsYXlib29rUmVwb3J0VmlldyB9IGZyb20gJy4vUGxheWJvb2tSZXBvcnRWaWV3LmpzeCc7XG5pbXBvcnQgeyBQbGF5Ym9va1ZhcnNNb2RhbCB9IGZyb20gJy4vUGxheWJvb2tWYXJzTW9kYWwuanN4JztcbmltcG9ydCB7IERldmljZVBpY2tlck1vZGFsIH0gZnJvbSAnLi9EZXZpY2VQaWNrZXJNb2RhbC5qc3gnO1xuaW1wb3J0IHsgQ29uZmlybU1vZGFsIH0gZnJvbSAnLi9Db25maXJtTW9kYWwuanN4JztcbmltcG9ydCB7IHVzZVByb2R1Y3RQbGF5Ym9va3MgfSBmcm9tICcuLi9ob29rcy91c2VQcm9kdWN0UGxheWJvb2tzLmpzJztcbmltcG9ydCB7IHVzZVBsYXlib29rUnVuQ29udHJvbGxlciB9IGZyb20gJy4uL2hvb2tzL3VzZVBsYXlib29rUnVuQ29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJBY3RpdmVEZXZpY2VzIH0gZnJvbSAnLi4vLi4vLi4vbGliL2RldmljZXMuanMnO1xuXG5jb25zdCBQQU5FTFMgPSBbJ2xpc3QnLCAnZGV0YWlsJywgJ3JlcG9ydHMnXTtcblxuZnVuY3Rpb24gUGxheWJvb2tMaXN0KHsgcGxheWJvb2tzLCBsb2FkaW5nLCBlcnJvciwgc2VsZWN0ZWRJZHgsIGZvY3VzZWQgfSkge1xuICAgIGlmIChsb2FkaW5nICYmIHBsYXlib29rcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+bG9hZGluZ1x1MjAyNjwvVGV4dD47XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgICByZXR1cm4gPFRleHQgY29sb3I9e3RoZW1lLnJlZH0+e2Vycm9yfTwvVGV4dD47XG4gICAgfVxuICAgIGlmIChwbGF5Ym9va3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+bm8gcGxheWJvb2tzIHJlZ2lzdGVyZWQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19IHdyYXA9XCJ3cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgZnJvbSBDTEk6eycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaW5yIHByb2R1Y3QgcGxheWJvb2sgdXBsb2FkICZsdDtwcm9kdWN0Jmd0OyAmbHQ7bmFtZSZndDsgJmx0O2ZpbGUmZ3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIHtwbGF5Ym9va3MubWFwKChwYiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsID0gaSA9PT0gc2VsZWN0ZWRJZHg7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFyayA9IGZvY3VzZWQgJiYgaXNTZWwgPyAnXHUyNUI2JyA6IGlzU2VsID8gJ1x1MjAzQScgOiAnICc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e3BiLm5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2lzU2VsID8gdGhlbWUuYWNjZW50IDogdGhlbWUuZmdGYWludH0+e21hcmt9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBmbGV4R3Jvdz17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2lzU2VsID8gdGhlbWUuZmcgOiB0aGVtZS5mZ0RpbX0gYm9sZD17aXNTZWx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGIubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BiLmRlc2NyaXB0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYi5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBZYW1sVmlldyh7IGRldGFpbCwgc2Nyb2xsT2Zmc2V0LCBtYXhMaW5lcyB9KSB7XG4gICAgaWYgKCFkZXRhaWwpIHtcbiAgICAgICAgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5zZWxlY3QgYSBwbGF5Ym9vayB0byB2aWV3PC9UZXh0PjtcbiAgICB9XG4gICAgaWYgKGRldGFpbC5sb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PmxvYWRpbmcgWUFNTFx1MjAyNjwvVGV4dD47XG4gICAgfVxuICAgIGlmIChkZXRhaWwuZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9PntkZXRhaWwuZXJyb3J9PC9UZXh0PjtcbiAgICB9XG4gICAgY29uc3QgbGluZXMgPSAoZGV0YWlsLnlhbWwgfHwgJycpLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCB2aWV3ID0gbGluZXMuc2xpY2Uoc2Nyb2xsT2Zmc2V0LCBzY3JvbGxPZmZzZXQgKyBNYXRoLm1heChtYXhMaW5lcyB8fCA0MCwgNCkpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAge2RldGFpbC5wYXJzZUVycm9yICYmIChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hbWJlcn0+WUFNTCBwYXJzZSBlcnJvcjoge2RldGFpbC5wYXJzZUVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7dmlldy5tYXAoKGxuLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPFRleHQga2V5PXtpfSBjb2xvcj17dGhlbWUuZmd9IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyhzY3JvbGxPZmZzZXQgKyBpICsgMSkucGFkU3RhcnQoMyl9eycgJ31cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICB7bG4gfHwgJyAnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgICAge2xpbmVzLmxlbmd0aCA+IHNjcm9sbE9mZnNldCArIChtYXhMaW5lcyB8fCA0MCkgJiYgKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgXHUyMDI2e2xpbmVzLmxlbmd0aCAtIChzY3JvbGxPZmZzZXQgKyAobWF4TGluZXMgfHwgNDApKX0gbW9yZSBsaW5lc1xuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIFJlcG9ydHNMaXN0KHsgcmVwb3J0cywgc2VsZWN0ZWRJZHgsIGZvY3VzZWQsIGVycm9yIH0pIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5hbWJlcn0+e2Vycm9yfTwvVGV4dD47XG4gICAgfVxuICAgIGlmIChyZXBvcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pm5vIHBhc3QgcnVuczwvVGV4dD47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAge3JlcG9ydHMuc2xpY2UoMCwgMjApLm1hcCgociwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsID0gZm9jdXNlZCAmJiBpID09PSBzZWxlY3RlZElkeDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17ci5wYXRofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtpc1NlbCA/IHRoZW1lLmFjY2VudCA6IHRoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWwgPyAnXHUyNUI2JyA6ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtpc1NlbCA/IHRoZW1lLmZnIDogdGhlbWUuZmdEaW19IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3IubmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sICcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAge3JlcG9ydHMubGVuZ3RoID4gMjAgJiYgKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cdTIwMjZ7cmVwb3J0cy5sZW5ndGggLSAyMH0gb2xkZXI8L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBkZXJpdmVQcm9kdWN0cyhkZXZpY2VzKSB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgZCBvZiBkZXZpY2VzIHx8IFtdKSB7XG4gICAgICAgIGlmIChkPy5wcm9kdWN0KSBzZXQuYWRkKGQucHJvZHVjdCk7XG4gICAgfVxuICAgIHJldHVybiBbLi4uc2V0XS5zb3J0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQbGF5Ym9va3NUYWIoe1xuICAgIGRldmljZXMsXG4gICAgZGVmYXVsdFByb2R1Y3RJZCxcbiAgICBmb2N1c2VkLFxuICAgIG9uTW9kYWxBY3RpdmVDaGFuZ2UsXG59KSB7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHVzZVN0ZG91dCgpO1xuICAgIGNvbnN0IHJvd3MgPSBzdGRvdXQ/LnJvd3MgfHwgMjQ7XG5cbiAgICBjb25zdCBwcm9kdWN0T3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBsaXN0ID0gZGVyaXZlUHJvZHVjdHMoZGV2aWNlcyk7XG4gICAgICAgIGlmIChkZWZhdWx0UHJvZHVjdElkICYmICFsaXN0LmluY2x1ZGVzKGRlZmF1bHRQcm9kdWN0SWQpKSBsaXN0LnVuc2hpZnQoZGVmYXVsdFByb2R1Y3RJZCk7XG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH0sIFtkZXZpY2VzLCBkZWZhdWx0UHJvZHVjdElkXSk7XG5cbiAgICBjb25zdCBbcHJvZHVjdElkeCwgc2V0UHJvZHVjdElkeF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBwcm9kdWN0SWQgPVxuICAgICAgICBwcm9kdWN0T3B0aW9uc1twcm9kdWN0SWR4XSB8fCBwcm9kdWN0T3B0aW9uc1swXSB8fCBkZWZhdWx0UHJvZHVjdElkIHx8IG51bGw7XG5cbiAgICBjb25zdCB7XG4gICAgICAgIHBsYXlib29rcyxcbiAgICAgICAgbGlzdEVycm9yLFxuICAgICAgICBsb2FkaW5nLFxuICAgICAgICBkZXRhaWwsXG4gICAgICAgIHJlcG9ydHMsXG4gICAgICAgIHJlcG9ydHNFcnJvcixcbiAgICAgICAgcmVwb3J0RGV0YWlsLFxuICAgICAgICBsb2FkRGV0YWlsLFxuICAgICAgICBjbGVhckRldGFpbCxcbiAgICAgICAgbG9hZFJlcG9ydHMsXG4gICAgICAgIGxvYWRSZXBvcnQsXG4gICAgICAgIGNsZWFyUmVwb3J0LFxuICAgICAgICByZW1vdmUsXG4gICAgICAgIHJlZnJlc2gsXG4gICAgfSA9IHVzZVByb2R1Y3RQbGF5Ym9va3MocHJvZHVjdElkKTtcblxuICAgIGNvbnN0IHJ1biA9IHVzZVBsYXlib29rUnVuQ29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgW3NlbGVjdGVkSWR4LCBzZXRTZWxlY3RlZElkeF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbcmVwb3J0SWR4LCBzZXRSZXBvcnRJZHhdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2lubmVyRm9jdXMsIHNldElubmVyRm9jdXNdID0gdXNlU3RhdGUoJ2xpc3QnKTtcbiAgICBjb25zdCBbc2Nyb2xsLCBzZXRTY3JvbGxdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW25vdGljZSwgc2V0Tm90aWNlXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIC8vIERldmljZSBwaWNrZXIgbW9kZSBcdTIwMTQgYHRlc3RgOiBhZnRlciBwaWNrLCBzZWVkIHRoZSB2YXJzIG1vZGFsOyB0aGUgcnVuXG4gICAgLy8gY29udHJvbGxlciBrZWVwcyB0aGUgcmVzdCBvZiB0aGUgc3RhdGUgbWFjaGluZS5cbiAgICBjb25zdCBbZGV2aWNlUGlja2VyLCBzZXREZXZpY2VQaWNrZXJdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IHBsYXlib29rc1tzZWxlY3RlZElkeF07XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjbGVhckRldGFpbCgpO1xuICAgICAgICAgICAgc2V0UmVwb3J0SWR4KDApO1xuICAgICAgICAgICAgc2V0U2Nyb2xsKDApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxvYWREZXRhaWwoc2VsZWN0ZWQubmFtZSk7XG4gICAgICAgIGxvYWRSZXBvcnRzKHNlbGVjdGVkLm5hbWUpO1xuICAgICAgICBzZXRSZXBvcnRJZHgoMCk7XG4gICAgICAgIHNldFNjcm9sbCgwKTtcbiAgICB9LCBbc2VsZWN0ZWQ/Lm5hbWUsIHByb2R1Y3RJZF0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkSWR4ID49IHBsYXlib29rcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkSWR4KE1hdGgubWF4KDAsIHBsYXlib29rcy5sZW5ndGggLSAxKSk7XG4gICAgICAgIH1cbiAgICB9LCBbcGxheWJvb2tzLCBzZWxlY3RlZElkeF0pO1xuXG4gICAgY29uc3QgcnVuUGhhc2UgPSBydW4uc3RhdGUucGhhc2U7XG4gICAgY29uc3Qgb3ZlcmxheUFjdGl2ZSA9XG4gICAgICAgIHJ1blBoYXNlID09PSAndmFycycgfHxcbiAgICAgICAgcnVuUGhhc2UgPT09ICdydW5uaW5nJyB8fFxuICAgICAgICBydW5QaGFzZSA9PT0gJ2RvbmUnIHx8XG4gICAgICAgIHJ1blBoYXNlID09PSAnY29uZmlybWluZy1kZWxldGUnIHx8XG4gICAgICAgICEhZGV2aWNlUGlja2VyIHx8XG4gICAgICAgICEhcmVwb3J0RGV0YWlsO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgb25Nb2RhbEFjdGl2ZUNoYW5nZT8uKG92ZXJsYXlBY3RpdmUgJiYgZm9jdXNlZCk7XG4gICAgfSwgW292ZXJsYXlBY3RpdmUsIGZvY3VzZWQsIG9uTW9kYWxBY3RpdmVDaGFuZ2VdKTtcblxuICAgIC8vIFRvcC1sZXZlbCBpbnB1dCBmb3IgdGhlIHRhYjogbGlzdCBuYXZpZ2F0aW9uICsgYWN0aW9uIHNob3J0Y3V0cy5cbiAgICB1c2VJbnB1dChcbiAgICAgICAgKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghZm9jdXNlZCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKG92ZXJsYXlBY3RpdmUpIHJldHVybjsgLy8gbW9kYWxzIG93biBpbnB1dFxuXG4gICAgICAgICAgICBpZiAoa2V5LnRhYikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IGtleS5zaGlmdCA/IC0xIDogMTtcbiAgICAgICAgICAgICAgICBjb25zdCBpID0gUEFORUxTLmluZGV4T2YoaW5uZXJGb2N1cyk7XG4gICAgICAgICAgICAgICAgc2V0SW5uZXJGb2N1cyhQQU5FTFNbKGkgKyBkaXIgKyBQQU5FTFMubGVuZ3RoKSAlIFBBTkVMUy5sZW5ndGhdKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICdwJyAmJiBwcm9kdWN0T3B0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgc2V0UHJvZHVjdElkeCgoaSkgPT4gKGkgKyAxKSAlIHByb2R1Y3RPcHRpb25zLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJZHgoMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAncicpIHtcbiAgICAgICAgICAgICAgICByZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSBsb2FkUmVwb3J0cyhzZWxlY3RlZC5uYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbm5lckZvY3VzID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnVwQXJyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJZHgoKGkpID0+IE1hdGgubWF4KDAsIGkgLSAxKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJZHgoKGkpID0+IE1hdGgubWluKHBsYXlib29rcy5sZW5ndGggLSAxLCBpICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbm5lckZvY3VzID09PSAnZGV0YWlsJykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkudXBBcnJvdykge1xuICAgICAgICAgICAgICAgICAgICBzZXRTY3JvbGwoKHMpID0+IE1hdGgubWF4KDAsIHMgLSAxKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2Nyb2xsKChzKSA9PiBzICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnZycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2Nyb2xsKDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbm5lckZvY3VzID09PSAncmVwb3J0cycpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnVwQXJyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0SWR4KChpKSA9PiBNYXRoLm1heCgwLCBpIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXkuZG93bkFycm93KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlcG9ydElkeCgoaSkgPT4gTWF0aC5taW4ocmVwb3J0cy5sZW5ndGggLSAxLCBpICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXkucmV0dXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSByZXBvcnRzW3JlcG9ydElkeF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChyKSBsb2FkUmVwb3J0KHIucGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkZXRhaWw/LnBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzZXROb3RpY2UoJ1BsYXlib29rIFlBTUwgbm90IHJlYWR5IFx1MjAxNCBvcGVuIGl0IGZpcnN0LicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldERldmljZVBpY2tlcih7IG1vZGU6ICd0ZXN0JyB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICdhJykge1xuICAgICAgICAgICAgICAgIGlmICghZGV0YWlsPy5wYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Tm90aWNlKCdQbGF5Ym9vayBZQU1MIG5vdCByZWFkeSBcdTIwMTQgb3BlbiBpdCBmaXJzdC4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBydW4uc3RhcnRGbGVldFZhcnMoc2VsZWN0ZWQsIGRldGFpbC5wYXJzZWQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ3gnKSB7XG4gICAgICAgICAgICAgICAgcnVuLm9wZW5EZWxldGVDb25maXJtKHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgaXNBY3RpdmU6IGZvY3VzZWQgfSxcbiAgICApO1xuXG4gICAgLy8gUmVwb3J0IGRldGFpbCBvdmVybGF5IGlucHV0IChzaW1wbGUgZXNjLXRvLWNsb3NlKS5cbiAgICB1c2VJbnB1dChcbiAgICAgICAgKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghZm9jdXNlZCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFyZXBvcnREZXRhaWwpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChydW5QaGFzZSAhPT0gJ2lkbGUnKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoa2V5LmVzY2FwZSkgY2xlYXJSZXBvcnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpc0FjdGl2ZTogZm9jdXNlZCAmJiAhIXJlcG9ydERldGFpbCAmJiBydW5QaGFzZSA9PT0gJ2lkbGUnIH0sXG4gICAgKTtcblxuICAgIC8vIFJ1bm5pbmctcGhhc2UgaW5wdXQgKGFib3J0IG9ubHkpLlxuICAgIHVzZUlucHV0KFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1blBoYXNlICE9PSAncnVubmluZycpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChrZXkuZXNjYXBlKSBydW4uY2FuY2VsUnVubmluZygpO1xuICAgICAgICB9LFxuICAgICAgICB7IGlzQWN0aXZlOiBmb2N1c2VkICYmIHJ1blBoYXNlID09PSAncnVubmluZycgfSxcbiAgICApO1xuXG4gICAgY29uc3QgaGFuZGxlUnVuRG9uZUNsb3NlID0gKCkgPT4ge1xuICAgICAgICBpZiAocnVuUGhhc2UgIT09ICdkb25lJykgcmV0dXJuO1xuICAgICAgICBydW4uZGlzbWlzc0RvbmUoKTtcbiAgICAgICAgcmVmcmVzaCgpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIGxvYWRSZXBvcnRzKHNlbGVjdGVkLm5hbWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBzZWxlY3RlZFJlcG9ydCA9IHJlcG9ydHNbcmVwb3J0SWR4XSB8fCBudWxsO1xuXG4gICAgY29uc3QgdGl0bGUgPSBwcm9kdWN0SWQgPyBgUExBWUJPT0tTIFx1MDBCNyAke3Byb2R1Y3RJZH1gIDogJ1BMQVlCT09LUyc7XG5cbiAgICBjb25zdCByaWdodCA9IChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIHtwcm9kdWN0T3B0aW9ucy5sZW5ndGggPiAxICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cHJvZHVjdElkeCArIDF9L3twcm9kdWN0T3B0aW9ucy5sZW5ndGh9eycgICd9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLm1hZ2VudGF9PnA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+IHByb2R1Y3Q8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICApO1xuXG4gICAgY29uc3QgeWFtbE1heExpbmVzID0gTWF0aC5tYXgoNiwgcm93cyAtIDEwKTtcblxuICAgIC8vIEZsZWV0IGRldmljZSBjb2xsZWN0aW9uIGF0IHN1Ym1pdCB0aW1lLiBVc2luZyBsaXZlIHN0YXRlIGZyb21cbiAgICAvLyBgZGV2aWNlc2Aga2VlcHMgb2ZmbGluZSBmaWx0ZXJpbmcgY29uc2lzdGVudCB3aXRoIHdoYXQgdGhlIHRhYlxuICAgIC8vIHN1cmZhY2Ugc2hvd3MgYW5kIGF2b2lkcyBhIHNlY29uZCByb3VuZC10cmlwLlxuICAgIGNvbnN0IGNvbGxlY3RGbGVldFRhcmdldHMgPSAoaW5jbHVkZU9mZmxpbmUpID0+IHtcbiAgICAgICAgY29uc3Qgc2FtZVByb2R1Y3QgPSAoZGV2aWNlcyB8fCBbXSkuZmlsdGVyKChkKSA9PiBkLnByb2R1Y3QgPT09IHByb2R1Y3RJZCk7XG4gICAgICAgIHJldHVybiBpbmNsdWRlT2ZmbGluZSA/IHNhbWVQcm9kdWN0IDogZmlsdGVyQWN0aXZlRGV2aWNlcyhzYW1lUHJvZHVjdCk7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgPEJveCB3aWR0aD1cIjI4JVwiIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICAgICAgICAgICAgICBzdWI9e2Ake3BsYXlib29rcy5sZW5ndGh9YH1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ9e3JpZ2h0fVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtpbm5lckZvY3VzID09PSAnbGlzdCd9XG4gICAgICAgICAgICAgICAgICAgIGZsZXhHcm93PXsxfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgeyFwcm9kdWN0SWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gcHJvZHVjdCBhdmFpbGFibGUgXHUyMDE0IGRldmljZXMgcmVwb3J0IG5vIHByb2R1Y3QgYmluZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFBsYXlib29rTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlib29rcz17cGxheWJvb2tzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e2xpc3RFcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZElkeD17c2VsZWN0ZWRJZHh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17aW5uZXJGb2N1cyA9PT0gJ2xpc3QnfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgICAgIHtub3RpY2UgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFtYmVyfSB3cmFwPVwid3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtub3RpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAgPEJveCB3aWR0aD1cIjQ0JVwiIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICB7cnVuUGhhc2UgPT09ICdydW5uaW5nJyB8fCBydW5QaGFzZSA9PT0gJ2RvbmUnID8gKFxuICAgICAgICAgICAgICAgICAgICA8UGxheWJvb2tSdW5WaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZT17cnVuLnN0YXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZVJ1bkRvbmVDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1heE91dHB1dExpbmVzPXtNYXRoLm1heCg2LCByb3dzIC0gMTgpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJZQU1MXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yj17c2VsZWN0ZWQgPyBzZWxlY3RlZC5uYW1lIDogJyd9XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtpbm5lckZvY3VzID09PSAnZGV0YWlsJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubWFnZW50YX0+dDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gdGVzdCAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubWFnZW50YX0+YTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gYXBwbHkgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLm1hZ2VudGF9Png8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+IGRlbDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhHcm93PXsxfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8WWFtbFZpZXcgZGV0YWlsPXtkZXRhaWx9IHNjcm9sbE9mZnNldD17c2Nyb2xsfSBtYXhMaW5lcz17eWFtbE1heExpbmVzfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAgPEJveCB3aWR0aD1cIjI4JVwiIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJQQVNUIFJVTlNcIlxuICAgICAgICAgICAgICAgICAgICBzdWI9e3NlbGVjdGVkPy5uYW1lIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtpbm5lckZvY3VzID09PSAncmVwb3J0cyd9XG4gICAgICAgICAgICAgICAgICAgIGZsZXhHcm93PXsxfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3JlcG9ydERldGFpbCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBsYXlib29rUmVwb3J0VmlldyBkZXRhaWw9e3JlcG9ydERldGFpbH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ZXNjIGJhY2s8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJlcG9ydHNMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydHM9e3JlcG9ydHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSWR4PXtyZXBvcnRJZHh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e2lubmVyRm9jdXMgPT09ICdyZXBvcnRzJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e3JlcG9ydHNFcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZFJlcG9ydCAmJiBpbm5lckZvY3VzID09PSAncmVwb3J0cycgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRlciBvcGVuIFx1MDBCNyB7c2VsZWN0ZWRSZXBvcnQucGF0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvUGFuZWw+XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAge2RldmljZVBpY2tlciAmJiAoXG4gICAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9e3N0ZG91dD8uY29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXtzdGRvdXQ/LnJvd3N9XG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8RGV2aWNlUGlja2VyTW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVEVTVCBPTiBERVZJQ0VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlcz17KGRldmljZXMgfHwgW10pLmZpbHRlcigoZCkgPT4gZC5wcm9kdWN0ID09PSBwcm9kdWN0SWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHNldERldmljZVBpY2tlcihudWxsKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXsoZGV2aWNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGV2aWNlUGlja2VyKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCAmJiBkZXRhaWw/LnBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4uc3RhcnRTaW5nbGVWYXJzKHNlbGVjdGVkLCBkZXRhaWwucGFyc2VkLCBkZXZpY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7cnVuUGhhc2UgPT09ICd2YXJzJyAmJiAoXG4gICAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9e3N0ZG91dD8uY29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXtzdGRvdXQ/LnJvd3N9XG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8UGxheWJvb2tWYXJzTW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlib29rTmFtZT17cnVuLnN0YXRlLnBsYXlib29rPy5uYW1lIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT17cnVuLnN0YXRlLm1vZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM9e3J1bi5zdGF0ZS5wYXJzZWQ/LnZhcmlhYmxlcyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17cnVuLnN0YXRlLmRldmljZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZUNvdW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4uc3RhdGUubW9kZSA9PT0gJ2ZsZWV0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbGxlY3RGbGVldFRhcmdldHMoZmFsc2UpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hTaXplPXtydW4uc3RhdGUuYmF0Y2hTaXplfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZVRocmVzaG9sZD17cnVuLnN0YXRlLmZhaWx1cmVUaHJlc2hvbGR9XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlT2ZmbGluZT17cnVuLnN0YXRlLmluY2x1ZGVPZmZsaW5lfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHJ1bi5jYW5jZWxGbG93KCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17YXN5bmMgKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9mZmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bi5zdGF0ZS5tb2RlID09PSAnZmxlZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldHMgPSBjb2xsZWN0RmxlZXRUYXJnZXRzKGluY2x1ZGVPZmZsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXROb3RpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9mZmxpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnTm8gZGV2aWNlcyBib3VuZCB0byB0aGlzIHByb2R1Y3QuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdObyBhY3RpdmUgZGV2aWNlcyBcdTIwMTQgZW5hYmxlIGluY2x1ZGUtb2ZmbGluZSB0byB0YXJnZXQgb2ZmbGluZSB0b28uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4uY2FuY2VsRmxvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJ1bi5ydW5GbGVldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5Ym9vazogcnVuLnN0YXRlLnBsYXlib29rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkOiBydW4uc3RhdGUucGFyc2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlczogdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlT2ZmbGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcnVuLnJ1blNpbmdsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5Ym9vazogcnVuLnN0YXRlLnBsYXlib29rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkOiBydW4uc3RhdGUucGFyc2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlOiBydW4uc3RhdGUuZGV2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge3J1blBoYXNlID09PSAnY29uZmlybWluZy1kZWxldGUnICYmIChcbiAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD17c3Rkb3V0Py5jb2x1bW5zfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3N0ZG91dD8ucm93c31cbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDb25maXJtTW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtgREVMRVRFIFBMQVlCT09LIFwiJHtydW4uc3RhdGUucGxheWJvb2s/Lm5hbWUgfHwgJyd9XCJgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keT17W1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBSZW1vdmUgXCIke3J1bi5zdGF0ZS5wbGF5Ym9vaz8ubmFtZX1cIiBmcm9tIHByb2R1Y3QgXCIke3Byb2R1Y3RJZH1cIj9gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgWUFNTCBmaWxlIGFuZCB0aGUgaW5kZXggZW50cnkgd2lsbCBiZSBkZWxldGVkLicsXG4gICAgICAgICAgICAgICAgICAgICAgICBdfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybUxhYmVsPVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvbmU9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHJ1bi5jYW5jZWxGbG93KCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm09e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBydW4uc3RhdGUucGxheWJvb2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLmNhbmNlbEZsb3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZW1vdmUodGFyZ2V0Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE5vdGljZShgZGVsZXRlIGZhaWxlZDogJHtyZXMuZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Tm90aWNlKGBkZWxldGVkIFwiJHt0YXJnZXQubmFtZX1cImApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSAnLi9QYW5lbC5qc3gnO1xuXG5mdW5jdGlvbiBTdGVwTGluZSh7IHN0ZXAsIHNlbGVjdGVkLCBleHBhbmRlZCwgZm9jdXNlZCB9KSB7XG4gICAgY29uc3Qgc3RhdHVzID0gc3RlcC5zdGF0dXM7XG4gICAgbGV0IGdseXBoID0gJ1x1MDBCNyc7XG4gICAgbGV0IGNvbG9yID0gdGhlbWUuZmdEaW07XG4gICAgaWYgKHN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgIGdseXBoID0gJ1x1MjFCQic7XG4gICAgICAgIGNvbG9yID0gdGhlbWUuYWNjZW50O1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgIGdseXBoID0gJ1x1MjcxMyc7XG4gICAgICAgIGNvbG9yID0gdGhlbWUubGltZTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgZ2x5cGggPSAnXHUyNzE1JztcbiAgICAgICAgY29sb3IgPSB0aGVtZS5yZWQ7XG4gICAgfVxuICAgIGNvbnN0IGR1cmF0aW9uVHh0ID1cbiAgICAgICAgTnVtYmVyLmlzRmluaXRlKHN0ZXAuZHVyYXRpb25NcykgJiYgc3RlcC5zdGF0dXMgIT09ICdydW5uaW5nJ1xuICAgICAgICAgICAgPyBgICgke3N0ZXAuZHVyYXRpb25Nc31tcylgXG4gICAgICAgICAgICA6ICcnO1xuICAgIGNvbnN0IG1hcmtlciA9IHNlbGVjdGVkID8gKGZvY3VzZWQgPyAnXHUyNUI2JyA6ICdcdTIwM0EnKSA6ICcgJztcbiAgICBjb25zdCBleHBhbmRUYWcgPSBleHBhbmRlZCA/ICcgXHUyNUJFJyA6IHNlbGVjdGFibGUoc3RlcCkgPyAnIFx1MjVCOCcgOiAnJztcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3NlbGVjdGVkID8gdGhlbWUuYWNjZW50IDogdGhlbWUuZmdGYWludH0+e21hcmtlcn08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtjb2xvcn0+e2dseXBofTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17M30+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntTdHJpbmcoc3RlcC5pbmRleCArIDEpLnBhZFN0YXJ0KDIpfS48L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtzZWxlY3RlZCA/IHRoZW1lLmZnIDogdGhlbWUuZmd9IGJvbGQ9e3NlbGVjdGVkfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtzdGVwLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgIHtleHBhbmRUYWcgJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntleHBhbmRUYWd9PC9UZXh0Pn1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtzdGVwLnN1bW1hcnkgfHwgJyd9XG4gICAgICAgICAgICAgICAgICAgIHtkdXJhdGlvblR4dH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0YWJsZShzdGVwKSB7XG4gICAgcmV0dXJuICEhKHN0ZXA/LnN0ZG91dCB8fCBzdGVwPy5zdGRlcnIgfHwgc3RlcD8uZXJyb3IpO1xufVxuXG5mdW5jdGlvbiBTdGVwT3V0cHV0Vmlldyh7IHN0ZXAsIG1heExpbmVzIH0pIHtcbiAgICBpZiAoIXN0ZXApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN0ZG91dCA9IChzdGVwLnN0ZG91dCB8fCAnJykucmVwbGFjZSgvXFxzKyQvLCAnJyk7XG4gICAgY29uc3Qgc3RkZXJyID0gKHN0ZXAuc3RkZXJyIHx8ICcnKS5yZXBsYWNlKC9cXHMrJC8sICcnKTtcbiAgICBjb25zdCBlcnJvciA9IHN0ZXAuZXJyb3I7XG4gICAgY29uc3Qgbm90aGluZyA9ICFzdGRvdXQgJiYgIXN0ZGVyciAmJiAhZXJyb3I7XG4gICAgaWYgKG5vdGhpbmcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+KG5vIG91dHB1dCBjYXB0dXJlZCBmb3IgdGhpcyBzdGVwKTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBidWRnZXQgPSBNYXRoLm1heCg0LCBtYXhMaW5lcyB8fCAxMik7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBbXTtcbiAgICBpZiAoc3RkZXJyKSBzZWN0aW9ucy5wdXNoKHsgbGFiZWw6ICdzdGRlcnInLCBjb2xvcjogdGhlbWUucmVkLCB0ZXh0OiBzdGRlcnIgfSk7XG4gICAgaWYgKHN0ZG91dCkgc2VjdGlvbnMucHVzaCh7IGxhYmVsOiAnc3Rkb3V0JywgY29sb3I6IHRoZW1lLmZnRGltLCB0ZXh0OiBzdGRvdXQgfSk7XG4gICAgaWYgKGVycm9yICYmICFzdGRlcnIgJiYgIXN0ZG91dCkge1xuICAgICAgICBzZWN0aW9ucy5wdXNoKHsgbGFiZWw6ICdlcnJvcicsIGNvbG9yOiB0aGVtZS5yZWQsIHRleHQ6IGVycm9yIH0pO1xuICAgIH1cbiAgICBjb25zdCBwZXJTZWN0aW9uID0gTWF0aC5tYXgoMiwgTWF0aC5mbG9vcihidWRnZXQgLyBNYXRoLm1heCgxLCBzZWN0aW9ucy5sZW5ndGgpKSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIHtzZWN0aW9ucy5tYXAoKHMsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gcy50ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWlsID0gbGluZXMuc2xpY2UoLXBlclNlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3BwZWQgPSBsaW5lcy5sZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17aWR4fSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgbWFyZ2luVG9wPXtpZHggPT09IDAgPyAwIDogMX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17cy5jb2xvcn0+XHUyNTAwXHUyNTAwIHtzLmxhYmVsfSBcdTI1MDBcdTI1MDA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZHJvcHBlZCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUyMDI2e2Ryb3BwZWR9IGVhcmxpZXIgbGluZXtkcm9wcGVkID09PSAxID8gJycgOiAncyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0YWlsLm1hcCgobG4sIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBrZXk9e2l9IGNvbG9yPXt0aGVtZS5mZ30gd3JhcD1cIndyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xuIHx8ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBidWlsZFN0ZXBzRm9yRG9uZShzdGF0ZSkge1xuICAgIHJldHVybiAoc3RhdGUucmVzdWx0Py5zdGVwcyB8fCBbXSkubWFwKChzKSA9PiAoe1xuICAgICAgICBpbmRleDogcy5pbmRleCxcbiAgICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgICBzdGF0dXM6IHMuc2tpcHBlZCA/ICdza2lwcGVkJyA6IHMub2sgPyAnb2snIDogJ2ZhaWxlZCcsXG4gICAgICAgIHN1bW1hcnk6IHMuc3VtbWFyeSxcbiAgICAgICAgZXJyb3I6IHMuZXJyb3IsXG4gICAgICAgIGR1cmF0aW9uTXM6IHMuZHVyYXRpb25NcyxcbiAgICAgICAgc3Rkb3V0OiBzLnN0ZG91dCxcbiAgICAgICAgc3RkZXJyOiBzLnN0ZGVycixcbiAgICAgICAgZXhpdENvZGU6IHMuZXhpdENvZGUsXG4gICAgfSkpO1xufVxuXG5mdW5jdGlvbiBTaW5nbGVSdW5Cb2R5KHsgc3RhdGUsIGZvY3VzZWQsIG9uQ2xvc2UsIG1heE91dHB1dExpbmVzIH0pIHtcbiAgICBjb25zdCBzdGVwcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdkb25lJykgcmV0dXJuIGJ1aWxkU3RlcHNGb3JEb25lKHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUuc3RlcHNQcm9ncmVzcz8udmFsdWVzPy4oKSB8fCBbXSkuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgIH0sIFtzdGF0ZV0pO1xuXG4gICAgY29uc3QgaXNEb25lID0gc3RhdGUucGhhc2UgPT09ICdkb25lJztcbiAgICBjb25zdCBmaXJzdEZhaWxlZElkeCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIWlzRG9uZSkgcmV0dXJuIC0xO1xuICAgICAgICByZXR1cm4gc3RlcHMuZmluZEluZGV4KChzKSA9PiBzLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xuICAgIH0sIFtzdGVwcywgaXNEb25lXSk7XG5cbiAgICBjb25zdCBbc2VsZWN0ZWRJZHgsIHNldFNlbGVjdGVkSWR4XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLy8gQXV0by1zZWxlY3QgYW5kIGF1dG8tZXhwYW5kIHRoZSBmaXJzdCBmYWlsZWQgc3RlcCB0aGUgbW9tZW50IHdlXG4gICAgLy8gdHJhbnNpdGlvbiB0byAnZG9uZScuIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBsYXN0IHN0ZXAgc28gdGhlXG4gICAgLy8gdXNlciBzZWVzIHRoZSBtb3N0IHJlY2VudCBvdXRwdXQuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFpc0RvbmUpIHJldHVybjtcbiAgICAgICAgaWYgKHN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBpZiAoZmlyc3RGYWlsZWRJZHggPj0gMCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRJZHgoZmlyc3RGYWlsZWRJZHgpO1xuICAgICAgICAgICAgc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZElkeChzdGVwcy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sIFtpc0RvbmUsIGZpcnN0RmFpbGVkSWR4LCBzdGVwcy5sZW5ndGhdKTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmb2N1c2VkIHx8ICFpc0RvbmUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChrZXkuZXNjYXBlKSB7XG4gICAgICAgICAgICAgICAgb25DbG9zZT8uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS51cEFycm93KSB7XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJZHgoKGkpID0+IE1hdGgubWF4KDAsIGkgLSAxKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZElkeCgoaSkgPT4gTWF0aC5taW4oc3RlcHMubGVuZ3RoIC0gMSwgaSArIDEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5LnJldHVybiB8fCBpbnB1dCA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgc2V0RXhwYW5kZWQoKGUpID0+ICFlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBpc0FjdGl2ZTogISFmb2N1c2VkICYmIGlzRG9uZSB9LFxuICAgICk7XG5cbiAgICBjb25zdCBoZWFkZXIgPVxuICAgICAgICBzdGF0ZS5waGFzZSA9PT0gJ3J1bm5pbmcnXG4gICAgICAgICAgICA/ICdSVU5OSU5HJ1xuICAgICAgICAgICAgOiBzdGF0ZS5yZXN1bHQ/Lm9rXG4gICAgICAgICAgICAgID8gJ0RPTkUgXHUwMEI3IE9LJ1xuICAgICAgICAgICAgICA6ICdET05FIFx1MDBCNyBGQUlMRUQnO1xuICAgIGNvbnN0IGhlYWRlckNvbG9yID1cbiAgICAgICAgc3RhdGUucGhhc2UgPT09ICdydW5uaW5nJ1xuICAgICAgICAgICAgPyB0aGVtZS5hY2NlbnRcbiAgICAgICAgICAgIDogc3RhdGUucmVzdWx0Py5va1xuICAgICAgICAgICAgICA/IHRoZW1lLmxpbWVcbiAgICAgICAgICAgICAgOiB0aGVtZS5yZWQ7XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IGlzRG9uZSA/IHN0ZXBzW3NlbGVjdGVkSWR4XSA6IG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxCb3gganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCIgbWFyZ2luQm90dG9tPXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aGVhZGVyQ29sb3J9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+XG4gICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5wbGF5Ym9vaz8ubmFtZX0gXHUyMTkyIHtzdGF0ZS5kZXZpY2U/LmRldmljZX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIHtzdGVwcy5sZW5ndGggPT09IDAgJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PnByZXBhcmluZy4uLjwvVGV4dD59XG4gICAgICAgICAgICB7c3RlcHMubWFwKChzLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPFN0ZXBMaW5lXG4gICAgICAgICAgICAgICAgICAgIGtleT17cy5pbmRleH1cbiAgICAgICAgICAgICAgICAgICAgc3RlcD17c31cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2lzRG9uZSAmJiBpID09PSBzZWxlY3RlZElkeH1cbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQ9e2lzRG9uZSAmJiBpID09PSBzZWxlY3RlZElkeCAmJiBleHBhbmRlZH1cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17ISFmb2N1c2VkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIHtzdGF0ZS5waGFzZSA9PT0gJ2RvbmUnICYmICFzdGF0ZS5yZXN1bHQ/Lm9rICYmIHN0YXRlLnJlc3VsdD8uZXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnJlZH0+e3N0YXRlLnJlc3VsdC5lcnJvcn08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2lzRG9uZSAmJiBleHBhbmRlZCAmJiBzZWxlY3RlZCAmJiAoXG4gICAgICAgICAgICAgICAgPFN0ZXBPdXRwdXRWaWV3IHN0ZXA9e3NlbGVjdGVkfSBtYXhMaW5lcz17bWF4T3V0cHV0TGluZXN9IC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2lzRG9uZSAmJiAoXG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICBcdTIxOTFcdTIxOTMgc3RlcCBcdTAwQjcgZW50ZXIge2V4cGFuZGVkID8gJ2NvbGxhcHNlJyA6ICdleHBhbmQnfSBcdTAwQjcgZXNjIGNsb3NlXG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIEZsZWV0UnVuQm9keSh7IHN0YXRlIH0pIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gc3RhdGUuc3VtbWFyeSB8fCB7IGF0dGVtcHRlZDogMCwgc3VjY2VlZGVkOiAwLCBmYWlsZWQ6IDAsIGZhaWx1cmVSYXRlOiAwIH07XG4gICAgY29uc3QgcGVyRGV2aWNlID0gQXJyYXkuZnJvbShzdGF0ZS5wZXJEZXZpY2U/LnZhbHVlcz8uKCkgfHwgW10pO1xuICAgIGNvbnN0IGRvbmUgPSBzdGF0ZS5waGFzZSA9PT0gJ2RvbmUnO1xuICAgIGNvbnN0IHRpdGxlID0gZG9uZVxuICAgICAgICA/IHN0YXRlLmFib3J0ZWRcbiAgICAgICAgICAgID8gJ1JPTExPVVQgQUJPUlRFRCdcbiAgICAgICAgICAgIDogJ1JPTExPVVQgRE9ORSdcbiAgICAgICAgOiAnUk9MTElORyBPVVQnO1xuICAgIGNvbnN0IGhlYWRlckNvbG9yID0gZG9uZVxuICAgICAgICA/IHN0YXRlLmFib3J0ZWRcbiAgICAgICAgICAgID8gdGhlbWUucmVkXG4gICAgICAgICAgICA6IHN1bW1hcnkuZmFpbGVkID4gMFxuICAgICAgICAgICAgICA/IHRoZW1lLmFtYmVyXG4gICAgICAgICAgICAgIDogdGhlbWUubGltZVxuICAgICAgICA6IHRoZW1lLmFjY2VudDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPEJveCBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIiBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtoZWFkZXJDb2xvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PlxuICAgICAgICAgICAgICAgICAgICB7c3RhdGUucGxheWJvb2s/Lm5hbWV9IFx1MDBCNyBiYXRjaCB7c3RhdGUuYmF0Y2hTaXplfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PnByb2dyZXNzOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT5cbiAgICAgICAgICAgICAgICAgICAge3N1bW1hcnkuc3VjY2VlZGVkfS97c3VtbWFyeS5hdHRlbXB0ZWR9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+IG9mIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntzdGF0ZS50b3RhbERldmljZXMgfHwgc3RhdGUuZGV2aWNlQ291bnR9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ICBmYWlsdXJlIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17c3VtbWFyeS5mYWlsdXJlUmF0ZSA+IDAgPyB0aGVtZS5yZWQgOiB0aGVtZS5mZ0RpbX0+XG4gICAgICAgICAgICAgICAgICAgIHtzdW1tYXJ5LmZhaWx1cmVSYXRlLnRvRml4ZWQoMSl9JVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAge3N0YXRlLmN1cnJlbnRCYXRjaCAmJiAhZG9uZSAmJiAoXG4gICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5iYXRjaCB7c3RhdGUuY3VycmVudEJhdGNoLmluZGV4ICsgMX06IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57c3RhdGUuY3VycmVudEJhdGNoLmRldmljZUlkcz8ubGVuZ3RofSBkZXZpY2Uocyk8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICBbe3N0YXRlLmN1cnJlbnRCYXRjaC5maXJzdEluZGV4ICsgMX1cdTIwMTNcbiAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5jdXJyZW50QmF0Y2guZmlyc3RJbmRleCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLmN1cnJlbnRCYXRjaC5kZXZpY2VJZHM/Lmxlbmd0aCB8fCAwKX1dXG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7KHN0YXRlLmJhdGNoZXMgfHwgW10pLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+YmF0Y2hlczo8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5iYXRjaGVzLm1hcCgoYikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e2IuaW5kZXh9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+e2IuaW5kZXggKyAxfS48L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmxpbWV9PntiLm9rIHx8IGIuc3VjY2VlZGVkIHx8IDB9IG9rPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT4sIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17KGIuZmFpbGVkIHx8IDApID4gMCA/IHRoZW1lLnJlZCA6IHRoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Yi5mYWlsZWQgfHwgMH0gZmFpbGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT4gICh7Yi5zaXplfSBkZXZpY2UocykpPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtwZXJEZXZpY2UubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5kZXZpY2VzOjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge3BlckRldmljZS5zbGljZSgtMTApLm1hcCgocikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e3IuZGV2aWNlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnNraXBwZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGVtZS5hbWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHIub2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoZW1lLmxpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoZW1lLnJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ci5za2lwcGVkID8gJyEnIDogci5vayA/ICdcdTI3MTMnIDogJ1x1MjcxNSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ci5kZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ci5lcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyLmVycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZG9uZSAmJiBzdGF0ZS5yZXBvcnRVcGxvYWQgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAge3N0YXRlLnJlcG9ydFVwbG9hZC5vayA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+cmVwb3J0OiB7c3RhdGUucmVwb3J0VXBsb2FkLnBhdGh9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFtYmVyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQgbm90IHNhdmVkOiB7c3RhdGUucmVwb3J0VXBsb2FkLnJlYXNvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQbGF5Ym9va1J1blZpZXcoeyBzdGF0ZSwgZm9jdXNlZCwgb25DbG9zZSwgbWF4T3V0cHV0TGluZXMgfSkge1xuICAgIGlmICghc3RhdGUgfHwgc3RhdGUucGhhc2UgPT09ICdpZGxlJykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFBhbmVsIHRpdGxlPVwiUlVOXCIgZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT4obm8gcnVuIGluIHByb2dyZXNzKTwvVGV4dD5cbiAgICAgICAgICAgIDwvUGFuZWw+XG4gICAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHJ1bm5pbmcgPSBzdGF0ZS5waGFzZSA9PT0gJ3J1bm5pbmcnO1xuICAgIGNvbnN0IHRpdGxlID0gc3RhdGUubW9kZSA9PT0gJ2ZsZWV0JyA/ICdST0xMT1VUJyA6ICdSVU4nO1xuICAgIGNvbnN0IHJpZ2h0ID0gcnVubmluZyA/IChcbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0+XHUyNUNGIHJ1bm5pbmcgXHUwMEI3IGVzYyBhYm9ydDwvVGV4dD5cbiAgICApIDogKFxuICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PmVzYyBjbG9zZTwvVGV4dD5cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxQYW5lbCB0aXRsZT17dGl0bGV9IHJpZ2h0PXtyaWdodH0gZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAge3N0YXRlLm1vZGUgPT09ICdmbGVldCcgPyAoXG4gICAgICAgICAgICAgICAgPEZsZWV0UnVuQm9keSBzdGF0ZT17c3RhdGV9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxTaW5nbGVSdW5Cb2R5XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPXtzdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgbWF4T3V0cHV0TGluZXM9e21heE91dHB1dExpbmVzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L1BhbmVsPlxuICAgICk7XG59XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcblxuZnVuY3Rpb24gZm10VHMocykge1xuICAgIGlmICghcykgcmV0dXJuICdcdTIwMTQnO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShzKS50b0xvY2FsZVN0cmluZygpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFBsYXlib29rUmVwb3J0Vmlldyh7IGRldGFpbCB9KSB7XG4gICAgaWYgKCFkZXRhaWwpIHJldHVybiBudWxsO1xuICAgIGlmIChkZXRhaWwubG9hZGluZykge1xuICAgICAgICByZXR1cm4gPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5sb2FkaW5nIHJlcG9ydFx1MjAyNjwvVGV4dD47XG4gICAgfVxuICAgIGlmIChkZXRhaWwuZXJyb3IgJiYgIWRldGFpbC5yZXBvcnQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9PntkZXRhaWwuZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgICAgIHtkZXRhaWwucmF3ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZGV0YWlsLnJhdy5zbGljZSgwLCAzMDApfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCByID0gZGV0YWlsLnJlcG9ydDtcbiAgICBpZiAoIXIpIHJldHVybiA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+KGVtcHR5KTwvVGV4dD47XG5cbiAgICBjb25zdCBzdW1tYXJ5ID0gci5zdW1tYXJ5IHx8IHt9O1xuICAgIGNvbnN0IGZhaWxlZCA9IHIuYWJvcnRlZCB8fCAoc3VtbWFyeS5mYWlsZWQgfHwgMCkgPiAwO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8Qm94IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtyLm5hbWV9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtmYWlsZWQgPyB0aGVtZS5yZWQgOiB0aGVtZS5saW1lfT5cbiAgICAgICAgICAgICAgICAgICAge3IuYWJvcnRlZCA/ICdBQk9SVEVEJyA6IGZhaWxlZCA/ICdGQUlMRUQnIDogJ09LJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5zdGFydGVkOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57Zm10VHMoci5zdGFydGVkQXQpfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PmZpbmlzaGVkOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57Zm10VHMoci5maW5pc2hlZEF0KX08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT51c2VyOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57ci51c2VyIHx8ICdcdTIwMTQnfTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19Pm1vZGU6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntyLm1vZGUgfHwgJ1x1MjAxNCd9PC9UZXh0PlxuICAgICAgICAgICAgICAgIHtyLnJvbGxvdXQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gIGJhdGNoPTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e3Iucm9sbG91dC5iYXRjaFNpemV9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gIHRocmVzaG9sZD08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntyLnJvbGxvdXQuZmFpbHVyZVRocmVzaG9sZH0lPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5hdHRlbXB0ZWQ6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntzdW1tYXJ5LmF0dGVtcHRlZCA/PyAwfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiAgb2s6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubGltZX0+e3N1bW1hcnkuc3VjY2VlZGVkID8/IDB9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ICBmYWlsZWQ6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17KHN1bW1hcnkuZmFpbGVkIHx8IDApID4gMCA/IHRoZW1lLnJlZCA6IHRoZW1lLmZnRGltfT5cbiAgICAgICAgICAgICAgICAgICAge3N1bW1hcnkuZmFpbGVkID8/IDB9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ICByYXRlOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT5cbiAgICAgICAgICAgICAgICAgICAge051bWJlci5pc0Zpbml0ZShzdW1tYXJ5LmZhaWx1cmVSYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtzdW1tYXJ5LmZhaWx1cmVSYXRlLnRvRml4ZWQoMSl9JWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ1x1MjAxNCd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICB7ci5yZWFzb24gJiYgKFxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+cmVhc29uOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hbWJlcn0+e3IucmVhc29ufTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7QXJyYXkuaXNBcnJheShyLmRldmljZXMpICYmIHIuZGV2aWNlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PmRldmljZXM6PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICB7ci5kZXZpY2VzLnNsaWNlKDAsIDIwKS5tYXAoKGQpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3gga2V5PXtkLmRldmljZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5za2lwcGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhlbWUuYW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkLm9rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGVtZS5saW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGVtZS5yZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Quc2tpcHBlZCA/ICchJyA6IGQub2sgPyAnXHUyNzEzJyA6ICdcdTI3MTUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2QuZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2QuZXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUucmVkfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZC5lcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIHtyLmRldmljZXMubGVuZ3RoID4gMjAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx1MjAyNntyLmRldmljZXMubGVuZ3RoIC0gMjB9IG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG4iLCAiaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcblxuY29uc3QgTUlOX0JBVENIID0gMTtcbmNvbnN0IE1BWF9CQVRDSCA9IDUwO1xuXG4vLyBBIHNpbmdsZSB0ZXh0IGlucHV0IGxpbmUgd2l0aCBjdXJzb3IgKyBrZXlib2FyZCBlZGl0aW5nLiBUaGUgY2FsbGVyXG4vLyBkcml2ZXMgZm9jdXMgYW5kIHZhbHVlIFx1MjAxNCB3ZSBrZWVwIHRoZSBpbXBsZW1lbnRhdGlvbiBsb2NhbCBzbyBlYWNoIHZhclxuLy8gZmllbGQgY2FuIHNoYXJlIGV4YWN0bHkgdGhlIHNhbWUgYmVoYXZpb3VyIHdpdGhvdXQgcHVsbGluZyBpbiBhIFVJIGxpYi5cbmZ1bmN0aW9uIFRleHRGaWVsZCh7IHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gICAgY29uc3QgZGlzcGxheSA9IHZhbHVlID8/ICcnO1xuICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntkaXNwbGF5fTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBpbnZlcnNlPlxuICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2Rpc3BsYXkubGVuZ3RoID8gZGlzcGxheSA6ICcgJ308L1RleHQ+O1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVEZWZhdWx0KHZhbHVlLCB0eXBlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBjb2VyY2UocmF3LCB0eXBlKSB7XG4gICAgY29uc3QgcyA9IHJhdyA/PyAnJztcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogcyB9O1xuICAgICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgICAgICBpZiAocyA9PT0gJycpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdudW1iZXIgcmVxdWlyZWQnIH07XG4gICAgICAgICAgICBjb25zdCBuID0gTnVtYmVyKHMpO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobikpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdub3QgYSBmaW5pdGUgbnVtYmVyJyB9O1xuICAgICAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBuIH07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBpZiAocyA9PT0gJ3RydWUnKSByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHRydWUgfTtcbiAgICAgICAgICAgIGlmIChzID09PSAnZmFsc2UnKSByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IGZhbHNlIH07XG4gICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnZXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZScgfTtcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgIGlmIChzLnRyaW0oKSA9PT0gJycpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdKU09OIHJlcXVpcmVkJyB9O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IEpTT04ucGFyc2UocykgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGVyci5tZXNzYWdlIHx8ICdpbnZhbGlkIEpTT04nIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHMgfTtcbiAgICB9XG59XG5cbi8qKlxuICogVmFyaWFibGVzIGVkaXRvciArIHJ1biBvcHRpb25zIG1vZGFsLiBVc2VkIGZvciBib3RoIHNpbmdsZS1kZXZpY2UgYW5kXG4gKiBmbGVldCBydW5zIFx1MjAxNCBmbGVldCBtb2RlIGFsc28gZXhwb3NlcyBiYXRjaCBzaXplLCBmYWlsdXJlIHRocmVzaG9sZCBhbmRcbiAqIHRoZSBpbmNsdWRlLW9mZmxpbmUgdG9nZ2xlICh0aGUgdGFzayBzcGVjIGxpc3RzIG9mZmxpbmUgaW5jbHVzaW9uIGFzXG4gKiBwYXJ0IG9mIHRoZSByb2xsb3V0IGZvcm0pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUGxheWJvb2tWYXJzTW9kYWwoe1xuICAgIHBsYXlib29rTmFtZSxcbiAgICBtb2RlLFxuICAgIHZhcmlhYmxlcyxcbiAgICBkZXZpY2UsXG4gICAgZGV2aWNlQ291bnQsXG4gICAgYmF0Y2hTaXplOiBpbml0aWFsQmF0Y2hTaXplID0gNSxcbiAgICBmYWlsdXJlVGhyZXNob2xkOiBpbml0aWFsRmFpbHVyZVRocmVzaG9sZCA9IDEwLFxuICAgIGluY2x1ZGVPZmZsaW5lOiBpbml0aWFsSW5jbHVkZU9mZmxpbmUgPSBmYWxzZSxcbiAgICBvblN1Ym1pdCxcbiAgICBvbkNhbmNlbCxcbn0pIHtcbiAgICAvLyBTdHJpbmdzIHRvIG1hdGNoIHdoYXQgdGhlIHVzZXIgYWN0dWFsbHkgdHlwZXMuIFdlIGNvZXJjZSBiYWNrIHRvXG4gICAgLy8gdGhlIGRlY2xhcmVkIHR5cGUgb25seSBhdCBzdWJtaXQgdGltZS5cbiAgICBjb25zdCBpbml0aWFsRmllbGRzID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICh2YXJpYWJsZXMgfHwgW10pLm1hcCgodikgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHYuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgdHlwZTogdi50eXBlLFxuICAgICAgICAgICAgICAgIG92ZXJyaWRhYmxlOiB2Lm92ZXJyaWRhYmxlLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB2LnJlcXVpcmVkLFxuICAgICAgICAgICAgICAgIGhhc0RlZmF1bHQ6IHYuaGFzRGVmYXVsdCxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogdi5kZWZhdWx0LFxuICAgICAgICAgICAgICAgIHRleHQ6IHNlcmlhbGl6ZURlZmF1bHQodi5kZWZhdWx0LCB2LnR5cGUpLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICBbdmFyaWFibGVzXSxcbiAgICApO1xuXG4gICAgY29uc3QgZWRpdGFibGVJbmRpY2VzID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gaW5pdGlhbEZpZWxkcy5tYXAoKGYsIGkpID0+IChmLm92ZXJyaWRhYmxlID8gaSA6IC0xKSkuZmlsdGVyKChpKSA9PiBpID49IDApLFxuICAgICAgICBbaW5pdGlhbEZpZWxkc10sXG4gICAgKTtcbiAgICBjb25zdCBoYXNFZGl0YWJsZVZhcnMgPSBlZGl0YWJsZUluZGljZXMubGVuZ3RoID4gMDtcblxuICAgIC8vIEZvY3VzIGN1cnNvci4gTmF2aWdhdGVzIHRocm91Z2ggZWRpdGFibGUgdmFycywgdGhlbiBmbGVldC1vbmx5XG4gICAgLy8gY29udHJvbHMsIHRoZW4gYWN0aW9ucy4gV2Ugc3RvcmUgZm9jdXMgYXMgYSB1bmlmaWVkIGluZGV4IGludG8gYVxuICAgIC8vIGZsYXQgbGlzdCBvZiBmb2N1c2FibGUgdGFyZ2V0cyBzbyB0aGUgdGFiIGtleSBtb3ZlcyBpbiBvbmUgbGluZS5cbiAgICBjb25zdCBleHRyYVRhcmdldHMgPVxuICAgICAgICBtb2RlID09PSAnZmxlZXQnXG4gICAgICAgICAgICA/IFsnYmF0Y2gnLCAndGhyZXNob2xkJywgJ29mZmxpbmUnLCAnc3VibWl0JywgJ2NhbmNlbCddXG4gICAgICAgICAgICA6IFsnc3VibWl0JywgJ2NhbmNlbCddO1xuICAgIGNvbnN0IGZvY3VzT3JkZXIgPSBbLi4uZWRpdGFibGVJbmRpY2VzLm1hcCgoaSkgPT4gYHZhcjoke2l9YCksIC4uLmV4dHJhVGFyZ2V0c107XG5cbiAgICBjb25zdCBbZmllbGRzLCBzZXRGaWVsZHNdID0gdXNlU3RhdGUoaW5pdGlhbEZpZWxkcyk7XG4gICAgY29uc3QgW2JhdGNoLCBzZXRCYXRjaF0gPSB1c2VTdGF0ZShpbml0aWFsQmF0Y2hTaXplKTtcbiAgICBjb25zdCBbdGhyZXNob2xkLCBzZXRUaHJlc2hvbGRdID0gdXNlU3RhdGUoaW5pdGlhbEZhaWx1cmVUaHJlc2hvbGQpO1xuICAgIGNvbnN0IFtpbmNsdWRlT2ZmbGluZSwgc2V0SW5jbHVkZU9mZmxpbmVdID0gdXNlU3RhdGUoISFpbml0aWFsSW5jbHVkZU9mZmxpbmUpO1xuICAgIGNvbnN0IFtmb2N1c0lkeCwgc2V0Rm9jdXNJZHhdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAgIGNvbnN0IGN1cnJlbnRGb2N1cyA9IGZvY3VzT3JkZXJbZm9jdXNJZHhdID8/IGZvY3VzT3JkZXJbMF07XG5cbiAgICBjb25zdCBzZXRWYXJUZXh0ID0gKHZhckluZGV4LCB1cGRhdGVyKSA9PiB7XG4gICAgICAgIHNldEZpZWxkcygocHJldikgPT5cbiAgICAgICAgICAgIHByZXYubWFwKChmLCBpKSA9PiAoaSA9PT0gdmFySW5kZXggPyB7IC4uLmYsIHRleHQ6IHVwZGF0ZXIoZi50ZXh0KSB9IDogZikpLFxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBtb3ZlRm9jdXMgPSAoZGVsdGEpID0+IHtcbiAgICAgICAgaWYgKGZvY3VzT3JkZXIubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIHNldEZvY3VzSWR4KChpZHgpID0+IChpZHggKyBkZWx0YSArIGZvY3VzT3JkZXIubGVuZ3RoKSAlIGZvY3VzT3JkZXIubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdHJ5U3VibWl0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBvdmVycmlkZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgaWYgKCFmLm92ZXJyaWRhYmxlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghZi50ZXh0IHx8IGYudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoZi5yZXF1aXJlZCAmJiAhZi5oYXNEZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yKGBcIiR7Zi5uYW1lfVwiIGlzIHJlcXVpcmVkLmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVtcHR5IGFuZCBvcHRpb25hbCBhbmQgbm8gZGVmYXVsdCBcdTIxOTIgc2tpcCBvdmVycmlkZS5cbiAgICAgICAgICAgICAgICBpZiAoIWYuaGFzRGVmYXVsdCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgLy8gRW1wdHkgd2l0aCBhIGRlZmF1bHQgXHUyMTkyIG5vIG92ZXJyaWRlLCB1c2UgdGhlIGRlZmF1bHQuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBsZWZ0IHRoZSBzdHJpbmdpZmllZCBkZWZhdWx0IHVudG91Y2hlZCwgc2tpcFxuICAgICAgICAgICAgLy8gdGhlIG92ZXJyaWRlIHNvIHRoZSBydW5uZXIgdXNlcyB0aGUgcGFyc2VkIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgIC8vIChlLmcuIEpTT04gb2JqZWN0cyBzdXJ2aXZlIHJvdW5kLXRyaXBwaW5nKS5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmLmhhc0RlZmF1bHQgJiZcbiAgICAgICAgICAgICAgICBmLnRleHQgPT09IHNlcmlhbGl6ZURlZmF1bHQoZi5vcmlnaW5hbCwgZi50eXBlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjID0gY29lcmNlKGYudGV4dCwgZi50eXBlKTtcbiAgICAgICAgICAgIGlmICghYy5vaykge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKGBcIiR7Zi5uYW1lfVwiOiAke2MuZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3ZlcnJpZGVzW2YubmFtZV0gPSBjLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICBvblN1Ym1pdCh7XG4gICAgICAgICAgICBvdmVycmlkZXMsXG4gICAgICAgICAgICBiYXRjaFNpemU6IGJhdGNoLFxuICAgICAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogdGhyZXNob2xkLFxuICAgICAgICAgICAgaW5jbHVkZU9mZmxpbmUsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICB1c2VJbnB1dCgoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LmVzY2FwZSkge1xuICAgICAgICAgICAgb25DYW5jZWw/LigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkudGFiKSB7XG4gICAgICAgICAgICBtb3ZlRm9jdXMoa2V5LnNoaWZ0ID8gLTEgOiAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5LmRvd25BcnJvdykge1xuICAgICAgICAgICAgbW92ZUZvY3VzKDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkudXBBcnJvdykge1xuICAgICAgICAgICAgbW92ZUZvY3VzKC0xKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50Rm9jdXMgPT09ICdzdWJtaXQnICYmIGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgIHRyeVN1Ym1pdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50Rm9jdXMgPT09ICdjYW5jZWwnICYmIGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgIG9uQ2FuY2VsPy4oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgICAgICAgdHJ5U3VibWl0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEZvY3VzID09PSAnYmF0Y2gnKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICcrJyB8fCBpbnB1dCA9PT0gJz0nKSB7XG4gICAgICAgICAgICAgICAgc2V0QmF0Y2goKG4pID0+IE1hdGgubWluKE1BWF9CQVRDSCwgbiArIDEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICctJyB8fCBpbnB1dCA9PT0gJ18nKSB7XG4gICAgICAgICAgICAgICAgc2V0QmF0Y2goKG4pID0+IE1hdGgubWF4KE1JTl9CQVRDSCwgbiAtIDEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRGb2N1cyA9PT0gJ3RocmVzaG9sZCcpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJysnIHx8IGlucHV0ID09PSAnPScpIHtcbiAgICAgICAgICAgICAgICBzZXRUaHJlc2hvbGQoKG4pID0+IE1hdGgubWluKDEwMCwgbiArIDUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICctJyB8fCBpbnB1dCA9PT0gJ18nKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhyZXNob2xkKChuKSA9PiBNYXRoLm1heCgwLCBuIC0gNSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudEZvY3VzID09PSAnb2ZmbGluZScpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJyAnIHx8IGlucHV0ID09PSAnbycpIHtcbiAgICAgICAgICAgICAgICBzZXRJbmNsdWRlT2ZmbGluZSgodikgPT4gIXYpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50Rm9jdXM/LnN0YXJ0c1dpdGgoJ3ZhcjonKSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gTnVtYmVyKGN1cnJlbnRGb2N1cy5zbGljZSg0KSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tpZHhdO1xuICAgICAgICAgICAgaWYgKCFmaWVsZCB8fCAhZmllbGQub3ZlcnJpZGFibGUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChrZXkuYmFja3NwYWNlIHx8IGtleS5kZWxldGUpIHtcbiAgICAgICAgICAgICAgICBzZXRWYXJUZXh0KGlkeCwgKHQpID0+IHQuc2xpY2UoMCwgLTEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgJiYgIWtleS5jdHJsICYmICFrZXkubWV0YSAmJiBpbnB1dC5sZW5ndGggPT09IDEgJiYgaW5wdXQgPj0gJyAnKSB7XG4gICAgICAgICAgICAgICAgc2V0VmFyVGV4dChpZHgsICh0KSA9PiB0ICsgaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB0aXRsZSA9XG4gICAgICAgIG1vZGUgPT09ICdmbGVldCdcbiAgICAgICAgICAgID8gYEZMRUVUIFJPTExPVVQgXHUwMEI3ICR7cGxheWJvb2tOYW1lfWBcbiAgICAgICAgICAgIDogYFJVTiBcdTAwQjcgJHtwbGF5Ym9va05hbWV9JHtkZXZpY2UgPyBgIFx1MjE5MiAke2RldmljZS5kZXZpY2V9YCA6ICcnfWA7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94XG4gICAgICAgICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS5ib3JkZXJGb2N1c31cbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcj17dGhlbWUub3ZlcmxheUJnfVxuICAgICAgICAgICAgcGFkZGluZ1g9ezJ9XG4gICAgICAgICAgICBwYWRkaW5nWT17MX1cbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICAgICAgd2lkdGg9ezc4fVxuICAgICAgICA+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0ganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICB7bW9kZSA9PT0gJ2ZsZWV0JyAmJiBkZXZpY2VDb3VudCAhPSBudWxsICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkZXZpY2VDb3VudH0gZGV2aWNle2RldmljZUNvdW50ID09PSAxID8gJycgOiAncyd9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIHtmaWVsZHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+KHBsYXlib29rIGRlY2xhcmVzIG5vIHZhcmlhYmxlcyk8L1RleHQ+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PlZhcmlhYmxlcyAodGFiIHRvIG1vdmUsIGVudGVyIHRvIHN1Ym1pdCk6PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICB7ZmllbGRzLm1hcCgoZiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNGb2N1c2VkID0gY3VycmVudEZvY3VzID09PSBgdmFyOiR7aX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhZE9ubHkgPSAhZi5vdmVycmlkYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e2YubmFtZX0gbWFyZ2luVG9wPXswfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyMH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGb2N1c2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGVtZS5hY2NlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoZW1lLmZnRmFpbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhlbWUuZmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zi5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zi5yZXF1aXJlZCA/ICcqJyA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17MTB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT57Zi50eXBlfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlYWRPbmx5ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zi50ZXh0IHx8ICcobm90IG92ZXJyaWRhYmxlKSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Zi50ZXh0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17aXNGb2N1c2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eygpID0+IHt9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmLmRlc2NyaXB0aW9uICYmIGlzRm9jdXNlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezIwfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PntmLmRlc2NyaXB0aW9ufTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7bW9kZSA9PT0gJ2ZsZWV0JyAmJiAoXG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5Sb2xsb3V0OjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezIwfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9jdXMgPT09ICdiYXRjaCcgPyB0aGVtZS5hY2NlbnQgOiB0aGVtZS5mZ0RpbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvbGQ9e2N1cnJlbnRGb2N1cyA9PT0gJ2JhdGNoJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoIHNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2JhdGNofTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT4gICgrLy0pPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezIwfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9jdXMgPT09ICd0aHJlc2hvbGQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGVtZS5hY2NlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoZW1lLmZnRGltXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9sZD17Y3VycmVudEZvY3VzID09PSAndGhyZXNob2xkJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0IGF0IGZhaWx1cmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9Pnt0aHJlc2hvbGR9JTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT4gICgrLy0pPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezIwfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9jdXMgPT09ICdvZmZsaW5lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhlbWUuYWNjZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGVtZS5mZ0RpbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvbGQ9e2N1cnJlbnRGb2N1cyA9PT0gJ29mZmxpbmUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBvZmZsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aW5jbHVkZU9mZmxpbmUgPyB0aGVtZS5saW1lIDogdGhlbWUuZmdEaW19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbmNsdWRlT2ZmbGluZSA/ICdbeF0nIDogJ1sgXSd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+ICAoc3BhY2UpPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUucmVkfT57ZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17Y3VycmVudEZvY3VzID09PSAnc3VibWl0JyA/IHRoZW1lLmFjY2VudCA6IHRoZW1lLmZnRGltfVxuICAgICAgICAgICAgICAgICAgICAgICAgYm9sZD17Y3VycmVudEZvY3VzID09PSAnc3VibWl0J31cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2N1cnJlbnRGb2N1cyA9PT0gJ3N1Ym1pdCcgPyAnXHUyNUI2ICcgOiAnICAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgZW50ZXIge21vZGUgPT09ICdmbGVldCcgPyAnc3RhcnQgcm9sbG91dCcgOiAncnVuIHBsYXlib29rJ31cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17Y3VycmVudEZvY3VzID09PSAnY2FuY2VsJyA/IHRoZW1lLmFtYmVyIDogdGhlbWUuZmdEaW19XG4gICAgICAgICAgICAgICAgICAgICAgICBib2xkPXtjdXJyZW50Rm9jdXMgPT09ICdjYW5jZWwnfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBlc2MgY2FuY2VsXG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgeyFoYXNFZGl0YWJsZVZhcnMgJiYgbW9kZSA9PT0gJ3NpbmdsZScgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gb3ZlcnJpZGFibGUgdmFyaWFibGVzIFx1MjAxNCBwcmVzcyBlbnRlciB0byBjb250aW51ZS5cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1Nb2RhbCh7IHRpdGxlLCBib2R5LCBjb25maXJtTGFiZWwgPSAnY29uZmlybScsIHRvbmUgPSAnd2FybicsIG9uQ29uZmlybSwgb25DYW5jZWwgfSkge1xuICAgIHVzZUlucHV0KChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkuZXNjYXBlKSB7XG4gICAgICAgICAgICBvbkNhbmNlbD8uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5yZXR1cm4gfHwgaW5wdXQgPT09ICd5JyB8fCBpbnB1dCA9PT0gJ1knKSB7XG4gICAgICAgICAgICBvbkNvbmZpcm0/LigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCA9PT0gJ24nIHx8IGlucHV0ID09PSAnTicpIHtcbiAgICAgICAgICAgIG9uQ2FuY2VsPy4oKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZW50Q29sb3IgPSB0b25lID09PSAnZGFuZ2VyJyA/IHRoZW1lLnJlZCA6IHRvbmUgPT09ICdvaycgPyB0aGVtZS5saW1lIDogdGhlbWUuYW1iZXI7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94XG4gICAgICAgICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS5ib3JkZXJGb2N1c31cbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcj17dGhlbWUub3ZlcmxheUJnfVxuICAgICAgICAgICAgcGFkZGluZ1g9ezJ9XG4gICAgICAgICAgICBwYWRkaW5nWT17MX1cbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICAgICAgd2lkdGg9ezYwfVxuICAgICAgICA+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2FjY2VudENvbG9yfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICB7Ym9keSAmJlxuICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGJvZHkpID8gYm9keSA6IFtib2R5XSkubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxCb3gga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2xpbmV9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfSBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17YWNjZW50Q29sb3J9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIGVudGVyL3kge2NvbmZpcm1MYWJlbH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5lc2MvbiBjYW5jZWw8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgICBkZWxldGVQcm9kdWN0UGxheWJvb2ssXG4gICAgbGlzdFByb2R1Y3RQbGF5Ym9va3MsXG4gICAgcmVhZFByb2R1Y3RQbGF5Ym9vayxcbn0gZnJvbSAnLi4vLi4vLi4vbGliL3Byb2R1Y3QuanMnO1xuaW1wb3J0IHtcbiAgICBsaXN0U3RvcmFnZUZpbGVzLFxuICAgIHJlYWRTdG9yYWdlRmlsZSxcbn0gZnJvbSAnLi4vLi4vLi4vbGliL3N0b3JhZ2UuanMnO1xuaW1wb3J0IHsgcGFyc2VQbGF5Ym9vayB9IGZyb20gJy4uLy4uLy4uL2xpYi9wbGF5Ym9vay9sb2FkZXIuanMnO1xuaW1wb3J0IHsgZGVidWdDb3VudCwgZGVidWdMb2cgfSBmcm9tICcuLi8uLi8uLi9saWIvZGVidWctbG9nLmpzJztcblxuY29uc3QgUlVOU19QUkVGSVggPSAncGxheWJvb2tzL3J1bnMvJztcblxuZnVuY3Rpb24gaXNSdW5GaWxlKGYsIG5hbWUpIHtcbiAgICBpZiAoIWYgfHwgZi50eXBlICE9PSAnZmlsZScpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWYucGF0aD8uc3RhcnRzV2l0aChSVU5TX1BSRUZJWCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIW5hbWUpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmLm5hbWU/LmluY2x1ZGVzKGAtJHtuYW1lfS1gKSB8fCBmLm5hbWU/LnN0YXJ0c1dpdGgoYCR7bmFtZX0tYCk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIHBsYXlib29rIGluZGV4IG9mIGEgcHJvZHVjdC4gVGhlIGxpc3QgcmFyZWx5IGNoYW5nZXMgKG9ubHlcbiAqIHdoZW4gYSBodW1hbiBvciBhc3Npc3RhbnQgdXBsb2Fkcy9kZWxldGVzIG9uZSksIHNvIHdlIGRvbid0IHBvbGwgXHUyMDE0XG4gKiB0aGUgaW5kZXggbG9hZHMgb25jZSBvbiBtb3VudCBhbmQgb24gZGVtYW5kIHZpYSBgcmVmcmVzaCgpYC4gVGhlXG4gKiB0YWIncyBgUmAgc2hvcnRjdXQgYW5kIGFueSBsb2NhbCBhY3Rpb24gdGhhdCBtdXRhdGVzIHRoZSBpbmRleFxuICogKHVwbG9hZC9kZWxldGUvcm9sbG91dCkgY2FsbCByZWZyZXNoIHRoZW1zZWx2ZXMuXG4gKlxuICogQWxzbyBleHBvc2VzIHBhcnNlZC1vbi1kZW1hbmQgZGV0YWlsIChZQU1MIHRleHQgKyBwYXJzZWQgc3RydWN0dXJlKVxuICogYW5kIGEgbGlzdCBvZiBydW4gcmVwb3J0cywgYm90aCBwb3B1bGF0ZWQgd2hlbiBhIHBsYXlib29rIGlzIHNlbGVjdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZHVjdFBsYXlib29rcyhwcm9kdWN0SWQpIHtcbiAgICBjb25zdCBbcGxheWJvb2tzLCBzZXRQbGF5Ym9va3NdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtsaXN0RXJyb3IsIHNldExpc3RFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbZGV0YWlsLCBzZXREZXRhaWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3JlcG9ydHMsIHNldFJlcG9ydHNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtyZXBvcnRzRXJyb3IsIHNldFJlcG9ydHNFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbcmVwb3J0RGV0YWlsLCBzZXRSZXBvcnREZXRhaWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3JlbG9hZFRva2VuLCBzZXRSZWxvYWRUb2tlbl0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBkZXRhaWxSZXEgPSB1c2VSZWYoMCk7XG4gICAgY29uc3QgcmVwb3J0c1JlcSA9IHVzZVJlZigwKTtcbiAgICBjb25zdCByZXBvcnRSZXEgPSB1c2VSZWYoMCk7XG5cbiAgICBjb25zdCByZWZyZXNoID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0UmVsb2FkVG9rZW4oKHQpID0+IHQgKyAxKSwgW10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFwcm9kdWN0SWQpIHtcbiAgICAgICAgICAgIHNldFBsYXlib29rcyhbXSk7XG4gICAgICAgICAgICBzZXRMaXN0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgICAgICAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBkZWJ1Z0NvdW50KCdodHRwOnBsYXlib29rLWluZGV4Jyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBsaXN0UHJvZHVjdFBsYXlib29rcyhwcm9kdWN0SWQpO1xuICAgICAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOnBsYXlib29rLWluZGV4JywgJ2VuZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogcHJvZHVjdElkLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogbGlzdD8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldFBsYXlib29rcyhsaXN0KTtcbiAgICAgICAgICAgICAgICBzZXRMaXN0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpwbGF5Ym9vay1pbmRleCcsICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogcHJvZHVjdElkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyPy5tZXNzYWdlIHx8IFN0cmluZyhlcnIpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXRMaXN0RXJyb3IoZXJyPy5tZXNzYWdlIHx8IFN0cmluZyhlcnIpKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvYWQoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW3Byb2R1Y3RJZCwgcmVsb2FkVG9rZW5dKTtcblxuICAgIGNvbnN0IGxvYWREZXRhaWwgPSB1c2VDYWxsYmFjayhhc3luYyAobmFtZSkgPT4ge1xuICAgICAgICBpZiAoIXByb2R1Y3RJZCB8fCAhbmFtZSkge1xuICAgICAgICAgICAgc2V0RGV0YWlsKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcUlkID0gKytkZXRhaWxSZXEuY3VycmVudDtcbiAgICAgICAgc2V0RGV0YWlsKHsgbmFtZSwgbG9hZGluZzogdHJ1ZSwgZXJyb3I6IG51bGwsIHlhbWw6IG51bGwsIHBhcnNlZDogbnVsbCB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHlhbWwgPSBhd2FpdCByZWFkUHJvZHVjdFBsYXlib29rKHByb2R1Y3RJZCwgbmFtZSk7XG4gICAgICAgICAgICBpZiAoZGV0YWlsUmVxLmN1cnJlbnQgIT09IHJlcUlkKSByZXR1cm47XG4gICAgICAgICAgICBsZXQgcGFyc2VkID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBwYXJzZUVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VQbGF5Ym9vayh5YW1sLCB7IHNvdXJjZVBhdGg6IGAke25hbWV9LnlhbWxgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VFcnJvciA9IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZXRhaWxSZXEuY3VycmVudCAhPT0gcmVxSWQpIHJldHVybjtcbiAgICAgICAgICAgIHNldERldGFpbCh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB5YW1sLFxuICAgICAgICAgICAgICAgIHBhcnNlZCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXJzZUVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGRldGFpbFJlcS5jdXJyZW50ICE9PSByZXFJZCkgcmV0dXJuO1xuICAgICAgICAgICAgc2V0RGV0YWlsKHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHlhbWw6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyc2VkOiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVyciksXG4gICAgICAgICAgICAgICAgcGFyc2VFcnJvcjogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW3Byb2R1Y3RJZF0pO1xuXG4gICAgY29uc3QgY2xlYXJEZXRhaWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRldGFpbFJlcS5jdXJyZW50Kys7XG4gICAgICAgIHNldERldGFpbChudWxsKTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBsb2FkUmVwb3J0cyA9IHVzZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcm9kdWN0SWQpIHtcbiAgICAgICAgICAgICAgICBzZXRSZXBvcnRzKFtdKTtcbiAgICAgICAgICAgICAgICBzZXRSZXBvcnRzRXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVxSWQgPSArK3JlcG9ydHNSZXEuY3VycmVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBsaXN0U3RvcmFnZUZpbGVzKHByb2R1Y3RJZCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydHNSZXEuY3VycmVudCAhPT0gcmVxSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IChmaWxlcyB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZikgPT4gaXNSdW5GaWxlKGYsIG5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChmKSA9PiAoeyBuYW1lOiBmLm5hbWUsIHBhdGg6IGYucGF0aCwgc2l6ZTogZi5zaXplIH0pKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5uYW1lLmxvY2FsZUNvbXBhcmUoYS5uYW1lKSk7XG4gICAgICAgICAgICAgICAgc2V0UmVwb3J0cyhmaWx0ZXJlZCk7XG4gICAgICAgICAgICAgICAgc2V0UmVwb3J0c0Vycm9yKG51bGwpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydHNSZXEuY3VycmVudCAhPT0gcmVxSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoL25vdCBmb3VuZHw0MDQvaS50ZXN0KGVycj8ubWVzc2FnZSB8fCAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0cyhbXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlcG9ydHNFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXBvcnRzKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0c0Vycm9yKGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbcHJvZHVjdElkXSxcbiAgICApO1xuXG4gICAgY29uc3QgbG9hZFJlcG9ydCA9IHVzZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAocGF0aCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcm9kdWN0SWQgfHwgIXBhdGgpIHtcbiAgICAgICAgICAgICAgICBzZXRSZXBvcnREZXRhaWwobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVxSWQgPSArK3JlcG9ydFJlcS5jdXJyZW50O1xuICAgICAgICAgICAgc2V0UmVwb3J0RGV0YWlsKHsgcGF0aCwgbG9hZGluZzogdHJ1ZSwgcmVwb3J0OiBudWxsLCBlcnJvcjogbnVsbCB9KTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlYWRTdG9yYWdlRmlsZShwcm9kdWN0SWQsIHBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXBvcnRSZXEuY3VycmVudCAhPT0gcmVxSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvciA9IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0UmVwb3J0RGV0YWlsKHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydDogcGFyc2VkLFxuICAgICAgICAgICAgICAgICAgICByYXc6IHRleHQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBwYXJzZUVycm9yLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydFJlcS5jdXJyZW50ICE9PSByZXFJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldFJlcG9ydERldGFpbCh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICByZXBvcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVyciksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtwcm9kdWN0SWRdLFxuICAgICk7XG5cbiAgICBjb25zdCBjbGVhclJlcG9ydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgcmVwb3J0UmVxLmN1cnJlbnQrKztcbiAgICAgICAgc2V0UmVwb3J0RGV0YWlsKG51bGwpO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHJlbW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcm9kdWN0SWQgfHwgIW5hbWUpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdtaXNzaW5nLWlucHV0JyB9O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBkZWxldGVQcm9kdWN0UGxheWJvb2soeyBwcm9kdWN0OiBwcm9kdWN0SWQsIG5hbWUgfSk7XG4gICAgICAgICAgICAgICAgc2V0UGxheWJvb2tzKChwcmV2KSA9PiBwcmV2LmZpbHRlcigocCkgPT4gcC5uYW1lICE9PSBuYW1lKSk7XG4gICAgICAgICAgICAgICAgZGV0YWlsUmVxLmN1cnJlbnQrKztcbiAgICAgICAgICAgICAgICBzZXREZXRhaWwobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHJlc3VsdDogcmVzIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycikgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3Byb2R1Y3RJZF0sXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHBsYXlib29rcyxcbiAgICAgICAgbGlzdEVycm9yLFxuICAgICAgICBsb2FkaW5nLFxuICAgICAgICBkZXRhaWwsXG4gICAgICAgIHJlcG9ydHMsXG4gICAgICAgIHJlcG9ydHNFcnJvcixcbiAgICAgICAgcmVwb3J0RGV0YWlsLFxuICAgICAgICBsb2FkRGV0YWlsLFxuICAgICAgICBjbGVhckRldGFpbCxcbiAgICAgICAgbG9hZFJlcG9ydHMsXG4gICAgICAgIGxvYWRSZXBvcnQsXG4gICAgICAgIGNsZWFyUmVwb3J0LFxuICAgICAgICByZW1vdmUsXG4gICAgICAgIHJlZnJlc2gsXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJ1blBsYXlib29rIH0gZnJvbSAnLi4vLi4vLi4vbGliL3BsYXlib29rL3J1bm5lci5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX0ZBSUxVUkVfVEhSRVNIT0xELCBydW5GbGVldFBsYXlib29rIH0gZnJvbSAnLi4vLi4vLi4vbGliL3BsYXlib29rL2ZsZWV0LmpzJztcbmltcG9ydCB7IHVwbG9hZEZsZWV0UnVuUmVwb3J0IH0gZnJvbSAnLi4vLi4vLi4vbGliL3Byb2R1Y3QuanMnO1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2xpYi9jb25maWcuanMnO1xuXG5jb25zdCBERUZBVUxUX0JBVENIX1NJWkUgPSA1O1xuXG4vKipcbiAqIFN0YXRlIG1hY2hpbmUgd3JhcHBpbmcgdGhlIHNpbmdsZS1kZXZpY2UgcnVubmVyIGFuZCBmbGVldCBvcmNoZXN0cmF0b3IuXG4gKiBQaGFzZXM6XG4gKiAgIGlkbGUgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgbm90aGluZyBpbiBmbGlnaHRcbiAqICAgdmFycyAgIChzaW5nbGUgfCBmbGVldCkgIFx1MjE5MiBjb2xsZWN0aW5nIHZhcmlhYmxlIG92ZXJyaWRlcyAvIHJ1biBvcHRpb25zXG4gKiAgIGNvbmZpcm1pbmctZGVsZXRlICAgICAgICBcdTIxOTIgZGVzdHJ1Y3RpdmUgb3AgYXdhaXRpbmcgdXNlciBjb25maXJtYXRpb25cbiAqICAgcnVubmluZyAgICAgICAgICAgICAgICAgIFx1MjE5MiBydW5uZXIgZXhlY3V0aW5nOyBwZXItZGV2aWNlL3N0ZXAgcHJvZ3Jlc3MgdXBkYXRlc1xuICogICBkb25lICAgICAgICAgICAgICAgICAgICAgXHUyMTkyIGxhc3QgcnVuJ3MgcmVzdWx0IGhlbGQgdW50aWwgZGlzbWlzc2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VQbGF5Ym9va1J1bkNvbnRyb2xsZXIoKSB7XG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSh7IHBoYXNlOiAnaWRsZScgfSk7XG4gICAgY29uc3QgYWJvcnRSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgICBjb25zdCBjYW5jZWxGbG93ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBzZXRTdGF0ZSh7IHBoYXNlOiAnaWRsZScgfSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgY2FuY2VsUnVubmluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgYWJvcnRSZWYuY3VycmVudD8uYWJvcnQ/LigpO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHN0YXJ0U2luZ2xlVmFycyA9IHVzZUNhbGxiYWNrKChwbGF5Ym9vaywgcGFyc2VkLCBkZXZpY2UpID0+IHtcbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgcGhhc2U6ICd2YXJzJyxcbiAgICAgICAgICAgIG1vZGU6ICdzaW5nbGUnLFxuICAgICAgICAgICAgcGxheWJvb2ssXG4gICAgICAgICAgICBwYXJzZWQsXG4gICAgICAgICAgICBkZXZpY2UsXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHN0YXJ0RmxlZXRWYXJzID0gdXNlQ2FsbGJhY2soKHBsYXlib29rLCBwYXJzZWQpID0+IHtcbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgcGhhc2U6ICd2YXJzJyxcbiAgICAgICAgICAgIG1vZGU6ICdmbGVldCcsXG4gICAgICAgICAgICBwbGF5Ym9vayxcbiAgICAgICAgICAgIHBhcnNlZCxcbiAgICAgICAgICAgIGJhdGNoU2l6ZTogREVGQVVMVF9CQVRDSF9TSVpFLFxuICAgICAgICAgICAgZmFpbHVyZVRocmVzaG9sZDogREVGQVVMVF9GQUlMVVJFX1RIUkVTSE9MRCxcbiAgICAgICAgICAgIGluY2x1ZGVPZmZsaW5lOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgb3BlbkRlbGV0ZUNvbmZpcm0gPSB1c2VDYWxsYmFjaygocGxheWJvb2spID0+IHtcbiAgICAgICAgc2V0U3RhdGUoeyBwaGFzZTogJ2NvbmZpcm1pbmctZGVsZXRlJywgcGxheWJvb2sgfSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgcnVuU2luZ2xlID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIGFzeW5jICh7IHByb2R1Y3RJZCwgcGxheWJvb2ssIHBhcnNlZCwgZGV2aWNlLCBvdmVycmlkZXMgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYiA9IGNsb25lUGxheWJvb2socGFyc2VkKTtcbiAgICAgICAgICAgIHBiLnRhcmdldC5kZXZpY2VzID0gW2RldmljZS5kZXZpY2VdO1xuICAgICAgICAgICAgcGIudGFyZ2V0LnByb2R1Y3QgPSBwcm9kdWN0SWQ7XG4gICAgICAgICAgICBwYi50YXJnZXQuZ3JvdXAgPSBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBzdGVwQ291bnQgPSBwYi5zdGVwcy5sZW5ndGg7XG4gICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgcGhhc2U6ICdydW5uaW5nJyxcbiAgICAgICAgICAgICAgICBtb2RlOiAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBwbGF5Ym9vayxcbiAgICAgICAgICAgICAgICBkZXZpY2UsXG4gICAgICAgICAgICAgICAgc3RlcENvdW50LFxuICAgICAgICAgICAgICAgIHN0ZXBzUHJvZ3Jlc3M6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgICAgICBzdGFydGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgIGFib3J0UmVmLmN1cnJlbnQgPSBjb250cm9sbGVyO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBydW5QbGF5Ym9vayhwYiwgW2RldmljZV0sIHtcbiAgICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3k6IDEsXG4gICAgICAgICAgICAgICAgICAgIGZhaWxGYXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXMsXG4gICAgICAgICAgICAgICAgICAgIG9uU3RlcFN0YXJ0OiAoeyBzdGVwSW5kZXgsIHN0ZXAgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldi5waGFzZSAhPT0gJ3J1bm5pbmcnIHx8IHByZXYubW9kZSAhPT0gJ3NpbmdsZScpIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBuZXcgTWFwKHByZXYuc3RlcHNQcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5zZXQoc3RlcEluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBzdGVwSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHN0ZXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAncnVubmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldiwgc3RlcHNQcm9ncmVzczogbmV4dCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uU3RlcEVuZDogKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBvayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJkaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhpdENvZGUsXG4gICAgICAgICAgICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYucGhhc2UgIT09ICdydW5uaW5nJyB8fCBwcmV2Lm1vZGUgIT09ICdzaW5nbGUnKSByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gbmV3IE1hcChwcmV2LnN0ZXBzUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuc2V0KHN0ZXBJbmRleCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogc3RlcEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBzdGVwLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogb2sgPyAnb2snIDogJ2ZhaWxlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbk1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJkaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdENvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldiwgc3RlcHNQcm9ncmVzczogbmV4dCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c1swXTtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlOiAnZG9uZScsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICdzaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICBwbGF5Ym9vayxcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlOiAnZG9uZScsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICdzaW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICBwbGF5Ym9vayxcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZTogZGV2aWNlLmRldmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVyciksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGFib3J0UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXSxcbiAgICApO1xuXG4gICAgY29uc3QgcnVuRmxlZXQgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgYXN5bmMgKHsgcHJvZHVjdElkLCBwbGF5Ym9vaywgcGFyc2VkLCBkZXZpY2VzLCBvdmVycmlkZXMsIGJhdGNoU2l6ZSwgZmFpbHVyZVRocmVzaG9sZCwgaW5jbHVkZU9mZmxpbmUgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFkZXZpY2VzIHx8IGRldmljZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHBiID0gY2xvbmVQbGF5Ym9vayhwYXJzZWQpO1xuICAgICAgICAgICAgcGIudGFyZ2V0LmRldmljZXMgPSBudWxsO1xuICAgICAgICAgICAgcGIudGFyZ2V0LnByb2R1Y3QgPSBwcm9kdWN0SWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBwaGFzZTogJ3J1bm5pbmcnLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdmbGVldCcsXG4gICAgICAgICAgICAgICAgcGxheWJvb2ssXG4gICAgICAgICAgICAgICAgZGV2aWNlQ291bnQ6IGRldmljZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGJhdGNoU2l6ZSxcbiAgICAgICAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgIGJhdGNoZXM6IFtdLFxuICAgICAgICAgICAgICAgIHBlckRldmljZTogbmV3IE1hcCgpLFxuICAgICAgICAgICAgICAgIHN1bW1hcnk6IHsgYXR0ZW1wdGVkOiAwLCBzdWNjZWVkZWQ6IDAsIGZhaWxlZDogMCwgZmFpbHVyZVJhdGU6IDAgfSxcbiAgICAgICAgICAgICAgICBzdGFydGVkQXQsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgIGFib3J0UmVmLmN1cnJlbnQgPSBjb250cm9sbGVyO1xuXG4gICAgICAgICAgICBsZXQgb3V0Y29tZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb3V0Y29tZSA9IGF3YWl0IHJ1bkZsZWV0UGxheWJvb2socGIsIGRldmljZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgYmF0Y2hTaXplLFxuICAgICAgICAgICAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXMsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIG9uQmF0Y2hTdGFydDogKGluZm8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYucGhhc2UgIT09ICdydW5uaW5nJyB8fCBwcmV2Lm1vZGUgIT09ICdmbGVldCcpIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCYXRjaDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZm8uaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBpbmZvLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEluZGV4OiBpbmZvLmZpcnN0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VJZHM6IGluZm8uZGV2aWNlSWRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAncnVubmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbkJhdGNoRW5kOiAoeyBpbmRleCwgc2l6ZSwgZmlyc3RJbmRleCwgZGV2aWNlSWRzLCByZXN1bHRzLCBjdW11bGF0aXZlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYucGhhc2UgIT09ICdydW5uaW5nJyB8fCBwcmV2Lm1vZGUgIT09ICdmbGVldCcpIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9rID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHI/Lm9rKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5sZW5ndGggLSBvaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXRjaGVzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2LmJhdGNoZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5kZXgsIHNpemUsIGZpcnN0SW5kZXgsIGRldmljZUlkcywgb2ssIGZhaWxlZCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJhdGNoOiB7IC4uLnByZXYuY3VycmVudEJhdGNoLCBzdGF0dXM6ICdkb25lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0ZWQ6IGN1bXVsYXRpdmUuYXR0ZW1wdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiBjdW11bGF0aXZlLnN1Y2NlZWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZDogY3VtdWxhdGl2ZS5mYWlsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlUmF0ZTogY3VtdWxhdGl2ZS5mYWlsdXJlUmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uRGV2aWNlUmVzdWx0OiAocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldi5waGFzZSAhPT0gJ3J1bm5pbmcnIHx8IHByZXYubW9kZSAhPT0gJ2ZsZWV0JykgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IG5ldyBNYXAocHJldi5wZXJEZXZpY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuc2V0KHIuZGV2aWNlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZTogci5kZXZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rOiAhIXIub2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBwZWQ6ICEhci5za2lwcGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogci5lcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcENvdW50OiBBcnJheS5pc0FycmF5KHIuc3RlcHMpID8gci5zdGVwcy5sZW5ndGggOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXYsIHBlckRldmljZTogbmV4dCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHBoYXNlOiAnZG9uZScsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICdmbGVldCcsXG4gICAgICAgICAgICAgICAgICAgIHBsYXlib29rLFxuICAgICAgICAgICAgICAgICAgICBhYm9ydGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICByZWFzb246IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0czogW10sXG4gICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHsgYXR0ZW1wdGVkOiAwLCBzdWNjZWVkZWQ6IDAsIGZhaWxlZDogMCwgZmFpbHVyZVJhdGU6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmF0Y2hlczogW10sXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYWJvcnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWJvcnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBmaW5pc2hlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICAgICAgICAvLyBQZXJzaXN0IGEgcnVuIHJlcG9ydCAoYmVzdCBlZmZvcnQpLlxuICAgICAgICAgICAgbGV0IHVzZXJuYW1lID0gbnVsbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdXNlcm5hbWUgPSByZWFkQ29uZmlnKCk/LnVzZXJuYW1lIHx8IG51bGw7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICB1c2VybmFtZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXBvcnQgPSBidWlsZFJ1blJlcG9ydCh7XG4gICAgICAgICAgICAgICAgcHJvZHVjdElkLFxuICAgICAgICAgICAgICAgIG5hbWU6IHBsYXlib29rLm5hbWUsXG4gICAgICAgICAgICAgICAgcGFyc2VkLFxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJuYW1lLFxuICAgICAgICAgICAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZEF0LFxuICAgICAgICAgICAgICAgIGJhdGNoU2l6ZSxcbiAgICAgICAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVPZmZsaW5lOiAhIWluY2x1ZGVPZmZsaW5lLFxuICAgICAgICAgICAgICAgIHJlc29sdmVkVmFyczogb3ZlcnJpZGVzIHx8IHt9LFxuICAgICAgICAgICAgICAgIG91dGNvbWUsXG4gICAgICAgICAgICAgICAgdG90YWxEZXZpY2VzOiBkZXZpY2VzLmxlbmd0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IHJlcG9ydFVwbG9hZCA9IG51bGw7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcG9ydFVwbG9hZCA9IGF3YWl0IHVwbG9hZEZsZWV0UnVuUmVwb3J0KHsgcHJvZHVjdDogcHJvZHVjdElkLCByZXBvcnQgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXBvcnRVcGxvYWQgPSB7IG9rOiBmYWxzZSwgcmVhc29uOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycikgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHBoYXNlOiAnZG9uZScsXG4gICAgICAgICAgICAgICAgbW9kZTogJ2ZsZWV0JyxcbiAgICAgICAgICAgICAgICBwbGF5Ym9vayxcbiAgICAgICAgICAgICAgICB0b3RhbERldmljZXM6IGRldmljZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGJhdGNoU2l6ZSxcbiAgICAgICAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgIHJlc3VsdHM6IG91dGNvbWUucmVzdWx0cyxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5OiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHRlZDogb3V0Y29tZS5hdHRlbXB0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogb3V0Y29tZS5zdWNjZWVkZWQsXG4gICAgICAgICAgICAgICAgICAgIGZhaWxlZDogb3V0Y29tZS5mYWlsZWQsXG4gICAgICAgICAgICAgICAgICAgIGZhaWx1cmVSYXRlOiBvdXRjb21lLmZhaWx1cmVSYXRlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmF0Y2hlczogb3V0Y29tZS5iYXRjaGVzLFxuICAgICAgICAgICAgICAgIGFib3J0ZWQ6IG91dGNvbWUuYWJvcnRlZCxcbiAgICAgICAgICAgICAgICByZWFzb246IG91dGNvbWUucmVhc29uLFxuICAgICAgICAgICAgICAgIHJlcG9ydFVwbG9hZCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZEF0OiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIFtdLFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNtaXNzRG9uZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgc2V0U3RhdGUoeyBwaGFzZTogJ2lkbGUnIH0pO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlLFxuICAgICAgICBzdGFydFNpbmdsZVZhcnMsXG4gICAgICAgIHN0YXJ0RmxlZXRWYXJzLFxuICAgICAgICBvcGVuRGVsZXRlQ29uZmlybSxcbiAgICAgICAgY2FuY2VsRmxvdyxcbiAgICAgICAgY2FuY2VsUnVubmluZyxcbiAgICAgICAgcnVuU2luZ2xlLFxuICAgICAgICBydW5GbGVldCxcbiAgICAgICAgZGlzbWlzc0RvbmUsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY2xvbmVQbGF5Ym9vayhwYikge1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLnBiLFxuICAgICAgICB0YXJnZXQ6IHsgLi4uKHBiLnRhcmdldCB8fCB7fSkgfSxcbiAgICAgICAgdmFyczogeyAuLi4ocGIudmFycyB8fCB7fSkgfSxcbiAgICAgICAgdmFyaWFibGVzOiBBcnJheS5pc0FycmF5KHBiLnZhcmlhYmxlcykgPyBwYi52YXJpYWJsZXMubWFwKCh2KSA9PiAoeyAuLi52IH0pKSA6IFtdLFxuICAgICAgICBzdGVwczogQXJyYXkuaXNBcnJheShwYi5zdGVwcykgPyBwYi5zdGVwcy5tYXAoKHMpID0+ICh7IC4uLnMgfSkpIDogW10sXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRSdW5SZXBvcnQoe1xuICAgIHByb2R1Y3RJZCxcbiAgICBuYW1lLFxuICAgIHBhcnNlZCxcbiAgICB1c2VyLFxuICAgIHN0YXJ0ZWRBdCxcbiAgICBmaW5pc2hlZEF0LFxuICAgIGJhdGNoU2l6ZSxcbiAgICBmYWlsdXJlVGhyZXNob2xkLFxuICAgIGluY2x1ZGVPZmZsaW5lLFxuICAgIHJlc29sdmVkVmFycyxcbiAgICBvdXRjb21lLFxuICAgIHRvdGFsRGV2aWNlcyxcbn0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm9kdWN0OiBwcm9kdWN0SWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHVzZXIsXG4gICAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgICAgZmluaXNoZWRBdCxcbiAgICAgICAgZHVyYXRpb25NczogbmV3IERhdGUoZmluaXNoZWRBdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoc3RhcnRlZEF0KS5nZXRUaW1lKCksXG4gICAgICAgIG1vZGU6ICdhcHBseScsXG4gICAgICAgIHBsYXlib29rOiB7XG4gICAgICAgICAgICBuYW1lOiBwYXJzZWQ/Lm5hbWUgfHwgbnVsbCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwYXJzZWQ/LmRlc2NyaXB0aW9uIHx8IG51bGwsXG4gICAgICAgICAgICBzdGVwczogcGFyc2VkPy5zdGVwcz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgIH0sXG4gICAgICAgIHJvbGxvdXQ6IHtcbiAgICAgICAgICAgIGJhdGNoU2l6ZSxcbiAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQsXG4gICAgICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgICAgICAgZ3JvdXA6IG51bGwsXG4gICAgICAgICAgICBpbmNsdWRlT2ZmbGluZTogISFpbmNsdWRlT2ZmbGluZSxcbiAgICAgICAgICAgIHNvdXJjZTogJ2Rhc2hib2FyZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHZhcnM6IHJlc29sdmVkVmFycyxcbiAgICAgICAgc3VtbWFyeToge1xuICAgICAgICAgICAgYXR0ZW1wdGVkOiBvdXRjb21lLmF0dGVtcHRlZCxcbiAgICAgICAgICAgIHN1Y2NlZWRlZDogb3V0Y29tZS5zdWNjZWVkZWQsXG4gICAgICAgICAgICBmYWlsZWQ6IG91dGNvbWUuZmFpbGVkLFxuICAgICAgICAgICAgZmFpbHVyZVJhdGU6IG91dGNvbWUuZmFpbHVyZVJhdGUsXG4gICAgICAgICAgICB0b3RhbDogdG90YWxEZXZpY2VzLFxuICAgICAgICB9LFxuICAgICAgICBhYm9ydGVkOiAhIW91dGNvbWUuYWJvcnRlZCxcbiAgICAgICAgcmVhc29uOiBvdXRjb21lLnJlYXNvbiB8fCBudWxsLFxuICAgICAgICBiYXRjaGVzOiBvdXRjb21lLmJhdGNoZXMsXG4gICAgICAgIGRldmljZXM6IG91dGNvbWUucmVzdWx0cy5tYXAoKHIpID0+ICh7XG4gICAgICAgICAgICBkZXZpY2U6IHI/LmRldmljZSxcbiAgICAgICAgICAgIG9rOiAhIXI/Lm9rLFxuICAgICAgICAgICAgc2tpcHBlZDogISFyPy5za2lwcGVkLFxuICAgICAgICAgICAgZXJyb3I6IHI/LmVycm9yIHx8IG51bGwsXG4gICAgICAgICAgICBzdGVwczogQXJyYXkuaXNBcnJheShyPy5zdGVwcylcbiAgICAgICAgICAgICAgICA/IHIuc3RlcHMubWFwKChzKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBzLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBvazogISFzLm9rLFxuICAgICAgICAgICAgICAgICAgICAgIHNraXBwZWQ6ICEhcy5za2lwcGVkLFxuICAgICAgICAgICAgICAgICAgICAgIHZlcmRpY3Q6IHMudmVyZGljdCB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHMuc3VtbWFyeSxcbiAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBzLmR1cmF0aW9uTXMsXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHMuZXJyb3IgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgIH0pKSxcbiAgICB9O1xufVxuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnLi4vbGliL2ZvY3VzLmpzJztcblxuY29uc3QgUEFHRSA9IDEyO1xuXG5jb25zdCBISU5UID0gW1xuICAgIHsgazogJ1x1MjE5MVx1MjE5MycsIGxhYmVsOiAnbW92ZScgfSxcbiAgICB7IGs6ICdlbnRlcicsIGxhYmVsOiAncGljaycgfSxcbiAgICB7IGs6ICdlc2MnLCBsYWJlbDogJ2NhbmNlbCcgfSxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBQcm9maWxlUGlja2VyTW9kYWwoeyBwcm9maWxlcywgYWN0aXZlLCBvblNlbGVjdCwgb25DYW5jZWwgfSkge1xuICAgIGNvbnN0IHNvcnRlZCA9IHVzZU1lbW8oKCkgPT4gWy4uLihwcm9maWxlcyB8fCBbXSldLnNvcnQoKSwgW3Byb2ZpbGVzXSk7XG4gICAgY29uc3QgaW5pdGlhbEN1cnNvciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBpID0gc29ydGVkLmluZGV4T2YoYWN0aXZlKTtcbiAgICAgICAgcmV0dXJuIGkgPj0gMCA/IGkgOiAwO1xuICAgIH0sIFtzb3J0ZWQsIGFjdGl2ZV0pO1xuICAgIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSB1c2VTdGF0ZShpbml0aWFsQ3Vyc29yKTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZUN1cnNvciA9IE1hdGgubWluKGN1cnNvciwgTWF0aC5tYXgoMCwgc29ydGVkLmxlbmd0aCAtIDEpKTtcbiAgICBjb25zdCB2aWV3U3RhcnQgPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgTWF0aC5taW4oZWZmZWN0aXZlQ3Vyc29yIC0gTWF0aC5mbG9vcihQQUdFIC8gMiksIE1hdGgubWF4KDAsIHNvcnRlZC5sZW5ndGggLSBQQUdFKSksXG4gICAgKTtcbiAgICBjb25zdCB2aWV3U2xpY2UgPSBzb3J0ZWQuc2xpY2Uodmlld1N0YXJ0LCB2aWV3U3RhcnQgKyBQQUdFKTtcblxuICAgIHVzZU1vZGFsKFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS5lc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBvbkNhbmNlbD8uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaWNrID0gc29ydGVkW2VmZmVjdGl2ZUN1cnNvcl07XG4gICAgICAgICAgICAgICAgaWYgKHBpY2sgJiYgcGljayAhPT0gYWN0aXZlKSBvblNlbGVjdD8uKHBpY2spO1xuICAgICAgICAgICAgICAgIGVsc2Ugb25DYW5jZWw/LigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkudXBBcnJvdykge1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gTWF0aC5tYXgoMCwgYyAtIDEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5LmRvd25BcnJvdykge1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigoYykgPT4gTWF0aC5taW4oc29ydGVkLmxlbmd0aCAtIDEsIGMgKyAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgaGludDogSElOVCB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94XG4gICAgICAgICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS5ib3JkZXJGb2N1c31cbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcj17dGhlbWUub3ZlcmxheUJnfVxuICAgICAgICAgICAgcGFkZGluZ1g9ezJ9XG4gICAgICAgICAgICBwYWRkaW5nWT17MX1cbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICAgICAgd2lkdGg9ezU2fVxuICAgICAgICA+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0ganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgU1dJVENIIFBST0ZJTEVcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57c29ydGVkLmxlbmd0aH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAge3NvcnRlZC5sZW5ndGggPT09IDAgJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pm5vIHByb2ZpbGVzPC9UZXh0Pn1cbiAgICAgICAgICAgIHt2aWV3U2xpY2UubWFwKChuYW1lLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJzSWR4ID0gdmlld1N0YXJ0ICsgaTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0ZvY3VzZWQgPSBhYnNJZHggPT09IGVmZmVjdGl2ZUN1cnNvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IG5hbWUgPT09IGFjdGl2ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17bmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aXNGb2N1c2VkID8gdGhlbWUuYWNjZW50IDogdGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc0ZvY3VzZWQgPyAnXHUyNUI2JyA6ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtpc0FjdGl2ZSA/IHRoZW1lLmxpbWUgOiB0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzQWN0aXZlID8gJ1x1MjVDRicgOiAnXHUyNUNCJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc0ZvY3VzZWQgPyB0aGVtZS5mZyA6IHRoZW1lLmZnRGltfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge25hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc0FjdGl2ZSA/ICcgIChhY3RpdmUpJyA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19Plx1MjE5MVx1MjE5MyBtb3ZlIFx1MDBCNyBlbnRlciBwaWNrIFx1MDBCNyBlc2MgY2FuY2VsPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG4iLCAiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdldERldmljZXMgfSBmcm9tICcuLi8uLi8uLi9saWIvZGV2aWNlcy5qcyc7XG5pbXBvcnQgeyBkZWJ1Z0NvdW50LCBkZWJ1Z0xvZyB9IGZyb20gJy4uLy4uLy4uL2xpYi9kZWJ1Zy1sb2cuanMnO1xuXG4vLyBDb25uZWN0L2Rpc2Nvbm5lY3QgcmlkZSB0aGUgV1MgdmlhIGBkZXZpY2Vfc3RhdGVfY2hhbmdlYCwgc28gdGhpcyBwb2xsXG4vLyBvbmx5IGV4aXN0cyB0byBjYXRjaCBmbGVldCBtZW1iZXJzaGlwIGNoYW5nZXMgKGFkZGVkIG9yIHJlbW92ZWRcbi8vIGRldmljZXMpLiBUaG9zZSBhcmUgcmFyZSBldmVudHM7IG9uY2UgYSBtaW51dGUgaXMgcGxlbnR5LlxuZXhwb3J0IGZ1bmN0aW9uIHVzZURldmljZXMoeyBwb2xsTXMgPSA2MF8wMDAgfSA9IHt9KSB7XG4gICAgY29uc3QgW2RldmljZXMsIHNldERldmljZXNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHQwID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGRlYnVnQ291bnQoJ2h0dHA6ZGV2aWNlcycpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0ID0gYXdhaXQgZ2V0RGV2aWNlcyh7fSk7XG4gICAgICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6ZGV2aWNlcycsICdlbmQnLCB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBEYXRlLm5vdygpIC0gdDAsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiBsaXN0Py5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0RGV2aWNlcyhsaXN0KTtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpkZXZpY2VzJywgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogRGF0ZS5ub3coKSAtIHQwLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZT8ubWVzc2FnZSB8fCBTdHJpbmcoZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldEVycm9yKGUubWVzc2FnZSB8fCBTdHJpbmcoZSkpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmNlbGxlZCkgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkKCk7XG4gICAgICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwobG9hZCwgcG9sbE1zKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfTtcbiAgICB9LCBbcG9sbE1zXSk7XG5cbiAgICByZXR1cm4geyBkZXZpY2VzLCBlcnJvciwgbG9hZGluZyB9O1xufVxuIiwgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXRNb25pdG9yaW5nRGF0YSB9IGZyb20gJy4uLy4uLy4uL2xpYi9tb25pdG9yaW5nLmpzJztcbmltcG9ydCB7IGRlYnVnTG9nIH0gZnJvbSAnLi4vLi4vLi4vbGliL2RlYnVnLWxvZy5qcyc7XG5pbXBvcnQgeyBldmVudFN0cmVhbSB9IGZyb20gJy4uLy4uLy4uL2xpYi9kYXNoYm9hcmQvZXZlbnQtc3RyZWFtLmpzJztcblxuLy8gRmxlZXQtd2lkZSBtb25pdG9yaW5nICsgY29ubmVjdGlvbiBldmVudHMgZHJpdmVuIGJ5IHRoZSB1c2VyLWxldmVsXG4vLyAvdjIvLi4uL2V2ZW50cyB3ZWJzb2NrZXQuIEEgc2luZ2xlIHBlcnNpc3RlbnQgc29ja2V0IGNhcnJpZXMgdHdvXG4vLyBzdWJzY3JpcHRpb25zOlxuLy8gICAtIGBidWNrZXRfd3JpdGVgIGZpbHRlcmVkIGJ5IGBidWNrZXQ6IG1vbml0b3JpbmdgIFx1MjE5MiBwZXItZGV2aWNlIHNhbXBsZVxuLy8gICAtIGBkZXZpY2Vfc3RhdGVfY2hhbmdlYCB1bmZpbHRlcmVkIFx1MjE5MiBjb25uZWN0L2Rpc2Nvbm5lY3Qvc2xlZXAgZXZlbnRzXG4vLyBBIFJFU1Qgc25hcHNob3QgcnVucyBhdCBzdGFydHVwIHNvIHRoZSBVSSBoYXMgYSBiYXNlbGluZSBiZWZvcmUgdGhlIGZpcnN0XG4vLyBsaXZlIGZyYW1lIGFycml2ZXMgKHRoZSBldmVudCBzdHJlYW0gaGFzIG5vIGJhY2tmaWxsIHNlbWFudGljcykuXG4vL1xuLy8gRnJhbWUgc2hhcGVzIChvYnNlcnZlZCBvbiB0aGluZ2VyLnRoaW5yLmlvKTpcbi8vICAgYnVja2V0X3dyaXRlOiAgICAgICAgeyBldmVudCwgdXNlciwgYnVja2V0LCB0cywgZGF0YTogeyBkZXZpY2UsIGNwdSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnksIGRpc2ssIGxvYWQsIG5ldHdvcmssIGFnZW50LCAuLi4gfSB9XG4vLyAgIGRldmljZV9zdGF0ZV9jaGFuZ2U6IHsgZXZlbnQsIHVzZXIsIHRzLCBkZXZpY2UsIHByb2R1Y3Q/LCBzdGF0ZSB9XG4vLyAgIHN0YXRlIFx1MjIwOCBjb25uZWN0ZWQgfCBkaXNjb25uZWN0ZWQgfCByZXN1bWVkIHwgYXdha2UgfCBhc2xlZXBcblxuLy8gTGFzdCAzMCBtaW51dGVzIG9mIHBlci1kZXZpY2UgQ1BVIGhpc3RvcnkgKG9uZSBwb2ludCBwZXIgbWludXRlLCBzaW5jZVxuLy8gYWdlbnRzIHB1Ymxpc2ggYXQgdGhhdCBjYWRlbmNlKS4gS2VlcHMgdGhlIHBlci1kZXZpY2Ugc3BhcmtsaW5lcyBhbmRcbi8vIHRoZSByb2xsaW5nIGZsZWV0LXdpZGUgY2hhcnQgb24gYSBjbGVhbiBoYWxmLWhvdXIgd2luZG93LlxuY29uc3QgSElTVE9SWSA9IDMwO1xuY29uc3QgQlVDS0VUID0gJ21vbml0b3JpbmcnO1xuY29uc3QgQkFTRUxJTkVfSVRFTVMgPSA1MDA7IC8vIGNhcCBvbiBkZXZpY2VzIHJldHVybmVkIGluIHRoZSBvbmUtc2hvdCBzbmFwc2hvdC5cbi8vIEZpZWxkcyBwdWxsZWQgb24gYmFzZWxpbmUuIFRoZSBzZXJ2ZXIgZHJvcHMgcm93cyB3aGVyZSBhbnkgb2YgdGhlc2UgaXNcbi8vIG51bGwsIHNvIGtlZXAgdG8gdW5pdmVyc2FsIGFnZW50IG1ldHJpY3MgXHUyMDE0IGFueXRoaW5nIHBsYXRmb3JtLXNwZWNpZmljXG4vLyAodGVtcGVyYXR1cmUsIG5ldHdvcmsgcmF0ZXMsIGV0Yy4pIGNvbWVzIHZpYSB0aGUgV1Mgc3RyZWFtLiBNZW1vcnkvZGlza1xuLy8gdG90YWxzIGFuZCBjcHUuY29yZXMgYXJlIHN0YWJsZSBhY3Jvc3MgYWxsIGFnZW50cywgc28gdGhleSBsaXZlIGhlcmUgc29cbi8vIHRoZSBwZXItZGV2aWNlIGRldGFpbCB0YWIgaGFzIHRoZW0gb24gZmlyc3QgcGFpbnQgaW5zdGVhZCBvZiB3YWl0aW5nIHVwXG4vLyB0byBhIG1pbnV0ZSBmb3IgdGhlIG5leHQgV1Mgc2FtcGxlLlxuY29uc3QgQkFTRUxJTkVfRklFTERTID1cbiAgICAnY3B1LnVzYWdlLGNwdS5jb3JlcyxtZW1vcnkudXNhZ2UsbWVtb3J5LnRvdGFsLG1lbW9yeS5hdmFpbGFibGUsbWVtb3J5LnN3YXAudXNhZ2UsbWVtb3J5LnN3YXAudG90YWwsbWVtb3J5LnN3YXAuZnJlZSxkaXNrLnJvb3QudXNhZ2UsZGlzay5yb290LnRvdGFsLGRpc2sucm9vdC5hdmFpbGFibGUsdXB0aW1lLGFnZW50LnZlcnNpb24nO1xuLy8gQm91bmQgdGhlIGJhc2VsaW5lIHRvIHJlY2VudCBzYW1wbGVzLiBXaXRob3V0IGEgdGltZSByYW5nZSB0aGUgTW9uZ29cbi8vIGBncm91cF9ieT1kZXZpY2VgIHBpcGVsaW5lIGRvZXMgYSAkc29ydCBvdmVyIHRoZSB3aG9sZSBidWNrZXQgaGlzdG9yeVxuLy8gYmVmb3JlICRncm91cC8kZmlyc3QsIHdoaWNoIHNjYWxlcyBsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YgZmllbGRzXG4vLyBhbmQgdHJpcHMgdGhlIDEwcyBnYXRld2F5IHRpbWVvdXQgb25jZSB3ZSBhc2sgZm9yIH41IGZpZWxkcy4gQWdlbnRzXG4vLyBwdWJsaXNoIGV2ZXJ5IG1pbnV0ZSwgc28gYSBmaXZlLW1pbnV0ZSB3aW5kb3cgZ3VhcmFudGVlcyB3ZSBjYXRjaFxuLy8gZXZlcnkgYWN0aXZlIGRldmljZSB3aGlsZSBrZWVwaW5nIHRoZSBzZXJ2ZXItc2lkZSBzb3J0IHRpbnkuXG5jb25zdCBCQVNFTElORV9XSU5ET1dfTUlOID0gNTtcbmNvbnN0IEZMVVNIX01TID0gNDAwOyAvLyBjb2FsZXNjZSBidXJzdHMgb2Ygd3JpdGVzIGJlZm9yZSByZS1yZW5kZXJpbmcuXG5jb25zdCBNQVhfRVZFTlRTID0gODA7XG5cbmZ1bmN0aW9uIHRzU3RyKHRzKSB7XG4gICAgY29uc3QgZCA9IHRzID8gbmV3IERhdGUoTnVtYmVyKHRzKSkgOiBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiBkLnRvVGltZVN0cmluZygpLnNsaWNlKDAsIDgpO1xufVxuXG5mdW5jdGlvbiBtYXBTdGF0ZShzdGF0ZSkge1xuICAgIGlmIChzdGF0ZSA9PT0gJ2Nvbm5lY3RlZCcpIHJldHVybiB7IGtpbmQ6ICdqb2luJywgbXNnOiAnY29ubmVjdGVkJyB9O1xuICAgIGlmIChzdGF0ZSA9PT0gJ2Rpc2Nvbm5lY3RlZCcpIHJldHVybiB7IGtpbmQ6ICdsZWF2ZScsIG1zZzogJ2Rpc2Nvbm5lY3RlZCcgfTtcbiAgICBpZiAoc3RhdGUgPT09ICdyZXN1bWVkJykgcmV0dXJuIHsga2luZDogJ2luZm8nLCBtc2c6ICdyZXN1bWVkJyB9O1xuICAgIGlmIChzdGF0ZSA9PT0gJ2F3YWtlJykgcmV0dXJuIHsga2luZDogJ2luZm8nLCBtc2c6ICdhd2FrZScgfTtcbiAgICBpZiAoc3RhdGUgPT09ICdhc2xlZXAnKSByZXR1cm4geyBraW5kOiAnaW5mbycsIG1zZzogJ2FzbGVlcCcgfTtcbiAgICByZXR1cm4geyBraW5kOiAnaW5mbycsIG1zZzogc3RhdGUgfHwgJ3N0YXRlJyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRmxlZXRNb25pdG9yaW5nU3RyZWFtKGRldmljZXMpIHtcbiAgICBjb25zdCBbc2FtcGxlcywgc2V0U2FtcGxlc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2hpc3RvcnksIHNldEhpc3RvcnldID0gdXNlU3RhdGUoeyBjcHU6IFtdLCBtZW06IFtdLCBkaXNrOiBbXSB9KTtcbiAgICBjb25zdCBbY3B1SGlzdG9yeSwgc2V0Q3B1SGlzdG9yeV0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2V2ZW50cywgc2V0RXZlbnRzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGUoJ2lkbGUnKTtcblxuICAgIGNvbnN0IHNhbXBsZXNSZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGhpc3RvcnlSZWYgPSB1c2VSZWYoeyBjcHU6IFtdLCBtZW06IFtdLCBkaXNrOiBbXSB9KTtcbiAgICBjb25zdCBjcHVIaXN0b3J5UmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCBwZW5kaW5nUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCBmbHVzaFRpbWVyUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gICAgLy8gS2V5IHVzZWQgdG8gYXZvaWQgcmUtZmV0Y2hpbmcgUkVTVCBiYXNlbGluZSBpZiB0aGUgZGV2aWNlIHNldCBkaWRuJ3RcbiAgICAvLyBjaGFuZ2UgXHUyMDE0IHVzZURldmljZXMgcG9sbHMgZXZlcnkgMTVzIHNvIHRoZSBhcnJheSByZWZlcmVuY2UgZmxpcHMgb2Z0ZW4uXG4gICAgY29uc3Qgb25saW5lS2V5ID0gZGV2aWNlc1xuICAgICAgICAuZmlsdGVyKChkKSA9PiBkLmNvbm5lY3Rpb24/LmFjdGl2ZSlcbiAgICAgICAgLm1hcCgoZCkgPT4gZC5kZXZpY2UpXG4gICAgICAgIC5zb3J0KClcbiAgICAgICAgLmpvaW4oJywnKTtcblxuICAgIC8vIEhpc3RvcnkgcHJlLWZpbGwgXHUyMDE0IHBlci1taW51dGUgYXZlcmFnZXMgb3ZlciB0aGUgbGFzdCA0MCBtaW51dGVzIHNvXG4gICAgLy8gdGhlIHBlci1kZXZpY2UgQ1BVIHNwYXJrbGluZXMgaGF2ZSBzaGFwZSBvbiBkYXNoYm9hcmQgb3BlbiBpbnN0ZWFkXG4gICAgLy8gb2Ygc3RhcnRpbmcgZW1wdHkuIFRoZSBzZXJ2ZXIncyBgYWdnICsgZ3JvdXBfYnlgIHBhdGggc2tpcHMgdGhlXG4gICAgLy8gcHJlLWdyb3VwIHNvcnQgZW50aXJlbHksIHNvIGl0IHN0YXlzIGZhc3QgKH45MDBtcyBmb3IgOTkgZGV2aWNlcylcbiAgICAvLyBldmVuIHRob3VnaCB0aGUgdGltZSByYW5nZSBpcyA0MCBtaW4gd2lkZS4gV1MgZnJhbWVzIHRha2Ugb3ZlciBvblxuICAgIC8vIHRvcCBvbmNlIHRoZXkgc3RhcnQgYXJyaXZpbmcuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdDAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6ZmxlZXQtaGlzdG9yeScsICdzdGFydCcsIHsgd2luZG93X21pbjogSElTVE9SWSB9KTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldE1vbml0b3JpbmdEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlczogSElTVE9SWSxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnk6ICdkZXZpY2UnLFxuICAgICAgICAgICAgICAgICAgICBhZ2c6ICcxbScsXG4gICAgICAgICAgICAgICAgICAgIGFnZ190eXBlOiAnYXZnJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzOiAnY3B1LnVzYWdlJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpmbGVldC1oaXN0b3J5JywgJ2VuZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgcm93czogQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEubGVuZ3RoIDogMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkIHx8ICFBcnJheS5pc0FycmF5KGRhdGEpIHx8IGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgYnlEZXZpY2UgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSByLmRldmljZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSByPy5jcHU/LnVzYWdlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShOdW1iZXIodikpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFieURldmljZS5oYXMoaWQpKSBieURldmljZS5zZXQoaWQsIFtdKTtcbiAgICAgICAgICAgICAgICAgICAgYnlEZXZpY2UuZ2V0KGlkKS5wdXNoKHsgdHM6IE51bWJlcihyLnRzKSwgdjogTnVtYmVyKHYpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0geyAuLi5jcHVIaXN0b3J5UmVmLmN1cnJlbnQgfTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpZCwgcm93c10gb2YgYnlEZXZpY2UuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3Muc29ydCgoYSwgYikgPT4gYS50cyAtIGIudHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJpZXMgPSByb3dzLnNsaWNlKC1ISVNUT1JZKS5tYXAoKHIpID0+IHIudik7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGNsb2JiZXIgYSBzZXJpZXMgdGhlIFdTIGFscmVhZHkgcG9wdWxhdGVkIHBhc3RcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hhdCB0aGUgYmFzZWxpbmUgY2FuIG9mZmVyLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRbaWRdIHx8IG5leHRbaWRdLmxlbmd0aCA8IHNlcmllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRbaWRdID0gc2VyaWVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNwdUhpc3RvcnlSZWYuY3VycmVudCA9IG5leHQ7XG4gICAgICAgICAgICAgICAgc2V0Q3B1SGlzdG9yeShuZXh0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOmZsZWV0LWhpc3RvcnknLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBEYXRlLm5vdygpIC0gdDAsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVyciksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW10pO1xuXG4gICAgLy8gUkVTVCBiYXNlbGluZSBcdTIwMTQgb25lIHNhbXBsZSBwZXIgb25saW5lIGRldmljZSBvbiBmaXJzdCBhcHBlYXJhbmNlLlxuICAgIC8vIFNpbmdsZSBtdWx0aS1kZXZpY2UgY2FsbDogd2l0aCBubyBgZGV2aWNlYCB0aGUgaGVscGVyIGRlZmF1bHRzIHRvXG4gICAgLy8gZ3JvdXBfYnk9ZGV2aWNlIGFuZCB0aGUgc2VydmVyIHJldHVybnMgdGhlIGxhdGVzdCBzYW1wbGUgcGVyIGRldmljZS5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBpZHMgPSBvbmxpbmVLZXkgPyBvbmxpbmVLZXkuc3BsaXQoJywnKSA6IFtdO1xuICAgICAgICBjb25zdCBtaXNzaW5nID0gaWRzLmZpbHRlcigoaWQpID0+ICFzYW1wbGVzUmVmLmN1cnJlbnRbaWRdKTtcbiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHQwID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOmZsZWV0LWJhc2VsaW5lJywgJ3N0YXJ0JywgeyBtaXNzaW5nOiBtaXNzaW5nLmxlbmd0aCB9KTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldE1vbml0b3JpbmdEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IEJBU0VMSU5FX0lURU1TLFxuICAgICAgICAgICAgICAgICAgICBzb3J0OiAnZGVzYycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkczogQkFTRUxJTkVfRklFTERTLFxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzOiBCQVNFTElORV9XSU5ET1dfTUlOLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOmZsZWV0LWJhc2VsaW5lJywgJ2VuZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgcm93czogQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEubGVuZ3RoIDogMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkIHx8ICFBcnJheS5pc0FycmF5KGRhdGEpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgbWlzc2luZ1NldCA9IG5ldyBTZXQobWlzc2luZyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2FtcGxlIG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzYW1wbGU/LmRldmljZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpZCB8fCAhbWlzc2luZ1NldC5oYXMoaWQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlc1tpZF0gPSBzYW1wbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgICAgICBhcHBseVVwZGF0ZXModXBkYXRlcyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpmbGVldC1iYXNlbGluZScsICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBCYXNlbGluZSBpcyBiZXN0LWVmZm9ydDsgdGhlIFdTIHN0cmVhbSB3aWxsIGZpbGwgc2FtcGxlcyBpbi5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbb25saW5lS2V5XSk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdmlhIHRoZSBzaGFyZWQgZXZlbnQgc3RyZWFtLiBXZSBkb24ndCBvd24gdGhlIHNvY2tldDtcbiAgICAvLyB0aGUgc2luZ2xldG9uIG11bHRpcGxleGVzIGZsZWV0IG1vbml0b3Jpbmcgd2l0aCBwcm9kdWN0IG1ldHJpY3NcbiAgICAvLyBzbyBkYXNoYm9hcmQgbG9hZCA9IDEgV1MsIG5vdCBOLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50U3RyZWFtLmNvbm5lY3QoKTtcbiAgICAgICAgc2V0U3RhdHVzKCdjb25uZWN0aW5nJyk7XG5cbiAgICAgICAgY29uc3Qgb2ZmQnVja2V0ID0gZXZlbnRTdHJlYW0ub24oJ2J1Y2tldF93cml0ZScsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGZyYW1lLmRhdGE7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGRhdGE/LmRldmljZTtcbiAgICAgICAgICAgIGlmICghaWQgfHwgIWRhdGEpIHJldHVybjtcbiAgICAgICAgICAgIHBlbmRpbmdSZWYuY3VycmVudFtpZF0gPSBkYXRhO1xuICAgICAgICAgICAgaWYgKGZsdXNoVGltZXJSZWYuY3VycmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZmx1c2hUaW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dChmbHVzaCwgRkxVU0hfTVMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb2ZmU3RhdGUgPSBldmVudFN0cmVhbS5vbignZGV2aWNlX3N0YXRlX2NoYW5nZScsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBmcmFtZS5kZXZpY2U7XG4gICAgICAgICAgICBpZiAoIWlkKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBtYXBwZWQgPSBtYXBTdGF0ZShmcmFtZS5zdGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBldiA9IHtcbiAgICAgICAgICAgICAgICB0OiB0c1N0cihmcmFtZS50cyksXG4gICAgICAgICAgICAgICAga2luZDogbWFwcGVkLmtpbmQsXG4gICAgICAgICAgICAgICAgZGV2OiBpZCxcbiAgICAgICAgICAgICAgICBtc2c6IG1hcHBlZC5tc2csXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2V0RXZlbnRzKChjdXIpID0+IFtldiwgLi4uY3VyXS5zbGljZSgwLCBNQVhfRVZFTlRTKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV2ZW50U3RyZWFtLnN1YnNjcmliZSh7IGV2ZW50OiAnYnVja2V0X3dyaXRlJywgZmlsdGVyczogeyBidWNrZXQ6IEJVQ0tFVCB9IH0pO1xuICAgICAgICBldmVudFN0cmVhbS5zdWJzY3JpYmUoeyBldmVudDogJ2RldmljZV9zdGF0ZV9jaGFuZ2UnIH0pO1xuICAgICAgICAvLyBTdXJmYWNlIGEgY29hcnNlIHN0YXR1cyBcdTIwMTQgdGhlIHNpbmdsZXRvbiBoYW5kbGVzIHRoZVxuICAgICAgICAvLyBvcGVuL2Nsb3NlL3JldHJ5IGxpZmVjeWNsZSBpbnRlcm5hbGx5LlxuICAgICAgICBzZXRTdGF0dXMoJ29wZW4nKTtcbiAgICAgICAgZGVidWdMb2coJ3dzOmZsZWV0JywgJ3N1YnNjcmliZWQtdmlhLXNoYXJlZC1zdHJlYW0nKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgb2ZmQnVja2V0KCk7XG4gICAgICAgICAgICBvZmZTdGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGZsdXNoVGltZXJSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChmbHVzaFRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIGZsdXNoVGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudFN0cmVhbS5kaXNjb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICAgIGZsdXNoVGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHVwZGF0ZXMgPSBwZW5kaW5nUmVmLmN1cnJlbnQ7XG4gICAgICAgIHBlbmRpbmdSZWYuY3VycmVudCA9IHt9O1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIGFwcGx5VXBkYXRlcyh1cGRhdGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseVVwZGF0ZXModXBkYXRlcykge1xuICAgICAgICBjb25zdCBuZXh0ID0geyAuLi5zYW1wbGVzUmVmLmN1cnJlbnQsIC4uLnVwZGF0ZXMgfTtcbiAgICAgICAgc2FtcGxlc1JlZi5jdXJyZW50ID0gbmV4dDtcbiAgICAgICAgc2V0U2FtcGxlcyhuZXh0KTtcbiAgICAgICAgcHVzaERldmljZUNwdSh1cGRhdGVzKTtcbiAgICAgICAgcHVzaEhpc3RvcnkoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoRGV2aWNlQ3B1KHVwZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4uY3B1SGlzdG9yeVJlZi5jdXJyZW50IH07XG4gICAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW2lkLCBzXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGVzKSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHM/LmNwdT8udXNhZ2U7XG4gICAgICAgICAgICBpZiAodiA9PSBudWxsIHx8ICFOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHYpKSkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBuZXh0W2lkXSA/IG5leHRbaWRdLnNsaWNlKCkgOiBbXTtcbiAgICAgICAgICAgIGFyci5wdXNoKE51bWJlcih2KSk7XG4gICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IEhJU1RPUlkpIGFyci5zcGxpY2UoMCwgYXJyLmxlbmd0aCAtIEhJU1RPUlkpO1xuICAgICAgICAgICAgbmV4dFtpZF0gPSBhcnI7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoYW5nZWQpIHJldHVybjtcbiAgICAgICAgY3B1SGlzdG9yeVJlZi5jdXJyZW50ID0gbmV4dDtcbiAgICAgICAgc2V0Q3B1SGlzdG9yeShuZXh0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwdXNoSGlzdG9yeSgpIHtcbiAgICAgICAgbGV0IGNwdSA9IDAsXG4gICAgICAgICAgICBtZW0gPSAwLFxuICAgICAgICAgICAgZGlzayA9IDA7XG4gICAgICAgIGxldCBjbiA9IDAsXG4gICAgICAgICAgICBtbiA9IDAsXG4gICAgICAgICAgICBkbiA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiBPYmplY3QudmFsdWVzKHNhbXBsZXNSZWYuY3VycmVudCkpIHtcbiAgICAgICAgICAgIGlmIChzLmNwdT8udXNhZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNwdSArPSBOdW1iZXIocy5jcHUudXNhZ2UpO1xuICAgICAgICAgICAgICAgIGNuKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocy5tZW1vcnk/LnVzYWdlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBtZW0gKz0gTnVtYmVyKHMubWVtb3J5LnVzYWdlKTtcbiAgICAgICAgICAgICAgICBtbisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMuZGlzaz8ucm9vdD8udXNhZ2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRpc2sgKz0gTnVtYmVyKHMuZGlzay5yb290LnVzYWdlKTtcbiAgICAgICAgICAgICAgICBkbisrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB1c2ggPSAoYXJyLCB2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdXQgPSBbLi4uYXJyLCB2XTtcbiAgICAgICAgICAgIHJldHVybiBvdXQubGVuZ3RoID4gSElTVE9SWSA/IG91dC5zbGljZSgtSElTVE9SWSkgOiBvdXQ7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHQgPSB7XG4gICAgICAgICAgICBjcHU6IHB1c2goaGlzdG9yeVJlZi5jdXJyZW50LmNwdSwgY24gPyBjcHUgLyBjbiA6IG51bGwpLFxuICAgICAgICAgICAgbWVtOiBwdXNoKGhpc3RvcnlSZWYuY3VycmVudC5tZW0sIG1uID8gbWVtIC8gbW4gOiBudWxsKSxcbiAgICAgICAgICAgIGRpc2s6IHB1c2goaGlzdG9yeVJlZi5jdXJyZW50LmRpc2ssIGRuID8gZGlzayAvIGRuIDogbnVsbCksXG4gICAgICAgIH07XG4gICAgICAgIGhpc3RvcnlSZWYuY3VycmVudCA9IG5leHQ7XG4gICAgICAgIHNldEhpc3RvcnkobmV4dCk7XG4gICAgfVxuXG4gICAgLy8gUHVzaCBhIHN5bnRoZXRpYyBldmVudCBpbnRvIHRoZSBzYW1lIHN0cmVhbSB0aGUgV1MgdXNlcy4gVGhlIEVWRU5UU1xuICAgIC8vIHBhbmVsIGRvZXNuJ3QgY2FyZSB3aGVyZSBhIHJvdyBjYW1lIGZyb20gXHUyMDE0IHRoaXMgbGV0cyB0aGUgdXBncmFkZVxuICAgIC8vIGNvbnRyb2xsZXIgc3VyZmFjZSBwcm9ncmVzcyBhbmQgZmFpbHVyZXMgbmV4dCB0byBjb25uZWN0L2Rpc2Nvbm5lY3RcbiAgICAvLyBldmVudHMgd2l0aG91dCBrZWVwaW5nIGEgc2VwYXJhdGUgcGFuZWwuXG4gICAgY29uc3QgcHVzaEV2ZW50ID0gdXNlQ2FsbGJhY2soKGV2KSA9PiB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0ge1xuICAgICAgICAgICAgdDogdHNTdHIoZXYudHMgfHwgRGF0ZS5ub3coKSksXG4gICAgICAgICAgICBraW5kOiBldi5raW5kIHx8ICdpbmZvJyxcbiAgICAgICAgICAgIGRldjogZXYuZGV2IHx8ICcnLFxuICAgICAgICAgICAgbXNnOiBldi5tc2cgfHwgJycsXG4gICAgICAgIH07XG4gICAgICAgIHNldEV2ZW50cygoY3VyKSA9PiBbZnJhbWUsIC4uLmN1cl0uc2xpY2UoMCwgTUFYX0VWRU5UUykpO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiB7IHNhbXBsZXMsIGhpc3RvcnksIGNwdUhpc3RvcnksIGV2ZW50cywgc3RhdHVzLCBwdXNoRXZlbnQgfTtcbn1cbiIsICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXRBbGFybUluc3RhbmNlcywgQUxBUk1fU1RBVEUgfSBmcm9tICcuLi8uLi8uLi9saWIvYWxhcm1zLmpzJztcbmltcG9ydCB7IGV2ZW50U3RyZWFtIH0gZnJvbSAnLi4vLi4vLi4vbGliL2Rhc2hib2FyZC9ldmVudC1zdHJlYW0uanMnO1xuaW1wb3J0IHsgZGVidWdMb2cgfSBmcm9tICcuLi8uLi8uLi9saWIvZGVidWctbG9nLmpzJztcblxuLy8gTGl2ZSB2aWV3IG9mIHNlcnZlci1zaWRlIGFsYXJtIGluc3RhbmNlcy4gT25lIFJFU1QgY2FsbCBhdCBtb3VudCB0byBzZWVkXG4vLyB0aGUgbGlzdCB3aXRoIGV2ZXJ5IG5vbi1jbGVhcmVkIGluc3RhbmNlLCB0aGVuIGZvdXIgV1Mgc3Vic2NyaXB0aW9ucyBvblxuLy8gdGhlIHNoYXJlZCAvdjIvLi4uL2V2ZW50cyBzb2NrZXQgZm9yIGRlbHRhczpcbi8vICAgLSBhbGFybV9pbnN0YW5jZV9hY3RpdmF0ZSAgIFx1MjE5MiB1cHNlcnQgKHJ1bGUgZmlyZWQsIG5ldyBpbnN0YW5jZSlcbi8vICAgLSBhbGFybV9pbnN0YW5jZV9ub3JtYWxpemUgIFx1MjE5MiBkcm9wIChpbnN0YW5jZSBhdXRvLWNsZWFyZWQgYnkgdGhlIHJ1bGUpXG4vLyAgIC0gYWxhcm1faW5zdGFuY2VfdXBkYXRlICAgICBcdTIxOTIgdXBzZXJ0LCBvciBkcm9wIGlmIHRoZSBuZXcgc3RhdGUgaXMgQ0xFQVJFRFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY292ZXJzIG1hbnVhbCBhY2svc2hlbHZlL2xhdGNoIGFuZCBtYW51YWxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJzIHZpYSB0aGUgdXNlcl9yZXNvdXJjZSB1cGRhdGUgZXZlbnQpXG4vLyAgIC0gYWxhcm1faW5zdGFuY2VfZGVsZXRlICAgICBcdTIxOTIgZHJvcCAoaW5zdGFuY2UgcHVyZ2VkIGZyb20gaGlzdG9yeSlcbi8vIFRoZSBiYWNrZW5kIG1lcmdlcyB0aGUgaW5zdGFuY2UgZmllbGRzIChpbnN0YW5jZSwgYWxhcm0sIHN0YXRlLCBcdTIwMjYpIGludG9cbi8vIHRoZSB0b3AtbGV2ZWwgZnJhbWUgaW5zdGVhZCBvZiB3cmFwcGluZyB0aGVtIHVuZGVyIGEgYC5kYXRhYCBlbnZlbG9wZVxuLy8gKGNvbXBhcmUgYnVja2V0cy5jcHA6OmdldF93cml0ZV9ldmVudF9kYXRhLCB3aGljaCBkb2VzIHdyYXApLiBTbyB0aGVcbi8vIGZyYW1lIGl0c2VsZiBpcyB0aGUgaW5zdGFuY2UgZG9jdW1lbnQgXHUyMDE0IHdlIGp1c3Qgc3RyaXAgdGhlIG1ldGEgZmllbGRzXG4vLyAoZXZlbnQsIHRzLCB1c2VyKSB0aGUgZXZlbnRzX3Bvb2wgaW5qZWN0cyBiZWZvcmUgc3RvcmluZyBpdC5cbi8vXG4vLyBSZXR1cm5zIHsgaW5zdGFuY2VzLCBsb2FkaW5nLCBlcnJvciwgcmVmcmVzaCB9IHdoZXJlIGBpbnN0YW5jZXNgIGlzIGFcbi8vIHN0YWJsZSBhcnJheSBzb3J0ZWQgd2l0aCB0aGUgc2FtZSBydWxlIHRoZSBzZXJ2ZXIgdXNlcyBieSBkZWZhdWx0XG4vLyAoc3RhdGUgYXNjLCBzZXZlcml0eSBkZXNjLCBjcmVhdGVkIGRlc2MpIHNvIHRoZSBVSSBkb2Vzbid0IHJlc2h1ZmZsZVxuLy8gcm93cyBvbiBldmVyeSBkZWx0YS5cblxuY29uc3QgQUNUSVZFX1NUQVRFUyA9IFtcbiAgICBBTEFSTV9TVEFURS5OT05FLFxuICAgIEFMQVJNX1NUQVRFLkFDVElWQVRFRCxcbiAgICBBTEFSTV9TVEFURS5BQ0tOT1dMRURHRUQsXG4gICAgQUxBUk1fU1RBVEUuTEFUQ0hFRCxcbiAgICBBTEFSTV9TVEFURS5TSEVMVkVELFxuXTtcblxuZnVuY3Rpb24gaW5zdGFuY2VLZXkoaW5zdCkge1xuICAgIHJldHVybiBpbnN0Py5pbnN0YW5jZSB8fCBpbnN0Py5faWQgfHwgbnVsbDtcbn1cblxuLy8gU3RyaXAgdGhlIG1ldGEgZmllbGRzIGV2ZW50c19wb29sIGluamVjdHMgKGV2ZW50L3RzL3VzZXIpIHNvIHRoZSByZXN0XG4vLyBvZiB0aGUgaG9vayB0cmVhdHMgV1MgZnJhbWVzIGlkZW50aWNhbGx5IHRvIFJFU1Qgc25hcHNob3Qgcm93cy5cbmZ1bmN0aW9uIGZyYW1lVG9JbnN0YW5jZShmcmFtZSkge1xuICAgIGlmICghZnJhbWUgfHwgdHlwZW9mIGZyYW1lICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgeyBldmVudDogX2UsIHRzOiBfdHMsIHVzZXI6IF91LCAuLi5pbnN0IH0gPSBmcmFtZTtcbiAgICByZXR1cm4gaW5zdDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlZE1zKGluc3QpIHtcbiAgICBjb25zdCB2ID0gaW5zdD8uY3JlYXRlZDtcbiAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSByZXR1cm4gdjtcbiAgICAvLyBTZXJ2ZXIgc29tZXRpbWVzIHNlcmlhbGlzZXMgZGF0ZXMgYXMgeyAkZGF0ZTogLi4uIH0gdmlhIERCX0RBVEUgXHUyMDE0IGFjY2VwdCBib3RoLlxuICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2LiRkYXRlID09PSAnbnVtYmVyJykgcmV0dXJuIHYuJGRhdGU7XG4gICAgICAgIGlmICh0eXBlb2Ygdi4kZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBEYXRlLnBhcnNlKHYuJGRhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSA/IHQgOiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdCA9IERhdGUucGFyc2Uodik7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodCkgPyB0IDogMDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVJbnN0YW5jZXMoYSwgYikge1xuICAgIGNvbnN0IHNhID0gYT8uc3RhdGUgPz8gMDtcbiAgICBjb25zdCBzYiA9IGI/LnN0YXRlID8/IDA7XG4gICAgaWYgKHNhICE9PSBzYikgcmV0dXJuIHNhIC0gc2I7XG4gICAgY29uc3QgdmEgPSBhPy5zZXZlcml0eSA/PyAwO1xuICAgIGNvbnN0IHZiID0gYj8uc2V2ZXJpdHkgPz8gMDtcbiAgICBpZiAodmEgIT09IHZiKSByZXR1cm4gdmIgLSB2YTtcbiAgICByZXR1cm4gY3JlYXRlZE1zKGIpIC0gY3JlYXRlZE1zKGEpO1xufVxuXG5mdW5jdGlvbiB0b1NvcnRlZEFycmF5KG1hcCkge1xuICAgIHJldHVybiBbLi4ubWFwLnZhbHVlcygpXS5zb3J0KGNvbXBhcmVJbnN0YW5jZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRmxlZXRBbGFybXMoKSB7XG4gICAgY29uc3QgW2luc3RhbmNlcywgc2V0SW5zdGFuY2VzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtyZWxvYWRUb2tlbiwgc2V0UmVsb2FkVG9rZW5dID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgbWFwUmVmID0gdXNlUmVmKG5ldyBNYXAoKSk7XG5cbiAgICBmdW5jdGlvbiBjb21taXQoKSB7XG4gICAgICAgIHNldEluc3RhbmNlcyh0b1NvcnRlZEFycmF5KG1hcFJlZi5jdXJyZW50KSk7XG4gICAgfVxuXG4gICAgLy8gUkVTVCBzbmFwc2hvdC4gUHVsbHMgZXZlcnl0aGluZyBleGNlcHQgQ0xFQVJFRCBzbyB0aGUgV1MgZGVsdGFzIG9ubHlcbiAgICAvLyBuZWVkIHRvIGhhbmRsZSBhZGRpdGlvbnMvcmVtb3ZhbHMuIFRoZSBzZXJ2ZXIncyBkZWZhdWx0IHNvcnQgYWxyZWFkeVxuICAgIC8vIHB1dHMgbm9uLWNvbmZpcm1lZC9hY3RpdmUgZmlyc3QsIHNvIGEgc2luZ2xlIHBhZ2UgaXMgZW5vdWdoIGZvciB0aGVcbiAgICAvLyB0eXBpY2FsIGZsZWV0IFx1MjAxNCBidW1wIGBjb3VudGAgaWYgdGhhdCBzdG9wcyBob2xkaW5nLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDphbGFybXMnLCAnc25hcHNob3Qtc3RhcnQnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldEFsYXJtSW5zdGFuY2VzKHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQ6IDUwMCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IEFDVElWRV9TVEFURVMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6YWxhcm1zJywgJ3NuYXBzaG90LWVuZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgcm93czogZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbnN0IG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgayA9IGluc3RhbmNlS2V5KGluc3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaykgbmV4dC5zZXQoaywgaW5zdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hcFJlZi5jdXJyZW50ID0gbmV4dDtcbiAgICAgICAgICAgICAgICBjb21taXQoKTtcbiAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOmFsYXJtcycsICdzbmFwc2hvdC1lcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW3JlbG9hZFRva2VuXSk7XG5cbiAgICAvLyBXUyBkZWx0YXMuIFRoZSBzaGFyZWQgZXZlbnQtc3RyZWFtIGlzIHJlZi1jb3VudGVkOyBjb25uZWN0L2Rpc2Nvbm5lY3RcbiAgICAvLyBoZXJlIGp1c3QgYnVtcHMgdGhhdCBjb3VudGVyLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50U3RyZWFtLmNvbm5lY3QoKTtcblxuICAgICAgICBjb25zdCBvZmZBY3RpdmF0ZSA9IGV2ZW50U3RyZWFtLm9uKCdhbGFybV9pbnN0YW5jZV9hY3RpdmF0ZScsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IGZyYW1lVG9JbnN0YW5jZShmcmFtZSk7XG4gICAgICAgICAgICBjb25zdCBrID0gaW5zdGFuY2VLZXkoaW5zdCk7XG4gICAgICAgICAgICBpZiAoIWspIHJldHVybjtcbiAgICAgICAgICAgIG1hcFJlZi5jdXJyZW50LnNldChrLCBpbnN0KTtcbiAgICAgICAgICAgIGNvbW1pdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb2ZmTm9ybWFsaXplID0gZXZlbnRTdHJlYW0ub24oJ2FsYXJtX2luc3RhbmNlX25vcm1hbGl6ZScsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IGZyYW1lVG9JbnN0YW5jZShmcmFtZSk7XG4gICAgICAgICAgICBjb25zdCBrID0gaW5zdGFuY2VLZXkoaW5zdCk7XG4gICAgICAgICAgICBpZiAoIWspIHJldHVybjtcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0cmFuc2l0aW9ucyB0aGUgaW5zdGFuY2UgdG8gQ0xFQVJFRC4gRHJvcCBpdCBmcm9tXG4gICAgICAgICAgICAvLyB0aGUgYWN0aXZlIGxpc3QgXHUyMDE0IHRoZSBBbGVydHNUYWIgb25seSBzaG93cyB3aGF0J3Mgb3V0c3RhbmRpbmcuXG4gICAgICAgICAgICBpZiAobWFwUmVmLmN1cnJlbnQuZGVsZXRlKGspKSBjb21taXQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9mZlVwZGF0ZSA9IGV2ZW50U3RyZWFtLm9uKCdhbGFybV9pbnN0YW5jZV91cGRhdGUnLCAoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3QgPSBmcmFtZVRvSW5zdGFuY2UoZnJhbWUpO1xuICAgICAgICAgICAgY29uc3QgayA9IGluc3RhbmNlS2V5KGluc3QpO1xuICAgICAgICAgICAgaWYgKCFrKSByZXR1cm47XG4gICAgICAgICAgICAvLyBNYW51YWwgdHJhbnNpdGlvbnMgKGFjaywgc2hlbHZlLCBsYXRjaCwgYW5ub3RhdGUsIHJlYWN0aXZhdGlvblxuICAgICAgICAgICAgLy8gY2hhbmdlKSBjb21lIHRocm91Z2ggaGVyZS4gQSBtYW51YWwgY2xlYXIgbGFuZHMgaGVyZSB0b28gXHUyMDE0IHRoZVxuICAgICAgICAgICAgLy8gQWxlcnRzVGFiIG9ubHkgdHJhY2tzIG91dHN0YW5kaW5nIGFsYXJtcywgc28gZHJvcCB0aG9zZS5cbiAgICAgICAgICAgIGlmIChpbnN0Py5zdGF0ZSA9PT0gQUxBUk1fU1RBVEUuQ0xFQVJFRCkge1xuICAgICAgICAgICAgICAgIGlmIChtYXBSZWYuY3VycmVudC5kZWxldGUoaykpIGNvbW1pdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYXBSZWYuY3VycmVudC5zZXQoaywgaW5zdCk7XG4gICAgICAgICAgICAgICAgY29tbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvZmZEZWxldGUgPSBldmVudFN0cmVhbS5vbignYWxhcm1faW5zdGFuY2VfZGVsZXRlJywgKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0ID0gZnJhbWVUb0luc3RhbmNlKGZyYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBpbnN0YW5jZUtleShpbnN0KTtcbiAgICAgICAgICAgIGlmICghaykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKG1hcFJlZi5jdXJyZW50LmRlbGV0ZShrKSkgY29tbWl0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV2ZW50U3RyZWFtLnN1YnNjcmliZSh7IGV2ZW50OiAnYWxhcm1faW5zdGFuY2VfYWN0aXZhdGUnIH0pO1xuICAgICAgICBldmVudFN0cmVhbS5zdWJzY3JpYmUoeyBldmVudDogJ2FsYXJtX2luc3RhbmNlX25vcm1hbGl6ZScgfSk7XG4gICAgICAgIGV2ZW50U3RyZWFtLnN1YnNjcmliZSh7IGV2ZW50OiAnYWxhcm1faW5zdGFuY2VfdXBkYXRlJyB9KTtcbiAgICAgICAgZXZlbnRTdHJlYW0uc3Vic2NyaWJlKHsgZXZlbnQ6ICdhbGFybV9pbnN0YW5jZV9kZWxldGUnIH0pO1xuICAgICAgICBkZWJ1Z0xvZygnd3M6YWxhcm1zJywgJ3N1YnNjcmliZWQnKTtcblxuICAgICAgICAvLyBJZiB0aGUgc29ja2V0IGRyb3BzIGFuZCByZW9wZW5zIHdlIG1heSBoYXZlIG1pc3NlZCBldmVudHMuIFB1bGwgYVxuICAgICAgICAvLyBmcmVzaCBzbmFwc2hvdCB0byByZWNvdmVyIGF1dGhvcml0YXRpdmUgc3RhdGUgXHUyMDE0IGJ1bXBpbmcgdGhlIHJlbG9hZFxuICAgICAgICAvLyB0b2tlbiBpcyBlbm91Z2g7IHRoZSBzbmFwc2hvdCBlZmZlY3QgaGFuZGxlcyB0aGUgcmVzdC5cbiAgICAgICAgY29uc3Qgb2ZmUmVjb25uZWN0ID0gZXZlbnRTdHJlYW0ub25SZWNvbm5lY3QoKCkgPT4ge1xuICAgICAgICAgICAgZGVidWdMb2coJ3dzOmFsYXJtcycsICdyZXN5bmMtb24tcmVjb25uZWN0Jyk7XG4gICAgICAgICAgICBzZXRSZWxvYWRUb2tlbigobikgPT4gbiArIDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgb2ZmQWN0aXZhdGUoKTtcbiAgICAgICAgICAgIG9mZk5vcm1hbGl6ZSgpO1xuICAgICAgICAgICAgb2ZmVXBkYXRlKCk7XG4gICAgICAgICAgICBvZmZEZWxldGUoKTtcbiAgICAgICAgICAgIG9mZlJlY29ubmVjdCgpO1xuICAgICAgICAgICAgZXZlbnRTdHJlYW0uZGlzY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlcyxcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIHJlZnJlc2g6ICgpID0+IHNldFJlbG9hZFRva2VuKChuKSA9PiBuICsgMSksXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdCB9IGZyb20gJy4uLy4uLy4uL2xpYi9wcm9kdWN0LmpzJztcbmltcG9ydCB7IGRlYnVnTG9nIH0gZnJvbSAnLi4vLi4vLi4vbGliL2RlYnVnLWxvZy5qcyc7XG5cbi8vIFJlc29sdmUgcHJvZHVjdCBkaXNwbGF5IG5hbWVzIGZvciBldmVyeSBwcm9kdWN0IHByZXNlbnQgaW4gdGhlIGZsZWV0LlxuLy8gT25lIFJFU1QgY2FsbCBwZXIgcHJvZHVjdCwgaW4gcGFyYWxsZWw7IGNhY2hlZCBieSBpZCBzbyByZS1yZW5kZXJzIGRvbid0XG4vLyByZS1mZXRjaC4gRmFpbHVyZXMgZmFsbCBiYWNrIHNpbGVudGx5IHRvIHRoZSBpZC5cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZsZWV0UHJvZHVjdHMocHJvZHVjdElkcykge1xuICAgIGNvbnN0IGlkc0tleSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvZHVjdElkcykpIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIFsuLi5wcm9kdWN0SWRzXS5maWx0ZXIoQm9vbGVhbikuc29ydCgpLmpvaW4oJywnKTtcbiAgICB9LCBbcHJvZHVjdElkc10pO1xuICAgIGNvbnN0IGlkcyA9IHVzZU1lbW8oKCkgPT4gKGlkc0tleSA/IGlkc0tleS5zcGxpdCgnLCcpIDogW10pLCBbaWRzS2V5XSk7XG5cbiAgICBjb25zdCBbcHJvZHVjdHMsIHNldFByb2R1Y3RzXSA9IHVzZVN0YXRlKHt9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzZXRQcm9kdWN0cyh7fSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdDAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6ZmxlZXQtcHJvZHVjdHMnLCAnc3RhcnQnLCB7IHByb2R1Y3RzOiBpZHMgfSk7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgaWRzLm1hcChhc3luYyAoaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRQcm9kdWN0KGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbaWQsIHsgaWQsIG5hbWU6IGRhdGE/Lm5hbWUgfHwgaWQgfV07XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOmZsZWV0LXByb2R1Y3RzJywgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Q6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlPy5tZXNzYWdlIHx8IFN0cmluZyhlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtpZCwgeyBpZCwgbmFtZTogaWQgfV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpmbGVldC1wcm9kdWN0cycsICdlbmQnLCB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICBwcm9kdWN0czogaWRzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRQcm9kdWN0cyhPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcykpO1xuICAgICAgICB9KSgpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9LCBbaWRzXSk7XG5cbiAgICByZXR1cm4gcHJvZHVjdHM7XG59XG4iLCAiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gICAgZmFsbGJhY2tMb2dzQ29uZmlnLFxuICAgIGdldFByb2R1Y3RMb2dzLFxuICAgIHJlc29sdmVTb3VyY2VQYXR0ZXJuLFxufSBmcm9tICcuLi8uLi8uLi9saWIvcHJvZHVjdC9sb2dzLmpzJztcbmltcG9ydCB7IGRlYnVnTG9nIH0gZnJvbSAnLi4vLi4vLi4vbGliL2RlYnVnLWxvZy5qcyc7XG5cbi8vIFJlc29sdmUgdGhlIGBsb2dzYCBwcm9wZXJ0eSBvZiBhIHByb2R1Y3Q6IGEgbGlzdCBvZiBge25hbWUsIGNvbW1hbmR9YFxuLy8gc291cmNlcyB0aGUgZGFzaGJvYXJkIGNhbiBzdHJlYW0uIFdoZW4gdGhlIHByb2R1Y3QgaGFzIG5vIHByb3BlcnR5XG4vLyBjb25maWd1cmVkIHdlIGZhbGwgYmFjayB0byB0aGUgc3ludGhldGljIGBzeXN0ZW1gIHNvdXJjZSAoam91cm5hbGN0bClcbi8vIHNvIHRoZSBwYW5lbCBrZWVwcyB3b3JraW5nIHVuY2hhbmdlZCBmb3IgcHJvZHVjdHMgdGhhdCBoYXZlIG5vdCBvcHRlZFxuLy8gaW4uIFRoZSBsaXN0IHJhcmVseSBjaGFuZ2VzLCBzbyB0aGlzIGhvb2sgbG9hZHMgaXQgb25jZSBwZXIgcHJvZHVjdElkXG4vLyBhbmQgaWdub3JlcyBzdWJzZXF1ZW50IGVkaXRzIHVudGlsIHRoZSBwcm9kdWN0IGNoYW5nZXMuXG5cbi8vIFByZS1yZXNvbHZlIGVhY2ggc291cmNlJ3MgcGF0dGVybiAobGl0ZXJhbCBgcGF0dGVybmAgb3IgcHJlc2V0IFx1MjE5MlxuLy8gcGF0dGVybikgc28gdGhlIHBhbmVsIG5ldmVyIGhhcyB0byBrbm93IGFib3V0IHRoZSBwcmVzZXQgY2F0YWxvZy5cbi8vIGByZXNvbHZlZFBhdHRlcm5gIGlzIGBudWxsYCB3aGVuIHRoZSBzb3VyY2UgY2FycmllcyBuZWl0aGVyLCBpblxuLy8gd2hpY2ggY2FzZSB0aGUgcGFuZWwgZmFsbHMgYmFjayB0byByYXcgcmVuZGVyaW5nLlxuZnVuY3Rpb24gZGVjb3JhdGUoc291cmNlcykge1xuICAgIHJldHVybiBzb3VyY2VzLm1hcCgocykgPT4gKHtcbiAgICAgICAgLi4ucyxcbiAgICAgICAgcmVzb2x2ZWRQYXR0ZXJuOiByZXNvbHZlU291cmNlUGF0dGVybihzKSxcbiAgICB9KSk7XG59XG5cbmNvbnN0IEZBTExCQUNLID0gKCgpID0+IHtcbiAgICBjb25zdCBjZmcgPSBmYWxsYmFja0xvZ3NDb25maWcoKTtcbiAgICByZXR1cm4geyBzb3VyY2VzOiBkZWNvcmF0ZShjZmcuc291cmNlcyksIGRlZmF1bHQ6IGNmZy5kZWZhdWx0LCBmYWxsYmFjazogdHJ1ZSB9O1xufSkoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVByb2R1Y3RMb2dTb3VyY2VzKHByb2R1Y3RJZCkge1xuICAgIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoKCkgPT5cbiAgICAgICAgcHJvZHVjdElkID8geyBzb3VyY2VzOiBbXSwgZGVmYXVsdDogbnVsbCwgZmFsbGJhY2s6IGZhbHNlLCBsb2FkaW5nOiB0cnVlIH0gOiBGQUxMQkFDSyxcbiAgICApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFwcm9kdWN0SWQpIHtcbiAgICAgICAgICAgIHNldFN0YXRlKEZBTExCQUNLKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHNldFN0YXRlKHsgc291cmNlczogW10sIGRlZmF1bHQ6IG51bGwsIGZhbGxiYWNrOiBmYWxzZSwgbG9hZGluZzogdHJ1ZSB9KTtcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHQwID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2ZnID0gYXdhaXQgZ2V0UHJvZHVjdExvZ3MocHJvZHVjdElkKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6cHJvZHVjdC1sb2dzJywgJ2VuZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogcHJvZHVjdElkLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VzOiBjZmcuc291cmNlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrOiAhIWNmZy5fX2ZhbGxiYWNrLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlczogZGVjb3JhdGUoY2ZnLnNvdXJjZXMpLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBjZmcuZGVmYXVsdCB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBmYWxsYmFjazogISFjZmcuX19mYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6cHJvZHVjdC1sb2dzJywgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0OiBwcm9kdWN0SWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVyciksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoeyAuLi5GQUxMQkFDSywgbG9hZGluZzogZmFsc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtwcm9kdWN0SWRdKTtcblxuICAgIHJldHVybiBzdGF0ZTtcbn1cbiIsICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vbGliL3Byb2R1Y3QuanMnO1xuaW1wb3J0IHsgZGVidWdDb3VudCwgZGVidWdMb2cgfSBmcm9tICcuLi8uLi8uLi9saWIvZGVidWctbG9nLmpzJztcbmltcG9ydCB7IGV2ZW50U3RyZWFtIH0gZnJvbSAnLi4vLi4vLi4vbGliL2Rhc2hib2FyZC9ldmVudC1zdHJlYW0uanMnO1xuaW1wb3J0IHsgYWdncmVnYXRlLCBnZXRQYXRoIH0gZnJvbSAnLi4vLi4vLi4vbGliL2Rhc2hib2FyZC9tZXRyaWMtYWdncmVnYXRlLmpzJztcblxuLy8gUmVhZHMgYGRhc2hib2FyZF9tZXRyaWNzYCBmcm9tIGVhY2ggcHJvZHVjdCBwcmVzZW50IGluIHRoZSBmbGVldCBhbmRcbi8vIHdhdGNoZXMgdGhlaXIgcmVzb3VyY2VzIGFjcm9zcyBldmVyeSBkZXZpY2Ugb2YgZWFjaCBwcm9kdWN0IHZpYSBhXG4vLyBwZXJzaXN0ZW50IHdlYnNvY2tldCBzdWJzY3JpcHRpb24gdG8gYGRldmljZV9yZXNvdXJjZV9zdHJlYW1gLiBUaGVcbi8vIHN0cmVhbSBoYXMgbm8gYmFja2ZpbGw6IHBhbmVscyByZW5kZXIgd2l0aCBwbGFjZWhvbGRlcnMgdW50aWwgdGhlXG4vLyBmaXJzdCBmcmFtZSBmb3IgZWFjaCBtZXRyaWMgYXJyaXZlcy5cbi8vXG4vLyBNZXRyaWNzIGZyb20gZGlmZmVyZW50IHByb2R1Y3RzIGxpdmUgaW4gdGhlIHNhbWUgZmxhdCBsaXN0LiBUaGVcbi8vIGZyb250ZW5kIGtleXMgcGVyLW1ldHJpYyBzdGF0ZSBieSBgPHByb2R1Y3Q+OjxuYW1lPmAgc28gdHdvIHByb2R1Y3RzXG4vLyB1c2luZyB0aGUgc2FtZSBtZXRyaWMgbmFtZSBkb24ndCBjb2xsaWRlLlxuXG5jb25zdCBISVNUT1JZX0xFTiA9IDMyO1xuXG5mdW5jdGlvbiBtZXRyaWNLZXkocHJvZHVjdElkLCBuYW1lKSB7XG4gICAgcmV0dXJuIGAke3Byb2R1Y3RJZH06JHtuYW1lfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQcm9kdWN0TWV0cmljcyhwcm9kdWN0SWRzKSB7XG4gICAgLy8gU3RhYmxlIGtleSBzbyB3ZSBjYW4gZGVwIG9uIHRoZSBhY3R1YWwgcHJvZHVjdCBzZXQgcmF0aGVyIHRoYW4gdGhlXG4gICAgLy8gaWRlbnRpdHkgb2YgdGhlIGFycmF5IHBhc3NlZCBpbiAoY2FsbGVycyB0ZW5kIHRvIHJlY29tcHV0ZSkuXG4gICAgY29uc3QgaWRzS2V5ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9kdWN0SWRzKSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gWy4uLnByb2R1Y3RJZHNdLmZpbHRlcihCb29sZWFuKS5zb3J0KCkuam9pbignLCcpO1xuICAgIH0sIFtwcm9kdWN0SWRzXSk7XG4gICAgY29uc3QgaWRzID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gKGlkc0tleSA/IGlkc0tleS5zcGxpdCgnLCcpIDogW10pLFxuICAgICAgICBbaWRzS2V5XSxcbiAgICApO1xuXG4gICAgY29uc3QgW21ldHJpY3MsIHNldE1ldHJpY3NdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFt2YWx1ZXMsIHNldFZhbHVlc10gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2hpc3RvcnksIHNldEhpc3RvcnldID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtsYXN0VXBkYXRlLCBzZXRMYXN0VXBkYXRlXSA9IHVzZVN0YXRlKHt9KTtcbiAgICAvLyBMYXRlc3Qgc2FtcGxlIHBlciAobWV0cmljS2V5LCBkZXZpY2VJZCkuIE1pcnJvcnMgdGhlIHNhbWUgcGVyLWRldmljZVxuICAgIC8vIG1hcCB0aGUgYWdncmVnYXRvciBhbHJlYWR5IGhvbGRzLCBidXQgZXhwb3NlZCB0byBSZWFjdCBzbyBwYW5lbHMgY2FuXG4gICAgLy8gdHVybiB0aGUgYnVja2V0IGN1cnNvciBpbnRvIGEgZGV2aWNlIGxpc3QgZmlsdGVyIChcIndoaWNoIGJveGVzXG4gICAgLy8gcmVwb3J0ZWQgdGhpcyBleGFjdCB2YWx1ZT9cIikuXG4gICAgY29uc3QgW3ZhbHVlc0J5RGV2aWNlLCBzZXRWYWx1ZXNCeURldmljZV0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAgIC8vIExvYWQgdGhlIG1ldHJpYyBsaXN0IHBlciBwcm9kdWN0LCBpbiBwYXJhbGxlbCwgYW5kIGNvbmNhdGVuYXRlLlxuICAgIC8vIEVhY2ggbWV0cmljIGNhcnJpZXMgdGhlIGBwcm9kdWN0YCBpdCBjYW1lIGZyb20gc28gdGhlIGxpdmUtc3RyZWFtXG4gICAgLy8gZWZmZWN0IGNhbiBzdWJzY3JpYmUgd2l0aCB0aGUgcmlnaHQgZmlsdGVyIGFuZCByZW5kZXIta2V5cyBzdGF5XG4gICAgLy8gc3RhYmxlIGFjcm9zcyBwcm9kdWN0cy5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2V0TWV0cmljcyhbXSk7XG4gICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDptZXRyaWNzLWxpc3QnLCAnc3RhcnQnLCB7IHByb2R1Y3RzOiBpZHMgfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgaWRzLm1hcChhc3luYyAocHJvZHVjdElkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IGdldFByb2R1Y3RQcm9wZXJ0eShwcm9kdWN0SWQsICdkYXNoYm9hcmRfbWV0cmljcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheSh2YWx1ZT8ubWV0cmljcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWUubWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0Lm1hcCgobSkgPT4gKHsgLi4ubSwgcHJvZHVjdDogcHJvZHVjdElkIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9ub3QgZm91bmQvaS50ZXN0KGU/Lm1lc3NhZ2UgfHwgJycpKSByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgZmxhdCA9IHJlc3VsdHMuZmxhdCgpO1xuICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6bWV0cmljcy1saXN0JywgJ2VuZCcsIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogRGF0ZS5ub3coKSAtIHQwLFxuICAgICAgICAgICAgICAgIHByb2R1Y3RzOiBpZHMsXG4gICAgICAgICAgICAgICAgbWV0cmljX2NvdW50OiBmbGF0Lmxlbmd0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0TWV0cmljcyhmbGF0KTtcbiAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDptZXRyaWNzLWxpc3QnLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgcHJvZHVjdHM6IGlkcyxcbiAgICAgICAgICAgICAgICBlcnJvcjogZT8ubWVzc2FnZSB8fCBTdHJpbmcoZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghY2FuY2VsbGVkKSBzZXRFcnJvcihlPy5tZXNzYWdlIHx8IFN0cmluZyhlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9LCBbaWRzXSk7XG5cbiAgICAvLyBMaXZlIHN0cmVhbSB2aWEgdGhlIHNoYXJlZCBldmVudCBzdHJlYW0gc2luZ2xldG9uLiBTdWJzY3JpYmVzIHRvXG4gICAgLy8gYGRldmljZV9yZXNvdXJjZV9zdHJlYW1gIG9uY2UgcGVyIChwcm9kdWN0LCByZXNvdXJjZSkgdHVwbGU7IHRoZVxuICAgIC8vIHNpbmdsZXRvbiBoYW5kbGVzIGNvbm5lY3Rpb24sIHJlcGxheSBvbiByZWNvbm5lY3QsIGFuZCBkaXNwYXRjaGluZ1xuICAgIC8vIGZyYW1lcyB3aG9zZSBgZXZlbnRgIG1hdGNoZXMuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG1ldHJpY3MubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgLy8ga2V5IChwcm9kdWN0Om5hbWUpIFx1MjE5MiB7IGludGVydmFsLCByZXNvdXJjZSwgZmllbGQsIGFnZ3JlZ2F0aW9uLCBwZXJEZXZpY2UgfVxuICAgICAgICBjb25zdCBzdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBtZXRyaWMgb2YgbWV0cmljcykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbWV0cmljS2V5KG1ldHJpYy5wcm9kdWN0LCBtZXRyaWMubmFtZSk7XG4gICAgICAgICAgICBzdGF0ZS5zZXQoa2V5LCB7XG4gICAgICAgICAgICAgICAgcHJvZHVjdDogbWV0cmljLnByb2R1Y3QsXG4gICAgICAgICAgICAgICAgaW50ZXJ2YWw6IE51bWJlcihtZXRyaWMuaW50ZXJ2YWwpID4gMCA/IE51bWJlcihtZXRyaWMuaW50ZXJ2YWwpIDogMCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogbWV0cmljLnJlc291cmNlLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBtZXRyaWMuZmllbGQsXG4gICAgICAgICAgICAgICAgYWdncmVnYXRpb246IG1ldHJpYy5hZ2dyZWdhdGlvbiB8fCAnc3VtJyxcbiAgICAgICAgICAgICAgICBwZXJEZXZpY2U6IHt9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gKHByb2R1Y3QsIHJlc291cmNlKSBcdTIxOTIgW2tleV0gc28gYSBzaW5nbGUgaW5jb21pbmcgZnJhbWUgdXBkYXRlc1xuICAgICAgICAvLyBldmVyeSBtZXRyaWMgZGVyaXZlZCBmcm9tIHRoZSBzYW1lIHJlc291cmNlIHdpdGhpbiB0aGF0IHByb2R1Y3QuXG4gICAgICAgIGNvbnN0IGJ5UHJvZHVjdFJlc291cmNlID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHNdIG9mIHN0YXRlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgdHVwbGVLZXkgPSBgJHtzLnByb2R1Y3R9Ojoke3MucmVzb3VyY2V9YDtcbiAgICAgICAgICAgIGlmICghYnlQcm9kdWN0UmVzb3VyY2UuaGFzKHR1cGxlS2V5KSkgYnlQcm9kdWN0UmVzb3VyY2Uuc2V0KHR1cGxlS2V5LCBbXSk7XG4gICAgICAgICAgICBieVByb2R1Y3RSZXNvdXJjZS5nZXQodHVwbGVLZXkpLnB1c2goa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50U3RyZWFtLmNvbm5lY3QoKTtcbiAgICAgICAgY29uc3Qgb2ZmRnJhbWUgPSBldmVudFN0cmVhbS5vbignZGV2aWNlX3Jlc291cmNlX3N0cmVhbScsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZyYW1lLnNpZ25hbCAmJiBmcmFtZS5zaWduYWwgIT09ICdkYXRhJykge1xuICAgICAgICAgICAgICAgIGRlYnVnQ291bnQoYHdzOm1ldHJpY3M6ZHJvcHBlZDoke2ZyYW1lLnNpZ25hbH1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGZyYW1lLnJlc291cmNlO1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gZnJhbWUuZGV2aWNlO1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IGZyYW1lLnByb2R1Y3Q7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZnJhbWUucGF5bG9hZDtcbiAgICAgICAgICAgIGlmICghcmVzb3VyY2UgfHwgIWRldmljZSB8fCBwYXlsb2FkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z0NvdW50KCd3czptZXRyaWNzOmRyb3BwZWQ6bWlzc2luZy1maWVsZHMnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXJ2ZXItc2lkZSBmaWx0ZXIgcm91dGVzIGZyYW1lcyBwZXIgc3Vic2NyaXB0aW9uLCBidXQgdGhlXG4gICAgICAgICAgICAvLyBzaGFyZWQgc2luZ2xldG9uIG11bHRpcGxleGVzIGV2ZXJ5IHByb2R1Y3QncyBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgIC8vIG92ZXIgdGhlIHNhbWUgc29ja2V0IFx1MjAxNCBtYXRjaCB0aGUgZnJhbWUgdG8gdGhlIHJpZ2h0IG1ldHJpY1xuICAgICAgICAgICAgLy8gYnVja2V0IHVzaW5nIGBwcm9kdWN0YCB3aGVuIHRoZSBmaWVsZCBpcyBwcmVzZW50LCBmYWxsaW5nXG4gICAgICAgICAgICAvLyBiYWNrIHRvIGFueSB0dXBsZSB3aXRoIHRoZSBzYW1lIHJlc291cmNlIHNvIG9sZGVyIGZyYW1lc1xuICAgICAgICAgICAgLy8gd2l0aG91dCB0aGUgZmllbGQgc3RpbGwgdXBkYXRlIHRoZSByaWdodCBtZXRyaWNzICh0aGVcbiAgICAgICAgICAgIC8vIHJlc291cmNlIG5hbWUgaXMgdW5pcXVlIHBlciBwcm9kdWN0IGluIHByYWN0aWNlKS5cbiAgICAgICAgICAgIGNvbnN0IHR1cGxlS2V5ID0gcHJvZHVjdCA/IGAke3Byb2R1Y3R9Ojoke3Jlc291cmNlfWAgOiBudWxsO1xuICAgICAgICAgICAgbGV0IGtleXMgPSB0dXBsZUtleSA/IGJ5UHJvZHVjdFJlc291cmNlLmdldCh0dXBsZUtleSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKCFrZXlzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdGssIGtzXSBvZiBieVByb2R1Y3RSZXNvdXJjZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRrLmVuZHNXaXRoKGA6OiR7cmVzb3VyY2V9YCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSBrcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFrZXlzKSB7XG4gICAgICAgICAgICAgICAgZGVidWdDb3VudCgnd3M6bWV0cmljczpkcm9wcGVkOnVua25vd24tcmVzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWJ1Z0NvdW50KGB3czptZXRyaWNzOm9rOiR7cmVzb3VyY2V9YCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IHN0YXRlLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBnZXRQYXRoKHBheWxvYWQsIHMuZmllbGQpO1xuICAgICAgICAgICAgICAgIHMucGVyRGV2aWNlW2RldmljZV0gPSB2O1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZyA9IGFnZ3JlZ2F0ZShPYmplY3QudmFsdWVzKHMucGVyRGV2aWNlKSwgcy5hZ2dyZWdhdGlvbik7XG4gICAgICAgICAgICAgICAgc2V0VmFsdWVzKChjdXIpID0+ICh7IC4uLmN1ciwgW2tleV06IGFnZyB9KSk7XG4gICAgICAgICAgICAgICAgc2V0SGlzdG9yeSgoY3VyKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5jdXIsXG4gICAgICAgICAgICAgICAgICAgIFtrZXldOiBbLi4uKGN1cltrZXldIHx8IFtdKSwgYWdnXS5zbGljZSgtSElTVE9SWV9MRU4pLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBzZXRMYXN0VXBkYXRlKChjdXIpID0+ICh7IC4uLmN1ciwgW2tleV06IERhdGUubm93KCkgfSkpO1xuICAgICAgICAgICAgICAgIHNldFZhbHVlc0J5RGV2aWNlKChjdXIpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmN1cixcbiAgICAgICAgICAgICAgICAgICAgW2tleV06IHsgLi4uKGN1cltrZXldIHx8IHt9KSwgW2RldmljZV06IHYgfSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgW3R1cGxlS2V5LCBrZXlzXSBvZiBieVByb2R1Y3RSZXNvdXJjZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtwcm9kdWN0LCByZXNvdXJjZV0gPSB0dXBsZUtleS5zcGxpdCgnOjonKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aXZlcyA9IGtleXNcbiAgICAgICAgICAgICAgICAubWFwKChrKSA9PiBzdGF0ZS5nZXQoaykuaW50ZXJ2YWwpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigodikgPT4gdiA+IDApO1xuICAgICAgICAgICAgY29uc3QgbXNnID0ge1xuICAgICAgICAgICAgICAgIGV2ZW50OiAnZGV2aWNlX3Jlc291cmNlX3N0cmVhbScsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogeyBwcm9kdWN0LCByZXNvdXJjZSB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChwb3NpdGl2ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG1zZy5wYXJhbXMgPSB7IGludGVydmFsOiBNYXRoLm1pbiguLi5wb3NpdGl2ZXMpICogMTAwMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRTdHJlYW0uc3Vic2NyaWJlKG1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgb2ZmRnJhbWUoKTtcbiAgICAgICAgICAgIGV2ZW50U3RyZWFtLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbbWV0cmljc10pO1xuXG4gICAgcmV0dXJuIHsgbWV0cmljcywgdmFsdWVzLCBoaXN0b3J5LCBsYXN0VXBkYXRlLCB2YWx1ZXNCeURldmljZSwgZXJyb3IgfTtcbn1cbiIsICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBDRE4gZW5kcG9pbnQgdGhhdCB0aGUgYWdlbnQgaXRzZWxmIHBvbGxzIGZvciBzZWxmLXVwZGF0ZXMuIFNpbmdsZSBzb3VyY2Ugb2Zcbi8vIHRydXRoIGZvciBcIndoYXQncyB0aGUgY3VycmVudCBzdGFibGUgcmVsZWFzZT9cIiBcdTIwMTQgc2FtZSBmaWxlIGFnZW50cyBzZWUsXG4vLyB3aGljaCBrZWVwcyB0aGUgZGFzaGJvYXJkIGhvbmVzdCAod2UncmUgbm90IGNvbXBhcmluZyBhZ2FpbnN0IGEgZGlmZmVyZW50XG4vLyByZWxlYXNlIHNvdXJjZSB0aGFuIHRoZSBvbmUgdGhlIGFnZW50cyB3aWxsIGFjdHVhbGx5IHB1bGwgZnJvbSkuXG5jb25zdCBMQVRFU1RfVVJMID0gJ2h0dHBzOi8vZ2V0LnRoaW5yZW1vdGUuaW8vbGF0ZXN0Lmpzb24nO1xuXG4vLyA1IG1pbiBtYXRjaGVzIHRoZSBhZ2VudCdzIHNlbGYtdXBkYXRlIHBvbGwgY2FkZW5jZSBcdTIwMTQgbm8gcG9pbnQgY2hlY2tpbmcgbW9yZVxuLy8gb2Z0ZW4gdGhhbiB0aGF0LCBhbmQgbGVzcyBvZnRlbiBtYWtlcyB0aGUgZGFzaGJvYXJkIGZlZWwgc3RhbGUgYWZ0ZXIgYVxuLy8gcmVsZWFzZSBpcyBjdXQuXG5jb25zdCBQT0xMX01TID0gNSAqIDYwICogMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUxhdGVzdEFnZW50VmVyc2lvbih7IHVybCA9IExBVEVTVF9VUkwsIHBvbGxNcyA9IFBPTExfTVMgfSA9IHt9KSB7XG4gICAgY29uc3QgW2xhdGVzdCwgc2V0TGF0ZXN0XSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlcy5zdGF0dXN9YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldExhdGVzdChkYXRhPy52ZXJzaW9uIHx8IG51bGwpO1xuICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQgfHwgZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvYWQoKTtcbiAgICAgICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbChsb2FkLCBwb2xsTXMpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9O1xuICAgIH0sIFt1cmwsIHBvbGxNc10pO1xuXG4gICAgcmV0dXJuIHsgbGF0ZXN0LCBlcnJvciB9O1xufVxuIiwgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcnVuRmxlZXRVcGdyYWRlLCBzdW1tYXJpemUgfSBmcm9tICcuLi8uLi8uLi9saWIvZmxlZXQtdXBncmFkZS5qcyc7XG5cbmNvbnN0IERPTkVfVE9BU1RfTVMgPSA4MDAwO1xuXG4vLyBFbmNhcHN1bGF0ZXMgdGhlIFwidXBncmFkZSB0aGUgZmxlZXRcIiBzdGF0ZSBtYWNoaW5lIHNvIEFwcC5qc3ggYW5kIHRoZVxuLy8gcGFuZWwgc3RheSBkdW1iIGFib3V0IGl0LiBQaGFzZXM6XG4vLyAgIGlkbGUgICAgICAgXHUyMTkyIG5vIHVwZ3JhZGUgcnVubmluZywgbm8gY29uZmlybWF0aW9uIG9wZW5cbi8vICAgY29uZmlybWluZyBcdTIxOTIgbW9kYWwgdmlzaWJsZSwgd2FpdGluZyBmb3IgdXNlciBpbnB1dFxuLy8gICBydW5uaW5nICAgIFx1MjE5MiBvcmNoZXN0cmF0b3IgZmlyZWQ7IGBwcm9ncmVzc2AgdGlja3MgYXMgZGV2aWNlcyBmaW5pc2hcbi8vICAgZG9uZSAgICAgICBcdTIxOTIgYnJpZWYgcG9zdC1ydW4gc3VtbWFyeSB0b2FzdDsgYXV0by1jbGVhcnMgYmFjayB0byBpZGxlXG5leHBvcnQgZnVuY3Rpb24gdXNlVXBncmFkZUNvbnRyb2xsZXIoeyBvbkV2ZW50IH0gPSB7fSkge1xuICAgIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoeyBwaGFzZTogJ2lkbGUnIH0pO1xuXG4gICAgLy8gQ2FjaGVkIGFjcm9zcyByZW5kZXJzIHNvIGBzdGFydGAgY2FuIGZpcmUgd2l0aG91dCBoYXZpbmcgdG8gcmUtcmVhZFxuICAgIC8vIFJlYWN0IHN0YXRlICh3aGljaCB3b3VsZCBiZSBzdGFsZSBhdCBjYWxsIHRpbWUgYW55d2F5KS5cbiAgICBjb25zdCBwZW5kaW5nUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGFib3J0UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGRvbmVUaW1lclJlZiA9IHVzZVJlZihudWxsKTtcblxuICAgIGNvbnN0IGNsZWFyRG9uZVRpbWVyID0gKCkgPT4ge1xuICAgICAgICBpZiAoZG9uZVRpbWVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChkb25lVGltZXJSZWYuY3VycmVudCk7XG4gICAgICAgICAgICBkb25lVGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb3BlbkNvbmZpcm0gPSB1c2VDYWxsYmFjaygodGFyZ2V0LCBvdXRkYXRlZCkgPT4ge1xuICAgICAgICBpZiAoIW91dGRhdGVkPy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgY2xlYXJEb25lVGltZXIoKTtcbiAgICAgICAgcGVuZGluZ1JlZi5jdXJyZW50ID0geyB0YXJnZXQsIG91dGRhdGVkIH07XG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIHBoYXNlOiAnY29uZmlybWluZycsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBvdXRkYXRlZENvdW50OiBvdXRkYXRlZC5sZW5ndGgsXG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGNhbmNlbENvbmZpcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHBlbmRpbmdSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIHNldFN0YXRlKHsgcGhhc2U6ICdpZGxlJyB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBjYW5jZWxSdW5uaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBhYm9ydFJlZi5jdXJyZW50Py5hYm9ydCgpO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nID0gcGVuZGluZ1JlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKCFwZW5kaW5nKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCB7IHRhcmdldCwgb3V0ZGF0ZWQgfSA9IHBlbmRpbmc7XG4gICAgICAgICAgICBwZW5kaW5nUmVmLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBkZXZpY2VJZHMgPSBvdXRkYXRlZC5tYXAoKGQpID0+IGQuZGV2aWNlKTtcbiAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBwaGFzZTogJ3J1bm5pbmcnLFxuICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICBwcm9ncmVzczogeyBkb25lOiAwLCB0b3RhbDogZGV2aWNlSWRzLmxlbmd0aCB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgICBhYm9ydFJlZi5jdXJyZW50ID0gY29udHJvbGxlcjtcblxuICAgICAgICAgICAgb25FdmVudD8uKHtcbiAgICAgICAgICAgICAgICBraW5kOiAnaW5mbycsXG4gICAgICAgICAgICAgICAgZGV2OiAnZmxlZXQnLFxuICAgICAgICAgICAgICAgIG1zZzogYHVwZ3JhZGUgc3RhcnQgXHUwMEI3ICR7ZGV2aWNlSWRzLmxlbmd0aH0gZGV2aWNlJHtkZXZpY2VJZHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9IFx1MjE5MiAke3RhcmdldH1gLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bkZsZWV0VXBncmFkZSh7XG4gICAgICAgICAgICAgICAgZGV2aWNlSWRzLFxuICAgICAgICAgICAgICAgIGNoYW5uZWw6ICdsYXRlc3QnLFxuICAgICAgICAgICAgICAgIGNhbmFyeTogb3B0aW9ucy5jYW5hcnksXG4gICAgICAgICAgICAgICAgYWJvcnRPbkZhaWx1cmU6IG9wdGlvbnMuYWJvcnRPbkZhaWx1cmUsXG4gICAgICAgICAgICAgICAgYmF0Y2hTaXplOiBvcHRpb25zLmJhdGNoU2l6ZSxcbiAgICAgICAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6ICh7IGRvbmUsIHRvdGFsIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoKHByZXYpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2LnBoYXNlID09PSAncnVubmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHsgLi4ucHJldiwgcHJvZ3Jlc3M6IHsgZG9uZSwgdG90YWwgfSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwcmV2LFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25EZXZpY2VSZXN1bHQ6IChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXZlbnQ/LihcbiAgICAgICAgICAgICAgICAgICAgICAgIHIub2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHsga2luZDogJ3VwZCcsIGRldjogci5kZXZpY2VJZCwgbXNnOiAndXBkYXRlIGFwcGxpZWQnIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsga2luZDogJ2VycicsIGRldjogci5kZXZpY2VJZCwgbXNnOiBgdXBkYXRlIGZhaWxlZDogJHtyLmVycm9yfWAgfSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSBzdW1tYXJpemUocmVzdWx0LnJlc3VsdHMpO1xuICAgICAgICAgICAgb25FdmVudD8uKHtcbiAgICAgICAgICAgICAgICBraW5kOiByZXN1bHQuYWJvcnRlZCA/ICdlcnInIDogJ2luZm8nLFxuICAgICAgICAgICAgICAgIGRldjogJ2ZsZWV0JyxcbiAgICAgICAgICAgICAgICBtc2c6IHJlc3VsdC5hYm9ydGVkXG4gICAgICAgICAgICAgICAgICAgID8gYHVwZ3JhZGUgYWJvcnRlZCAoJHtyZXN1bHQucmVhc29ufSkgXHUwMEI3ICR7c3VtbWFyeS5va30gb2sgXHUwMEI3ICR7c3VtbWFyeS5mYWlsZWR9IGZhaWxlZGBcbiAgICAgICAgICAgICAgICAgICAgOiBgdXBncmFkZSBkb25lIFx1MDBCNyAke3N1bW1hcnkub2t9IG9rIFx1MDBCNyAke3N1bW1hcnkuZmFpbGVkfSBmYWlsZWRgLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBwaGFzZTogJ2RvbmUnLFxuICAgICAgICAgICAgICAgIHN1bW1hcnksXG4gICAgICAgICAgICAgICAgYWJvcnRlZDogcmVzdWx0LmFib3J0ZWQsXG4gICAgICAgICAgICAgICAgcmVhc29uOiByZXN1bHQucmVhc29uLFxuICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjbGVhckRvbmVUaW1lcigpO1xuICAgICAgICAgICAgZG9uZVRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7IHBoYXNlOiAnaWRsZScgfSk7XG4gICAgICAgICAgICAgICAgZG9uZVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgfSwgRE9ORV9UT0FTVF9NUyk7XG5cbiAgICAgICAgICAgIGFib3J0UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBbb25FdmVudF0sXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlLFxuICAgICAgICBvcGVuQ29uZmlybSxcbiAgICAgICAgY2FuY2VsQ29uZmlybSxcbiAgICAgICAgY2FuY2VsUnVubmluZyxcbiAgICAgICAgc3RhcnQsXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5pbXBvcnQgeyB1c2VNb2RhbCB9IGZyb20gJy4uL2xpYi9mb2N1cy5qcyc7XG5cbmNvbnN0IE1JTl9CQVRDSCA9IDE7XG5jb25zdCBNQVhfQkFUQ0ggPSAyMDtcblxuY29uc3QgSElOVCA9IFtcbiAgICB7IGs6ICdjJywgbGFiZWw6ICdjYW5hcnknIH0sXG4gICAgeyBrOiAnZicsIGxhYmVsOiAnYWJvcnQgb24gZmFpbCcgfSxcbiAgICB7IGs6ICcrLy0nLCBsYWJlbDogJ2JhdGNoJyB9LFxuICAgIHsgazogJ2VudGVyJywgbGFiZWw6ICdzdGFydCcgfSxcbiAgICB7IGs6ICdlc2MnLCBsYWJlbDogJ2NhbmNlbCcgfSxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBVcGdyYWRlTW9kYWwoeyBvdXRkYXRlZENvdW50LCB0YXJnZXQsIG9uQ29uZmlybSwgb25DYW5jZWwgfSkge1xuICAgIGNvbnN0IFtjYW5hcnksIHNldENhbmFyeV0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbYWJvcnRPbkZhaWx1cmUsIHNldEFib3J0T25GYWlsdXJlXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFtiYXRjaFNpemUsIHNldEJhdGNoU2l6ZV0gPSB1c2VTdGF0ZSg1KTtcblxuICAgIHVzZU1vZGFsKFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS5lc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBvbkNhbmNlbD8uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm0/Lih7IGNhbmFyeSwgYWJvcnRPbkZhaWx1cmUsIGJhdGNoU2l6ZSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICdjJykgc2V0Q2FuYXJ5KCh2KSA9PiAhdik7XG4gICAgICAgICAgICBlbHNlIGlmIChpbnB1dCA9PT0gJ2YnKSBzZXRBYm9ydE9uRmFpbHVyZSgodikgPT4gIXYpO1xuICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXQgPT09ICcrJyB8fCBpbnB1dCA9PT0gJz0nKVxuICAgICAgICAgICAgICAgIHNldEJhdGNoU2l6ZSgobikgPT4gTWF0aC5taW4oTUFYX0JBVENILCBuICsgMSkpO1xuICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXQgPT09ICctJyB8fCBpbnB1dCA9PT0gJ18nKVxuICAgICAgICAgICAgICAgIHNldEJhdGNoU2l6ZSgobikgPT4gTWF0aC5tYXgoTUlOX0JBVENILCBuIC0gMSkpO1xuICAgICAgICB9LFxuICAgICAgICB7IGhpbnQ6IEhJTlQgfSxcbiAgICApO1xuXG4gICAgY29uc3QgY2hlY2sgPSAob24pID0+IChvbiA/IDxUZXh0IGNvbG9yPXt0aGVtZS5saW1lfT5beF08L1RleHQ+IDogPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5bIF08L1RleHQ+KTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3hcbiAgICAgICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICAgICAgYm9yZGVyQ29sb3I9e3RoZW1lLmJvcmRlckZvY3VzfVxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yPXt0aGVtZS5vdmVybGF5Qmd9XG4gICAgICAgICAgICBwYWRkaW5nWD17Mn1cbiAgICAgICAgICAgIHBhZGRpbmdZPXsxfVxuICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgICAgICB3aWR0aD17NjB9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luQm90dG9tPXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICBVUEdSQURFIHtvdXRkYXRlZENvdW50fSBERVZJQ0V7b3V0ZGF0ZWRDb3VudCA9PT0gMSA/ICcnIDogJ1MnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiBcdTAwQjcgdGFyZ2V0IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubGltZX0+e3RhcmdldCB8fCAnbGF0ZXN0J308L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICB7Y2hlY2soY2FuYXJ5KX1cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PiBjYW5hcnkgZmlyc3QgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT4oYyk8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAge2NoZWNrKGFib3J0T25GYWlsdXJlKX1cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PiBhYm9ydCBvbiBmYWlsdXJlIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+KGYpPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ICAgIGJhdGNoIHNpemU6IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPntiYXRjaFNpemV9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT4gKCsvLSk8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ZW50ZXIgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5saW1lfT5zdGFydDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiAgIFx1MDBCNyAgIGVzYyA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFtYmVyfT5jYW5jZWw8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxPQUFPQSxhQUFXO0FBQ2xCLFNBQVMsY0FBYzs7O0FDRHZCLE9BQU9DLFdBQVMsZUFBQUMsY0FBYSxhQUFBQyxhQUFXLFdBQUFDLFdBQVMsWUFBQUMsa0JBQWdCO0FBQ2pFLFNBQVMsT0FBQUMsT0FBSyxRQUFBQyxRQUFNLFFBQVEsYUFBQUMsa0JBQWlCOzs7QUNDdEMsSUFBTSxRQUFRO0FBQUEsRUFDakIsSUFBSTtBQUFBLEVBQ0osT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNVCxRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxjQUFjO0FBQUEsRUFDZCxhQUFhO0FBQUEsRUFFYixRQUFRO0FBQUE7QUFBQSxFQUNSLFNBQVM7QUFBQSxFQUNULE1BQU07QUFBQSxFQUNOLE9BQU87QUFBQSxFQUNQLEtBQUs7QUFBQSxFQUNMLE9BQU87QUFBQTtBQUFBLEVBR1AsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsSUFBSTtBQUFBLEVBQ0osTUFBTTtBQUFBLEVBQ04sS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTCxXQUFXO0FBQ2Y7OztBQ25DQSxPQUFPLFdBQVc7QUFDbEIsU0FBUyxLQUFLLFlBQVk7QUFjZCxTQVFBLEtBUkE7QUFYWixJQUFNLE9BQU87QUFBQSxFQUNULEVBQUUsSUFBSSxZQUFZLE9BQU8sWUFBWSxLQUFLLElBQUk7QUFBQSxFQUM5QyxFQUFFLElBQUksV0FBVyxPQUFPLFdBQVcsS0FBSyxJQUFJO0FBQUEsRUFDNUMsRUFBRSxJQUFJLFVBQVUsT0FBTyxVQUFVLEtBQUssSUFBSTtBQUFBLEVBQzFDLEVBQUUsSUFBSSxVQUFVLE9BQU8sVUFBVSxLQUFLLElBQUk7QUFBQSxFQUMxQyxFQUFFLElBQUksYUFBYSxPQUFPLGFBQWEsS0FBSyxJQUFJO0FBQ3BEO0FBRUEsU0FBUyxJQUFJLEVBQUUsT0FBTyxTQUFTLE9BQU8sR0FBRztBQUNyQyxNQUFJLFFBQVE7QUFDUixXQUNJLHFCQUFDLFFBQUssaUJBQWlCLE1BQU0sUUFBUSxPQUFNLFdBQVUsTUFBSSxNQUNwRDtBQUFBO0FBQUEsTUFDQTtBQUFBLE1BQVE7QUFBQSxNQUFFO0FBQUEsTUFBTztBQUFBLE9BQ3RCO0FBQUEsRUFFUjtBQUNBLFNBQ0kscUJBQUMsUUFDRztBQUFBLHdCQUFDLFFBQUssT0FBTyxNQUFNLFNBQVUsbUJBQVE7QUFBQSxJQUNyQyxxQkFBQyxRQUFLLE9BQU8sTUFBTSxPQUFPO0FBQUE7QUFBQSxNQUFFO0FBQUEsT0FBTTtBQUFBLEtBQ3RDO0FBRVI7QUFFTyxTQUFTLE9BQU8sRUFBRSxLQUFLLE9BQU8sUUFBUSxRQUFRLFNBQVMsaUJBQWlCLEdBQUc7QUFDOUUsUUFBTSxFQUFFLFFBQVEsR0FBRyxTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU0sRUFBRSxJQUFJLFVBQVUsQ0FBQztBQUNoRSxTQUNJO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxhQUFZO0FBQUEsTUFDWixhQUFhLE1BQU07QUFBQSxNQUNuQixVQUFVO0FBQUEsTUFDVixnQkFBZTtBQUFBLE1BRWY7QUFBQSw2QkFBQyxPQUFJLEtBQUssR0FDTjtBQUFBLDhCQUFDLFFBQUssT0FBTyxNQUFNLFFBQVEsTUFBSSxNQUFDLG1CQUVoQztBQUFBLFVBQ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUNWLHFCQUFDLE1BQU0sVUFBTixFQUNJO0FBQUEsa0JBQU0sS0FBSyxvQkFBQyxRQUFLLE9BQU8sTUFBTSxRQUFRLG9CQUFDO0FBQUEsWUFDeEMsb0JBQUMsT0FBSSxPQUFPLEVBQUUsT0FBTyxTQUFTLEVBQUUsS0FBSyxRQUFRLFFBQVEsRUFBRSxJQUFJO0FBQUEsZUFGMUMsRUFBRSxFQUd2QixDQUNIO0FBQUEsV0FDTDtBQUFBLFFBQ0EscUJBQUMsT0FBSSxLQUFLLEdBQ0w7QUFBQSxxQkFDRyxxQkFBQyxRQUNHO0FBQUEsZ0NBQUMsUUFBSyxPQUFPLE1BQU0sU0FBUyxzQkFBUTtBQUFBLFlBQ3BDLG9CQUFDLFFBQUssT0FBTyxNQUFNLFFBQVEsTUFBSSxNQUMxQixtQkFDTDtBQUFBLFlBQ0Msb0JBQW9CLFFBQVEsY0FDekIscUJBQUMsUUFBSyxPQUFPLE1BQU0sU0FDZDtBQUFBO0FBQUEsY0FBSTtBQUFBLGNBQ0gsb0JBQUMsUUFBSyxPQUFPLE1BQU0sU0FBUyxlQUFDO0FBQUEsY0FBTztBQUFBLGVBQzFDO0FBQUEsYUFFUjtBQUFBLFVBRUgsVUFBVSxvQkFBQyxRQUFLLE9BQU8sTUFBTSxPQUFRLGtCQUFPO0FBQUEsVUFDN0MscUJBQUMsUUFDRztBQUFBLGdDQUFDLFFBQUssT0FBTyxNQUFNLE1BQU0sTUFBSSxNQUN4QixrQkFDTDtBQUFBLFlBQ0EscUJBQUMsUUFBSyxPQUFPLE1BQU0sT0FBTztBQUFBO0FBQUEsY0FBSTtBQUFBLGNBQU07QUFBQSxlQUFPO0FBQUEsYUFDL0M7QUFBQSxVQUNDLE9BQU8sS0FDSixxQkFBQyxRQUNHO0FBQUEsZ0NBQUMsUUFBSyxPQUFPLE1BQU0sT0FBTyxNQUFJLE1BQ3pCLGdCQUNMO0FBQUEsWUFDQSxvQkFBQyxRQUFLLE9BQU8sTUFBTSxPQUFPLG1CQUFLO0FBQUEsYUFDbkM7QUFBQSxVQUVILE1BQU0sS0FDSCxxQkFBQyxRQUNHO0FBQUEsZ0NBQUMsUUFBSyxPQUFPLE1BQU0sS0FBSyxNQUFJLE1BQ3ZCLGVBQ0w7QUFBQSxZQUNBLG9CQUFDLFFBQUssT0FBTyxNQUFNLE9BQU8sbUJBQUs7QUFBQSxhQUNuQztBQUFBLFdBRVI7QUFBQTtBQUFBO0FBQUEsRUFDSjtBQUVSOzs7QUMxRkEsT0FBT0MsWUFBVztBQUNsQixTQUFTLE9BQUFDLE1BQUssUUFBQUMsYUFBWTtBQU1kLGdCQUFBQyxNQUNBLFFBQUFDLGFBREE7QUFIWixTQUFTLElBQUksRUFBRSxHQUFHLE1BQU0sR0FBRztBQUN2QixTQUNJLGdCQUFBQSxNQUFDQyxPQUFBLEVBQ0c7QUFBQSxvQkFBQUYsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFVLGFBQUU7QUFBQSxJQUMvQixnQkFBQUQsTUFBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxPQUFPO0FBQUE7QUFBQSxNQUFFO0FBQUEsT0FBTTtBQUFBLEtBQ3RDO0FBRVI7QUFFTyxTQUFTLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRztBQUNyQyxTQUNJLGdCQUFBRCxNQUFDRSxNQUFBLEVBQUksYUFBWSxVQUFTLGFBQWEsTUFBTSxRQUFRLFVBQVUsR0FBRyxnQkFBZSxpQkFDN0U7QUFBQSxvQkFBQUgsS0FBQ0csTUFBQSxFQUFJLEtBQUssR0FDTCxnQkFBTSxJQUFJLENBQUMsR0FBRyxNQUNYLGdCQUFBSCxLQUFDLE9BQVksR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLFNBQXBCLENBQTJCLENBQ3hDLEdBQ0w7QUFBQSxJQUNDLFNBQVMsZ0JBQUFBLEtBQUNFLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBVSxpQkFBTTtBQUFBLEtBQ2pEO0FBRVI7OztBQ3hCQSxPQUFPRSxVQUFTLFdBQVcsZUFBZTtBQUMxQyxTQUFTLE9BQUFDLE1BQUssUUFBQUMsT0FBTSxVQUFVLGlCQUFpQjs7O0FDRC9DLE9BQU9DLFlBQVc7QUFDbEIsU0FBUyxPQUFBQyxNQUFLLFFBQUFDLGFBQVk7QUF5Q0YsZ0JBQUFDLE1BSUksUUFBQUMsYUFKSjtBQXRDakIsU0FBUyxNQUFNO0FBQUEsRUFDbEI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsVUFBVTtBQUFBLEVBQ1Y7QUFBQSxFQUNBLFdBQVc7QUFBQSxFQUNYO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFdBQVc7QUFBQSxFQUNYLFdBQVc7QUFBQSxFQUNYO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSUEsV0FBVztBQUNmLEdBQUc7QUFDQyxRQUFNLGNBQWMsVUFBVSxNQUFNLGNBQWMsTUFBTTtBQUN4RCxRQUFNLGFBQWEsVUFBVSxNQUFNLFNBQVMsTUFBTTtBQUNsRCxTQUNJLGdCQUFBQTtBQUFBLElBQUNDO0FBQUEsSUFBQTtBQUFBLE1BQ0csZUFBYztBQUFBLE1BQ2QsYUFBWTtBQUFBLE1BQ1o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUM7QUFBQSxpQkFDRyxnQkFBQUQsTUFBQ0MsTUFBQSxFQUFJLGNBQWMsR0FBRyxnQkFBZSxpQkFDakM7QUFBQSwwQkFBQUQsTUFBQ0MsTUFBQSxFQUNHO0FBQUEsNEJBQUFGLEtBQUNHLE9BQUEsRUFBSyxPQUFPLFlBQVksTUFBSSxNQUN4QixpQkFDTDtBQUFBLFlBQ0MsT0FDRyxnQkFBQUYsTUFBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxRQUNmO0FBQUEsOEJBQUFILEtBQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxvQkFBRztBQUFBLGNBQzlCO0FBQUEsZUFDTDtBQUFBLGFBRVI7QUFBQSxVQUNDLFNBQVMsZ0JBQUFILEtBQUNFLE1BQUEsRUFBSyxpQkFBTTtBQUFBLFdBQzFCO0FBQUEsUUFFSixnQkFBQUYsS0FBQ0UsTUFBQSxFQUFJLGVBQWMsVUFBUyxVQUFVLEdBQUcsVUFDcEMsVUFDTDtBQUFBO0FBQUE7QUFBQSxFQUNKO0FBRVI7OztBQzVEQSxPQUFPRSxZQUFXO0FBQ2xCLFNBQVMsUUFBQUMsYUFBWTtBQU9XLGdCQUFBQyxNQWV4QixRQUFBQyxhQWZ3QjtBQUpoQyxJQUFNLGVBQWU7QUFFZCxTQUFTLFVBQVUsRUFBRSxRQUFRLFFBQVEsSUFBSSxRQUFRLE1BQU0sUUFBUSxJQUFJLEdBQUc7QUFDekUsUUFBTSxRQUFRLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEtBQUssUUFBUSxPQUFPLFNBQVMsQ0FBQyxDQUFDO0FBQ3pFLE1BQUksS0FBSyxTQUFTLEVBQUcsUUFBTyxnQkFBQUQsS0FBQ0UsT0FBQSxFQUFNLGNBQUksT0FBTyxLQUFLLEdBQUU7QUFDckQsUUFBTSxRQUFRLEtBQUssTUFBTSxDQUFDLEtBQUs7QUFDL0IsUUFBTSxPQUFPLE9BQU87QUFDcEIsUUFBTSxNQUFNLE1BQ1AsSUFBSSxDQUFDLE1BQU07QUFDUixVQUFNLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLFVBQU0sSUFBSSxLQUFLO0FBQUEsTUFDWCxhQUFhLFNBQVM7QUFBQSxNQUN0QixLQUFLLE1BQU8sSUFBSSxRQUFTLGFBQWEsU0FBUyxFQUFFO0FBQUEsSUFDckQ7QUFDQSxXQUFPLGFBQWEsQ0FBQztBQUFBLEVBQ3pCLENBQUMsRUFDQSxLQUFLLEVBQUU7QUFDWixRQUFNLE1BQU0sUUFBUSxNQUFNO0FBQzFCLFNBQ0ksZ0JBQUFELE1BQUNDLE9BQUEsRUFDSTtBQUFBLFVBQU0sS0FBSyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQzFCLGdCQUFBRixLQUFDRSxPQUFBLEVBQUssT0FBZSxlQUFJO0FBQUEsS0FDN0I7QUFFUjtBQUVPLFNBQVMsSUFBSSxFQUFFLE9BQU8sUUFBUSxJQUFJLE9BQU8sT0FBTyxJQUFJLEdBQUc7QUFDMUQsUUFBTSxNQUFNLFNBQVMsT0FBTyxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxNQUFNLEtBQUssQ0FBQztBQUNqRSxRQUFNLFNBQVMsS0FBSyxNQUFPLE1BQU0sT0FBUSxLQUFLO0FBQzlDLFFBQU0sUUFBUSxRQUFRO0FBQ3RCLFFBQU0sWUFBWSxTQUFTLFlBQVksS0FBSztBQUM1QyxTQUNJLGdCQUFBRCxNQUFDQyxPQUFBLEVBQ0c7QUFBQSxvQkFBQUYsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLGVBQUM7QUFBQSxJQUM3QixnQkFBQUYsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sV0FBWSxtQkFBSSxPQUFPLE1BQU0sR0FBRTtBQUFBLElBQzVDLGdCQUFBRixLQUFDRSxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVUsbUJBQUksT0FBTyxLQUFLLEdBQUU7QUFBQSxJQUMvQyxnQkFBQUYsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLGVBQUM7QUFBQSxLQUNqQztBQUVSO0FBRU8sU0FBUyxZQUFZLEdBQUc7QUFDM0IsTUFBSSxLQUFLLEtBQU0sUUFBTyxNQUFNO0FBQzVCLE1BQUksS0FBSyxHQUFJLFFBQU8sTUFBTTtBQUMxQixNQUFJLEtBQUssR0FBSSxRQUFPLE1BQU07QUFDMUIsU0FBTyxNQUFNO0FBQ2pCOzs7QUNsREEsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxnQkFBZ0I7QUF1RnpCLFNBQVMsdUJBQXVCLDRCQUE0QjtBQTlFckQsU0FBUyxhQUFhLFFBQVEsZUFBZTtBQUNoRCxRQUFNLE1BQU0saUJBQWlCLGVBQWU7QUFDNUMsTUFBSSxPQUFPLGVBQWUsS0FBTSxRQUFPO0FBQ3ZDLE1BQUksT0FBTyxlQUFlLElBQUssUUFBTztBQUN0QyxNQUFJLENBQUMsUUFBUSxZQUFZLE9BQVEsUUFBTztBQUN4QyxTQUFPO0FBQ1g7QUFVTyxTQUFTLG9CQUFvQixXQUFXLFNBQVM7QUFDcEQsUUFBTSxNQUFNLG9CQUFJLElBQUk7QUFDcEIsTUFBSSxDQUFDLFVBQVcsUUFBTztBQUN2QixRQUFNLFFBQVEsb0JBQUksSUFBSTtBQUN0QixRQUFNLFdBQVcsb0JBQUksSUFBSTtBQUN6QixNQUFJLFNBQVM7QUFDVCxlQUFXLEtBQUssU0FBUztBQUNyQixVQUFJLENBQUMsR0FBRyxPQUFRO0FBQ2hCLFlBQU0sSUFBSSxFQUFFLE1BQU07QUFDbEIsVUFBSSxFQUFFLEtBQU0sVUFBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU07QUFBQSxJQUM3QztBQUFBLEVBQ0o7QUFDQSxRQUFNLE9BQU8sQ0FBQyxLQUFLLFFBQVE7QUFDdkIsUUFBSSxDQUFDLElBQUs7QUFDVixVQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUcsS0FBSyxlQUFlO0FBQzNDLFFBQUksTUFBTSxJQUFLLEtBQUksSUFBSSxLQUFLLEdBQUc7QUFBQSxFQUNuQztBQUNBLFFBQU0sWUFBWSxDQUFDO0FBQ25CLGFBQVcsS0FBSyxXQUFXO0FBQ3ZCLFFBQUksR0FBRyxRQUFRLFdBQVcsU0FBVTtBQUNwQyxVQUFNLE1BQU0sRUFBRSxZQUFZLGVBQWU7QUFDekMsVUFBTSxLQUFLLEVBQUUsT0FBTztBQUNwQixVQUFNLE9BQU8sRUFBRSxPQUFPO0FBRXRCLFFBQUksTUFBTSxNQUFNLElBQUksRUFBRSxHQUFHO0FBQ3JCLFdBQUssSUFBSSxHQUFHO0FBQUEsSUFDaEIsV0FBVyxRQUFRLFNBQVMsSUFBSSxJQUFJLEdBQUc7QUFDbkMsV0FBSyxTQUFTLElBQUksSUFBSSxHQUFHLEdBQUc7QUFBQSxJQUNoQyxPQUFPO0FBS0gsVUFBSSxHQUFJLE1BQUssSUFBSSxHQUFHO0FBQ3BCLGdCQUFVLEtBQUssRUFBRSxJQUFJLE1BQU0sVUFBVSxFQUFFLFVBQVUsVUFBVSxJQUFJLENBQUM7QUFBQSxJQUNwRTtBQUFBLEVBQ0o7QUFDQSxNQUFJLFVBQVUsU0FBUyxLQUFLLFNBQVM7QUFDakMsYUFBUyxnQkFBZ0IscUJBQXFCO0FBQUEsTUFDMUMsaUJBQWlCLFVBQVU7QUFBQSxNQUMzQixRQUFRLFVBQVUsTUFBTSxHQUFHLENBQUM7QUFBQSxJQUNoQyxDQUFDO0FBQUEsRUFDTDtBQUNBLFNBQU87QUFDWDtBQUVPLFNBQVMsWUFBWSxTQUFTLHVCQUF1QjtBQUN4RCxRQUFNLE1BQU0sRUFBRSxPQUFPLFFBQVEsUUFBUSxRQUFRLEdBQUcsU0FBUyxHQUFHLE1BQU0sR0FBRyxLQUFLLEVBQUU7QUFDNUUsYUFBVyxLQUFLLFNBQVM7QUFDckIsVUFBTSxJQUFJLGFBQWEsR0FBRyx1QkFBdUIsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUM5RCxRQUFJLE1BQU0sTUFBTyxLQUFJO0FBQUEsUUFDaEIsS0FBSTtBQUNULFFBQUksTUFBTSxPQUFRLEtBQUk7QUFBQSxhQUNiLE1BQU0sTUFBTyxLQUFJO0FBQUEsRUFDOUI7QUFDQSxTQUFPO0FBQ1g7QUFhTyxTQUFTLG1CQUFtQixTQUFTLFNBQVM7QUFDakQsUUFBTSxJQUFJLG9CQUFJLElBQUk7QUFDbEIsYUFBVyxLQUFLLFNBQVM7QUFDckIsVUFBTSxJQUFJLFVBQVUsRUFBRSxNQUFNO0FBQzVCLFVBQU0sSUFBSSxzQkFBc0IsR0FBRyxPQUFPLE9BQU87QUFDakQsUUFBSSxDQUFDLEVBQUc7QUFDUixNQUFFLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLEVBQ2hDO0FBQ0EsU0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLHFCQUFxQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNFO0FBS08sU0FBUyxnQkFBZ0IsU0FBUyxTQUFTLFFBQVE7QUFDdEQsTUFBSSxDQUFDLE9BQVEsUUFBTyxDQUFDO0FBQ3JCLFFBQU0sTUFBTSxDQUFDO0FBQ2IsYUFBVyxLQUFLLFNBQVM7QUFDckIsVUFBTSxJQUFJLFVBQVUsRUFBRSxNQUFNO0FBQzVCLFVBQU0sSUFBSSxzQkFBc0IsR0FBRyxPQUFPLE9BQU87QUFDakQsUUFBSSxDQUFDLEVBQUc7QUFDUixRQUFJLHFCQUFxQixHQUFHLE1BQU0sSUFBSSxFQUFHLEtBQUksS0FBSyxDQUFDO0FBQUEsRUFDdkQ7QUFDQSxTQUFPO0FBQ1g7QUFFTyxJQUFNLHlCQUF5QjtBQUUvQixTQUFTLGlCQUFpQixTQUFTO0FBQ3RDLFFBQU0sSUFBSSxvQkFBSSxJQUFJO0FBQ2xCLGFBQVcsS0FBSyxTQUFTO0FBQ3JCLFVBQU0sT0FBTyxFQUFFLFdBQVc7QUFDMUIsTUFBRSxJQUFJLE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUM7QUFBQSxFQUN0QztBQUNBLFNBQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0RDs7O0FINUhBLFNBQVMsNkJBQTZCO0FBaUJSLGdCQUFBQyxNQXlKTixRQUFBQyxhQXpKTTtBQWY5QixJQUFNLGVBQWUsQ0FBQyxVQUFVLFFBQVEsT0FBTyxPQUFPLFFBQVEsSUFBSTtBQUVsRSxTQUFTLE9BQU8sUUFBUTtBQUNwQixNQUFJLFdBQVcsS0FBTSxRQUFPLEVBQUUsT0FBTyxVQUFLLE9BQU8sTUFBTSxLQUFLO0FBQzVELE1BQUksV0FBVyxPQUFRLFFBQU8sRUFBRSxPQUFPLFVBQUssT0FBTyxNQUFNLE1BQU07QUFDL0QsTUFBSSxXQUFXLE1BQU8sUUFBTyxFQUFFLE9BQU8sVUFBSyxPQUFPLE1BQU0sSUFBSTtBQUM1RCxTQUFPLEVBQUUsT0FBTyxVQUFLLE9BQU8sTUFBTSxRQUFRO0FBQzlDO0FBRUEsU0FBUyxjQUFjLFFBQVE7QUFDM0IsTUFBSSxDQUFDLFFBQVEsT0FBUSxRQUFPO0FBQzVCLFNBQU8sT0FBTyxPQUFPLE1BQU0sS0FBSztBQUNwQztBQUVBLFNBQVMsT0FBTyxPQUFPLE9BQU87QUFDMUIsTUFBSSxTQUFTLEtBQU0sUUFBTyxnQkFBQUQsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLG9CQUFDO0FBQ3ZELFNBQU8sZ0JBQUFGLEtBQUNFLE9BQUEsRUFBSyxPQUFlLGVBQUssTUFBTSxLQUFLLEdBQUU7QUFDbEQ7QUFFQSxTQUFTLFNBQVMsR0FBRyxPQUFPLElBQUksTUFBTSxJQUFJO0FBQ3RDLE1BQUksS0FBSyxLQUFNLFFBQU8sTUFBTTtBQUM1QixNQUFJLEtBQUssSUFBSyxRQUFPLE1BQU07QUFDM0IsTUFBSSxLQUFLLEtBQU0sUUFBTyxNQUFNO0FBQzVCLFNBQU8sTUFBTTtBQUNqQjtBQUtBLFNBQVMsTUFBTSxTQUFTO0FBQ3BCLE1BQUksQ0FBQyxRQUFTLFFBQU87QUFDckIsUUFBTSxJQUFJLEtBQUssTUFBTSxVQUFVLEtBQUs7QUFDcEMsTUFBSSxLQUFLLEdBQUksUUFBTyxHQUFHLENBQUM7QUFDeEIsUUFBTSxJQUFJLEtBQUssTUFBTyxVQUFVLFFBQVMsSUFBSTtBQUM3QyxNQUFJLElBQUksRUFBRyxRQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDM0IsUUFBTSxJQUFJLEtBQUssTUFBTyxVQUFVLE9BQVEsRUFBRTtBQUMxQyxNQUFJLElBQUksRUFBRyxRQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDM0IsU0FBTyxHQUFHLENBQUM7QUFDZjtBQUVBLFNBQVMsV0FBVyxFQUFFLE9BQU8sU0FBUyxhQUFhLE9BQU8sUUFBUSxPQUFPLEdBQUc7QUFDeEUsUUFBTSxTQUFTLGdCQUFnQjtBQUMvQixRQUFNLFFBQVEsU0FBUyxNQUFNLFNBQVMsTUFBTTtBQUM1QyxTQUNJLGdCQUFBRixLQUFDRyxNQUFBLEVBQUksT0FBYyxnQkFBZ0IsVUFBVSxVQUFVLGFBQWEsY0FDaEUsMEJBQUFILEtBQUNFLE9BQUEsRUFBSyxPQUFlLGlCQUFNLEdBQy9CO0FBRVI7QUFFTyxTQUFTLGFBQWE7QUFBQSxFQUN6QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixlQUFlO0FBQUEsRUFDZixpQkFBaUI7QUFDckIsR0FBRztBQUNDLFFBQU0sZ0JBQWdCO0FBQUEsSUFDbEIsTUFBTSxzQkFBc0IsU0FBUyxnQkFBZ0IsWUFBWTtBQUFBLElBQ2pFLENBQUMsU0FBUyxnQkFBZ0IsWUFBWTtBQUFBLEVBQzFDO0FBRUEsUUFBTSxXQUFXLFFBQVEsTUFBTTtBQUMzQixXQUFPLGNBQWMsSUFBSSxDQUFDLE1BQU07QUFDNUIsWUFBTSxTQUFTLFVBQVUsRUFBRSxNQUFNO0FBQ2pDLGFBQU87QUFBQSxRQUNIO0FBQUEsUUFDQTtBQUFBLFFBQ0EsUUFBUSxhQUFhLEdBQUcsdUJBQXVCLElBQUksRUFBRSxNQUFNLENBQUM7QUFBQSxRQUM1RCxLQUFLLFFBQVEsS0FBSyxTQUFTO0FBQUEsUUFDM0IsS0FBSyxRQUFRLFFBQVEsU0FBUztBQUFBLFFBQzlCLE1BQU0sUUFBUSxNQUFNLE1BQU0sU0FBUztBQUFBLFFBQ25DLElBQUksY0FBYyxNQUFNO0FBQUEsTUFDNUI7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUNMLEdBQUcsQ0FBQyxlQUFlLFNBQVMscUJBQXFCLENBQUM7QUFFbEQsUUFBTSxTQUFTLFFBQVEsTUFBTTtBQUN6QixVQUFNLFFBQVEsRUFBRSxLQUFLLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUU7QUFDL0MsVUFBTSxPQUFPLENBQUMsR0FBRyxRQUFRO0FBQ3pCLFNBQUssS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUNoQixVQUFJLFNBQVMsT0FBUSxRQUFPLEVBQUUsRUFBRSxPQUFPLGNBQWMsRUFBRSxFQUFFLE1BQU07QUFDL0QsVUFBSSxTQUFTLE1BQU8sU0FBUSxFQUFFLE9BQU8sT0FBTyxFQUFFLE9BQU87QUFDckQsVUFBSSxTQUFTLE1BQU8sU0FBUSxFQUFFLE9BQU8sT0FBTyxFQUFFLE9BQU87QUFDckQsVUFBSSxTQUFTLE9BQVEsU0FBUSxFQUFFLFFBQVEsT0FBTyxFQUFFLFFBQVE7QUFDeEQsVUFBSSxTQUFTLEtBQU0sUUFBTyxFQUFFLEtBQUssRUFBRTtBQUVuQyxZQUFNLEtBQUssTUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLEVBQUUsTUFBTTtBQUMzQyxVQUFJLE9BQU8sRUFBRyxRQUFPO0FBQ3JCLGFBQU8sRUFBRSxFQUFFLE9BQU8sY0FBYyxFQUFFLEVBQUUsTUFBTTtBQUFBLElBQzlDLENBQUM7QUFDRCxRQUFJLENBQUMsT0FBUSxRQUFPO0FBQ3BCLFVBQU0sU0FBUyxPQUFPLFlBQVk7QUFDbEMsV0FBTyxLQUFLO0FBQUEsTUFDUixDQUFDLE1BQ0csRUFBRSxFQUFFLE9BQU8sWUFBWSxFQUFFLFNBQVMsTUFBTSxLQUN2QyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxZQUFZLEVBQUUsU0FBUyxNQUFNO0FBQUEsSUFDM0Q7QUFBQSxFQUNKLEdBQUcsQ0FBQyxVQUFVLE1BQU0sTUFBTSxDQUFDO0FBRTNCLFFBQU0sZ0JBQWdCLFFBQVEsTUFBTTtBQUNoQyxVQUFNLE1BQU0sT0FBTyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxVQUFVO0FBQzdELFdBQU8sT0FBTyxJQUFJLE1BQU07QUFBQSxFQUM1QixHQUFHLENBQUMsUUFBUSxVQUFVLENBQUM7QUFFdkIsWUFBVSxNQUFNO0FBQ1osUUFBSSxPQUFPLFdBQVcsRUFBRztBQUN6QixVQUFNLFVBQVUsT0FBTyxhQUFhO0FBQ3BDLFFBQUksQ0FBQyxRQUFTO0FBQ2QsUUFBSSxRQUFRLEVBQUUsV0FBVyxXQUFZLFVBQVMsUUFBUSxFQUFFLE1BQU07QUFBQSxFQUNsRSxHQUFHLENBQUMsUUFBUSxlQUFlLFlBQVksUUFBUSxDQUFDO0FBRWhEO0FBQUEsSUFDSSxDQUFDLE9BQU8sUUFBUTtBQUNaLFVBQUksQ0FBQyxXQUFXLGFBQWEsT0FBTyxXQUFXLEVBQUc7QUFDbEQsVUFBSSxPQUFPO0FBQ1gsVUFBSSxJQUFJLFdBQVcsVUFBVSxJQUFLLFFBQU8sS0FBSyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7QUFBQSxlQUM3RCxJQUFJLGFBQWEsVUFBVTtBQUNoQyxlQUFPLEtBQUssSUFBSSxPQUFPLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztBQUFBLGVBQy9DLElBQUksT0FBUSxRQUFPLEtBQUssSUFBSSxHQUFHLGdCQUFnQixFQUFFO0FBQUEsZUFDakQsSUFBSSxTQUFVLFFBQU8sS0FBSyxJQUFJLE9BQU8sU0FBUyxHQUFHLGdCQUFnQixFQUFFO0FBQUEsZUFDbkUsVUFBVSxJQUFLLFFBQU87QUFBQSxlQUN0QixVQUFVLElBQUssUUFBTyxPQUFPLFNBQVM7QUFBQSxVQUMxQztBQUNMLGVBQVMsT0FBTyxJQUFJLEVBQUUsRUFBRSxNQUFNO0FBQUEsSUFDbEM7QUFBQSxJQUNBLEVBQUUsVUFBVSxRQUFRO0FBQUEsRUFDeEI7QUFFQSxRQUFNLFVBQVUsT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLEtBQUssSUFBSSxHQUFHLEVBQUUsRUFBRSxPQUFPLE1BQU0sR0FBRyxDQUFDO0FBQ3pFLFFBQU0sRUFBRSxPQUFPLElBQUksVUFBVTtBQUk3QixRQUFNLGVBQWUsS0FBSyxJQUFJLElBQUksUUFBUSxRQUFRLE1BQU0sRUFBRTtBQUUxRCxNQUFJLFFBQVE7QUFDWixNQUFJLE1BQU0sT0FBTztBQUNqQixNQUFJLE9BQU8sU0FBUyxjQUFjO0FBQzlCLFVBQU0sT0FBTyxLQUFLLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLFlBQVEsS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLGdCQUFnQixNQUFNLE9BQU8sU0FBUyxZQUFZLENBQUM7QUFDaEYsVUFBTSxRQUFRO0FBQUEsRUFDbEI7QUFDQSxRQUFNLFFBQVEsT0FBTyxNQUFNLE9BQU8sR0FBRztBQUNyQyxRQUFNLGNBQWM7QUFDcEIsUUFBTSxjQUFjLE9BQU8sU0FBUztBQUVwQyxRQUFNLFVBQ0YsZ0JBQWdCLFNBQ1YsR0FBRyxPQUFPLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FDcEMsR0FBRyxPQUFPLE1BQU07QUFDMUIsU0FDSSxnQkFBQUQ7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNHLE9BQU07QUFBQSxNQUNOLEtBQUs7QUFBQSxNQUNMO0FBQUEsTUFDQSxPQUNJLGVBQ0ksZ0JBQUFBLE1BQUNDLE9BQUEsRUFDRztBQUFBLHdCQUFBRCxNQUFDQyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQ2Q7QUFBQSx1QkFBYSxTQUFTLGFBQWE7QUFBQSxVQUFVO0FBQUEsVUFDN0M7QUFBQSxXQUNMO0FBQUEsUUFDQSxnQkFBQUYsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxRQUFRLE1BQUksTUFDMUIsdUJBQWEsUUFDbEI7QUFBQSxTQUNKLElBQ0EsYUFBYSxTQUNiLGdCQUFBRCxNQUFDRSxNQUFBLEVBQ0c7QUFBQSx3QkFBQUgsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sWUFBWSxNQUFNLFNBQVMsTUFBTSxPQUFPLGVBQUM7QUFBQSxRQUN0RCxnQkFBQUYsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxJQUFLLGtCQUFPO0FBQUEsUUFDOUIsYUFBYSxnQkFBQUYsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxRQUFRLG9CQUFDO0FBQUEsU0FDOUMsSUFFQSxnQkFBQUQsTUFBQ0MsT0FBQSxFQUNHO0FBQUEsd0JBQUFGLEtBQUNFLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxtQkFBSztBQUFBLFFBQ2pDLGdCQUFBRixLQUFDRSxPQUFBLEVBQUssT0FBTyxNQUFNLFFBQVMsZ0JBQUs7QUFBQSxTQUNyQztBQUFBLE1BSVI7QUFBQSx3QkFBQUQsTUFBQ0UsTUFBQSxFQUNHO0FBQUEsMEJBQUFILEtBQUNHLE1BQUEsRUFBSSxPQUFPLEdBQUc7QUFBQSxVQUNmLGdCQUFBSCxLQUFDLGNBQVcsT0FBTSxRQUFPLFNBQVEsUUFBTyxhQUFhLE1BQU0sT0FBTyxVQUFVLEdBQUc7QUFBQSxVQUMvRSxnQkFBQUEsS0FBQ0csTUFBQSxFQUFJLE9BQU8sR0FBRztBQUFBLFVBQ2YsZ0JBQUFILEtBQUNHLE1BQUEsRUFBSSxPQUFPLElBQUksYUFBYSxHQUFHLGNBQWMsR0FBRyxnQkFBZSxZQUM1RCwwQkFBQUgsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLGlCQUFHLEdBQ25DO0FBQUEsVUFDQSxnQkFBQUYsS0FBQyxjQUFXLE9BQU0sT0FBTSxTQUFRLE9BQU0sYUFBYSxNQUFNLE9BQU8sR0FBRyxPQUFNLFNBQVE7QUFBQSxVQUNqRixnQkFBQUEsS0FBQyxjQUFXLE9BQU0sT0FBTSxTQUFRLE9BQU0sYUFBYSxNQUFNLE9BQU8sR0FBRyxPQUFNLFNBQVE7QUFBQSxVQUNqRixnQkFBQUEsS0FBQyxjQUFXLE9BQU0sUUFBTyxTQUFRLFFBQU8sYUFBYSxNQUFNLE9BQU8sR0FBRyxPQUFNLFNBQVE7QUFBQSxVQUNuRixnQkFBQUEsS0FBQyxjQUFXLE9BQU0sTUFBSyxTQUFRLE1BQUssYUFBYSxNQUFNLE9BQU8sR0FBRyxPQUFNLFNBQVE7QUFBQSxXQUNuRjtBQUFBLFFBRUMsV0FBVyxPQUFPLFdBQVcsS0FDMUIsZ0JBQUFBLEtBQUNFLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBTywyQkFBUTtBQUFBLFFBRXJDLFNBQVMsZ0JBQUFGLEtBQUNFLE9BQUEsRUFBSyxPQUFPLE1BQU0sS0FBTSxpQkFBTTtBQUFBLFFBRXhDLGNBQWMsS0FBSyxnQkFBQUQsTUFBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTO0FBQUE7QUFBQSxVQUFHO0FBQUEsVUFBWTtBQUFBLFdBQUs7QUFBQSxRQUVwRSxnQkFBQUYsS0FBQ0csTUFBQSxFQUFJLGVBQWMsVUFDZCxnQkFBTSxJQUFJLENBQUMsTUFBTTtBQUNkLGdCQUFNLFFBQVEsRUFBRSxFQUFFLFdBQVc7QUFDN0IsZ0JBQU0sTUFBTSxPQUFPLEVBQUUsTUFBTTtBQUMzQixnQkFBTSxLQUFLLEVBQUUsRUFBRSxPQUFPLE9BQU8sT0FBTztBQUNwQyxnQkFBTSxZQUFZLGFBQWEsRUFBRSxFQUFFLE1BQU07QUFDekMsZ0JBQU0sV0FBVyxNQUFNLFFBQVEsU0FBUyxLQUFLLFVBQVUsVUFBVTtBQUNqRSxnQkFBTSxhQUFhLEVBQUUsT0FBTyxPQUFPLE1BQU0sUUFBUSxZQUFZLEVBQUUsR0FBRztBQUNsRSxpQkFDSSxnQkFBQUYsTUFBQ0UsTUFBQSxFQUFxQixpQkFBaUIsUUFBUSxZQUFZLFFBQ3ZEO0FBQUEsNEJBQUFILEtBQUNHLE1BQUEsRUFBSSxPQUFPLEdBQ1IsMEJBQUFILEtBQUNFLE9BQUEsRUFBSyxPQUFPLFFBQVEsTUFBTSxTQUFTLFFBQy9CLGtCQUFRLFdBQU0sS0FDbkIsR0FDSjtBQUFBLFlBQ0EsZ0JBQUFGLEtBQUNHLE1BQUEsRUFBSSxPQUFPLFVBQVUsR0FBRyxhQUFhLEdBQ2xDLDBCQUFBRixNQUFDQyxPQUFBLEVBQUssTUFBSyxnQkFDUDtBQUFBLDhCQUFBRixLQUFDRSxPQUFBLEVBQUssT0FBTyxJQUFJLE9BQVEsY0FBSSxPQUFNO0FBQUEsY0FBUTtBQUFBLGNBQzNDLGdCQUFBRixLQUFDRSxPQUFBLEVBQUssT0FBTyxRQUFRLE1BQU0sS0FBSyxNQUFNLE9BQVEsY0FBRztBQUFBLGVBQ3JELEdBQ0o7QUFBQSxZQUNBLGdCQUFBRixLQUFDRyxNQUFBLEVBQUksT0FBTyxJQUFJLGFBQWEsR0FDeEIscUJBQ0csZ0JBQUFILEtBQUMsYUFBVSxRQUFRLFdBQVcsT0FBTyxJQUFJLE9BQU8sWUFBWSxJQUU1RCxnQkFBQUEsS0FBQ0UsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFVLGlCQUFJLE9BQU8sRUFBRSxHQUFFLEdBRXBEO0FBQUEsWUFDQSxnQkFBQUYsS0FBQ0csTUFBQSxFQUFJLE9BQU8sR0FBRyxnQkFBZSxZQUN6QixpQkFBTyxFQUFFLEtBQUssU0FBUyxFQUFFLEdBQUcsQ0FBQyxHQUNsQztBQUFBLFlBQ0EsZ0JBQUFILEtBQUNHLE1BQUEsRUFBSSxPQUFPLEdBQUcsZ0JBQWUsWUFDekIsaUJBQU8sRUFBRSxLQUFLLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FDbEM7QUFBQSxZQUNBLGdCQUFBSCxLQUFDRyxNQUFBLEVBQUksT0FBTyxHQUFHLGdCQUFlLFlBQ3pCLGlCQUFPLEVBQUUsTUFBTSxTQUFTLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUM1QztBQUFBLFlBQ0EsZ0JBQUFILEtBQUNHLE1BQUEsRUFBSSxPQUFPLEdBQUcsZ0JBQWUsWUFBVyxZQUFZLEdBQ2pELDBCQUFBSCxLQUFDRSxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sTUFBSyxZQUMxQixnQkFBTSxFQUFFLEVBQUUsR0FDZixHQUNKO0FBQUEsZUFoQ00sRUFBRSxFQUFFLE1BaUNkO0FBQUEsUUFFUixDQUFDLEdBQ0w7QUFBQSxRQUVDLGNBQWMsS0FBSyxnQkFBQUQsTUFBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTO0FBQUE7QUFBQSxVQUFHO0FBQUEsVUFBWTtBQUFBLFdBQUs7QUFBQTtBQUFBO0FBQUEsRUFDeEU7QUFFUjs7O0FJNVFBLE9BQU9FLFVBQVMsYUFBQUMsWUFBVyxXQUFBQyxVQUFTLFVBQUFDLFNBQVEsWUFBQUMsaUJBQWdCO0FBQzVELFNBQVMsT0FBQUMsTUFBSyxRQUFBQyxPQUFNLGFBQUFDLGtCQUFpQjs7O0FDRHJDLFNBQVMsYUFBYSxhQUFBQyxZQUFXLFFBQVEsZ0JBQWdCO0FBQ3pELFNBQVMsdUJBQXVCO0FBQ2hDLFNBQVMsNkJBQTZCO0FBRXRDLElBQU0sWUFBWTtBQUVYLFNBQVMsUUFBUSxFQUFFLFVBQVUsUUFBUSxRQUFRLFFBQVEsR0FBRztBQUMzRCxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUM7QUFDckMsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJLFNBQVMsTUFBTTtBQUMzQyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUksU0FBUyxJQUFJO0FBQ3ZDLFFBQU0sWUFBWSxPQUFPLENBQUMsQ0FBQztBQUMzQixRQUFNLGVBQWUsT0FBTyxFQUFFO0FBRTlCLFFBQU0sUUFBUSxZQUFZLE1BQU07QUFDNUIsY0FBVSxVQUFVLENBQUM7QUFDckIsaUJBQWEsVUFBVTtBQUN2QixhQUFTLENBQUMsQ0FBQztBQUFBLEVBQ2YsR0FBRyxDQUFDLENBQUM7QUFFTCxRQUFNLGVBQWUsV0FBVztBQUVoQyxFQUFBQSxXQUFVLE1BQU07QUFDWixjQUFVLFVBQVUsQ0FBQztBQUNyQixpQkFBYSxVQUFVO0FBQ3ZCLGFBQVMsQ0FBQyxDQUFDO0FBQ1gsYUFBUyxJQUFJO0FBRWIsUUFBSSxDQUFDLFVBQVU7QUFDWCxnQkFBVSxNQUFNO0FBQ2hCO0FBQUEsSUFDSjtBQUNBLFFBQUksQ0FBQyxRQUFRO0FBQ1QsZ0JBQVUsTUFBTTtBQUNoQjtBQUFBLElBQ0o7QUFDQSxRQUFJLFFBQVE7QUFDUixnQkFBVSxNQUFNO0FBQ2hCO0FBQUEsSUFDSjtBQUVBLFFBQUksV0FBVztBQUNmLFFBQUksWUFBWTtBQUNoQixjQUFVLFlBQVk7QUFFdEIsYUFBUyxVQUFVLE9BQU8sYUFBYTtBQUNuQyxZQUFNLE9BQU8sYUFBYSxVQUFVO0FBQ3BDLFlBQU0sUUFBUSxLQUFLLE1BQU0sSUFBSTtBQUM3QixtQkFBYSxVQUFVLE1BQU0sSUFBSSxLQUFLO0FBQ3RDLFVBQUksTUFBTSxXQUFXLEVBQUc7QUFDeEIsWUFBTSxPQUFPLENBQUMsR0FBRyxVQUFVLE9BQU87QUFDbEMsaUJBQVcsTUFBTSxPQUFPO0FBQ3BCLGFBQUssS0FBSyxFQUFFLE1BQU0sSUFBSSxRQUFRLFlBQVksQ0FBQztBQUFBLE1BQy9DO0FBQ0EsVUFBSSxLQUFLLFNBQVMsVUFBVyxNQUFLLE9BQU8sR0FBRyxLQUFLLFNBQVMsU0FBUztBQUNuRSxnQkFBVSxVQUFVO0FBQ3BCLGVBQVMsSUFBSTtBQUNiLGdCQUFVLFdBQVc7QUFBQSxJQUN6QjtBQUVBLEtBQUMsWUFBWTtBQUNULFVBQUk7QUFDQSxjQUFNLE1BQU0sZ0JBQWdCLFFBQVE7QUFDcEMsY0FBTSxTQUFTLE1BQU0sSUFBSSxXQUFXLGNBQWM7QUFBQSxVQUM5QyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsVUFBVSxHQUFHLEtBQUs7QUFBQSxVQUNqRCxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsVUFBVSxHQUFHLEtBQUs7QUFBQSxVQUNqRCxVQUFVLENBQUMsT0FBTztBQUNkLHVCQUFXO0FBQUEsVUFDZjtBQUFBLFFBQ0osQ0FBQztBQUNELFlBQUksVUFBVztBQUNmLFlBQUksT0FBTyxTQUFVLFVBQVMsc0JBQXNCO0FBQUEsaUJBQzNDLE9BQU8sWUFBWSxRQUFRLE9BQU8sYUFBYTtBQUNwRCxtQkFBUywrQkFBK0IsT0FBTyxRQUFRLEVBQUU7QUFDN0Qsa0JBQVUsT0FBTztBQUFBLE1BQ3JCLFNBQVMsR0FBRztBQUNSLFlBQUksVUFBVztBQUNmLGlCQUFTLEVBQUUsV0FBVyxPQUFPLENBQUMsQ0FBQztBQUMvQixrQkFBVSxPQUFPO0FBQUEsTUFDckI7QUFBQSxJQUNKLEdBQUc7QUFFSCxXQUFPLE1BQU07QUFDVCxrQkFBWTtBQUNaLFVBQUksVUFBVTtBQUNWLFlBQUk7QUFDQSxtQkFBUztBQUFBLFFBQ2IsUUFBUTtBQUFBLFFBRVI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0osR0FBRyxDQUFDLFVBQVUsUUFBUSxRQUFRLFlBQVksQ0FBQztBQUUzQyxTQUFPLEVBQUUsT0FBTyxRQUFRLE9BQU8sTUFBTTtBQUN6Qzs7O0FEdkZBO0FBQUEsRUFDSTtBQUFBLEVBQ0E7QUFBQSxPQUNHO0FBOEZDLFNBaU9ZLFVBL05KLE9BQUFDLE1BRlIsUUFBQUMsYUFBQTtBQTVGUixJQUFNLGNBQWM7QUFFcEIsU0FBUyxpQkFBaUIsVUFBVSxRQUFRO0FBQ3hDLFFBQU0sYUFBYUMsUUFBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDbEUsUUFBTSxnQkFBZ0JBLFFBQU8sSUFBSTtBQUNqQyxRQUFNLENBQUMsRUFBRSxPQUFPLElBQUlDLFVBQVMsQ0FBQztBQUU5QixFQUFBQyxXQUFVLE1BQU07QUFDWixRQUFJLGNBQWMsWUFBWSxVQUFVO0FBQ3BDLGlCQUFXLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRTtBQUM1RCxvQkFBYyxVQUFVO0FBQ3hCLGNBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUFBLElBQ3hCO0FBQ0EsUUFBSSxDQUFDLE9BQVE7QUFDYixVQUFNLE9BQU8sQ0FBQyxLQUFLLE1BQU07QUFDckIsWUFBTSxNQUFNLENBQUMsR0FBRyxLQUFLLEtBQUssT0FBTyxPQUFPLE9BQU8sQ0FBQyxDQUFDO0FBQ2pELGFBQU8sSUFBSSxTQUFTLGNBQWMsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJO0FBQUEsSUFDaEU7QUFDQSxlQUFXLFVBQVU7QUFBQSxNQUNqQixLQUFLLEtBQUssV0FBVyxRQUFRLEtBQUssT0FBTyxLQUFLLEtBQUs7QUFBQSxNQUNuRCxLQUFLLEtBQUssV0FBVyxRQUFRLEtBQUssT0FBTyxRQUFRLEtBQUs7QUFBQSxNQUN0RCxNQUFNLEtBQUssV0FBVyxRQUFRLE1BQU0sT0FBTyxRQUFRLE1BQU0sS0FBSztBQUFBLE1BQzlELE1BQU0sS0FBSyxXQUFXLFFBQVEsTUFBTSxPQUFPLE1BQU0sTUFBTSxLQUFLO0FBQUEsSUFDaEU7QUFDQSxZQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7QUFBQSxFQUN4QixHQUFHLENBQUMsVUFBVSxNQUFNLENBQUM7QUFFckIsU0FBTyxXQUFXO0FBQ3RCO0FBS0EsSUFBTSxjQUFjO0FBQUEsRUFDaEIsT0FBTyxFQUFFLE9BQU8sTUFBTSxPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQ3pDLEtBQUssRUFBRSxPQUFPLE1BQU0sT0FBTyxNQUFNLE1BQU07QUFBQSxFQUN2QyxPQUFPLEVBQUUsT0FBTyxNQUFNLE9BQU8sTUFBTSxNQUFNO0FBQUEsRUFDekMsS0FBSyxFQUFFLE9BQU8sTUFBTSxPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQ3ZDLE1BQU0sRUFBRSxPQUFPLE1BQU0sSUFBSSxNQUFNLE1BQU07QUFBQSxFQUNyQyxLQUFLLEVBQUUsT0FBTyxNQUFNLElBQUksTUFBTSxNQUFNO0FBQUEsRUFDcEMsUUFBUSxFQUFFLE9BQU8sTUFBTSxRQUFRLE1BQU0sTUFBTTtBQUFBLEVBQzNDLE1BQU0sRUFBRSxPQUFPLE1BQU0sT0FBTyxNQUFNLE1BQU07QUFBQSxFQUN4QyxTQUFTLEVBQUUsT0FBTyxNQUFNLE9BQU8sTUFBTSxNQUFNO0FBQUEsRUFDM0MsS0FBSyxFQUFFLE9BQU8sTUFBTSxPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQ3ZDLE9BQU8sRUFBRSxPQUFPLE1BQU0sS0FBSyxNQUFNLE1BQU07QUFBQSxFQUN2QyxLQUFLLEVBQUUsT0FBTyxNQUFNLEtBQUssTUFBTSxNQUFNO0FBQUEsRUFDckMsTUFBTSxFQUFFLE9BQU8sTUFBTSxLQUFLLE1BQU0sS0FBSztBQUFBLEVBQ3JDLFVBQVUsRUFBRSxPQUFPLE1BQU0sS0FBSyxNQUFNLEtBQUs7QUFBQSxFQUN6QyxPQUFPLEVBQUUsT0FBTyxNQUFNLEtBQUssTUFBTSxLQUFLO0FBQUEsRUFDdEMsS0FBSyxFQUFFLE9BQU8sTUFBTSxLQUFLLE1BQU0sS0FBSztBQUN4QztBQUVBLElBQU0sWUFBWTtBQUNsQixTQUFTLFNBQVMsR0FBRztBQUNqQixNQUFJLEVBQUUsVUFBVSxVQUFXLFFBQU8sRUFBRSxNQUFNLEdBQUcsU0FBUztBQUN0RCxTQUFPLElBQUksSUFBSSxPQUFPLFlBQVksRUFBRSxNQUFNO0FBQzlDO0FBRUEsSUFBTSxlQUFlO0FBQUEsRUFDakIsS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sT0FBTztBQUNYO0FBRUEsU0FBUyxTQUFTLEdBQUc7QUFDakIsTUFBSSxLQUFLLEtBQU0sUUFBTztBQUN0QixRQUFNLFFBQVEsQ0FBQyxLQUFLLE1BQU0sTUFBTSxNQUFNLElBQUk7QUFDMUMsTUFBSSxJQUFJO0FBQ1IsTUFBSSxJQUFJLE9BQU8sQ0FBQztBQUNoQixTQUFPLEtBQUssUUFBUSxJQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3RDLFNBQUs7QUFDTDtBQUFBLEVBQ0o7QUFDQSxTQUFPLEdBQUcsRUFBRSxRQUFRLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQ3BEO0FBRUEsU0FBU0MsT0FBTSxNQUFNO0FBQ2pCLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsUUFBTSxJQUFJLEtBQUssTUFBTSxJQUFJO0FBQ3pCLFFBQU0sSUFBSSxLQUFLLE1BQU0sSUFBSSxLQUFLO0FBQzlCLFFBQU0sSUFBSSxLQUFLLE1BQU8sSUFBSSxRQUFTLElBQUk7QUFDdkMsUUFBTSxJQUFJLEtBQUssTUFBTyxJQUFJLE9BQVEsRUFBRTtBQUNwQyxNQUFJLEVBQUcsUUFBTyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ3hCLE1BQUksRUFBRyxRQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDeEIsU0FBTyxHQUFHLENBQUM7QUFDZjtBQUVBLFNBQVMsVUFBVSxFQUFFLE9BQU8sT0FBTyxPQUFPLFNBQVMsT0FBTyxHQUFHO0FBQ3pELFFBQU0sYUFBYSxZQUFZLEtBQUs7QUFDcEMsUUFBTSxZQUFZLFNBQVMsT0FBTyxhQUFRLEdBQUcsS0FBSyxNQUFNLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDckYsU0FDSSxnQkFBQUosTUFBQ0ssTUFBQSxFQUNHO0FBQUEsb0JBQUFOLEtBQUNNLE1BQUEsRUFBSSxPQUFPLEdBQ1IsMEJBQUFOLEtBQUNPLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxNQUFJLE1BQzNCLGlCQUNMLEdBQ0o7QUFBQSxJQUNBLGdCQUFBUCxLQUFDTSxNQUFBLEVBQUksT0FBTyxHQUFHLGdCQUFlLFlBQVcsYUFBYSxHQUNsRCwwQkFBQU4sS0FBQ08sT0FBQSxFQUFLLE9BQU8sWUFBWSxNQUFJLE1BQ3hCLHFCQUNMLEdBQ0o7QUFBQSxJQUNBLGdCQUFBUCxLQUFDLE9BQUksT0FBTyxTQUFTLEdBQUcsT0FBTyxJQUFJLE9BQU8sWUFBWTtBQUFBLElBQ3RELGdCQUFBQSxLQUFDTSxNQUFBLEVBQUksWUFBWSxHQUNiLDBCQUFBTixLQUFDLGFBQVUsUUFBUSxTQUFTLE9BQU8sSUFBSSxPQUFjLEdBQ3pEO0FBQUEsSUFDQSxnQkFBQUEsS0FBQ00sTUFBQSxFQUFJLFlBQVksR0FBRyxVQUFVLEdBQzFCLDBCQUFBTixLQUFDTyxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sTUFBSyxnQkFDMUIsb0JBQVUsSUFDZixHQUNKO0FBQUEsS0FDSjtBQUVSO0FBRUEsU0FBUyxVQUFVLEVBQUUsR0FBRyxPQUFPLFNBQVMsR0FBRztBQUN2QyxRQUFNLFFBQVEsV0FBVyxNQUFNLFVBQVUsTUFBTTtBQUMvQyxTQUNJLGdCQUFBUCxLQUFDTSxNQUFBLEVBQUksYUFBYSxHQUNkLDBCQUFBTCxNQUFDTSxPQUFBLEVBQ0c7QUFBQSxvQkFBQVAsS0FBQ08sT0FBQSxFQUFLLE9BQU8sV0FBVyxNQUFNLFVBQVUsTUFBTSxTQUFVLGFBQUU7QUFBQSxJQUFRO0FBQUEsSUFDbEUsZ0JBQUFQLEtBQUNPLE9BQUEsRUFBSyxPQUFlLGlCQUFNO0FBQUEsS0FDL0IsR0FDSjtBQUVSO0FBRUEsU0FBUyxhQUFhLEdBQUc7QUFDckIsTUFBSSxNQUFNLEtBQU0sUUFBTyxFQUFFLE9BQU8sVUFBSyxPQUFPLE1BQU0sS0FBSztBQUN2RCxNQUFJLE1BQU0sT0FBUSxRQUFPLEVBQUUsT0FBTyxVQUFLLE9BQU8sTUFBTSxNQUFNO0FBQzFELE1BQUksTUFBTSxNQUFPLFFBQU8sRUFBRSxPQUFPLFVBQUssT0FBTyxNQUFNLElBQUk7QUFDdkQsU0FBTyxFQUFFLE9BQU8sVUFBSyxPQUFPLE1BQU0sUUFBUTtBQUM5QztBQUVBLFNBQVMsTUFBTTtBQUNYLFNBQU8sZ0JBQUFQLEtBQUNPLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBVSxzQkFBUTtBQUNoRDtBQU1BLFNBQVMsV0FBVyxFQUFFLE1BQU0sT0FBTyxHQUFHO0FBQ2xDLE1BQUksQ0FBQyxRQUFRO0FBQ1QsV0FDSSxnQkFBQVAsS0FBQ00sTUFBQSxFQUNHLDBCQUFBTixLQUFDTyxPQUFBLEVBQUssT0FBTyxNQUFNLElBQUksTUFBSyxnQkFDdkIsa0JBQVEsS0FDYixHQUNKO0FBQUEsRUFFUjtBQUNBLFFBQU0sRUFBRSxNQUFNLE9BQU8sWUFBWSxXQUFXLElBQUksSUFBSTtBQUNwRCxRQUFNLFFBQVEsWUFBWSxZQUFZLFNBQVMsSUFBSTtBQUNuRCxRQUFNLGFBQWEsT0FBTyxTQUFTLE1BQU07QUFDekMsUUFBTSxZQUFZLENBQUMsQ0FBQyxPQUFPO0FBRzNCLFFBQU0sU0FBUyxjQUFjLFdBQVcsY0FBYyxjQUFjLGNBQWM7QUFDbEYsUUFBTSxXQUFXLFNBQVMsTUFBTSxNQUFNLE1BQU07QUFDNUMsU0FDSSxnQkFBQVAsS0FBQ00sTUFBQSxFQUNHLDBCQUFBTCxNQUFDTSxPQUFBLEVBQUssTUFBSyxnQkFDTjtBQUFBLFlBQVEsZ0JBQUFOLE1BQUNNLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBVTtBQUFBO0FBQUEsTUFBSztBQUFBLE9BQUM7QUFBQSxJQUMzQyxTQUNHLGdCQUFBTixNQUFDTSxPQUFBLEVBQUssT0FBTyxZQUFZLE1BQU0sV0FDMUI7QUFBQSxlQUFTLE1BQU0sWUFBWSxDQUFDO0FBQUEsTUFBRztBQUFBLE9BQ3BDO0FBQUEsSUFFSixnQkFBQVAsS0FBQ08sT0FBQSxFQUFLLE9BQU8sVUFBVSxNQUFNLGFBQWEsUUFDckMsaUJBQU8sS0FDWjtBQUFBLEtBQ0osR0FDSjtBQUVSO0FBRU8sU0FBUyxrQkFBa0I7QUFBQSxFQUM5QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFDcEIsR0FBRztBQUNDLFFBQU0sS0FBSyxRQUFRLFVBQVU7QUFDN0IsUUFBTSxTQUFTLENBQUMsQ0FBQyxRQUFRLFlBQVk7QUFDckMsUUFBTSxTQUFTLFVBQVU7QUFDekIsUUFBTSxVQUFVLGlCQUFpQixJQUFJLE1BQU07QUFDM0MsUUFBTSxXQUFXO0FBQ2pCLFFBQU0sVUFBVSxZQUFZLFdBQVcsQ0FBQztBQUN4QyxRQUFNLGNBQWMsUUFBUTtBQUM1QixRQUFNLGFBQWEsY0FBYyxRQUFRO0FBQ3pDLFFBQU0sZ0JBQWdCLGNBQWMsV0FBVztBQUMvQyxRQUFNLGdCQUFnQixjQUFjLG1CQUFtQjtBQUl2RCxRQUFNLGtCQUFrQkMsU0FBUSxNQUFNO0FBQ2xDLFFBQUksQ0FBQyxjQUFlLFFBQU87QUFDM0IsUUFBSTtBQUNBLGFBQU8sSUFBSSxPQUFPLGFBQWE7QUFBQSxJQUNuQyxRQUFRO0FBQ0osYUFBTztBQUFBLElBQ1g7QUFBQSxFQUNKLEdBQUcsQ0FBQyxhQUFhLENBQUM7QUFDbEIsUUFBTSxFQUFFLE9BQU8sUUFBUSxXQUFXLE9BQU8sVUFBVSxNQUFNLElBQUksUUFBUTtBQUFBLElBQ2pFLFVBQVU7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0EsU0FBUztBQUFBLEVBQ2IsQ0FBQztBQUNELFFBQU0sRUFBRSxPQUFPLElBQUlDLFdBQVU7QUFFN0IsRUFBQUwsV0FBVSxNQUFNO0FBQ1osUUFBSSxhQUFhLEVBQUcsT0FBTTtBQUFBLEVBRTlCLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFFZixRQUFNLFNBQVMsYUFBYSxRQUFRLGFBQWE7QUFDakQsUUFBTSxNQUFNLGFBQWEsTUFBTTtBQUMvQixRQUFNLFVBQ0YsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsYUFBYSxPQUN4RCxPQUFPLE9BQU8sUUFBUSxPQUFPLE9BQU8sWUFDcEM7QUFDVixRQUFNLFlBQ0YsV0FBVyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQ3RDLEdBQUcsU0FBUyxPQUFPLENBQUMsTUFBTSxTQUFTLE9BQU8sT0FBTyxLQUFLLENBQUMsS0FDdkQ7QUFDVixRQUFNLE9BQU8sUUFBUSxRQUFRO0FBQzdCLFFBQU0sVUFBVSxRQUFRLEtBQUssU0FBUyxRQUFRLEtBQUssUUFBUTtBQUMzRCxRQUFNLGFBQWEsVUFDYixHQUFHLFNBQVMsS0FBSyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUMsTUFBTSxTQUFTLEtBQUssS0FBSyxDQUFDLEtBQ3BFO0FBQ04sUUFBTSxhQUNGLFFBQVEsTUFBTSxNQUFNLGFBQWEsUUFBUSxRQUFRLE1BQU0sTUFBTSxTQUFTLE9BQ2hFLEdBQUcsU0FBUyxPQUFPLEtBQUssS0FBSyxRQUFRLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxNQUFNLFNBQVMsT0FBTyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQ3RHO0FBQ1YsUUFBTSxPQUFPLFFBQVEsT0FDZixDQUFDLE9BQU8sS0FBSyxJQUFJLEdBQUcsT0FBTyxLQUFLLElBQUksR0FBRyxPQUFPLEtBQUssS0FBSyxDQUFDLEVBQ3BELElBQUksQ0FBQyxNQUFPLEtBQUssT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLFFBQUksRUFDM0MsS0FBSyxLQUFLLElBQ2Y7QUFFTixRQUFNLEtBQUssUUFBUSxZQUFZLGNBQWM7QUFDN0MsUUFBTSxRQUFRLFFBQVEsWUFBWSxZQUFZO0FBQzlDLFFBQU0sU0FBUyxzQkFBc0IsUUFBUSxPQUFPLE9BQU8sS0FBSztBQUNoRSxRQUFNLE9BQU8sUUFBUSxLQUFLO0FBSTFCLFFBQU0sZ0JBQWdCLE1BQU0sVUFBVSxJQUFJO0FBQzFDLFFBQU0sWUFBWSxLQUFLLElBQUksSUFBSSxRQUFRLFFBQVEsTUFBTSxhQUFhO0FBS2xFLFFBQU0sY0FBY0ksU0FBUSxNQUFNO0FBQzlCLFdBQU8sTUFBTSxJQUFJLENBQUMsT0FBTztBQUNyQixZQUFNLFNBQVMsYUFBYSxHQUFHLE1BQU0sZUFBZTtBQUNwRCxhQUFPLEVBQUUsTUFBTSxJQUFJLE9BQU87QUFBQSxJQUM5QixDQUFDO0FBQUEsRUFDTCxHQUFHLENBQUMsT0FBTyxlQUFlLENBQUM7QUFDM0IsUUFBTSxnQkFBZ0JBLFNBQVEsTUFBTTtBQUNoQyxRQUFJLGdCQUFnQixNQUFPLFFBQU87QUFDbEMsV0FBTyxZQUFZO0FBQUEsTUFBTyxDQUFDLE1BQ3ZCLHFCQUFxQixFQUFFLFFBQVEsWUFBWSxXQUFXO0FBQUEsSUFDMUQ7QUFBQSxFQUNKLEdBQUcsQ0FBQyxhQUFhLFdBQVcsQ0FBQztBQUM3QixRQUFNLGNBQWMsY0FBYyxNQUFNLENBQUMsU0FBUztBQUVsRCxRQUFNLGtCQUFrQixNQUFNO0FBQzFCLFFBQUksQ0FBQyxHQUFJLFFBQU8sRUFBRSxNQUFNLG1CQUFtQixPQUFPLE1BQU0sTUFBTTtBQUM5RCxRQUFJLENBQUMsT0FBUSxRQUFPLEVBQUUsTUFBTSxrQkFBa0IsT0FBTyxNQUFNLE1BQU07QUFDakUsUUFBSSxTQUFVLFFBQU8sRUFBRSxNQUFNLFVBQVUsT0FBTyxNQUFNLElBQUk7QUFDeEQsUUFBSSxPQUFRLFFBQU8sRUFBRSxNQUFNLFVBQVUsT0FBTyxNQUFNLE1BQU07QUFDeEQsUUFBSSxjQUFjLGFBQWMsUUFBTyxFQUFFLE1BQU0sb0JBQWUsT0FBTyxNQUFNLE1BQU07QUFDakYsUUFBSSxjQUFjLFlBQWEsUUFBTyxFQUFFLE1BQU0sUUFBUSxPQUFPLE1BQU0sS0FBSztBQUN4RSxRQUFJLGNBQWMsUUFBUyxRQUFPLEVBQUUsTUFBTSxTQUFTLE9BQU8sTUFBTSxNQUFNO0FBQ3RFLFdBQU8sRUFBRSxNQUFNLFdBQVcsT0FBTyxNQUFNLE1BQU07QUFBQSxFQUNqRCxHQUFHO0FBRUgsTUFBSSxDQUFDLFFBQVE7QUFDVCxXQUNJLGdCQUFBUixLQUFDLFNBQU0sT0FBTSxVQUFTLFNBQ2xCLDBCQUFBQSxLQUFDTyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMseUNBQTJCLEdBQzNEO0FBQUEsRUFFUjtBQUVBLFFBQU0sZUFBZSxPQUFPLFFBQVEsTUFBTTtBQUUxQyxTQUNJLGdCQUFBTjtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0csT0FBTTtBQUFBLE1BQ04sS0FBSyxPQUFPO0FBQUEsTUFDWjtBQUFBLE1BQ0EsT0FDSSxnQkFBQUEsTUFBQ00sT0FBQSxFQUNJO0FBQUEsaUJBQVMsZ0JBQUFOLE1BQUNNLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBUTtBQUFBO0FBQUEsVUFBTTtBQUFBLFdBQUM7QUFBQSxRQUMzQyxNQUFNLGdCQUFBUCxLQUFDTyxPQUFBLEVBQUssT0FBTyxNQUFNLElBQUssY0FBRztBQUFBLFNBQ3RDO0FBQUEsTUFJSjtBQUFBLHdCQUFBTixNQUFDSyxNQUFBLEVBQ0c7QUFBQSwwQkFBQUwsTUFBQ00sT0FBQSxFQUFLLE9BQU8sSUFBSSxPQUFRO0FBQUEsZ0JBQUk7QUFBQSxZQUFNO0FBQUEsYUFBQztBQUFBLFVBQ3BDLGdCQUFBUCxLQUFDTyxPQUFBLEVBQUssT0FBTyxTQUFTLE1BQU0sS0FBSyxNQUFNLE9BQU8sTUFBSSxNQUM3QyxpQkFBTyxRQUNaO0FBQUEsVUFDQyxnQkFDRyxnQkFBQU4sTUFBQSxZQUNJO0FBQUEsNEJBQUFELEtBQUMsT0FBSTtBQUFBLFlBQ0wsZ0JBQUFBLEtBQUNPLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBUSx3QkFBYTtBQUFBLGFBQzVDO0FBQUEsV0FFUjtBQUFBLFFBR0EsZ0JBQUFOLE1BQUNLLE1BQUEsRUFBSSxjQUFjLEdBQ2Y7QUFBQSwwQkFBQU4sS0FBQ08sT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLG9CQUFNO0FBQUEsVUFDbEMsZ0JBQUFQLEtBQUNPLE9BQUEsRUFBSyxPQUFPLE1BQU0sSUFBSyxrQkFBTztBQUFBLFVBQy9CLGdCQUFBUCxLQUFDLE9BQUk7QUFBQSxVQUNMLGdCQUFBQSxLQUFDTyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMsaUJBQUc7QUFBQSxVQUMvQixnQkFBQVAsS0FBQ08sT0FBQSxFQUFLLE9BQU8sTUFBTSxJQUFLLFVBQUFGLE9BQU0sUUFBUSxNQUFNLEdBQUU7QUFBQSxVQUM3QyxRQUNHLGdCQUFBSixNQUFBLFlBQ0k7QUFBQSw0QkFBQUQsS0FBQyxPQUFJO0FBQUEsWUFDTCxnQkFBQUEsS0FBQ08sT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLG1CQUFLO0FBQUEsWUFDakMsZ0JBQUFQLEtBQUNPLE9BQUEsRUFBSyxPQUFPLE1BQU0sSUFBSyxnQkFBSztBQUFBLGFBQ2pDO0FBQUEsV0FFUjtBQUFBLFFBR0EsZ0JBQUFOLE1BQUNLLE1BQUEsRUFBSSxlQUFjLFVBQ2Y7QUFBQSwwQkFBQU47QUFBQSxZQUFDO0FBQUE7QUFBQSxjQUNHLE9BQU07QUFBQSxjQUNOLE9BQU8sUUFBUSxLQUFLO0FBQUEsY0FDcEIsU0FBUyxRQUFRO0FBQUEsY0FDakIsT0FBTyxNQUFNO0FBQUEsY0FDYixRQUNJLFFBQVEsS0FBSyxTQUFTLE9BQ2hCLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxPQUFPLElBQUksVUFBVSxJQUFJLEtBQUssR0FBRyxHQUFHLFFBQVEsT0FBTyxTQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsVUFBTyxFQUFFLEtBQzVHO0FBQUE7QUFBQSxVQUVkO0FBQUEsVUFDQSxnQkFBQUE7QUFBQSxZQUFDO0FBQUE7QUFBQSxjQUNHLE9BQU07QUFBQSxjQUNOLE9BQU8sUUFBUSxRQUFRO0FBQUEsY0FDdkIsU0FBUyxRQUFRO0FBQUEsY0FDakIsT0FBTyxNQUFNO0FBQUEsY0FDYixRQUFRLGFBQWE7QUFBQTtBQUFBLFVBQ3pCO0FBQUEsVUFDQyxXQUNHLGdCQUFBQTtBQUFBLFlBQUM7QUFBQTtBQUFBLGNBQ0csT0FBTTtBQUFBLGNBQ04sT0FBTyxLQUFLO0FBQUEsY0FDWixTQUFTLFFBQVE7QUFBQSxjQUNqQixPQUFPLE1BQU07QUFBQSxjQUNiLFFBQVEsY0FBYztBQUFBO0FBQUEsVUFDMUI7QUFBQSxVQUVKLGdCQUFBQTtBQUFBLFlBQUM7QUFBQTtBQUFBLGNBQ0csT0FBTTtBQUFBLGNBQ04sT0FBTyxRQUFRLE1BQU0sTUFBTTtBQUFBLGNBQzNCLFNBQVMsUUFBUTtBQUFBLGNBQ2pCLE9BQU8sTUFBTTtBQUFBLGNBQ2IsUUFBUSxjQUFjO0FBQUE7QUFBQSxVQUMxQjtBQUFBLFdBQ0o7QUFBQSxRQUVDLFlBQVksQ0FBQyxVQUNWLGdCQUFBQSxLQUFDTSxNQUFBLEVBQUksV0FBVyxHQUNaLDBCQUFBTixLQUFDTyxPQUFBLEVBQUssT0FBTyxNQUFNLEtBQU0sb0JBQVMsR0FDdEM7QUFBQSxRQUVILENBQUMsVUFBVSxVQUFVLENBQUMsWUFDbkIsZ0JBQUFQLEtBQUNNLE1BQUEsRUFBSSxXQUFXLEdBQ1osMEJBQUFOLEtBQUNPLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxpREFBOEIsR0FDNUQ7QUFBQSxRQUlKLGdCQUFBTixNQUFDSyxNQUFBLEVBQUksV0FBVyxHQUNaO0FBQUEsMEJBQUFOLEtBQUMsYUFBVSxHQUFFLFNBQVEsT0FBTSxPQUFNLFVBQVUsQ0FBQyxRQUFRO0FBQUEsVUFDcEQsZ0JBQUFBLEtBQUMsYUFBVSxHQUFFLEtBQUksT0FBTSxjQUFhO0FBQUEsVUFDcEMsZ0JBQUFBLEtBQUMsYUFBVSxHQUFFLEtBQUksT0FBTSxjQUFhO0FBQUEsVUFDcEMsZ0JBQUFBLEtBQUMsYUFBVSxHQUFFLEtBQUksT0FBTSxZQUFXLFVBQVEsTUFBQztBQUFBLFVBQzNDLGdCQUFBQSxLQUFDLGFBQVUsR0FBRSxLQUFJLE9BQU0sVUFBUyxVQUFRLE1BQUM7QUFBQSxXQUM3QztBQUFBLFFBR0EsZ0JBQUFDLE1BQUNLLE1BQUEsRUFBSSxXQUFXLEdBQUcsZ0JBQWUsaUJBQzlCO0FBQUEsMEJBQUFMLE1BQUNLLE1BQUEsRUFDRztBQUFBLDRCQUFBTCxNQUFDTSxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQVE7QUFBQSw0QkFBYztBQUFBLGNBQU87QUFBQSxlQUFDO0FBQUEsWUFDakQsZ0JBQUFOLE1BQUNNLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBUztBQUFBO0FBQUEsY0FBUSxPQUFPO0FBQUEsZUFBTztBQUFBLFlBQ2pELGNBQWMsS0FBSyxxQkFBcUIsS0FDckMsZ0JBQUFOLE1BQUEsWUFDSTtBQUFBLDhCQUFBRCxLQUFDLE9BQUk7QUFBQSxjQUNMLGdCQUFBQyxNQUFDTSxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQ2Q7QUFBQSxvQ0FBb0I7QUFBQSxnQkFBRTtBQUFBLGdCQUFFO0FBQUEsZ0JBQWE7QUFBQSxpQkFDMUM7QUFBQSxjQUNBLGdCQUFBUCxLQUFDTyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMsZUFBQztBQUFBLGVBQ2pDO0FBQUEsWUFFSCxpQkFBaUIsYUFBYSxXQUFXLEtBQ3RDLGdCQUFBTixNQUFBLFlBQ0k7QUFBQSw4QkFBQUQsS0FBQyxPQUFJO0FBQUEsY0FDTCxnQkFBQUEsS0FBQ08sT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFVLHVCQUFhLFdBQVcsR0FBRTtBQUFBLGVBQzNEO0FBQUEsWUFFSCxDQUFDLGlCQUNFLGdCQUFBTixNQUFBLFlBQ0k7QUFBQSw4QkFBQUQsS0FBQyxPQUFJO0FBQUEsY0FDTCxnQkFBQUEsS0FBQ08sT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLDhDQUFnQztBQUFBLGVBQ2hFO0FBQUEsYUFFUjtBQUFBLFVBQ0EsZ0JBQUFOLE1BQUNNLE9BQUEsRUFBSyxPQUFPLGVBQWUsT0FBTztBQUFBO0FBQUEsWUFBRyxlQUFlO0FBQUEsYUFBSztBQUFBLFdBQzlEO0FBQUEsUUFDQSxnQkFBQU4sTUFBQ0ssTUFBQSxFQUFJLGVBQWMsVUFBUyxVQUFVLEdBQ2pDO0FBQUEsc0JBQVksV0FBVyxLQUFLLFVBQVUsQ0FBQyxZQUNwQyxnQkFBQU4sS0FBQ08sT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLDBDQUF1QjtBQUFBLFVBRXRELFlBQVksSUFBSSxDQUFDLEVBQUUsTUFBTSxPQUFPLEdBQUcsTUFDaEMsZ0JBQUFQO0FBQUEsWUFBQztBQUFBO0FBQUEsY0FFRyxNQUFNLEtBQUs7QUFBQSxjQUNYO0FBQUE7QUFBQSxZQUZLLEdBQUcsY0FBYyxTQUFTLFlBQVksU0FBUyxDQUFDO0FBQUEsVUFHekQsQ0FDSDtBQUFBLFdBQ0w7QUFBQTtBQUFBO0FBQUEsRUFDSjtBQUVSOzs7QUVyY0EsT0FBT1UsVUFBUyxXQUFBQyxVQUFTLFlBQUFDLGlCQUFnQjtBQUN6QyxTQUFTLE9BQUFDLE1BQUssUUFBQUMsYUFBWTs7O0FDRDFCLE9BQU9DO0FBQUEsRUFDSDtBQUFBLEVBQ0EsZUFBQUM7QUFBQSxFQUNBO0FBQUEsRUFDQSxhQUFBQztBQUFBLEVBQ0EsV0FBQUM7QUFBQSxFQUNBLFVBQUFDO0FBQUEsRUFDQSxZQUFBQztBQUFBLE9BQ0c7QUFDUCxTQUFTLFlBQUFDLGlCQUFnQjtBQXdCekIsSUFBTSxjQUFjLGNBQWMsSUFBSTtBQUN0QyxJQUFNLFlBQVksY0FBYyxDQUFDO0FBRWpDLFNBQVMsY0FBYztBQUNuQixRQUFNLElBQUksV0FBVyxXQUFXO0FBQ2hDLE1BQUksQ0FBQyxFQUFHLE9BQU0sSUFBSSxNQUFNLHVEQUFrRDtBQUMxRSxTQUFPO0FBQ1g7QUFFTyxTQUFTLGNBQWMsRUFBRSxTQUFTLEdBQUc7QUFDeEMsUUFBTSxnQkFBZ0JGLFFBQU8sb0JBQUksSUFBSSxDQUFDO0FBQ3RDLFFBQU0sYUFBYUEsUUFBTyxvQkFBSSxJQUFJLENBQUM7QUFDbkMsUUFBTSxZQUFZQSxRQUFPLENBQUMsQ0FBQztBQUMzQixRQUFNLFdBQVdBLFFBQU8sQ0FBQztBQUN6QixRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlDLFVBQVMsQ0FBQztBQUNsQyxRQUFNLFdBQVdKLGFBQVksTUFBTSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFLNUQsUUFBTSxXQUFXRSxTQUFRLE1BQU07QUFDM0IsVUFBTSxXQUFXLENBQUMsVUFBVTtBQUN4QixvQkFBYyxRQUFRLElBQUksTUFBTSxJQUFJO0FBQUEsUUFDaEMsR0FBRztBQUFBLFFBQ0gsT0FBTyxTQUFTO0FBQUEsTUFDcEIsQ0FBQztBQUNELFVBQUksQ0FBQyxXQUFXLFFBQVEsSUFBSSxNQUFNLE1BQU0sR0FBRztBQUN2QyxtQkFBVyxRQUFRLElBQUksTUFBTSxRQUFRLE1BQU0sRUFBRTtBQUFBLE1BQ2pEO0FBQ0EsZUFBUztBQUNULGFBQU8sTUFBTTtBQUNULHNCQUFjLFFBQVEsT0FBTyxNQUFNLEVBQUU7QUFDckMsWUFBSSxXQUFXLFFBQVEsSUFBSSxNQUFNLE1BQU0sTUFBTSxNQUFNLElBQUk7QUFDbkQsZ0JBQU0sVUFBVSxDQUFDLEdBQUcsY0FBYyxRQUFRLE9BQU8sQ0FBQyxFQUFFO0FBQUEsWUFDaEQsQ0FBQyxNQUFNLEVBQUUsV0FBVyxNQUFNO0FBQUEsVUFDOUI7QUFDQSxjQUFJLFFBQVMsWUFBVyxRQUFRLElBQUksTUFBTSxRQUFRLFFBQVEsRUFBRTtBQUFBLGNBQ3ZELFlBQVcsUUFBUSxPQUFPLE1BQU0sTUFBTTtBQUFBLFFBQy9DO0FBQ0EsaUJBQVM7QUFBQSxNQUNiO0FBQUEsSUFDSjtBQUVBLFVBQU0sUUFBUSxDQUFDLE9BQU87QUFDbEIsWUFBTSxRQUFRLGNBQWMsUUFBUSxJQUFJLEVBQUU7QUFDMUMsVUFBSSxDQUFDLE1BQU87QUFDWixpQkFBVyxRQUFRLElBQUksTUFBTSxRQUFRLEVBQUU7QUFDdkMsZUFBUztBQUFBLElBQ2I7QUFFQSxVQUFNLFFBQVEsQ0FBQyxXQUFXLFdBQVc7QUFDakMsWUFBTSxXQUFXLENBQUMsR0FBRyxjQUFjLFFBQVEsT0FBTyxDQUFDLEVBQzlDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxNQUFNLEVBQ2pDLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSztBQUNyQyxVQUFJLFNBQVMsV0FBVyxFQUFHO0FBQzNCLFlBQU0sUUFBUSxXQUFXLFFBQVEsSUFBSSxNQUFNO0FBQzNDLFlBQU0sSUFBSSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxLQUFLO0FBQ2xELFlBQU0sUUFBUSxjQUFjLFNBQVMsS0FBSztBQUMxQyxZQUFNLE9BQU8sVUFBVSxJQUFJLFFBQVEsU0FBUyxVQUFVLFNBQVMsTUFBTTtBQUNyRSxpQkFBVyxRQUFRLElBQUksUUFBUSxLQUFLLEVBQUU7QUFDdEMsZUFBUztBQUFBLElBQ2I7QUFFQSxVQUFNLFlBQVksQ0FBQyxVQUFVO0FBQ3pCLGdCQUFVLFFBQVEsS0FBSyxLQUFLO0FBQzVCLGVBQVM7QUFDVCxhQUFPLE1BQU07QUFDVCxrQkFBVSxVQUFVLFVBQVUsUUFBUSxPQUFPLENBQUMsTUFBTSxNQUFNLEtBQUs7QUFDL0QsaUJBQVM7QUFBQSxNQUNiO0FBQUEsSUFDSjtBQUdBLFVBQU0sWUFBWSxDQUFDLE9BQU87QUFDdEIsWUFBTSxRQUFRLGNBQWMsUUFBUSxJQUFJLEVBQUU7QUFDMUMsVUFBSSxDQUFDLE1BQU8sUUFBTztBQUNuQixVQUFJLFVBQVUsUUFBUSxTQUFTLEVBQUcsUUFBTztBQUN6QyxhQUFPLFdBQVcsUUFBUSxJQUFJLE1BQU0sTUFBTSxNQUFNO0FBQUEsSUFDcEQ7QUFDQSxVQUFNLFdBQVcsTUFDYixVQUFVLFFBQVEsU0FBUyxJQUNyQixVQUFVLFFBQVEsVUFBVSxRQUFRLFNBQVMsQ0FBQyxJQUM5QztBQUNWLFVBQU0sZ0JBQWdCLE1BQU0sVUFBVSxRQUFRLFNBQVM7QUFDdkQsVUFBTSxpQkFBaUIsQ0FBQyxXQUFXO0FBQy9CLFlBQU0sS0FBSyxXQUFXLFFBQVEsSUFBSSxNQUFNO0FBQ3hDLFVBQUksQ0FBQyxHQUFJLFFBQU87QUFDaEIsWUFBTSxRQUFRLGNBQWMsUUFBUSxJQUFJLEVBQUU7QUFDMUMsYUFBTyxPQUFPLFNBQVMsV0FBVztBQUFBLElBQ3RDO0FBRUEsV0FBTztBQUFBLE1BQ0g7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUFBLEVBQ0osR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUViLFNBQU9ILE9BQU07QUFBQSxJQUNULFlBQVk7QUFBQSxJQUNaLEVBQUUsT0FBTyxTQUFTO0FBQUEsSUFDbEJBLE9BQU0sY0FBYyxVQUFVLFVBQVUsRUFBRSxPQUFPLEtBQUssR0FBRyxRQUFRO0FBQUEsRUFDckU7QUFDSjtBQVFPLFNBQVMsYUFBYSxFQUFFLElBQUksUUFBUSxVQUFVLE1BQU0sT0FBTyxLQUFLLEdBQUc7QUFDdEUsUUFBTSxXQUFXLFlBQVk7QUFFN0IsYUFBVyxTQUFTO0FBRXBCLFFBQU0sY0FBY0ksUUFBTyxRQUFRO0FBQ25DLFFBQU0sVUFBVUEsUUFBTyxJQUFJO0FBQzNCLGNBQVksVUFBVTtBQUN0QixVQUFRLFVBQVU7QUFFbEIsRUFBQUYsV0FBVSxNQUFNO0FBQ1osUUFBSSxDQUFDLEtBQU0sUUFBTztBQUNsQixXQUFPLFNBQVMsU0FBUyxFQUFFLElBQUksUUFBUSxhQUFhLFFBQVEsQ0FBQztBQUFBLEVBQ2pFLEdBQUcsQ0FBQyxVQUFVLElBQUksUUFBUSxJQUFJLENBQUM7QUFFL0IsUUFBTSxVQUFVLFNBQVMsVUFBVSxFQUFFO0FBRXJDLEVBQUFJO0FBQUEsSUFDSSxDQUFDLE9BQU8sUUFBUTtBQUNaLFlBQU0sS0FBSyxZQUFZO0FBQ3ZCLFVBQUksT0FBTyxPQUFPLFdBQVksSUFBRyxPQUFPLEdBQUc7QUFBQSxJQUMvQztBQUFBLElBQ0EsRUFBRSxVQUFVLFFBQVEsUUFBUTtBQUFBLEVBQ2hDO0FBRUEsUUFBTSxZQUFZTCxhQUFZLE1BQU0sU0FBUyxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3RFLFNBQU8sRUFBRSxTQUFTLE9BQU8sVUFBVTtBQUN2QztBQU1PLFNBQVMsU0FBUyxTQUFTLEVBQUUsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDMUQsUUFBTSxXQUFXLFlBQVk7QUFDN0IsYUFBVyxTQUFTO0FBRXBCLFFBQU0sYUFBYUcsUUFBTyxPQUFPO0FBQ2pDLFFBQU0sVUFBVUEsUUFBTyxJQUFJO0FBQzNCLFFBQU0sV0FBV0EsUUFBTyxJQUFJO0FBQzVCLGFBQVcsVUFBVTtBQUNyQixVQUFRLFVBQVU7QUFFbEIsRUFBQUYsV0FBVSxNQUFNO0FBQ1osUUFBSSxDQUFDLEtBQU0sUUFBTztBQUNsQixVQUFNLFFBQVEsRUFBRSxZQUFZLFFBQVE7QUFDcEMsYUFBUyxVQUFVO0FBQ25CLFdBQU8sU0FBUyxVQUFVLEtBQUs7QUFBQSxFQUNuQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUM7QUFFbkIsUUFBTSxRQUFRLFNBQVMsU0FBUyxNQUFNLFNBQVM7QUFDL0MsRUFBQUk7QUFBQSxJQUNJLENBQUMsT0FBTyxRQUFRO0FBQ1osWUFBTSxLQUFLLFdBQVc7QUFDdEIsVUFBSSxPQUFPLE9BQU8sV0FBWSxJQUFHLE9BQU8sR0FBRztBQUFBLElBQy9DO0FBQUEsSUFDQSxFQUFFLFVBQVUsUUFBUSxNQUFNO0FBQUEsRUFDOUI7QUFDSjtBQUtPLFNBQVMsWUFBWSxRQUFRLEVBQUUsT0FBTyxLQUFLLElBQUksQ0FBQyxHQUFHO0FBQ3RELFFBQU0sV0FBVyxZQUFZO0FBQzdCLGFBQVcsU0FBUztBQUNwQixRQUFNLFVBQVUsU0FBUyxjQUFjO0FBQ3ZDLEVBQUFBO0FBQUEsSUFDSSxDQUFDLFFBQVEsUUFBUTtBQUNiLFVBQUksQ0FBQyxJQUFJLElBQUs7QUFDZCxlQUFTLE1BQU0sSUFBSSxRQUFRLFNBQVMsUUFBUSxNQUFNO0FBQUEsSUFDdEQ7QUFBQSxJQUNBLEVBQUUsVUFBVSxRQUFRLENBQUMsUUFBUTtBQUFBLEVBQ2pDO0FBQ0o7QUFNTyxTQUFTLGNBQWMsUUFBUTtBQUNsQyxRQUFNLFdBQVcsWUFBWTtBQUM3QixhQUFXLFNBQVM7QUFDcEIsUUFBTSxNQUFNLFNBQVMsU0FBUztBQUM5QixNQUFJLEtBQUssU0FBUyxRQUFTLFFBQU8sSUFBSSxRQUFRO0FBQzlDLFNBQU8sU0FBUyxlQUFlLE1BQU0sS0FBSyxDQUFDO0FBQy9DO0FBS08sU0FBUyxjQUFjLFNBQVMsRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDekQsUUFBTSxXQUFXLFlBQVk7QUFDN0IsYUFBVyxTQUFTO0FBQ3BCLFFBQU0sVUFBVSxTQUFTLGNBQWM7QUFDdkMsUUFBTSxNQUFNRixRQUFPLE9BQU87QUFDMUIsTUFBSSxVQUFVO0FBQ2QsRUFBQUU7QUFBQSxJQUNJLENBQUMsT0FBTyxRQUFRO0FBQ1osWUFBTSxLQUFLLElBQUk7QUFDZixVQUFJLE9BQU8sT0FBTyxXQUFZLElBQUcsT0FBTyxHQUFHO0FBQUEsSUFDL0M7QUFBQSxJQUNBLEVBQUUsVUFBVSxRQUFRLENBQUMsUUFBUTtBQUFBLEVBQ2pDO0FBQ0o7OztBRHZLZ0IsZ0JBQUFDLE1BR0EsUUFBQUMsYUFIQTtBQWpGaEIsSUFBTSxPQUFPO0FBRWIsSUFBTSxPQUFPO0FBQUEsRUFDVCxFQUFFLEdBQUcsZ0JBQU0sT0FBTyxPQUFPO0FBQUEsRUFDekIsRUFBRSxHQUFHLFNBQVMsT0FBTyxPQUFPO0FBQUEsRUFDNUIsRUFBRSxHQUFHLE9BQU8sT0FBTyxTQUFTO0FBQ2hDO0FBRU8sU0FBUyxrQkFBa0IsRUFBRSxPQUFPLFNBQVMsVUFBVSxTQUFTLEdBQUc7QUFDdEUsUUFBTSxTQUFTQyxTQUFRLE1BQU07QUFDekIsV0FBTyxDQUFDLEdBQUksV0FBVyxDQUFDLENBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNO0FBQ3ZDLFlBQU0sS0FBSyxFQUFFLFlBQVksU0FBUyxJQUFJO0FBQ3RDLFlBQU0sS0FBSyxFQUFFLFlBQVksU0FBUyxJQUFJO0FBQ3RDLFVBQUksT0FBTyxHQUFJLFFBQU8sS0FBSztBQUMzQixjQUFRLEVBQUUsVUFBVSxJQUFJLGNBQWMsRUFBRSxVQUFVLEVBQUU7QUFBQSxJQUN4RCxDQUFDO0FBQUEsRUFDTCxHQUFHLENBQUMsT0FBTyxDQUFDO0FBRVosUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQyxVQUFTLEVBQUU7QUFDdkMsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxVQUFTLENBQUM7QUFFdEMsUUFBTSxXQUFXRCxTQUFRLE1BQU07QUFDM0IsUUFBSSxDQUFDLE9BQVEsUUFBTztBQUNwQixVQUFNLElBQUksT0FBTyxZQUFZO0FBQzdCLFdBQU8sT0FBTztBQUFBLE1BQ1YsQ0FBQyxNQUNHLEVBQUUsT0FBTyxZQUFZLEVBQUUsU0FBUyxDQUFDLEtBQ2hDLEVBQUUsUUFBUSxFQUFFLEtBQUssWUFBWSxFQUFFLFNBQVMsQ0FBQztBQUFBLElBQ2xEO0FBQUEsRUFDSixHQUFHLENBQUMsUUFBUSxNQUFNLENBQUM7QUFFbkIsUUFBTSxrQkFBa0IsS0FBSyxJQUFJLFFBQVEsS0FBSyxJQUFJLEdBQUcsU0FBUyxTQUFTLENBQUMsQ0FBQztBQUN6RSxRQUFNLFlBQVksS0FBSztBQUFBLElBQ25CO0FBQUEsSUFDQSxLQUFLLElBQUksa0JBQWtCLEtBQUssTUFBTSxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksR0FBRyxTQUFTLFNBQVMsSUFBSSxDQUFDO0FBQUEsRUFDeEY7QUFDQSxRQUFNLFlBQVksU0FBUyxNQUFNLFdBQVcsWUFBWSxJQUFJO0FBRTVEO0FBQUEsSUFDSSxDQUFDLE9BQU8sUUFBUTtBQUNaLFVBQUksSUFBSSxRQUFRO0FBQ1osbUJBQVc7QUFDWDtBQUFBLE1BQ0o7QUFDQSxVQUFJLElBQUksUUFBUTtBQUNaLGNBQU0sT0FBTyxTQUFTLGVBQWU7QUFDckMsWUFBSSxLQUFNLFlBQVcsSUFBSTtBQUN6QjtBQUFBLE1BQ0o7QUFDQSxVQUFJLElBQUksU0FBUztBQUNiLGtCQUFVLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNuQztBQUFBLE1BQ0o7QUFDQSxVQUFJLElBQUksV0FBVztBQUNmLGtCQUFVLENBQUMsTUFBTSxLQUFLLElBQUksU0FBUyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDckQ7QUFBQSxNQUNKO0FBQ0EsVUFBSSxJQUFJLGFBQWEsSUFBSSxRQUFRO0FBQzdCLGtCQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDL0Isa0JBQVUsQ0FBQztBQUNYO0FBQUEsTUFDSjtBQUNBLFVBQUksU0FBUyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksUUFBUSxNQUFNLFdBQVcsS0FBSyxTQUFTLEtBQUs7QUFDdkUsa0JBQVUsQ0FBQyxNQUFNLElBQUksS0FBSztBQUMxQixrQkFBVSxDQUFDO0FBQUEsTUFDZjtBQUFBLElBQ0o7QUFBQSxJQUNBLEVBQUUsTUFBTSxLQUFLO0FBQUEsRUFDakI7QUFFQSxTQUNJLGdCQUFBRDtBQUFBLElBQUNHO0FBQUEsSUFBQTtBQUFBLE1BQ0csYUFBWTtBQUFBLE1BQ1osYUFBYSxNQUFNO0FBQUEsTUFDbkIsaUJBQWlCLE1BQU07QUFBQSxNQUN2QixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixlQUFjO0FBQUEsTUFDZCxPQUFPO0FBQUEsTUFFUDtBQUFBLHdCQUFBSCxNQUFDRyxNQUFBLEVBQUksY0FBYyxHQUFHLGdCQUFlLGlCQUNqQztBQUFBLDBCQUFBSixLQUFDSyxPQUFBLEVBQUssT0FBTyxNQUFNLFFBQVEsTUFBSSxNQUMxQixtQkFBUyxpQkFDZDtBQUFBLFVBQ0EsZ0JBQUFKLE1BQUNJLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FDZDtBQUFBLHFCQUFTO0FBQUEsWUFBTztBQUFBLFlBQUUsT0FBTztBQUFBLGFBQzlCO0FBQUEsV0FDSjtBQUFBLFFBRUEsZ0JBQUFKLE1BQUNHLE1BQUEsRUFBSSxjQUFjLEdBQ2Y7QUFBQSwwQkFBQUosS0FBQ0ssT0FBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLHNCQUFRO0FBQUEsVUFDbEMsZ0JBQUFMLEtBQUNLLE9BQUEsRUFBSyxPQUFPLE1BQU0sSUFBSyxvQkFBVSxLQUFJO0FBQUEsVUFDdEMsZ0JBQUFMLEtBQUNLLE9BQUEsRUFBSyxPQUFPLE1BQU0sUUFBUSxTQUFPLE1BQzdCLGVBQ0w7QUFBQSxXQUNKO0FBQUEsUUFFQyxTQUFTLFdBQVcsS0FDakIsZ0JBQUFMLEtBQUNLLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxpQ0FBbUI7QUFBQSxRQUVsRCxVQUFVLElBQUksQ0FBQyxHQUFHLE1BQU07QUFDckIsZ0JBQU0sU0FBUyxZQUFZO0FBQzNCLGdCQUFNLFlBQVksV0FBVztBQUM3QixnQkFBTSxTQUFTLENBQUMsQ0FBQyxFQUFFLFlBQVk7QUFDL0IsaUJBQ0ksZ0JBQUFKLE1BQUNHLE1BQUEsRUFDRztBQUFBLDRCQUFBSixLQUFDSSxNQUFBLEVBQUksT0FBTyxHQUNSLDBCQUFBSixLQUFDSyxPQUFBLEVBQUssT0FBTyxZQUFZLE1BQU0sU0FBUyxNQUFNLFNBQ3pDLHNCQUFZLFdBQU0sS0FDdkIsR0FDSjtBQUFBLFlBQ0EsZ0JBQUFMLEtBQUNJLE1BQUEsRUFBSSxPQUFPLEdBQ1IsMEJBQUFKLEtBQUNLLE9BQUEsRUFBSyxPQUFPLFNBQVMsTUFBTSxPQUFPLE1BQU0sU0FDcEMsbUJBQVMsV0FBTSxVQUNwQixHQUNKO0FBQUEsWUFDQSxnQkFBQUwsS0FBQ0ksTUFBQSxFQUFJLFVBQVUsR0FDWCwwQkFBQUg7QUFBQSxjQUFDSTtBQUFBLGNBQUE7QUFBQSxnQkFDRyxPQUFPLFlBQVksTUFBTSxLQUFLLE1BQU07QUFBQSxnQkFDcEMsTUFBTTtBQUFBLGdCQUNOLE1BQUs7QUFBQSxnQkFFSjtBQUFBLG9CQUFFO0FBQUEsa0JBQ0YsRUFBRSxPQUFPLE1BQU0sRUFBRSxJQUFJLE1BQU07QUFBQTtBQUFBO0FBQUEsWUFDaEMsR0FDSjtBQUFBLGVBcEJNLEVBQUUsTUFxQlo7QUFBQSxRQUVSLENBQUM7QUFBQSxRQUVELGdCQUFBTCxLQUFDSSxNQUFBLEVBQUksV0FBVyxHQUNaLDBCQUFBSixLQUFDSyxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sK0RBQWlDLEdBQy9EO0FBQUE7QUFBQTtBQUFBLEVBQ0o7QUFFUjs7O0FFNUlBLE9BQU9DLFVBQVMsYUFBQUMsWUFBVyxXQUFBQyxVQUFTLFVBQUFDLFNBQVEsWUFBQUMsaUJBQWdCO0FBQzVELFNBQVMsT0FBQUMsTUFBSyxRQUFBQyxPQUFNLGFBQUFDLGtCQUFpQjtBQWFyQyxTQUFTLGtCQUFBQyxpQkFBZ0IsbUJBQW1CO0FBc0NoQyxTQW1USSxZQUFBQyxXQWxUQSxPQUFBQyxNQURKLFFBQUFDLGFBQUE7QUFuQ1osSUFBTSxhQUFhO0FBQUEsRUFDZixFQUFFLEdBQUcsT0FBTyxPQUFPLE9BQU87QUFBQSxFQUMxQixFQUFFLEdBQUcsT0FBTyxPQUFPLFFBQVE7QUFBQSxFQUMzQixFQUFFLEdBQUcsZ0JBQU0sT0FBTyxNQUFNO0FBQUEsRUFDeEIsRUFBRSxHQUFHLEtBQUssT0FBTyxPQUFPO0FBQUEsRUFDeEIsRUFBRSxHQUFHLEtBQUssT0FBTyxTQUFTO0FBQUEsRUFDMUIsRUFBRSxHQUFHLFNBQVMsT0FBTyxTQUFTO0FBQUEsRUFDOUIsRUFBRSxHQUFHLEtBQUssT0FBTyxPQUFPO0FBQzVCO0FBRUEsSUFBTSxjQUFjO0FBQUEsRUFDaEIsRUFBRSxHQUFHLE9BQU8sT0FBTyxPQUFPO0FBQUEsRUFDMUIsRUFBRSxHQUFHLE9BQU8sT0FBTyxRQUFRO0FBQUEsRUFDM0IsRUFBRSxHQUFHLEtBQUssT0FBTyxPQUFPO0FBQUEsRUFDeEIsRUFBRSxHQUFHLEtBQUssT0FBTyxPQUFPO0FBQzVCO0FBRUEsSUFBTSxnQkFBZ0I7QUFBQSxFQUNsQixFQUFFLEdBQUcsT0FBTyxPQUFPLE9BQU87QUFBQSxFQUMxQixFQUFFLEdBQUcsT0FBTyxPQUFPLFFBQVE7QUFBQSxFQUMzQixFQUFFLEdBQUcsS0FBSyxPQUFPLFVBQVU7QUFBQSxFQUMzQixFQUFFLEdBQUcsS0FBSyxPQUFPLE9BQU87QUFDNUI7QUFFQSxJQUFNLG1CQUFtQjtBQUFBLEVBQ3JCLEVBQUUsR0FBRyxPQUFPLE9BQU8sT0FBTztBQUFBLEVBQzFCLEVBQUUsR0FBRyxPQUFPLE9BQU8sUUFBUTtBQUFBLEVBQzNCLEVBQUUsR0FBRyxnQkFBTSxPQUFPLFNBQVM7QUFBQSxFQUMzQixFQUFFLEdBQUcsT0FBTyxPQUFPLFFBQVE7QUFBQSxFQUMzQixFQUFFLEdBQUcsS0FBSyxPQUFPLE9BQU87QUFDNUI7QUFFQSxTQUFTLElBQUksRUFBRSxPQUFPLE9BQU8sUUFBUSxNQUFNLElBQUksT0FBTyxHQUFHO0FBQ3JELFNBQ0ksZ0JBQUFBLE1BQUNDLE1BQUEsRUFBSSxlQUFjLFVBQVMsVUFBVSxHQUNsQztBQUFBLG9CQUFBRCxNQUFDRSxPQUFBLEVBQ0c7QUFBQSxzQkFBQUgsS0FBQ0csT0FBQSxFQUFLLE9BQWMsTUFBSSxNQUNuQixpQkFDTDtBQUFBLE1BQ0MsVUFBVSxnQkFBQUgsS0FBQ0csT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFVLGtCQUFPO0FBQUEsT0FDbkQ7QUFBQSxJQUNBLGdCQUFBSCxLQUFDRyxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQVEsaUJBQU07QUFBQSxLQUNyQztBQUVSO0FBRUEsU0FBUyxXQUFXLEVBQUUsT0FBTyxPQUFPLFNBQVMsTUFBTSxHQUFHO0FBQ2xELFFBQU0sVUFBVSxTQUFTLE9BQU8sV0FBTSxHQUFHLEtBQUssTUFBTSxLQUFLLENBQUM7QUFDMUQsU0FDSSxnQkFBQUYsTUFBQ0MsTUFBQSxFQUNHO0FBQUEsb0JBQUFGLEtBQUNFLE1BQUEsRUFBSSxPQUFPLEdBQ1IsMEJBQUFGLEtBQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBUSxpQkFBTSxHQUNyQztBQUFBLElBQ0EsZ0JBQUFILEtBQUMsT0FBSSxPQUFPLFNBQVMsR0FBRyxPQUFPLElBQUksT0FBTyxZQUFZLEtBQUssR0FBRztBQUFBLElBQzlELGdCQUFBQSxLQUFDRSxNQUFBLEVBQUksWUFBWSxHQUNiLDBCQUFBRixLQUFDLGFBQVUsUUFBUSxTQUFTLE9BQU8sSUFBSSxPQUFjLEdBQ3pEO0FBQUEsSUFDQSxnQkFBQUEsS0FBQ0UsTUFBQSxFQUFJLE9BQU8sR0FBRyxnQkFBZSxZQUMxQiwwQkFBQUYsS0FBQ0csT0FBQSxFQUFLLE9BQU8sTUFBTSxJQUFLLG1CQUFRLEdBQ3BDO0FBQUEsS0FDSjtBQUVSO0FBRUEsU0FBUyxXQUFXLEVBQUUsR0FBRyxPQUFPLEtBQUssTUFBTSxHQUFHO0FBQzFDLFFBQU0sUUFBUTtBQUNkLFFBQU0sU0FBUyxLQUFLLElBQUksR0FBRyxLQUFLLE1BQU8sUUFBUSxNQUFPLEtBQUssQ0FBQztBQUs1RCxRQUFNLFFBQ0YsVUFBVSxXQUFXLE1BQU0sT0FBTyxVQUFVLFFBQVEsTUFBTSxRQUFRLE1BQU07QUFDNUUsU0FDSSxnQkFBQUYsTUFBQ0MsTUFBQSxFQUNHO0FBQUEsb0JBQUFGLEtBQUNFLE1BQUEsRUFBSSxPQUFPLEdBQ1IsMEJBQUFGLEtBQUNHLE9BQUEsRUFBSyxPQUFlLGFBQUUsR0FDM0I7QUFBQSxJQUNBLGdCQUFBSCxLQUFDRyxPQUFBLEVBQUssT0FBZSxtQkFBSSxPQUFPLE1BQU0sR0FBRTtBQUFBLElBQ3hDLGdCQUFBSCxLQUFDRyxPQUFBLEVBQUssT0FBTyxNQUFNLFdBQVksbUJBQUksT0FBTyxRQUFRLE1BQU0sR0FBRTtBQUFBLElBQzFELGdCQUFBSCxLQUFDRSxNQUFBLEVBQUksT0FBTyxHQUFHLGdCQUFlLFlBQzFCLDBCQUFBRixLQUFDRyxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQVEsaUJBQU0sR0FDckM7QUFBQSxLQUNKO0FBRVI7QUFFQSxTQUFTLGVBQWUsS0FBSztBQUN6QixNQUFJLFFBQVFDLGdCQUFlLFlBQVksUUFBUUEsZ0JBQWUsTUFBTTtBQUNoRSxXQUFPLEVBQUUsT0FBTyxNQUFNLEtBQUssT0FBTyxTQUFJO0FBQUEsRUFDMUM7QUFDQSxNQUFJLFFBQVFBLGdCQUFlLE9BQVEsUUFBTyxFQUFFLE9BQU8sTUFBTSxPQUFPLE9BQU8sU0FBSTtBQUMzRSxNQUFJLFFBQVFBLGdCQUFlLElBQUssUUFBTyxFQUFFLE9BQU8sTUFBTSxRQUFRLE9BQU8sSUFBSTtBQUN6RSxTQUFPLEVBQUUsT0FBTyxNQUFNLE9BQU8sT0FBTyxPQUFJO0FBQzVDO0FBRUEsU0FBUyxjQUFjLEVBQUUsT0FBTyxJQUFJLEdBQUc7QUFDbkMsUUFBTSxFQUFFLE9BQU8sTUFBTSxJQUFJLGVBQWUsTUFBTSxRQUFRO0FBQ3RELFNBQ0ksZ0JBQUFILE1BQUNDLE1BQUEsRUFBSSxlQUFjLFVBQVMsY0FBYyxHQUN0QztBQUFBLG9CQUFBRCxNQUFDQyxNQUFBLEVBQ0c7QUFBQSxzQkFBQUYsS0FBQ0UsTUFBQSxFQUFJLE9BQU8sR0FDUiwwQkFBQUYsS0FBQ0csT0FBQSxFQUFLLE9BQWMsTUFBSSxNQUNuQixpQkFDTCxHQUNKO0FBQUEsTUFDQSxnQkFBQUgsS0FBQ0UsTUFBQSxFQUFJLE9BQU8sR0FBRyxnQkFBZSxZQUFXLGFBQWEsR0FDbEQsMEJBQUFGLEtBQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sSUFBSSxNQUFJLE1BQ3RCLGdCQUFNLE9BQ1gsR0FDSjtBQUFBLE1BQ0EsZ0JBQUFILEtBQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sSUFBSyxnQkFBTSxNQUFLO0FBQUEsT0FDdkM7QUFBQSxJQUNBLGdCQUFBSCxLQUFDRSxNQUFBLEVBQUksWUFBWSxHQUFHLGVBQWMsVUFDN0IsZ0JBQU0sUUFBUSxJQUFJLENBQUMsR0FBRyxNQUFNO0FBQ3pCLFlBQU0sTUFBTSxXQUFXLEVBQUUsS0FBSztBQUM5QixZQUFNLFFBQ0YsRUFBRSxhQUFhLE9BQU8sY0FBYyxNQUFNLEVBQUUsU0FBUyxJQUFJO0FBQzdELGFBQ0ksZ0JBQUFELE1BQUNDLE1BQUEsRUFDRztBQUFBLHdCQUFBRixLQUFDRSxNQUFBLEVBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxVQUFVLEdBQ3RDLDBCQUFBRixLQUFDRyxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sTUFBSyxnQkFDMUIsWUFBRSxNQUNQLEdBQ0o7QUFBQSxRQUNBLGdCQUFBSCxLQUFDRSxNQUFBLEVBQUksT0FBTyxHQUFHLGdCQUFlLFlBQVcsWUFBWSxHQUNqRCwwQkFBQUYsS0FBQ0csT0FBQSxFQUFLLE9BQU8sRUFBRSxRQUFRLE1BQU0sS0FBSyxNQUFNLFNBQ25DLFlBQUUsU0FBUyxVQUNoQixHQUNKO0FBQUEsUUFDQSxnQkFBQUgsS0FBQ0UsTUFBQSxFQUFJLE9BQU8sR0FBRyxnQkFBZSxZQUFXLFlBQVksR0FDakQsMEJBQUFGLEtBQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBUSxpQkFBTSxHQUNyQztBQUFBLFFBQ0EsZ0JBQUFILEtBQUNFLE1BQUEsRUFBSSxPQUFPLEdBQUcsZ0JBQWUsWUFBVyxZQUFZLEdBQ2pELDBCQUFBRixLQUFDRyxPQUFBLEVBQUssT0FBTyxXQUFXLEVBQUUsS0FBSyxHQUFJLGVBQUksR0FDM0M7QUFBQSxXQWhCTSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFpQnhCO0FBQUEsSUFFUixDQUFDLEdBQ0w7QUFBQSxLQUNKO0FBRVI7QUFFQSxTQUFTLGNBQWMsSUFBSTtBQUN2QixNQUFJLENBQUMsT0FBTyxTQUFTLEVBQUUsS0FBSyxLQUFLLEVBQUcsUUFBTztBQUMzQyxRQUFNLElBQUksS0FBSyxNQUFNLEtBQUssR0FBSTtBQUM5QixNQUFJLElBQUksR0FBSSxRQUFPLEdBQUcsQ0FBQztBQUN2QixRQUFNLElBQUksS0FBSyxNQUFNLElBQUksRUFBRTtBQUMzQixNQUFJLElBQUksR0FBSSxRQUFPLEdBQUcsQ0FBQztBQUN2QixRQUFNLElBQUksS0FBSyxNQUFNLElBQUksRUFBRTtBQUMzQixNQUFJLElBQUksR0FBSSxRQUFPLEdBQUcsQ0FBQztBQUN2QixRQUFNLElBQUksS0FBSyxNQUFNLElBQUksRUFBRTtBQUMzQixTQUFPLEdBQUcsQ0FBQztBQUNmO0FBRUEsU0FBUyxhQUFhLE1BQU07QUFDeEIsUUFBTSxJQUFJLE1BQU0sWUFBWTtBQUM1QixNQUFJLE9BQU8sTUFBTSxTQUFVLFFBQU87QUFDbEMsTUFBSSxPQUFPLE1BQU0sVUFBVTtBQUN2QixVQUFNLElBQUksS0FBSyxNQUFNLENBQUM7QUFDdEIsV0FBTyxPQUFPLFNBQVMsQ0FBQyxJQUFJLElBQUk7QUFBQSxFQUNwQztBQUNBLE1BQUksS0FBSyxPQUFPLE1BQU0sWUFBWSxFQUFFLFNBQVMsTUFBTTtBQUMvQyxRQUFJLE9BQU8sRUFBRSxVQUFVLFNBQVUsUUFBTyxFQUFFO0FBQzFDLFVBQU0sSUFBSSxLQUFLLE1BQU0sRUFBRSxLQUFLO0FBQzVCLFdBQU8sT0FBTyxTQUFTLENBQUMsSUFBSSxJQUFJO0FBQUEsRUFDcEM7QUFDQSxTQUFPO0FBQ1g7QUFFQSxTQUFTLFNBQVMsT0FBTztBQUNyQixNQUFJLFVBQVUsWUFBWSxhQUFjLFFBQU87QUFDL0MsTUFBSSxVQUFVLFlBQVksUUFBUyxRQUFPO0FBQzFDLE1BQUksVUFBVSxZQUFZLFFBQVMsUUFBTztBQUMxQyxTQUFPO0FBQ1g7QUFFQSxTQUFTLFdBQVcsT0FBTztBQUN2QixNQUFJLFVBQVUsWUFBWSxLQUFNLFFBQU87QUFDdkMsTUFBSSxVQUFVLFlBQVksVUFBVyxRQUFPO0FBQzVDLE1BQUksVUFBVSxZQUFZLFFBQVMsUUFBTztBQUMxQyxTQUFPLFNBQVMsS0FBSyxLQUFLO0FBQzlCO0FBRUEsU0FBUyxXQUFXLE9BQU87QUFDdkIsTUFBSSxVQUFVLFlBQVksVUFBVyxRQUFPLE1BQU07QUFDbEQsTUFDSSxVQUFVLFlBQVksZ0JBQ3RCLFVBQVUsWUFBWSxXQUN0QixVQUFVLFlBQVksU0FDeEI7QUFDRSxXQUFPLE1BQU07QUFBQSxFQUNqQjtBQUNBLFNBQU8sTUFBTTtBQUNqQjtBQU1BLFNBQVMsZ0JBQWdCLE1BQU07QUFDM0IsUUFBTSxLQUFLLE1BQU0sWUFBWTtBQUM3QixNQUFJLENBQUMsTUFBTSxPQUFPLE9BQU8sU0FBVSxRQUFPO0FBQzFDLFFBQU0sT0FBTyxPQUFPLEtBQUssRUFBRTtBQUMzQixNQUFJLEtBQUssV0FBVyxFQUFHLFFBQU87QUFDOUIsUUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDdEIsTUFBSSxPQUFPLEtBQU0sUUFBTztBQUN4QixRQUFNLElBQUksT0FBTyxHQUFHO0FBQ3BCLE1BQUksQ0FBQyxPQUFPLFNBQVMsQ0FBQyxFQUFHLFFBQU8sT0FBTyxHQUFHO0FBQzFDLE1BQUksS0FBSyxLQUFLLEtBQUssSUFBSyxRQUFPLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUMvQyxNQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBTSxRQUFPLEVBQUUsUUFBUSxDQUFDO0FBQzNDLE1BQUksS0FBSyxJQUFJLENBQUMsS0FBSyxHQUFJLFFBQU8sRUFBRSxRQUFRLENBQUM7QUFDekMsU0FBTyxFQUFFLFFBQVEsQ0FBQztBQUN0QjtBQUVBLFNBQVMsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLElBQUksR0FBRztBQUNoRCxRQUFNLEVBQUUsT0FBTyxNQUFNLElBQUksZUFBZSxLQUFLLFFBQVE7QUFDckQsUUFBTSxNQUFNLEtBQUssUUFBUSxRQUFRLEtBQUssUUFBUSxNQUFNO0FBQ3BELFFBQU0sUUFBUSxLQUFLLFFBQVEsS0FBSyxPQUFPLFFBQVE7QUFDL0MsUUFBTSxZQUFZLGFBQWEsSUFBSTtBQUNuQyxRQUFNLFFBQVEsYUFBYSxPQUFPLGNBQWMsTUFBTSxTQUFTLElBQUk7QUFDbkUsUUFBTSxRQUFRLGdCQUFnQixJQUFJO0FBQ2xDLFFBQU0sUUFBUSxXQUFXLEtBQUssS0FBSztBQUNuQyxTQUNJLGdCQUFBRixNQUFDQyxNQUFBLEVBQ0c7QUFBQSxvQkFBQUYsS0FBQ0UsTUFBQSxFQUFJLE9BQU8sR0FDUiwwQkFBQUYsS0FBQ0csT0FBQSxFQUFLLE9BQWMsTUFBSSxNQUNuQixpQkFDTCxHQUNKO0FBQUEsSUFDQSxnQkFBQUgsS0FBQ0UsTUFBQSxFQUFJLE9BQU8sWUFBWSxHQUNwQiwwQkFBQUYsS0FBQ0csT0FBQSxFQUFLLE9BQU8sTUFBTSxJQUFJLE1BQUssZ0JBQ3ZCLGVBQ0wsR0FDSjtBQUFBLElBQ0EsZ0JBQUFILEtBQUNFLE1BQUEsRUFBSSxVQUFVLEdBQUcsV0FBVyxHQUFHLFVBQVUsR0FDdEMsMEJBQUFGLEtBQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxNQUFLLGdCQUMxQixpQkFDTCxHQUNKO0FBQUEsSUFDQSxnQkFBQUgsS0FBQ0UsTUFBQSxFQUFJLE9BQU8sR0FBRyxnQkFBZSxZQUFXLFlBQVksR0FDakQsMEJBQUFGLEtBQUNHLE9BQUEsRUFBSyxPQUFPLFFBQVEsTUFBTSxLQUFLLE1BQU0sU0FDakMsbUJBQVMsVUFDZCxHQUNKO0FBQUEsSUFDQSxnQkFBQUgsS0FBQ0UsTUFBQSxFQUFJLE9BQU8sR0FBRyxnQkFBZSxZQUFXLFlBQVksR0FDakQsMEJBQUFGLEtBQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBUSxpQkFBTSxHQUNyQztBQUFBLElBQ0EsZ0JBQUFILEtBQUNFLE1BQUEsRUFBSSxPQUFPLEdBQUcsZ0JBQWUsWUFBVyxZQUFZLEdBQ2pELDBCQUFBRixLQUFDRyxPQUFBLEVBQUssT0FBTyxXQUFXLEtBQUssS0FBSyxHQUFJLGlCQUFNLEdBQ2hEO0FBQUEsS0FDSjtBQUVSO0FBb0NBLFNBQVMsc0JBQXNCLFNBQVM7QUFDcEMsUUFBTSxNQUFNLG9CQUFJLElBQUk7QUFDcEIsYUFBVyxLQUFLLFNBQVM7QUFDckIsVUFBTSxNQUFNLEVBQUUsV0FBVztBQUN6QixRQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRyxLQUFJLElBQUksS0FBSyxDQUFDLENBQUM7QUFDbEMsUUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLENBQUM7QUFBQSxFQUN2QjtBQUNBLFNBQU8sQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckU7QUFFQSxTQUFTLGtCQUFrQixHQUFHLE1BQU07QUFDaEMsTUFBSSxLQUFLLEtBQU0sUUFBTztBQUN0QixNQUFJLE1BQU0sUUFBUSxDQUFDLEVBQUcsUUFBTyxPQUFPLEVBQUUsTUFBTTtBQUM1QyxNQUFJLENBQUMsT0FBTyxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUcsUUFBTyxPQUFPLENBQUM7QUFDaEQsUUFBTSxJQUFJLE9BQU8sQ0FBQztBQUNsQixRQUFNLFVBQVUsS0FBSyxJQUFJLENBQUMsS0FBSyxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksRUFBRSxJQUFJO0FBQzFFLFFBQU0sWUFBWSxRQUFRLGVBQWUsT0FBTztBQUNoRCxTQUFPLE9BQU8sR0FBRyxTQUFTLElBQUksSUFBSSxLQUFLO0FBQzNDO0FBRUEsU0FBUyxpQkFBaUIsRUFBRSxRQUFRLE9BQU8sV0FBVyxHQUFHO0FBQ3JELFFBQU0sT0FBTyxhQUFhLEtBQUssT0FBTyxLQUFLLElBQUksSUFBSSxjQUFjLEdBQUksSUFBSTtBQUN6RSxRQUFNLGdCQUNGLFNBQVMsT0FBTyxVQUFVLFlBQVksQ0FBQyxNQUFNLFFBQVEsS0FBSztBQUM5RCxRQUFNLFVBQVUsZ0JBQ1YsT0FBTyxRQUFRLEtBQUssRUFBRTtBQUFBLElBQ2xCLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxPQUFPLFNBQVMsT0FBTyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSTtBQUFBLEVBQ3pELElBQ0EsQ0FBQztBQUNQLFFBQU0sUUFBUSxRQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQy9ELFFBQU0sU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQUEsSUFDeEIsQ0FBQyxHQUFHLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFDcEU7QUFDQSxTQUNJLGdCQUFBRSxNQUFDQyxNQUFBLEVBQUksZUFBYyxVQUNmO0FBQUEsb0JBQUFELE1BQUNDLE1BQUEsRUFDRztBQUFBLHNCQUFBQyxLQUFDRCxNQUFBLEVBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxVQUFVLEdBQ3RDLDBCQUFBQyxLQUFDQyxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sTUFBSyxnQkFDMUIsaUJBQU8sU0FBUyxPQUFPLE1BQzVCLEdBQ0o7QUFBQSxNQUNBLGdCQUFBRCxLQUFDRCxNQUFBLEVBQUksT0FBTyxHQUFHLGdCQUFlLFlBQzFCLDBCQUFBQyxLQUFDQyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQ2Qsa0JBQVEsT0FBTyxXQUFNLEdBQUcsSUFBSSxLQUNqQyxHQUNKO0FBQUEsT0FDSjtBQUFBLElBQ0MsT0FBTyxXQUFXLElBQ2YsZ0JBQUFELEtBQUNELE1BQUEsRUFBSSxZQUFZLEdBQ2IsMEJBQUFDLEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyw0QkFBYyxHQUM5QyxJQUVBLGdCQUFBSCxNQUFBSSxXQUFBLEVBQ0s7QUFBQSxhQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQ3BCLGNBQU0sUUFBUSxPQUFPLENBQUM7QUFDdEIsY0FBTSxNQUNGLFFBQVEsSUFBSSxLQUFLLE1BQU8sUUFBUSxRQUFTLEdBQUcsSUFBSTtBQUNwRCxlQUNJLGdCQUFBSixNQUFDQyxNQUFBLEVBQ0c7QUFBQSwwQkFBQUMsS0FBQ0QsTUFBQSxFQUFJLE9BQU8sR0FBRztBQUFBLFVBQ2YsZ0JBQUFDLEtBQUNELE1BQUEsRUFBSSxVQUFVLEdBQUcsV0FBVyxHQUFHLFVBQVUsR0FDdEMsMEJBQUFDLEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sSUFBSSxNQUFLLGdCQUN2QixhQUNMLEdBQ0o7QUFBQSxVQUNBLGdCQUFBRDtBQUFBLFlBQUNEO0FBQUEsWUFBQTtBQUFBLGNBQ0csT0FBTztBQUFBLGNBQ1AsZ0JBQWU7QUFBQSxjQUNmLGFBQWE7QUFBQSxjQUViLDBCQUFBQyxLQUFDQyxPQUFBLEVBQUssT0FBTyxNQUFNLFFBQVEsTUFBSSxNQUMxQixpQkFDTDtBQUFBO0FBQUEsVUFDSjtBQUFBLFVBQ0EsZ0JBQUFELEtBQUNELE1BQUEsRUFBSSxPQUFPLEdBQUcsZ0JBQWUsWUFDMUIsMEJBQUFELE1BQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBVTtBQUFBO0FBQUEsWUFBSTtBQUFBLGFBQUMsR0FDdEM7QUFBQSxhQWxCTSxDQW1CVjtBQUFBLE1BRVIsQ0FBQztBQUFBLE1BQ0QsZ0JBQUFILE1BQUNDLE1BQUEsRUFDRztBQUFBLHdCQUFBQyxLQUFDRCxNQUFBLEVBQUksT0FBTyxHQUFHO0FBQUEsUUFDZixnQkFBQUMsS0FBQ0QsTUFBQSxFQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsVUFBVSxHQUN0QywwQkFBQUMsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLG1CQUFLLEdBQ25DO0FBQUEsUUFDQSxnQkFBQUQ7QUFBQSxVQUFDRDtBQUFBLFVBQUE7QUFBQSxZQUNHLE9BQU87QUFBQSxZQUNQLGdCQUFlO0FBQUEsWUFDZixhQUFhO0FBQUEsWUFFYiwwQkFBQUMsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLE1BQUksTUFDekIsaUJBQ0w7QUFBQTtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdCQUFBRCxLQUFDRCxNQUFBLEVBQUksT0FBTyxHQUFHO0FBQUEsU0FDbkI7QUFBQSxPQUNKO0FBQUEsS0FFUjtBQUVSO0FBRUEsU0FBUyxpQkFBaUIsT0FBTztBQUM3QixRQUFNLGdCQUNGLFNBQVMsT0FBTyxVQUFVLFlBQVksQ0FBQyxNQUFNLFFBQVEsS0FBSztBQUM5RCxNQUFJLENBQUMsY0FBZSxRQUFPLENBQUM7QUFDNUIsU0FBTyxPQUFPLFFBQVEsS0FBSyxFQUN0QixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxPQUFPLFNBQVMsT0FBTyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQzdEO0FBQUEsSUFDRyxDQUFDLEdBQUcsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7QUFBQSxFQUNwRTtBQUNSO0FBTUEsU0FBUyxrQkFBa0I7QUFBQSxFQUN2QjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNKLEdBQUc7QUFDQyxRQUFNSSxhQUFZLEdBQUcsT0FBTyxPQUFPLElBQUksT0FBTyxJQUFJO0FBQ2xELFFBQU0sVUFBVSxjQUFjLE9BQU8sT0FBTyxHQUFHLFFBQVEsT0FBTyxXQUFXO0FBQ3pFLFFBQU0sU0FBU0MsU0FBUSxNQUFNLGlCQUFpQixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDN0QsUUFBTSxRQUFRLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDOUQsUUFBTSxDQUFDLGFBQWEsY0FBYyxJQUFJQyxVQUFTLEVBQUU7QUFFakQsUUFBTSxRQUFRLGFBQWE7QUFBQSxJQUN2QixJQUFJLG1CQUFtQkYsVUFBUztBQUFBLElBQ2hDLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLFVBQVUsQ0FBQyxPQUFPLFFBQVE7QUFDdEIsVUFBSSxPQUFPLFdBQVcsRUFBRztBQUN6QixVQUFJLElBQUksUUFBUTtBQUNaLHVCQUFlLEVBQUU7QUFDakI7QUFBQSxNQUNKO0FBQ0EsVUFBSSxJQUFJLFNBQVM7QUFDYjtBQUFBLFVBQWUsQ0FBQyxRQUNaLE1BQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ3JDO0FBQ0E7QUFBQSxNQUNKO0FBQ0EsVUFBSSxJQUFJLFdBQVc7QUFDZjtBQUFBLFVBQWUsQ0FBQyxRQUNaLE1BQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxPQUFPLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUNyRDtBQUNBO0FBQUEsTUFDSjtBQUNBLFVBQUksVUFBVSxJQUFLLFFBQU8sZUFBZSxDQUFDO0FBQzFDLFVBQUksVUFBVSxJQUFLLFFBQU8sZUFBZSxPQUFPLFNBQVMsQ0FBQztBQUFBLElBQzlEO0FBQUEsRUFDSixDQUFDO0FBS0QsRUFBQUcsV0FBVSxNQUFNO0FBQ1osUUFBSSxDQUFDLE1BQU0sUUFBUyxnQkFBZSxFQUFFO0FBQUEsRUFDekMsR0FBRyxDQUFDLE1BQU0sT0FBTyxDQUFDO0FBSWxCLEVBQUFBLFdBQVUsTUFBTTtBQUNaLFFBQUksZUFBZSxLQUFLLGVBQWUsT0FBTyxRQUFRO0FBQ2xELHFCQUFlLE9BQU8sV0FBVyxJQUFJLEtBQUssT0FBTyxTQUFTLENBQUM7QUFBQSxJQUMvRDtBQUFBLEVBQ0osR0FBRyxDQUFDLE9BQU8sUUFBUSxXQUFXLENBQUM7QUFFL0IsUUFBTSxnQkFDRixNQUFNLFdBQVcsZUFBZSxLQUFLLE9BQU8sV0FBVyxJQUNqRCxPQUFPLFdBQVcsRUFBRSxDQUFDLElBQ3JCO0FBS1YsUUFBTSxpQkFBaUJDLFFBQU8sS0FBSztBQUNuQyxFQUFBRCxXQUFVLE1BQU07QUFDWixRQUFJLGlCQUFpQixNQUFNO0FBQ3ZCLHVCQUFpQjtBQUFBLFFBQ2IsU0FBUyxPQUFPO0FBQUEsUUFDaEIsV0FBQUg7QUFBQSxRQUNBLFFBQVE7QUFBQSxRQUNSLE9BQU8sT0FBTyxTQUFTLE9BQU87QUFBQSxNQUNsQyxDQUFDO0FBQ0QscUJBQWUsVUFBVTtBQUFBLElBQzdCLFdBQVcsZUFBZSxTQUFTO0FBQy9CLHFCQUFlLFVBQVU7QUFDekIsdUJBQWlCLE1BQU1BLFVBQVM7QUFBQSxJQUNwQztBQUFBLEVBQ0osR0FBRztBQUFBLElBQ0M7QUFBQSxJQUNBQTtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1A7QUFBQSxFQUNKLENBQUM7QUFFRCxRQUFNLGdCQUFnQixPQUFPO0FBQzdCLFFBQU0sVUFBVSxLQUFLLElBQUksU0FBUyxhQUFhO0FBQy9DLE1BQUksUUFBUTtBQUNaLE1BQUksZ0JBQWdCLFdBQVcsZUFBZSxHQUFHO0FBQzdDLFVBQU0sT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDO0FBQ25DLFlBQVEsS0FBSztBQUFBLE1BQ1Q7QUFBQSxNQUNBLEtBQUssSUFBSSxjQUFjLE1BQU0sZ0JBQWdCLE9BQU87QUFBQSxJQUN4RDtBQUFBLEVBQ0o7QUFDQSxRQUFNLE1BQU0sS0FBSyxJQUFJLGVBQWUsUUFBUSxPQUFPO0FBQ25ELFFBQU0sUUFBUSxPQUFPLE1BQU0sT0FBTyxHQUFHO0FBQ3JDLFFBQU0sY0FBYztBQUNwQixRQUFNLGNBQWMsZ0JBQWdCO0FBQ3BDLFFBQU0sT0FBTyxhQUFhLEtBQUssT0FBTyxLQUFLLElBQUksSUFBSSxjQUFjLEdBQUksSUFBSTtBQUN6RSxRQUFNLHNCQUFzQixvQkFBb0JBO0FBRWhELFNBQ0ksZ0JBQUFIO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxRQUFRLE9BQU8sU0FBUyxPQUFPLE1BQU0sWUFBWTtBQUFBLE1BQ2pELEtBQUssZ0JBQWdCLElBQUksR0FBRyxhQUFhLEtBQUs7QUFBQSxNQUM5QyxTQUFTLE1BQU07QUFBQSxNQUNmLE9BQ0ksZ0JBQUFGLE1BQUNHLE9BQUEsRUFDSTtBQUFBLCtCQUNHLGdCQUFBRCxLQUFDQyxPQUFBLEVBQUssT0FBTyxNQUFNLFFBQVEscUJBQUU7QUFBQSxRQUVqQyxnQkFBQUQsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFVLG1CQUFRO0FBQUEsUUFDcEMsUUFBUSxRQUNMLGdCQUFBSCxNQUFDRyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVM7QUFBQTtBQUFBLFVBQUk7QUFBQSxVQUFLO0FBQUEsV0FBQztBQUFBLFNBRTlDO0FBQUEsTUFFSixVQUFVO0FBQUEsTUFDVixZQUFZO0FBQUEsTUFFWCxpQkFBTyxXQUFXLElBQ2YsZ0JBQUFELEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyw0QkFBYyxJQUUxQyxnQkFBQUgsTUFBQUksV0FBQSxFQUNLO0FBQUEsc0JBQWMsS0FDWCxnQkFBQUosTUFBQ0csT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTO0FBQUE7QUFBQSxVQUFHO0FBQUEsVUFBWTtBQUFBLFdBQUs7QUFBQSxRQUVuRCxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU07QUFDdEIsZ0JBQU0sTUFBTSxRQUFRO0FBQ3BCLGdCQUFNLFFBQVEsUUFBUSxlQUFlLE1BQU07QUFDM0MsZ0JBQU0sUUFBUSxPQUFPLENBQUM7QUFDdEIsZ0JBQU0sTUFDRixRQUFRLElBQUksS0FBSyxNQUFPLFFBQVEsUUFBUyxHQUFHLElBQUk7QUFDcEQsaUJBQ0ksZ0JBQUFIO0FBQUEsWUFBQ0M7QUFBQSxZQUFBO0FBQUEsY0FFRyxpQkFBaUIsUUFBUSxZQUFZO0FBQUEsY0FFckM7QUFBQSxnQ0FBQUMsS0FBQ0QsTUFBQSxFQUFJLE9BQU8sR0FDUiwwQkFBQUMsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sUUFBUSxNQUFNLFNBQVMsUUFDL0Isa0JBQVEsV0FBTSxLQUNuQixHQUNKO0FBQUEsZ0JBQ0EsZ0JBQUFELEtBQUNELE1BQUEsRUFBSSxVQUFVLEdBQUcsV0FBVyxHQUFHLFVBQVUsR0FDdEMsMEJBQUFDO0FBQUEsa0JBQUNDO0FBQUEsa0JBQUE7QUFBQSxvQkFDRyxPQUFPLFFBQVEsTUFBTSxLQUFLLE1BQU07QUFBQSxvQkFDaEMsTUFBSztBQUFBLG9CQUVKO0FBQUE7QUFBQSxnQkFDTCxHQUNKO0FBQUEsZ0JBQ0EsZ0JBQUFEO0FBQUEsa0JBQUNEO0FBQUEsa0JBQUE7QUFBQSxvQkFDRyxPQUFPO0FBQUEsb0JBQ1AsZ0JBQWU7QUFBQSxvQkFDZixhQUFhO0FBQUEsb0JBRWIsMEJBQUFDLEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sUUFBUSxNQUFJLE1BQzFCLGlCQUNMO0FBQUE7QUFBQSxnQkFDSjtBQUFBLGdCQUNBLGdCQUFBRCxLQUFDRCxNQUFBLEVBQUksT0FBTyxHQUFHLGdCQUFlLFlBQzFCLDBCQUFBRCxNQUFDRyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVU7QUFBQTtBQUFBLGtCQUFJO0FBQUEsbUJBQUMsR0FDdEM7QUFBQTtBQUFBO0FBQUEsWUEzQks7QUFBQSxVQTRCVDtBQUFBLFFBRVIsQ0FBQztBQUFBLFFBQ0EsY0FBYyxLQUNYLGdCQUFBSCxNQUFDRyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVM7QUFBQTtBQUFBLFVBQUc7QUFBQSxVQUFZO0FBQUEsV0FBSztBQUFBLFNBRXhEO0FBQUE7QUFBQSxFQUVSO0FBRVI7QUFFQSxTQUFTTyxXQUFVLEVBQUUsUUFBUSxPQUFPLFNBQVMsV0FBVyxHQUFHO0FBQ3ZELE1BQUksT0FBTyxnQkFBZ0IsZ0JBQWdCO0FBQ3ZDLFdBQ0ksZ0JBQUFSO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUE7QUFBQSxJQUNKO0FBQUEsRUFFUjtBQUNBLFFBQU0sT0FBTyxhQUFhLEtBQUssT0FBTyxLQUFLLElBQUksSUFBSSxjQUFjLEdBQUksSUFBSTtBQUN6RSxRQUFNLGdCQUFnQixPQUFPLGtCQUFrQjtBQUcvQyxRQUFNLFdBQVcsZ0JBQ1gsS0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFDaEU7QUFDTixTQUNJLGdCQUFBRixNQUFDQyxNQUFBLEVBQ0c7QUFBQSxvQkFBQUMsS0FBQ0QsTUFBQSxFQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsVUFBVSxHQUN0QywwQkFBQUMsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLE1BQUssZ0JBQzFCLGlCQUFPLFNBQVMsT0FBTyxNQUM1QixHQUNKO0FBQUEsSUFDQyxpQkFDRyxnQkFBQUQsS0FBQ0QsTUFBQSxFQUFJLGFBQWEsR0FDZCwwQkFBQUM7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLFFBQVE7QUFBQSxRQUNSLE9BQU87QUFBQSxRQUNQLE9BQU8sTUFBTTtBQUFBLFFBQ2IsS0FBSztBQUFBO0FBQUEsSUFDVCxHQUNKO0FBQUEsSUFFSixnQkFBQUEsS0FBQ0QsTUFBQSxFQUFJLE9BQU8sSUFBSSxnQkFBZSxZQUFXLGFBQWEsR0FDbkQsMEJBQUFDLEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sUUFBUSxNQUFJLE1BQzFCLDRCQUFrQixPQUFPLE9BQU8sSUFBSSxHQUN6QyxHQUNKO0FBQUEsSUFDQSxnQkFBQUQsS0FBQ0QsTUFBQSxFQUFJLE9BQU8sR0FBRyxnQkFBZSxZQUMxQiwwQkFBQUMsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFVLGtCQUFRLE9BQU8sV0FBTSxHQUFHLElBQUksS0FBSSxHQUNqRTtBQUFBLEtBQ0o7QUFFUjtBQUVPLFNBQVMsWUFBWTtBQUFBLEVBQ3hCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0osR0FBRztBQUNDLGNBQVksVUFBVTtBQUN0QixRQUFNLEVBQUUsT0FBTyxJQUFJUSxXQUFVO0FBTTdCLFFBQU0sQ0FBQyxjQUFjLGVBQWUsSUFBSUosVUFBUyxNQUFNLFFBQVEsUUFBUSxFQUFFO0FBQ3pFLEVBQUFDLFdBQVUsTUFBTTtBQUNaLFFBQUksQ0FBQyxPQUFRO0FBQ2IsVUFBTSxTQUFTLE1BQU0sZ0JBQWdCLE9BQU8sUUFBUSxFQUFFO0FBQ3RELFdBQU87QUFDUCxXQUFPLEdBQUcsVUFBVSxNQUFNO0FBQzFCLFdBQU8sTUFBTSxPQUFPLElBQUksVUFBVSxNQUFNO0FBQUEsRUFDNUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUtYLFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUQsVUFBUyxNQUFNO0FBRWpELFFBQU0sUUFBUSxhQUFhO0FBQUEsSUFDdkIsSUFBSTtBQUFBLElBQ0osUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sVUFBVSxDQUFDLE9BQU8sUUFBUTtBQUN0QixVQUFJLFVBQVUsSUFBSyxRQUFPLGdCQUFnQjtBQUMxQyxVQUFJLFVBQVUsSUFBSyxRQUFPLGNBQWM7QUFDeEMsVUFBSSxJQUFJLFVBQVUsV0FBWSxRQUFPLGtCQUFrQjtBQUFBLElBQzNEO0FBQUEsRUFDSixDQUFDO0FBQ0QsUUFBTSxzQkFBc0IsUUFBUSxXQUFXLFVBQVUsS0FBSztBQUM5RCxRQUFNLGNBQWMsYUFBYTtBQUFBLElBQzdCLElBQUk7QUFBQSxJQUNKLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLFVBQVUsQ0FBQyxVQUFVO0FBQ2pCLFVBQUksVUFBVSxPQUFPLG9CQUFvQjtBQUNyQyxxQkFBYSxDQUFDLE1BQU8sTUFBTSxTQUFTLGFBQWEsTUFBTztBQUFBLE1BQzVEO0FBQUEsSUFDSjtBQUFBLEVBQ0osQ0FBQztBQUNELFFBQU0sZ0JBQWdCLGFBQWE7QUFBQSxJQUMvQixJQUFJO0FBQUEsSUFDSixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsSUFDTixVQUFVLENBQUMsVUFBVTtBQUNqQixVQUFJLFVBQVUsSUFBSyxvQkFBbUI7QUFBQSxJQUMxQztBQUFBLEVBQ0osQ0FBQztBQUNELFFBQU0sU0FBU0Q7QUFBQSxJQUNYLE1BQU0sWUFBWSxTQUFTLHFCQUFxQjtBQUFBLElBQ2hELENBQUMsU0FBUyxxQkFBcUI7QUFBQSxFQUNuQztBQUNBLFFBQU0saUJBQWlCLFFBQVEsYUFBYSxDQUFDO0FBQzdDLFFBQU0sY0FBY0EsU0FBUSxNQUFNO0FBQzlCLFVBQU0sTUFBTSxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLEtBQUssRUFBRTtBQUMvQyxlQUFXLEtBQUssZ0JBQWdCO0FBQzVCLFVBQUksRUFBRSxhQUFhTSxnQkFBZSxTQUFVLEtBQUk7QUFBQSxlQUN2QyxFQUFFLGFBQWFBLGdCQUFlLEtBQU0sS0FBSTtBQUFBLGVBQ3hDLEVBQUUsYUFBYUEsZ0JBQWUsT0FBUSxLQUFJO0FBQUEsVUFDOUMsS0FBSTtBQUFBLElBQ2I7QUFDQSxXQUFPO0FBQUEsRUFDWCxHQUFHLENBQUMsY0FBYyxDQUFDO0FBQ25CLFFBQU0sbUJBQW1CTixTQUFRLE1BQU07QUFDbkMsVUFBTSxNQUFNLEVBQUUsUUFBUSxHQUFHLEtBQUssR0FBRyxTQUFTLEdBQUcsU0FBUyxFQUFFO0FBQ3hELGVBQVcsS0FBSyxnQkFBZ0I7QUFDNUIsVUFBSSxFQUFFLFVBQVUsWUFBWSxhQUFjLEtBQUk7QUFBQSxlQUNyQyxFQUFFLFVBQVUsWUFBWSxRQUFTLEtBQUk7QUFBQSxlQUNyQyxFQUFFLFVBQVUsWUFBWSxRQUFTLEtBQUk7QUFBQSxVQUN6QyxLQUFJO0FBQUEsSUFDYjtBQUNBLFdBQU87QUFBQSxFQUNYLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFLbkIsUUFBTSxjQUFjQSxTQUFRLE1BQU07QUFDOUIsVUFBTSxTQUFTLG9CQUFJLElBQUk7QUFDdkIsZUFBVyxLQUFLLGdCQUFnQjtBQUM1QixZQUFNLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxRQUFRO0FBQ3ZDLFlBQU0sTUFBTTtBQUFBLFFBQ1IsTUFBTSxFQUFFLFFBQVEsUUFBUSxFQUFFLFFBQVEsTUFBTTtBQUFBLFFBQ3hDLE9BQU8sZ0JBQWdCLENBQUM7QUFBQSxRQUN4QixPQUFPLEVBQUU7QUFBQSxRQUNULFdBQVcsYUFBYSxDQUFDO0FBQUEsTUFDN0I7QUFDQSxZQUFNLE1BQU0sRUFBRSxZQUFZTSxnQkFBZTtBQUN6QyxZQUFNLE1BQU0sT0FBTyxJQUFJLEdBQUc7QUFDMUIsVUFBSSxLQUFLO0FBQ0wsWUFBSSxTQUFTO0FBQ2IsWUFBSSxRQUFRLEtBQUssR0FBRztBQUNwQixZQUFJLE1BQU0sSUFBSSxTQUFVLEtBQUksV0FBVztBQUFBLE1BQzNDLE9BQU87QUFDSCxlQUFPLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxPQUFPLEdBQUcsVUFBVSxLQUFLLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUFBLE1BQzFFO0FBQUEsSUFDSjtBQUNBLFdBQU8sQ0FBQyxHQUFHLE9BQU8sT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUN2QyxVQUFJLEVBQUUsYUFBYSxFQUFFLFNBQVUsUUFBTyxFQUFFLFdBQVcsRUFBRTtBQUNyRCxhQUFPLEVBQUUsUUFBUSxFQUFFO0FBQUEsSUFDdkIsQ0FBQztBQUFBLEVBQ0wsR0FBRyxDQUFDLGNBQWMsQ0FBQztBQUNuQixRQUFNLFdBQVdOLFNBQVEsTUFBTSxtQkFBbUIsU0FBUyxPQUFPLEdBQUcsQ0FBQyxTQUFTLE9BQU8sQ0FBQztBQUN2RixRQUFNLFFBQVFBLFNBQVEsTUFBTSxpQkFBaUIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBSWhFLFFBQU0saUJBQWlCQTtBQUFBLElBQ25CLE1BQ0ksS0FBSztBQUFBLE1BQ0Q7QUFBQSxNQUNBLGVBQWU7QUFBQSxRQUNYLENBQUMsR0FBRyxNQUNBLEtBQUssSUFBSSxJQUFJLEVBQUUsUUFBUSxRQUFRLEVBQUUsUUFBUSxNQUFNLElBQUksTUFBTTtBQUFBLFFBQzdEO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxJQUNKLENBQUMsY0FBYztBQUFBLEVBQ25CO0FBQ0EsUUFBTSxRQUFRLEtBQUssSUFBSTtBQUV2QixRQUFNLFVBQVUsUUFBUSxLQUFLLEtBQUssRUFBRTtBQUNwQyxRQUFNLFVBQVUsUUFBUSxLQUFLLEtBQUssRUFBRTtBQUNwQyxRQUFNLFdBQVcsUUFBUSxNQUFNLEtBQUssRUFBRTtBQUV0QyxRQUFNLGNBQWMsS0FBSyxJQUFJLEdBQUcsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQU03RCxRQUFNLFdBQVcsU0FBUyxDQUFDLElBQUksQ0FBQztBQUNoQyxRQUFNLFVBQVUsTUFBTTtBQUNsQixRQUFJLENBQUMsbUJBQW9CLFFBQU8sWUFBWTtBQUM1QyxRQUFJLENBQUMsU0FBVSxRQUFPO0FBQ3RCLFdBQU8scUJBQXFCLG9CQUFvQixRQUFRLEtBQUssSUFDdkQscUJBQ0E7QUFBQSxFQUNWLEdBQUc7QUFDSCxRQUFNLGNBQWMsU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUN6QyxRQUFJO0FBQ0osUUFBSSxDQUFDLFVBQVUsTUFBTSxPQUFRLFNBQVE7QUFBQSxTQUNoQztBQUNELFlBQU0sT0FBTyxxQkFBcUIsR0FBRyxNQUFNO0FBSTNDLGNBQVEsT0FBTyxJQUFJLFFBQVE7QUFBQSxJQUMvQjtBQUNBLFdBQU8sRUFBRSxHQUFHLEdBQUcsTUFBTTtBQUFBLEVBQ3pCLENBQUM7QUFFRCxNQUFJLFVBQVU7QUFDZCxhQUFXLE9BQU8sYUFBYTtBQUMzQixRQUFJLElBQUksVUFBVSxTQUFVO0FBQzVCLFFBQUksQ0FBQyxTQUFTO0FBQ1YsVUFBSSxRQUFRO0FBQ1osZ0JBQVU7QUFBQSxJQUNkLE9BQU87QUFDSCxVQUFJLFFBQVE7QUFBQSxJQUNoQjtBQUFBLEVBQ0o7QUFDQSxRQUFNLFFBQ0YsT0FBTyxrQkFBa0IsV0FDbkIsZ0JBQ0EsU0FDSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sVUFBVSxNQUFNLFVBQVUscUJBQXFCLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUU1QyxTQUNJLGdCQUFBTixNQUFDQyxNQUFBLEVBQUksVUFBVSxHQUVYO0FBQUEsb0JBQUFELE1BQUNDLE1BQUEsRUFBSSxPQUFNLE9BQU0sZUFBYyxVQUMzQjtBQUFBLHNCQUFBRCxNQUFDLFNBQU0sT0FBTSxTQUFRLEtBQUksWUFBVyxPQUFPLGdCQUFBRSxLQUFDQyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMsMEJBQVksR0FBUyxVQUFVLEdBQUcsWUFBWSxHQUNqSDtBQUFBLHdCQUFBSCxNQUFDQyxNQUFBLEVBQUksZUFBYyxPQUFNLGNBQWMsR0FDbkM7QUFBQSwwQkFBQUMsS0FBQyxPQUFJLE9BQU0sVUFBUyxPQUFPLE9BQU8sUUFBUSxPQUFPLE1BQU0sTUFBTSxRQUFRLE1BQU0sT0FBTyxLQUFLLElBQUk7QUFBQSxVQUMzRixnQkFBQUEsS0FBQyxPQUFJLE9BQU0sV0FBVSxPQUFPLE9BQU8sU0FBUyxPQUFPLE1BQU0sT0FBTztBQUFBLFVBQ2hFLGdCQUFBQSxLQUFDLE9BQUksT0FBTSxZQUFXLE9BQU8sT0FBTyxNQUFNLE9BQU8sT0FBTyxPQUFPLE1BQU0sUUFBUSxNQUFNLE9BQU87QUFBQSxVQUMxRixnQkFBQUEsS0FBQyxPQUFJLE9BQU0sWUFBVyxPQUFPLE9BQU8sS0FBSyxPQUFPLE9BQU8sTUFBTSxNQUFNLE1BQU0sTUFBTSxPQUFPO0FBQUEsV0FDMUY7QUFBQSxRQUNBLGdCQUFBRixNQUFDQyxNQUFBLEVBQUksZUFBYyxVQUFTLFdBQVcsR0FDbkM7QUFBQSwwQkFBQUMsS0FBQyxjQUFXLE9BQU0sT0FBTSxPQUFPLFNBQVMsU0FBUyxRQUFRLEtBQUssT0FBTyxNQUFNLFFBQVE7QUFBQSxVQUNuRixnQkFBQUEsS0FBQyxjQUFXLE9BQU0sT0FBTSxPQUFPLFNBQVMsU0FBUyxRQUFRLEtBQUssT0FBTyxNQUFNLFNBQVM7QUFBQSxVQUNwRixnQkFBQUEsS0FBQyxjQUFXLE9BQU0sUUFBTyxPQUFPLFVBQVUsU0FBUyxRQUFRLE1BQU0sT0FBTyxNQUFNLE1BQU07QUFBQSxXQUN4RjtBQUFBLFFBQ0MsTUFBTSxTQUFTLEtBQ1osZ0JBQUFBLEtBQUNELE1BQUEsRUFBSSxXQUFXLEdBQUcsZUFBYyxVQUM1QixnQkFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQy9CLGdCQUFNLGVBQWUsTUFBTTtBQUMzQixnQkFBTSxRQUFRLGVBQ1IsZUFDQSxjQUFjLENBQUMsR0FBRyxRQUFRO0FBQ2hDLGlCQUNJLGdCQUFBRCxNQUFDQyxNQUFBLEVBQ0c7QUFBQSw0QkFBQUMsS0FBQ0QsTUFBQSxFQUFJLFVBQVUsR0FBRyxXQUFXLEdBQUcsVUFBVSxHQUN0QywwQkFBQUM7QUFBQSxjQUFDQztBQUFBLGNBQUE7QUFBQSxnQkFDRyxPQUNJLGVBQWUsTUFBTSxVQUFVLE1BQU07QUFBQSxnQkFFekMsTUFBSztBQUFBLGdCQUNMLFFBQVE7QUFBQSxnQkFFUDtBQUFBO0FBQUEsWUFDTCxHQUNKO0FBQUEsWUFDQSxnQkFBQUQsS0FBQ0QsTUFBQSxFQUFJLE9BQU8sR0FBRyxnQkFBZSxZQUMxQiwwQkFBQUM7QUFBQSxjQUFDQztBQUFBLGNBQUE7QUFBQSxnQkFDRyxPQUNJLGVBQWUsTUFBTSxRQUFRLE1BQU07QUFBQSxnQkFFdkMsTUFBTSxDQUFDO0FBQUEsZ0JBRU47QUFBQTtBQUFBLFlBQ0wsR0FDSjtBQUFBLGVBckJNLENBc0JWO0FBQUEsUUFFUixDQUFDLEdBQ0w7QUFBQSxTQUVSO0FBQUEsTUFDQyxnQkFBZ0IsU0FBUyxTQUFTLEtBQy9CO0FBQUEsUUFDSSxlQUFlLFFBQVE7QUFBQSxVQUNuQixDQUFDLE1BQU0sRUFBRSxrQkFBa0I7QUFBQSxRQUMvQjtBQUFBLE1BQ0osRUFBRTtBQUFBLFFBQ0UsQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFNO0FBQ2pCLGdCQUFNLFVBQ0YsY0FBYyxPQUFPLEdBQUcsUUFBUSxXQUFXO0FBQy9DLGlCQUNJLGdCQUFBRDtBQUFBLFlBQUM7QUFBQTtBQUFBLGNBRUcsT0FBTyxRQUFRLFlBQVk7QUFBQSxjQUMzQixLQUFLLEdBQUcsS0FBSyxNQUFNO0FBQUEsY0FDbkIsT0FDSSxlQUFlLFFBQ1gsZ0JBQUFBLEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sS0FBSyxpQkFBRyxJQUUzQixnQkFBQUQsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFVLG1CQUFRO0FBQUEsY0FHN0MsVUFBVTtBQUFBLGNBQ1YsWUFBWTtBQUFBLGNBRVgsZUFBSyxJQUFJLENBQUMsTUFBTTtBQUNiLHNCQUFNLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxFQUFFLElBQUk7QUFDaEMsdUJBQ0ksZ0JBQUFEO0FBQUEsa0JBQUNRO0FBQUEsa0JBQUE7QUFBQSxvQkFFRyxRQUFRO0FBQUEsb0JBQ1IsT0FBTyxlQUFlLE9BQU8sQ0FBQztBQUFBLG9CQUM5QixTQUFTLGVBQWUsVUFBVSxDQUFDO0FBQUEsb0JBQ25DLFlBQVksZUFBZSxXQUFXLENBQUM7QUFBQTtBQUFBLGtCQUpsQztBQUFBLGdCQUtUO0FBQUEsY0FFUixDQUFDO0FBQUE7QUFBQSxZQXhCSTtBQUFBLFVBeUJUO0FBQUEsUUFFUjtBQUFBLE1BQ0o7QUFBQSxNQUNKLGdCQUFBVjtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csT0FBTTtBQUFBLFVBQ04sS0FBSyxlQUFlLFNBQVMsSUFBSSxHQUFHLGVBQWUsTUFBTSxLQUFLO0FBQUEsVUFDOUQsU0FBUyxZQUFZO0FBQUEsVUFDckIsT0FDSSxlQUFlLFNBQVMsSUFDcEIsZ0JBQUFBLE1BQUNHLE9BQUEsRUFDSTtBQUFBLDZCQUFpQixNQUNkLGlCQUFpQixVQUNqQixpQkFBaUIsVUFDakIsS0FDQSxnQkFBQUgsTUFBQ0csT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUNkO0FBQUEsK0JBQWlCLE1BQU0sS0FDcEIsR0FBRyxpQkFBaUIsR0FBRztBQUFBLGNBQzFCLGlCQUFpQixVQUFVLEtBQ3hCLEdBQUcsaUJBQWlCLE9BQU87QUFBQSxjQUM5QixpQkFBaUIsVUFBVSxLQUN4QixHQUFHLGlCQUFpQixPQUFPO0FBQUEsY0FDL0IsZ0JBQUFELEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxtQkFBRTtBQUFBLGVBQ2xDO0FBQUEsWUFFSixnQkFBQUQsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLGdCQUFFO0FBQUEsWUFDOUIsZ0JBQUFELEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sUUFBUyxxQkFBVTtBQUFBLGFBQzFDLElBQ0E7QUFBQSxVQUdQO0FBQUEsb0JBQVEsU0FDTCxnQkFBQUQsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxLQUFLLE1BQUssZ0JBQ3hCLGlCQUFPLE9BQU8sV0FBVyx5QkFDOUI7QUFBQSxZQUVILENBQUMsUUFBUSxTQUFTLGVBQWUsV0FBVyxLQUN6QyxnQkFBQUQsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUNkLGtCQUFRLFVBQVUseUJBQW9CLG9CQUMzQztBQUFBLFlBRUgsZUFBZSxTQUFTLEtBQ3JCLGdCQUFBSCxNQUFBSSxXQUFBLEVBQ0k7QUFBQSw4QkFBQUosTUFBQ0MsTUFBQSxFQUFJLGVBQWMsT0FBTSxjQUFjLEdBQ25DO0FBQUEsZ0NBQUFDO0FBQUEsa0JBQUM7QUFBQTtBQUFBLG9CQUNHLE9BQU07QUFBQSxvQkFDTixPQUFPLFlBQVk7QUFBQSxvQkFDbkIsT0FBTyxZQUFZLE9BQU8sTUFBTSxNQUFNLE1BQU07QUFBQTtBQUFBLGdCQUNoRDtBQUFBLGdCQUNBLGdCQUFBQTtBQUFBLGtCQUFDO0FBQUE7QUFBQSxvQkFDRyxPQUFNO0FBQUEsb0JBQ04sT0FBTyxZQUFZO0FBQUEsb0JBQ25CLE9BQU8sWUFBWSxPQUFPLE1BQU0sTUFBTSxNQUFNO0FBQUE7QUFBQSxnQkFDaEQ7QUFBQSxnQkFDQSxnQkFBQUE7QUFBQSxrQkFBQztBQUFBO0FBQUEsb0JBQ0csT0FBTTtBQUFBLG9CQUNOLE9BQU8sWUFBWTtBQUFBLG9CQUNuQixPQUFPLFlBQVksTUFBTSxNQUFNLFFBQVEsTUFBTTtBQUFBO0FBQUEsZ0JBQ2pEO0FBQUEsZ0JBQ0EsZ0JBQUFBO0FBQUEsa0JBQUM7QUFBQTtBQUFBLG9CQUNHLE9BQU07QUFBQSxvQkFDTixPQUFPLFlBQVk7QUFBQSxvQkFDbkIsT0FBTyxZQUFZLE1BQU0sTUFBTSxTQUFTLE1BQU07QUFBQTtBQUFBLGdCQUNsRDtBQUFBLGlCQUNKO0FBQUEsY0FDQyxjQUFjLFNBQ1QsWUFBWSxJQUFJLENBQUMsTUFDYixnQkFBQUEsS0FBQyxpQkFBMkIsT0FBTyxHQUFHLEtBQUssU0FBdkIsRUFBRSxJQUE0QixDQUNyRCxJQUNELGVBQWUsSUFBSSxDQUFDLFNBQ2hCLGdCQUFBQTtBQUFBLGdCQUFDO0FBQUE7QUFBQSxrQkFFRztBQUFBLGtCQUNBLFdBQVc7QUFBQSxrQkFDWCxLQUFLO0FBQUE7QUFBQSxnQkFIQSxLQUFLO0FBQUEsY0FJZCxDQUNIO0FBQUEsZUFDWDtBQUFBO0FBQUE7QUFBQSxNQUVSO0FBQUEsT0FDSjtBQUFBLElBR0EsZ0JBQUFBLEtBQUNELE1BQUEsRUFBSSxPQUFNLE9BQU0sZUFBYyxVQUMzQiwwQkFBQUM7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFTO0FBQUEsUUFDVCxPQUFPO0FBQUEsUUFDUCxTQUFTLE1BQU07QUFBQSxRQUNmO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsZ0JBQWdCLGdCQUFnQjtBQUFBO0FBQUEsSUFDcEMsR0FDSjtBQUFBLElBR0EsZ0JBQUFGLE1BQUNDLE1BQUEsRUFBSSxPQUFNLE9BQU0sZUFBYyxVQUMzQjtBQUFBLHNCQUFBRDtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0csT0FBTTtBQUFBLFVBQ04sS0FBSyxTQUFTLFVBQVUsTUFBTSxLQUFLO0FBQUEsVUFDbkMsU0FBUyxjQUFjO0FBQUEsVUFDdkIsT0FDSSxjQUFjLFVBQVUsWUFDcEIsZ0JBQUFFLEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sUUFBUSw0QkFBUyxJQUNwQyxRQUFRLElBQ1IsZ0JBQUFELEtBQUNDLE9BQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyw0QkFBVyxJQUN2QztBQUFBLFVBRVIsVUFBVTtBQUFBLFVBQ1YsWUFBWTtBQUFBLFVBRVg7QUFBQSx3QkFBWSxXQUFXLEtBQ3BCLGdCQUFBRCxLQUFDQyxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMsdUNBQW9CO0FBQUEsWUFFbkQsWUFBWSxJQUFJLENBQUMsTUFDZCxnQkFBQUQ7QUFBQSxjQUFDO0FBQUE7QUFBQSxnQkFFRyxHQUFHLEVBQUU7QUFBQSxnQkFDTCxPQUFPLEVBQUU7QUFBQSxnQkFDVCxLQUFLO0FBQUEsZ0JBQ0wsT0FBTyxFQUFFO0FBQUE7QUFBQSxjQUpKLEVBQUU7QUFBQSxZQUtYLENBQ0g7QUFBQSxZQUNBLGNBQWMsVUFBVSxhQUFhLGFBQWEsWUFDL0MsZ0JBQUFGLE1BQUNDLE1BQUEsRUFBSSxXQUFXLEdBQ1o7QUFBQSw4QkFBQUMsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxRQUFRLHFCQUFFO0FBQUEsY0FDN0IsZ0JBQUFILE1BQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sSUFBSTtBQUFBO0FBQUEsZ0JBQ1QsYUFBYSxTQUFTO0FBQUEsZ0JBQUs7QUFBQSxnQkFBRSxhQUFhLFNBQVM7QUFBQSxnQkFBTTtBQUFBLGlCQUN2RTtBQUFBLGVBQ0o7QUFBQSxZQUVILGNBQWMsVUFBVSxVQUFVLGFBQWEsV0FDNUMsZ0JBQUFILE1BQUNDLE1BQUEsRUFBSSxXQUFXLEdBQ1o7QUFBQSw4QkFBQUMsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sYUFBYSxVQUFVLE1BQU0sUUFBUSxNQUFNLE1BQ25ELHVCQUFhLFVBQVUsWUFBTyxXQUNuQztBQUFBLGNBQ0EsZ0JBQUFILE1BQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sSUFDZDtBQUFBLDZCQUFhLFFBQVE7QUFBQSxnQkFBRztBQUFBLGdCQUFPLGFBQWEsUUFBUTtBQUFBLGdCQUFPO0FBQUEsZ0JBQzNELGFBQWEsVUFBVSxLQUFLLGFBQWEsTUFBTSxNQUFNO0FBQUEsaUJBQzFEO0FBQUEsZUFDSjtBQUFBLFlBRUgsY0FBYyxVQUFVLGFBQ3JCLGNBQWMsVUFBVSxVQUN4QixRQUFRLEtBQ0osZ0JBQUFILE1BQUNDLE1BQUEsRUFBSSxXQUFXLEdBQ1o7QUFBQSw4QkFBQUMsS0FBQ0MsT0FBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLHFCQUFFO0FBQUEsY0FDNUIsZ0JBQUFILE1BQUNHLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FDZDtBQUFBO0FBQUEsZ0JBQU07QUFBQSxpQkFDWDtBQUFBLGVBQ0o7QUFBQTtBQUFBO0FBQUEsTUFFWjtBQUFBLE1BQ0MsZ0JBQWdCLFNBQVMsU0FBUyxNQUM5QixNQUFNO0FBQ0gsY0FBTSxjQUFjLGVBQWUsUUFBUTtBQUFBLFVBQ3ZDLENBQUMsTUFBTSxFQUFFLGtCQUFrQjtBQUFBLFFBQy9CO0FBQ0EsWUFBSSxZQUFZLFdBQVcsRUFBRyxRQUFPO0FBVXJDLGNBQU0sWUFBWTtBQU1sQixjQUFNLGlCQUFpQjtBQUl2QixjQUFNLGNBQWM7QUFDcEIsY0FBTSxjQUNGLGNBQWMsWUFBWSxTQUFTO0FBQ3ZDLGNBQU0sU0FBUyxLQUFLO0FBQUEsVUFDaEIsWUFBWSxTQUFTO0FBQUEsVUFDckIsWUFBWTtBQUFBLFFBQ2hCO0FBQ0EsY0FBTSxZQUFZLEtBQUs7QUFBQSxVQUNuQjtBQUFBLFVBQ0EsS0FBSyxNQUFNLFNBQVMsWUFBWSxNQUFNO0FBQUEsUUFDMUM7QUFDQSxjQUFNVSxVQUFTLFlBQVksSUFBSSxDQUFDLE1BQU07QUFDbEMsZ0JBQU0sSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUNoQyxnQkFBTSxJQUFJLGVBQWUsT0FBTyxDQUFDO0FBQ2pDLGlCQUFPLEtBQUssT0FBTyxNQUFNLFdBQ25CLE9BQU8sS0FBSyxDQUFDLEVBQUUsU0FDZjtBQUFBLFFBQ1YsQ0FBQztBQUNELGNBQU0sWUFBWUEsUUFBTztBQUFBLFVBQUksQ0FBQyxNQUMxQixJQUFJLEtBQUssS0FBSyxZQUFZLElBQUk7QUFBQSxRQUNsQztBQUNBLGNBQU0sWUFBWSxVQUFVO0FBQUEsVUFDeEIsQ0FBQyxLQUFLLE1BQU0sT0FBTyxLQUFLO0FBQUEsVUFDeEI7QUFBQSxRQUNKO0FBQ0EsY0FBTSxTQUFTLFVBQ1YsSUFBSSxDQUFDLEdBQUcsTUFBTyxNQUFNLE9BQU8sSUFBSSxFQUFHLEVBQ25DLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUt6QixjQUFNLGlCQUFpQixPQUFPO0FBQzlCLGNBQU0sV0FBVyxLQUFLO0FBQUEsVUFDbEI7QUFBQSxVQUNBLFNBQVMsWUFBWTtBQUFBLFFBQ3pCO0FBS0EsY0FBTSxhQUFhLE9BQU8sU0FDcEIsS0FBSyxNQUFNLFdBQVcsT0FBTyxNQUFNLElBQ25DO0FBQ04sY0FBTSxjQUFjLE9BQU8sU0FDckIsV0FBVyxhQUFhLE9BQU8sU0FDL0I7QUFDTixjQUFNLGNBQWMsb0JBQUksSUFBSTtBQUM1QixlQUFPLFFBQVEsQ0FBQyxLQUFLLE9BQU87QUFDeEIsc0JBQVk7QUFBQSxZQUNSO0FBQUEsWUFDQSxLQUFLLElBQUksR0FBRyxjQUFjLEtBQUssY0FBYyxJQUFJLEVBQUU7QUFBQSxVQUN2RDtBQUFBLFFBQ0osQ0FBQztBQUNELGNBQU0sYUFBYSxVQUFVO0FBQUEsVUFBSSxDQUFDLEdBQUcsTUFDakMsTUFBTSxPQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssSUFDdEIsS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUFBLFFBQ3ZCO0FBQ0EsZUFBTyxZQUFZLElBQUksQ0FBQyxHQUFHLE1BQU07QUFDN0IsZ0JBQU0sSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUNoQyxpQkFDSSxnQkFBQVg7QUFBQSxZQUFDO0FBQUE7QUFBQSxjQUVHLFFBQVE7QUFBQSxjQUNSLE9BQU8sZUFBZSxPQUFPLENBQUM7QUFBQSxjQUM5QixZQUFZLGVBQWUsV0FBVyxDQUFDO0FBQUEsY0FDdkM7QUFBQSxjQUNBLGlCQUFpQixjQUFjO0FBQUEsY0FDL0IsZ0JBQWdCO0FBQUEsY0FDaEIsU0FBUyxXQUFXLENBQUM7QUFBQTtBQUFBLFlBUGhCO0FBQUEsVUFRVDtBQUFBLFFBRVIsQ0FBQztBQUFBLE1BQ0wsR0FBRztBQUFBLE9BQ1g7QUFBQSxLQUNKO0FBRVI7OztBQzlxQ0EsT0FBT1ksV0FBUyxXQUFBQyxnQkFBZTtBQUMvQixTQUFTLE9BQUFDLE1BQUssUUFBQUMsYUFBWTtBQUcxQixTQUFTLGtCQUFBQyxpQkFBZ0IsZUFBQUMsb0JBQW1CO0FBeURoQyxTQXVGQSxZQUFBQyxXQXZGQSxPQUFBQyxNQWVJLFFBQUFDLGFBZko7QUF2RFosSUFBTSxpQkFBaUI7QUFBQSxFQUNuQixDQUFDSixnQkFBZSxRQUFRLEdBQUcsRUFBRSxPQUFPLFVBQUssT0FBTyxNQUFNLEtBQUssT0FBTyxPQUFPO0FBQUEsRUFDekUsQ0FBQ0EsZ0JBQWUsSUFBSSxHQUFHLEVBQUUsT0FBTyxVQUFLLE9BQU8sTUFBTSxLQUFLLE9BQU8sT0FBTztBQUFBLEVBQ3JFLENBQUNBLGdCQUFlLE1BQU0sR0FBRyxFQUFFLE9BQU8sVUFBSyxPQUFPLE1BQU0sT0FBTyxPQUFPLE1BQU07QUFBQSxFQUN4RSxDQUFDQSxnQkFBZSxHQUFHLEdBQUcsRUFBRSxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsT0FBTyxNQUFNO0FBQUEsRUFDdEUsQ0FBQ0EsZ0JBQWUsSUFBSSxHQUFHLEVBQUUsT0FBTyxRQUFLLE9BQU8sTUFBTSxPQUFPLE9BQU8sU0FBSTtBQUN4RTtBQUVBLElBQU0sY0FBYztBQUFBLEVBQ2hCLENBQUNDLGFBQVksSUFBSSxHQUFHLEVBQUUsT0FBTyxNQUFNLE9BQU8sT0FBTyxPQUFPO0FBQUEsRUFDeEQsQ0FBQ0EsYUFBWSxTQUFTLEdBQUcsRUFBRSxPQUFPLE1BQU0sS0FBSyxPQUFPLFNBQVM7QUFBQSxFQUM3RCxDQUFDQSxhQUFZLFlBQVksR0FBRyxFQUFFLE9BQU8sTUFBTSxPQUFPLE9BQU8sTUFBTTtBQUFBLEVBQy9ELENBQUNBLGFBQVksT0FBTyxHQUFHLEVBQUUsT0FBTyxNQUFNLE9BQU8sT0FBTyxVQUFVO0FBQUEsRUFDOUQsQ0FBQ0EsYUFBWSxPQUFPLEdBQUcsRUFBRSxPQUFPLE1BQU0sT0FBTyxPQUFPLFVBQVU7QUFBQSxFQUM5RCxDQUFDQSxhQUFZLE9BQU8sR0FBRyxFQUFFLE9BQU8sTUFBTSxPQUFPLE9BQU8sVUFBVTtBQUNsRTtBQUVBLFNBQVMsY0FBYyxLQUFLO0FBQ3hCLFNBQU8sZUFBZSxHQUFHLEtBQUssZUFBZUQsZ0JBQWUsSUFBSTtBQUNwRTtBQUVBLFNBQVMsV0FBVyxPQUFPO0FBQ3ZCLFNBQU8sWUFBWSxLQUFLLEtBQUssWUFBWUMsYUFBWSxJQUFJO0FBQzdEO0FBRUEsU0FBU0ksZUFBYyxJQUFJO0FBQ3ZCLE1BQUksQ0FBQyxPQUFPLFNBQVMsRUFBRSxLQUFLLEtBQUssRUFBRyxRQUFPO0FBQzNDLFFBQU0sSUFBSSxLQUFLLE1BQU0sS0FBSyxHQUFJO0FBQzlCLE1BQUksSUFBSSxHQUFJLFFBQU8sR0FBRyxDQUFDO0FBQ3ZCLFFBQU0sSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQzNCLE1BQUksSUFBSSxHQUFJLFFBQU8sR0FBRyxDQUFDO0FBQ3ZCLFFBQU0sSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQzNCLE1BQUksSUFBSSxHQUFJLFFBQU8sR0FBRyxDQUFDO0FBQ3ZCLFFBQU0sSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQzNCLFNBQU8sR0FBRyxDQUFDO0FBQ2Y7QUFFQSxTQUFTQyxjQUFhLE1BQU07QUFDeEIsUUFBTSxJQUFJLE1BQU0sWUFBWTtBQUM1QixNQUFJLE9BQU8sTUFBTSxTQUFVLFFBQU87QUFDbEMsTUFBSSxPQUFPLE1BQU0sVUFBVTtBQUN2QixVQUFNLElBQUksS0FBSyxNQUFNLENBQUM7QUFDdEIsV0FBTyxPQUFPLFNBQVMsQ0FBQyxJQUFJLElBQUk7QUFBQSxFQUNwQztBQUNBLE1BQUksS0FBSyxPQUFPLE1BQU0sWUFBWSxFQUFFLFNBQVMsTUFBTTtBQUMvQyxRQUFJLE9BQU8sRUFBRSxVQUFVLFNBQVUsUUFBTyxFQUFFO0FBQzFDLFVBQU0sSUFBSSxLQUFLLE1BQU0sRUFBRSxLQUFLO0FBQzVCLFdBQU8sT0FBTyxTQUFTLENBQUMsSUFBSSxJQUFJO0FBQUEsRUFDcEM7QUFDQSxTQUFPO0FBQ1g7QUFFQSxTQUFTQyxZQUFXLEVBQUUsT0FBTyxPQUFPLFFBQVEsT0FBTyxHQUFHO0FBQ2xELFNBQ0ksZ0JBQUFKLEtBQUNLLE1BQUEsRUFBSSxPQUFjLGdCQUFnQixVQUFVLFVBQVUsYUFBYSxjQUNoRSwwQkFBQUwsS0FBQ00sT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFVLGlCQUFNLEdBQ3ZDO0FBRVI7QUFFQSxTQUFTLFNBQVMsRUFBRSxNQUFNLFVBQVUsV0FBVyxJQUFJLEdBQUc7QUFDbEQsUUFBTSxNQUFNLGNBQWMsS0FBSyxRQUFRO0FBQ3ZDLFFBQU0sS0FBSyxXQUFXLEtBQUssS0FBSztBQUNoQyxRQUFNLE1BQU0sS0FBSyxRQUFRLFFBQVEsS0FBSyxRQUFRLE1BQU07QUFDcEQsUUFBTSxPQUFPLEtBQUssUUFBUSxLQUFLLE9BQU8sUUFBUTtBQUM5QyxRQUFNLFlBQVlILGNBQWEsSUFBSTtBQUNuQyxRQUFNLFFBQVEsYUFBYSxPQUFPRCxlQUFjLE1BQU0sU0FBUyxJQUFJO0FBQ25FLFNBQ0ksZ0JBQUFELE1BQUNJLE1BQUEsRUFDRztBQUFBLG9CQUFBTCxLQUFDSyxNQUFBLEVBQUksT0FBTyxHQUNSLDBCQUFBSixNQUFDSyxPQUFBLEVBQUssT0FBTyxJQUFJLE9BQU8sTUFBSSxNQUN2QjtBQUFBLFVBQUk7QUFBQSxNQUFNO0FBQUEsTUFBRSxJQUFJO0FBQUEsT0FDckIsR0FDSjtBQUFBLElBQ0EsZ0JBQUFOLEtBQUNLLE1BQUEsRUFBSSxPQUFPLEdBQ1IsMEJBQUFMLEtBQUNNLE9BQUEsRUFBSyxPQUFPLEdBQUcsT0FBTyxNQUFJLE1BQ3RCLGFBQUcsT0FDUixHQUNKO0FBQUEsSUFDQSxnQkFBQU4sS0FBQ0ssTUFBQSxFQUFJLE9BQU8sV0FBVyxHQUNuQiwwQkFBQUwsS0FBQ00sT0FBQSxFQUFLLE9BQU8sTUFBTSxJQUFJLE1BQUssZ0JBQ3ZCLGVBQ0wsR0FDSjtBQUFBLElBQ0EsZ0JBQUFOLEtBQUNLLE1BQUEsRUFBSSxPQUFPLFlBQVksR0FDcEIsMEJBQUFMLEtBQUNNLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxNQUFLLGdCQUMxQixnQkFDTCxHQUNKO0FBQUEsSUFDQSxnQkFBQU4sS0FBQ0ssTUFBQSxFQUFJLFVBQVUsR0FBRyxnQkFBZSxZQUM3QiwwQkFBQUwsS0FBQ00sT0FBQSxFQUFLLE9BQU8sTUFBTSxPQUFRLGlCQUFNLEdBQ3JDO0FBQUEsS0FDSjtBQUVSO0FBRUEsU0FBUyxpQkFBaUIsV0FBVztBQUNqQyxRQUFNLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxLQUFLLEVBQUU7QUFDL0MsYUFBVyxLQUFLLFdBQVc7QUFDdkIsUUFBSSxFQUFFLGFBQWFULGdCQUFlLFNBQVUsS0FBSTtBQUFBLGFBQ3ZDLEVBQUUsYUFBYUEsZ0JBQWUsS0FBTSxLQUFJO0FBQUEsYUFDeEMsRUFBRSxhQUFhQSxnQkFBZSxPQUFRLEtBQUk7QUFBQSxhQUMxQyxFQUFFLGFBQWFBLGdCQUFlLElBQUssS0FBSTtBQUFBLEVBQ3BEO0FBQ0EsU0FBTztBQUNYO0FBRU8sU0FBUyxVQUFVLEVBQUUsT0FBTyxHQUFHO0FBQ2xDLFFBQU0sRUFBRSxXQUFXLFNBQVMsTUFBTSxJQUFJO0FBQ3RDLFFBQU0sTUFBTSxLQUFLLElBQUk7QUFDckIsUUFBTSxTQUFTVSxTQUFRLE1BQU0saUJBQWlCLFNBQVMsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUNyRSxRQUFNLFdBQVdBO0FBQUEsSUFDYixNQUNJLFVBQVU7QUFBQSxNQUNOLENBQUMsR0FBRyxNQUNBLEtBQUssSUFBSSxJQUFJLEVBQUUsUUFBUSxRQUFRLEVBQUUsUUFBUSxNQUFNLElBQUksTUFBTTtBQUFBLE1BQzdEO0FBQUEsSUFDSjtBQUFBLElBQ0osQ0FBQyxTQUFTO0FBQUEsRUFDZDtBQUNBLFFBQU0sWUFBWUE7QUFBQSxJQUNkLE1BQ0ksVUFBVTtBQUFBLE1BQ04sQ0FBQyxHQUFHLE1BQU0sS0FBSyxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxRQUFRLElBQUksTUFBTTtBQUFBLE1BQzVEO0FBQUEsSUFDSjtBQUFBLElBQ0osQ0FBQyxTQUFTO0FBQUEsRUFDZDtBQUVBLE1BQUk7QUFDSixNQUFJLE9BQU87QUFDUCxXQUNJLGdCQUFBTixNQUFDSyxPQUFBLEVBQUssT0FBTyxNQUFNLEtBQUs7QUFBQTtBQUFBLE1BQ0ksT0FBTyxXQUFXLE9BQU8sS0FBSztBQUFBLE9BQzFEO0FBQUEsRUFFUixXQUFXLFdBQVcsVUFBVSxXQUFXLEdBQUc7QUFDMUMsV0FBTyxnQkFBQU4sS0FBQ00sT0FBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLGtDQUFlO0FBQUEsRUFDdEQsV0FBVyxVQUFVLFdBQVcsR0FBRztBQUMvQixXQUFPLGdCQUFBTixLQUFDTSxPQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMsc0RBQW1DO0FBQUEsRUFDMUUsT0FBTztBQUNILFdBQ0ksZ0JBQUFMLE1BQUFGLFdBQUEsRUFDSTtBQUFBLHNCQUFBRSxNQUFDSSxNQUFBLEVBQUksY0FBYyxHQUNmO0FBQUEsd0JBQUFMLEtBQUNJLGFBQUEsRUFBVyxPQUFNLFlBQVcsT0FBTyxHQUFHO0FBQUEsUUFDdkMsZ0JBQUFKLEtBQUNJLGFBQUEsRUFBVyxPQUFNLFNBQVEsT0FBTyxHQUFHO0FBQUEsUUFDcEMsZ0JBQUFKLEtBQUNJLGFBQUEsRUFBVyxPQUFNLFVBQVMsT0FBTyxXQUFXLEdBQUc7QUFBQSxRQUNoRCxnQkFBQUosS0FBQ0ksYUFBQSxFQUFXLE9BQU0sUUFBTyxPQUFPLFlBQVksR0FBRztBQUFBLFFBQy9DLGdCQUFBSixLQUFDSSxhQUFBLEVBQVcsT0FBTSxTQUFRLE9BQU8sR0FBRyxPQUFNLFNBQVE7QUFBQSxTQUN0RDtBQUFBLE1BQ0MsVUFBVSxJQUFJLENBQUMsU0FDWixnQkFBQUo7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUVHO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUE7QUFBQSxRQUpLLEtBQUs7QUFBQSxNQUtkLENBQ0g7QUFBQSxPQUNMO0FBQUEsRUFFUjtBQUVBLFNBQ0ksZ0JBQUFBLEtBQUNLLE1BQUEsRUFBSSxVQUFVLEdBQ1gsMEJBQUFMO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRyxPQUFNO0FBQUEsTUFDTixLQUFLLEdBQUcsVUFBVSxNQUFNO0FBQUEsTUFDeEIsT0FDSSxnQkFBQUMsTUFBQ0ssT0FBQSxFQUNHO0FBQUEsd0JBQUFOLEtBQUNNLE9BQUEsRUFBSyxPQUFPLE1BQU0sS0FBSyxNQUFJLE1BQ3ZCLGlCQUFPLE9BQU8sT0FBTyxNQUMxQjtBQUFBLFFBQ0EsZ0JBQUFOLEtBQUNNLE9BQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyx5QkFBUTtBQUFBLFFBQ2xDLGdCQUFBTixLQUFDTSxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sTUFBSSxNQUN6QixpQkFBTyxLQUNaO0FBQUEsUUFDQSxnQkFBQU4sS0FBQ00sT0FBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLHdCQUFPO0FBQUEsUUFDakMsZ0JBQUFOLEtBQUNNLE9BQUEsRUFBSyxPQUFPLE1BQU0sUUFBUSxNQUFJLE1BQzFCLGlCQUFPLEtBQ1o7QUFBQSxRQUNBLGdCQUFBTixLQUFDTSxPQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sa0JBQUk7QUFBQSxTQUNsQztBQUFBLE1BR0g7QUFBQTtBQUFBLEVBQ0wsR0FDSjtBQUVSOzs7QUNuTUEsT0FBT0UsV0FBUyxXQUFBQyxnQkFBZTtBQUMvQixTQUFTLE9BQUFDLE1BQUssUUFBQUMsY0FBWTtBQWdCbEIsU0FFUSxPQUFBQyxPQUZSLFFBQUFDLGNBQUE7QUFaUixJQUFNLE9BQU87QUFBQSxFQUNULE1BQU0sRUFBRSxPQUFPLE1BQU0sS0FBSztBQUFBLEVBQzFCLE9BQU8sRUFBRSxPQUFPLE1BQU0sTUFBTTtBQUFBLEVBQzVCLEtBQUssRUFBRSxPQUFPLE1BQU0sSUFBSTtBQUFBLEVBQ3hCLE1BQU0sRUFBRSxPQUFPLE1BQU0sT0FBTztBQUFBLEVBQzVCLEtBQUssRUFBRSxPQUFPLE1BQU0sT0FBTztBQUFBLEVBQzNCLFFBQVEsRUFBRSxPQUFPLE1BQU0sUUFBUTtBQUNuQztBQUVBLFNBQVMsU0FBUyxFQUFFLEdBQUcsU0FBUyxHQUFHO0FBQy9CLFFBQU0sSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUs7QUFDL0IsU0FDSSxnQkFBQUEsT0FBQ0MsTUFBQSxFQUNHO0FBQUEsb0JBQUFGLE1BQUNFLE1BQUEsRUFBSSxPQUFPLElBQ1IsMEJBQUFGLE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBVSxZQUFFLEdBQUUsR0FDckM7QUFBQSxJQUNBLGdCQUFBSCxNQUFDRSxNQUFBLEVBQUksT0FBTyxHQUNSLDBCQUFBRixNQUFDRyxRQUFBLEVBQUssT0FBTyxFQUFFLE9BQU8sTUFBSSxNQUNyQixZQUFFLEtBQUssWUFBWSxHQUN4QixHQUNKO0FBQUEsSUFDQSxnQkFBQUgsTUFBQ0UsTUFBQSxFQUFJLE9BQU8sV0FBVyxHQUNuQiwwQkFBQUYsTUFBQ0csUUFBQSxFQUFLLE9BQU8sTUFBTSxJQUFJLE1BQUssZ0JBQ3ZCLFlBQUUsS0FDUCxHQUNKO0FBQUEsSUFDQSxnQkFBQUgsTUFBQ0UsTUFBQSxFQUFJLFVBQVUsR0FDWCwwQkFBQUYsTUFBQ0csUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLE1BQUssZ0JBQzFCLFlBQUUsS0FDUCxHQUNKO0FBQUEsS0FDSjtBQUVSO0FBRU8sU0FBUyxVQUFVLEVBQUUsT0FBTyxHQUFHO0FBQ2xDLFFBQU0sU0FBU0MsU0FBUSxNQUFNO0FBQ3pCLFVBQU0sTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLEVBQUU7QUFDaEMsZUFBVyxLQUFLLFFBQVE7QUFDcEIsVUFBSSxFQUFFLFNBQVMsT0FBUSxLQUFJO0FBQUEsZUFDbEIsRUFBRSxTQUFTLFFBQVMsS0FBSTtBQUFBLElBQ3JDO0FBQ0EsV0FBTztBQUFBLEVBQ1gsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUNYLFFBQU0sV0FBV0E7QUFBQSxJQUNiLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxNQUFNLEtBQUssSUFBSSxHQUFHLEVBQUUsSUFBSSxNQUFNLEdBQUcsRUFBRTtBQUFBLElBQzNELENBQUMsTUFBTTtBQUFBLEVBQ1g7QUFFQSxTQUNJLGdCQUFBSixNQUFDRSxNQUFBLEVBQUksVUFBVSxHQUNYLDBCQUFBRDtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0csT0FBTTtBQUFBLE1BQ04sS0FBSyxHQUFHLE9BQU8sTUFBTTtBQUFBLE1BQ3JCLE9BQ0ksZ0JBQUFBLE9BQUNFLFFBQUEsRUFDRztBQUFBLHdCQUFBSCxNQUFDRyxRQUFBLEVBQUssT0FBTyxNQUFNLE1BQU0sTUFBSSxNQUN4QixpQkFBTyxNQUNaO0FBQUEsUUFDQSxnQkFBQUgsTUFBQ0csUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLDBCQUFTO0FBQUEsUUFDbkMsZ0JBQUFILE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxNQUFJLE1BQ3pCLGlCQUFPLE9BQ1o7QUFBQSxRQUNBLGdCQUFBSCxNQUFDRyxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sMkJBQVU7QUFBQSxRQUNwQyxnQkFBQUgsTUFBQ0csUUFBQSxFQUFLLE9BQU8sTUFBTSxNQUFNLHlCQUFNO0FBQUEsU0FDbkM7QUFBQSxNQUdIO0FBQUEsZUFBTyxXQUFXLEtBQ2YsZ0JBQUFILE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyw0RkFFNUI7QUFBQSxRQUVILE9BQU8sSUFBSSxDQUFDLEdBQUcsTUFDWixnQkFBQUgsTUFBQyxZQUFzQyxHQUFNLFlBQTlCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUE4QixDQUNwRTtBQUFBO0FBQUE7QUFBQSxFQUNMLEdBQ0o7QUFFUjs7O0FDcEZBLE9BQU9LLFdBQVMsYUFBQUMsWUFBVyxXQUFBQyxXQUFTLFlBQUFDLGtCQUFnQjtBQUNwRCxTQUFTLE9BQUFDLE9BQUssUUFBQUMsUUFBTSxZQUFBQyxXQUFVLGFBQUFDLGtCQUFpQjs7O0FDRC9DLE9BQU9DLFdBQVMsYUFBQUMsWUFBVyxXQUFBQyxVQUFTLFlBQUFDLGlCQUFnQjtBQUNwRCxTQUFTLE9BQUFDLE9BQUssUUFBQUMsUUFBTSxZQUFBQyxpQkFBZ0I7QUEyQnBCLGdCQUFBQyxPQU1BLFFBQUFDLGNBTkE7QUF2QmhCLFNBQVMsU0FBUyxFQUFFLE1BQU0sVUFBVSxVQUFVLFFBQVEsR0FBRztBQUNyRCxRQUFNLFNBQVMsS0FBSztBQUNwQixNQUFJLFFBQVE7QUFDWixNQUFJLFFBQVEsTUFBTTtBQUNsQixNQUFJLFdBQVcsV0FBVztBQUN0QixZQUFRO0FBQ1IsWUFBUSxNQUFNO0FBQUEsRUFDbEIsV0FBVyxXQUFXLE1BQU07QUFDeEIsWUFBUTtBQUNSLFlBQVEsTUFBTTtBQUFBLEVBQ2xCLFdBQVcsV0FBVyxVQUFVO0FBQzVCLFlBQVE7QUFDUixZQUFRLE1BQU07QUFBQSxFQUNsQjtBQUNBLFFBQU0sY0FDRixPQUFPLFNBQVMsS0FBSyxVQUFVLEtBQUssS0FBSyxXQUFXLFlBQzlDLEtBQUssS0FBSyxVQUFVLFFBQ3BCO0FBQ1YsUUFBTSxTQUFTLFdBQVksVUFBVSxXQUFNLFdBQU87QUFDbEQsUUFBTSxZQUFZLFdBQVcsWUFBTyxXQUFXLElBQUksSUFBSSxZQUFPO0FBQzlELFNBQ0ksZ0JBQUFBLE9BQUNDLE9BQUEsRUFDRztBQUFBLG9CQUFBRixNQUFDRSxPQUFBLEVBQUksT0FBTyxHQUNSLDBCQUFBRixNQUFDRyxRQUFBLEVBQUssT0FBTyxXQUFXLE1BQU0sU0FBUyxNQUFNLFNBQVUsa0JBQU8sR0FDbEU7QUFBQSxJQUNBLGdCQUFBSCxNQUFDRSxPQUFBLEVBQUksT0FBTyxHQUNSLDBCQUFBRixNQUFDRyxRQUFBLEVBQUssT0FBZSxpQkFBTSxHQUMvQjtBQUFBLElBQ0EsZ0JBQUFILE1BQUNFLE9BQUEsRUFBSSxPQUFPLEdBQ1IsMEJBQUFELE9BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBVTtBQUFBLGFBQU8sS0FBSyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7QUFBQSxNQUFFO0FBQUEsT0FBQyxHQUNyRTtBQUFBLElBQ0EsZ0JBQUFILE1BQUNFLE9BQUEsRUFBSSxVQUFVLEdBQ1gsMEJBQUFELE9BQUNFLFFBQUEsRUFBSyxPQUFPLFdBQVcsTUFBTSxLQUFLLE1BQU0sSUFBSSxNQUFNLFVBQVUsTUFBSyxnQkFDN0Q7QUFBQSxXQUFLO0FBQUEsTUFDTCxhQUFhLGdCQUFBSCxNQUFDRyxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQVUscUJBQVU7QUFBQSxPQUN6RCxHQUNKO0FBQUEsSUFDQSxnQkFBQUgsTUFBQ0UsT0FBQSxFQUNHLDBCQUFBRCxPQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sTUFBSyxnQkFDMUI7QUFBQSxXQUFLLFdBQVc7QUFBQSxNQUNoQjtBQUFBLE9BQ0wsR0FDSjtBQUFBLEtBQ0o7QUFFUjtBQUVBLFNBQVMsV0FBVyxNQUFNO0FBQ3RCLFNBQU8sQ0FBQyxFQUFFLE1BQU0sVUFBVSxNQUFNLFVBQVUsTUFBTTtBQUNwRDtBQUVBLFNBQVMsZUFBZSxFQUFFLE1BQU0sU0FBUyxHQUFHO0FBQ3hDLE1BQUksQ0FBQyxLQUFNLFFBQU87QUFDbEIsUUFBTSxVQUFVLEtBQUssVUFBVSxJQUFJLFFBQVEsUUFBUSxFQUFFO0FBQ3JELFFBQU0sVUFBVSxLQUFLLFVBQVUsSUFBSSxRQUFRLFFBQVEsRUFBRTtBQUNyRCxRQUFNLFFBQVEsS0FBSztBQUNuQixRQUFNLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO0FBQ3ZDLE1BQUksU0FBUztBQUNULFdBQ0ksZ0JBQUFILE1BQUNFLE9BQUEsRUFBSSxXQUFXLEdBQ1osMEJBQUFGLE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxnREFBa0MsR0FDbEU7QUFBQSxFQUVSO0FBQ0EsUUFBTSxTQUFTLEtBQUssSUFBSSxHQUFHLFlBQVksRUFBRTtBQUN6QyxRQUFNLFdBQVcsQ0FBQztBQUNsQixNQUFJLE9BQVEsVUFBUyxLQUFLLEVBQUUsT0FBTyxVQUFVLE9BQU8sTUFBTSxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzdFLE1BQUksT0FBUSxVQUFTLEtBQUssRUFBRSxPQUFPLFVBQVUsT0FBTyxNQUFNLE9BQU8sTUFBTSxPQUFPLENBQUM7QUFDL0UsTUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVE7QUFDN0IsYUFBUyxLQUFLLEVBQUUsT0FBTyxTQUFTLE9BQU8sTUFBTSxLQUFLLE1BQU0sTUFBTSxDQUFDO0FBQUEsRUFDbkU7QUFDQSxRQUFNLGFBQWEsS0FBSyxJQUFJLEdBQUcsS0FBSyxNQUFNLFNBQVMsS0FBSyxJQUFJLEdBQUcsU0FBUyxNQUFNLENBQUMsQ0FBQztBQUNoRixTQUNJLGdCQUFBSCxNQUFDRSxPQUFBLEVBQUksV0FBVyxHQUFHLGVBQWMsVUFDNUIsbUJBQVMsSUFBSSxDQUFDLEdBQUcsUUFBUTtBQUN0QixVQUFNLFFBQVEsRUFBRSxLQUFLLE1BQU0sSUFBSTtBQUMvQixVQUFNLE9BQU8sTUFBTSxNQUFNLENBQUMsVUFBVTtBQUNwQyxVQUFNLFVBQVUsTUFBTSxTQUFTLEtBQUs7QUFDcEMsV0FDSSxnQkFBQUQsT0FBQ0MsT0FBQSxFQUFjLGVBQWMsVUFBUyxXQUFXLFFBQVEsSUFBSSxJQUFJLEdBQzdEO0FBQUEsc0JBQUFELE9BQUNFLFFBQUEsRUFBSyxPQUFPLEVBQUUsT0FBTztBQUFBO0FBQUEsUUFBSSxFQUFFO0FBQUEsUUFBTTtBQUFBLFNBQUc7QUFBQSxNQUNwQyxVQUFVLEtBQ1AsZ0JBQUFGLE9BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUztBQUFBO0FBQUEsUUFDdEI7QUFBQSxRQUFRO0FBQUEsUUFBYyxZQUFZLElBQUksS0FBSztBQUFBLFNBQ2pEO0FBQUEsTUFFSCxLQUFLLElBQUksQ0FBQyxJQUFJLE1BQ1gsZ0JBQUFILE1BQUNHLFFBQUEsRUFBYSxPQUFPLE1BQU0sSUFBSSxNQUFLLFFBQy9CLGdCQUFNLE9BREEsQ0FFWCxDQUNIO0FBQUEsU0FYSyxHQVlWO0FBQUEsRUFFUixDQUFDLEdBQ0w7QUFFUjtBQUVBLFNBQVMsa0JBQWtCLE9BQU87QUFDOUIsVUFBUSxNQUFNLFFBQVEsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFBQSxJQUMzQyxPQUFPLEVBQUU7QUFBQSxJQUNULE1BQU0sRUFBRTtBQUFBLElBQ1IsUUFBUSxFQUFFLFVBQVUsWUFBWSxFQUFFLEtBQUssT0FBTztBQUFBLElBQzlDLFNBQVMsRUFBRTtBQUFBLElBQ1gsT0FBTyxFQUFFO0FBQUEsSUFDVCxZQUFZLEVBQUU7QUFBQSxJQUNkLFFBQVEsRUFBRTtBQUFBLElBQ1YsUUFBUSxFQUFFO0FBQUEsSUFDVixVQUFVLEVBQUU7QUFBQSxFQUNoQixFQUFFO0FBQ047QUFFQSxTQUFTLGNBQWMsRUFBRSxPQUFPLFNBQVMsU0FBUyxlQUFlLEdBQUc7QUFDaEUsUUFBTSxRQUFRQyxTQUFRLE1BQU07QUFDeEIsUUFBSSxNQUFNLFVBQVUsT0FBUSxRQUFPLGtCQUFrQixLQUFLO0FBQzFELFdBQU8sTUFBTSxLQUFLLE1BQU0sZUFBZSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLO0FBQUEsRUFDN0YsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUVWLFFBQU0sU0FBUyxNQUFNLFVBQVU7QUFDL0IsUUFBTSxpQkFBaUJBLFNBQVEsTUFBTTtBQUNqQyxRQUFJLENBQUMsT0FBUSxRQUFPO0FBQ3BCLFdBQU8sTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLFdBQVcsUUFBUTtBQUFBLEVBQ3ZELEdBQUcsQ0FBQyxPQUFPLE1BQU0sQ0FBQztBQUVsQixRQUFNLENBQUMsYUFBYSxjQUFjLElBQUlDLFVBQVMsQ0FBQztBQUNoRCxRQUFNLENBQUMsVUFBVSxXQUFXLElBQUlBLFVBQVMsS0FBSztBQUs5QyxFQUFBQyxXQUFVLE1BQU07QUFDWixRQUFJLENBQUMsT0FBUTtBQUNiLFFBQUksTUFBTSxXQUFXLEVBQUc7QUFDeEIsUUFBSSxrQkFBa0IsR0FBRztBQUNyQixxQkFBZSxjQUFjO0FBQzdCLGtCQUFZLElBQUk7QUFBQSxJQUNwQixPQUFPO0FBQ0gscUJBQWUsTUFBTSxTQUFTLENBQUM7QUFDL0Isa0JBQVksS0FBSztBQUFBLElBQ3JCO0FBQUEsRUFDSixHQUFHLENBQUMsUUFBUSxnQkFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFekMsRUFBQUM7QUFBQSxJQUNJLENBQUMsT0FBTyxRQUFRO0FBQ1osVUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFRO0FBQ3pCLFVBQUksSUFBSSxRQUFRO0FBQ1osa0JBQVU7QUFDVjtBQUFBLE1BQ0o7QUFDQSxVQUFJLElBQUksU0FBUztBQUNiLHVCQUFlLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN4QztBQUFBLE1BQ0o7QUFDQSxVQUFJLElBQUksV0FBVztBQUNmLHVCQUFlLENBQUMsTUFBTSxLQUFLLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdkQ7QUFBQSxNQUNKO0FBQ0EsVUFBSSxJQUFJLFVBQVUsVUFBVSxLQUFLO0FBQzdCLG9CQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFBQSxNQUN6QjtBQUFBLElBQ0o7QUFBQSxJQUNBLEVBQUUsVUFBVSxDQUFDLENBQUMsV0FBVyxPQUFPO0FBQUEsRUFDcEM7QUFFQSxRQUFNLFNBQ0YsTUFBTSxVQUFVLFlBQ1YsWUFDQSxNQUFNLFFBQVEsS0FDWixpQkFDQTtBQUNaLFFBQU0sY0FDRixNQUFNLFVBQVUsWUFDVixNQUFNLFNBQ04sTUFBTSxRQUFRLEtBQ1osTUFBTSxPQUNOLE1BQU07QUFFbEIsUUFBTSxXQUFXLFNBQVMsTUFBTSxXQUFXLElBQUk7QUFFL0MsU0FDSSxnQkFBQU4sT0FBQ0MsT0FBQSxFQUFJLGVBQWMsVUFDZjtBQUFBLG9CQUFBRCxPQUFDQyxPQUFBLEVBQUksZ0JBQWUsaUJBQWdCLGNBQWMsR0FDOUM7QUFBQSxzQkFBQUYsTUFBQ0csUUFBQSxFQUFLLE9BQU8sYUFBYSxNQUFJLE1BQ3pCLGtCQUNMO0FBQUEsTUFDQSxnQkFBQUYsT0FBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUNkO0FBQUEsY0FBTSxVQUFVO0FBQUEsUUFBSztBQUFBLFFBQUksTUFBTSxRQUFRO0FBQUEsU0FDNUM7QUFBQSxPQUNKO0FBQUEsSUFDQyxNQUFNLFdBQVcsS0FBSyxnQkFBQUgsTUFBQ0csUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLDBCQUFZO0FBQUEsSUFDOUQsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUNYLGdCQUFBSDtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBRUcsTUFBTTtBQUFBLFFBQ04sVUFBVSxVQUFVLE1BQU07QUFBQSxRQUMxQixVQUFVLFVBQVUsTUFBTSxlQUFlO0FBQUEsUUFDekMsU0FBUyxDQUFDLENBQUM7QUFBQTtBQUFBLE1BSk4sRUFBRTtBQUFBLElBS1gsQ0FDSDtBQUFBLElBQ0EsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFNLFFBQVEsTUFBTSxNQUFNLFFBQVEsU0FDMUQsZ0JBQUFBLE1BQUNFLE9BQUEsRUFBSSxXQUFXLEdBQ1osMEJBQUFGLE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sS0FBTSxnQkFBTSxPQUFPLE9BQU0sR0FDaEQ7QUFBQSxJQUVILFVBQVUsWUFBWSxZQUNuQixnQkFBQUgsTUFBQyxrQkFBZSxNQUFNLFVBQVUsVUFBVSxnQkFBZ0I7QUFBQSxJQUU3RCxVQUNHLGdCQUFBQSxNQUFDRSxPQUFBLEVBQUksV0FBVyxHQUNaLDBCQUFBRCxPQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQVM7QUFBQTtBQUFBLE1BQ1AsV0FBVyxhQUFhO0FBQUEsTUFBUztBQUFBLE9BQ3RELEdBQ0o7QUFBQSxLQUVSO0FBRVI7QUFFQSxTQUFTLGFBQWEsRUFBRSxNQUFNLEdBQUc7QUFDN0IsUUFBTSxVQUFVLE1BQU0sV0FBVyxFQUFFLFdBQVcsR0FBRyxXQUFXLEdBQUcsUUFBUSxHQUFHLGFBQWEsRUFBRTtBQUN6RixRQUFNLFlBQVksTUFBTSxLQUFLLE1BQU0sV0FBVyxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQzlELFFBQU0sT0FBTyxNQUFNLFVBQVU7QUFDN0IsUUFBTSxRQUFRLE9BQ1IsTUFBTSxVQUNGLG9CQUNBLGlCQUNKO0FBQ04sUUFBTSxjQUFjLE9BQ2QsTUFBTSxVQUNGLE1BQU0sTUFDTixRQUFRLFNBQVMsSUFDZixNQUFNLFFBQ04sTUFBTSxPQUNaLE1BQU07QUFFWixTQUNJLGdCQUFBRixPQUFDQyxPQUFBLEVBQUksZUFBYyxVQUNmO0FBQUEsb0JBQUFELE9BQUNDLE9BQUEsRUFBSSxnQkFBZSxpQkFBZ0IsY0FBYyxHQUM5QztBQUFBLHNCQUFBRixNQUFDRyxRQUFBLEVBQUssT0FBTyxhQUFhLE1BQUksTUFDekIsaUJBQ0w7QUFBQSxNQUNBLGdCQUFBRixPQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQ2Q7QUFBQSxjQUFNLFVBQVU7QUFBQSxRQUFLO0FBQUEsUUFBVSxNQUFNO0FBQUEsU0FDMUM7QUFBQSxPQUNKO0FBQUEsSUFDQSxnQkFBQUYsT0FBQ0MsT0FBQSxFQUNHO0FBQUEsc0JBQUFGLE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyx3QkFBVTtBQUFBLE1BQ3BDLGdCQUFBRixPQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLElBQ2Q7QUFBQSxnQkFBUTtBQUFBLFFBQVU7QUFBQSxRQUFFLFFBQVE7QUFBQSxTQUNqQztBQUFBLE1BQ0EsZ0JBQUFILE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxrQkFBSTtBQUFBLE1BQzlCLGdCQUFBSCxNQUFDRyxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUssZ0JBQU0sZ0JBQWdCLE1BQU0sYUFBWTtBQUFBLE1BQ2hFLGdCQUFBSCxNQUFDRyxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sd0JBQVU7QUFBQSxNQUNwQyxnQkFBQUYsT0FBQ0UsUUFBQSxFQUFLLE9BQU8sUUFBUSxjQUFjLElBQUksTUFBTSxNQUFNLE1BQU0sT0FDcEQ7QUFBQSxnQkFBUSxZQUFZLFFBQVEsQ0FBQztBQUFBLFFBQUU7QUFBQSxTQUNwQztBQUFBLE9BQ0o7QUFBQSxJQUNDLE1BQU0sZ0JBQWdCLENBQUMsUUFDcEIsZ0JBQUFGLE9BQUNDLE9BQUEsRUFDRztBQUFBLHNCQUFBRCxPQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU87QUFBQTtBQUFBLFFBQU8sTUFBTSxhQUFhLFFBQVE7QUFBQSxRQUFFO0FBQUEsU0FBRTtBQUFBLE1BQ2hFLGdCQUFBRixPQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUs7QUFBQSxjQUFNLGFBQWEsV0FBVztBQUFBLFFBQU87QUFBQSxTQUFVO0FBQUEsTUFDdkUsZ0JBQUFGLE9BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FDZDtBQUFBO0FBQUEsUUFBSTtBQUFBLFFBQ0gsTUFBTSxhQUFhLGFBQWE7QUFBQSxRQUFFO0FBQUEsUUFDbkMsTUFBTSxhQUFhLGNBQ2YsTUFBTSxhQUFhLFdBQVcsVUFBVTtBQUFBLFFBQUc7QUFBQSxTQUNwRDtBQUFBLE9BQ0o7QUFBQSxLQUVGLE1BQU0sV0FBVyxDQUFDLEdBQUcsU0FBUyxLQUM1QixnQkFBQUYsT0FBQ0MsT0FBQSxFQUFJLFdBQVcsR0FBRyxlQUFjLFVBQzdCO0FBQUEsc0JBQUFGLE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxzQkFBUTtBQUFBLE1BQ2pDLE1BQU0sUUFBUSxJQUFJLENBQUMsTUFDaEIsZ0JBQUFGLE9BQUNDLE9BQUEsRUFDRztBQUFBLHdCQUFBRixNQUFDRSxPQUFBLEVBQUksT0FBTyxHQUNSLDBCQUFBRCxPQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQVU7QUFBQSxZQUFFLFFBQVE7QUFBQSxVQUFFO0FBQUEsV0FBQyxHQUM5QztBQUFBLFFBQ0EsZ0JBQUFGLE9BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sTUFBTztBQUFBLFlBQUUsTUFBTSxFQUFFLGFBQWE7QUFBQSxVQUFFO0FBQUEsV0FBRztBQUFBLFFBQ3RELGdCQUFBSCxNQUFDRyxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMsZ0JBQUU7QUFBQSxRQUM5QixnQkFBQUYsT0FBQ0UsUUFBQSxFQUFLLFFBQVEsRUFBRSxVQUFVLEtBQUssSUFBSSxNQUFNLE1BQU0sTUFBTSxTQUNoRDtBQUFBLFlBQUUsVUFBVTtBQUFBLFVBQUU7QUFBQSxXQUNuQjtBQUFBLFFBQ0EsZ0JBQUFGLE9BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUztBQUFBO0FBQUEsVUFBSSxFQUFFO0FBQUEsVUFBSztBQUFBLFdBQVc7QUFBQSxXQVQ1QyxFQUFFLEtBVVosQ0FDSDtBQUFBLE9BQ0w7QUFBQSxJQUVILFVBQVUsU0FBUyxLQUNoQixnQkFBQUYsT0FBQ0MsT0FBQSxFQUFJLFdBQVcsR0FBRyxlQUFjLFVBQzdCO0FBQUEsc0JBQUFGLE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxzQkFBUTtBQUFBLE1BQ2pDLFVBQVUsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQ3ZCLGdCQUFBRixPQUFDQyxPQUFBLEVBQ0c7QUFBQSx3QkFBQUYsTUFBQ0UsT0FBQSxFQUFJLE9BQU8sR0FDUiwwQkFBQUY7QUFBQSxVQUFDRztBQUFBLFVBQUE7QUFBQSxZQUNHLE9BQ0ksRUFBRSxVQUNJLE1BQU0sUUFDTixFQUFFLEtBQ0EsTUFBTSxPQUNOLE1BQU07QUFBQSxZQUdqQixZQUFFLFVBQVUsTUFBTSxFQUFFLEtBQUssV0FBTTtBQUFBO0FBQUEsUUFDcEMsR0FDSjtBQUFBLFFBQ0EsZ0JBQUFILE1BQUNFLE9BQUEsRUFBSSxVQUFVLEdBQ1gsMEJBQUFGLE1BQUNHLFFBQUEsRUFBSyxPQUFPLE1BQU0sSUFBSSxNQUFLLGdCQUN2QixZQUFFLFFBQ1AsR0FDSjtBQUFBLFFBQ0MsRUFBRSxTQUNDLGdCQUFBSCxNQUFDRyxRQUFBLEVBQUssT0FBTyxNQUFNLEtBQUssTUFBSyxnQkFDeEIsWUFBRSxPQUNQO0FBQUEsV0F0QkUsRUFBRSxNQXdCWixDQUNIO0FBQUEsT0FDTDtBQUFBLElBRUgsUUFBUSxNQUFNLGdCQUNYLGdCQUFBSCxNQUFDRSxPQUFBLEVBQUksV0FBVyxHQUNYLGdCQUFNLGFBQWEsS0FDaEIsZ0JBQUFELE9BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTztBQUFBO0FBQUEsTUFBUyxNQUFNLGFBQWE7QUFBQSxPQUFLLElBRTNELGdCQUFBRixPQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU87QUFBQTtBQUFBLE1BQ0gsTUFBTSxhQUFhO0FBQUEsT0FDMUMsR0FFUjtBQUFBLEtBRVI7QUFFUjtBQUVPLFNBQVMsZ0JBQWdCLEVBQUUsT0FBTyxTQUFTLFNBQVMsZUFBZSxHQUFHO0FBQ3pFLE1BQUksQ0FBQyxTQUFTLE1BQU0sVUFBVSxRQUFRO0FBQ2xDLFdBQ0ksZ0JBQUFILE1BQUMsU0FBTSxPQUFNLE9BQU0sVUFBVSxHQUN6QiwwQkFBQUEsTUFBQ0csUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLGtDQUFvQixHQUNwRDtBQUFBLEVBRVI7QUFDQSxRQUFNLFVBQVUsTUFBTSxVQUFVO0FBQ2hDLFFBQU0sUUFBUSxNQUFNLFNBQVMsVUFBVSxZQUFZO0FBQ25ELFFBQU0sUUFBUSxVQUNWLGdCQUFBSCxNQUFDRyxRQUFBLEVBQUssT0FBTyxNQUFNLFFBQVEsMkNBQXFCLElBRWhELGdCQUFBSCxNQUFDRyxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sdUJBQVM7QUFFdkMsU0FDSSxnQkFBQUgsTUFBQyxTQUFNLE9BQWMsT0FBYyxVQUFVLEdBQ3hDLGdCQUFNLFNBQVMsVUFDWixnQkFBQUEsTUFBQyxnQkFBYSxPQUFjLElBRTVCLGdCQUFBQTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0c7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQTtBQUFBLEVBQ0osR0FFUjtBQUVSOzs7QUNoWEEsT0FBT1EsYUFBVztBQUNsQixTQUFTLE9BQUFDLE9BQUssUUFBQUMsY0FBWTtBQWVYLFNBOENLLFlBQUFDLFdBOUNMLE9BQUFDLE9BSUgsUUFBQUMsY0FKRztBQVpmLFNBQVMsTUFBTSxHQUFHO0FBQ2QsTUFBSSxDQUFDLEVBQUcsUUFBTztBQUNmLE1BQUk7QUFDQSxXQUFPLElBQUksS0FBSyxDQUFDLEVBQUUsZUFBZTtBQUFBLEVBQ3RDLFFBQVE7QUFDSixXQUFPLE9BQU8sQ0FBQztBQUFBLEVBQ25CO0FBQ0o7QUFFTyxTQUFTLG1CQUFtQixFQUFFLE9BQU8sR0FBRztBQUMzQyxNQUFJLENBQUMsT0FBUSxRQUFPO0FBQ3BCLE1BQUksT0FBTyxTQUFTO0FBQ2hCLFdBQU8sZ0JBQUFELE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxrQ0FBZTtBQUFBLEVBQ3BEO0FBQ0EsTUFBSSxPQUFPLFNBQVMsQ0FBQyxPQUFPLFFBQVE7QUFDaEMsV0FDSSxnQkFBQUQsT0FBQ0UsT0FBQSxFQUFJLGVBQWMsVUFDZjtBQUFBLHNCQUFBSCxNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLEtBQU0saUJBQU8sT0FBTTtBQUFBLE1BQ3JDLE9BQU8sT0FDSixnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLE1BQUssZ0JBQzFCLGlCQUFPLElBQUksTUFBTSxHQUFHLEdBQUcsR0FDNUI7QUFBQSxPQUVSO0FBQUEsRUFFUjtBQUNBLFFBQU0sSUFBSSxPQUFPO0FBQ2pCLE1BQUksQ0FBQyxFQUFHLFFBQU8sZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxxQkFBTztBQUVsRCxRQUFNLFVBQVUsRUFBRSxXQUFXLENBQUM7QUFDOUIsUUFBTSxTQUFTLEVBQUUsWUFBWSxRQUFRLFVBQVUsS0FBSztBQUVwRCxTQUNJLGdCQUFBRCxPQUFDRSxPQUFBLEVBQUksZUFBYyxVQUNmO0FBQUEsb0JBQUFGLE9BQUNFLE9BQUEsRUFBSSxnQkFBZSxpQkFDaEI7QUFBQSxzQkFBQUgsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxRQUFRLE1BQUksTUFDMUIsWUFBRSxNQUNQO0FBQUEsTUFDQSxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sU0FBUyxNQUFNLE1BQU0sTUFBTSxNQUNuQyxZQUFFLFVBQVUsWUFBWSxTQUFTLFdBQVcsTUFDakQ7QUFBQSxPQUNKO0FBQUEsSUFDQSxnQkFBQUQsT0FBQ0UsT0FBQSxFQUNHO0FBQUEsc0JBQUFILE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyx1QkFBUztBQUFBLE1BQ25DLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUssZ0JBQU0sRUFBRSxTQUFTLEdBQUU7QUFBQSxPQUMvQztBQUFBLElBQ0EsZ0JBQUFELE9BQUNFLE9BQUEsRUFDRztBQUFBLHNCQUFBSCxNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sd0JBQVU7QUFBQSxNQUNwQyxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxJQUFLLGdCQUFNLEVBQUUsVUFBVSxHQUFFO0FBQUEsT0FDaEQ7QUFBQSxJQUNBLGdCQUFBRCxPQUFDRSxPQUFBLEVBQ0c7QUFBQSxzQkFBQUgsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLG9CQUFNO0FBQUEsTUFDaEMsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sSUFBSyxZQUFFLFFBQVEsVUFBSTtBQUFBLE9BQzFDO0FBQUEsSUFDQSxnQkFBQUQsT0FBQ0UsT0FBQSxFQUNHO0FBQUEsc0JBQUFILE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxvQkFBTTtBQUFBLE1BQ2hDLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUssWUFBRSxRQUFRLFVBQUk7QUFBQSxNQUNyQyxFQUFFLFdBQ0MsZ0JBQUFELE9BQUFGLFdBQUEsRUFDSTtBQUFBLHdCQUFBQyxNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sc0JBQVE7QUFBQSxRQUNsQyxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxJQUFLLFlBQUUsUUFBUSxXQUFVO0FBQUEsUUFDNUMsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTywwQkFBWTtBQUFBLFFBQ3RDLGdCQUFBRCxPQUFDQyxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUs7QUFBQSxZQUFFLFFBQVE7QUFBQSxVQUFpQjtBQUFBLFdBQUM7QUFBQSxTQUN4RDtBQUFBLE9BRVI7QUFBQSxJQUNBLGdCQUFBRCxPQUFDRSxPQUFBLEVBQUksV0FBVyxHQUNaO0FBQUEsc0JBQUFILE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyx5QkFBVztBQUFBLE1BQ3JDLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUssa0JBQVEsYUFBYSxHQUFFO0FBQUEsTUFDL0MsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxvQkFBTTtBQUFBLE1BQ2hDLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE1BQU8sa0JBQVEsYUFBYSxHQUFFO0FBQUEsTUFDakQsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyx3QkFBVTtBQUFBLE1BQ3BDLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssUUFBUSxRQUFRLFVBQVUsS0FBSyxJQUFJLE1BQU0sTUFBTSxNQUFNLE9BQ3RELGtCQUFRLFVBQVUsR0FDdkI7QUFBQSxNQUNBLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sc0JBQVE7QUFBQSxNQUNsQyxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxJQUNkLGlCQUFPLFNBQVMsUUFBUSxXQUFXLElBQzlCLEdBQUcsUUFBUSxZQUFZLFFBQVEsQ0FBQyxDQUFDLE1BQ2pDLFVBQ1Y7QUFBQSxPQUNKO0FBQUEsSUFDQyxFQUFFLFVBQ0MsZ0JBQUFELE9BQUNFLE9BQUEsRUFDRztBQUFBLHNCQUFBSCxNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sc0JBQVE7QUFBQSxNQUNsQyxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFRLFlBQUUsUUFBTztBQUFBLE9BQ3hDO0FBQUEsSUFFSCxNQUFNLFFBQVEsRUFBRSxPQUFPLEtBQUssRUFBRSxRQUFRLFNBQVMsS0FDNUMsZ0JBQUFELE9BQUNFLE9BQUEsRUFBSSxXQUFXLEdBQUcsZUFBYyxVQUM3QjtBQUFBLHNCQUFBSCxNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sc0JBQVE7QUFBQSxNQUNqQyxFQUFFLFFBQVEsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFDekIsZ0JBQUFELE9BQUNFLE9BQUEsRUFDRztBQUFBLHdCQUFBSCxNQUFDRyxPQUFBLEVBQUksT0FBTyxHQUNSLDBCQUFBSDtBQUFBLFVBQUNFO0FBQUEsVUFBQTtBQUFBLFlBQ0csT0FDSSxFQUFFLFVBQ0ksTUFBTSxRQUNOLEVBQUUsS0FDQSxNQUFNLE9BQ04sTUFBTTtBQUFBLFlBR2pCLFlBQUUsVUFBVSxNQUFNLEVBQUUsS0FBSyxXQUFNO0FBQUE7QUFBQSxRQUNwQyxHQUNKO0FBQUEsUUFDQSxnQkFBQUYsTUFBQ0csT0FBQSxFQUFJLFVBQVUsR0FDWCwwQkFBQUgsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxJQUFJLE1BQUssZ0JBQ3ZCLFlBQUUsUUFDUCxHQUNKO0FBQUEsUUFDQyxFQUFFLFNBQ0MsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sS0FBSyxNQUFLLGdCQUN4QixZQUFFLE9BQ1A7QUFBQSxXQXRCRSxFQUFFLE1Bd0JaLENBQ0g7QUFBQSxNQUNBLEVBQUUsUUFBUSxTQUFTLE1BQ2hCLGdCQUFBRCxPQUFDQyxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQVM7QUFBQTtBQUFBLFFBQ3RCLEVBQUUsUUFBUSxTQUFTO0FBQUEsUUFBRztBQUFBLFNBQzVCO0FBQUEsT0FFUjtBQUFBLEtBRVI7QUFFUjs7O0FDbklBLE9BQU9FLFdBQVMsV0FBQUMsVUFBUyxZQUFBQyxpQkFBZ0I7QUFDekMsU0FBUyxPQUFBQyxPQUFLLFFBQUFDLFFBQU0sWUFBQUMsaUJBQWdCO0FBYXhCLFNBQ0ksT0FBQUMsT0FESixRQUFBQyxjQUFBO0FBVlosSUFBTSxZQUFZO0FBQ2xCLElBQU0sWUFBWTtBQUtsQixTQUFTLFVBQVUsRUFBRSxPQUFPLFNBQVMsU0FBUyxHQUFHO0FBQzdDLFFBQU0sVUFBVSxTQUFTO0FBQ3pCLE1BQUksU0FBUztBQUNULFdBQ0ksZ0JBQUFBLE9BQUNDLFFBQUEsRUFDRztBQUFBLHNCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUssbUJBQVE7QUFBQSxNQUNoQyxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxRQUFRLFNBQU8sTUFDN0IsZUFDTDtBQUFBLE9BQ0o7QUFBQSxFQUVSO0FBQ0EsU0FBTyxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxJQUFLLGtCQUFRLFNBQVMsVUFBVSxLQUFJO0FBQ2xFO0FBRUEsU0FBUyxpQkFBaUIsT0FBTyxNQUFNO0FBQ25DLE1BQUksVUFBVSxPQUFXLFFBQU87QUFDaEMsTUFBSSxVQUFVLEtBQU0sUUFBTztBQUMzQixNQUFJLFNBQVMsVUFBVTtBQUNuQixRQUFJO0FBQ0EsYUFBTyxLQUFLLFVBQVUsS0FBSztBQUFBLElBQy9CLFFBQVE7QUFDSixhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0o7QUFDQSxTQUFPLE9BQU8sS0FBSztBQUN2QjtBQUVBLFNBQVMsT0FBTyxLQUFLLE1BQU07QUFDdkIsUUFBTSxJQUFJLE9BQU87QUFDakIsVUFBUSxNQUFNO0FBQUEsSUFDVixLQUFLO0FBQ0QsYUFBTyxFQUFFLElBQUksTUFBTSxPQUFPLEVBQUU7QUFBQSxJQUNoQyxLQUFLLFVBQVU7QUFDWCxVQUFJLE1BQU0sR0FBSSxRQUFPLEVBQUUsSUFBSSxPQUFPLE9BQU8sa0JBQWtCO0FBQzNELFlBQU0sSUFBSSxPQUFPLENBQUM7QUFDbEIsVUFBSSxDQUFDLE9BQU8sU0FBUyxDQUFDLEVBQUcsUUFBTyxFQUFFLElBQUksT0FBTyxPQUFPLHNCQUFzQjtBQUMxRSxhQUFPLEVBQUUsSUFBSSxNQUFNLE9BQU8sRUFBRTtBQUFBLElBQ2hDO0FBQUEsSUFDQSxLQUFLO0FBQ0QsVUFBSSxNQUFNLE9BQVEsUUFBTyxFQUFFLElBQUksTUFBTSxPQUFPLEtBQUs7QUFDakQsVUFBSSxNQUFNLFFBQVMsUUFBTyxFQUFFLElBQUksTUFBTSxPQUFPLE1BQU07QUFDbkQsYUFBTyxFQUFFLElBQUksT0FBTyxPQUFPLHlCQUF5QjtBQUFBLElBQ3hELEtBQUs7QUFDRCxVQUFJLEVBQUUsS0FBSyxNQUFNLEdBQUksUUFBTyxFQUFFLElBQUksT0FBTyxPQUFPLGdCQUFnQjtBQUNoRSxVQUFJO0FBQ0EsZUFBTyxFQUFFLElBQUksTUFBTSxPQUFPLEtBQUssTUFBTSxDQUFDLEVBQUU7QUFBQSxNQUM1QyxTQUFTLEtBQUs7QUFDVixlQUFPLEVBQUUsSUFBSSxPQUFPLE9BQU8sSUFBSSxXQUFXLGVBQWU7QUFBQSxNQUM3RDtBQUFBLElBQ0o7QUFDSSxhQUFPLEVBQUUsSUFBSSxNQUFNLE9BQU8sRUFBRTtBQUFBLEVBQ3BDO0FBQ0o7QUFRTyxTQUFTLGtCQUFrQjtBQUFBLEVBQzlCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsV0FBVyxtQkFBbUI7QUFBQSxFQUM5QixrQkFBa0IsMEJBQTBCO0FBQUEsRUFDNUMsZ0JBQWdCLHdCQUF3QjtBQUFBLEVBQ3hDO0FBQUEsRUFDQTtBQUNKLEdBQUc7QUFHQyxRQUFNLGdCQUFnQkM7QUFBQSxJQUNsQixPQUNLLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPO0FBQUEsTUFDMUIsTUFBTSxFQUFFO0FBQUEsTUFDUixhQUFhLEVBQUU7QUFBQSxNQUNmLE1BQU0sRUFBRTtBQUFBLE1BQ1IsYUFBYSxFQUFFO0FBQUEsTUFDZixVQUFVLEVBQUU7QUFBQSxNQUNaLFlBQVksRUFBRTtBQUFBLE1BQ2QsVUFBVSxFQUFFO0FBQUEsTUFDWixNQUFNLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxJQUFJO0FBQUEsSUFDNUMsRUFBRTtBQUFBLElBQ04sQ0FBQyxTQUFTO0FBQUEsRUFDZDtBQUVBLFFBQU0sa0JBQWtCQTtBQUFBLElBQ3BCLE1BQU0sY0FBYyxJQUFJLENBQUMsR0FBRyxNQUFPLEVBQUUsY0FBYyxJQUFJLEVBQUcsRUFBRSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7QUFBQSxJQUNoRixDQUFDLGFBQWE7QUFBQSxFQUNsQjtBQUNBLFFBQU0sa0JBQWtCLGdCQUFnQixTQUFTO0FBS2pELFFBQU0sZUFDRixTQUFTLFVBQ0gsQ0FBQyxTQUFTLGFBQWEsV0FBVyxVQUFVLFFBQVEsSUFDcEQsQ0FBQyxVQUFVLFFBQVE7QUFDN0IsUUFBTSxhQUFhLENBQUMsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLFlBQVk7QUFFOUUsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQyxVQUFTLGFBQWE7QUFDbEQsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxVQUFTLGdCQUFnQjtBQUNuRCxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLFVBQVMsdUJBQXVCO0FBQ2xFLFFBQU0sQ0FBQyxnQkFBZ0IsaUJBQWlCLElBQUlBLFVBQVMsQ0FBQyxDQUFDLHFCQUFxQjtBQUM1RSxRQUFNLENBQUMsVUFBVSxXQUFXLElBQUlBLFVBQVMsQ0FBQztBQUMxQyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLFVBQVMsSUFBSTtBQUV2QyxRQUFNLGVBQWUsV0FBVyxRQUFRLEtBQUssV0FBVyxDQUFDO0FBRXpELFFBQU0sYUFBYSxDQUFDLFVBQVUsWUFBWTtBQUN0QztBQUFBLE1BQVUsQ0FBQyxTQUNQLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTyxNQUFNLFdBQVcsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBRTtBQUFBLElBQzdFO0FBQUEsRUFDSjtBQUVBLFFBQU0sWUFBWSxDQUFDLFVBQVU7QUFDekIsUUFBSSxXQUFXLFdBQVcsRUFBRztBQUM3QixnQkFBWSxDQUFDLFNBQVMsTUFBTSxRQUFRLFdBQVcsVUFBVSxXQUFXLE1BQU07QUFBQSxFQUM5RTtBQUVBLFFBQU0sWUFBWSxNQUFNO0FBQ3BCLFVBQU0sWUFBWSxDQUFDO0FBQ25CLGVBQVcsS0FBSyxRQUFRO0FBQ3BCLFVBQUksQ0FBQyxFQUFFLFlBQWE7QUFDcEIsVUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssV0FBVyxHQUFHO0FBQ2hDLFlBQUksRUFBRSxZQUFZLENBQUMsRUFBRSxZQUFZO0FBQzdCLG1CQUFTLElBQUksRUFBRSxJQUFJLGdCQUFnQjtBQUNuQztBQUFBLFFBQ0o7QUFFQSxZQUFJLENBQUMsRUFBRSxXQUFZO0FBRW5CO0FBQUEsTUFDSjtBQUlBLFVBQ0ksRUFBRSxjQUNGLEVBQUUsU0FBUyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxHQUNoRDtBQUNFO0FBQUEsTUFDSjtBQUNBLFlBQU0sSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUk7QUFDL0IsVUFBSSxDQUFDLEVBQUUsSUFBSTtBQUNQLGlCQUFTLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbEM7QUFBQSxNQUNKO0FBQ0EsZ0JBQVUsRUFBRSxJQUFJLElBQUksRUFBRTtBQUFBLElBQzFCO0FBQ0EsYUFBUyxJQUFJO0FBQ2IsYUFBUztBQUFBLE1BQ0w7QUFBQSxNQUNBLFdBQVc7QUFBQSxNQUNYLGtCQUFrQjtBQUFBLE1BQ2xCO0FBQUEsSUFDSixDQUFDO0FBQUEsRUFDTDtBQUVBLEVBQUFDLFVBQVMsQ0FBQyxPQUFPLFFBQVE7QUFDckIsUUFBSSxJQUFJLFFBQVE7QUFDWixpQkFBVztBQUNYO0FBQUEsSUFDSjtBQUNBLFFBQUksSUFBSSxLQUFLO0FBQ1QsZ0JBQVUsSUFBSSxRQUFRLEtBQUssQ0FBQztBQUM1QjtBQUFBLElBQ0o7QUFDQSxRQUFJLElBQUksV0FBVztBQUNmLGdCQUFVLENBQUM7QUFDWDtBQUFBLElBQ0o7QUFDQSxRQUFJLElBQUksU0FBUztBQUNiLGdCQUFVLEVBQUU7QUFDWjtBQUFBLElBQ0o7QUFFQSxRQUFJLGlCQUFpQixZQUFZLElBQUksUUFBUTtBQUN6QyxnQkFBVTtBQUNWO0FBQUEsSUFDSjtBQUNBLFFBQUksaUJBQWlCLFlBQVksSUFBSSxRQUFRO0FBQ3pDLGlCQUFXO0FBQ1g7QUFBQSxJQUNKO0FBQ0EsUUFBSSxJQUFJLFFBQVE7QUFDWixnQkFBVTtBQUNWO0FBQUEsSUFDSjtBQUVBLFFBQUksaUJBQWlCLFNBQVM7QUFDMUIsVUFBSSxVQUFVLE9BQU8sVUFBVSxLQUFLO0FBQ2hDLGlCQUFTLENBQUMsTUFBTSxLQUFLLElBQUksV0FBVyxJQUFJLENBQUMsQ0FBQztBQUMxQztBQUFBLE1BQ0o7QUFDQSxVQUFJLFVBQVUsT0FBTyxVQUFVLEtBQUs7QUFDaEMsaUJBQVMsQ0FBQyxNQUFNLEtBQUssSUFBSSxXQUFXLElBQUksQ0FBQyxDQUFDO0FBQzFDO0FBQUEsTUFDSjtBQUNBO0FBQUEsSUFDSjtBQUNBLFFBQUksaUJBQWlCLGFBQWE7QUFDOUIsVUFBSSxVQUFVLE9BQU8sVUFBVSxLQUFLO0FBQ2hDLHFCQUFhLENBQUMsTUFBTSxLQUFLLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztBQUN4QztBQUFBLE1BQ0o7QUFDQSxVQUFJLFVBQVUsT0FBTyxVQUFVLEtBQUs7QUFDaEMscUJBQWEsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3RDO0FBQUEsTUFDSjtBQUNBO0FBQUEsSUFDSjtBQUNBLFFBQUksaUJBQWlCLFdBQVc7QUFDNUIsVUFBSSxVQUFVLE9BQU8sVUFBVSxLQUFLO0FBQ2hDLDBCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCO0FBQUEsTUFDSjtBQUNBO0FBQUEsSUFDSjtBQUVBLFFBQUksY0FBYyxXQUFXLE1BQU0sR0FBRztBQUNsQyxZQUFNLE1BQU0sT0FBTyxhQUFhLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLFlBQU0sUUFBUSxPQUFPLEdBQUc7QUFDeEIsVUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLFlBQWE7QUFDbEMsVUFBSSxJQUFJLGFBQWEsSUFBSSxRQUFRO0FBQzdCLG1CQUFXLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNyQztBQUFBLE1BQ0o7QUFDQSxVQUFJLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLFFBQVEsTUFBTSxXQUFXLEtBQUssU0FBUyxLQUFLO0FBQ3ZFLG1CQUFXLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSztBQUFBLE1BQ3BDO0FBQUEsSUFDSjtBQUFBLEVBQ0osQ0FBQztBQUVELFFBQU0sUUFDRixTQUFTLFVBQ0gsc0JBQW1CLFlBQVksS0FDL0IsWUFBUyxZQUFZLEdBQUcsU0FBUyxXQUFNLE9BQU8sTUFBTSxLQUFLLEVBQUU7QUFFckUsU0FDSSxnQkFBQUo7QUFBQSxJQUFDSztBQUFBLElBQUE7QUFBQSxNQUNHLGFBQVk7QUFBQSxNQUNaLGFBQWEsTUFBTTtBQUFBLE1BQ25CLGlCQUFpQixNQUFNO0FBQUEsTUFDdkIsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsZUFBYztBQUFBLE1BQ2QsT0FBTztBQUFBLE1BRVA7QUFBQSx3QkFBQUwsT0FBQ0ssT0FBQSxFQUFJLGNBQWMsR0FBRyxnQkFBZSxpQkFDakM7QUFBQSwwQkFBQU4sTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxRQUFRLE1BQUksTUFDMUIsaUJBQ0w7QUFBQSxVQUNDLFNBQVMsV0FBVyxlQUFlLFFBQ2hDLGdCQUFBRCxPQUFDQyxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQ2Q7QUFBQTtBQUFBLFlBQVk7QUFBQSxZQUFRLGdCQUFnQixJQUFJLEtBQUs7QUFBQSxhQUNsRDtBQUFBLFdBRVI7QUFBQSxRQUVDLE9BQU8sV0FBVyxJQUNmLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sOENBQWdDLElBRTFELGdCQUFBRCxPQUFDSyxPQUFBLEVBQUksZUFBYyxVQUNmO0FBQUEsMEJBQUFOLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyx1REFBeUM7QUFBQSxVQUNsRSxPQUFPLElBQUksQ0FBQyxHQUFHLE1BQU07QUFDbEIsa0JBQU0sWUFBWSxpQkFBaUIsT0FBTyxDQUFDO0FBQzNDLGtCQUFNLFdBQVcsQ0FBQyxFQUFFO0FBQ3BCLG1CQUNJLGdCQUFBRCxPQUFDSyxPQUFBLEVBQWlCLFdBQVcsR0FBRyxlQUFjLFVBQzFDO0FBQUEsOEJBQUFMLE9BQUNLLE9BQUEsRUFDRztBQUFBLGdDQUFBTixNQUFDTSxPQUFBLEVBQUksT0FBTyxJQUNSLDBCQUFBTDtBQUFBLGtCQUFDQztBQUFBLGtCQUFBO0FBQUEsb0JBQ0csT0FDSSxZQUNNLE1BQU0sU0FDTixXQUNFLE1BQU0sVUFDTixNQUFNO0FBQUEsb0JBRWxCLE1BQU07QUFBQSxvQkFFTDtBQUFBLHdCQUFFO0FBQUEsc0JBQ0YsRUFBRSxXQUFXLE1BQU07QUFBQTtBQUFBO0FBQUEsZ0JBQ3hCLEdBQ0o7QUFBQSxnQkFDQSxnQkFBQUYsTUFBQ00sT0FBQSxFQUFJLE9BQU8sSUFDUiwwQkFBQU4sTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFVLFlBQUUsTUFBSyxHQUN4QztBQUFBLGdCQUNBLGdCQUFBRixNQUFDTSxPQUFBLEVBQUksVUFBVSxHQUNWLHFCQUNHLGdCQUFBTixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQ2QsWUFBRSxRQUFRLHFCQUNmLElBRUEsZ0JBQUFGO0FBQUEsa0JBQUM7QUFBQTtBQUFBLG9CQUNHLE9BQU8sRUFBRTtBQUFBLG9CQUNULFNBQVM7QUFBQSxvQkFDVCxVQUFVLE1BQU07QUFBQSxvQkFBQztBQUFBO0FBQUEsZ0JBQ3JCLEdBRVI7QUFBQSxpQkFDSjtBQUFBLGNBQ0MsRUFBRSxlQUFlLGFBQ2QsZ0JBQUFBLE1BQUNNLE9BQUEsRUFBSSxZQUFZLElBQ2IsMEJBQUFOLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBUSxZQUFFLGFBQVksR0FDN0M7QUFBQSxpQkFyQ0UsRUFBRSxJQXVDWjtBQUFBLFVBRVIsQ0FBQztBQUFBLFdBQ0w7QUFBQSxRQUdILFNBQVMsV0FDTixnQkFBQUQsT0FBQ0ssT0FBQSxFQUFJLFdBQVcsR0FBRyxlQUFjLFVBQzdCO0FBQUEsMEJBQUFOLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxzQkFBUTtBQUFBLFVBQ2xDLGdCQUFBRCxPQUFDSyxPQUFBLEVBQ0c7QUFBQSw0QkFBQU4sTUFBQ00sT0FBQSxFQUFJLE9BQU8sSUFDUiwwQkFBQU47QUFBQSxjQUFDRTtBQUFBLGNBQUE7QUFBQSxnQkFDRyxPQUNJLGlCQUFpQixVQUFVLE1BQU0sU0FBUyxNQUFNO0FBQUEsZ0JBRXBELE1BQU0saUJBQWlCO0FBQUEsZ0JBQzFCO0FBQUE7QUFBQSxZQUVELEdBQ0o7QUFBQSxZQUNBLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUssaUJBQU07QUFBQSxZQUM5QixnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLHFCQUFPO0FBQUEsYUFDdkM7QUFBQSxVQUNBLGdCQUFBRCxPQUFDSyxPQUFBLEVBQ0c7QUFBQSw0QkFBQU4sTUFBQ00sT0FBQSxFQUFJLE9BQU8sSUFDUiwwQkFBQU47QUFBQSxjQUFDRTtBQUFBLGNBQUE7QUFBQSxnQkFDRyxPQUNJLGlCQUFpQixjQUNYLE1BQU0sU0FDTixNQUFNO0FBQUEsZ0JBRWhCLE1BQU0saUJBQWlCO0FBQUEsZ0JBQzFCO0FBQUE7QUFBQSxZQUVELEdBQ0o7QUFBQSxZQUNBLGdCQUFBRCxPQUFDQyxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUs7QUFBQTtBQUFBLGNBQVU7QUFBQSxlQUFDO0FBQUEsWUFDbkMsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxxQkFBTztBQUFBLGFBQ3ZDO0FBQUEsVUFDQSxnQkFBQUQsT0FBQ0ssT0FBQSxFQUNHO0FBQUEsNEJBQUFOLE1BQUNNLE9BQUEsRUFBSSxPQUFPLElBQ1IsMEJBQUFOO0FBQUEsY0FBQ0U7QUFBQSxjQUFBO0FBQUEsZ0JBQ0csT0FDSSxpQkFBaUIsWUFDWCxNQUFNLFNBQ04sTUFBTTtBQUFBLGdCQUVoQixNQUFNLGlCQUFpQjtBQUFBLGdCQUMxQjtBQUFBO0FBQUEsWUFFRCxHQUNKO0FBQUEsWUFDQSxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8saUJBQWlCLE1BQU0sT0FBTyxNQUFNLE9BQzVDLDJCQUFpQixRQUFRLE9BQzlCO0FBQUEsWUFDQSxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLHVCQUFTO0FBQUEsYUFDekM7QUFBQSxXQUNKO0FBQUEsUUFHSCxTQUNHLGdCQUFBRixNQUFDTSxPQUFBLEVBQUksV0FBVyxHQUNaLDBCQUFBTixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLEtBQU0saUJBQU0sR0FDbkM7QUFBQSxRQUdKLGdCQUFBRCxPQUFDSyxPQUFBLEVBQUksV0FBVyxHQUFHLGdCQUFlLGlCQUM5QjtBQUFBLDBCQUFBTixNQUFDTSxPQUFBLEVBQ0csMEJBQUFMO0FBQUEsWUFBQ0M7QUFBQSxZQUFBO0FBQUEsY0FDRyxPQUFPLGlCQUFpQixXQUFXLE1BQU0sU0FBUyxNQUFNO0FBQUEsY0FDeEQsTUFBTSxpQkFBaUI7QUFBQSxjQUV0QjtBQUFBLGlDQUFpQixXQUFXLFlBQU87QUFBQSxnQkFBSztBQUFBLGdCQUNsQyxTQUFTLFVBQVUsa0JBQWtCO0FBQUE7QUFBQTtBQUFBLFVBQ2hELEdBQ0o7QUFBQSxVQUNBLGdCQUFBRixNQUFDTSxPQUFBLEVBQ0csMEJBQUFOO0FBQUEsWUFBQ0U7QUFBQSxZQUFBO0FBQUEsY0FDRyxPQUFPLGlCQUFpQixXQUFXLE1BQU0sUUFBUSxNQUFNO0FBQUEsY0FDdkQsTUFBTSxpQkFBaUI7QUFBQSxjQUMxQjtBQUFBO0FBQUEsVUFFRCxHQUNKO0FBQUEsV0FDSjtBQUFBLFFBQ0MsQ0FBQyxtQkFBbUIsU0FBUyxZQUMxQixnQkFBQUYsTUFBQ00sT0FBQSxFQUFJLFdBQVcsR0FDWiwwQkFBQU4sTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLHNFQUU1QixHQUNKO0FBQUE7QUFBQTtBQUFBLEVBRVI7QUFFUjs7O0FDamFBLE9BQU9LLGFBQVc7QUFDbEIsU0FBUyxPQUFBQyxPQUFLLFFBQUFDLFFBQU0sWUFBQUMsaUJBQWdCO0FBK0JwQixnQkFBQUMsT0FXQSxRQUFBQyxjQVhBO0FBNUJULFNBQVMsYUFBYSxFQUFFLE9BQU8sTUFBTSxlQUFlLFdBQVcsT0FBTyxRQUFRLFdBQVcsU0FBUyxHQUFHO0FBQ3hHLEVBQUFDLFVBQVMsQ0FBQyxPQUFPLFFBQVE7QUFDckIsUUFBSSxJQUFJLFFBQVE7QUFDWixpQkFBVztBQUNYO0FBQUEsSUFDSjtBQUNBLFFBQUksSUFBSSxVQUFVLFVBQVUsT0FBTyxVQUFVLEtBQUs7QUFDOUMsa0JBQVk7QUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLFVBQVUsT0FBTyxVQUFVLEtBQUs7QUFDaEMsaUJBQVc7QUFBQSxJQUNmO0FBQUEsRUFDSixDQUFDO0FBRUQsUUFBTSxjQUFjLFNBQVMsV0FBVyxNQUFNLE1BQU0sU0FBUyxPQUFPLE1BQU0sT0FBTyxNQUFNO0FBRXZGLFNBQ0ksZ0JBQUFEO0FBQUEsSUFBQ0U7QUFBQSxJQUFBO0FBQUEsTUFDRyxhQUFZO0FBQUEsTUFDWixhQUFhLE1BQU07QUFBQSxNQUNuQixpQkFBaUIsTUFBTTtBQUFBLE1BQ3ZCLFVBQVU7QUFBQSxNQUNWLFVBQVU7QUFBQSxNQUNWLGVBQWM7QUFBQSxNQUNkLE9BQU87QUFBQSxNQUVQO0FBQUEsd0JBQUFILE1BQUNHLE9BQUEsRUFBSSxjQUFjLEdBQ2YsMEJBQUFILE1BQUNJLFFBQUEsRUFBSyxPQUFPLGFBQWEsTUFBSSxNQUN6QixpQkFDTCxHQUNKO0FBQUEsUUFDQyxTQUNJLE1BQU0sUUFBUSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxNQUM3QyxnQkFBQUosTUFBQ0csT0FBQSxFQUNHLDBCQUFBSCxNQUFDSSxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUssZ0JBQUssS0FEdkIsQ0FFVixDQUNIO0FBQUEsUUFDTCxnQkFBQUgsT0FBQ0UsT0FBQSxFQUFJLFdBQVcsR0FBRyxnQkFBZSxpQkFDOUI7QUFBQSwwQkFBQUYsT0FBQ0csUUFBQSxFQUFLLE9BQU8sYUFBYSxNQUFJLE1BQUM7QUFBQTtBQUFBLFlBQ2xCO0FBQUEsYUFDYjtBQUFBLFVBQ0EsZ0JBQUFKLE1BQUNJLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTywwQkFBWTtBQUFBLFdBQzFDO0FBQUE7QUFBQTtBQUFBLEVBQ0o7QUFFUjs7O0FDbERBLFNBQVMsZUFBQUMsY0FBYSxhQUFBQyxZQUFXLFVBQUFDLFNBQVEsWUFBQUMsaUJBQWdCO0FBQ3pEO0FBQUEsRUFDSTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDRztBQUNQO0FBQUEsRUFDSTtBQUFBLEVBQ0E7QUFBQSxPQUNHO0FBQ1AsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxZQUFZLFlBQUFDLGlCQUFnQjtBQUVyQyxJQUFNLGNBQWM7QUFFcEIsU0FBUyxVQUFVLEdBQUcsTUFBTTtBQUN4QixNQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsT0FBUSxRQUFPO0FBQ3BDLE1BQUksQ0FBQyxFQUFFLE1BQU0sV0FBVyxXQUFXLEVBQUcsUUFBTztBQUM3QyxNQUFJLENBQUMsS0FBTSxRQUFPO0FBQ2xCLFNBQU8sRUFBRSxNQUFNLFNBQVMsSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRztBQUN6RTtBQVlPLFNBQVMsb0JBQW9CLFdBQVc7QUFDM0MsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJRCxVQUFTLENBQUMsQ0FBQztBQUM3QyxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLFVBQVMsSUFBSTtBQUMvQyxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlBLFVBQVMsSUFBSTtBQUMzQyxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLFVBQVMsSUFBSTtBQUN6QyxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlBLFVBQVMsQ0FBQyxDQUFDO0FBQ3pDLFFBQU0sQ0FBQyxjQUFjLGVBQWUsSUFBSUEsVUFBUyxJQUFJO0FBQ3JELFFBQU0sQ0FBQyxjQUFjLGVBQWUsSUFBSUEsVUFBUyxJQUFJO0FBQ3JELFFBQU0sQ0FBQyxhQUFhLGNBQWMsSUFBSUEsVUFBUyxDQUFDO0FBQ2hELFFBQU0sWUFBWUQsUUFBTyxDQUFDO0FBQzFCLFFBQU0sYUFBYUEsUUFBTyxDQUFDO0FBQzNCLFFBQU0sWUFBWUEsUUFBTyxDQUFDO0FBRTFCLFFBQU0sVUFBVUYsYUFBWSxNQUFNLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVsRSxFQUFBQyxXQUFVLE1BQU07QUFDWixRQUFJLENBQUMsV0FBVztBQUNaLG1CQUFhLENBQUMsQ0FBQztBQUNmLG1CQUFhLElBQUk7QUFDakIsaUJBQVcsS0FBSztBQUNoQjtBQUFBLElBQ0o7QUFDQSxRQUFJLFlBQVk7QUFDaEIsZUFBVyxJQUFJO0FBQ2YsbUJBQWUsT0FBTztBQUNsQixZQUFNLEtBQUssS0FBSyxJQUFJO0FBQ3BCLGlCQUFXLHFCQUFxQjtBQUNoQyxVQUFJO0FBQ0EsY0FBTSxPQUFPLE1BQU0scUJBQXFCLFNBQVM7QUFDakQsUUFBQUcsVUFBUyx1QkFBdUIsT0FBTztBQUFBLFVBQ25DLGFBQWEsS0FBSyxJQUFJLElBQUk7QUFBQSxVQUMxQixTQUFTO0FBQUEsVUFDVCxPQUFPLE1BQU0sVUFBVTtBQUFBLFFBQzNCLENBQUM7QUFDRCxZQUFJLFVBQVc7QUFDZixxQkFBYSxJQUFJO0FBQ2pCLHFCQUFhLElBQUk7QUFBQSxNQUNyQixTQUFTLEtBQUs7QUFDVixRQUFBQSxVQUFTLHVCQUF1QixTQUFTO0FBQUEsVUFDckMsYUFBYSxLQUFLLElBQUksSUFBSTtBQUFBLFVBQzFCLFNBQVM7QUFBQSxVQUNULE9BQU8sS0FBSyxXQUFXLE9BQU8sR0FBRztBQUFBLFFBQ3JDLENBQUM7QUFDRCxZQUFJLFVBQVc7QUFDZixxQkFBYSxLQUFLLFdBQVcsT0FBTyxHQUFHLENBQUM7QUFBQSxNQUM1QyxVQUFFO0FBQ0UsWUFBSSxDQUFDLFVBQVcsWUFBVyxLQUFLO0FBQUEsTUFDcEM7QUFBQSxJQUNKO0FBQ0EsU0FBSztBQUNMLFdBQU8sTUFBTTtBQUNULGtCQUFZO0FBQUEsSUFDaEI7QUFBQSxFQUNKLEdBQUcsQ0FBQyxXQUFXLFdBQVcsQ0FBQztBQUUzQixRQUFNLGFBQWFKLGFBQVksT0FBTyxTQUFTO0FBQzNDLFFBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtBQUNyQixnQkFBVSxJQUFJO0FBQ2Q7QUFBQSxJQUNKO0FBQ0EsVUFBTSxRQUFRLEVBQUUsVUFBVTtBQUMxQixjQUFVLEVBQUUsTUFBTSxTQUFTLE1BQU0sT0FBTyxNQUFNLE1BQU0sTUFBTSxRQUFRLEtBQUssQ0FBQztBQUN4RSxRQUFJO0FBQ0EsWUFBTSxPQUFPLE1BQU0sb0JBQW9CLFdBQVcsSUFBSTtBQUN0RCxVQUFJLFVBQVUsWUFBWSxNQUFPO0FBQ2pDLFVBQUksU0FBUztBQUNiLFVBQUksYUFBYTtBQUNqQixVQUFJO0FBQ0EsaUJBQVMsY0FBYyxNQUFNLEVBQUUsWUFBWSxHQUFHLElBQUksUUFBUSxDQUFDO0FBQUEsTUFDL0QsU0FBUyxLQUFLO0FBQ1YscUJBQWEsS0FBSyxXQUFXLE9BQU8sR0FBRztBQUFBLE1BQzNDO0FBQ0EsVUFBSSxVQUFVLFlBQVksTUFBTztBQUNqQyxnQkFBVTtBQUFBLFFBQ047QUFBQSxRQUNBLFNBQVM7QUFBQSxRQUNUO0FBQUEsUUFDQTtBQUFBLFFBQ0EsT0FBTztBQUFBLFFBQ1A7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNMLFNBQVMsS0FBSztBQUNWLFVBQUksVUFBVSxZQUFZLE1BQU87QUFDakMsZ0JBQVU7QUFBQSxRQUNOO0FBQUEsUUFDQSxTQUFTO0FBQUEsUUFDVCxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsUUFDUixPQUFPLEtBQUssV0FBVyxPQUFPLEdBQUc7QUFBQSxRQUNqQyxZQUFZO0FBQUEsTUFDaEIsQ0FBQztBQUFBLElBQ0w7QUFBQSxFQUNKLEdBQUcsQ0FBQyxTQUFTLENBQUM7QUFFZCxRQUFNLGNBQWNBLGFBQVksTUFBTTtBQUNsQyxjQUFVO0FBQ1YsY0FBVSxJQUFJO0FBQUEsRUFDbEIsR0FBRyxDQUFDLENBQUM7QUFFTCxRQUFNLGNBQWNBO0FBQUEsSUFDaEIsT0FBTyxTQUFTO0FBQ1osVUFBSSxDQUFDLFdBQVc7QUFDWixtQkFBVyxDQUFDLENBQUM7QUFDYix3QkFBZ0IsSUFBSTtBQUNwQjtBQUFBLE1BQ0o7QUFDQSxZQUFNLFFBQVEsRUFBRSxXQUFXO0FBQzNCLFVBQUk7QUFDQSxjQUFNLFFBQVEsTUFBTSxpQkFBaUIsU0FBUztBQUM5QyxZQUFJLFdBQVcsWUFBWSxNQUFPO0FBQ2xDLGNBQU0sWUFBWSxTQUFTLENBQUMsR0FDdkIsT0FBTyxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxFQUNoQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sRUFBRSxNQUFNLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFDekQsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFFLElBQUksQ0FBQztBQUNoRCxtQkFBVyxRQUFRO0FBQ25CLHdCQUFnQixJQUFJO0FBQUEsTUFDeEIsU0FBUyxLQUFLO0FBQ1YsWUFBSSxXQUFXLFlBQVksTUFBTztBQUNsQyxZQUFJLGlCQUFpQixLQUFLLEtBQUssV0FBVyxFQUFFLEdBQUc7QUFDM0MscUJBQVcsQ0FBQyxDQUFDO0FBQ2IsMEJBQWdCLElBQUk7QUFBQSxRQUN4QixPQUFPO0FBQ0gscUJBQVcsQ0FBQyxDQUFDO0FBQ2IsMEJBQWdCLEtBQUssV0FBVyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQy9DO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxJQUNBLENBQUMsU0FBUztBQUFBLEVBQ2Q7QUFFQSxRQUFNLGFBQWFBO0FBQUEsSUFDZixPQUFPLFNBQVM7QUFDWixVQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07QUFDckIsd0JBQWdCLElBQUk7QUFDcEI7QUFBQSxNQUNKO0FBQ0EsWUFBTSxRQUFRLEVBQUUsVUFBVTtBQUMxQixzQkFBZ0IsRUFBRSxNQUFNLFNBQVMsTUFBTSxRQUFRLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbEUsVUFBSTtBQUNBLGNBQU0sT0FBTyxNQUFNLGdCQUFnQixXQUFXLElBQUk7QUFDbEQsWUFBSSxVQUFVLFlBQVksTUFBTztBQUNqQyxZQUFJLFNBQVM7QUFDYixZQUFJLGFBQWE7QUFDakIsWUFBSTtBQUNBLG1CQUFTLEtBQUssTUFBTSxJQUFJO0FBQUEsUUFDNUIsU0FBUyxLQUFLO0FBQ1YsdUJBQWEsS0FBSyxXQUFXLE9BQU8sR0FBRztBQUFBLFFBQzNDO0FBQ0Esd0JBQWdCO0FBQUEsVUFDWjtBQUFBLFVBQ0EsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFVBQ1IsS0FBSztBQUFBLFVBQ0wsT0FBTztBQUFBLFFBQ1gsQ0FBQztBQUFBLE1BQ0wsU0FBUyxLQUFLO0FBQ1YsWUFBSSxVQUFVLFlBQVksTUFBTztBQUNqQyx3QkFBZ0I7QUFBQSxVQUNaO0FBQUEsVUFDQSxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsVUFDUixPQUFPLEtBQUssV0FBVyxPQUFPLEdBQUc7QUFBQSxRQUNyQyxDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0o7QUFBQSxJQUNBLENBQUMsU0FBUztBQUFBLEVBQ2Q7QUFFQSxRQUFNLGNBQWNBLGFBQVksTUFBTTtBQUNsQyxjQUFVO0FBQ1Ysb0JBQWdCLElBQUk7QUFBQSxFQUN4QixHQUFHLENBQUMsQ0FBQztBQUVMLFFBQU0sU0FBU0E7QUFBQSxJQUNYLE9BQU8sU0FBUztBQUNaLFVBQUksQ0FBQyxhQUFhLENBQUMsS0FBTSxRQUFPLEVBQUUsSUFBSSxPQUFPLE9BQU8sZ0JBQWdCO0FBQ3BFLFVBQUk7QUFDQSxjQUFNLE1BQU0sTUFBTSxzQkFBc0IsRUFBRSxTQUFTLFdBQVcsS0FBSyxDQUFDO0FBQ3BFLHFCQUFhLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJLENBQUM7QUFDMUQsa0JBQVU7QUFDVixrQkFBVSxJQUFJO0FBQ2QsZUFBTyxFQUFFLElBQUksTUFBTSxRQUFRLElBQUk7QUFBQSxNQUNuQyxTQUFTLEtBQUs7QUFDVixlQUFPLEVBQUUsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLE9BQU8sR0FBRyxFQUFFO0FBQUEsTUFDM0Q7QUFBQSxJQUNKO0FBQUEsSUFDQSxDQUFDLFNBQVM7QUFBQSxFQUNkO0FBRUEsU0FBTztBQUFBLElBQ0g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjtBQUNKOzs7QUM3T0EsU0FBUyxlQUFBSyxjQUFhLFVBQUFDLFNBQVEsWUFBQUMsaUJBQWdCO0FBQzlDLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsMkJBQTJCLHdCQUF3QjtBQUM1RCxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLGtCQUFrQjtBQUUzQixJQUFNLHFCQUFxQjtBQVdwQixTQUFTLDJCQUEyQjtBQUN2QyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLFVBQVMsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUNwRCxRQUFNLFdBQVdELFFBQU8sSUFBSTtBQUU1QixRQUFNLGFBQWFELGFBQVksTUFBTTtBQUNqQyxhQUFTLEVBQUUsT0FBTyxPQUFPLENBQUM7QUFBQSxFQUM5QixHQUFHLENBQUMsQ0FBQztBQUVMLFFBQU0sZ0JBQWdCQSxhQUFZLE1BQU07QUFDcEMsYUFBUyxTQUFTLFFBQVE7QUFBQSxFQUM5QixHQUFHLENBQUMsQ0FBQztBQUVMLFFBQU0sa0JBQWtCQSxhQUFZLENBQUMsVUFBVSxRQUFRLFdBQVc7QUFDOUQsYUFBUztBQUFBLE1BQ0wsT0FBTztBQUFBLE1BQ1AsTUFBTTtBQUFBLE1BQ047QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0wsR0FBRyxDQUFDLENBQUM7QUFFTCxRQUFNLGlCQUFpQkEsYUFBWSxDQUFDLFVBQVUsV0FBVztBQUNyRCxhQUFTO0FBQUEsTUFDTCxPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQVc7QUFBQSxNQUNYLGtCQUFrQjtBQUFBLE1BQ2xCLGdCQUFnQjtBQUFBLElBQ3BCLENBQUM7QUFBQSxFQUNMLEdBQUcsQ0FBQyxDQUFDO0FBRUwsUUFBTSxvQkFBb0JBLGFBQVksQ0FBQyxhQUFhO0FBQ2hELGFBQVMsRUFBRSxPQUFPLHFCQUFxQixTQUFTLENBQUM7QUFBQSxFQUNyRCxHQUFHLENBQUMsQ0FBQztBQUVMLFFBQU0sWUFBWUE7QUFBQSxJQUNkLE9BQU8sRUFBRSxXQUFXLFVBQVUsUUFBUSxRQUFRLFVBQVUsTUFBTTtBQUMxRCxVQUFJLENBQUMsUUFBUTtBQUNUO0FBQUEsTUFDSjtBQUNBLFlBQU0sS0FBSyxjQUFjLE1BQU07QUFDL0IsU0FBRyxPQUFPLFVBQVUsQ0FBQyxPQUFPLE1BQU07QUFDbEMsU0FBRyxPQUFPLFVBQVU7QUFDcEIsU0FBRyxPQUFPLFFBQVE7QUFFbEIsWUFBTSxZQUFZLEdBQUcsTUFBTTtBQUMzQixlQUFTO0FBQUEsUUFDTCxPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsUUFDTjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxlQUFlLG9CQUFJLElBQUk7QUFBQSxRQUN2QixXQUFXLEtBQUssSUFBSTtBQUFBLE1BQ3hCLENBQUM7QUFFRCxZQUFNLGFBQWEsSUFBSSxnQkFBZ0I7QUFDdkMsZUFBUyxVQUFVO0FBRW5CLFVBQUk7QUFDQSxjQUFNLFVBQVUsTUFBTSxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUc7QUFBQSxVQUM1QyxhQUFhO0FBQUEsVUFDYixVQUFVO0FBQUEsVUFDVjtBQUFBLFVBQ0EsYUFBYSxDQUFDLEVBQUUsV0FBVyxLQUFLLE1BQU07QUFDbEMscUJBQVMsQ0FBQyxTQUFTO0FBQ2Ysa0JBQUksS0FBSyxVQUFVLGFBQWEsS0FBSyxTQUFTLFNBQVUsUUFBTztBQUMvRCxvQkFBTSxPQUFPLElBQUksSUFBSSxLQUFLLGFBQWE7QUFDdkMsbUJBQUssSUFBSSxXQUFXO0FBQUEsZ0JBQ2hCLE9BQU87QUFBQSxnQkFDUCxNQUFNLEtBQUs7QUFBQSxnQkFDWCxRQUFRO0FBQUEsY0FDWixDQUFDO0FBQ0QscUJBQU8sRUFBRSxHQUFHLE1BQU0sZUFBZSxLQUFLO0FBQUEsWUFDMUMsQ0FBQztBQUFBLFVBQ0w7QUFBQSxVQUNBLFdBQVcsQ0FBQztBQUFBLFlBQ1I7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNKLE1BQU07QUFDRixxQkFBUyxDQUFDLFNBQVM7QUFDZixrQkFBSSxLQUFLLFVBQVUsYUFBYSxLQUFLLFNBQVMsU0FBVSxRQUFPO0FBQy9ELG9CQUFNLE9BQU8sSUFBSSxJQUFJLEtBQUssYUFBYTtBQUN2QyxtQkFBSyxJQUFJLFdBQVc7QUFBQSxnQkFDaEIsT0FBTztBQUFBLGdCQUNQLE1BQU0sS0FBSztBQUFBLGdCQUNYLFFBQVEsS0FBSyxPQUFPO0FBQUEsZ0JBQ3BCO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsY0FDSixDQUFDO0FBQ0QscUJBQU8sRUFBRSxHQUFHLE1BQU0sZUFBZSxLQUFLO0FBQUEsWUFDMUMsQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKLENBQUM7QUFDRCxjQUFNLFNBQVMsUUFBUSxDQUFDO0FBQ3hCLGlCQUFTO0FBQUEsVUFDTCxPQUFPO0FBQUEsVUFDUCxNQUFNO0FBQUEsVUFDTjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxZQUFZLEtBQUssSUFBSTtBQUFBLFFBQ3pCLENBQUM7QUFBQSxNQUNMLFNBQVMsS0FBSztBQUNWLGlCQUFTO0FBQUEsVUFDTCxPQUFPO0FBQUEsVUFDUCxNQUFNO0FBQUEsVUFDTjtBQUFBLFVBQ0E7QUFBQSxVQUNBLFFBQVE7QUFBQSxZQUNKLFFBQVEsT0FBTztBQUFBLFlBQ2YsSUFBSTtBQUFBLFlBQ0osT0FBTyxDQUFDO0FBQUEsWUFDUixPQUFPLEtBQUssV0FBVyxPQUFPLEdBQUc7QUFBQSxVQUNyQztBQUFBLFVBQ0EsWUFBWSxLQUFLLElBQUk7QUFBQSxRQUN6QixDQUFDO0FBQUEsTUFDTCxVQUFFO0FBQ0UsaUJBQVMsVUFBVTtBQUFBLE1BQ3ZCO0FBQUEsSUFDSjtBQUFBLElBQ0EsQ0FBQztBQUFBLEVBQ0w7QUFFQSxRQUFNLFdBQVdBO0FBQUEsSUFDYixPQUFPLEVBQUUsV0FBVyxVQUFVLFFBQVEsU0FBUyxXQUFXLFdBQVcsa0JBQWtCLGVBQWUsTUFBTTtBQUN4RyxVQUFJLENBQUMsV0FBVyxRQUFRLFdBQVcsRUFBRztBQUV0QyxZQUFNLEtBQUssY0FBYyxNQUFNO0FBQy9CLFNBQUcsT0FBTyxVQUFVO0FBQ3BCLFNBQUcsT0FBTyxVQUFVO0FBRXBCLFlBQU0sYUFBWSxvQkFBSSxLQUFLLEdBQUUsWUFBWTtBQUN6QyxlQUFTO0FBQUEsUUFDTCxPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsUUFDTjtBQUFBLFFBQ0EsYUFBYSxRQUFRO0FBQUEsUUFDckI7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFTLENBQUM7QUFBQSxRQUNWLFdBQVcsb0JBQUksSUFBSTtBQUFBLFFBQ25CLFNBQVMsRUFBRSxXQUFXLEdBQUcsV0FBVyxHQUFHLFFBQVEsR0FBRyxhQUFhLEVBQUU7QUFBQSxRQUNqRTtBQUFBLE1BQ0osQ0FBQztBQUVELFlBQU0sYUFBYSxJQUFJLGdCQUFnQjtBQUN2QyxlQUFTLFVBQVU7QUFFbkIsVUFBSTtBQUNKLFVBQUk7QUFDQSxrQkFBVSxNQUFNLGlCQUFpQixJQUFJLFNBQVM7QUFBQSxVQUMxQztBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxRQUFRLFdBQVc7QUFBQSxVQUNuQixjQUFjLENBQUMsU0FBUztBQUNwQixxQkFBUyxDQUFDLFNBQVM7QUFDZixrQkFBSSxLQUFLLFVBQVUsYUFBYSxLQUFLLFNBQVMsUUFBUyxRQUFPO0FBQzlELHFCQUFPO0FBQUEsZ0JBQ0gsR0FBRztBQUFBLGdCQUNILGNBQWM7QUFBQSxrQkFDVixPQUFPLEtBQUs7QUFBQSxrQkFDWixNQUFNLEtBQUs7QUFBQSxrQkFDWCxZQUFZLEtBQUs7QUFBQSxrQkFDakIsV0FBVyxLQUFLO0FBQUEsa0JBQ2hCLFFBQVE7QUFBQSxnQkFDWjtBQUFBLGNBQ0o7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMO0FBQUEsVUFDQSxZQUFZLENBQUMsRUFBRSxPQUFPLE1BQU0sWUFBWSxXQUFXLFNBQVMsV0FBVyxNQUFNO0FBQ3pFLHFCQUFTLENBQUMsU0FBUztBQUNmLGtCQUFJLEtBQUssVUFBVSxhQUFhLEtBQUssU0FBUyxRQUFTLFFBQU87QUFDOUQsb0JBQU0sS0FBSyxRQUFRLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO0FBQ3hDLG9CQUFNLFNBQVMsUUFBUSxTQUFTO0FBQ2hDLG9CQUFNLFVBQVU7QUFBQSxnQkFDWixHQUFHLEtBQUs7QUFBQSxnQkFDUixFQUFFLE9BQU8sTUFBTSxZQUFZLFdBQVcsSUFBSSxPQUFPO0FBQUEsY0FDckQ7QUFDQSxxQkFBTztBQUFBLGdCQUNILEdBQUc7QUFBQSxnQkFDSCxjQUFjLEVBQUUsR0FBRyxLQUFLLGNBQWMsUUFBUSxPQUFPO0FBQUEsZ0JBQ3JEO0FBQUEsZ0JBQ0EsU0FBUztBQUFBLGtCQUNMLFdBQVcsV0FBVztBQUFBLGtCQUN0QixXQUFXLFdBQVc7QUFBQSxrQkFDdEIsUUFBUSxXQUFXO0FBQUEsa0JBQ25CLGFBQWEsV0FBVztBQUFBLGdCQUM1QjtBQUFBLGNBQ0o7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMO0FBQUEsVUFDQSxnQkFBZ0IsQ0FBQyxNQUFNO0FBQ25CLHFCQUFTLENBQUMsU0FBUztBQUNmLGtCQUFJLEtBQUssVUFBVSxhQUFhLEtBQUssU0FBUyxRQUFTLFFBQU87QUFDOUQsb0JBQU0sT0FBTyxJQUFJLElBQUksS0FBSyxTQUFTO0FBQ25DLG1CQUFLLElBQUksRUFBRSxRQUFRO0FBQUEsZ0JBQ2YsUUFBUSxFQUFFO0FBQUEsZ0JBQ1YsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUFBLGdCQUNSLFNBQVMsQ0FBQyxDQUFDLEVBQUU7QUFBQSxnQkFDYixPQUFPLEVBQUU7QUFBQSxnQkFDVCxXQUFXLE1BQU0sUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFLE1BQU0sU0FBUztBQUFBLGNBQ3pELENBQUM7QUFDRCxxQkFBTyxFQUFFLEdBQUcsTUFBTSxXQUFXLEtBQUs7QUFBQSxZQUN0QyxDQUFDO0FBQUEsVUFDTDtBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0wsU0FBUyxLQUFLO0FBQ1YsaUJBQVM7QUFBQSxVQUNMLE9BQU87QUFBQSxVQUNQLE1BQU07QUFBQSxVQUNOO0FBQUEsVUFDQSxTQUFTO0FBQUEsVUFDVCxRQUFRLEtBQUssV0FBVyxPQUFPLEdBQUc7QUFBQSxVQUNsQyxTQUFTLENBQUM7QUFBQSxVQUNWLFNBQVMsRUFBRSxXQUFXLEdBQUcsV0FBVyxHQUFHLFFBQVEsR0FBRyxhQUFhLEVBQUU7QUFBQSxVQUNqRSxTQUFTLENBQUM7QUFBQSxVQUNWLFlBQVksS0FBSyxJQUFJO0FBQUEsUUFDekIsQ0FBQztBQUNELGlCQUFTLFVBQVU7QUFDbkI7QUFBQSxNQUNKO0FBQ0EsZUFBUyxVQUFVO0FBQ25CLFlBQU0sY0FBYSxvQkFBSSxLQUFLLEdBQUUsWUFBWTtBQUcxQyxVQUFJLFdBQVc7QUFDZixVQUFJO0FBQ0EsbUJBQVcsV0FBVyxHQUFHLFlBQVk7QUFBQSxNQUN6QyxRQUFRO0FBQ0osbUJBQVc7QUFBQSxNQUNmO0FBQ0EsWUFBTSxTQUFTLGVBQWU7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsTUFBTSxTQUFTO0FBQUEsUUFDZjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGdCQUFnQixDQUFDLENBQUM7QUFBQSxRQUNsQixjQUFjLGFBQWEsQ0FBQztBQUFBLFFBQzVCO0FBQUEsUUFDQSxjQUFjLFFBQVE7QUFBQSxNQUMxQixDQUFDO0FBQ0QsVUFBSSxlQUFlO0FBQ25CLFVBQUk7QUFDQSx1QkFBZSxNQUFNLHFCQUFxQixFQUFFLFNBQVMsV0FBVyxPQUFPLENBQUM7QUFBQSxNQUM1RSxTQUFTLEtBQUs7QUFDVix1QkFBZSxFQUFFLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxPQUFPLEdBQUcsRUFBRTtBQUFBLE1BQ3BFO0FBRUEsZUFBUztBQUFBLFFBQ0wsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBLGNBQWMsUUFBUTtBQUFBLFFBQ3RCO0FBQUEsUUFDQTtBQUFBLFFBQ0EsU0FBUyxRQUFRO0FBQUEsUUFDakIsU0FBUztBQUFBLFVBQ0wsV0FBVyxRQUFRO0FBQUEsVUFDbkIsV0FBVyxRQUFRO0FBQUEsVUFDbkIsUUFBUSxRQUFRO0FBQUEsVUFDaEIsYUFBYSxRQUFRO0FBQUEsUUFDekI7QUFBQSxRQUNBLFNBQVMsUUFBUTtBQUFBLFFBQ2pCLFNBQVMsUUFBUTtBQUFBLFFBQ2pCLFFBQVEsUUFBUTtBQUFBLFFBQ2hCO0FBQUEsUUFDQSxZQUFZLEtBQUssSUFBSTtBQUFBLE1BQ3pCLENBQUM7QUFBQSxJQUNMO0FBQUEsSUFDQSxDQUFDO0FBQUEsRUFDTDtBQUVBLFFBQU0sY0FBY0EsYUFBWSxNQUFNO0FBQ2xDLGFBQVMsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUFBLEVBQzlCLEdBQUcsQ0FBQyxDQUFDO0FBRUwsU0FBTztBQUFBLElBQ0g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0o7QUFDSjtBQUVBLFNBQVMsY0FBYyxJQUFJO0FBQ3ZCLFNBQU87QUFBQSxJQUNILEdBQUc7QUFBQSxJQUNILFFBQVEsRUFBRSxHQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUc7QUFBQSxJQUMvQixNQUFNLEVBQUUsR0FBSSxHQUFHLFFBQVEsQ0FBQyxFQUFHO0FBQUEsSUFDM0IsV0FBVyxNQUFNLFFBQVEsR0FBRyxTQUFTLElBQUksR0FBRyxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0FBQUEsSUFDaEYsT0FBTyxNQUFNLFFBQVEsR0FBRyxLQUFLLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0FBQUEsRUFDeEU7QUFDSjtBQUVBLFNBQVMsZUFBZTtBQUFBLEVBQ3BCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQUFHO0FBQ0MsU0FBTztBQUFBLElBQ0gsU0FBUztBQUFBLElBQ1Q7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFlBQVksSUFBSSxLQUFLLFVBQVUsRUFBRSxRQUFRLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxRQUFRO0FBQUEsSUFDekUsTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLE1BQ04sTUFBTSxRQUFRLFFBQVE7QUFBQSxNQUN0QixhQUFhLFFBQVEsZUFBZTtBQUFBLE1BQ3BDLE9BQU8sUUFBUSxPQUFPLFVBQVU7QUFBQSxJQUNwQztBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxnQkFBZ0IsQ0FBQyxDQUFDO0FBQUEsTUFDbEIsUUFBUTtBQUFBLElBQ1o7QUFBQSxJQUNBLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxNQUNMLFdBQVcsUUFBUTtBQUFBLE1BQ25CLFdBQVcsUUFBUTtBQUFBLE1BQ25CLFFBQVEsUUFBUTtBQUFBLE1BQ2hCLGFBQWEsUUFBUTtBQUFBLE1BQ3JCLE9BQU87QUFBQSxJQUNYO0FBQUEsSUFDQSxTQUFTLENBQUMsQ0FBQyxRQUFRO0FBQUEsSUFDbkIsUUFBUSxRQUFRLFVBQVU7QUFBQSxJQUMxQixTQUFTLFFBQVE7QUFBQSxJQUNqQixTQUFTLFFBQVEsUUFBUSxJQUFJLENBQUMsT0FBTztBQUFBLE1BQ2pDLFFBQVEsR0FBRztBQUFBLE1BQ1gsSUFBSSxDQUFDLENBQUMsR0FBRztBQUFBLE1BQ1QsU0FBUyxDQUFDLENBQUMsR0FBRztBQUFBLE1BQ2QsT0FBTyxHQUFHLFNBQVM7QUFBQSxNQUNuQixPQUFPLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFDdkIsRUFBRSxNQUFNLElBQUksQ0FBQyxPQUFPO0FBQUEsUUFDaEIsT0FBTyxFQUFFO0FBQUEsUUFDVCxNQUFNLEVBQUU7QUFBQSxRQUNSLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFBQSxRQUNSLFNBQVMsQ0FBQyxDQUFDLEVBQUU7QUFBQSxRQUNiLFNBQVMsRUFBRSxXQUFXO0FBQUEsUUFDdEIsU0FBUyxFQUFFO0FBQUEsUUFDWCxZQUFZLEVBQUU7QUFBQSxRQUNkLE9BQU8sRUFBRSxTQUFTO0FBQUEsTUFDdEIsRUFBRSxJQUNGLENBQUM7QUFBQSxJQUNYLEVBQUU7QUFBQSxFQUNOO0FBQ0o7OztBTnhZQSxTQUFTLDJCQUEyQjtBQU1yQixTQXFVQyxZQUFBRyxXQXJVRCxPQUFBQyxPQVVLLFFBQUFDLGNBVkw7QUFKZixJQUFNLFNBQVMsQ0FBQyxRQUFRLFVBQVUsU0FBUztBQUUzQyxTQUFTLGFBQWEsRUFBRSxXQUFXLFNBQVMsT0FBTyxhQUFhLFFBQVEsR0FBRztBQUN2RSxNQUFJLFdBQVcsVUFBVSxXQUFXLEdBQUc7QUFDbkMsV0FBTyxnQkFBQUQsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLDJCQUFRO0FBQUEsRUFDN0M7QUFDQSxNQUFJLE9BQU87QUFDUCxXQUFPLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLEtBQU0saUJBQU07QUFBQSxFQUMxQztBQUNBLE1BQUksVUFBVSxXQUFXLEdBQUc7QUFDeEIsV0FDSSxnQkFBQUQsT0FBQ0UsT0FBQSxFQUFJLGVBQWMsVUFDZjtBQUFBLHNCQUFBSCxNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMscUNBQXVCO0FBQUEsTUFDbkQsZ0JBQUFGLE1BQUNHLE9BQUEsRUFBSSxXQUFXLEdBQ1osMEJBQUFGLE9BQUNDLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxNQUFLLFFBQU87QUFBQTtBQUFBLFFBQ2pCO0FBQUEsUUFDakIsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sUUFBUSxtRUFFM0I7QUFBQSxTQUNKLEdBQ0o7QUFBQSxPQUNKO0FBQUEsRUFFUjtBQUNBLFNBQ0ksZ0JBQUFGLE1BQUNHLE9BQUEsRUFBSSxlQUFjLFVBQ2Qsb0JBQVUsSUFBSSxDQUFDLElBQUksTUFBTTtBQUN0QixVQUFNLFFBQVEsTUFBTTtBQUNwQixVQUFNLE9BQU8sV0FBVyxRQUFRLFdBQU0sUUFBUSxXQUFNO0FBQ3BELFdBQ0ksZ0JBQUFGLE9BQUNFLE9BQUEsRUFDRztBQUFBLHNCQUFBSCxNQUFDRyxPQUFBLEVBQUksT0FBTyxHQUNSLDBCQUFBSCxNQUFDRSxRQUFBLEVBQUssT0FBTyxRQUFRLE1BQU0sU0FBUyxNQUFNLFNBQVUsZ0JBQUssR0FDN0Q7QUFBQSxNQUNBLGdCQUFBRCxPQUFDRSxPQUFBLEVBQUksZUFBYyxVQUFTLFVBQVUsR0FDbEM7QUFBQSx3QkFBQUgsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sUUFBUSxNQUFNLEtBQUssTUFBTSxPQUFPLE1BQU0sT0FDOUMsYUFBRyxNQUNSO0FBQUEsUUFDQyxHQUFHLGVBQ0EsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxNQUFLLGdCQUM1QixhQUFHLGFBQ1I7QUFBQSxTQUVSO0FBQUEsU0FiTSxHQUFHLElBY2I7QUFBQSxFQUVSLENBQUMsR0FDTDtBQUVSO0FBRUEsU0FBUyxTQUFTLEVBQUUsUUFBUSxjQUFjLFNBQVMsR0FBRztBQUNsRCxNQUFJLENBQUMsUUFBUTtBQUNULFdBQU8sZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyx1Q0FBeUI7QUFBQSxFQUNoRTtBQUNBLE1BQUksT0FBTyxTQUFTO0FBQ2hCLFdBQU8sZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxnQ0FBYTtBQUFBLEVBQ2xEO0FBQ0EsTUFBSSxPQUFPLE9BQU87QUFDZCxXQUFPLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLEtBQU0saUJBQU8sT0FBTTtBQUFBLEVBQ2pEO0FBQ0EsUUFBTSxTQUFTLE9BQU8sUUFBUSxJQUFJLE1BQU0sSUFBSTtBQUM1QyxRQUFNLE9BQU8sTUFBTSxNQUFNLGNBQWMsZUFBZSxLQUFLLElBQUksWUFBWSxJQUFJLENBQUMsQ0FBQztBQUNqRixTQUNJLGdCQUFBRCxPQUFDRSxPQUFBLEVBQUksZUFBYyxVQUNkO0FBQUEsV0FBTyxjQUNKLGdCQUFBSCxNQUFDRyxPQUFBLEVBQUksY0FBYyxHQUNmLDBCQUFBRixPQUFDQyxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU87QUFBQTtBQUFBLE1BQW1CLE9BQU87QUFBQSxPQUFXLEdBQ25FO0FBQUEsSUFFSCxLQUFLLElBQUksQ0FBQyxJQUFJLE1BQ1gsZ0JBQUFELE9BQUNDLFFBQUEsRUFBYSxPQUFPLE1BQU0sSUFBSSxNQUFLLGdCQUNoQztBQUFBLHNCQUFBRCxPQUFDQyxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQ2Q7QUFBQSxlQUFPLGVBQWUsSUFBSSxDQUFDLEVBQUUsU0FBUyxDQUFDO0FBQUEsUUFBRztBQUFBLFNBQy9DO0FBQUEsTUFDQyxNQUFNO0FBQUEsU0FKQSxDQUtYLENBQ0g7QUFBQSxJQUNBLE1BQU0sU0FBUyxnQkFBZ0IsWUFBWSxPQUN4QyxnQkFBQUQsT0FBQ0MsUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTO0FBQUE7QUFBQSxNQUN0QixNQUFNLFVBQVUsZ0JBQWdCLFlBQVk7QUFBQSxNQUFLO0FBQUEsT0FDdkQ7QUFBQSxLQUVSO0FBRVI7QUFFQSxTQUFTLFlBQVksRUFBRSxTQUFTLGFBQWEsU0FBUyxNQUFNLEdBQUc7QUFDM0QsTUFBSSxPQUFPO0FBQ1AsV0FBTyxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFRLGlCQUFNO0FBQUEsRUFDNUM7QUFDQSxNQUFJLFFBQVEsV0FBVyxHQUFHO0FBQ3RCLFdBQU8sZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUywwQkFBWTtBQUFBLEVBQ25EO0FBQ0EsU0FDSSxnQkFBQUQsT0FBQ0UsT0FBQSxFQUFJLGVBQWMsVUFDZDtBQUFBLFlBQVEsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNO0FBQ2hDLFlBQU0sUUFBUSxXQUFXLE1BQU07QUFDL0IsYUFDSSxnQkFBQUYsT0FBQ0UsT0FBQSxFQUNHO0FBQUEsd0JBQUFILE1BQUNHLE9BQUEsRUFBSSxPQUFPLEdBQ1IsMEJBQUFILE1BQUNFLFFBQUEsRUFBSyxPQUFPLFFBQVEsTUFBTSxTQUFTLE1BQU0sU0FDckMsa0JBQVEsV0FBTSxLQUNuQixHQUNKO0FBQUEsUUFDQSxnQkFBQUYsTUFBQ0csT0FBQSxFQUFJLFVBQVUsR0FDWCwwQkFBQUgsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sUUFBUSxNQUFNLEtBQUssTUFBTSxPQUFPLE1BQUssZ0JBQzdDLFlBQUUsS0FBSyxRQUFRLFdBQVcsRUFBRSxHQUNqQyxHQUNKO0FBQUEsV0FWTSxFQUFFLElBV1o7QUFBQSxJQUVSLENBQUM7QUFBQSxJQUNBLFFBQVEsU0FBUyxNQUNkLGdCQUFBRCxPQUFDQyxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQVM7QUFBQTtBQUFBLE1BQUUsUUFBUSxTQUFTO0FBQUEsTUFBRztBQUFBLE9BQU07QUFBQSxLQUVoRTtBQUVSO0FBRUEsU0FBUyxlQUFlLFNBQVM7QUFDN0IsUUFBTSxNQUFNLG9CQUFJLElBQUk7QUFDcEIsYUFBVyxLQUFLLFdBQVcsQ0FBQyxHQUFHO0FBQzNCLFFBQUksR0FBRyxRQUFTLEtBQUksSUFBSSxFQUFFLE9BQU87QUFBQSxFQUNyQztBQUNBLFNBQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxLQUFLO0FBQ3pCO0FBRU8sU0FBUyxhQUFhO0FBQUEsRUFDekI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixHQUFHO0FBQ0MsUUFBTSxFQUFFLE9BQU8sSUFBSUUsV0FBVTtBQUM3QixRQUFNLE9BQU8sUUFBUSxRQUFRO0FBRTdCLFFBQU0saUJBQWlCQyxVQUFRLE1BQU07QUFDakMsVUFBTSxPQUFPLGVBQWUsT0FBTztBQUNuQyxRQUFJLG9CQUFvQixDQUFDLEtBQUssU0FBUyxnQkFBZ0IsRUFBRyxNQUFLLFFBQVEsZ0JBQWdCO0FBQ3ZGLFdBQU87QUFBQSxFQUNYLEdBQUcsQ0FBQyxTQUFTLGdCQUFnQixDQUFDO0FBRTlCLFFBQU0sQ0FBQyxZQUFZLGFBQWEsSUFBSUMsV0FBUyxDQUFDO0FBQzlDLFFBQU0sWUFDRixlQUFlLFVBQVUsS0FBSyxlQUFlLENBQUMsS0FBSyxvQkFBb0I7QUFFM0UsUUFBTTtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSixJQUFJLG9CQUFvQixTQUFTO0FBRWpDLFFBQU1DLE9BQU0seUJBQXlCO0FBRXJDLFFBQU0sQ0FBQyxhQUFhLGNBQWMsSUFBSUQsV0FBUyxDQUFDO0FBQ2hELFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUEsV0FBUyxDQUFDO0FBQzVDLFFBQU0sQ0FBQyxZQUFZLGFBQWEsSUFBSUEsV0FBUyxNQUFNO0FBQ25ELFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUEsV0FBUyxDQUFDO0FBQ3RDLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUEsV0FBUyxJQUFJO0FBR3pDLFFBQU0sQ0FBQyxjQUFjLGVBQWUsSUFBSUEsV0FBUyxJQUFJO0FBRXJELFFBQU0sV0FBVyxVQUFVLFdBQVc7QUFFdEMsRUFBQUUsV0FBVSxNQUFNO0FBQ1osUUFBSSxDQUFDLFVBQVU7QUFDWCxrQkFBWTtBQUNaLG1CQUFhLENBQUM7QUFDZCxnQkFBVSxDQUFDO0FBQ1g7QUFBQSxJQUNKO0FBQ0EsZUFBVyxTQUFTLElBQUk7QUFDeEIsZ0JBQVksU0FBUyxJQUFJO0FBQ3pCLGlCQUFhLENBQUM7QUFDZCxjQUFVLENBQUM7QUFBQSxFQUNmLEdBQUcsQ0FBQyxVQUFVLE1BQU0sU0FBUyxDQUFDO0FBRTlCLEVBQUFBLFdBQVUsTUFBTTtBQUNaLFFBQUksZUFBZSxVQUFVLFFBQVE7QUFDakMscUJBQWUsS0FBSyxJQUFJLEdBQUcsVUFBVSxTQUFTLENBQUMsQ0FBQztBQUFBLElBQ3BEO0FBQUEsRUFDSixHQUFHLENBQUMsV0FBVyxXQUFXLENBQUM7QUFFM0IsUUFBTSxXQUFXRCxLQUFJLE1BQU07QUFDM0IsUUFBTSxnQkFDRixhQUFhLFVBQ2IsYUFBYSxhQUNiLGFBQWEsVUFDYixhQUFhLHVCQUNiLENBQUMsQ0FBQyxnQkFDRixDQUFDLENBQUM7QUFFTixFQUFBQyxXQUFVLE1BQU07QUFDWiwwQkFBc0IsaUJBQWlCLE9BQU87QUFBQSxFQUNsRCxHQUFHLENBQUMsZUFBZSxTQUFTLG1CQUFtQixDQUFDO0FBR2hELEVBQUFDO0FBQUEsSUFDSSxDQUFDLE9BQU8sUUFBUTtBQUNaLFVBQUksQ0FBQyxRQUFTO0FBQ2QsVUFBSSxjQUFlO0FBRW5CLFVBQUksSUFBSSxLQUFLO0FBQ1QsY0FBTSxNQUFNLElBQUksUUFBUSxLQUFLO0FBQzdCLGNBQU0sSUFBSSxPQUFPLFFBQVEsVUFBVTtBQUNuQyxzQkFBYyxRQUFRLElBQUksTUFBTSxPQUFPLFVBQVUsT0FBTyxNQUFNLENBQUM7QUFDL0Q7QUFBQSxNQUNKO0FBQ0EsVUFBSSxVQUFVLE9BQU8sZUFBZSxTQUFTLEdBQUc7QUFDNUMsc0JBQWMsQ0FBQyxPQUFPLElBQUksS0FBSyxlQUFlLE1BQU07QUFDcEQsdUJBQWUsQ0FBQztBQUNoQjtBQUFBLE1BQ0o7QUFDQSxVQUFJLFVBQVUsS0FBSztBQUNmLGdCQUFRO0FBQ1IsWUFBSSxTQUFVLGFBQVksU0FBUyxJQUFJO0FBQ3ZDO0FBQUEsTUFDSjtBQUVBLFVBQUksZUFBZSxRQUFRO0FBQ3ZCLFlBQUksSUFBSSxTQUFTO0FBQ2IseUJBQWUsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3hDO0FBQUEsUUFDSjtBQUNBLFlBQUksSUFBSSxXQUFXO0FBQ2YseUJBQWUsQ0FBQyxNQUFNLEtBQUssSUFBSSxVQUFVLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMzRDtBQUFBLFFBQ0o7QUFBQSxNQUNKLFdBQVcsZUFBZSxVQUFVO0FBQ2hDLFlBQUksSUFBSSxTQUFTO0FBQ2Isb0JBQVUsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ25DO0FBQUEsUUFDSjtBQUNBLFlBQUksSUFBSSxXQUFXO0FBQ2Ysb0JBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUN0QjtBQUFBLFFBQ0o7QUFDQSxZQUFJLFVBQVUsS0FBSztBQUNmLG9CQUFVLENBQUM7QUFDWDtBQUFBLFFBQ0o7QUFBQSxNQUNKLFdBQVcsZUFBZSxXQUFXO0FBQ2pDLFlBQUksSUFBSSxTQUFTO0FBQ2IsdUJBQWEsQ0FBQyxNQUFNLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3RDO0FBQUEsUUFDSjtBQUNBLFlBQUksSUFBSSxXQUFXO0FBQ2YsdUJBQWEsQ0FBQyxNQUFNLEtBQUssSUFBSSxRQUFRLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2RDtBQUFBLFFBQ0o7QUFDQSxZQUFJLElBQUksUUFBUTtBQUNaLGdCQUFNLElBQUksUUFBUSxTQUFTO0FBQzNCLGNBQUksRUFBRyxZQUFXLEVBQUUsSUFBSTtBQUN4QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsVUFBSSxDQUFDLFNBQVU7QUFDZixVQUFJLFVBQVUsS0FBSztBQUNmLFlBQUksQ0FBQyxRQUFRLFFBQVE7QUFDakIsb0JBQVUsK0NBQTBDO0FBQ3BEO0FBQUEsUUFDSjtBQUNBLHdCQUFnQixFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hDO0FBQUEsTUFDSjtBQUNBLFVBQUksVUFBVSxLQUFLO0FBQ2YsWUFBSSxDQUFDLFFBQVEsUUFBUTtBQUNqQixvQkFBVSwrQ0FBMEM7QUFDcEQ7QUFBQSxRQUNKO0FBQ0EsUUFBQUYsS0FBSSxlQUFlLFVBQVUsT0FBTyxNQUFNO0FBQzFDO0FBQUEsTUFDSjtBQUNBLFVBQUksVUFBVSxLQUFLO0FBQ2YsUUFBQUEsS0FBSSxrQkFBa0IsUUFBUTtBQUM5QjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsSUFDQSxFQUFFLFVBQVUsUUFBUTtBQUFBLEVBQ3hCO0FBR0EsRUFBQUU7QUFBQSxJQUNJLENBQUMsT0FBTyxRQUFRO0FBQ1osVUFBSSxDQUFDLFFBQVM7QUFDZCxVQUFJLENBQUMsYUFBYztBQUNuQixVQUFJLGFBQWEsT0FBUTtBQUN6QixVQUFJLElBQUksT0FBUSxhQUFZO0FBQUEsSUFDaEM7QUFBQSxJQUNBLEVBQUUsVUFBVSxXQUFXLENBQUMsQ0FBQyxnQkFBZ0IsYUFBYSxPQUFPO0FBQUEsRUFDakU7QUFHQSxFQUFBQTtBQUFBLElBQ0ksQ0FBQyxPQUFPLFFBQVE7QUFDWixVQUFJLGFBQWEsVUFBVztBQUM1QixVQUFJLElBQUksT0FBUSxDQUFBRixLQUFJLGNBQWM7QUFBQSxJQUN0QztBQUFBLElBQ0EsRUFBRSxVQUFVLFdBQVcsYUFBYSxVQUFVO0FBQUEsRUFDbEQ7QUFFQSxRQUFNLHFCQUFxQixNQUFNO0FBQzdCLFFBQUksYUFBYSxPQUFRO0FBQ3pCLElBQUFBLEtBQUksWUFBWTtBQUNoQixZQUFRO0FBQ1IsUUFBSSxTQUFVLGFBQVksU0FBUyxJQUFJO0FBQUEsRUFDM0M7QUFFQSxRQUFNLGlCQUFpQixRQUFRLFNBQVMsS0FBSztBQUU3QyxRQUFNLFFBQVEsWUFBWSxrQkFBZSxTQUFTLEtBQUs7QUFFdkQsUUFBTSxRQUNGLGdCQUFBUCxNQUFDRyxPQUFBLEVBQ0kseUJBQWUsU0FBUyxLQUNyQixnQkFBQUYsT0FBQUYsV0FBQSxFQUNJO0FBQUEsb0JBQUFFLE9BQUNDLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FDZDtBQUFBLG1CQUFhO0FBQUEsTUFBRTtBQUFBLE1BQUUsZUFBZTtBQUFBLE1BQVE7QUFBQSxPQUM3QztBQUFBLElBQ0EsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxlQUFDO0FBQUEsSUFDN0IsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxzQkFBUTtBQUFBLEtBQ3RDLEdBRVI7QUFHSixRQUFNLGVBQWUsS0FBSyxJQUFJLEdBQUcsT0FBTyxFQUFFO0FBSzFDLFFBQU0sc0JBQXNCLENBQUMsbUJBQW1CO0FBQzVDLFVBQU0sZUFBZSxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLFlBQVksU0FBUztBQUN6RSxXQUFPLGlCQUFpQixjQUFjLG9CQUFvQixXQUFXO0FBQUEsRUFDekU7QUFFQSxTQUNJLGdCQUFBRCxPQUFDRSxPQUFBLEVBQUksVUFBVSxHQUNYO0FBQUEsb0JBQUFGLE9BQUNFLE9BQUEsRUFBSSxPQUFNLE9BQU0sZUFBYyxVQUMzQjtBQUFBLHNCQUFBSDtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0c7QUFBQSxVQUNBLEtBQUssR0FBRyxVQUFVLE1BQU07QUFBQSxVQUN4QjtBQUFBLFVBQ0EsU0FBUyxlQUFlO0FBQUEsVUFDeEIsVUFBVTtBQUFBLFVBRVQsV0FBQyxZQUNFLGdCQUFBQSxNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMsMkVBRTVCLElBRUEsZ0JBQUFGO0FBQUEsWUFBQztBQUFBO0FBQUEsY0FDRztBQUFBLGNBQ0E7QUFBQSxjQUNBLE9BQU87QUFBQSxjQUNQO0FBQUEsY0FDQSxTQUFTLGVBQWU7QUFBQTtBQUFBLFVBQzVCO0FBQUE7QUFBQSxNQUVSO0FBQUEsTUFDQyxVQUNHLGdCQUFBQSxNQUFDRyxPQUFBLEVBQ0csMEJBQUFILE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxNQUFLLFFBQzFCLGtCQUNMLEdBQ0o7QUFBQSxPQUVSO0FBQUEsSUFFQSxnQkFBQUYsTUFBQ0csT0FBQSxFQUFJLE9BQU0sT0FBTSxlQUFjLFVBQzFCLHVCQUFhLGFBQWEsYUFBYSxTQUNwQyxnQkFBQUg7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLE9BQU9PLEtBQUk7QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQUEsUUFDVCxnQkFBZ0IsS0FBSyxJQUFJLEdBQUcsT0FBTyxFQUFFO0FBQUE7QUFBQSxJQUN6QyxJQUVBLGdCQUFBUDtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0csT0FBTTtBQUFBLFFBQ04sS0FBSyxXQUFXLFNBQVMsT0FBTztBQUFBLFFBQ2hDLFNBQVMsZUFBZTtBQUFBLFFBQ3hCLE9BQ0ksZ0JBQUFDLE9BQUNFLE9BQUEsRUFDRztBQUFBLDBCQUFBSCxNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLFNBQVMsZUFBQztBQUFBLFVBQzdCLGdCQUFBRixNQUFDRSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8scUJBQU87QUFBQSxVQUNqQyxnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLGVBQUM7QUFBQSxVQUM3QixnQkFBQUYsTUFBQ0UsUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLHNCQUFRO0FBQUEsVUFDbEMsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxlQUFDO0FBQUEsVUFDN0IsZ0JBQUFGLE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxrQkFBSTtBQUFBLFdBQ2xDO0FBQUEsUUFFSixVQUFVO0FBQUEsUUFFViwwQkFBQUYsTUFBQyxZQUFTLFFBQWdCLGNBQWMsUUFBUSxVQUFVLGNBQWM7QUFBQTtBQUFBLElBQzVFLEdBRVI7QUFBQSxJQUVBLGdCQUFBQSxNQUFDRyxPQUFBLEVBQUksT0FBTSxPQUFNLGVBQWMsVUFDM0IsMEJBQUFIO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRyxPQUFNO0FBQUEsUUFDTixLQUFLLFVBQVUsUUFBUTtBQUFBLFFBQ3ZCLFNBQVMsZUFBZTtBQUFBLFFBQ3hCLFVBQVU7QUFBQSxRQUVULHlCQUNHLGdCQUFBQyxPQUFBRixXQUFBLEVBQ0k7QUFBQSwwQkFBQUMsTUFBQyxzQkFBbUIsUUFBUSxjQUFjO0FBQUEsVUFDMUMsZ0JBQUFBLE1BQUNHLE9BQUEsRUFBSSxXQUFXLEdBQ1osMEJBQUFILE1BQUNFLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxzQkFBUSxHQUN0QztBQUFBLFdBQ0osSUFFQSxnQkFBQUQsT0FBQUYsV0FBQSxFQUNJO0FBQUEsMEJBQUFDO0FBQUEsWUFBQztBQUFBO0FBQUEsY0FDRztBQUFBLGNBQ0EsYUFBYTtBQUFBLGNBQ2IsU0FBUyxlQUFlO0FBQUEsY0FDeEIsT0FBTztBQUFBO0FBQUEsVUFDWDtBQUFBLFVBQ0Msa0JBQWtCLGVBQWUsYUFDOUIsZ0JBQUFBLE1BQUNHLE9BQUEsRUFBSSxXQUFXLEdBQ1osMEJBQUFGLE9BQUNDLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyxNQUFLLGdCQUFlO0FBQUE7QUFBQSxZQUM1QixlQUFlO0FBQUEsYUFDakMsR0FDSjtBQUFBLFdBRVI7QUFBQTtBQUFBLElBRVIsR0FDSjtBQUFBLElBRUMsZ0JBQ0csZ0JBQUFGO0FBQUEsTUFBQ0c7QUFBQSxNQUFBO0FBQUEsUUFDRyxVQUFTO0FBQUEsUUFDVCxPQUFPLFFBQVE7QUFBQSxRQUNmLFFBQVEsUUFBUTtBQUFBLFFBQ2hCLFlBQVc7QUFBQSxRQUNYLGdCQUFlO0FBQUEsUUFFZiwwQkFBQUg7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNHLE9BQU07QUFBQSxZQUNOLFVBQVUsV0FBVyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxZQUFZLFNBQVM7QUFBQSxZQUM5RCxVQUFVLE1BQU0sZ0JBQWdCLElBQUk7QUFBQSxZQUNwQyxVQUFVLENBQUMsV0FBVztBQUNsQiw4QkFBZ0IsSUFBSTtBQUNwQixrQkFBSSxZQUFZLFFBQVEsUUFBUTtBQUM1QixnQkFBQU8sS0FBSSxnQkFBZ0IsVUFBVSxPQUFPLFFBQVEsTUFBTTtBQUFBLGNBQ3ZEO0FBQUEsWUFDSjtBQUFBO0FBQUEsUUFDSjtBQUFBO0FBQUEsSUFDSjtBQUFBLElBR0gsYUFBYSxVQUNWLGdCQUFBUDtBQUFBLE1BQUNHO0FBQUEsTUFBQTtBQUFBLFFBQ0csVUFBUztBQUFBLFFBQ1QsT0FBTyxRQUFRO0FBQUEsUUFDZixRQUFRLFFBQVE7QUFBQSxRQUNoQixZQUFXO0FBQUEsUUFDWCxnQkFBZTtBQUFBLFFBRWYsMEJBQUFIO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRyxjQUFjTyxLQUFJLE1BQU0sVUFBVSxRQUFRO0FBQUEsWUFDMUMsTUFBTUEsS0FBSSxNQUFNO0FBQUEsWUFDaEIsV0FBV0EsS0FBSSxNQUFNLFFBQVEsYUFBYSxDQUFDO0FBQUEsWUFDM0MsUUFBUUEsS0FBSSxNQUFNO0FBQUEsWUFDbEIsYUFDSUEsS0FBSSxNQUFNLFNBQVMsVUFDYixvQkFBb0IsS0FBSyxFQUFFLFNBQzNCO0FBQUEsWUFFVixXQUFXQSxLQUFJLE1BQU07QUFBQSxZQUNyQixrQkFBa0JBLEtBQUksTUFBTTtBQUFBLFlBQzVCLGdCQUFnQkEsS0FBSSxNQUFNO0FBQUEsWUFDMUIsVUFBVSxNQUFNQSxLQUFJLFdBQVc7QUFBQSxZQUMvQixVQUFVLE9BQU87QUFBQSxjQUNiO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDSixNQUFNO0FBQ0Ysa0JBQUlBLEtBQUksTUFBTSxTQUFTLFNBQVM7QUFDNUIsc0JBQU0sVUFBVSxvQkFBb0IsY0FBYztBQUNsRCxvQkFBSSxRQUFRLFdBQVcsR0FBRztBQUN0QjtBQUFBLG9CQUNJLGlCQUNNLHNDQUNBO0FBQUEsa0JBQ1Y7QUFDQSxrQkFBQUEsS0FBSSxXQUFXO0FBQ2Y7QUFBQSxnQkFDSjtBQUNBLHNCQUFNQSxLQUFJLFNBQVM7QUFBQSxrQkFDZjtBQUFBLGtCQUNBLFVBQVVBLEtBQUksTUFBTTtBQUFBLGtCQUNwQixRQUFRQSxLQUFJLE1BQU07QUFBQSxrQkFDbEIsU0FBUztBQUFBLGtCQUNUO0FBQUEsa0JBQ0E7QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0osQ0FBQztBQUFBLGNBQ0wsT0FBTztBQUNILHNCQUFNQSxLQUFJLFVBQVU7QUFBQSxrQkFDaEI7QUFBQSxrQkFDQSxVQUFVQSxLQUFJLE1BQU07QUFBQSxrQkFDcEIsUUFBUUEsS0FBSSxNQUFNO0FBQUEsa0JBQ2xCLFFBQVFBLEtBQUksTUFBTTtBQUFBLGtCQUNsQjtBQUFBLGdCQUNKLENBQUM7QUFBQSxjQUNMO0FBQUEsWUFDSjtBQUFBO0FBQUEsUUFDSjtBQUFBO0FBQUEsSUFDSjtBQUFBLElBR0gsYUFBYSx1QkFDVixnQkFBQVA7QUFBQSxNQUFDRztBQUFBLE1BQUE7QUFBQSxRQUNHLFVBQVM7QUFBQSxRQUNULE9BQU8sUUFBUTtBQUFBLFFBQ2YsUUFBUSxRQUFRO0FBQUEsUUFDaEIsWUFBVztBQUFBLFFBQ1gsZ0JBQWU7QUFBQSxRQUVmLDBCQUFBSDtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0csT0FBTyxvQkFBb0JPLEtBQUksTUFBTSxVQUFVLFFBQVEsRUFBRTtBQUFBLFlBQ3pELE1BQU07QUFBQSxjQUNGLFdBQVdBLEtBQUksTUFBTSxVQUFVLElBQUksbUJBQW1CLFNBQVM7QUFBQSxjQUMvRDtBQUFBLFlBQ0o7QUFBQSxZQUNBLGNBQWE7QUFBQSxZQUNiLE1BQUs7QUFBQSxZQUNMLFVBQVUsTUFBTUEsS0FBSSxXQUFXO0FBQUEsWUFDL0IsV0FBVyxZQUFZO0FBQ25CLG9CQUFNLFNBQVNBLEtBQUksTUFBTTtBQUN6QixjQUFBQSxLQUFJLFdBQVc7QUFDZixvQkFBTSxNQUFNLE1BQU0sT0FBTyxPQUFPLElBQUk7QUFDcEMsa0JBQUksQ0FBQyxJQUFJLElBQUk7QUFDVCwwQkFBVSxrQkFBa0IsSUFBSSxLQUFLLEVBQUU7QUFDdkM7QUFBQSxjQUNKO0FBQ0Esd0JBQVUsWUFBWSxPQUFPLElBQUksR0FBRztBQUNwQyxzQkFBUTtBQUFBLFlBQ1o7QUFBQTtBQUFBLFFBQ0o7QUFBQTtBQUFBLElBQ0o7QUFBQSxLQUVSO0FBRVI7OztBT2xrQkEsT0FBT0csV0FBUyxXQUFBQyxXQUFTLFlBQUFDLGtCQUFnQjtBQUN6QyxTQUFTLE9BQUFDLE9BQUssUUFBQUMsY0FBWTtBQTREZCxTQUNJLE9BQUFDLE9BREosUUFBQUMsY0FBQTtBQXhEWixJQUFNQyxRQUFPO0FBRWIsSUFBTUMsUUFBTztBQUFBLEVBQ1QsRUFBRSxHQUFHLGdCQUFNLE9BQU8sT0FBTztBQUFBLEVBQ3pCLEVBQUUsR0FBRyxTQUFTLE9BQU8sT0FBTztBQUFBLEVBQzVCLEVBQUUsR0FBRyxPQUFPLE9BQU8sU0FBUztBQUNoQztBQUVPLFNBQVMsbUJBQW1CLEVBQUUsVUFBVSxRQUFRLFVBQVUsU0FBUyxHQUFHO0FBQ3pFLFFBQU0sU0FBU0MsVUFBUSxNQUFNLENBQUMsR0FBSSxZQUFZLENBQUMsQ0FBRSxFQUFFLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUNyRSxRQUFNLGdCQUFnQkEsVUFBUSxNQUFNO0FBQ2hDLFVBQU0sSUFBSSxPQUFPLFFBQVEsTUFBTTtBQUMvQixXQUFPLEtBQUssSUFBSSxJQUFJO0FBQUEsRUFDeEIsR0FBRyxDQUFDLFFBQVEsTUFBTSxDQUFDO0FBQ25CLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUMsV0FBUyxhQUFhO0FBRWxELFFBQU0sa0JBQWtCLEtBQUssSUFBSSxRQUFRLEtBQUssSUFBSSxHQUFHLE9BQU8sU0FBUyxDQUFDLENBQUM7QUFDdkUsUUFBTSxZQUFZLEtBQUs7QUFBQSxJQUNuQjtBQUFBLElBQ0EsS0FBSyxJQUFJLGtCQUFrQixLQUFLLE1BQU1ILFFBQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxHQUFHLE9BQU8sU0FBU0EsS0FBSSxDQUFDO0FBQUEsRUFDdEY7QUFDQSxRQUFNLFlBQVksT0FBTyxNQUFNLFdBQVcsWUFBWUEsS0FBSTtBQUUxRDtBQUFBLElBQ0ksQ0FBQyxPQUFPLFFBQVE7QUFDWixVQUFJLElBQUksUUFBUTtBQUNaLG1CQUFXO0FBQ1g7QUFBQSxNQUNKO0FBQ0EsVUFBSSxJQUFJLFFBQVE7QUFDWixjQUFNLE9BQU8sT0FBTyxlQUFlO0FBQ25DLFlBQUksUUFBUSxTQUFTLE9BQVEsWUFBVyxJQUFJO0FBQUEsWUFDdkMsWUFBVztBQUNoQjtBQUFBLE1BQ0o7QUFDQSxVQUFJLElBQUksU0FBUztBQUNiLGtCQUFVLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNuQztBQUFBLE1BQ0o7QUFDQSxVQUFJLElBQUksV0FBVztBQUNmLGtCQUFVLENBQUMsTUFBTSxLQUFLLElBQUksT0FBTyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFBQSxNQUN2RDtBQUFBLElBQ0o7QUFBQSxJQUNBLEVBQUUsTUFBTUMsTUFBSztBQUFBLEVBQ2pCO0FBRUEsU0FDSSxnQkFBQUY7QUFBQSxJQUFDSztBQUFBLElBQUE7QUFBQSxNQUNHLGFBQVk7QUFBQSxNQUNaLGFBQWEsTUFBTTtBQUFBLE1BQ25CLGlCQUFpQixNQUFNO0FBQUEsTUFDdkIsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsZUFBYztBQUFBLE1BQ2QsT0FBTztBQUFBLE1BRVA7QUFBQSx3QkFBQUwsT0FBQ0ssT0FBQSxFQUFJLGNBQWMsR0FBRyxnQkFBZSxpQkFDakM7QUFBQSwwQkFBQU4sTUFBQ08sUUFBQSxFQUFLLE9BQU8sTUFBTSxRQUFRLE1BQUksTUFBQyw0QkFFaEM7QUFBQSxVQUNBLGdCQUFBUCxNQUFDTyxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQVEsaUJBQU8sUUFBTztBQUFBLFdBQzdDO0FBQUEsUUFFQyxPQUFPLFdBQVcsS0FBSyxnQkFBQVAsTUFBQ08sUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLHlCQUFXO0FBQUEsUUFDOUQsVUFBVSxJQUFJLENBQUMsTUFBTSxNQUFNO0FBQ3hCLGdCQUFNLFNBQVMsWUFBWTtBQUMzQixnQkFBTSxZQUFZLFdBQVc7QUFDN0IsZ0JBQU0sV0FBVyxTQUFTO0FBQzFCLGlCQUNJLGdCQUFBTixPQUFDSyxPQUFBLEVBQ0c7QUFBQSw0QkFBQU4sTUFBQ00sT0FBQSxFQUFJLE9BQU8sR0FDUiwwQkFBQU4sTUFBQ08sUUFBQSxFQUFLLE9BQU8sWUFBWSxNQUFNLFNBQVMsTUFBTSxTQUN6QyxzQkFBWSxXQUFNLEtBQ3ZCLEdBQ0o7QUFBQSxZQUNBLGdCQUFBUCxNQUFDTSxPQUFBLEVBQUksT0FBTyxHQUNSLDBCQUFBTixNQUFDTyxRQUFBLEVBQUssT0FBTyxXQUFXLE1BQU0sT0FBTyxNQUFNLFNBQ3RDLHFCQUFXLFdBQU0sVUFDdEIsR0FDSjtBQUFBLFlBQ0EsZ0JBQUFQLE1BQUNNLE9BQUEsRUFBSSxVQUFVLEdBQ1gsMEJBQUFMO0FBQUEsY0FBQ007QUFBQSxjQUFBO0FBQUEsZ0JBQ0csT0FBTyxZQUFZLE1BQU0sS0FBSyxNQUFNO0FBQUEsZ0JBQ3BDLE1BQU07QUFBQSxnQkFDTixNQUFLO0FBQUEsZ0JBRUo7QUFBQTtBQUFBLGtCQUNBLFdBQVcsZUFBZTtBQUFBO0FBQUE7QUFBQSxZQUMvQixHQUNKO0FBQUEsZUFwQk0sSUFxQlY7QUFBQSxRQUVSLENBQUM7QUFBQSxRQUVELGdCQUFBUCxNQUFDTSxPQUFBLEVBQUksV0FBVyxHQUNaLDBCQUFBTixNQUFDTyxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sK0RBQWlDLEdBQy9EO0FBQUE7QUFBQTtBQUFBLEVBQ0o7QUFFUjs7O0FDeEdBLFNBQVMsYUFBQUMsWUFBVyxZQUFBQyxrQkFBZ0I7QUFDcEMsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxjQUFBQyxhQUFZLFlBQUFDLGlCQUFnQjtBQUs5QixTQUFTLFdBQVcsRUFBRSxTQUFTLElBQU8sSUFBSSxDQUFDLEdBQUc7QUFDakQsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJRixXQUFTLENBQUMsQ0FBQztBQUN6QyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLFdBQVMsSUFBSTtBQUN2QyxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlBLFdBQVMsSUFBSTtBQUUzQyxFQUFBRCxXQUFVLE1BQU07QUFDWixRQUFJLFlBQVk7QUFFaEIsbUJBQWUsT0FBTztBQUNsQixZQUFNLEtBQUssS0FBSyxJQUFJO0FBQ3BCLE1BQUFFLFlBQVcsY0FBYztBQUN6QixVQUFJO0FBQ0EsY0FBTSxPQUFPLE1BQU0sV0FBVyxDQUFDLENBQUM7QUFDaEMsUUFBQUMsVUFBUyxnQkFBZ0IsT0FBTztBQUFBLFVBQzVCLGFBQWEsS0FBSyxJQUFJLElBQUk7QUFBQSxVQUMxQixPQUFPLE1BQU0sVUFBVTtBQUFBLFFBQzNCLENBQUM7QUFDRCxZQUFJLFVBQVc7QUFDZixtQkFBVyxJQUFJO0FBQ2YsaUJBQVMsSUFBSTtBQUFBLE1BQ2pCLFNBQVMsR0FBRztBQUNSLFFBQUFBLFVBQVMsZ0JBQWdCLFNBQVM7QUFBQSxVQUM5QixhQUFhLEtBQUssSUFBSSxJQUFJO0FBQUEsVUFDMUIsT0FBTyxHQUFHLFdBQVcsT0FBTyxDQUFDO0FBQUEsUUFDakMsQ0FBQztBQUNELFlBQUksVUFBVztBQUNmLGlCQUFTLEVBQUUsV0FBVyxPQUFPLENBQUMsQ0FBQztBQUFBLE1BQ25DLFVBQUU7QUFDRSxZQUFJLENBQUMsVUFBVyxZQUFXLEtBQUs7QUFBQSxNQUNwQztBQUFBLElBQ0o7QUFFQSxTQUFLO0FBQ0wsVUFBTSxLQUFLLFlBQVksTUFBTSxNQUFNO0FBQ25DLFdBQU8sTUFBTTtBQUNULGtCQUFZO0FBQ1osb0JBQWMsRUFBRTtBQUFBLElBQ3BCO0FBQUEsRUFDSixHQUFHLENBQUMsTUFBTSxDQUFDO0FBRVgsU0FBTyxFQUFFLFNBQVMsT0FBTyxRQUFRO0FBQ3JDOzs7QUNoREEsU0FBUyxlQUFBQyxjQUFhLGFBQUFDLGFBQVcsVUFBQUMsU0FBUSxZQUFBQyxrQkFBZ0I7QUFDekQsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxZQUFBQyxpQkFBZ0I7QUFDekIsU0FBUyxtQkFBbUI7QUFtQjVCLElBQU0sVUFBVTtBQUNoQixJQUFNLFNBQVM7QUFDZixJQUFNLGlCQUFpQjtBQU92QixJQUFNLGtCQUNGO0FBT0osSUFBTSxzQkFBc0I7QUFDNUIsSUFBTSxXQUFXO0FBQ2pCLElBQU0sYUFBYTtBQUVuQixTQUFTLE1BQU0sSUFBSTtBQUNmLFFBQU0sSUFBSSxLQUFLLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQyxJQUFJLG9CQUFJLEtBQUs7QUFDL0MsU0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUN0QztBQUVBLFNBQVMsU0FBUyxPQUFPO0FBQ3JCLE1BQUksVUFBVSxZQUFhLFFBQU8sRUFBRSxNQUFNLFFBQVEsS0FBSyxZQUFZO0FBQ25FLE1BQUksVUFBVSxlQUFnQixRQUFPLEVBQUUsTUFBTSxTQUFTLEtBQUssZUFBZTtBQUMxRSxNQUFJLFVBQVUsVUFBVyxRQUFPLEVBQUUsTUFBTSxRQUFRLEtBQUssVUFBVTtBQUMvRCxNQUFJLFVBQVUsUUFBUyxRQUFPLEVBQUUsTUFBTSxRQUFRLEtBQUssUUFBUTtBQUMzRCxNQUFJLFVBQVUsU0FBVSxRQUFPLEVBQUUsTUFBTSxRQUFRLEtBQUssU0FBUztBQUM3RCxTQUFPLEVBQUUsTUFBTSxRQUFRLEtBQUssU0FBUyxRQUFRO0FBQ2pEO0FBRU8sU0FBUyx5QkFBeUIsU0FBUztBQUM5QyxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlELFdBQVMsQ0FBQyxDQUFDO0FBQ3pDLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUEsV0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDckUsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQSxXQUFTLENBQUMsQ0FBQztBQUMvQyxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLFdBQVMsQ0FBQyxDQUFDO0FBQ3ZDLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUEsV0FBUyxNQUFNO0FBRTNDLFFBQU0sYUFBYUQsUUFBTyxDQUFDLENBQUM7QUFDNUIsUUFBTSxhQUFhQSxRQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUN4RCxRQUFNLGdCQUFnQkEsUUFBTyxDQUFDLENBQUM7QUFDL0IsUUFBTSxhQUFhQSxRQUFPLENBQUMsQ0FBQztBQUM1QixRQUFNLGdCQUFnQkEsUUFBTyxJQUFJO0FBSWpDLFFBQU0sWUFBWSxRQUNiLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxNQUFNLEVBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUNuQixLQUFLLEVBQ0wsS0FBSyxHQUFHO0FBUWIsRUFBQUQsWUFBVSxNQUFNO0FBQ1osUUFBSSxZQUFZO0FBQ2hCLEtBQUMsWUFBWTtBQUNULFlBQU0sS0FBSyxLQUFLLElBQUk7QUFDcEIsTUFBQUcsVUFBUyxzQkFBc0IsU0FBUyxFQUFFLFlBQVksUUFBUSxDQUFDO0FBQy9ELFVBQUk7QUFDQSxjQUFNLE9BQU8sTUFBTSxrQkFBa0I7QUFBQSxVQUNqQyxTQUFTO0FBQUEsVUFDVCxVQUFVO0FBQUEsVUFDVixLQUFLO0FBQUEsVUFDTCxVQUFVO0FBQUEsVUFDVixRQUFRO0FBQUEsUUFDWixDQUFDO0FBQ0QsUUFBQUEsVUFBUyxzQkFBc0IsT0FBTztBQUFBLFVBQ2xDLGFBQWEsS0FBSyxJQUFJLElBQUk7QUFBQSxVQUMxQixNQUFNLE1BQU0sUUFBUSxJQUFJLElBQUksS0FBSyxTQUFTO0FBQUEsUUFDOUMsQ0FBQztBQUNELFlBQUksYUFBYSxDQUFDLE1BQU0sUUFBUSxJQUFJLEtBQUssS0FBSyxXQUFXLEVBQUc7QUFDNUQsY0FBTSxXQUFXLG9CQUFJLElBQUk7QUFDekIsbUJBQVcsS0FBSyxNQUFNO0FBQ2xCLGdCQUFNLEtBQUssRUFBRTtBQUNiLGNBQUksQ0FBQyxHQUFJO0FBQ1QsZ0JBQU0sSUFBSSxHQUFHLEtBQUs7QUFDbEIsY0FBSSxDQUFDLE9BQU8sU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFHO0FBQ2pDLGNBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFHLFVBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMxQyxtQkFBUyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUFBLFFBQzVEO0FBQ0EsY0FBTSxPQUFPLEVBQUUsR0FBRyxjQUFjLFFBQVE7QUFDeEMsbUJBQVcsQ0FBQyxJQUFJLElBQUksS0FBSyxTQUFTLFFBQVEsR0FBRztBQUN6QyxlQUFLLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUMvQixnQkFBTSxTQUFTLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFHbEQsY0FBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUssRUFBRSxFQUFFLFNBQVMsT0FBTyxRQUFRO0FBQzlDLGlCQUFLLEVBQUUsSUFBSTtBQUFBLFVBQ2Y7QUFBQSxRQUNKO0FBQ0Esc0JBQWMsVUFBVTtBQUN4QixzQkFBYyxJQUFJO0FBQUEsTUFDdEIsU0FBUyxLQUFLO0FBQ1YsUUFBQUEsVUFBUyxzQkFBc0IsU0FBUztBQUFBLFVBQ3BDLGFBQWEsS0FBSyxJQUFJLElBQUk7QUFBQSxVQUMxQixPQUFPLEtBQUssV0FBVyxPQUFPLEdBQUc7QUFBQSxRQUNyQyxDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0osR0FBRztBQUNILFdBQU8sTUFBTTtBQUNULGtCQUFZO0FBQUEsSUFDaEI7QUFBQSxFQUVKLEdBQUcsQ0FBQyxDQUFDO0FBS0wsRUFBQUgsWUFBVSxNQUFNO0FBQ1osVUFBTSxNQUFNLFlBQVksVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2hELFVBQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxRQUFRLEVBQUUsQ0FBQztBQUMxRCxRQUFJLFFBQVEsV0FBVyxFQUFHO0FBQzFCLFFBQUksWUFBWTtBQUNoQixLQUFDLFlBQVk7QUFDVCxZQUFNLEtBQUssS0FBSyxJQUFJO0FBQ3BCLE1BQUFHLFVBQVMsdUJBQXVCLFNBQVMsRUFBRSxTQUFTLFFBQVEsT0FBTyxDQUFDO0FBQ3BFLFVBQUk7QUFDQSxjQUFNLE9BQU8sTUFBTSxrQkFBa0I7QUFBQSxVQUNqQyxPQUFPO0FBQUEsVUFDUCxNQUFNO0FBQUEsVUFDTixRQUFRO0FBQUEsVUFDUixTQUFTO0FBQUEsUUFDYixDQUFDO0FBQ0QsUUFBQUEsVUFBUyx1QkFBdUIsT0FBTztBQUFBLFVBQ25DLGFBQWEsS0FBSyxJQUFJLElBQUk7QUFBQSxVQUMxQixNQUFNLE1BQU0sUUFBUSxJQUFJLElBQUksS0FBSyxTQUFTO0FBQUEsUUFDOUMsQ0FBQztBQUNELFlBQUksYUFBYSxDQUFDLE1BQU0sUUFBUSxJQUFJLEVBQUc7QUFDdkMsY0FBTSxhQUFhLElBQUksSUFBSSxPQUFPO0FBQ2xDLGNBQU0sVUFBVSxDQUFDO0FBQ2pCLG1CQUFXLFVBQVUsTUFBTTtBQUN2QixnQkFBTSxLQUFLLFFBQVE7QUFDbkIsY0FBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFHO0FBQ2hDLGtCQUFRLEVBQUUsSUFBSTtBQUFBLFFBQ2xCO0FBQ0EsWUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFLFdBQVcsRUFBRztBQUN2QyxxQkFBYSxPQUFPO0FBQUEsTUFDeEIsU0FBUyxLQUFLO0FBQ1YsUUFBQUEsVUFBUyx1QkFBdUIsU0FBUztBQUFBLFVBQ3JDLGFBQWEsS0FBSyxJQUFJLElBQUk7QUFBQSxVQUMxQixPQUFPLEtBQUssV0FBVyxPQUFPLEdBQUc7QUFBQSxRQUNyQyxDQUFDO0FBQUEsTUFFTDtBQUFBLElBQ0osR0FBRztBQUNILFdBQU8sTUFBTTtBQUNULGtCQUFZO0FBQUEsSUFDaEI7QUFBQSxFQUVKLEdBQUcsQ0FBQyxTQUFTLENBQUM7QUFLZCxFQUFBSCxZQUFVLE1BQU07QUFDWixnQkFBWSxRQUFRO0FBQ3BCLGNBQVUsWUFBWTtBQUV0QixVQUFNLFlBQVksWUFBWSxHQUFHLGdCQUFnQixDQUFDLFVBQVU7QUFDeEQsWUFBTSxPQUFPLE1BQU07QUFDbkIsWUFBTSxLQUFLLE1BQU07QUFDakIsVUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFNO0FBQ2xCLGlCQUFXLFFBQVEsRUFBRSxJQUFJO0FBQ3pCLFVBQUksY0FBYyxXQUFXLE1BQU07QUFDL0Isc0JBQWMsVUFBVSxXQUFXLE9BQU8sUUFBUTtBQUFBLE1BQ3REO0FBQUEsSUFDSixDQUFDO0FBQ0QsVUFBTSxXQUFXLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxVQUFVO0FBQzlELFlBQU0sS0FBSyxNQUFNO0FBQ2pCLFVBQUksQ0FBQyxHQUFJO0FBQ1QsWUFBTSxTQUFTLFNBQVMsTUFBTSxLQUFLO0FBQ25DLFlBQU0sS0FBSztBQUFBLFFBQ1AsR0FBRyxNQUFNLE1BQU0sRUFBRTtBQUFBLFFBQ2pCLE1BQU0sT0FBTztBQUFBLFFBQ2IsS0FBSztBQUFBLFFBQ0wsS0FBSyxPQUFPO0FBQUEsTUFDaEI7QUFDQSxnQkFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFBQSxJQUN4RCxDQUFDO0FBRUQsZ0JBQVksVUFBVSxFQUFFLE9BQU8sZ0JBQWdCLFNBQVMsRUFBRSxRQUFRLE9BQU8sRUFBRSxDQUFDO0FBQzVFLGdCQUFZLFVBQVUsRUFBRSxPQUFPLHNCQUFzQixDQUFDO0FBR3RELGNBQVUsTUFBTTtBQUNoQixJQUFBRyxVQUFTLFlBQVksOEJBQThCO0FBRW5ELFdBQU8sTUFBTTtBQUNULGdCQUFVO0FBQ1YsZUFBUztBQUNULFVBQUksY0FBYyxTQUFTO0FBQ3ZCLHFCQUFhLGNBQWMsT0FBTztBQUNsQyxzQkFBYyxVQUFVO0FBQUEsTUFDNUI7QUFDQSxrQkFBWSxXQUFXO0FBQUEsSUFDM0I7QUFBQSxFQUNKLEdBQUcsQ0FBQyxDQUFDO0FBRUwsV0FBUyxRQUFRO0FBQ2Isa0JBQWMsVUFBVTtBQUN4QixVQUFNLFVBQVUsV0FBVztBQUMzQixlQUFXLFVBQVUsQ0FBQztBQUN0QixRQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUUsV0FBVyxFQUFHO0FBQ3ZDLGlCQUFhLE9BQU87QUFBQSxFQUN4QjtBQUVBLFdBQVMsYUFBYSxTQUFTO0FBQzNCLFVBQU0sT0FBTyxFQUFFLEdBQUcsV0FBVyxTQUFTLEdBQUcsUUFBUTtBQUNqRCxlQUFXLFVBQVU7QUFDckIsZUFBVyxJQUFJO0FBQ2Ysa0JBQWMsT0FBTztBQUNyQixnQkFBWTtBQUFBLEVBQ2hCO0FBRUEsV0FBUyxjQUFjLFNBQVM7QUFDNUIsVUFBTSxPQUFPLEVBQUUsR0FBRyxjQUFjLFFBQVE7QUFDeEMsUUFBSSxVQUFVO0FBQ2QsZUFBVyxDQUFDLElBQUksQ0FBQyxLQUFLLE9BQU8sUUFBUSxPQUFPLEdBQUc7QUFDM0MsWUFBTSxJQUFJLEdBQUcsS0FBSztBQUNsQixVQUFJLEtBQUssUUFBUSxDQUFDLE9BQU8sU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFHO0FBQzlDLFlBQU0sTUFBTSxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUMzQyxVQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7QUFDbEIsVUFBSSxJQUFJLFNBQVMsUUFBUyxLQUFJLE9BQU8sR0FBRyxJQUFJLFNBQVMsT0FBTztBQUM1RCxXQUFLLEVBQUUsSUFBSTtBQUNYLGdCQUFVO0FBQUEsSUFDZDtBQUNBLFFBQUksQ0FBQyxRQUFTO0FBQ2Qsa0JBQWMsVUFBVTtBQUN4QixrQkFBYyxJQUFJO0FBQUEsRUFDdEI7QUFFQSxXQUFTLGNBQWM7QUFDbkIsUUFBSSxNQUFNLEdBQ04sTUFBTSxHQUNOLE9BQU87QUFDWCxRQUFJLEtBQUssR0FDTCxLQUFLLEdBQ0wsS0FBSztBQUNULGVBQVcsS0FBSyxPQUFPLE9BQU8sV0FBVyxPQUFPLEdBQUc7QUFDL0MsVUFBSSxFQUFFLEtBQUssU0FBUyxNQUFNO0FBQ3RCLGVBQU8sT0FBTyxFQUFFLElBQUksS0FBSztBQUN6QjtBQUFBLE1BQ0o7QUFDQSxVQUFJLEVBQUUsUUFBUSxTQUFTLE1BQU07QUFDekIsZUFBTyxPQUFPLEVBQUUsT0FBTyxLQUFLO0FBQzVCO0FBQUEsTUFDSjtBQUNBLFVBQUksRUFBRSxNQUFNLE1BQU0sU0FBUyxNQUFNO0FBQzdCLGdCQUFRLE9BQU8sRUFBRSxLQUFLLEtBQUssS0FBSztBQUNoQztBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQ0EsVUFBTSxPQUFPLENBQUMsS0FBSyxNQUFNO0FBQ3JCLFlBQU0sTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLGFBQU8sSUFBSSxTQUFTLFVBQVUsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJO0FBQUEsSUFDeEQ7QUFDQSxVQUFNLE9BQU87QUFBQSxNQUNULEtBQUssS0FBSyxXQUFXLFFBQVEsS0FBSyxLQUFLLE1BQU0sS0FBSyxJQUFJO0FBQUEsTUFDdEQsS0FBSyxLQUFLLFdBQVcsUUFBUSxLQUFLLEtBQUssTUFBTSxLQUFLLElBQUk7QUFBQSxNQUN0RCxNQUFNLEtBQUssV0FBVyxRQUFRLE1BQU0sS0FBSyxPQUFPLEtBQUssSUFBSTtBQUFBLElBQzdEO0FBQ0EsZUFBVyxVQUFVO0FBQ3JCLGVBQVcsSUFBSTtBQUFBLEVBQ25CO0FBTUEsUUFBTSxZQUFZSixhQUFZLENBQUMsT0FBTztBQUNsQyxVQUFNLFFBQVE7QUFBQSxNQUNWLEdBQUcsTUFBTSxHQUFHLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFBQSxNQUM1QixNQUFNLEdBQUcsUUFBUTtBQUFBLE1BQ2pCLEtBQUssR0FBRyxPQUFPO0FBQUEsTUFDZixLQUFLLEdBQUcsT0FBTztBQUFBLElBQ25CO0FBQ0EsY0FBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFBQSxFQUMzRCxHQUFHLENBQUMsQ0FBQztBQUVMLFNBQU8sRUFBRSxTQUFTLFNBQVMsWUFBWSxRQUFRLFFBQVEsVUFBVTtBQUNyRTs7O0FDdlRBLFNBQVMsYUFBQUssYUFBVyxVQUFBQyxTQUFRLFlBQUFDLGtCQUFnQjtBQUM1QyxTQUFTLG1CQUFtQixlQUFBQyxvQkFBbUI7QUFDL0MsU0FBUyxlQUFBQyxvQkFBbUI7QUFDNUIsU0FBUyxZQUFBQyxpQkFBZ0I7QUFzQnpCLElBQU0sZ0JBQWdCO0FBQUEsRUFDbEJGLGFBQVk7QUFBQSxFQUNaQSxhQUFZO0FBQUEsRUFDWkEsYUFBWTtBQUFBLEVBQ1pBLGFBQVk7QUFBQSxFQUNaQSxhQUFZO0FBQ2hCO0FBRUEsU0FBUyxZQUFZLE1BQU07QUFDdkIsU0FBTyxNQUFNLFlBQVksTUFBTSxPQUFPO0FBQzFDO0FBSUEsU0FBUyxnQkFBZ0IsT0FBTztBQUM1QixNQUFJLENBQUMsU0FBUyxPQUFPLFVBQVUsU0FBVSxRQUFPO0FBQ2hELFFBQU0sRUFBRSxPQUFPLElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBSTtBQUNsRCxTQUFPO0FBQ1g7QUFFQSxTQUFTLFVBQVUsTUFBTTtBQUNyQixRQUFNLElBQUksTUFBTTtBQUNoQixNQUFJLEtBQUssS0FBTSxRQUFPO0FBQ3RCLE1BQUksT0FBTyxNQUFNLFNBQVUsUUFBTztBQUVsQyxNQUFJLE9BQU8sTUFBTSxVQUFVO0FBQ3ZCLFFBQUksT0FBTyxFQUFFLFVBQVUsU0FBVSxRQUFPLEVBQUU7QUFDMUMsUUFBSSxPQUFPLEVBQUUsVUFBVSxVQUFVO0FBQzdCLFlBQU0sSUFBSSxLQUFLLE1BQU0sRUFBRSxLQUFLO0FBQzVCLGFBQU8sT0FBTyxTQUFTLENBQUMsSUFBSSxJQUFJO0FBQUEsSUFDcEM7QUFBQSxFQUNKO0FBQ0EsTUFBSSxPQUFPLE1BQU0sVUFBVTtBQUN2QixVQUFNLElBQUksS0FBSyxNQUFNLENBQUM7QUFDdEIsV0FBTyxPQUFPLFNBQVMsQ0FBQyxJQUFJLElBQUk7QUFBQSxFQUNwQztBQUNBLFNBQU87QUFDWDtBQUVBLFNBQVMsaUJBQWlCLEdBQUcsR0FBRztBQUM1QixRQUFNLEtBQUssR0FBRyxTQUFTO0FBQ3ZCLFFBQU0sS0FBSyxHQUFHLFNBQVM7QUFDdkIsTUFBSSxPQUFPLEdBQUksUUFBTyxLQUFLO0FBQzNCLFFBQU0sS0FBSyxHQUFHLFlBQVk7QUFDMUIsUUFBTSxLQUFLLEdBQUcsWUFBWTtBQUMxQixNQUFJLE9BQU8sR0FBSSxRQUFPLEtBQUs7QUFDM0IsU0FBTyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUM7QUFDckM7QUFFQSxTQUFTLGNBQWMsS0FBSztBQUN4QixTQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssZ0JBQWdCO0FBQ2xEO0FBRU8sU0FBUyxpQkFBaUI7QUFDN0IsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJRCxXQUFTLENBQUMsQ0FBQztBQUM3QyxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlBLFdBQVMsSUFBSTtBQUMzQyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLFdBQVMsSUFBSTtBQUN2QyxRQUFNLENBQUMsYUFBYSxjQUFjLElBQUlBLFdBQVMsQ0FBQztBQUNoRCxRQUFNLFNBQVNELFFBQU8sb0JBQUksSUFBSSxDQUFDO0FBRS9CLFdBQVMsU0FBUztBQUNkLGlCQUFhLGNBQWMsT0FBTyxPQUFPLENBQUM7QUFBQSxFQUM5QztBQU1BLEVBQUFELFlBQVUsTUFBTTtBQUNaLFFBQUksWUFBWTtBQUNoQixlQUFXLElBQUk7QUFDZixhQUFTLElBQUk7QUFDYixLQUFDLFlBQVk7QUFDVCxZQUFNLEtBQUssS0FBSyxJQUFJO0FBQ3BCLE1BQUFLLFVBQVMsZUFBZSxnQkFBZ0I7QUFDeEMsVUFBSTtBQUNBLGNBQU0sT0FBTyxNQUFNLGtCQUFrQjtBQUFBLFVBQ2pDLE9BQU87QUFBQSxVQUNQLE9BQU87QUFBQSxRQUNYLENBQUM7QUFDRCxRQUFBQSxVQUFTLGVBQWUsZ0JBQWdCO0FBQUEsVUFDcEMsYUFBYSxLQUFLLElBQUksSUFBSTtBQUFBLFVBQzFCLE1BQU0sS0FBSztBQUFBLFFBQ2YsQ0FBQztBQUNELFlBQUksVUFBVztBQUNmLGNBQU0sT0FBTyxvQkFBSSxJQUFJO0FBQ3JCLG1CQUFXLFFBQVEsTUFBTTtBQUNyQixnQkFBTSxJQUFJLFlBQVksSUFBSTtBQUMxQixjQUFJLEVBQUcsTUFBSyxJQUFJLEdBQUcsSUFBSTtBQUFBLFFBQzNCO0FBQ0EsZUFBTyxVQUFVO0FBQ2pCLGVBQU87QUFDUCxtQkFBVyxLQUFLO0FBQUEsTUFDcEIsU0FBUyxLQUFLO0FBQ1YsUUFBQUEsVUFBUyxlQUFlLGtCQUFrQjtBQUFBLFVBQ3RDLGFBQWEsS0FBSyxJQUFJLElBQUk7QUFBQSxVQUMxQixPQUFPLEtBQUssV0FBVyxPQUFPLEdBQUc7QUFBQSxRQUNyQyxDQUFDO0FBQ0QsWUFBSSxVQUFXO0FBQ2YsaUJBQVMsR0FBRztBQUNaLG1CQUFXLEtBQUs7QUFBQSxNQUNwQjtBQUFBLElBQ0osR0FBRztBQUNILFdBQU8sTUFBTTtBQUNULGtCQUFZO0FBQUEsSUFDaEI7QUFBQSxFQUNKLEdBQUcsQ0FBQyxXQUFXLENBQUM7QUFJaEIsRUFBQUwsWUFBVSxNQUFNO0FBQ1osSUFBQUksYUFBWSxRQUFRO0FBRXBCLFVBQU0sY0FBY0EsYUFBWSxHQUFHLDJCQUEyQixDQUFDLFVBQVU7QUFDckUsWUFBTSxPQUFPLGdCQUFnQixLQUFLO0FBQ2xDLFlBQU0sSUFBSSxZQUFZLElBQUk7QUFDMUIsVUFBSSxDQUFDLEVBQUc7QUFDUixhQUFPLFFBQVEsSUFBSSxHQUFHLElBQUk7QUFDMUIsYUFBTztBQUFBLElBQ1gsQ0FBQztBQUNELFVBQU0sZUFBZUEsYUFBWSxHQUFHLDRCQUE0QixDQUFDLFVBQVU7QUFDdkUsWUFBTSxPQUFPLGdCQUFnQixLQUFLO0FBQ2xDLFlBQU0sSUFBSSxZQUFZLElBQUk7QUFDMUIsVUFBSSxDQUFDLEVBQUc7QUFHUixVQUFJLE9BQU8sUUFBUSxPQUFPLENBQUMsRUFBRyxRQUFPO0FBQUEsSUFDekMsQ0FBQztBQUNELFVBQU0sWUFBWUEsYUFBWSxHQUFHLHlCQUF5QixDQUFDLFVBQVU7QUFDakUsWUFBTSxPQUFPLGdCQUFnQixLQUFLO0FBQ2xDLFlBQU0sSUFBSSxZQUFZLElBQUk7QUFDMUIsVUFBSSxDQUFDLEVBQUc7QUFJUixVQUFJLE1BQU0sVUFBVUQsYUFBWSxTQUFTO0FBQ3JDLFlBQUksT0FBTyxRQUFRLE9BQU8sQ0FBQyxFQUFHLFFBQU87QUFBQSxNQUN6QyxPQUFPO0FBQ0gsZUFBTyxRQUFRLElBQUksR0FBRyxJQUFJO0FBQzFCLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSixDQUFDO0FBQ0QsVUFBTSxZQUFZQyxhQUFZLEdBQUcseUJBQXlCLENBQUMsVUFBVTtBQUNqRSxZQUFNLE9BQU8sZ0JBQWdCLEtBQUs7QUFDbEMsWUFBTSxJQUFJLFlBQVksSUFBSTtBQUMxQixVQUFJLENBQUMsRUFBRztBQUNSLFVBQUksT0FBTyxRQUFRLE9BQU8sQ0FBQyxFQUFHLFFBQU87QUFBQSxJQUN6QyxDQUFDO0FBRUQsSUFBQUEsYUFBWSxVQUFVLEVBQUUsT0FBTywwQkFBMEIsQ0FBQztBQUMxRCxJQUFBQSxhQUFZLFVBQVUsRUFBRSxPQUFPLDJCQUEyQixDQUFDO0FBQzNELElBQUFBLGFBQVksVUFBVSxFQUFFLE9BQU8sd0JBQXdCLENBQUM7QUFDeEQsSUFBQUEsYUFBWSxVQUFVLEVBQUUsT0FBTyx3QkFBd0IsQ0FBQztBQUN4RCxJQUFBQyxVQUFTLGFBQWEsWUFBWTtBQUtsQyxVQUFNLGVBQWVELGFBQVksWUFBWSxNQUFNO0FBQy9DLE1BQUFDLFVBQVMsYUFBYSxxQkFBcUI7QUFDM0MscUJBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUFBLElBQy9CLENBQUM7QUFFRCxXQUFPLE1BQU07QUFDVCxrQkFBWTtBQUNaLG1CQUFhO0FBQ2IsZ0JBQVU7QUFDVixnQkFBVTtBQUNWLG1CQUFhO0FBQ2IsTUFBQUQsYUFBWSxXQUFXO0FBQUEsSUFDM0I7QUFBQSxFQUNKLEdBQUcsQ0FBQyxDQUFDO0FBRUwsU0FBTztBQUFBLElBQ0g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsU0FBUyxNQUFNLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUFBLEVBQzlDO0FBQ0o7OztBQzVNQSxTQUFTLGFBQUFFLGFBQVcsV0FBQUMsV0FBUyxZQUFBQyxrQkFBZ0I7QUFDN0MsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxZQUFBQyxpQkFBZ0I7QUFNbEIsU0FBUyxpQkFBaUIsWUFBWTtBQUN6QyxRQUFNLFNBQVNGLFVBQVEsTUFBTTtBQUN6QixRQUFJLENBQUMsTUFBTSxRQUFRLFVBQVUsRUFBRyxRQUFPO0FBQ3ZDLFdBQU8sQ0FBQyxHQUFHLFVBQVUsRUFBRSxPQUFPLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHO0FBQUEsRUFDMUQsR0FBRyxDQUFDLFVBQVUsQ0FBQztBQUNmLFFBQU0sTUFBTUEsVUFBUSxNQUFPLFNBQVMsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUksQ0FBQyxNQUFNLENBQUM7QUFFckUsUUFBTSxDQUFDLFVBQVUsV0FBVyxJQUFJQyxXQUFTLENBQUMsQ0FBQztBQUUzQyxFQUFBRixZQUFVLE1BQU07QUFDWixRQUFJLElBQUksV0FBVyxHQUFHO0FBQ2xCLGtCQUFZLENBQUMsQ0FBQztBQUNkO0FBQUEsSUFDSjtBQUNBLFFBQUksWUFBWTtBQUNoQixLQUFDLFlBQVk7QUFDVCxZQUFNLEtBQUssS0FBSyxJQUFJO0FBQ3BCLE1BQUFHLFVBQVMsdUJBQXVCLFNBQVMsRUFBRSxVQUFVLElBQUksQ0FBQztBQUMxRCxZQUFNLFVBQVUsTUFBTSxRQUFRO0FBQUEsUUFDMUIsSUFBSSxJQUFJLE9BQU8sT0FBTztBQUNsQixjQUFJO0FBQ0Esa0JBQU0sT0FBTyxNQUFNLFdBQVcsRUFBRTtBQUNoQyxtQkFBTyxDQUFDLElBQUksRUFBRSxJQUFJLE1BQU0sTUFBTSxRQUFRLEdBQUcsQ0FBQztBQUFBLFVBQzlDLFNBQVMsR0FBRztBQUNSLFlBQUFBLFVBQVMsdUJBQXVCLFNBQVM7QUFBQSxjQUNyQyxTQUFTO0FBQUEsY0FDVCxPQUFPLEdBQUcsV0FBVyxPQUFPLENBQUM7QUFBQSxZQUNqQyxDQUFDO0FBQ0QsbUJBQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxNQUFNLEdBQUcsQ0FBQztBQUFBLFVBQ2hDO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTDtBQUNBLFVBQUksVUFBVztBQUNmLE1BQUFBLFVBQVMsdUJBQXVCLE9BQU87QUFBQSxRQUNuQyxhQUFhLEtBQUssSUFBSSxJQUFJO0FBQUEsUUFDMUIsVUFBVTtBQUFBLE1BQ2QsQ0FBQztBQUNELGtCQUFZLE9BQU8sWUFBWSxPQUFPLENBQUM7QUFBQSxJQUMzQyxHQUFHO0FBQ0gsV0FBTyxNQUFNO0FBQ1Qsa0JBQVk7QUFBQSxJQUNoQjtBQUFBLEVBQ0osR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUVSLFNBQU87QUFDWDs7O0FDckRBLFNBQVMsYUFBQUMsYUFBVyxZQUFBQyxrQkFBZ0I7QUFDcEM7QUFBQSxFQUNJO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNHO0FBQ1AsU0FBUyxZQUFBQyxpQkFBZ0I7QUFhekIsU0FBUyxTQUFTLFNBQVM7QUFDdkIsU0FBTyxRQUFRLElBQUksQ0FBQyxPQUFPO0FBQUEsSUFDdkIsR0FBRztBQUFBLElBQ0gsaUJBQWlCLHFCQUFxQixDQUFDO0FBQUEsRUFDM0MsRUFBRTtBQUNOO0FBRUEsSUFBTSxZQUFZLE1BQU07QUFDcEIsUUFBTSxNQUFNLG1CQUFtQjtBQUMvQixTQUFPLEVBQUUsU0FBUyxTQUFTLElBQUksT0FBTyxHQUFHLFNBQVMsSUFBSSxTQUFTLFVBQVUsS0FBSztBQUNsRixHQUFHO0FBRUksU0FBUyxxQkFBcUIsV0FBVztBQUM1QyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlEO0FBQUEsSUFBUyxNQUMvQixZQUFZLEVBQUUsU0FBUyxDQUFDLEdBQUcsU0FBUyxNQUFNLFVBQVUsT0FBTyxTQUFTLEtBQUssSUFBSTtBQUFBLEVBQ2pGO0FBRUEsRUFBQUQsWUFBVSxNQUFNO0FBQ1osUUFBSSxDQUFDLFdBQVc7QUFDWixlQUFTLFFBQVE7QUFDakI7QUFBQSxJQUNKO0FBQ0EsUUFBSSxZQUFZO0FBQ2hCLGFBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxTQUFTLE1BQU0sVUFBVSxPQUFPLFNBQVMsS0FBSyxDQUFDO0FBQ3ZFLEtBQUMsWUFBWTtBQUNULFlBQU0sS0FBSyxLQUFLLElBQUk7QUFDcEIsVUFBSTtBQUNBLGNBQU0sTUFBTSxNQUFNLGVBQWUsU0FBUztBQUMxQyxZQUFJLFVBQVc7QUFDZixRQUFBRSxVQUFTLHFCQUFxQixPQUFPO0FBQUEsVUFDakMsYUFBYSxLQUFLLElBQUksSUFBSTtBQUFBLFVBQzFCLFNBQVM7QUFBQSxVQUNULFNBQVMsSUFBSSxRQUFRO0FBQUEsVUFDckIsVUFBVSxDQUFDLENBQUMsSUFBSTtBQUFBLFFBQ3BCLENBQUM7QUFDRCxpQkFBUztBQUFBLFVBQ0wsU0FBUyxTQUFTLElBQUksT0FBTztBQUFBLFVBQzdCLFNBQVMsSUFBSSxXQUFXO0FBQUEsVUFDeEIsVUFBVSxDQUFDLENBQUMsSUFBSTtBQUFBLFVBQ2hCLFNBQVM7QUFBQSxRQUNiLENBQUM7QUFBQSxNQUNMLFNBQVMsS0FBSztBQUNWLFlBQUksVUFBVztBQUNmLFFBQUFBLFVBQVMscUJBQXFCLFNBQVM7QUFBQSxVQUNuQyxTQUFTO0FBQUEsVUFDVCxPQUFPLEtBQUssV0FBVyxPQUFPLEdBQUc7QUFBQSxRQUNyQyxDQUFDO0FBQ0QsaUJBQVMsRUFBRSxHQUFHLFVBQVUsU0FBUyxNQUFNLENBQUM7QUFBQSxNQUM1QztBQUFBLElBQ0osR0FBRztBQUNILFdBQU8sTUFBTTtBQUNULGtCQUFZO0FBQUEsSUFDaEI7QUFBQSxFQUNKLEdBQUcsQ0FBQyxTQUFTLENBQUM7QUFFZCxTQUFPO0FBQ1g7OztBQzNFQSxTQUFTLGFBQUFDLGFBQVcsV0FBQUMsV0FBUyxZQUFBQyxrQkFBZ0I7QUFDN0MsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxjQUFBQyxhQUFZLFlBQUFDLGlCQUFnQjtBQUNyQyxTQUFTLGVBQUFDLG9CQUFtQjtBQUM1QixTQUFTLFdBQVcsZUFBZTtBQVluQyxJQUFNQyxlQUFjO0FBRXBCLFNBQVMsVUFBVSxXQUFXLE1BQU07QUFDaEMsU0FBTyxHQUFHLFNBQVMsSUFBSSxJQUFJO0FBQy9CO0FBRU8sU0FBUyxrQkFBa0IsWUFBWTtBQUcxQyxRQUFNLFNBQVNMLFVBQVEsTUFBTTtBQUN6QixRQUFJLENBQUMsTUFBTSxRQUFRLFVBQVUsRUFBRyxRQUFPO0FBQ3ZDLFdBQU8sQ0FBQyxHQUFHLFVBQVUsRUFBRSxPQUFPLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHO0FBQUEsRUFDMUQsR0FBRyxDQUFDLFVBQVUsQ0FBQztBQUNmLFFBQU0sTUFBTUE7QUFBQSxJQUNSLE1BQU8sU0FBUyxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFBQSxJQUNyQyxDQUFDLE1BQU07QUFBQSxFQUNYO0FBRUEsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQyxXQUFTLENBQUMsQ0FBQztBQUN6QyxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLFdBQVMsQ0FBQyxDQUFDO0FBQ3ZDLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUEsV0FBUyxDQUFDLENBQUM7QUFDekMsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQSxXQUFTLENBQUMsQ0FBQztBQUsvQyxRQUFNLENBQUMsZ0JBQWdCLGlCQUFpQixJQUFJQSxXQUFTLENBQUMsQ0FBQztBQUN2RCxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLFdBQVMsSUFBSTtBQU12QyxFQUFBRixZQUFVLE1BQU07QUFDWixRQUFJLElBQUksV0FBVyxHQUFHO0FBQ2xCLGlCQUFXLENBQUMsQ0FBQztBQUNiLGVBQVMsSUFBSTtBQUNiO0FBQUEsSUFDSjtBQUNBLFFBQUksWUFBWTtBQUNoQixLQUFDLFlBQVk7QUFDVCxZQUFNLEtBQUssS0FBSyxJQUFJO0FBQ3BCLE1BQUFJLFVBQVMscUJBQXFCLFNBQVMsRUFBRSxVQUFVLElBQUksQ0FBQztBQUN4RCxZQUFNLFVBQVUsTUFBTSxRQUFRO0FBQUEsUUFDMUIsSUFBSSxJQUFJLE9BQU8sY0FBYztBQUN6QixjQUFJO0FBQ0Esa0JBQU0sUUFBUSxNQUFNLG1CQUFtQixXQUFXLG1CQUFtQjtBQUNyRSxrQkFBTSxPQUFPLE1BQU0sUUFBUSxLQUFLLElBQzFCLFFBQ0EsTUFBTSxRQUFRLE9BQU8sT0FBTyxJQUMxQixNQUFNLFVBQ04sQ0FBQztBQUNULG1CQUFPLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsU0FBUyxVQUFVLEVBQUU7QUFBQSxVQUN6RCxTQUFTLEdBQUc7QUFDUixnQkFBSSxhQUFhLEtBQUssR0FBRyxXQUFXLEVBQUUsRUFBRyxRQUFPLENBQUM7QUFDakQsa0JBQU07QUFBQSxVQUNWO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTDtBQUNBLFVBQUksVUFBVztBQUNmLFlBQU0sT0FBTyxRQUFRLEtBQUs7QUFDMUIsTUFBQUEsVUFBUyxxQkFBcUIsT0FBTztBQUFBLFFBQ2pDLGFBQWEsS0FBSyxJQUFJLElBQUk7QUFBQSxRQUMxQixVQUFVO0FBQUEsUUFDVixjQUFjLEtBQUs7QUFBQSxNQUN2QixDQUFDO0FBQ0QsaUJBQVcsSUFBSTtBQUNmLGVBQVMsSUFBSTtBQUFBLElBQ2pCLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNkLE1BQUFBLFVBQVMscUJBQXFCLFNBQVM7QUFBQSxRQUNuQyxVQUFVO0FBQUEsUUFDVixPQUFPLEdBQUcsV0FBVyxPQUFPLENBQUM7QUFBQSxNQUNqQyxDQUFDO0FBQ0QsVUFBSSxDQUFDLFVBQVcsVUFBUyxHQUFHLFdBQVcsT0FBTyxDQUFDLENBQUM7QUFBQSxJQUNwRCxDQUFDO0FBQ0QsV0FBTyxNQUFNO0FBQ1Qsa0JBQVk7QUFBQSxJQUNoQjtBQUFBLEVBQ0osR0FBRyxDQUFDLEdBQUcsQ0FBQztBQU1SLEVBQUFKLFlBQVUsTUFBTTtBQUNaLFFBQUksUUFBUSxXQUFXLEVBQUc7QUFHMUIsVUFBTSxRQUFRLG9CQUFJLElBQUk7QUFDdEIsZUFBVyxVQUFVLFNBQVM7QUFDMUIsWUFBTSxNQUFNLFVBQVUsT0FBTyxTQUFTLE9BQU8sSUFBSTtBQUNqRCxZQUFNLElBQUksS0FBSztBQUFBLFFBQ1gsU0FBUyxPQUFPO0FBQUEsUUFDaEIsVUFBVSxPQUFPLE9BQU8sUUFBUSxJQUFJLElBQUksT0FBTyxPQUFPLFFBQVEsSUFBSTtBQUFBLFFBQ2xFLFVBQVUsT0FBTztBQUFBLFFBQ2pCLE9BQU8sT0FBTztBQUFBLFFBQ2QsYUFBYSxPQUFPLGVBQWU7QUFBQSxRQUNuQyxXQUFXLENBQUM7QUFBQSxNQUNoQixDQUFDO0FBQUEsSUFDTDtBQUdBLFVBQU0sb0JBQW9CLG9CQUFJLElBQUk7QUFDbEMsZUFBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU0sUUFBUSxHQUFHO0FBQ3BDLFlBQU0sV0FBVyxHQUFHLEVBQUUsT0FBTyxLQUFLLEVBQUUsUUFBUTtBQUM1QyxVQUFJLENBQUMsa0JBQWtCLElBQUksUUFBUSxFQUFHLG1CQUFrQixJQUFJLFVBQVUsQ0FBQyxDQUFDO0FBQ3hFLHdCQUFrQixJQUFJLFFBQVEsRUFBRSxLQUFLLEdBQUc7QUFBQSxJQUM1QztBQUVBLElBQUFLLGFBQVksUUFBUTtBQUNwQixVQUFNLFdBQVdBLGFBQVksR0FBRywwQkFBMEIsQ0FBQyxVQUFVO0FBQ2pFLFVBQUksTUFBTSxVQUFVLE1BQU0sV0FBVyxRQUFRO0FBQ3pDLFFBQUFGLFlBQVcsc0JBQXNCLE1BQU0sTUFBTSxFQUFFO0FBQy9DO0FBQUEsTUFDSjtBQUNBLFlBQU0sV0FBVyxNQUFNO0FBQ3ZCLFlBQU0sU0FBUyxNQUFNO0FBQ3JCLFlBQU0sVUFBVSxNQUFNO0FBQ3RCLFlBQU0sVUFBVSxNQUFNO0FBQ3RCLFVBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxXQUFXLE1BQU07QUFDekMsUUFBQUEsWUFBVyxtQ0FBbUM7QUFDOUM7QUFBQSxNQUNKO0FBUUEsWUFBTSxXQUFXLFVBQVUsR0FBRyxPQUFPLEtBQUssUUFBUSxLQUFLO0FBQ3ZELFVBQUksT0FBTyxXQUFXLGtCQUFrQixJQUFJLFFBQVEsSUFBSTtBQUN4RCxVQUFJLENBQUMsTUFBTTtBQUNQLG1CQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssa0JBQWtCLFFBQVEsR0FBRztBQUNoRCxjQUFJLEdBQUcsU0FBUyxLQUFLLFFBQVEsRUFBRSxHQUFHO0FBQzlCLG1CQUFPO0FBQ1A7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxVQUFJLENBQUMsTUFBTTtBQUNQLFFBQUFBLFlBQVcscUNBQXFDO0FBQ2hEO0FBQUEsTUFDSjtBQUNBLE1BQUFBLFlBQVcsaUJBQWlCLFFBQVEsRUFBRTtBQUN0QyxpQkFBVyxPQUFPLE1BQU07QUFDcEIsY0FBTSxJQUFJLE1BQU0sSUFBSSxHQUFHO0FBQ3ZCLGNBQU0sSUFBSSxRQUFRLFNBQVMsRUFBRSxLQUFLO0FBQ2xDLFVBQUUsVUFBVSxNQUFNLElBQUk7QUFDdEIsY0FBTSxNQUFNLFVBQVUsT0FBTyxPQUFPLEVBQUUsU0FBUyxHQUFHLEVBQUUsV0FBVztBQUMvRCxrQkFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFO0FBQzNDLG1CQUFXLENBQUMsU0FBUztBQUFBLFVBQ2pCLEdBQUc7QUFBQSxVQUNILENBQUMsR0FBRyxHQUFHLENBQUMsR0FBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQ0csWUFBVztBQUFBLFFBQ3hELEVBQUU7QUFDRixzQkFBYyxDQUFDLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxJQUFJLEVBQUUsRUFBRTtBQUN0RCwwQkFBa0IsQ0FBQyxTQUFTO0FBQUEsVUFDeEIsR0FBRztBQUFBLFVBQ0gsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFJLElBQUksR0FBRyxLQUFLLENBQUMsR0FBSSxDQUFDLE1BQU0sR0FBRyxFQUFFO0FBQUEsUUFDOUMsRUFBRTtBQUFBLE1BQ047QUFBQSxJQUNKLENBQUM7QUFFRCxlQUFXLENBQUMsVUFBVSxJQUFJLEtBQUssa0JBQWtCLFFBQVEsR0FBRztBQUN4RCxZQUFNLENBQUMsU0FBUyxRQUFRLElBQUksU0FBUyxNQUFNLElBQUk7QUFDL0MsWUFBTSxZQUFZLEtBQ2IsSUFBSSxDQUFDLE1BQU0sTUFBTSxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQ2hDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQztBQUN4QixZQUFNLE1BQU07QUFBQSxRQUNSLE9BQU87QUFBQSxRQUNQLFNBQVMsRUFBRSxTQUFTLFNBQVM7QUFBQSxNQUNqQztBQUNBLFVBQUksVUFBVSxTQUFTLEdBQUc7QUFDdEIsWUFBSSxTQUFTLEVBQUUsVUFBVSxLQUFLLElBQUksR0FBRyxTQUFTLElBQUksSUFBSztBQUFBLE1BQzNEO0FBQ0EsTUFBQUQsYUFBWSxVQUFVLEdBQUc7QUFBQSxJQUM3QjtBQUVBLFdBQU8sTUFBTTtBQUNULGVBQVM7QUFDVCxNQUFBQSxhQUFZLFdBQVc7QUFBQSxJQUMzQjtBQUFBLEVBQ0osR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUVaLFNBQU8sRUFBRSxTQUFTLFFBQVEsU0FBUyxZQUFZLGdCQUFnQixNQUFNO0FBQ3pFOzs7QUN6TUEsU0FBUyxhQUFBRSxhQUFXLFlBQUFDLGtCQUFnQjtBQU1wQyxJQUFNLGFBQWE7QUFLbkIsSUFBTSxVQUFVLElBQUksS0FBSztBQUVsQixTQUFTLHNCQUFzQixFQUFFLE1BQU0sWUFBWSxTQUFTLFFBQVEsSUFBSSxDQUFDLEdBQUc7QUFDL0UsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxXQUFTLElBQUk7QUFDekMsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxXQUFTLElBQUk7QUFFdkMsRUFBQUQsWUFBVSxNQUFNO0FBQ1osUUFBSSxZQUFZO0FBQ2hCLFVBQU0sYUFBYSxJQUFJLGdCQUFnQjtBQUV2QyxtQkFBZSxPQUFPO0FBQ2xCLFVBQUk7QUFDQSxjQUFNLE1BQU0sTUFBTSxNQUFNLEtBQUssRUFBRSxRQUFRLFdBQVcsT0FBTyxDQUFDO0FBQzFELFlBQUksQ0FBQyxJQUFJLEdBQUksT0FBTSxJQUFJLE1BQU0sUUFBUSxJQUFJLE1BQU0sRUFBRTtBQUNqRCxjQUFNLE9BQU8sTUFBTSxJQUFJLEtBQUs7QUFDNUIsWUFBSSxVQUFXO0FBQ2Ysa0JBQVUsTUFBTSxXQUFXLElBQUk7QUFDL0IsaUJBQVMsSUFBSTtBQUFBLE1BQ2pCLFNBQVMsR0FBRztBQUNSLFlBQUksYUFBYSxFQUFFLFNBQVMsYUFBYztBQUMxQyxpQkFBUyxFQUFFLFdBQVcsT0FBTyxDQUFDLENBQUM7QUFBQSxNQUNuQztBQUFBLElBQ0o7QUFFQSxTQUFLO0FBQ0wsVUFBTSxLQUFLLFlBQVksTUFBTSxNQUFNO0FBQ25DLFdBQU8sTUFBTTtBQUNULGtCQUFZO0FBQ1osaUJBQVcsTUFBTTtBQUNqQixvQkFBYyxFQUFFO0FBQUEsSUFDcEI7QUFBQSxFQUNKLEdBQUcsQ0FBQyxLQUFLLE1BQU0sQ0FBQztBQUVoQixTQUFPLEVBQUUsUUFBUSxNQUFNO0FBQzNCOzs7QUM3Q0EsU0FBUyxlQUFBRSxjQUFhLFVBQUFDLFNBQVEsWUFBQUMsa0JBQWdCO0FBQzlDLFNBQVMsaUJBQWlCLGlCQUFpQjtBQUUzQyxJQUFNLGdCQUFnQjtBQVFmLFNBQVMscUJBQXFCLEVBQUUsUUFBUSxJQUFJLENBQUMsR0FBRztBQUNuRCxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLFdBQVMsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUlwRCxRQUFNLGFBQWFELFFBQU8sSUFBSTtBQUM5QixRQUFNLFdBQVdBLFFBQU8sSUFBSTtBQUM1QixRQUFNLGVBQWVBLFFBQU8sSUFBSTtBQUVoQyxRQUFNLGlCQUFpQixNQUFNO0FBQ3pCLFFBQUksYUFBYSxTQUFTO0FBQ3RCLG1CQUFhLGFBQWEsT0FBTztBQUNqQyxtQkFBYSxVQUFVO0FBQUEsSUFDM0I7QUFBQSxFQUNKO0FBRUEsUUFBTSxjQUFjRCxhQUFZLENBQUMsUUFBUSxhQUFhO0FBQ2xELFFBQUksQ0FBQyxVQUFVLE9BQVE7QUFDdkIsbUJBQWU7QUFDZixlQUFXLFVBQVUsRUFBRSxRQUFRLFNBQVM7QUFDeEMsYUFBUztBQUFBLE1BQ0wsT0FBTztBQUFBLE1BQ1A7QUFBQSxNQUNBLGVBQWUsU0FBUztBQUFBLElBQzVCLENBQUM7QUFBQSxFQUNMLEdBQUcsQ0FBQyxDQUFDO0FBRUwsUUFBTSxnQkFBZ0JBLGFBQVksTUFBTTtBQUNwQyxlQUFXLFVBQVU7QUFDckIsYUFBUyxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQUEsRUFDOUIsR0FBRyxDQUFDLENBQUM7QUFFTCxRQUFNLGdCQUFnQkEsYUFBWSxNQUFNO0FBQ3BDLGFBQVMsU0FBUyxNQUFNO0FBQUEsRUFDNUIsR0FBRyxDQUFDLENBQUM7QUFFTCxRQUFNLFFBQVFBO0FBQUEsSUFDVixPQUFPLFlBQVk7QUFDZixZQUFNLFVBQVUsV0FBVztBQUMzQixVQUFJLENBQUMsUUFBUztBQUNkLFlBQU0sRUFBRSxRQUFRLFNBQVMsSUFBSTtBQUM3QixpQkFBVyxVQUFVO0FBRXJCLFlBQU0sWUFBWSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTTtBQUM5QyxlQUFTO0FBQUEsUUFDTCxPQUFPO0FBQUEsUUFDUDtBQUFBLFFBQ0EsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLFVBQVUsT0FBTztBQUFBLE1BQ2pELENBQUM7QUFFRCxZQUFNLGFBQWEsSUFBSSxnQkFBZ0I7QUFDdkMsZUFBUyxVQUFVO0FBRW5CLGdCQUFVO0FBQUEsUUFDTixNQUFNO0FBQUEsUUFDTixLQUFLO0FBQUEsUUFDTCxLQUFLLHNCQUFtQixVQUFVLE1BQU0sVUFBVSxVQUFVLFdBQVcsSUFBSSxLQUFLLEdBQUcsV0FBTSxNQUFNO0FBQUEsTUFDbkcsQ0FBQztBQUVELFlBQU0sU0FBUyxNQUFNLGdCQUFnQjtBQUFBLFFBQ2pDO0FBQUEsUUFDQSxTQUFTO0FBQUEsUUFDVCxRQUFRLFFBQVE7QUFBQSxRQUNoQixnQkFBZ0IsUUFBUTtBQUFBLFFBQ3hCLFdBQVcsUUFBUTtBQUFBLFFBQ25CLFFBQVEsV0FBVztBQUFBLFFBQ25CLFlBQVksQ0FBQyxFQUFFLE1BQU0sTUFBTSxNQUFNO0FBQzdCO0FBQUEsWUFBUyxDQUFDLFNBQ04sS0FBSyxVQUFVLFlBQ1QsRUFBRSxHQUFHLE1BQU0sVUFBVSxFQUFFLE1BQU0sTUFBTSxFQUFFLElBQ3JDO0FBQUEsVUFDVjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGdCQUFnQixDQUFDLE1BQU07QUFDbkI7QUFBQSxZQUNJLEVBQUUsS0FDSSxFQUFFLE1BQU0sT0FBTyxLQUFLLEVBQUUsVUFBVSxLQUFLLGlCQUFpQixJQUN0RCxFQUFFLE1BQU0sT0FBTyxLQUFLLEVBQUUsVUFBVSxLQUFLLGtCQUFrQixFQUFFLEtBQUssR0FBRztBQUFBLFVBQzNFO0FBQUEsUUFDSjtBQUFBLE1BQ0osQ0FBQztBQUVELFlBQU0sVUFBVSxVQUFVLE9BQU8sT0FBTztBQUN4QyxnQkFBVTtBQUFBLFFBQ04sTUFBTSxPQUFPLFVBQVUsUUFBUTtBQUFBLFFBQy9CLEtBQUs7QUFBQSxRQUNMLEtBQUssT0FBTyxVQUNOLG9CQUFvQixPQUFPLE1BQU0sVUFBTyxRQUFRLEVBQUUsWUFBUyxRQUFRLE1BQU0sWUFDekUscUJBQWtCLFFBQVEsRUFBRSxZQUFTLFFBQVEsTUFBTTtBQUFBLE1BQzdELENBQUM7QUFFRCxlQUFTO0FBQUEsUUFDTCxPQUFPO0FBQUEsUUFDUDtBQUFBLFFBQ0EsU0FBUyxPQUFPO0FBQUEsUUFDaEIsUUFBUSxPQUFPO0FBQUEsUUFDZjtBQUFBLE1BQ0osQ0FBQztBQUVELHFCQUFlO0FBQ2YsbUJBQWEsVUFBVSxXQUFXLE1BQU07QUFDcEMsaUJBQVMsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUMxQixxQkFBYSxVQUFVO0FBQUEsTUFDM0IsR0FBRyxhQUFhO0FBRWhCLGVBQVMsVUFBVTtBQUFBLElBQ3ZCO0FBQUEsSUFDQSxDQUFDLE9BQU87QUFBQSxFQUNaO0FBRUEsU0FBTztBQUFBLElBQ0g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjtBQUNKOzs7QUNoSUEsT0FBT0csV0FBUyxZQUFBQyxrQkFBZ0I7QUFDaEMsU0FBUyxPQUFBQyxPQUFLLFFBQUFDLGNBQVk7QUF3Q00sZ0JBQUFDLE9BYWhCLFFBQUFDLGNBYmdCO0FBcENoQyxJQUFNQyxhQUFZO0FBQ2xCLElBQU1DLGFBQVk7QUFFbEIsSUFBTUMsUUFBTztBQUFBLEVBQ1QsRUFBRSxHQUFHLEtBQUssT0FBTyxTQUFTO0FBQUEsRUFDMUIsRUFBRSxHQUFHLEtBQUssT0FBTyxnQkFBZ0I7QUFBQSxFQUNqQyxFQUFFLEdBQUcsT0FBTyxPQUFPLFFBQVE7QUFBQSxFQUMzQixFQUFFLEdBQUcsU0FBUyxPQUFPLFFBQVE7QUFBQSxFQUM3QixFQUFFLEdBQUcsT0FBTyxPQUFPLFNBQVM7QUFDaEM7QUFFTyxTQUFTLGFBQWEsRUFBRSxlQUFlLFFBQVEsV0FBVyxTQUFTLEdBQUc7QUFDekUsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQyxXQUFTLElBQUk7QUFDekMsUUFBTSxDQUFDLGdCQUFnQixpQkFBaUIsSUFBSUEsV0FBUyxJQUFJO0FBQ3pELFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUEsV0FBUyxDQUFDO0FBRTVDO0FBQUEsSUFDSSxDQUFDLE9BQU8sUUFBUTtBQUNaLFVBQUksSUFBSSxRQUFRO0FBQ1osbUJBQVc7QUFDWDtBQUFBLE1BQ0o7QUFDQSxVQUFJLElBQUksUUFBUTtBQUNaLG9CQUFZLEVBQUUsUUFBUSxnQkFBZ0IsVUFBVSxDQUFDO0FBQ2pEO0FBQUEsTUFDSjtBQUNBLFVBQUksVUFBVSxJQUFLLFdBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUFBLGVBQzdCLFVBQVUsSUFBSyxtQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUFBLGVBQzFDLFVBQVUsT0FBTyxVQUFVO0FBQ2hDLHFCQUFhLENBQUMsTUFBTSxLQUFLLElBQUlGLFlBQVcsSUFBSSxDQUFDLENBQUM7QUFBQSxlQUN6QyxVQUFVLE9BQU8sVUFBVTtBQUNoQyxxQkFBYSxDQUFDLE1BQU0sS0FBSyxJQUFJRCxZQUFXLElBQUksQ0FBQyxDQUFDO0FBQUEsSUFDdEQ7QUFBQSxJQUNBLEVBQUUsTUFBTUUsTUFBSztBQUFBLEVBQ2pCO0FBRUEsUUFBTSxRQUFRLENBQUMsT0FBUSxLQUFLLGdCQUFBSixNQUFDTSxRQUFBLEVBQUssT0FBTyxNQUFNLE1BQU0saUJBQUcsSUFBVSxnQkFBQU4sTUFBQ00sUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLGlCQUFHO0FBRS9GLFNBQ0ksZ0JBQUFMO0FBQUEsSUFBQ007QUFBQSxJQUFBO0FBQUEsTUFDRyxhQUFZO0FBQUEsTUFDWixhQUFhLE1BQU07QUFBQSxNQUNuQixpQkFBaUIsTUFBTTtBQUFBLE1BQ3ZCLFVBQVU7QUFBQSxNQUNWLFVBQVU7QUFBQSxNQUNWLGVBQWM7QUFBQSxNQUNkLE9BQU87QUFBQSxNQUVQO0FBQUEsd0JBQUFOLE9BQUNNLE9BQUEsRUFBSSxjQUFjLEdBQ2Y7QUFBQSwwQkFBQU4sT0FBQ0ssUUFBQSxFQUFLLE9BQU8sTUFBTSxRQUFRLE1BQUksTUFBQztBQUFBO0FBQUEsWUFDbkI7QUFBQSxZQUFjO0FBQUEsWUFBUSxrQkFBa0IsSUFBSSxLQUFLO0FBQUEsYUFDOUQ7QUFBQSxVQUNBLGdCQUFBTixNQUFDTSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sMkJBQVU7QUFBQSxVQUNwQyxnQkFBQU4sTUFBQ00sUUFBQSxFQUFLLE9BQU8sTUFBTSxNQUFPLG9CQUFVLFVBQVM7QUFBQSxXQUNqRDtBQUFBLFFBRUEsZ0JBQUFMLE9BQUNNLE9BQUEsRUFDSTtBQUFBLGdCQUFNLE1BQU07QUFBQSxVQUNiLGdCQUFBUCxNQUFDTSxRQUFBLEVBQUssT0FBTyxNQUFNLElBQUksNEJBQWM7QUFBQSxVQUNyQyxnQkFBQU4sTUFBQ00sUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLGlCQUFHO0FBQUEsV0FDbkM7QUFBQSxRQUNBLGdCQUFBTCxPQUFDTSxPQUFBLEVBQ0k7QUFBQSxnQkFBTSxjQUFjO0FBQUEsVUFDckIsZ0JBQUFQLE1BQUNNLFFBQUEsRUFBSyxPQUFPLE1BQU0sSUFBSSxnQ0FBa0I7QUFBQSxVQUN6QyxnQkFBQU4sTUFBQ00sUUFBQSxFQUFLLE9BQU8sTUFBTSxTQUFTLGlCQUFHO0FBQUEsV0FDbkM7QUFBQSxRQUNBLGdCQUFBTCxPQUFDTSxPQUFBLEVBQ0c7QUFBQSwwQkFBQVAsTUFBQ00sUUFBQSxFQUFLLE9BQU8sTUFBTSxPQUFPLDhCQUFnQjtBQUFBLFVBQzFDLGdCQUFBTixNQUFDTSxRQUFBLEVBQUssT0FBTyxNQUFNLFFBQVEsTUFBSSxNQUFFLHFCQUFVO0FBQUEsVUFDM0MsZ0JBQUFOLE1BQUNNLFFBQUEsRUFBSyxPQUFPLE1BQU0sU0FBUyxvQkFBTTtBQUFBLFdBQ3RDO0FBQUEsUUFFQSxnQkFBQUwsT0FBQ00sT0FBQSxFQUFJLFdBQVcsR0FDWjtBQUFBLDBCQUFBUCxNQUFDTSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sb0JBQU07QUFBQSxVQUNoQyxnQkFBQU4sTUFBQ00sUUFBQSxFQUFLLE9BQU8sTUFBTSxNQUFNLG1CQUFLO0FBQUEsVUFDOUIsZ0JBQUFOLE1BQUNNLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTyw0QkFBVztBQUFBLFVBQ3JDLGdCQUFBTixNQUFDTSxRQUFBLEVBQUssT0FBTyxNQUFNLE9BQU8sb0JBQU07QUFBQSxXQUNwQztBQUFBO0FBQUE7QUFBQSxFQUNKO0FBRVI7OztBL0JOWSxnQkFBQUUsT0FtUEksUUFBQUMsY0FuUEo7QUEvQ1osSUFBTSxXQUFXO0FBQ2pCLElBQU0sV0FBVztBQUtqQixJQUFNLG1CQUFtQjtBQUFBLEVBQ3JCLFFBQVE7QUFBQSxJQUNKLEVBQUUsR0FBRyxPQUFPLE9BQU8sT0FBTztBQUFBLElBQzFCLEVBQUUsR0FBRyxLQUFLLE9BQU8sT0FBTztBQUFBLEVBQzVCO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDSixFQUFFLEdBQUcsT0FBTyxPQUFPLE9BQU87QUFBQSxJQUMxQixFQUFFLEdBQUcsS0FBSyxPQUFPLE9BQU87QUFBQSxFQUM1QjtBQUFBLEVBQ0EsV0FBVztBQUFBLElBQ1AsRUFBRSxHQUFHLE9BQU8sT0FBTyxPQUFPO0FBQUEsSUFDMUIsRUFBRSxHQUFHLGdCQUFNLE9BQU8sTUFBTTtBQUFBLElBQ3hCLEVBQUUsR0FBRyxPQUFPLE9BQU8sUUFBUTtBQUFBLElBQzNCLEVBQUUsR0FBRyxLQUFLLE9BQU8sT0FBTztBQUFBLElBQ3hCLEVBQUUsR0FBRyxLQUFLLE9BQU8sUUFBUTtBQUFBLElBQ3pCLEVBQUUsR0FBRyxLQUFLLE9BQU8sU0FBUztBQUFBLElBQzFCLEVBQUUsR0FBRyxLQUFLLE9BQU8sVUFBVTtBQUFBLElBQzNCLEVBQUUsR0FBRyxLQUFLLE9BQU8sVUFBVTtBQUFBLElBQzNCLEVBQUUsR0FBRyxLQUFLLE9BQU8sT0FBTztBQUFBLEVBQzVCO0FBQ0o7QUFFQSxJQUFNLGNBQWM7QUFBQSxFQUNoQixFQUFFLEdBQUcsU0FBUyxPQUFPLFFBQVE7QUFBQSxFQUM3QixFQUFFLEdBQUcsT0FBTyxPQUFPLFNBQVM7QUFDaEM7QUFFQSxJQUFNLDJCQUEyQjtBQUFBLEVBQzdCLEVBQUUsR0FBRyxPQUFPLE9BQU8sT0FBTztBQUFBLEVBQzFCLEVBQUUsR0FBRyxLQUFLLE9BQU8sU0FBUztBQUFBLEVBQzFCLEVBQUUsR0FBRyxLQUFLLE9BQU8sUUFBUTtBQUFBLEVBQ3pCLEVBQUUsR0FBRyxLQUFLLE9BQU8sUUFBUTtBQUM3QjtBQUNBLElBQU0sMkJBQTJCO0FBQUEsRUFDN0IsRUFBRSxHQUFHLFNBQVMsT0FBTyxVQUFVO0FBQUEsRUFDL0IsRUFBRSxHQUFHLEtBQUssT0FBTyxPQUFPO0FBQzVCO0FBRU8sU0FBUyxJQUFJLEVBQUUsUUFBUSxTQUFTLFVBQVUsU0FBUyxHQUFHO0FBQ3pELFNBQ0ksZ0JBQUFELE1BQUMsaUJBQ0csMEJBQUFBO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDRztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBO0FBQUEsRUFDSixHQUNKO0FBRVI7QUFFQSxTQUFTLFNBQVMsRUFBRSxRQUFRLFNBQVMsVUFBVSxTQUFTLEdBQUc7QUFDdkQsUUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPO0FBQ3hCLFFBQU0sRUFBRSxPQUFPLElBQUlFLFdBQVU7QUFDN0IsUUFBTSxDQUFDLEtBQUssTUFBTSxJQUFJQyxXQUFTLFVBQVU7QUFDekMsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQSxXQUFTLElBQUk7QUFDakQsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQSxXQUFTLFFBQVE7QUFDekMsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxXQUFTLEVBQUU7QUFDdkMsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxXQUFTLEtBQUs7QUFDaEQsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxXQUFTLEtBQUs7QUFLMUMsUUFBTSxDQUFDLGNBQWMsZUFBZSxJQUFJQSxXQUFTLElBQUk7QUFDckQsUUFBTSwyQkFBMkJDLGFBQVksQ0FBQyxTQUFTLGVBQWU7QUFDbEUsUUFBSSxZQUFZLE1BQU07QUFJbEI7QUFBQSxRQUFnQixDQUFDLFFBQ2IsT0FBTyxJQUFJLGNBQWMsYUFBYSxPQUFPO0FBQUEsTUFDakQ7QUFDQTtBQUFBLElBQ0o7QUFDQSxvQkFBZ0IsT0FBTztBQUFBLEVBQzNCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBTSxDQUFDLGdCQUFnQixpQkFBaUIsSUFBSUQsV0FBUyxDQUFDO0FBQ3RELFFBQU0sQ0FBQyxxQkFBcUIsc0JBQXNCLElBQUlBLFdBQVMsS0FBSztBQUNwRSxRQUFNLENBQUMsa0JBQWtCLG1CQUFtQixJQUFJQSxXQUFTLEtBQUs7QUFDOUQsUUFBTSxDQUFDLG1CQUFtQixvQkFBb0IsSUFBSUEsV0FBUyxLQUFLO0FBQ2hFLFFBQU0sY0FBYyxZQUFZLENBQUM7QUFDakMsUUFBTSxtQkFBbUIsWUFBWSxTQUFTO0FBQzlDLFFBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSUEsV0FBUyxPQUFPO0FBQUEsSUFDcEMsTUFBTSxRQUFRLFdBQVc7QUFBQSxJQUN6QixNQUFNLFFBQVEsUUFBUTtBQUFBLEVBQzFCLEVBQUU7QUFFRixFQUFBRSxZQUFVLE1BQU07QUFDWixRQUFJLENBQUMsT0FBUTtBQUNiLFVBQU0sU0FBUyxNQUNYLFFBQVEsRUFBRSxNQUFNLE9BQU8sU0FBUyxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ3ZELFVBQU0sSUFBSSxXQUFXLFFBQVEsRUFBRTtBQUMvQixXQUFPLEdBQUcsVUFBVSxNQUFNO0FBQzFCLFdBQU8sTUFBTTtBQUNULG1CQUFhLENBQUM7QUFDZCxhQUFPLElBQUksVUFBVSxNQUFNO0FBQUEsSUFDL0I7QUFBQSxFQUNKLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFFWCxRQUFNLEVBQUUsU0FBUyxTQUFTLE1BQU0sSUFBSSxXQUFXO0FBQy9DLFFBQU0sRUFBRSxTQUFTLFNBQVMsWUFBWSxRQUFRLFVBQVUsSUFBSSx5QkFBeUIsT0FBTztBQUM1RixRQUFNLFNBQVMsZUFBZTtBQUM5QixRQUFNLGtCQUFrQkMsVUFBUSxNQUFNO0FBQ2xDLFVBQU0sTUFBTSxvQkFBSSxJQUFJO0FBQ3BCLGVBQVcsS0FBSyxTQUFTO0FBQ3JCLFVBQUksR0FBRyxRQUFTLEtBQUksSUFBSSxFQUFFLE9BQU87QUFBQSxJQUNyQztBQUNBLFdBQU8sQ0FBQyxHQUFHLEdBQUc7QUFBQSxFQUNsQixHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ1osUUFBTSxnQkFBZ0IsaUJBQWlCLGVBQWU7QUFDdEQsUUFBTSxpQkFBaUIsa0JBQWtCLGVBQWU7QUFDeEQsUUFBTSxFQUFFLFFBQVEsbUJBQW1CLElBQUksc0JBQXNCO0FBQzdELFFBQU0sVUFBVSxxQkFBcUIsRUFBRSxTQUFTLFVBQVUsQ0FBQztBQUMzRCxRQUFNLHdCQUF3QkE7QUFBQSxJQUMxQixNQUFNLG9CQUFvQixPQUFPLFdBQVcsT0FBTztBQUFBLElBQ25ELENBQUMsT0FBTyxXQUFXLE9BQU87QUFBQSxFQUM5QjtBQUNBLFFBQU0sU0FBU0E7QUFBQSxJQUNYLE1BQU0sWUFBWSxTQUFTLHFCQUFxQjtBQUFBLElBQ2hELENBQUMsU0FBUyxxQkFBcUI7QUFBQSxFQUNuQztBQUNBLFFBQU0sV0FBV0E7QUFBQSxJQUNiLE1BQ0kscUJBQXFCLGdCQUFnQixTQUFTLFNBQVMsa0JBQWtCLElBQUksQ0FBQztBQUFBLElBQ2xGLENBQUMsU0FBUyxTQUFTLGtCQUFrQjtBQUFBLEVBQ3pDO0FBQ0EsUUFBTSxXQUFXLFFBQVEsS0FBSyxDQUFDLE1BQU0sRUFBRSxXQUFXLFVBQVU7QUFDNUQsUUFBTSxpQkFBaUIsQ0FBQyxDQUFDLFVBQVUsWUFBWTtBQUMvQyxRQUFNLG9CQUFvQixVQUFVLFdBQVc7QUFDL0MsUUFBTSxhQUFhLHFCQUFxQixpQkFBaUI7QUFDekQsUUFBTSxDQUFDLGtCQUFrQixtQkFBbUIsSUFBSUgsV0FBUyxJQUFJO0FBTTdELEVBQUFFLFlBQVUsTUFBTTtBQUNaLFFBQUksV0FBVyxRQUFTO0FBQ3hCLFVBQU0sT0FBTyxXQUFXO0FBQ3hCLFFBQUksS0FBSyxXQUFXLEdBQUc7QUFDbkIsMEJBQW9CLElBQUk7QUFDeEI7QUFBQSxJQUNKO0FBQ0Esd0JBQW9CLENBQUMsU0FBUztBQUMxQixVQUFJLFFBQVEsS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxFQUFHLFFBQU87QUFDdEQsYUFBTyxXQUFXLFdBQVcsS0FBSyxDQUFDLEVBQUU7QUFBQSxJQUN6QyxDQUFDO0FBQUEsRUFDTCxHQUFHLENBQUMsWUFBWSxtQkFBbUIsV0FBVyxTQUFTLFdBQVcsU0FBUyxXQUFXLE9BQU8sQ0FBQztBQUU5RixRQUFNLG9CQUFvQixtQkFDcEIsV0FBVyxRQUFRLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxnQkFBZ0IsSUFDL0Q7QUFDTixRQUFNLGVBQWUscUJBQXFCLElBQUksV0FBVyxRQUFRLGlCQUFpQixJQUFJO0FBQ3RGLFFBQU0sY0FBYyxXQUFXLFFBQVE7QUFFdkMsUUFBTSxpQkFBaUIsTUFBTTtBQUN6QixRQUFJLGVBQWUsRUFBRztBQUN0QixVQUFNLElBQUkscUJBQXFCLElBQUksb0JBQW9CO0FBQ3ZELFVBQU0sT0FBTyxXQUFXLFNBQVMsSUFBSSxLQUFLLFdBQVc7QUFDckQsd0JBQW9CLEtBQUssSUFBSTtBQUM3QixzQkFBa0IsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUFBLEVBQ2xDO0FBT0EsUUFBTSxDQUFDLGFBQWEsY0FBYyxJQUFJRixXQUFTLEtBQUs7QUFDcEQsUUFBTSxnQkFBZ0IsY0FBYyxtQkFBbUI7QUFJdkQsUUFBTSxnQkFBZ0IsQ0FBQyxFQUFFLGlCQUFpQixjQUFjLEtBQUssYUFBYTtBQUMxRSxFQUFBRSxZQUFVLE1BQU07QUFDWixRQUFJLENBQUMsaUJBQWlCLGdCQUFnQixNQUFPLGdCQUFlLEtBQUs7QUFBQSxFQUNyRSxHQUFHLENBQUMsZUFBZSxXQUFXLENBQUM7QUFDL0IsUUFBTSxtQkFBbUIsTUFBTTtBQUMzQixRQUFJLENBQUMsY0FBZTtBQUNwQixtQkFBZSxDQUFDLFFBQVE7QUFDcEIsWUFBTSxRQUFRLENBQUMsT0FBTyxRQUFRLFFBQVEsT0FBTztBQUM3QyxZQUFNLElBQUksTUFBTSxRQUFRLEdBQUc7QUFDM0IsYUFBTyxPQUFPLElBQUksS0FBSyxNQUFNLE1BQU07QUFBQSxJQUN2QyxDQUFDO0FBQUEsRUFDTDtBQUVBLFFBQU0sb0JBQW9CQztBQUFBLElBQ3RCLE1BQU07QUFBQSxNQUNGLEdBQUc7QUFBQSxNQUNILEdBQUksY0FBYyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQUEsTUFDeEQsR0FBSSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsS0FBSyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFBQSxNQUNwRCxHQUFHO0FBQUEsSUFDUDtBQUFBLElBQ0EsQ0FBQyxhQUFhLGFBQWE7QUFBQSxFQUMvQjtBQUlBO0FBQUEsSUFDSSxDQUFDLE9BQU8sUUFBUTtBQUNaLFlBQU0sU0FBUyxLQUFLLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxLQUFLO0FBQy9DLFVBQUksUUFBUTtBQUNSLGVBQU8sT0FBTyxFQUFFO0FBQ2hCO0FBQUEsTUFDSjtBQUNBLFVBQUksVUFBVSxPQUFRLElBQUksUUFBUSxVQUFVLElBQU0sTUFBSztBQUFBLElBQzNEO0FBQUEsSUFDQSxFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7QUFBQSxFQUNqQztBQUVBO0FBQUEsSUFDSSxDQUFDLFVBQVU7QUFDUCxVQUFJLFVBQVUsSUFBSyxzQkFBcUIsSUFBSTtBQUFBLElBQ2hEO0FBQUEsSUFDQSxFQUFFLE1BQU0sUUFBUSxjQUFjLG9CQUFvQixDQUFDLG9CQUFvQjtBQUFBLEVBQzNFO0FBR0E7QUFBQSxJQUNJLENBQUMsT0FBTyxRQUFRO0FBQ1osVUFBSSxJQUFJLFFBQVE7QUFDWixrQkFBVSxFQUFFO0FBQ1oscUJBQWEsS0FBSztBQUNsQjtBQUFBLE1BQ0o7QUFDQSxVQUFJLElBQUksVUFBVSxJQUFJLGFBQWEsSUFBSSxTQUFTO0FBQzVDLHFCQUFhLEtBQUs7QUFDbEI7QUFBQSxNQUNKO0FBQ0EsVUFBSSxJQUFJLGFBQWEsSUFBSSxRQUFRO0FBQzdCLGtCQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDL0I7QUFBQSxNQUNKO0FBQ0EsVUFBSSxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxRQUFRLE1BQU0sV0FBVyxLQUFLLFNBQVMsS0FBSztBQUN2RSxrQkFBVSxDQUFDLE1BQU0sSUFBSSxLQUFLO0FBQUEsTUFDOUI7QUFBQSxJQUNKO0FBQUEsSUFDQSxFQUFFLE1BQU0sV0FBVyxNQUFNLFlBQVk7QUFBQSxFQUN6QztBQUdBLGNBQVksV0FBVyxFQUFFLE1BQU0sUUFBUSxVQUFVLENBQUM7QUFDbEQsZUFBYTtBQUFBLElBQ1QsSUFBSTtBQUFBLElBQ0osUUFBUTtBQUFBLElBQ1IsTUFBTSxRQUFRO0FBQUEsSUFDZCxNQUFNO0FBQUEsSUFDTixVQUFVLENBQUMsT0FBTyxRQUFRO0FBQ3RCLFVBQUksVUFBVSxLQUFLO0FBQ2YsNEJBQW9CLElBQUk7QUFDeEI7QUFBQSxNQUNKO0FBQ0EsVUFBSSxJQUFJLFVBQVUsWUFBWSxnQkFBZ0I7QUFDMUMsbUJBQVcsRUFBRSxNQUFNLFdBQVcsVUFBVSxTQUFTLE9BQU8sQ0FBQztBQUN6RCxhQUFLO0FBQ0w7QUFBQSxNQUNKO0FBQ0EsVUFBSSxVQUFVLElBQUssV0FBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQUEsZUFDN0IsVUFBVSxJQUFLLG1CQUFrQixDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQUEsZUFDN0MsVUFBVSxJQUFLLGdCQUFlO0FBQUEsZUFDOUIsVUFBVSxJQUFLLGtCQUFpQjtBQUFBLElBQzdDO0FBQUEsRUFDSixDQUFDO0FBRUQsUUFBTSxnQkFBZ0IsY0FBYyxVQUFVO0FBQzlDLFFBQU0sZUFBZSxjQUFjLFNBQVM7QUFDNUMsUUFBTSxjQUNGLFFBQVEsYUFDRixnQkFDQSxRQUFRLFlBQ04sZUFDQSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFFdEMsTUFBSSxLQUFLLE9BQU8sWUFBWSxLQUFLLE9BQU8sVUFBVTtBQUM5QyxXQUNJLGdCQUFBTDtBQUFBLE1BQUNNO0FBQUEsTUFBQTtBQUFBLFFBQ0csT0FBTyxLQUFLO0FBQUEsUUFDWixRQUFRLEtBQUs7QUFBQSxRQUNiLFlBQVc7QUFBQSxRQUNYLGdCQUFlO0FBQUEsUUFDZixlQUFjO0FBQUEsUUFFZDtBQUFBLDBCQUFBUCxNQUFDUSxRQUFBLEVBQUssT0FBTyxNQUFNLE1BQU0sZ0NBQWtCO0FBQUEsVUFDM0MsZ0JBQUFQLE9BQUNPLFFBQUEsRUFBSyxPQUFPLE1BQU0sT0FBTztBQUFBO0FBQUEsWUFDUDtBQUFBLFlBQVM7QUFBQSxZQUFFO0FBQUEsWUFBUztBQUFBLFlBQUcsS0FBSztBQUFBLFlBQUs7QUFBQSxZQUFFLEtBQUs7QUFBQSxZQUFLO0FBQUEsYUFDaEU7QUFBQTtBQUFBO0FBQUEsSUFDSjtBQUFBLEVBRVI7QUFFQSxTQUNJLGdCQUFBUCxPQUFDTSxPQUFBLEVBQUksZUFBYyxVQUFTLE9BQU8sS0FBSyxNQUFNLFFBQVEsS0FBSyxNQUN2RDtBQUFBLG9CQUFBUDtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0c7QUFBQSxRQUNBLE9BQU87QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUE7QUFBQSxJQUNKO0FBQUEsSUFFQyxRQUFRLGFBQ0wsZ0JBQUFBLE1BQUNPLE9BQUEsRUFBSSxVQUFVLEdBQUcsZUFBYyxVQUM1QiwwQkFBQVA7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLFFBQVE7QUFBQSxRQUNSLFFBQVEsV0FBVyxRQUFRLFNBQVMsTUFBTSxJQUFJO0FBQUEsUUFDOUMsZUFDSSxXQUFXLHNCQUFzQixJQUFJLFNBQVMsTUFBTSxJQUFJO0FBQUEsUUFFNUQ7QUFBQSxRQUNBLFlBQVk7QUFBQSxRQUNaLFNBQU87QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUEsSUFDSixHQUNKO0FBQUEsSUFHSCxRQUFRLGNBQ0wsZ0JBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGFBQWE7QUFBQSxRQUNiO0FBQUEsUUFDQSxlQUFlLFNBQVM7QUFBQSxRQUN4QixjQUFjLFFBQVE7QUFBQSxRQUN0QjtBQUFBLFFBQ0EsZ0JBQWdCO0FBQUEsUUFDaEI7QUFBQSxRQUNBLGFBQWEsTUFDVCxRQUFRLENBQUMsUUFBUTtBQUNiLGdCQUFNLElBQUksYUFBYSxRQUFRLEdBQUc7QUFDbEMsaUJBQU8sY0FBYyxJQUFJLEtBQUssYUFBYSxNQUFNO0FBQUEsUUFDckQsQ0FBQztBQUFBLFFBRUw7QUFBQSxRQUNBO0FBQUEsUUFDQSxlQUFlLE1BQU0sYUFBYSxJQUFJO0FBQUEsUUFDdEMsaUJBQWlCLE1BQU0sT0FBTyxTQUFTO0FBQUEsUUFDdkMsa0JBQWtCLE1BQU07QUFDcEIsY0FDSSxzQkFDQSxTQUFTLFNBQVMsS0FDbEIsUUFBUSxNQUFNLFVBQVUsUUFDMUI7QUFDRSxvQkFBUSxZQUFZLG9CQUFvQixRQUFRO0FBQUEsVUFDcEQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxRQUNoQixjQUFjO0FBQUEsUUFDZDtBQUFBLFFBQ0Esc0JBQXNCO0FBQUE7QUFBQSxJQUMxQjtBQUFBLElBR0gsUUFBUSxNQUFNLFVBQVUsZ0JBQ3JCLGdCQUFBQTtBQUFBLE1BQUNPO0FBQUEsTUFBQTtBQUFBLFFBQ0csVUFBUztBQUFBLFFBQ1QsT0FBTyxLQUFLO0FBQUEsUUFDWixRQUFRLEtBQUs7QUFBQSxRQUNiLFlBQVc7QUFBQSxRQUNYLGdCQUFlO0FBQUEsUUFFZiwwQkFBQVA7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNHLGVBQWUsUUFBUSxNQUFNO0FBQUEsWUFDN0IsUUFBUSxRQUFRLE1BQU07QUFBQSxZQUN0QixXQUFXLENBQUMsU0FBUyxRQUFRLE1BQU0sSUFBSTtBQUFBLFlBQ3ZDLFVBQVUsTUFBTSxRQUFRLGNBQWM7QUFBQTtBQUFBLFFBQzFDO0FBQUE7QUFBQSxJQUNKO0FBQUEsSUFHSCxvQkFDRyxnQkFBQUE7QUFBQSxNQUFDTztBQUFBLE1BQUE7QUFBQSxRQUNHLFVBQVM7QUFBQSxRQUNULE9BQU8sS0FBSztBQUFBLFFBQ1osUUFBUSxLQUFLO0FBQUEsUUFDYixZQUFXO0FBQUEsUUFDWCxnQkFBZTtBQUFBLFFBRWYsMEJBQUFQO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDRyxPQUFNO0FBQUEsWUFDTjtBQUFBLFlBQ0EsVUFBVSxDQUFDLE1BQU07QUFDYiw0QkFBYyxFQUFFLE1BQU07QUFDdEIsa0NBQW9CLEtBQUs7QUFBQSxZQUM3QjtBQUFBLFlBQ0EsVUFBVSxNQUFNLG9CQUFvQixLQUFLO0FBQUE7QUFBQSxRQUM3QztBQUFBO0FBQUEsSUFDSjtBQUFBLElBR0gscUJBQ0csZ0JBQUFBO0FBQUEsTUFBQ087QUFBQSxNQUFBO0FBQUEsUUFDRyxVQUFTO0FBQUEsUUFDVCxPQUFPLEtBQUs7QUFBQSxRQUNaLFFBQVEsS0FBSztBQUFBLFFBQ2IsWUFBVztBQUFBLFFBQ1gsZ0JBQWU7QUFBQSxRQUVmLDBCQUFBUDtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0csVUFBVTtBQUFBLFlBQ1YsUUFBUTtBQUFBLFlBQ1IsVUFBVSxDQUFDLFNBQVM7QUFDaEIsbUNBQXFCLEtBQUs7QUFDMUIseUJBQVcsRUFBRSxNQUFNLFdBQVcsS0FBSyxDQUFDO0FBQ3BDLG1CQUFLO0FBQUEsWUFDVDtBQUFBLFlBQ0EsVUFBVSxNQUFNLHFCQUFxQixLQUFLO0FBQUE7QUFBQSxRQUM5QztBQUFBO0FBQUEsSUFDSjtBQUFBLElBR0gsUUFBUSxZQUFZLGdCQUFBQSxNQUFDLGFBQVUsUUFBZ0I7QUFBQSxJQUUvQyxRQUFRLFlBQVksZ0JBQUFBLE1BQUMsYUFBVSxRQUFnQjtBQUFBLElBRS9DLFFBQVEsZUFDTCxnQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHO0FBQUEsUUFDQSxTQUFTLFFBQVE7QUFBQSxRQUNqQixxQkFBcUI7QUFBQTtBQUFBLElBQ3pCO0FBQUEsSUFHSixnQkFBQUEsTUFBQyxVQUFPLE9BQU8sYUFBYSxPQUFNLHdCQUFvQjtBQUFBLEtBQzFEO0FBRVI7OztBRHpkQTtBQUFBLEVBQ0ksY0FBQVM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNHO0FBQ1AsU0FBUyw4QkFBOEI7QUF5Q3ZCLGdCQUFBQyxhQUFBO0FBdkNoQixJQUFNLG1CQUFtQjtBQUN6QixJQUFNLG1CQUFtQjtBQUN6QixJQUFNLGNBQWM7QUFDcEIsSUFBTSxjQUFjO0FBR3BCLElBQU0sZUFBZTtBQUVyQixlQUFzQixNQUFNO0FBQ3hCLE1BQUksU0FBU0QsWUFBVztBQUN4QixNQUFJLFNBQVMsUUFBUSxVQUFVO0FBQy9CLE1BQUksVUFBVSxpQkFBaUI7QUFDL0IsTUFBSSxXQUFXLGFBQWE7QUFFNUIsTUFBSSxrQkFBa0I7QUFDdEIsUUFBTSxXQUFXLE1BQU07QUFDbkIsUUFBSSxnQkFBaUI7QUFDckIsWUFBUSxPQUFPLE1BQU0sbUJBQW1CLFdBQVc7QUFDbkQsc0JBQWtCO0FBQUEsRUFDdEI7QUFDQSxRQUFNLFdBQVcsTUFBTTtBQUNuQixRQUFJLENBQUMsZ0JBQWlCO0FBQ3RCLFlBQVEsT0FBTyxNQUFNLGNBQWMsZ0JBQWdCO0FBQ25ELHNCQUFrQjtBQUFBLEVBQ3RCO0FBSUEsUUFBTSxTQUFTLE1BQU0sU0FBUztBQUM5QixVQUFRLEdBQUcsUUFBUSxNQUFNO0FBQ3pCLFVBQVEsR0FBRyxVQUFVLE1BQU07QUFDM0IsVUFBUSxHQUFHLFdBQVcsTUFBTTtBQUM1QixVQUFRLEdBQUcscUJBQXFCLE1BQU07QUFFdEMsTUFBSTtBQUNBLFdBQU8sTUFBTTtBQUNULFVBQUksU0FBUztBQUNiLGVBQVM7QUFDVCxZQUFNLFdBQVc7QUFBQSxRQUNiLGdCQUFBQztBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0c7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EsVUFBVSxDQUFDLE1BQU8sU0FBUztBQUFBO0FBQUEsUUFDL0I7QUFBQSxRQUNBLEVBQUUsYUFBYSxLQUFLO0FBQUEsTUFDeEI7QUFDQSxZQUFNLFNBQVMsY0FBYztBQUU3QixVQUFJLFFBQVEsU0FBUyxXQUFXO0FBQzVCLGlCQUFTO0FBQ1QsZ0JBQVEsT0FBTyxNQUFNLFlBQVk7QUFDakMsWUFBSTtBQUNBLGdCQUFNLHVCQUF1QixPQUFPLFFBQVE7QUFBQSxRQUNoRCxTQUFTLEtBQUs7QUFDVixrQkFBUSxPQUFPLE1BQU07QUFBQSxpQkFBb0IsSUFBSSxXQUFXLEdBQUc7QUFBQSxDQUFJO0FBQy9ELGdCQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUFBLFFBQ2hEO0FBQ0EsZ0JBQVEsT0FBTyxNQUFNLFlBQVk7QUFDakM7QUFBQSxNQUNKO0FBQ0EsVUFBSSxRQUFRLFNBQVMsV0FBVztBQUM1Qix5QkFBaUIsT0FBTyxJQUFJO0FBQzVCLGlCQUFTRCxZQUFXO0FBQ3BCLGlCQUFTLFFBQVEsVUFBVTtBQUMzQixrQkFBVSxpQkFBaUI7QUFDM0IsbUJBQVcsYUFBYTtBQUN4QixnQkFBUSxPQUFPLE1BQU0sWUFBWTtBQUNqQztBQUFBLE1BQ0o7QUFDQTtBQUFBLElBQ0o7QUFBQSxFQUNKLFVBQUU7QUFDRSxhQUFTO0FBQ1QsWUFBUSxJQUFJLFFBQVEsTUFBTTtBQUMxQixZQUFRLElBQUksVUFBVSxNQUFNO0FBQzVCLFlBQVEsSUFBSSxXQUFXLE1BQU07QUFDN0IsWUFBUSxJQUFJLHFCQUFxQixNQUFNO0FBQUEsRUFDM0M7QUFDSjsiLAogICJuYW1lcyI6IFsiUmVhY3QiLCAiUmVhY3QiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAidXNlU3Rkb3V0IiwgIlJlYWN0IiwgIkJveCIsICJUZXh0IiwgImpzeCIsICJqc3hzIiwgIlRleHQiLCAiQm94IiwgIlJlYWN0IiwgIkJveCIsICJUZXh0IiwgIlJlYWN0IiwgIkJveCIsICJUZXh0IiwgImpzeCIsICJqc3hzIiwgIkJveCIsICJUZXh0IiwgIlJlYWN0IiwgIlRleHQiLCAianN4IiwgImpzeHMiLCAiVGV4dCIsICJqc3giLCAianN4cyIsICJUZXh0IiwgIkJveCIsICJSZWFjdCIsICJ1c2VFZmZlY3QiLCAidXNlTWVtbyIsICJ1c2VSZWYiLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAidXNlU3Rkb3V0IiwgInVzZUVmZmVjdCIsICJqc3giLCAianN4cyIsICJ1c2VSZWYiLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgImZtdFVwIiwgIkJveCIsICJUZXh0IiwgInVzZU1lbW8iLCAidXNlU3Rkb3V0IiwgIlJlYWN0IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAiUmVhY3QiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZU1lbW8iLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgInVzZUlucHV0IiwgImpzeCIsICJqc3hzIiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAiUmVhY3QiLCAidXNlRWZmZWN0IiwgInVzZU1lbW8iLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgIkJveCIsICJUZXh0IiwgInVzZVN0ZG91dCIsICJBTEFSTV9TRVZFUklUWSIsICJGcmFnbWVudCIsICJqc3giLCAianN4cyIsICJCb3giLCAiVGV4dCIsICJBTEFSTV9TRVZFUklUWSIsICJqc3hzIiwgIkJveCIsICJqc3giLCAiVGV4dCIsICJGcmFnbWVudCIsICJtZXRyaWNLZXkiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgIk1ldHJpY1JvdyIsICJ1c2VTdGRvdXQiLCAiQUxBUk1fU0VWRVJJVFkiLCAiY291bnRzIiwgIlJlYWN0IiwgInVzZU1lbW8iLCAiQm94IiwgIlRleHQiLCAiQUxBUk1fU0VWRVJJVFkiLCAiQUxBUk1fU1RBVEUiLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAiZHVyYXRpb25MYWJlbCIsICJhY3RpdmF0aW9uTXMiLCAiSGVhZGVyQ2VsbCIsICJCb3giLCAiVGV4dCIsICJ1c2VNZW1vIiwgIlJlYWN0IiwgInVzZU1lbW8iLCAiQm94IiwgIlRleHQiLCAianN4IiwgImpzeHMiLCAiQm94IiwgIlRleHQiLCAidXNlTWVtbyIsICJSZWFjdCIsICJ1c2VFZmZlY3QiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJ1c2VTdGRvdXQiLCAiUmVhY3QiLCAidXNlRWZmZWN0IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAiQm94IiwgIlRleHQiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJ1c2VFZmZlY3QiLCAidXNlSW5wdXQiLCAiUmVhY3QiLCAiQm94IiwgIlRleHQiLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAiVGV4dCIsICJCb3giLCAiUmVhY3QiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJUZXh0IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAidXNlSW5wdXQiLCAiQm94IiwgIlJlYWN0IiwgIkJveCIsICJUZXh0IiwgInVzZUlucHV0IiwgImpzeCIsICJqc3hzIiwgInVzZUlucHV0IiwgIkJveCIsICJUZXh0IiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VSZWYiLCAidXNlU3RhdGUiLCAiZGVidWdMb2ciLCAidXNlQ2FsbGJhY2siLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgIkZyYWdtZW50IiwgImpzeCIsICJqc3hzIiwgIlRleHQiLCAiQm94IiwgInVzZVN0ZG91dCIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgInJ1biIsICJ1c2VFZmZlY3QiLCAidXNlSW5wdXQiLCAiUmVhY3QiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJCb3giLCAiVGV4dCIsICJqc3giLCAianN4cyIsICJQQUdFIiwgIkhJTlQiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJCb3giLCAiVGV4dCIsICJ1c2VFZmZlY3QiLCAidXNlU3RhdGUiLCAiZGVidWdDb3VudCIsICJkZWJ1Z0xvZyIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgImRlYnVnTG9nIiwgInVzZUVmZmVjdCIsICJ1c2VSZWYiLCAidXNlU3RhdGUiLCAiQUxBUk1fU1RBVEUiLCAiZXZlbnRTdHJlYW0iLCAiZGVidWdMb2ciLCAidXNlRWZmZWN0IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAiZGVidWdMb2ciLCAidXNlRWZmZWN0IiwgInVzZVN0YXRlIiwgImRlYnVnTG9nIiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgImRlYnVnQ291bnQiLCAiZGVidWdMb2ciLCAiZXZlbnRTdHJlYW0iLCAiSElTVE9SWV9MRU4iLCAidXNlRWZmZWN0IiwgInVzZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZVJlZiIsICJ1c2VTdGF0ZSIsICJSZWFjdCIsICJ1c2VTdGF0ZSIsICJCb3giLCAiVGV4dCIsICJqc3giLCAianN4cyIsICJNSU5fQkFUQ0giLCAiTUFYX0JBVENIIiwgIkhJTlQiLCAidXNlU3RhdGUiLCAiVGV4dCIsICJCb3giLCAianN4IiwgImpzeHMiLCAidXNlU3Rkb3V0IiwgInVzZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgIkJveCIsICJUZXh0IiwgInJlYWRDb25maWciLCAianN4Il0KfQo=
|
|
5644
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2Rhc2hib2FyZC9pbmRleC5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9BcHAuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvdGhlbWUuanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0hlYWRlci5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0Zvb3Rlci5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0RldmljZXNQYW5lbC5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL1BhbmVsLmpzeCIsICIuLi9zcmMvZGFzaGJvYXJkL2NvbXBvbmVudHMvU3BhcmtsaW5lLmpzeCIsICIuLi9zcmMvZGFzaGJvYXJkL2xpYi9zdGF0dXMuanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0RldmljZURldGFpbFBhbmVsLmpzeCIsICIuLi9zcmMvZGFzaGJvYXJkL2hvb2tzL3VzZUxvZ3MuanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0RldmljZVBpY2tlck1vZGFsLmpzeCIsICIuLi9zcmMvZGFzaGJvYXJkL2xpYi9mb2N1cy5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2NvbXBvbmVudHMvT3ZlcnZpZXdUYWIuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9BbGVydHNUYWIuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9FdmVudHNUYWIuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9QbGF5Ym9va3NUYWIuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9QbGF5Ym9va1J1blZpZXcuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9QbGF5Ym9va1JlcG9ydFZpZXcuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9QbGF5Ym9va1ZhcnNNb2RhbC5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9jb21wb25lbnRzL0NvbmZpcm1Nb2RhbC5qc3giLCAiLi4vc3JjL2Rhc2hib2FyZC9ob29rcy91c2VQcm9kdWN0UGxheWJvb2tzLmpzIiwgIi4uL3NyYy9kYXNoYm9hcmQvaG9va3MvdXNlUGxheWJvb2tSdW5Db250cm9sbGVyLmpzIiwgIi4uL3NyYy9kYXNoYm9hcmQvY29tcG9uZW50cy9Qcm9maWxlUGlja2VyTW9kYWwuanN4IiwgIi4uL3NyYy9kYXNoYm9hcmQvaG9va3MvdXNlRGV2aWNlcy5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2hvb2tzL3VzZUZsZWV0TW9uaXRvcmluZ1N0cmVhbS5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2hvb2tzL3VzZUZsZWV0QWxhcm1zLmpzIiwgIi4uL3NyYy9kYXNoYm9hcmQvaG9va3MvdXNlRmxlZXRQcm9kdWN0cy5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2hvb2tzL3VzZVByb2R1Y3RMb2dTb3VyY2VzLmpzIiwgIi4uL3NyYy9kYXNoYm9hcmQvaG9va3MvdXNlUHJvZHVjdE1ldHJpY3MuanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9ob29rcy91c2VMYXRlc3RBZ2VudFZlcnNpb24uanMiLCAiLi4vc3JjL2Rhc2hib2FyZC9ob29rcy91c2VVcGdyYWRlQ29udHJvbGxlci5qcyIsICIuLi9zcmMvZGFzaGJvYXJkL2NvbXBvbmVudHMvVXBncmFkZU1vZGFsLmpzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyBBcHAgfSBmcm9tICcuL0FwcC5qc3gnO1xuaW1wb3J0IHtcbiAgICByZWFkQ29uZmlnLFxuICAgIGxpc3RQcm9maWxlcyxcbiAgICBnZXRBY3RpdmVQcm9maWxlLFxuICAgIHNldEFjdGl2ZVByb2ZpbGUsXG59IGZyb20gJ0B0aGluZ2VyLWlvL2NsaS1jb3JlL2NvbmZpZyc7XG5pbXBvcnQgeyBjb25uZWN0VG9EZXZpY2VDb25zb2xlIH0gZnJvbSAnLi4vLi4vbGliL2NvbnNvbGUuanMnO1xuXG5jb25zdCBFTlRFUl9BTFRfU0NSRUVOID0gJ1xceDFiWz8xMDQ5aCc7XG5jb25zdCBMRUFWRV9BTFRfU0NSRUVOID0gJ1xceDFiWz8xMDQ5bCc7XG5jb25zdCBISURFX0NVUlNPUiA9ICdcXHgxYls/MjVsJztcbmNvbnN0IFNIT1dfQ1VSU09SID0gJ1xceDFiWz8yNWgnO1xuLy8gQ2xlYXIgc2NyZWVuICsgc2Nyb2xsYmFjayArIGhvbWU6IHN0YXJ0cyB0aGUgY29uc29sZSBzZXNzaW9uIG9uIGFuXG4vLyBlbXB0eSBjYW52YXMgc28gYmFubmVycyBmcm9tIHByZXZpb3VzIHNlc3Npb25zIGRvbid0IHBpbGUgdXAuXG5jb25zdCBDTEVBUl9TQ1JFRU4gPSAnXFx4MWJbMkpcXHgxYlszSlxceDFiW0gnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuKCkge1xuICAgIGxldCBjb25maWcgPSByZWFkQ29uZmlnKCk7XG4gICAgbGV0IHNlcnZlciA9IGNvbmZpZz8uc2VydmVyIHx8IG51bGw7XG4gICAgbGV0IHByb2ZpbGUgPSBnZXRBY3RpdmVQcm9maWxlKCk7XG4gICAgbGV0IHByb2ZpbGVzID0gbGlzdFByb2ZpbGVzKCk7XG5cbiAgICBsZXQgYWx0U2NyZWVuQWN0aXZlID0gZmFsc2U7XG4gICAgY29uc3QgZW50ZXJBbHQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChhbHRTY3JlZW5BY3RpdmUpIHJldHVybjtcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoRU5URVJfQUxUX1NDUkVFTiArIEhJREVfQ1VSU09SKTtcbiAgICAgICAgYWx0U2NyZWVuQWN0aXZlID0gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGxlYXZlQWx0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWFsdFNjcmVlbkFjdGl2ZSkgcmV0dXJuO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShTSE9XX0NVUlNPUiArIExFQVZFX0FMVF9TQ1JFRU4pO1xuICAgICAgICBhbHRTY3JlZW5BY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgLy8gQmVsdCBhbmQgYnJhY2VzOiByZXN0b3JlIG9uIGV2ZXJ5IHdheSB0aGUgcHJvY2VzcyBjYW4gZXhpdCwgc28gdGhlXG4gICAgLy8gdXNlciBuZXZlciBlbmRzIHVwIHdpdGggYSBibGFuayB0ZXJtaW5hbCBpZiBzb21ldGhpbmcgZ29lcyBzaWRld2F5cy5cbiAgICBjb25zdCBvbkV4aXQgPSAoKSA9PiBsZWF2ZUFsdCgpO1xuICAgIHByb2Nlc3Mub24oJ2V4aXQnLCBvbkV4aXQpO1xuICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIG9uRXhpdCk7XG4gICAgcHJvY2Vzcy5vbignU0lHVEVSTScsIG9uRXhpdCk7XG4gICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBvbkV4aXQpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCBhY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgZW50ZXJBbHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gcmVuZGVyKFxuICAgICAgICAgICAgICAgIDxBcHBcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyPXtzZXJ2ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHByb2ZpbGU9e3Byb2ZpbGV9XG4gICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzPXtwcm9maWxlc31cbiAgICAgICAgICAgICAgICAgICAgb25BY3Rpb249eyhhKSA9PiAoYWN0aW9uID0gYSl9XG4gICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgeyBleGl0T25DdHJsQzogdHJ1ZSB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IGluc3RhbmNlLndhaXRVbnRpbEV4aXQoKTtcblxuICAgICAgICAgICAgaWYgKGFjdGlvbj8udHlwZSA9PT0gJ2NvbnNvbGUnKSB7XG4gICAgICAgICAgICAgICAgbGVhdmVBbHQoKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShDTEVBUl9TQ1JFRU4pO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3RUb0RldmljZUNvbnNvbGUoYWN0aW9uLmRldmljZUlkKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFxcbkNvbnNvbGUgZXJyb3I6ICR7ZXJyLm1lc3NhZ2UgfHwgZXJyfVxcbmApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxNTAwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKENMRUFSX1NDUkVFTik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uPy50eXBlID09PSAncHJvZmlsZScpIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVQcm9maWxlKGFjdGlvbi5uYW1lKTtcbiAgICAgICAgICAgICAgICBjb25maWcgPSByZWFkQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgc2VydmVyID0gY29uZmlnPy5zZXJ2ZXIgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBwcm9maWxlID0gZ2V0QWN0aXZlUHJvZmlsZSgpO1xuICAgICAgICAgICAgICAgIHByb2ZpbGVzID0gbGlzdFByb2ZpbGVzKCk7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoQ0xFQVJfU0NSRUVOKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbGVhdmVBbHQoKTtcbiAgICAgICAgcHJvY2Vzcy5vZmYoJ2V4aXQnLCBvbkV4aXQpO1xuICAgICAgICBwcm9jZXNzLm9mZignU0lHSU5UJywgb25FeGl0KTtcbiAgICAgICAgcHJvY2Vzcy5vZmYoJ1NJR1RFUk0nLCBvbkV4aXQpO1xuICAgICAgICBwcm9jZXNzLm9mZigndW5jYXVnaHRFeGNlcHRpb24nLCBvbkV4aXQpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZUFwcCwgdXNlU3Rkb3V0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi90aGVtZS5qcyc7XG5pbXBvcnQgeyBIZWFkZXIsIFRBQlMgfSBmcm9tICcuL2NvbXBvbmVudHMvSGVhZGVyLmpzeCc7XG5pbXBvcnQgeyBGb290ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvRm9vdGVyLmpzeCc7XG5pbXBvcnQgeyBTT1JUX09QVElPTlMgfSBmcm9tICcuL2NvbXBvbmVudHMvRGV2aWNlc1BhbmVsLmpzeCc7XG5pbXBvcnQgeyBEZXZpY2VEZXRhaWxQYW5lbCB9IGZyb20gJy4vY29tcG9uZW50cy9EZXZpY2VEZXRhaWxQYW5lbC5qc3gnO1xuaW1wb3J0IHsgRGV2aWNlUGlja2VyTW9kYWwgfSBmcm9tICcuL2NvbXBvbmVudHMvRGV2aWNlUGlja2VyTW9kYWwuanN4JztcbmltcG9ydCB7IE92ZXJ2aWV3VGFiIH0gZnJvbSAnLi9jb21wb25lbnRzL092ZXJ2aWV3VGFiLmpzeCc7XG5pbXBvcnQgeyBBbGVydHNUYWIgfSBmcm9tICcuL2NvbXBvbmVudHMvQWxlcnRzVGFiLmpzeCc7XG5pbXBvcnQgeyBFdmVudHNUYWIgfSBmcm9tICcuL2NvbXBvbmVudHMvRXZlbnRzVGFiLmpzeCc7XG5pbXBvcnQgeyBQbGF5Ym9va3NUYWIgfSBmcm9tICcuL2NvbXBvbmVudHMvUGxheWJvb2tzVGFiLmpzeCc7XG5pbXBvcnQgeyBQcm9maWxlUGlja2VyTW9kYWwgfSBmcm9tICcuL2NvbXBvbmVudHMvUHJvZmlsZVBpY2tlck1vZGFsLmpzeCc7XG5pbXBvcnQgeyB1c2VEZXZpY2VzIH0gZnJvbSAnLi9ob29rcy91c2VEZXZpY2VzLmpzJztcbmltcG9ydCB7IHVzZUZsZWV0TW9uaXRvcmluZ1N0cmVhbSB9IGZyb20gJy4vaG9va3MvdXNlRmxlZXRNb25pdG9yaW5nU3RyZWFtLmpzJztcbmltcG9ydCB7IHVzZUZsZWV0QWxhcm1zIH0gZnJvbSAnLi9ob29rcy91c2VGbGVldEFsYXJtcy5qcyc7XG5pbXBvcnQgeyB1c2VGbGVldFByb2R1Y3RzIH0gZnJvbSAnLi9ob29rcy91c2VGbGVldFByb2R1Y3RzLmpzJztcbmltcG9ydCB7IHVzZVByb2R1Y3RMb2dTb3VyY2VzIH0gZnJvbSAnLi9ob29rcy91c2VQcm9kdWN0TG9nU291cmNlcy5qcyc7XG5pbXBvcnQgeyB1c2VQcm9kdWN0TWV0cmljcyB9IGZyb20gJy4vaG9va3MvdXNlUHJvZHVjdE1ldHJpY3MuanMnO1xuaW1wb3J0IHsgdXNlTGF0ZXN0QWdlbnRWZXJzaW9uIH0gZnJvbSAnLi9ob29rcy91c2VMYXRlc3RBZ2VudFZlcnNpb24uanMnO1xuaW1wb3J0IHsgdXNlVXBncmFkZUNvbnRyb2xsZXIgfSBmcm9tICcuL2hvb2tzL3VzZVVwZ3JhZGVDb250cm9sbGVyLmpzJztcbmltcG9ydCB7IFVwZ3JhZGVNb2RhbCB9IGZyb20gJy4vY29tcG9uZW50cy9VcGdyYWRlTW9kYWwuanN4JztcbmltcG9ydCB7IGZsZWV0Q291bnRzLCBtYXhTZXZlcml0eUJ5RGV2aWNlLCBvdXRkYXRlZERldmljZXMgfSBmcm9tICcuL2xpYi9zdGF0dXMuanMnO1xuaW1wb3J0IHtcbiAgICBGb2N1c1Byb3ZpZGVyLFxuICAgIHVzZUZvY3VzYWJsZSxcbiAgICB1c2VGb2N1c0hpbnRzLFxuICAgIHVzZUdsb2JhbEtleXMsXG4gICAgdXNlTW9kYWwsXG4gICAgdXNlVGFiQ3ljbGUsXG59IGZyb20gJy4vbGliL2ZvY3VzLmpzJztcblxuY29uc3QgTUlOX0NPTFMgPSA5MDtcbmNvbnN0IE1JTl9ST1dTID0gMTg7XG5cbi8vIEhpbnRzIHRoYXQgZG9uJ3QgYmVsb25nIHRvIGEgc2luZ2xlIHBhbmVsIHdpdGhpbiBhIHRhYi4gUGVyLXBhbmVsIGhpbnRzXG4vLyBsaXZlIHdpdGggdGhlIHBhbmVsIHZpYSB1c2VGb2N1c2FibGUsIHNvIHRoaXMgbWFwIG9ubHkgbmVlZHMgdG8gY292ZXJcbi8vIGluZm8tb25seSB0YWJzIGFuZCB0aGUgZ2xvYmFsIGJhc2VsaW5lLlxuY29uc3QgU1RBVElDX1RBQl9ISU5UUyA9IHtcbiAgICBhbGVydHM6IFtcbiAgICAgICAgeyBrOiAnMS01JywgbGFiZWw6ICd0YWJzJyB9LFxuICAgICAgICB7IGs6ICdxJywgbGFiZWw6ICdxdWl0JyB9LFxuICAgIF0sXG4gICAgZXZlbnRzOiBbXG4gICAgICAgIHsgazogJzEtNScsIGxhYmVsOiAndGFicycgfSxcbiAgICAgICAgeyBrOiAncScsIGxhYmVsOiAncXVpdCcgfSxcbiAgICBdLFxuICAgIHBsYXlib29rczogW1xuICAgICAgICB7IGs6ICcxLTUnLCBsYWJlbDogJ3RhYnMnIH0sXG4gICAgICAgIHsgazogJ1x1MjE5MVx1MjE5MycsIGxhYmVsOiAnbmF2JyB9LFxuICAgICAgICB7IGs6ICd0YWInLCBsYWJlbDogJ3BhbmVsJyB9LFxuICAgICAgICB7IGs6ICd0JywgbGFiZWw6ICd0ZXN0JyB9LFxuICAgICAgICB7IGs6ICdhJywgbGFiZWw6ICdhcHBseScgfSxcbiAgICAgICAgeyBrOiAneCcsIGxhYmVsOiAnZGVsZXRlJyB9LFxuICAgICAgICB7IGs6ICdyJywgbGFiZWw6ICdyZWZyZXNoJyB9LFxuICAgICAgICB7IGs6ICdwJywgbGFiZWw6ICdwcm9kdWN0JyB9LFxuICAgICAgICB7IGs6ICdxJywgbGFiZWw6ICdxdWl0JyB9LFxuICAgIF0sXG59O1xuXG5jb25zdCBGSUxURVJfSElOVCA9IFtcbiAgICB7IGs6ICdlbnRlcicsIGxhYmVsOiAnYXBwbHknIH0sXG4gICAgeyBrOiAnZXNjJywgbGFiZWw6ICdjYW5jZWwnIH0sXG5dO1xuXG5jb25zdCBERVZJQ0VTX0RFVEFJTF9ISU5UX0JBU0UgPSBbXG4gICAgeyBrOiAnMS01JywgbGFiZWw6ICd0YWJzJyB9LFxuICAgIHsgazogJy8nLCBsYWJlbDogJ3N3aXRjaCcgfSxcbiAgICB7IGs6ICdwJywgbGFiZWw6ICdwYXVzZScgfSxcbiAgICB7IGs6ICdjJywgbGFiZWw6ICdjbGVhcicgfSxcbl07XG5jb25zdCBERVZJQ0VTX0RFVEFJTF9ISU5UX1RBSUwgPSBbXG4gICAgeyBrOiAnZW50ZXInLCBsYWJlbDogJ2NvbnNvbGUnIH0sXG4gICAgeyBrOiAncScsIGxhYmVsOiAncXVpdCcgfSxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBBcHAoeyBzZXJ2ZXIsIHByb2ZpbGUsIHByb2ZpbGVzLCBvbkFjdGlvbiB9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEZvY3VzUHJvdmlkZXI+XG4gICAgICAgICAgICA8QXBwSW5uZXJcbiAgICAgICAgICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgICAgICAgICBwcm9maWxlPXtwcm9maWxlfVxuICAgICAgICAgICAgICAgIHByb2ZpbGVzPXtwcm9maWxlc31cbiAgICAgICAgICAgICAgICBvbkFjdGlvbj17b25BY3Rpb259XG4gICAgICAgICAgICAvPlxuICAgICAgICA8L0ZvY3VzUHJvdmlkZXI+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gQXBwSW5uZXIoeyBzZXJ2ZXIsIHByb2ZpbGUsIHByb2ZpbGVzLCBvbkFjdGlvbiB9KSB7XG4gICAgY29uc3QgeyBleGl0IH0gPSB1c2VBcHAoKTtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gdXNlU3Rkb3V0KCk7XG4gICAgY29uc3QgW3RhYiwgc2V0VGFiXSA9IHVzZVN0YXRlKCdvdmVydmlldycpO1xuICAgIGNvbnN0IFtzZWxlY3RlZElkLCBzZXRTZWxlY3RlZElkXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtzb3J0LCBzZXRTb3J0XSA9IHVzZVN0YXRlKCdzdGF0dXMnKTtcbiAgICBjb25zdCBbZmlsdGVyLCBzZXRGaWx0ZXJdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtmaWx0ZXJpbmcsIHNldEZpbHRlcmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3BhdXNlZCwgc2V0UGF1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICAvLyBBY3RpdmUgZGlzdHJpYnV0aW9uLWJ1Y2tldCBmaWx0ZXIgb24gdGhlIGRldmljZXMgbGlzdC4gT3duZWQgYXRcbiAgICAvLyB0aGUgQXBwIGxldmVsIHNvIHRoZSBwYW5lbCB0aGF0IGVtaXRzIGl0IChhIGZvY3VzYWJsZSBpblxuICAgIC8vIE92ZXJ2aWV3VGFiKSBhbmQgdGhlIHBhbmVsIHRoYXQgY29uc3VtZXMgaXQgKERldmljZXNQYW5lbCkgZG9uJ3RcbiAgICAvLyBuZWVkIHRvIHNoYXJlIGEgc2libGluZyByZWZlcmVuY2UuXG4gICAgY29uc3QgW21ldHJpY0ZpbHRlciwgc2V0TWV0cmljRmlsdGVyXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IGhhbmRsZU1ldHJpY0ZpbHRlckNoYW5nZSA9IHVzZUNhbGxiYWNrKChwYXlsb2FkLCBjbGVhcmVkS2V5KSA9PiB7XG4gICAgICAgIGlmIChwYXlsb2FkID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBBIHBhbmVsIHNpZ25hbGVkIGl0IHN0b3BwZWQgb3duaW5nIHRoZSBmaWx0ZXIuIE9ubHkgY2xlYXJcbiAgICAgICAgICAgIC8vIGlmIHdlIHN0aWxsIGhvbGQgaXRzIGJ1Y2tldCBcdTIwMTQgYSBzaWJsaW5nIG1heSBoYXZlIGFscmVhZHlcbiAgICAgICAgICAgIC8vIHRha2VuIG92ZXIgYW5kIHdlIGRvbid0IHdhbnQgdG8gd2lwZSB0aGVpciBzZWxlY3Rpb24uXG4gICAgICAgICAgICBzZXRNZXRyaWNGaWx0ZXIoKGN1cikgPT5cbiAgICAgICAgICAgICAgICBjdXIgJiYgY3VyLm1ldHJpY0tleSA9PT0gY2xlYXJlZEtleSA/IG51bGwgOiBjdXIsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldE1ldHJpY0ZpbHRlcihwYXlsb2FkKTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgW2xvZ3NDbGVhclRva2VuLCBzZXRMb2dzQ2xlYXJUb2tlbl0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbcGxheWJvb2tNb2RhbEFjdGl2ZSwgc2V0UGxheWJvb2tNb2RhbEFjdGl2ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2RldmljZVBpY2tlck9wZW4sIHNldERldmljZVBpY2tlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtwcm9maWxlUGlja2VyT3Blbiwgc2V0UHJvZmlsZVBpY2tlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHByb2ZpbGVMaXN0ID0gcHJvZmlsZXMgfHwgW107XG4gICAgY29uc3QgbXVsdGlwbGVQcm9maWxlcyA9IHByb2ZpbGVMaXN0Lmxlbmd0aCA+IDE7XG4gICAgY29uc3QgW3NpemUsIHNldFNpemVdID0gdXNlU3RhdGUoKCkgPT4gKHtcbiAgICAgICAgY29sczogc3Rkb3V0Py5jb2x1bW5zID8/IDgwLFxuICAgICAgICByb3dzOiBzdGRvdXQ/LnJvd3MgPz8gMjQsXG4gICAgfSkpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFzdGRvdXQpIHJldHVybjtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gKCkgPT5cbiAgICAgICAgICAgIHNldFNpemUoeyBjb2xzOiBzdGRvdXQuY29sdW1ucywgcm93czogc3Rkb3V0LnJvd3MgfSk7XG4gICAgICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KHVwZGF0ZSwgMzApO1xuICAgICAgICBzdGRvdXQub24oJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodCk7XG4gICAgICAgICAgICBzdGRvdXQub2ZmKCdyZXNpemUnLCB1cGRhdGUpO1xuICAgICAgICB9O1xuICAgIH0sIFtzdGRvdXRdKTtcblxuICAgIGNvbnN0IHsgZGV2aWNlcywgbG9hZGluZywgZXJyb3IgfSA9IHVzZURldmljZXMoKTtcbiAgICBjb25zdCB7IHNhbXBsZXMsIGhpc3RvcnksIGNwdUhpc3RvcnksIGV2ZW50cywgcHVzaEV2ZW50IH0gPSB1c2VGbGVldE1vbml0b3JpbmdTdHJlYW0oZGV2aWNlcyk7XG4gICAgY29uc3QgYWxhcm1zID0gdXNlRmxlZXRBbGFybXMoKTtcbiAgICBjb25zdCBmbGVldFByb2R1Y3RJZHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGQgb2YgZGV2aWNlcykge1xuICAgICAgICAgICAgaWYgKGQ/LnByb2R1Y3QpIHNldC5hZGQoZC5wcm9kdWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLnNldF07XG4gICAgfSwgW2RldmljZXNdKTtcbiAgICBjb25zdCBmbGVldFByb2R1Y3RzID0gdXNlRmxlZXRQcm9kdWN0cyhmbGVldFByb2R1Y3RJZHMpO1xuICAgIGNvbnN0IHByb2R1Y3RNZXRyaWNzID0gdXNlUHJvZHVjdE1ldHJpY3MoZmxlZXRQcm9kdWN0SWRzKTtcbiAgICBjb25zdCB7IGxhdGVzdDogbGF0ZXN0QWdlbnRWZXJzaW9uIH0gPSB1c2VMYXRlc3RBZ2VudFZlcnNpb24oKTtcbiAgICBjb25zdCB1cGdyYWRlID0gdXNlVXBncmFkZUNvbnRyb2xsZXIoeyBvbkV2ZW50OiBwdXNoRXZlbnQgfSk7XG4gICAgY29uc3QgYWxhcm1TZXZlcml0eUJ5RGV2aWNlID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gbWF4U2V2ZXJpdHlCeURldmljZShhbGFybXMuaW5zdGFuY2VzLCBkZXZpY2VzKSxcbiAgICAgICAgW2FsYXJtcy5pbnN0YW5jZXMsIGRldmljZXNdLFxuICAgICk7XG4gICAgY29uc3QgY291bnRzID0gdXNlTWVtbyhcbiAgICAgICAgKCkgPT4gZmxlZXRDb3VudHMoZGV2aWNlcywgYWxhcm1TZXZlcml0eUJ5RGV2aWNlKSxcbiAgICAgICAgW2RldmljZXMsIGFsYXJtU2V2ZXJpdHlCeURldmljZV0sXG4gICAgKTtcbiAgICBjb25zdCBvdXRkYXRlZCA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBsYXRlc3RBZ2VudFZlcnNpb24gPyBvdXRkYXRlZERldmljZXMoZGV2aWNlcywgc2FtcGxlcywgbGF0ZXN0QWdlbnRWZXJzaW9uKSA6IFtdLFxuICAgICAgICBbZGV2aWNlcywgc2FtcGxlcywgbGF0ZXN0QWdlbnRWZXJzaW9uXSxcbiAgICApO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZGV2aWNlcy5maW5kKChkKSA9PiBkLmRldmljZSA9PT0gc2VsZWN0ZWRJZCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRPbmxpbmUgPSAhIXNlbGVjdGVkPy5jb25uZWN0aW9uPy5hY3RpdmU7XG4gICAgY29uc3Qgc2VsZWN0ZWRQcm9kdWN0SWQgPSBzZWxlY3RlZD8ucHJvZHVjdCB8fCBudWxsO1xuICAgIGNvbnN0IGxvZ1NvdXJjZXMgPSB1c2VQcm9kdWN0TG9nU291cmNlcyhzZWxlY3RlZFByb2R1Y3RJZCk7XG4gICAgY29uc3QgW2FjdGl2ZVNvdXJjZU5hbWUsIHNldEFjdGl2ZVNvdXJjZU5hbWVdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICAvLyBSZXNldCB0aGUgYWN0aXZlIHNvdXJjZSB3aGVuZXZlciB0aGUgc2VsZWN0ZWQgZGV2aWNlIG9yIHByb2R1Y3RcbiAgICAvLyBjaGFuZ2VzLCBvciB3aGVuIHRoZSBzb3VyY2VzIGZpbmlzaCBsb2FkaW5nLiBLZWVwIHRoZSBjdXJyZW50XG4gICAgLy8gc2VsZWN0aW9uIGlmIGl0IHN0aWxsIGV4aXN0cyBpbiB0aGUgbmV3IGxpc3QgXHUyMDE0IHRoYXQgd2F5IGN5Y2xpbmdcbiAgICAvLyBzb3VyY2VzIGlzbid0IGludGVycnVwdGVkIGJ5IGFuIHVucmVsYXRlZCByZS1yZW5kZXIuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGxvZ1NvdXJjZXMubG9hZGluZykgcmV0dXJuO1xuICAgICAgICBjb25zdCBsaXN0ID0gbG9nU291cmNlcy5zb3VyY2VzO1xuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZVNvdXJjZU5hbWUobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2V0QWN0aXZlU291cmNlTmFtZSgocHJldikgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXYgJiYgbGlzdC5zb21lKChzKSA9PiBzLm5hbWUgPT09IHByZXYpKSByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIHJldHVybiBsb2dTb3VyY2VzLmRlZmF1bHQgfHwgbGlzdFswXS5uYW1lO1xuICAgICAgICB9KTtcbiAgICB9LCBbc2VsZWN0ZWRJZCwgc2VsZWN0ZWRQcm9kdWN0SWQsIGxvZ1NvdXJjZXMubG9hZGluZywgbG9nU291cmNlcy5zb3VyY2VzLCBsb2dTb3VyY2VzLmRlZmF1bHRdKTtcblxuICAgIGNvbnN0IGFjdGl2ZVNvdXJjZUluZGV4ID0gYWN0aXZlU291cmNlTmFtZVxuICAgICAgICA/IGxvZ1NvdXJjZXMuc291cmNlcy5maW5kSW5kZXgoKHMpID0+IHMubmFtZSA9PT0gYWN0aXZlU291cmNlTmFtZSlcbiAgICAgICAgOiAtMTtcbiAgICBjb25zdCBhY3RpdmVTb3VyY2UgPSBhY3RpdmVTb3VyY2VJbmRleCA+PSAwID8gbG9nU291cmNlcy5zb3VyY2VzW2FjdGl2ZVNvdXJjZUluZGV4XSA6IG51bGw7XG4gICAgY29uc3Qgc291cmNlQ291bnQgPSBsb2dTb3VyY2VzLnNvdXJjZXMubGVuZ3RoO1xuXG4gICAgY29uc3QgY3ljbGVMb2dTb3VyY2UgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzb3VyY2VDb3VudCA8PSAxKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGkgPSBhY3RpdmVTb3VyY2VJbmRleCA+PSAwID8gYWN0aXZlU291cmNlSW5kZXggOiAwO1xuICAgICAgICBjb25zdCBuZXh0ID0gbG9nU291cmNlcy5zb3VyY2VzWyhpICsgMSkgJSBzb3VyY2VDb3VudF07XG4gICAgICAgIHNldEFjdGl2ZVNvdXJjZU5hbWUobmV4dC5uYW1lKTtcbiAgICAgICAgc2V0TG9nc0NsZWFyVG9rZW4oKG4pID0+IG4gKyAxKTtcbiAgICB9O1xuXG4gICAgLy8gTGV2ZWwgZmlsdGVyIGZvciB0aGUgbG9nIHBhbmVsLiBDeWNsZXMgYGFsbCBcdTIxOTIgaW5mbyBcdTIxOTIgd2FybiBcdTIxOTIgZXJyb3JgO1xuICAgIC8vIGRpc2FibGVkIChhbmQgcmVzZXQgdG8gYGFsbGApIHdoZW4gdGhlIGFjdGl2ZSBzb3VyY2UgaGFzIG5vXG4gICAgLy8gcGF0dGVybiwgc2luY2Ugd2l0aG91dCBhIGNhcHR1cmVkIGBsZXZlbGAgd2UgaGF2ZSBub3RoaW5nIHRvXG4gICAgLy8gY29tcGFyZS4gTGluZXMgd2l0aG91dCBhIGNhcHR1cmVkIGxldmVsIGFsd2F5cyBwYXNzIFx1MjAxNCB3ZSBkb24ndFxuICAgIC8vIGhpZGUgd2hhdCB3ZSBjYW4ndCBjbGFzc2lmeS5cbiAgICBjb25zdCBbbGV2ZWxGaWx0ZXIsIHNldExldmVsRmlsdGVyXSA9IHVzZVN0YXRlKCdhbGwnKTtcbiAgICBjb25zdCBhY3RpdmVQYXR0ZXJuID0gYWN0aXZlU291cmNlPy5yZXNvbHZlZFBhdHRlcm4gfHwgbnVsbDtcbiAgICAvLyBIZXVyaXN0aWM6IGEgcmVnZXggdGhhdCBuYW1lcyBhIGBsZXZlbGAgY2FwdHVyZSBncm91cCBoYXMgYVxuICAgIC8vIGAoPzxsZXZlbD5gIHN1YnN0cmluZy4gQ2hlYXAsIGNvcnJlY3QgZm9yIGFueSByZWdleCB3ZSdsbCBzaGlwXG4gICAgLy8gYW5kIGFueSBvcGVyYXRvci1zdXBwbGllZCBwYXR0ZXJuLlxuICAgIGNvbnN0IGZpbHRlckVuYWJsZWQgPSAhIShhY3RpdmVQYXR0ZXJuICYmIC9cXChcXD88bGV2ZWw+Ly50ZXN0KGFjdGl2ZVBhdHRlcm4pKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWZpbHRlckVuYWJsZWQgJiYgbGV2ZWxGaWx0ZXIgIT09ICdhbGwnKSBzZXRMZXZlbEZpbHRlcignYWxsJyk7XG4gICAgfSwgW2ZpbHRlckVuYWJsZWQsIGxldmVsRmlsdGVyXSk7XG4gICAgY29uc3QgY3ljbGVMZXZlbEZpbHRlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFmaWx0ZXJFbmFibGVkKSByZXR1cm47XG4gICAgICAgIHNldExldmVsRmlsdGVyKChjdXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9yZGVyID0gWydhbGwnLCAnaW5mbycsICd3YXJuJywgJ2Vycm9yJ107XG4gICAgICAgICAgICBjb25zdCBpID0gb3JkZXIuaW5kZXhPZihjdXIpO1xuICAgICAgICAgICAgcmV0dXJuIG9yZGVyWyhpICsgMSkgJSBvcmRlci5sZW5ndGhdO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZGV2aWNlc0RldGFpbEhpbnQgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiBbXG4gICAgICAgICAgICAuLi5ERVZJQ0VTX0RFVEFJTF9ISU5UX0JBU0UsXG4gICAgICAgICAgICAuLi4oc291cmNlQ291bnQgPiAxID8gW3sgazogJ2wnLCBsYWJlbDogJ2xvZyBzcmMnIH1dIDogW10pLFxuICAgICAgICAgICAgLi4uKGZpbHRlckVuYWJsZWQgPyBbeyBrOiAnZicsIGxhYmVsOiAnbGV2ZWwnIH1dIDogW10pLFxuICAgICAgICAgICAgLi4uREVWSUNFU19ERVRBSUxfSElOVF9UQUlMLFxuICAgICAgICBdLFxuICAgICAgICBbc291cmNlQ291bnQsIGZpbHRlckVuYWJsZWRdLFxuICAgICk7XG5cbiAgICAvLyBUb3AtbGV2ZWwgdGFiIHJvdXRpbmcgKyBxdWl0LiBZaWVsZHMgdG8gYW55IG1vZGFsIG9uIHRoZSBzdGFjayBzb1xuICAgIC8vIGAxLTVgIGFuZCBgcWAgZG9uJ3QgZXNjYXBlIGZpbHRlciBtb2RlIG9yIG1vZGFscyB1bmV4cGVjdGVkbHkuXG4gICAgdXNlR2xvYmFsS2V5cyhcbiAgICAgICAgKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhYkhpdCA9IFRBQlMuZmluZCgodCkgPT4gdC5rZXkgPT09IGlucHV0KTtcbiAgICAgICAgICAgIGlmICh0YWJIaXQpIHtcbiAgICAgICAgICAgICAgICBzZXRUYWIodGFiSGl0LmlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICdxJyB8fCAoa2V5LmN0cmwgJiYgaW5wdXQgPT09ICdjJykpIGV4aXQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyB3aGVuOiAhcGxheWJvb2tNb2RhbEFjdGl2ZSB9LFxuICAgICk7XG5cbiAgICB1c2VHbG9iYWxLZXlzKFxuICAgICAgICAoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ3AnKSBzZXRQcm9maWxlUGlja2VyT3Blbih0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyB3aGVuOiB0YWIgPT09ICdvdmVydmlldycgJiYgbXVsdGlwbGVQcm9maWxlcyAmJiAhcGxheWJvb2tNb2RhbEFjdGl2ZSB9LFxuICAgICk7XG5cbiAgICAvLyBGaWx0ZXIgbW9kZTogd2hpbGUgYWN0aXZlLCBtb2RhbCBvd25zIGlucHV0IGFuZCBzaG93cyBpdHMgb3duIGhpbnRzLlxuICAgIHVzZU1vZGFsKFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS5lc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXIoJycpO1xuICAgICAgICAgICAgICAgIHNldEZpbHRlcmluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4gfHwga2V5LmRvd25BcnJvdyB8fCBrZXkudXBBcnJvdykge1xuICAgICAgICAgICAgICAgIHNldEZpbHRlcmluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5iYWNrc3BhY2UgfHwga2V5LmRlbGV0ZSkge1xuICAgICAgICAgICAgICAgIHNldEZpbHRlcigoZikgPT4gZi5zbGljZSgwLCAtMSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dCAmJiAha2V5LmN0cmwgJiYgIWtleS5tZXRhICYmIGlucHV0Lmxlbmd0aCA9PT0gMSAmJiBpbnB1dCA+PSAnICcpIHtcbiAgICAgICAgICAgICAgICBzZXRGaWx0ZXIoKGYpID0+IGYgKyBpbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgd2hlbjogZmlsdGVyaW5nLCBoaW50OiBGSUxURVJfSElOVCB9LFxuICAgICk7XG5cbiAgICAvLyBUYWIgY3ljbGUgKyBwZXItcGFuZWwgZm9jdXNhYmxlIGhhbmRsZXJzIGZvciB0aGUgZGV2aWNlcy1kZXRhaWwgdGFiLlxuICAgIHVzZVRhYkN5Y2xlKCdkZXZpY2VzJywgeyB3aGVuOiB0YWIgPT09ICdkZXZpY2VzJyB9KTtcbiAgICB1c2VGb2N1c2FibGUoe1xuICAgICAgICBpZDogJ2RldmljZXMtZGV0YWlsJyxcbiAgICAgICAgcGFyZW50OiAnZGV2aWNlcycsXG4gICAgICAgIHdoZW46IHRhYiA9PT0gJ2RldmljZXMnLFxuICAgICAgICBoaW50OiBkZXZpY2VzRGV0YWlsSGludCxcbiAgICAgICAgaGFuZGxlcnM6IChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICcvJykge1xuICAgICAgICAgICAgICAgIHNldERldmljZVBpY2tlck9wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4gJiYgc2VsZWN0ZWQgJiYgc2VsZWN0ZWRPbmxpbmUpIHtcbiAgICAgICAgICAgICAgICBvbkFjdGlvbj8uKHsgdHlwZTogJ2NvbnNvbGUnLCBkZXZpY2VJZDogc2VsZWN0ZWQuZGV2aWNlIH0pO1xuICAgICAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICdwJykgc2V0UGF1c2VkKChwKSA9PiAhcCk7XG4gICAgICAgICAgICBlbHNlIGlmIChpbnB1dCA9PT0gJ2MnKSBzZXRMb2dzQ2xlYXJUb2tlbigobikgPT4gbiArIDEpO1xuICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXQgPT09ICdsJykgY3ljbGVMb2dTb3VyY2UoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0ID09PSAnZicpIGN5Y2xlTGV2ZWxGaWx0ZXIoKTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG92ZXJ2aWV3SGludHMgPSB1c2VGb2N1c0hpbnRzKCdvdmVydmlldycpO1xuICAgIGNvbnN0IGRldmljZXNIaW50cyA9IHVzZUZvY3VzSGludHMoJ2RldmljZXMnKTtcbiAgICBjb25zdCBmb290ZXJIaW50cyA9XG4gICAgICAgIHRhYiA9PT0gJ292ZXJ2aWV3J1xuICAgICAgICAgICAgPyBvdmVydmlld0hpbnRzXG4gICAgICAgICAgICA6IHRhYiA9PT0gJ2RldmljZXMnXG4gICAgICAgICAgICAgID8gZGV2aWNlc0hpbnRzXG4gICAgICAgICAgICAgIDogU1RBVElDX1RBQl9ISU5UU1t0YWJdIHx8IFtdO1xuXG4gICAgaWYgKHNpemUuY29scyA8IE1JTl9DT0xTIHx8IHNpemUucm93cyA8IE1JTl9ST1dTKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgd2lkdGg9e3NpemUuY29sc31cbiAgICAgICAgICAgICAgICBoZWlnaHQ9e3NpemUucm93c31cbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLndhcm59PnRlcm1pbmFsIHRvbyBzbWFsbDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubXV0ZWR9PlxuICAgICAgICAgICAgICAgICAgICBuZWVkIGF0IGxlYXN0IHtNSU5fQ09MU31cdTAwRDd7TUlOX1JPV1N9ICh7c2l6ZS5jb2xzfVx1MDBEN3tzaXplLnJvd3N9KVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHdpZHRoPXtzaXplLmNvbHN9IGhlaWdodD17c2l6ZS5yb3dzfT5cbiAgICAgICAgICAgIDxIZWFkZXJcbiAgICAgICAgICAgICAgICB0YWI9e3RhYn1cbiAgICAgICAgICAgICAgICBvblRhYj17c2V0VGFifVxuICAgICAgICAgICAgICAgIGNvdW50cz17Y291bnRzfVxuICAgICAgICAgICAgICAgIHNlcnZlcj17c2VydmVyfVxuICAgICAgICAgICAgICAgIHByb2ZpbGU9e3Byb2ZpbGV9XG4gICAgICAgICAgICAgICAgbXVsdGlwbGVQcm9maWxlcz17bXVsdGlwbGVQcm9maWxlc31cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIHt0YWIgPT09ICdkZXZpY2VzJyAmJiAoXG4gICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8RGV2aWNlRGV0YWlsUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZT17c2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGU9e3NlbGVjdGVkID8gc2FtcGxlc1tzZWxlY3RlZC5kZXZpY2VdIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtU2V2ZXJpdHk9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID8gYWxhcm1TZXZlcml0eUJ5RGV2aWNlLmdldChzZWxlY3RlZC5kZXZpY2UpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQ9e3BhdXNlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVG9rZW49e2xvZ3NDbGVhclRva2VufVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nU291cmNlcz17bG9nU291cmNlc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVNvdXJjZT17YWN0aXZlU291cmNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlU291cmNlSW5kZXg9e2FjdGl2ZVNvdXJjZUluZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXI9e2xldmVsRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRW5hYmxlZD17ZmlsdGVyRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHt0YWIgPT09ICdvdmVydmlldycgJiYgKFxuICAgICAgICAgICAgICAgIDxPdmVydmlld1RhYlxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VzPXtkZXZpY2VzfVxuICAgICAgICAgICAgICAgICAgICBzYW1wbGVzPXtzYW1wbGVzfVxuICAgICAgICAgICAgICAgICAgICBoaXN0b3J5PXtoaXN0b3J5fVxuICAgICAgICAgICAgICAgICAgICBjcHVIaXN0b3J5PXtjcHVIaXN0b3J5fVxuICAgICAgICAgICAgICAgICAgICBldmVudHM9e2V2ZW50c31cbiAgICAgICAgICAgICAgICAgICAgYWxhcm1zPXthbGFybXN9XG4gICAgICAgICAgICAgICAgICAgIGFsYXJtU2V2ZXJpdHlCeURldmljZT17YWxhcm1TZXZlcml0eUJ5RGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0TWV0cmljcz17cHJvZHVjdE1ldHJpY3N9XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RJbmZvPXtmbGVldFByb2R1Y3RzfVxuICAgICAgICAgICAgICAgICAgICBsYXRlc3RBZ2VudFZlcnNpb249e2xhdGVzdEFnZW50VmVyc2lvbn1cbiAgICAgICAgICAgICAgICAgICAgb3V0ZGF0ZWRDb3VudD17b3V0ZGF0ZWQubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICB1cGdyYWRlU3RhdGU9e3VwZ3JhZGUuc3RhdGV9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSWQ9e3NlbGVjdGVkSWR9XG4gICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0RGV2aWNlPXtzZXRTZWxlY3RlZElkfVxuICAgICAgICAgICAgICAgICAgICBzb3J0PXtzb3J0fVxuICAgICAgICAgICAgICAgICAgICBvbkN5Y2xlU29ydD17KCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNvcnQoKGN1cikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBTT1JUX09QVElPTlMuaW5kZXhPZihjdXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTT1JUX09QVElPTlNbKGkgKyAxKSAlIFNPUlRfT1BUSU9OUy5sZW5ndGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI9e2ZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyaW5nPXtmaWx0ZXJpbmd9XG4gICAgICAgICAgICAgICAgICAgIG9uU3RhcnRGaWx0ZXI9eygpID0+IHNldEZpbHRlcmluZyh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgb25Db25maXJtRGV2aWNlPXsoKSA9PiBzZXRUYWIoJ2RldmljZXMnKX1cbiAgICAgICAgICAgICAgICAgICAgb25SZXF1ZXN0VXBncmFkZT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdEFnZW50VmVyc2lvbiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGVkLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlLnN0YXRlLnBoYXNlID09PSAnaWRsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGUub3BlbkNvbmZpcm0obGF0ZXN0QWdlbnRWZXJzaW9uLCBvdXRkYXRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIGRldmljZXNMb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VzRXJyb3I9e2Vycm9yfVxuICAgICAgICAgICAgICAgICAgICBtZXRyaWNGaWx0ZXI9e21ldHJpY0ZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25NZXRyaWNGaWx0ZXJDaGFuZ2U9e2hhbmRsZU1ldHJpY0ZpbHRlckNoYW5nZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge3VwZ3JhZGUuc3RhdGUucGhhc2UgPT09ICdjb25maXJtaW5nJyAmJiAoXG4gICAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9e3NpemUuY29sc31cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXtzaXplLnJvd3N9XG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8VXBncmFkZU1vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRlZENvdW50PXt1cGdyYWRlLnN0YXRlLm91dGRhdGVkQ291bnR9XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9e3VwZ3JhZGUuc3RhdGUudGFyZ2V0fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtPXsob3B0cykgPT4gdXBncmFkZS5zdGFydChvcHRzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB1cGdyYWRlLmNhbmNlbENvbmZpcm0oKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtkZXZpY2VQaWNrZXJPcGVuICYmIChcbiAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD17c2l6ZS5jb2xzfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3NpemUucm93c31cbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxEZXZpY2VQaWNrZXJNb2RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJTV0lUQ0ggREVWSUNFXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXM9e2RldmljZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17KGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZElkKGQuZGV2aWNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREZXZpY2VQaWNrZXJPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0RGV2aWNlUGlja2VyT3BlbihmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7cHJvZmlsZVBpY2tlck9wZW4gJiYgKFxuICAgICAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249XCJhYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPXtzaXplLmNvbHN9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17c2l6ZS5yb3dzfVxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFByb2ZpbGVQaWNrZXJNb2RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZXM9e3Byb2ZpbGVMaXN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlPXtwcm9maWxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9eyhuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHJvZmlsZVBpY2tlck9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWN0aW9uPy4oeyB0eXBlOiAncHJvZmlsZScsIG5hbWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRQcm9maWxlUGlja2VyT3BlbihmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7dGFiID09PSAnYWxlcnRzJyAmJiA8QWxlcnRzVGFiIGFsYXJtcz17YWxhcm1zfSAvPn1cblxuICAgICAgICAgICAge3RhYiA9PT0gJ2V2ZW50cycgJiYgPEV2ZW50c1RhYiBldmVudHM9e2V2ZW50c30gLz59XG5cbiAgICAgICAgICAgIHt0YWIgPT09ICdwbGF5Ym9va3MnICYmIChcbiAgICAgICAgICAgICAgICA8UGxheWJvb2tzVGFiXG4gICAgICAgICAgICAgICAgICAgIGRldmljZXM9e2RldmljZXN9XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e3RhYiA9PT0gJ3BsYXlib29rcyd9XG4gICAgICAgICAgICAgICAgICAgIG9uTW9kYWxBY3RpdmVDaGFuZ2U9e3NldFBsYXlib29rTW9kYWxBY3RpdmV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDxGb290ZXIgaGludHM9e2Zvb3RlckhpbnRzfSByaWdodD1cInYxLjIuMCBcdTAwQjcgYWdlbnQgb2tcIiAvPlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIiwgIi8vIFBhbGV0dGUgbWlycm9ycyB0aGUgVFVJIHJlZGVzaWduIG1vY2t1cC4gSGV4IHZhbHVlcyBnbyBkaXJlY3RseSBpbnRvIEluaydzXG4vLyBgY29sb3JgIC8gYGJvcmRlckNvbG9yYCBwcm9wcyBcdTIwMTQgMjQtYml0IHRydWVjb2xvciBpbiB0ZXJtaW5hbHMgdGhhdCBzdXBwb3J0IGl0LlxuZXhwb3J0IGNvbnN0IHRoZW1lID0ge1xuICAgIGZnOiAnI2Q3ZGFlNScsXG4gICAgZmdEaW06ICcjN2E4MDk1JyxcbiAgICBmZ0ZhaW50OiAnIzRhNTA2MycsXG5cbiAgICAvLyBgYm9yZGVyYCBpcyB0aGUgdmlzaWJsZSBkZWZhdWx0IGZvciBwYW5lbHMgaW4gdGVybWluYWwgXHUyMDE0IHRoZSB2ZXJ5IGRhcmtcbiAgICAvLyBgIzFmMjIzMGAgZnJvbSB0aGUgd2ViIG1vY2t1cCBnZXRzIGNydXNoZWQgYWdhaW5zdCB0aGUgYWx0LXNjcmVlblxuICAgIC8vIGJhY2tncm91bmQsIHNvIHdlIHByb21vdGUgYGJvcmRlclN0cm9uZ2AgdG8gdGhlIGV2ZXJ5ZGF5IGJvcmRlciBhbmQga2VlcFxuICAgIC8vIHRoZSBkaW0gdmFsdWUgYXMgYGJvcmRlckRpbWAgZm9yIGlubmVyIHNlcGFyYXRvcnMuXG4gICAgYm9yZGVyOiAnIzJiMmY0MicsXG4gICAgYm9yZGVyRGltOiAnIzFmMjIzMCcsXG4gICAgYm9yZGVyU3Ryb25nOiAnIzNhM2Y1NScsXG4gICAgYm9yZGVyRm9jdXM6ICcjMDBlNWZmJyxcblxuICAgIGFjY2VudDogJyMwMGU1ZmYnLCAvLyBjeWFuXG4gICAgbWFnZW50YTogJyNmZjJiZDYnLFxuICAgIGxpbWU6ICcjYjZmZjNjJyxcbiAgICBhbWJlcjogJyNmZmIwMjAnLFxuICAgIHJlZDogJyNmZjRkNmQnLFxuICAgIGdyZWVuOiAnIzJmZDY3YScsXG5cbiAgICAvLyBsZWdhY3kgYWxpYXNlcyBrZXB0IGZvciBncmFkdWFsIG1pZ3JhdGlvblxuICAgIG11dGVkOiAnIzdhODA5NScsXG4gICAgZGltOiAnIzRhNTA2MycsXG4gICAgb2s6ICcjMmZkNjdhJyxcbiAgICB3YXJuOiAnI2ZmYjAyMCcsXG4gICAgZXJyOiAnI2ZmNGQ2ZCcsXG5cbiAgICAvLyBNb2RhbCAvIG92ZXJsYXkgZmlsbC4gU2xpZ2h0bHkgbGlnaHRlciB0aGFuIHRoZSB0ZXJtaW5hbCBkZWZhdWx0IHNvXG4gICAgLy8gZmxvYXRpbmcgcGFuZWxzIHN0YW5kIG91dCBhZ2FpbnN0IGEgZGFyayBiYWNrZ3JvdW5kLCBidXQgZGFyayBlbm91Z2hcbiAgICAvLyB0aGF0IHRoZSBwYWxldHRlIChhY2NlbnQvbGltZS9hbWJlcikga2VlcHMgdGhlIHNhbWUgY29udHJhc3QgaXQgaGFzXG4gICAgLy8gb24gYmFyZSB0ZXJtaW5hbC4gVGV4dCBpbnNpZGUgaW5oZXJpdHMgdmlhIEluaydzIEJhY2tncm91bmRDb250ZXh0LlxuICAgIG92ZXJsYXlCZzogJyMxNDE4MjYnLFxufTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi4vdGhlbWUuanMnO1xuXG5jb25zdCBUQUJTID0gW1xuICAgIHsgaWQ6ICdvdmVydmlldycsIGxhYmVsOiAnb3ZlcnZpZXcnLCBrZXk6ICcxJyB9LFxuICAgIHsgaWQ6ICdkZXZpY2VzJywgbGFiZWw6ICdkZXZpY2VzJywga2V5OiAnMicgfSxcbiAgICB7IGlkOiAnYWxlcnRzJywgbGFiZWw6ICdhbGVydHMnLCBrZXk6ICczJyB9LFxuICAgIHsgaWQ6ICdldmVudHMnLCBsYWJlbDogJ2V2ZW50cycsIGtleTogJzQnIH0sXG4gICAgeyBpZDogJ3BsYXlib29rcycsIGxhYmVsOiAncGxheWJvb2tzJywga2V5OiAnNScgfSxcbl07XG5cbmZ1bmN0aW9uIFRhYih7IGxhYmVsLCBrZXlIaW50LCBhY3RpdmUgfSkge1xuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxUZXh0IGJhY2tncm91bmRDb2xvcj17dGhlbWUuYWNjZW50fSBjb2xvcj1cIiMwYTBiMTBcIiBib2xkPlxuICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAge2tleUhpbnR9IHtsYWJlbH17JyAnfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5tYWdlbnRhfT57a2V5SGludH08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiB7bGFiZWx9PC9UZXh0PlxuICAgICAgICA8L1RleHQ+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcih7IHRhYiwgb25UYWIsIGNvdW50cywgc2VydmVyLCBwcm9maWxlLCBtdWx0aXBsZVByb2ZpbGVzIH0pIHtcbiAgICBjb25zdCB7IHRvdGFsID0gMCwgb25saW5lID0gMCwgd2FybiA9IDAsIGJhZCA9IDAgfSA9IGNvdW50cyB8fCB7fTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94XG4gICAgICAgICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS5ib3JkZXJ9XG4gICAgICAgICAgICBwYWRkaW5nWD17MX1cbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxCb3ggZ2FwPXsyfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB0aGluclxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICB7VEFCUy5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17dC5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aSA9PT0gMCAmJiA8VGV4dCBjb2xvcj17dGhlbWUuYm9yZGVyfT5cdTI1MDI8L1RleHQ+fVxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYiBsYWJlbD17dC5sYWJlbH0ga2V5SGludD17dC5rZXl9IGFjdGl2ZT17dGFiID09PSB0LmlkfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IGdhcD17Mn0+XG4gICAgICAgICAgICAgICAge3Byb2ZpbGUgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5wcm9maWxlIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb2ZpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bXVsdGlwbGVQcm9maWxlcyAmJiB0YWIgPT09ICdvdmVydmlldycgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMEI3IDxUZXh0IGNvbG9yPXt0aGVtZS5tYWdlbnRhfT5wPC9UZXh0PiBzd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7c2VydmVyICYmIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+e3NlcnZlcn08L1RleHQ+fVxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubGltZX0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtvbmxpbmV9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gLyB7dG90YWx9IG9ubGluZTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAge3dhcm4gPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYW1iZXJ9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3dhcm59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiB3YXJuPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7YmFkID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnJlZH0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YmFkfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gY3JpdDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZXhwb3J0IHsgVEFCUyB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5cbmZ1bmN0aW9uIEtleSh7IGssIGxhYmVsIH0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5tYWdlbnRhfT57a308L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiB7bGFiZWx9PC9UZXh0PlxuICAgICAgICA8L1RleHQ+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZvb3Rlcih7IGhpbnRzLCByaWdodCB9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBib3JkZXJTdHlsZT1cInNpbmdsZVwiIGJvcmRlckNvbG9yPXt0aGVtZS5ib3JkZXJ9IHBhZGRpbmdYPXsxfSBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxCb3ggZ2FwPXsyfT5cbiAgICAgICAgICAgICAgICB7aGludHMubWFwKChoLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxLZXkga2V5PXtpfSBrPXtoLmt9IGxhYmVsPXtoLmxhYmVsfSAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICB7cmlnaHQgJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntyaWdodH08L1RleHQ+fVxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZUlucHV0LCB1c2VTdGRvdXQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gJy4vUGFuZWwuanN4JztcbmltcG9ydCB7IFNwYXJrbGluZSwgY29sb3JGb3JQY3QgfSBmcm9tICcuL1NwYXJrbGluZS5qc3gnO1xuaW1wb3J0IHsgZGV2aWNlSGVhbHRoIH0gZnJvbSAnLi4vbGliL3N0YXR1cy5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJEZXZpY2VzQnlNZXRyaWMgfSBmcm9tICcuLi8uLi8uLi9saWIvZGFzaGJvYXJkL21ldHJpYy1maWx0ZXIuanMnO1xuXG5jb25zdCBTT1JUX09QVElPTlMgPSBbJ3N0YXR1cycsICduYW1lJywgJ2NwdScsICdtZW0nLCAnZGlzaycsICd1cCddO1xuXG5mdW5jdGlvbiBkb3RGb3IoaGVhbHRoKSB7XG4gICAgaWYgKGhlYWx0aCA9PT0gJ29uJykgcmV0dXJuIHsgZ2x5cGg6ICdcdTI1Q0YnLCBjb2xvcjogdGhlbWUubGltZSB9O1xuICAgIGlmIChoZWFsdGggPT09ICd3YXJuJykgcmV0dXJuIHsgZ2x5cGg6ICdcdTI1QjInLCBjb2xvcjogdGhlbWUuYW1iZXIgfTtcbiAgICBpZiAoaGVhbHRoID09PSAnYmFkJykgcmV0dXJuIHsgZ2x5cGg6ICdcdTI3MTUnLCBjb2xvcjogdGhlbWUucmVkIH07XG4gICAgcmV0dXJuIHsgZ2x5cGg6ICdcdTI1Q0InLCBjb2xvcjogdGhlbWUuZmdGYWludCB9O1xufVxuXG5mdW5jdGlvbiB1cHRpbWVTZWNvbmRzKHNhbXBsZSkge1xuICAgIGlmICghc2FtcGxlPy51cHRpbWUpIHJldHVybiAwO1xuICAgIHJldHVybiBOdW1iZXIoc2FtcGxlLnVwdGltZSkgfHwgMDtcbn1cblxuZnVuY3Rpb24gZm10TnVtKHZhbHVlLCBjb2xvcikge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Plx1MjAxNDwvVGV4dD47XG4gICAgcmV0dXJuIDxUZXh0IGNvbG9yPXtjb2xvcn0+e01hdGgucm91bmQodmFsdWUpfTwvVGV4dD47XG59XG5cbmZ1bmN0aW9uIGNvbG9yUGN0KHAsIHdhcm4gPSA3NSwgYmFkID0gOTApIHtcbiAgICBpZiAocCA9PSBudWxsKSByZXR1cm4gdGhlbWUuZmdGYWludDtcbiAgICBpZiAocCA+PSBiYWQpIHJldHVybiB0aGVtZS5yZWQ7XG4gICAgaWYgKHAgPj0gd2FybikgcmV0dXJuIHRoZW1lLmFtYmVyO1xuICAgIHJldHVybiB0aGVtZS5mZztcbn1cblxuLy8gS2VlcCB0aGUgdXB0aW1lIGNvbHVtbiB0byBhdCBtb3N0IDUgY2hhcmFjdGVycyBzbyBpdCBmaXRzIHRoZSBoZWFkZXJcbi8vIHdpZHRoIHdpdGhvdXQgd3JhcHBpbmcgZXZlbiBvbiBsb25nLWxpdmVkIHNlcnZlcnMgKDgwMCsgZGF5cykuIEF0XG4vLyBtdWx0aS1kYXkgc2NhbGUgaG91cnMgc3RvcCBiZWluZyBpbmZvcm1hdGl2ZSwgc28gd2UgZHJvcCB0aGVtLlxuZnVuY3Rpb24gZm10VXAoc2Vjb25kcykge1xuICAgIGlmICghc2Vjb25kcykgcmV0dXJuICdcdTIwMTQnO1xuICAgIGNvbnN0IGQgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA4NjQwMCk7XG4gICAgaWYgKGQgPj0gMTApIHJldHVybiBgJHtkfWRgO1xuICAgIGNvbnN0IGggPSBNYXRoLmZsb29yKChzZWNvbmRzICUgODY0MDApIC8gMzYwMCk7XG4gICAgaWYgKGQgPiAwKSByZXR1cm4gYCR7ZH1kJHtofWhgO1xuICAgIGNvbnN0IG0gPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgaWYgKGggPiAwKSByZXR1cm4gYCR7aH1oJHttfW1gO1xuICAgIHJldHVybiBgJHttfW1gO1xufVxuXG5mdW5jdGlvbiBIZWFkZXJDZWxsKHsgbGFiZWwsIHNvcnRLZXksIGN1cnJlbnRTb3J0LCB3aWR0aCwgYWxpZ24gPSAnbGVmdCcgfSkge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGN1cnJlbnRTb3J0ID09PSBzb3J0S2V5O1xuICAgIGNvbnN0IGNvbG9yID0gYWN0aXZlID8gdGhlbWUuYWNjZW50IDogdGhlbWUuZmdGYWludDtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IHdpZHRoPXt3aWR0aH0ganVzdGlmeUNvbnRlbnQ9e2FsaWduID09PSAncmlnaHQnID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0J30+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17Y29sb3J9PntsYWJlbH08L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEZXZpY2VzUGFuZWwoe1xuICAgIGRldmljZXMsXG4gICAgc2FtcGxlcyxcbiAgICBjcHVIaXN0b3J5LFxuICAgIGFsYXJtU2V2ZXJpdHlCeURldmljZSxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGZvY3VzZWQsXG4gICAgc2VsZWN0ZWRJZCxcbiAgICBvblNlbGVjdCxcbiAgICBzb3J0ID0gJ3N0YXR1cycsXG4gICAgZmlsdGVyID0gJycsXG4gICAgZmlsdGVyaW5nID0gZmFsc2UsXG4gICAgbWV0cmljRmlsdGVyID0gbnVsbCxcbiAgICB2YWx1ZXNCeURldmljZSA9IG51bGwsXG59KSB7XG4gICAgY29uc3Qgc2NvcGVkRGV2aWNlcyA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IGZpbHRlckRldmljZXNCeU1ldHJpYyhkZXZpY2VzLCB2YWx1ZXNCeURldmljZSwgbWV0cmljRmlsdGVyKSxcbiAgICAgICAgW2RldmljZXMsIHZhbHVlc0J5RGV2aWNlLCBtZXRyaWNGaWx0ZXJdLFxuICAgICk7XG5cbiAgICBjb25zdCBlbnJpY2hlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gc2NvcGVkRGV2aWNlcy5tYXAoKGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNhbXBsZSA9IHNhbXBsZXM/LltkLmRldmljZV07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGQsXG4gICAgICAgICAgICAgICAgc2FtcGxlLFxuICAgICAgICAgICAgICAgIGhlYWx0aDogZGV2aWNlSGVhbHRoKGQsIGFsYXJtU2V2ZXJpdHlCeURldmljZT8uZ2V0KGQuZGV2aWNlKSksXG4gICAgICAgICAgICAgICAgY3B1OiBzYW1wbGU/LmNwdT8udXNhZ2UgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBtZW06IHNhbXBsZT8ubWVtb3J5Py51c2FnZSA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGRpc2s6IHNhbXBsZT8uZGlzaz8ucm9vdD8udXNhZ2UgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICB1cDogdXB0aW1lU2Vjb25kcyhzYW1wbGUpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSwgW3Njb3BlZERldmljZXMsIHNhbXBsZXMsIGFsYXJtU2V2ZXJpdHlCeURldmljZV0pO1xuXG4gICAgY29uc3Qgc29ydGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yZGVyID0geyBiYWQ6IDAsIHdhcm46IDEsIG9uOiAyLCBvZmY6IDMgfTtcbiAgICAgICAgY29uc3QgY29weSA9IFsuLi5lbnJpY2hlZF07XG4gICAgICAgIGNvcHkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKHNvcnQgPT09ICduYW1lJykgcmV0dXJuIGEuZC5kZXZpY2UubG9jYWxlQ29tcGFyZShiLmQuZGV2aWNlKTtcbiAgICAgICAgICAgIGlmIChzb3J0ID09PSAnY3B1JykgcmV0dXJuIChiLmNwdSA/PyAtMSkgLSAoYS5jcHUgPz8gLTEpO1xuICAgICAgICAgICAgaWYgKHNvcnQgPT09ICdtZW0nKSByZXR1cm4gKGIubWVtID8/IC0xKSAtIChhLm1lbSA/PyAtMSk7XG4gICAgICAgICAgICBpZiAoc29ydCA9PT0gJ2Rpc2snKSByZXR1cm4gKGIuZGlzayA/PyAtMSkgLSAoYS5kaXNrID8/IC0xKTtcbiAgICAgICAgICAgIGlmIChzb3J0ID09PSAndXAnKSByZXR1cm4gYi51cCAtIGEudXA7XG4gICAgICAgICAgICAvLyBzdGF0dXMgKGRlZmF1bHQpOiB3b3JzdCBmaXJzdCwgdGhlbiBuYW1lXG4gICAgICAgICAgICBjb25zdCBvbyA9IG9yZGVyW2EuaGVhbHRoXSAtIG9yZGVyW2IuaGVhbHRoXTtcbiAgICAgICAgICAgIGlmIChvbyAhPT0gMCkgcmV0dXJuIG9vO1xuICAgICAgICAgICAgcmV0dXJuIGEuZC5kZXZpY2UubG9jYWxlQ29tcGFyZShiLmQuZGV2aWNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZmlsdGVyKSByZXR1cm4gY29weTtcbiAgICAgICAgY29uc3QgbmVlZGxlID0gZmlsdGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBjb3B5LmZpbHRlcihcbiAgICAgICAgICAgIChlKSA9PlxuICAgICAgICAgICAgICAgIGUuZC5kZXZpY2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuZWVkbGUpIHx8XG4gICAgICAgICAgICAgICAgKGUuZC5uYW1lICYmIGUuZC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmVlZGxlKSksXG4gICAgICAgICk7XG4gICAgfSwgW2VucmljaGVkLCBzb3J0LCBmaWx0ZXJdKTtcblxuICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgaWR4ID0gc29ydGVkLmZpbmRJbmRleCgoZSkgPT4gZS5kLmRldmljZSA9PT0gc2VsZWN0ZWRJZCk7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCA6IDA7XG4gICAgfSwgW3NvcnRlZCwgc2VsZWN0ZWRJZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHNvcnRlZC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHNvcnRlZFtzZWxlY3RlZEluZGV4XTtcbiAgICAgICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gICAgICAgIGlmIChjdXJyZW50LmQuZGV2aWNlICE9PSBzZWxlY3RlZElkKSBvblNlbGVjdChjdXJyZW50LmQuZGV2aWNlKTtcbiAgICB9LCBbc29ydGVkLCBzZWxlY3RlZEluZGV4LCBzZWxlY3RlZElkLCBvblNlbGVjdF0pO1xuXG4gICAgdXNlSW5wdXQoXG4gICAgICAgIChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZvY3VzZWQgfHwgZmlsdGVyaW5nIHx8IHNvcnRlZC5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGxldCBuZXh0ID0gc2VsZWN0ZWRJbmRleDtcbiAgICAgICAgICAgIGlmIChrZXkudXBBcnJvdyB8fCBpbnB1dCA9PT0gJ2snKSBuZXh0ID0gTWF0aC5tYXgoMCwgc2VsZWN0ZWRJbmRleCAtIDEpO1xuICAgICAgICAgICAgZWxzZSBpZiAoa2V5LmRvd25BcnJvdyB8fCBpbnB1dCA9PT0gJ2onKVxuICAgICAgICAgICAgICAgIG5leHQgPSBNYXRoLm1pbihzb3J0ZWQubGVuZ3RoIC0gMSwgc2VsZWN0ZWRJbmRleCArIDEpO1xuICAgICAgICAgICAgZWxzZSBpZiAoa2V5LnBhZ2VVcCkgbmV4dCA9IE1hdGgubWF4KDAsIHNlbGVjdGVkSW5kZXggLSAxMCk7XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkucGFnZURvd24pIG5leHQgPSBNYXRoLm1pbihzb3J0ZWQubGVuZ3RoIC0gMSwgc2VsZWN0ZWRJbmRleCArIDEwKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0ID09PSAnZycpIG5leHQgPSAwO1xuICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXQgPT09ICdHJykgbmV4dCA9IHNvcnRlZC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgICAgICBvblNlbGVjdChzb3J0ZWRbbmV4dF0uZC5kZXZpY2UpO1xuICAgICAgICB9LFxuICAgICAgICB7IGlzQWN0aXZlOiBmb2N1c2VkIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGlkV2lkdGggPSBzb3J0ZWQucmVkdWNlKCh3LCBlKSA9PiBNYXRoLm1heCh3LCBlLmQuZGV2aWNlLmxlbmd0aCksIDgpO1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSB1c2VTdGRvdXQoKTtcbiAgICAvLyBIZWFkZXIgKH4zKSArIGZvb3RlciAofjMpICsgcGFuZWwgYm9yZGVyICgyKSArIHRpdGxlIHJvdyArIG1hcmdpbiAoMSkgK1xuICAgIC8vIHBvc3NpYmxlIG92ZXJmbG93IGluZGljYXRvcnMgKDIpICsgY29sdW1uIGhlYWRlciAoMSk6IHRoZSBsaXN0IGl0c2VsZlxuICAgIC8vIGdldHMgdGhlIHJlc3QuXG4gICAgY29uc3QgdmlzaWJsZUNvdW50ID0gTWF0aC5tYXgoMywgKHN0ZG91dD8ucm93cyA/PyA0MCkgLSAxMik7XG5cbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGxldCBlbmQgPSBzb3J0ZWQubGVuZ3RoO1xuICAgIGlmIChzb3J0ZWQubGVuZ3RoID4gdmlzaWJsZUNvdW50KSB7XG4gICAgICAgIGNvbnN0IGhhbGYgPSBNYXRoLmZsb29yKHZpc2libGVDb3VudCAvIDIpO1xuICAgICAgICBzdGFydCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNlbGVjdGVkSW5kZXggLSBoYWxmLCBzb3J0ZWQubGVuZ3RoIC0gdmlzaWJsZUNvdW50KSk7XG4gICAgICAgIGVuZCA9IHN0YXJ0ICsgdmlzaWJsZUNvdW50O1xuICAgIH1cbiAgICBjb25zdCBzbGljZSA9IHNvcnRlZC5zbGljZShzdGFydCwgZW5kKTtcbiAgICBjb25zdCBoaWRkZW5BYm92ZSA9IHN0YXJ0O1xuICAgIGNvbnN0IGhpZGRlbkJlbG93ID0gc29ydGVkLmxlbmd0aCAtIGVuZDtcblxuICAgIGNvbnN0IHN1YlRleHQgPVxuICAgICAgICBtZXRyaWNGaWx0ZXIgfHwgZmlsdGVyXG4gICAgICAgICAgICA/IGAke3NvcnRlZC5sZW5ndGh9IC8gJHtkZXZpY2VzLmxlbmd0aH1gXG4gICAgICAgICAgICA6IGAke3NvcnRlZC5sZW5ndGh9YDtcbiAgICByZXR1cm4gKFxuICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgIHRpdGxlPVwiREVWSUNFU1wiXG4gICAgICAgICAgICBzdWI9e3N1YlRleHR9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgcmlnaHQ9e1xuICAgICAgICAgICAgICAgIG1ldHJpY0ZpbHRlciA/IChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge21ldHJpY0ZpbHRlci5sYWJlbCB8fCBtZXRyaWNGaWx0ZXIubWV0cmljS2V5fSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge21ldHJpY0ZpbHRlci5idWNrZXR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICApIDogZmlsdGVyaW5nIHx8IGZpbHRlciA/IChcbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtmaWx0ZXJpbmcgPyB0aGVtZS5hY2NlbnQgOiB0aGVtZS5mZ0RpbX0+LzwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2ZpbHRlcn08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZmlsdGVyaW5nICYmIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9Plx1MjU4QzwvVGV4dD59XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PnNvcnQgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0+e3NvcnR9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9IC8+XG4gICAgICAgICAgICAgICAgPEhlYWRlckNlbGwgbGFiZWw9XCJuYW1lXCIgc29ydEtleT1cIm5hbWVcIiBjdXJyZW50U29ydD17c29ydH0gd2lkdGg9e2lkV2lkdGggKyAyfSAvPlxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9IC8+XG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17MTJ9IG1hcmdpblJpZ2h0PXsxfSBwYWRkaW5nUmlnaHQ9ezJ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PjMwbTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8SGVhZGVyQ2VsbCBsYWJlbD1cImNwdVwiIHNvcnRLZXk9XCJjcHVcIiBjdXJyZW50U29ydD17c29ydH0gd2lkdGg9ezV9IGFsaWduPVwicmlnaHRcIiAvPlxuICAgICAgICAgICAgICAgIDxIZWFkZXJDZWxsIGxhYmVsPVwibWVtXCIgc29ydEtleT1cIm1lbVwiIGN1cnJlbnRTb3J0PXtzb3J0fSB3aWR0aD17NX0gYWxpZ249XCJyaWdodFwiIC8+XG4gICAgICAgICAgICAgICAgPEhlYWRlckNlbGwgbGFiZWw9XCJkaXNrXCIgc29ydEtleT1cImRpc2tcIiBjdXJyZW50U29ydD17c29ydH0gd2lkdGg9ezV9IGFsaWduPVwicmlnaHRcIiAvPlxuICAgICAgICAgICAgICAgIDxIZWFkZXJDZWxsIGxhYmVsPVwidXBcIiBzb3J0S2V5PVwidXBcIiBjdXJyZW50U29ydD17c29ydH0gd2lkdGg9ezZ9IGFsaWduPVwicmlnaHRcIiAvPlxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIHtsb2FkaW5nICYmIHNvcnRlZC5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+bG9hZGluZ1x1MjAyNjwvVGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgJiYgPFRleHQgY29sb3I9e3RoZW1lLnJlZH0+e2Vycm9yfTwvVGV4dD59XG5cbiAgICAgICAgICAgIHtoaWRkZW5BYm92ZSA+IDAgJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Plx1MjE5MSB7aGlkZGVuQWJvdmV9IG1vcmU8L1RleHQ+fVxuXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICB7c2xpY2UubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsID0gZS5kLmRldmljZSA9PT0gc2VsZWN0ZWRJZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG90ID0gZG90Rm9yKGUuaGVhbHRoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBlLmQuZGV2aWNlLnBhZEVuZChpZFdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3B1U2VyaWVzID0gY3B1SGlzdG9yeT8uW2UuZC5kZXZpY2VdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNTcGFyayA9IEFycmF5LmlzQXJyYXkoY3B1U2VyaWVzKSAmJiBjcHVTZXJpZXMubGVuZ3RoID49IDI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYXJrQ29sb3IgPSBlLmNwdSA9PSBudWxsID8gdGhlbWUuZmdEaW0gOiBjb2xvckZvclBjdChlLmNwdSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17ZS5kLmRldmljZX0gYmFja2dyb3VuZENvbG9yPXtpc1NlbCA/ICcjMWEyMDMwJyA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtpc1NlbCA/IHRoZW1lLmFjY2VudCA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNTZWwgPyAnXHUyMDNBJyA6ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9e2lkV2lkdGggKyAyfSBtYXJnaW5SaWdodD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtkb3QuY29sb3J9Pntkb3QuZ2x5cGh9PC9UZXh0PnsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aXNTZWwgPyB0aGVtZS5mZyA6IHRoZW1lLmZnRGltfT57aWR9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17MTJ9IG1hcmdpblJpZ2h0PXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2hhc1NwYXJrID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNwYXJrbGluZSBzZXJpZXM9e2NwdVNlcmllc30gd2lkdGg9ezEwfSBjb2xvcj17c3BhcmtDb2xvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT57J1x1MDBCNycucmVwZWF0KDEwKX08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17NX0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm10TnVtKGUuY3B1LCBjb2xvclBjdChlLmNwdSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezV9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZtdE51bShlLm1lbSwgY29sb3JQY3QoZS5tZW0pKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs1fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmbXROdW0oZS5kaXNrLCBjb2xvclBjdChlLmRpc2ssIDg1LCA5NSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIiBmbGV4U2hyaW5rPXswfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmbXRVcChlLnVwKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAge2hpZGRlbkJlbG93ID4gMCAmJiA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XHUyMTkzIHtoaWRkZW5CZWxvd30gbW9yZTwvVGV4dD59XG4gICAgICAgIDwvUGFuZWw+XG4gICAgKTtcbn1cblxuZXhwb3J0IHsgU09SVF9PUFRJT05TIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFBhbmVsKHtcbiAgICB0aXRsZSxcbiAgICBzdWIsXG4gICAgcmlnaHQsXG4gICAgZm9jdXNlZCA9IGZhbHNlLFxuICAgIGNoaWxkcmVuLFxuICAgIGZsZXhHcm93ID0gMSxcbiAgICBmbGV4QmFzaXMsXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHBhZGRpbmdYID0gMSxcbiAgICBwYWRkaW5nWSA9IDAsXG4gICAgZmxleFNocmluayxcbiAgICBtaW5IZWlnaHQsXG4gICAgLy8gRGVmYXVsdCB0byBoaWRpbmcgb3ZlcmZsb3c6IGNvbnRlbnQgdGhhdCBkb2Vzbid0IGZpdCBpbnNpZGUgdGhlIHBhbmVsXG4gICAgLy8gYm9keSBnZXRzIGNsaXBwZWQgcmF0aGVyIHRoYW4gc3BpbGxpbmcgcGFzdCB0aGUgYm9yZGVyICh3aGVyZSBpdCB3b3VsZFxuICAgIC8vIG92ZXJ3cml0ZSB3aGF0ZXZlciBpcyBiZWxvdyBvciB3cmFwIGludG8gdGhlIG5leHQgcGFuZWwncyBjaHJvbWUpLlxuICAgIG92ZXJmbG93ID0gJ2hpZGRlbicsXG59KSB7XG4gICAgY29uc3QgYm9yZGVyQ29sb3IgPSBmb2N1c2VkID8gdGhlbWUuYm9yZGVyRm9jdXMgOiB0aGVtZS5ib3JkZXI7XG4gICAgY29uc3QgdGl0bGVDb2xvciA9IGZvY3VzZWQgPyB0aGVtZS5hY2NlbnQgOiB0aGVtZS5mZztcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICAgICAgYm9yZGVyQ29sb3I9e2JvcmRlckNvbG9yfVxuICAgICAgICAgICAgcGFkZGluZ1g9e3BhZGRpbmdYfVxuICAgICAgICAgICAgcGFkZGluZ1k9e3BhZGRpbmdZfVxuICAgICAgICAgICAgZmxleEdyb3c9e2ZsZXhHcm93fVxuICAgICAgICAgICAgZmxleEJhc2lzPXtmbGV4QmFzaXN9XG4gICAgICAgICAgICBmbGV4U2hyaW5rPXtmbGV4U2hyaW5rfVxuICAgICAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICAgICAgaGVpZ2h0PXtoZWlnaHR9XG4gICAgICAgICAgICBtaW5IZWlnaHQ9e21pbkhlaWdodH1cbiAgICAgICAgPlxuICAgICAgICAgICAge3RpdGxlICYmIChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0ganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGl0bGVDb2xvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB7c3ViICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PiBcdTAwQjcgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3VifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICB7cmlnaHQgJiYgPEJveD57cmlnaHR9PC9Cb3g+fVxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGZsZXhHcm93PXsxfSBvdmVyZmxvdz17b3ZlcmZsb3d9PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi4vdGhlbWUuanMnO1xuXG5jb25zdCBTUEFSS19HTFlQSFMgPSAnXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHUyNTg4JztcblxuZXhwb3J0IGZ1bmN0aW9uIFNwYXJrbGluZSh7IHNlcmllcywgd2lkdGggPSAyMCwgY29sb3IgPSB0aGVtZS5hY2NlbnQsIG1heCB9KSB7XG4gICAgY29uc3QgZGF0YSA9IChzZXJpZXMgfHwgW10pLmZpbHRlcigodikgPT4gdiAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2KSk7XG4gICAgaWYgKGRhdGEubGVuZ3RoIDwgMikgcmV0dXJuIDxUZXh0PnsnICcucmVwZWF0KHdpZHRoKX08L1RleHQ+O1xuICAgIGNvbnN0IHNsaWNlID0gZGF0YS5zbGljZSgtd2lkdGgpO1xuICAgIGNvbnN0IGNlaWwgPSBtYXggPz8gMTAwO1xuICAgIGNvbnN0IG91dCA9IHNsaWNlXG4gICAgICAgIC5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjZWlsLCB2KSk7XG4gICAgICAgICAgICBjb25zdCBpID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgU1BBUktfR0xZUEhTLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcigobiAvIGNlaWwpICogKFNQQVJLX0dMWVBIUy5sZW5ndGggLSAxKSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIFNQQVJLX0dMWVBIU1tpXTtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpO1xuICAgIGNvbnN0IHBhZCA9IHdpZHRoIC0gc2xpY2UubGVuZ3RoO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge3BhZCA+IDAgJiYgJyAnLnJlcGVhdChwYWQpfVxuICAgICAgICAgICAgPFRleHQgY29sb3I9e2NvbG9yfT57b3V0fTwvVGV4dD5cbiAgICAgICAgPC9UZXh0PlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCYXIoeyB2YWx1ZSwgd2lkdGggPSAyMCwgY29sb3IsIGNlaWwgPSAxMDAgfSkge1xuICAgIGNvbnN0IHBjdCA9IHZhbHVlID09IG51bGwgPyAwIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oY2VpbCwgdmFsdWUpKTtcbiAgICBjb25zdCBmaWxsZWQgPSBNYXRoLnJvdW5kKChwY3QgLyBjZWlsKSAqIHdpZHRoKTtcbiAgICBjb25zdCBlbXB0eSA9IHdpZHRoIC0gZmlsbGVkO1xuICAgIGNvbnN0IGZpbGxDb2xvciA9IGNvbG9yID8/IGNvbG9yRm9yUGN0KHZhbHVlKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5bPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e2ZpbGxDb2xvcn0+eydcdTI1ODgnLnJlcGVhdChmaWxsZWQpfTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT57J1x1MjU5MScucmVwZWF0KGVtcHR5KX08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XTwvVGV4dD5cbiAgICAgICAgPC9UZXh0PlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvckZvclBjdChwKSB7XG4gICAgaWYgKHAgPT0gbnVsbCkgcmV0dXJuIHRoZW1lLmZnRGltO1xuICAgIGlmIChwID49IDkwKSByZXR1cm4gdGhlbWUucmVkO1xuICAgIGlmIChwID49IDc1KSByZXR1cm4gdGhlbWUuYW1iZXI7XG4gICAgcmV0dXJuIHRoZW1lLmxpbWU7XG59XG4iLCAiaW1wb3J0IHsgQUxBUk1fU0VWRVJJVFkgfSBmcm9tICdAdGhpbmdlci1pby9jbGktY29yZS9hbGFybXMnO1xuaW1wb3J0IHsgZGVidWdMb2cgfSBmcm9tICcuLi8uLi8uLi9saWIvZGVidWctbG9nLmpzJztcblxuLy8gSGVhbHRoID0gc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBhY3Jvc3MgdGhlIGRhc2hib2FyZC4gU2V2ZXJpdHkgd2lucyBvdmVyXG4vLyBjb25uZWN0aW9uIHN0YXRlIFx1MjAxNCBhIGNyaXRpY2FsIGFsYXJtIG9uIGEgZGlzY29ubmVjdGVkIGFnZW50IChlLmcuXG4vLyBcIk1pc3NpbmcgTW9uaXRvcmluZyBEYXRhXCIpIHNob3VsZCBzdGlsbCBzdXJmYWNlIGFzIFx1MjcxNSwgbm90IGFzIFx1MjVDQi5cbi8vICAgLSAnYmFkJyA6IGFsYXJtIHNldmVyaXR5IFx1MjI2NSBISUdIIChyZWdhcmRsZXNzIG9mIGNvbm5lY3Rpb24pXG4vLyAgIC0gJ3dhcm4nOiBhbGFybSBzZXZlcml0eSBMT1cgb3IgTUVESVVNIChyZWdhcmRsZXNzIG9mIGNvbm5lY3Rpb24pXG4vLyAgIC0gJ29mZicgOiBub3QgY29ubmVjdGVkIGFuZCBubyBhY3RpdmUgYWxhcm1cbi8vICAgLSAnb24nICA6IGNvbm5lY3RlZCwgbm8gYWN0aXZlIGFsYXJtXG5leHBvcnQgZnVuY3Rpb24gZGV2aWNlSGVhbHRoKGRldmljZSwgYWxhcm1TZXZlcml0eSkge1xuICAgIGNvbnN0IHNldiA9IGFsYXJtU2V2ZXJpdHkgPz8gQUxBUk1fU0VWRVJJVFkuTk9ORTtcbiAgICBpZiAoc2V2ID49IEFMQVJNX1NFVkVSSVRZLkhJR0gpIHJldHVybiAnYmFkJztcbiAgICBpZiAoc2V2ID49IEFMQVJNX1NFVkVSSVRZLkxPVykgcmV0dXJuICd3YXJuJztcbiAgICBpZiAoIWRldmljZT8uY29ubmVjdGlvbj8uYWN0aXZlKSByZXR1cm4gJ29mZic7XG4gICAgcmV0dXJuICdvbic7XG59XG5cbi8vIE1hcCBkZXZpY2VJZCBcdTIxOTIgaGlnaGVzdCBhY3RpdmUgYWxhcm0gc2V2ZXJpdHkuIEZpbHRlcnMgYnkgYG9yaWdpbi5zb3VyY2VgXG4vLyBzbyB1c2VyLXNjb3BlZCBhbGFybXMgZG9uJ3QgbGVhayBpbnRvIGEgcGVyLWRldmljZSBjb3VudC5cbi8vXG4vLyBBbGFybXMgZnJvbSBydWxlcyBkcml2ZW4gYnkgYXNzZXQgaG9zdG5hbWUvbmFtZSBvY2Nhc2lvbmFsbHkgYXJyaXZlIHdpdGhcbi8vIGBvcmlnaW4uaWRgIHRoYXQgZG9lc24ndCBtYXRjaCBgZGV2aWNlLmRldmljZWAuIFRvIHN0aWxsIHN1cmZhY2UgdGhvc2Ugb25cbi8vIHRoZSBtYXRjaGluZyBkZXZpY2Ugcm93LCB3ZSBhbHNvIHJlc29sdmUgdmlhIGBvcmlnaW4ubmFtZSBcdTIxOTIgZGV2aWNlLm5hbWVgXG4vLyBhcyBhIGZhbGxiYWNrIFx1MjAxNCBgZGV2aWNlc2AgaXMgb3B0aW9uYWwsIGNhbGxlcnMgdGhhdCBwYXNzIGl0IGdldCB0aGVcbi8vIGV4dHJhIGNvdmVyYWdlLlxuZXhwb3J0IGZ1bmN0aW9uIG1heFNldmVyaXR5QnlEZXZpY2UoaW5zdGFuY2VzLCBkZXZpY2VzKSB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgIGlmICghaW5zdGFuY2VzKSByZXR1cm4gbWFwO1xuICAgIGNvbnN0IGlkU2V0ID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IG5hbWVUb0lkID0gbmV3IE1hcCgpO1xuICAgIGlmIChkZXZpY2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZCBvZiBkZXZpY2VzKSB7XG4gICAgICAgICAgICBpZiAoIWQ/LmRldmljZSkgY29udGludWU7XG4gICAgICAgICAgICBpZFNldC5hZGQoZC5kZXZpY2UpO1xuICAgICAgICAgICAgaWYgKGQubmFtZSkgbmFtZVRvSWQuc2V0KGQubmFtZSwgZC5kZXZpY2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJ1bXAgPSAoa2V5LCBzZXYpID0+IHtcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3QgY3VyID0gbWFwLmdldChrZXkpID8/IEFMQVJNX1NFVkVSSVRZLk5PTkU7XG4gICAgICAgIGlmIChzZXYgPiBjdXIpIG1hcC5zZXQoa2V5LCBzZXYpO1xuICAgIH07XG4gICAgY29uc3QgdW5tYXRjaGVkID0gW107XG4gICAgZm9yIChjb25zdCBpIG9mIGluc3RhbmNlcykge1xuICAgICAgICBpZiAoaT8ub3JpZ2luPy5zb3VyY2UgIT09ICdkZXZpY2UnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgc2V2ID0gaS5zZXZlcml0eSA/PyBBTEFSTV9TRVZFUklUWS5OT05FO1xuICAgICAgICBjb25zdCBpZCA9IGkub3JpZ2luLmlkO1xuICAgICAgICBjb25zdCBuYW1lID0gaS5vcmlnaW4ubmFtZTtcbiAgICAgICAgLy8gUHJlZmVyIGlkIHdoZW4gaXQgcmVzb2x2ZXMgdG8gYSBrbm93biBkZXZpY2U7IG90aGVyd2lzZSB0cnkgbmFtZS5cbiAgICAgICAgaWYgKGlkICYmIGlkU2V0LmhhcyhpZCkpIHtcbiAgICAgICAgICAgIGJ1bXAoaWQsIHNldik7XG4gICAgICAgIH0gZWxzZSBpZiAobmFtZSAmJiBuYW1lVG9JZC5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIGJ1bXAobmFtZVRvSWQuZ2V0KG5hbWUpLCBzZXYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gbWF0Y2g6IGtlZXAga2V5ZWQgYnkgaWQgc28gYSBsYXRlciBkZXZpY2UtbGlzdCByZWZyZXNoXG4gICAgICAgICAgICAvLyBjYW4gc3RpbGwgcGljayBpdCB1cCwgYW5kIHN1cmZhY2UgaXQgdG8gdGhlIGRlYnVnIGxvZyBzb1xuICAgICAgICAgICAgLy8gdGhlIGNhdXNlIChkaWZmZXJlbnQgc2NvcGUsIGFzc2V0LW5vdC1kZXZpY2Ugb3JpZ2luLCBldGMuKVxuICAgICAgICAgICAgLy8gaXMgdmlzaWJsZSB3aXRob3V0IHNwZWx1bmtpbmcgdGhlIFdTIGZyYW1lcy5cbiAgICAgICAgICAgIGlmIChpZCkgYnVtcChpZCwgc2V2KTtcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKHsgaWQsIG5hbWUsIGluc3RhbmNlOiBpLmluc3RhbmNlLCBzZXZlcml0eTogc2V2IH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh1bm1hdGNoZWQubGVuZ3RoID4gMCAmJiBkZXZpY2VzKSB7XG4gICAgICAgIGRlYnVnTG9nKCdhbGFybXM6bWF0Y2gnLCAndW5tYXRjaGVkLW9yaWdpbnMnLCB7XG4gICAgICAgICAgICB1bm1hdGNoZWRfY291bnQ6IHVubWF0Y2hlZC5sZW5ndGgsXG4gICAgICAgICAgICBzYW1wbGU6IHVubWF0Y2hlZC5zbGljZSgwLCA1KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGVldENvdW50cyhkZXZpY2VzLCBhbGFybVNldmVyaXR5QnlEZXZpY2UpIHtcbiAgICBjb25zdCBvdXQgPSB7IHRvdGFsOiBkZXZpY2VzLmxlbmd0aCwgb25saW5lOiAwLCBvZmZsaW5lOiAwLCB3YXJuOiAwLCBiYWQ6IDAgfTtcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGV2aWNlcykge1xuICAgICAgICBjb25zdCBoID0gZGV2aWNlSGVhbHRoKGQsIGFsYXJtU2V2ZXJpdHlCeURldmljZT8uZ2V0KGQuZGV2aWNlKSk7XG4gICAgICAgIGlmIChoID09PSAnb2ZmJykgb3V0Lm9mZmxpbmUrKztcbiAgICAgICAgZWxzZSBvdXQub25saW5lKys7XG4gICAgICAgIGlmIChoID09PSAnd2FybicpIG91dC53YXJuKys7XG4gICAgICAgIGVsc2UgaWYgKGggPT09ICdiYWQnKSBvdXQuYmFkKys7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5cbi8vIFZlcnNpb24gaGVscGVycyBsaXZlIGluIGBsaWIvYWdlbnQtdmVyc2lvbnMuanNgIHNvIHRoZSBDTEkgY2FuIHJldXNlXG4vLyB0aGVtIHdpdGhvdXQgcHVsbGluZyBkYXNoYm9hcmQtc3BlY2lmaWMgY29kZS4gUmUtZXhwb3J0ZWQgZnJvbSBoZXJlIGZvclxuLy8gY2FsbC1zaXRlcyB0aGF0IGFscmVhZHkgaW1wb3J0IGBub3JtYWxpemVBZ2VudFZlcnNpb25gIC8gYGNvbXBhcmVBZ2VudFZlcnNpb25zYFxuLy8gZnJvbSB0aGUgZGFzaGJvYXJkIG1vZHVsZS5cbmltcG9ydCB7IG5vcm1hbGl6ZUFnZW50VmVyc2lvbiwgY29tcGFyZUFnZW50VmVyc2lvbnMgfSBmcm9tICcuLi8uLi8uLi9saWIvYWdlbnQtdmVyc2lvbnMuanMnO1xuZXhwb3J0IHsgbm9ybWFsaXplQWdlbnRWZXJzaW9uLCBjb21wYXJlQWdlbnRWZXJzaW9ucyB9O1xuXG4vLyBSZXR1cm5zIFt2ZXJzaW9uLCBjb3VudF0gdHVwbGVzIHNvcnRlZCBuZXdlc3QtZmlyc3QgYnkgc2VtdmVyLiBDYWxsZXJzIHRoYXRcbi8vIG5lZWQgcG9wdWxhcml0eSBvcmRlciBjYW4gcmUtc29ydC4gU29ydGluZyBieSBzZW12ZXIgaXMgd2hhdCBsZXRzIHRoZSBVSVxuLy8gbGFiZWwgYSByb3cgYXMgXCJvdXRkYXRlZFwiIHdpdGhvdXQgcmVseWluZyBvbiBhIHBvcHVsYXJpdHkgaGV1cmlzdGljICh3aGljaFxuLy8gbWlzZmlyZXMgdGhlIG1vbWVudCBhIG5ld2VyIHJlbGVhc2Ugcm9sbHMgb3V0IHRvIDw1MCUgb2YgdGhlIGZsZWV0KS5cbmV4cG9ydCBmdW5jdGlvbiBhZ2VudFZlcnNpb25Db3VudHMoZGV2aWNlcywgc2FtcGxlcykge1xuICAgIGNvbnN0IG0gPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCBkIG9mIGRldmljZXMpIHtcbiAgICAgICAgY29uc3QgcyA9IHNhbXBsZXM/LltkLmRldmljZV07XG4gICAgICAgIGNvbnN0IHYgPSBub3JtYWxpemVBZ2VudFZlcnNpb24ocz8uYWdlbnQ/LnZlcnNpb24pO1xuICAgICAgICBpZiAoIXYpIGNvbnRpbnVlO1xuICAgICAgICBtLnNldCh2LCAobS5nZXQodikgfHwgMCkgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5tLmVudHJpZXMoKV0uc29ydCgoYSwgYikgPT4gY29tcGFyZUFnZW50VmVyc2lvbnMoYVswXSwgYlswXSkpO1xufVxuXG4vLyBEZXZpY2VzIHdob3NlIHJlcG9ydGVkIGFnZW50IHZlcnNpb24gaXMgb2xkZXIgdGhhbiBgdGFyZ2V0YC4gRGV2aWNlcyB3aXRob3V0XG4vLyBhIGtub3duIHZlcnNpb24gKG5ldmVyIHJlcG9ydGVkIGEgc2FtcGxlLCBvciByZXBvcnRlZCBhIHN0cmluZyB0aGF0IGRvZXNuJ3Rcbi8vIHBhcnNlKSBhcmUgc2tpcHBlZCBcdTIwMTQgd2UgZG9uJ3Qgd2FudCB0byBcInVwZ3JhZGVcIiBzb21ldGhpbmcgd2UgY2FuJ3QgaWRlbnRpZnkuXG5leHBvcnQgZnVuY3Rpb24gb3V0ZGF0ZWREZXZpY2VzKGRldmljZXMsIHNhbXBsZXMsIHRhcmdldCkge1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm4gW107XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgZm9yIChjb25zdCBkIG9mIGRldmljZXMpIHtcbiAgICAgICAgY29uc3QgcyA9IHNhbXBsZXM/LltkLmRldmljZV07XG4gICAgICAgIGNvbnN0IHYgPSBub3JtYWxpemVBZ2VudFZlcnNpb24ocz8uYWdlbnQ/LnZlcnNpb24pO1xuICAgICAgICBpZiAoIXYpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoY29tcGFyZUFnZW50VmVyc2lvbnModiwgdGFyZ2V0KSA+IDApIG91dC5wdXNoKGQpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgY29uc3QgVU5BU1NJR05FRF9QUk9EVUNUX0tFWSA9ICdfX3VuYXNzaWduZWRfXyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXZpY2VLaW5kQ291bnRzKGRldmljZXMpIHtcbiAgICBjb25zdCBtID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgZCBvZiBkZXZpY2VzKSB7XG4gICAgICAgIGNvbnN0IGtpbmQgPSBkLnByb2R1Y3QgfHwgVU5BU1NJR05FRF9QUk9EVUNUX0tFWTtcbiAgICAgICAgbS5zZXQoa2luZCwgKG0uZ2V0KGtpbmQpIHx8IDApICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBbLi4ubS5lbnRyaWVzKCldLnNvcnQoKGEsIGIpID0+IGJbMV0gLSBhWzFdKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VTdGRvdXQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gJy4vUGFuZWwuanN4JztcbmltcG9ydCB7IFNwYXJrbGluZSwgQmFyLCBjb2xvckZvclBjdCB9IGZyb20gJy4vU3BhcmtsaW5lLmpzeCc7XG5pbXBvcnQgeyB1c2VMb2dzIH0gZnJvbSAnLi4vaG9va3MvdXNlTG9ncy5qcyc7XG5pbXBvcnQgeyBkZXZpY2VIZWFsdGgsIG5vcm1hbGl6ZUFnZW50VmVyc2lvbiB9IGZyb20gJy4uL2xpYi9zdGF0dXMuanMnO1xuaW1wb3J0IHtcbiAgICBsZXZlbFBhc3Nlc1RocmVzaG9sZCxcbiAgICBwYXJzZUxvZ0xpbmUsXG59IGZyb20gJy4uLy4uLy4uL2xpYi9wcm9kdWN0L2xvZy1wcmVzZXRzLmpzJztcblxuY29uc3QgSElTVE9SWV9MRU4gPSA0MDtcblxuZnVuY3Rpb24gdXNlRGV2aWNlSGlzdG9yeShkZXZpY2VJZCwgc2FtcGxlKSB7XG4gICAgY29uc3QgaGlzdG9yeVJlZiA9IHVzZVJlZih7IGNwdTogW10sIG1lbTogW10sIHN3YXA6IFtdLCBkaXNrOiBbXSB9KTtcbiAgICBjb25zdCBsYXN0RGV2aWNlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IFssIHNldFRpY2tdID0gdXNlU3RhdGUoMCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAobGFzdERldmljZVJlZi5jdXJyZW50ICE9PSBkZXZpY2VJZCkge1xuICAgICAgICAgICAgaGlzdG9yeVJlZi5jdXJyZW50ID0geyBjcHU6IFtdLCBtZW06IFtdLCBzd2FwOiBbXSwgZGlzazogW10gfTtcbiAgICAgICAgICAgIGxhc3REZXZpY2VSZWYuY3VycmVudCA9IGRldmljZUlkO1xuICAgICAgICAgICAgc2V0VGljaygobikgPT4gbiArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2FtcGxlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHB1c2ggPSAoYXJyLCB2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdXQgPSBbLi4uYXJyLCB2ID09IG51bGwgPyBudWxsIDogTnVtYmVyKHYpXTtcbiAgICAgICAgICAgIHJldHVybiBvdXQubGVuZ3RoID4gSElTVE9SWV9MRU4gPyBvdXQuc2xpY2UoLUhJU1RPUllfTEVOKSA6IG91dDtcbiAgICAgICAgfTtcbiAgICAgICAgaGlzdG9yeVJlZi5jdXJyZW50ID0ge1xuICAgICAgICAgICAgY3B1OiBwdXNoKGhpc3RvcnlSZWYuY3VycmVudC5jcHUsIHNhbXBsZS5jcHU/LnVzYWdlKSxcbiAgICAgICAgICAgIG1lbTogcHVzaChoaXN0b3J5UmVmLmN1cnJlbnQubWVtLCBzYW1wbGUubWVtb3J5Py51c2FnZSksXG4gICAgICAgICAgICBzd2FwOiBwdXNoKGhpc3RvcnlSZWYuY3VycmVudC5zd2FwLCBzYW1wbGUubWVtb3J5Py5zd2FwPy51c2FnZSksXG4gICAgICAgICAgICBkaXNrOiBwdXNoKGhpc3RvcnlSZWYuY3VycmVudC5kaXNrLCBzYW1wbGUuZGlzaz8ucm9vdD8udXNhZ2UpLFxuICAgICAgICB9O1xuICAgICAgICBzZXRUaWNrKChuKSA9PiBuICsgMSk7XG4gICAgfSwgW2RldmljZUlkLCBzYW1wbGVdKTtcblxuICAgIHJldHVybiBoaXN0b3J5UmVmLmN1cnJlbnQ7XG59XG5cbi8vIENvbG9yIG1hcHBpbmcgZm9yIHBhcnNlZCBsb2cgbGV2ZWxzLiBLZXlzIGFyZSBub3JtYWxpemVkIChsb3dlcmNhc2UpLlxuLy8gQW55dGhpbmcgb3V0c2lkZSB0aGlzIHRhYmxlIGZhbGxzIGJhY2sgdG8gYHRoZW1lLmZnYCBzbyB1bmtub3duIGxldmVsc1xuLy8gZnJvbSBhIGN1c3RvbSBwYXR0ZXJuIHN0YXkgcmVhZGFibGUgaW5zdGVhZCBvZiBkaXNhcHBlYXJpbmcuXG5jb25zdCBMRVZFTF9TVFlMRSA9IHtcbiAgICB0cmFjZTogeyBjb2xvcjogdGhlbWUuZmdEaW0sIGJvbGQ6IGZhbHNlIH0sXG4gICAgdHJjOiB7IGNvbG9yOiB0aGVtZS5mZ0RpbSwgYm9sZDogZmFsc2UgfSxcbiAgICBkZWJ1ZzogeyBjb2xvcjogdGhlbWUuZmdEaW0sIGJvbGQ6IGZhbHNlIH0sXG4gICAgZGJnOiB7IGNvbG9yOiB0aGVtZS5mZ0RpbSwgYm9sZDogZmFsc2UgfSxcbiAgICBpbmZvOiB7IGNvbG9yOiB0aGVtZS5mZywgYm9sZDogZmFsc2UgfSxcbiAgICBpbmY6IHsgY29sb3I6IHRoZW1lLmZnLCBib2xkOiBmYWxzZSB9LFxuICAgIG5vdGljZTogeyBjb2xvcjogdGhlbWUuYWNjZW50LCBib2xkOiBmYWxzZSB9LFxuICAgIHdhcm46IHsgY29sb3I6IHRoZW1lLmFtYmVyLCBib2xkOiBmYWxzZSB9LFxuICAgIHdhcm5pbmc6IHsgY29sb3I6IHRoZW1lLmFtYmVyLCBib2xkOiBmYWxzZSB9LFxuICAgIHdybjogeyBjb2xvcjogdGhlbWUuYW1iZXIsIGJvbGQ6IGZhbHNlIH0sXG4gICAgZXJyb3I6IHsgY29sb3I6IHRoZW1lLnJlZCwgYm9sZDogZmFsc2UgfSxcbiAgICBlcnI6IHsgY29sb3I6IHRoZW1lLnJlZCwgYm9sZDogZmFsc2UgfSxcbiAgICBjcml0OiB7IGNvbG9yOiB0aGVtZS5yZWQsIGJvbGQ6IHRydWUgfSxcbiAgICBjcml0aWNhbDogeyBjb2xvcjogdGhlbWUucmVkLCBib2xkOiB0cnVlIH0sXG4gICAgZmF0YWw6IHsgY29sb3I6IHRoZW1lLnJlZCwgYm9sZDogdHJ1ZSB9LFxuICAgIGZhdDogeyBjb2xvcjogdGhlbWUucmVkLCBib2xkOiB0cnVlIH0sXG59O1xuXG5jb25zdCBMRVZFTF9QQUQgPSA1O1xuZnVuY3Rpb24gcGFkTGV2ZWwocykge1xuICAgIGlmIChzLmxlbmd0aCA+PSBMRVZFTF9QQUQpIHJldHVybiBzLnNsaWNlKDAsIExFVkVMX1BBRCk7XG4gICAgcmV0dXJuIHMgKyAnICcucmVwZWF0KExFVkVMX1BBRCAtIHMubGVuZ3RoKTtcbn1cblxuY29uc3QgRklMVEVSX0xBQkVMID0ge1xuICAgIGFsbDogbnVsbCxcbiAgICBpbmZvOiAnbGV2ZWwgXHUyMjY1IGluZm8nLFxuICAgIHdhcm46ICdsZXZlbCBcdTIyNjUgd2FybicsXG4gICAgZXJyb3I6ICdsZXZlbCBcdTIyNjUgZXJyb3InLFxufTtcblxuZnVuY3Rpb24gZm10Qnl0ZXMobikge1xuICAgIGlmIChuID09IG51bGwpIHJldHVybiAnXHUyMDE0JztcbiAgICBjb25zdCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgdiA9IE51bWJlcihuKTtcbiAgICB3aGlsZSAodiA+PSAxMDI0ICYmIGkgPCB1bml0cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHYgLz0gMTAyNDtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gYCR7di50b0ZpeGVkKHYgPj0gMTAgPyAwIDogMSl9ICR7dW5pdHNbaV19YDtcbn1cblxuZnVuY3Rpb24gZm10VXAoc2Vjcykge1xuICAgIGlmIChzZWNzID09IG51bGwpIHJldHVybiAnXHUyMDE0JztcbiAgICBjb25zdCBzID0gTWF0aC5mbG9vcihzZWNzKTtcbiAgICBjb25zdCBkID0gTWF0aC5mbG9vcihzIC8gODY0MDApO1xuICAgIGNvbnN0IGggPSBNYXRoLmZsb29yKChzICUgODY0MDApIC8gMzYwMCk7XG4gICAgY29uc3QgbSA9IE1hdGguZmxvb3IoKHMgJSAzNjAwKSAvIDYwKTtcbiAgICBpZiAoZCkgcmV0dXJuIGAke2R9ZCAke2h9aGA7XG4gICAgaWYgKGgpIHJldHVybiBgJHtofWggJHttfW1gO1xuICAgIHJldHVybiBgJHttfW1gO1xufVxuXG5mdW5jdGlvbiBNZXRyaWNSb3coeyBsYWJlbCwgdmFsdWUsIGNvbG9yLCBoaXN0b3J5LCBkZXRhaWwgfSkge1xuICAgIGNvbnN0IHZhbHVlQ29sb3IgPSBjb2xvckZvclBjdCh2YWx1ZSk7XG4gICAgY29uc3QgdmFsdWVUZXh0ID0gdmFsdWUgPT0gbnVsbCA/ICcgIFx1MjAxNCcgOiBgJHtNYXRoLnJvdW5kKHZhbHVlKS50b1N0cmluZygpLnBhZFN0YXJ0KDMpfSVgO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs2fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17NX0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiIG1hcmdpblJpZ2h0PXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dmFsdWVDb2xvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge3ZhbHVlVGV4dH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCYXIgdmFsdWU9e3ZhbHVlID8/IDB9IHdpZHRoPXsyOH0gY29sb3I9e3ZhbHVlQ29sb3J9IC8+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezF9PlxuICAgICAgICAgICAgICAgIDxTcGFya2xpbmUgc2VyaWVzPXtoaXN0b3J5fSB3aWR0aD17MjB9IGNvbG9yPXtjb2xvcn0gLz5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCBtYXJnaW5MZWZ0PXsyfSBmbGV4R3Jvdz17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtkZXRhaWwgfHwgJyd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIEFjdGlvbkJ0bih7IGssIGxhYmVsLCBkaXNhYmxlZCB9KSB7XG4gICAgY29uc3QgY29sb3IgPSBkaXNhYmxlZCA/IHRoZW1lLmZnRmFpbnQgOiB0aGVtZS5mZztcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IG1hcmdpblJpZ2h0PXsyfT5cbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtkaXNhYmxlZCA/IHRoZW1lLmZnRmFpbnQgOiB0aGVtZS5tYWdlbnRhfT57a308L1RleHQ+eycgJ31cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17Y29sb3J9PntsYWJlbH08L1RleHQ+XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGRvdEZvckhlYWx0aChoKSB7XG4gICAgaWYgKGggPT09ICdvbicpIHJldHVybiB7IGdseXBoOiAnXHUyNUNGJywgY29sb3I6IHRoZW1lLmxpbWUgfTtcbiAgICBpZiAoaCA9PT0gJ3dhcm4nKSByZXR1cm4geyBnbHlwaDogJ1x1MjVCMicsIGNvbG9yOiB0aGVtZS5hbWJlciB9O1xuICAgIGlmIChoID09PSAnYmFkJykgcmV0dXJuIHsgZ2x5cGg6ICdcdTI3MTUnLCBjb2xvcjogdGhlbWUucmVkIH07XG4gICAgcmV0dXJuIHsgZ2x5cGg6ICdcdTI1Q0InLCBjb2xvcjogdGhlbWUuZmdGYWludCB9O1xufVxuXG5mdW5jdGlvbiBTZXAoKSB7XG4gICAgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT57JyAgXHUwMEI3ICAnfTwvVGV4dD47XG59XG5cbi8vIFJlbmRlciBhIHNpbmdsZSBsb2cgbGluZS4gV2hlbiBgcGFyc2VkYCBpcyBub24tbnVsbCB0aGUgbGluZSBpcyBzcGxpdFxuLy8gaW50byB0aW1lIC8gbGV2ZWwgLyBtc2cgd2l0aCB0aGVtZS1hd2FyZSBjb2xvdXJzOyBvdGhlcndpc2UgdGhlIHJhd1xuLy8gdGV4dCBpcyBzaG93biBzbyB3ZSBuZXZlciBzaWxlbnRseSBkcm9wIGxpbmVzIHRoYXQgZGlkbid0IG1hdGNoIHRoZVxuLy8gcGF0dGVybiAobXVsdGktbGluZSBzdGFjayB0cmFjZXMsIGJhbm5lcnMsIGV0Yy4pLlxuZnVuY3Rpb24gTG9nTGluZVJvdyh7IHRleHQsIHBhcnNlZCB9KSB7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0ZXh0IHx8ICcgJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgeyB0aW1lLCBsZXZlbCwgbGV2ZWxfbm9ybTogbGV2ZWxOb3JtLCBtc2cgfSA9IHBhcnNlZDtcbiAgICBjb25zdCBzdHlsZSA9IGxldmVsTm9ybSA/IExFVkVMX1NUWUxFW2xldmVsTm9ybV0gOiBudWxsO1xuICAgIGNvbnN0IGxldmVsQ29sb3IgPSBzdHlsZT8uY29sb3IgfHwgdGhlbWUuZmc7XG4gICAgY29uc3QgbGV2ZWxCb2xkID0gISFzdHlsZT8uYm9sZDtcbiAgICAvLyBDcml0aWNhbC9mYXRhbCBsaW5lcyBhbHNvIHBhaW50IHRoZSBtZXNzYWdlIGluIHJlZCBzbyB0aGUgd2hvbGVcbiAgICAvLyBlbnRyeSBzdGFuZHMgb3V0LCBub3QganVzdCB0aGUgNS1jaGFyIGxldmVsIHNsb3QuXG4gICAgY29uc3QgbXNnUmVkID0gbGV2ZWxOb3JtID09PSAnZmF0YWwnIHx8IGxldmVsTm9ybSA9PT0gJ2NyaXRpY2FsJyB8fCBsZXZlbE5vcm0gPT09ICdjcml0JztcbiAgICBjb25zdCBtc2dDb2xvciA9IG1zZ1JlZCA/IHRoZW1lLnJlZCA6IHRoZW1lLmZnO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8VGV4dCB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAge3RpbWUgJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pnt0aW1lfSA8L1RleHQ+fVxuICAgICAgICAgICAgICAgIHtsZXZlbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtsZXZlbENvbG9yfSBib2xkPXtsZXZlbEJvbGR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3BhZExldmVsKGxldmVsLnRvVXBwZXJDYXNlKCkpfXsnICd9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXttc2dDb2xvcn0gYm9sZD17bGV2ZWxCb2xkICYmIG1zZ1JlZH0+XG4gICAgICAgICAgICAgICAgICAgIHttc2cgfHwgJyAnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERldmljZURldGFpbFBhbmVsKHtcbiAgICBkZXZpY2UsXG4gICAgc2FtcGxlLFxuICAgIGFsYXJtU2V2ZXJpdHksXG4gICAgcGF1c2VkLFxuICAgIGNsZWFyVG9rZW4sXG4gICAgZm9jdXNlZCxcbiAgICBsb2dTb3VyY2VzLFxuICAgIGFjdGl2ZVNvdXJjZSxcbiAgICBhY3RpdmVTb3VyY2VJbmRleCxcbiAgICBsZXZlbEZpbHRlciA9ICdhbGwnLFxuICAgIGZpbHRlckVuYWJsZWQgPSBmYWxzZSxcbn0pIHtcbiAgICBjb25zdCBpZCA9IGRldmljZT8uZGV2aWNlIHx8IG51bGw7XG4gICAgY29uc3Qgb25saW5lID0gISFkZXZpY2U/LmNvbm5lY3Rpb24/LmFjdGl2ZTtcbiAgICBjb25zdCBsYXRlc3QgPSBzYW1wbGUgfHwgbnVsbDtcbiAgICBjb25zdCBoaXN0b3J5ID0gdXNlRGV2aWNlSGlzdG9yeShpZCwgc2FtcGxlKTtcbiAgICBjb25zdCBtb25FcnJvciA9IG51bGw7XG4gICAgY29uc3Qgc291cmNlcyA9IGxvZ1NvdXJjZXM/LnNvdXJjZXMgfHwgW107XG4gICAgY29uc3Qgc291cmNlQ291bnQgPSBzb3VyY2VzLmxlbmd0aDtcbiAgICBjb25zdCBzb3VyY2VOYW1lID0gYWN0aXZlU291cmNlPy5uYW1lIHx8IG51bGw7XG4gICAgY29uc3Qgc291cmNlQ29tbWFuZCA9IGFjdGl2ZVNvdXJjZT8uY29tbWFuZCB8fCBudWxsO1xuICAgIGNvbnN0IHNvdXJjZVBhdHRlcm4gPSBhY3RpdmVTb3VyY2U/LnJlc29sdmVkUGF0dGVybiB8fCBudWxsO1xuICAgIC8vIENvbXBpbGUgdGhlIGFjdGl2ZSBwYXR0ZXJuIG9uY2UgcGVyIHNvdXJjZSBjaGFuZ2UuIGBudWxsYCBtZWFuc1xuICAgIC8vIFwicmVuZGVyIHJhd1wiIFx1MjAxNCBrZWVwcyB0aGUgcGFuZWwgY29tcGF0aWJsZSB3aXRoIHNvdXJjZXMgdGhhdFxuICAgIC8vIGRlY2xhcmUgbmVpdGhlciBhIHBhdHRlcm4gbm9yIGEgcHJlc2V0LlxuICAgIGNvbnN0IGNvbXBpbGVkUGF0dGVybiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIXNvdXJjZVBhdHRlcm4pIHJldHVybiBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoc291cmNlUGF0dGVybik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LCBbc291cmNlUGF0dGVybl0pO1xuICAgIGNvbnN0IHsgbGluZXMsIHN0YXR1czogbG9nU3RhdHVzLCBlcnJvcjogbG9nRXJyb3IsIGNsZWFyIH0gPSB1c2VMb2dzKHtcbiAgICAgICAgZGV2aWNlSWQ6IGlkLFxuICAgICAgICBvbmxpbmUsXG4gICAgICAgIHBhdXNlZCxcbiAgICAgICAgY29tbWFuZDogc291cmNlQ29tbWFuZCxcbiAgICB9KTtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gdXNlU3Rkb3V0KCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoY2xlYXJUb2tlbiA+IDApIGNsZWFyKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbY2xlYXJUb2tlbl0pO1xuXG4gICAgY29uc3QgaGVhbHRoID0gZGV2aWNlSGVhbHRoKGRldmljZSwgYWxhcm1TZXZlcml0eSk7XG4gICAgY29uc3QgZG90ID0gZG90Rm9ySGVhbHRoKGhlYWx0aCk7XG4gICAgY29uc3QgbWVtVXNlZCA9XG4gICAgICAgIGxhdGVzdD8ubWVtb3J5Py50b3RhbCAhPSBudWxsICYmIGxhdGVzdD8ubWVtb3J5Py5hdmFpbGFibGUgIT0gbnVsbFxuICAgICAgICAgICAgPyBsYXRlc3QubWVtb3J5LnRvdGFsIC0gbGF0ZXN0Lm1lbW9yeS5hdmFpbGFibGVcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICBjb25zdCBtZW1EZXRhaWwgPVxuICAgICAgICBtZW1Vc2VkICE9IG51bGwgJiYgbGF0ZXN0Py5tZW1vcnk/LnRvdGFsICE9IG51bGxcbiAgICAgICAgICAgID8gYCR7Zm10Qnl0ZXMobWVtVXNlZCl9IC8gJHtmbXRCeXRlcyhsYXRlc3QubWVtb3J5LnRvdGFsKX1gXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgY29uc3Qgc3dhcCA9IGxhdGVzdD8ubWVtb3J5Py5zd2FwO1xuICAgIGNvbnN0IGhhc1N3YXAgPSBzd2FwICYmIHN3YXAudG90YWwgIT0gbnVsbCAmJiBzd2FwLnRvdGFsID4gMDtcbiAgICBjb25zdCBzd2FwRGV0YWlsID0gaGFzU3dhcFxuICAgICAgICA/IGAke2ZtdEJ5dGVzKHN3YXAudG90YWwgLSAoc3dhcC5mcmVlID8/IDApKX0gLyAke2ZtdEJ5dGVzKHN3YXAudG90YWwpfWBcbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGRpc2tEZXRhaWwgPVxuICAgICAgICBsYXRlc3Q/LmRpc2s/LnJvb3Q/LmF2YWlsYWJsZSAhPSBudWxsICYmIGxhdGVzdD8uZGlzaz8ucm9vdD8udG90YWwgIT0gbnVsbFxuICAgICAgICAgICAgPyBgJHtmbXRCeXRlcyhsYXRlc3QuZGlzay5yb290LnRvdGFsIC0gbGF0ZXN0LmRpc2sucm9vdC5hdmFpbGFibGUpfSAvICR7Zm10Qnl0ZXMobGF0ZXN0LmRpc2sucm9vdC50b3RhbCl9YFxuICAgICAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGxvYWQgPSBsYXRlc3Q/LmxvYWRcbiAgICAgICAgPyBbbGF0ZXN0LmxvYWRbJzFtJ10sIGxhdGVzdC5sb2FkWyc1bSddLCBsYXRlc3QubG9hZFsnMTVtJ11dXG4gICAgICAgICAgICAgIC5tYXAoKHYpID0+ICh2ICE9IG51bGwgPyB2LnRvRml4ZWQoMikgOiAnXHUyMDE0JykpXG4gICAgICAgICAgICAgIC5qb2luKCcgLyAnKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBjb25zdCBpcCA9IGRldmljZT8uY29ubmVjdGlvbj8uaXBfYWRkcmVzcyB8fCBudWxsO1xuICAgIGNvbnN0IHByb3RvID0gZGV2aWNlPy5jb25uZWN0aW9uPy5wcm90b2NvbCB8fCBudWxsO1xuICAgIGNvbnN0IGFnZW50ViA9IG5vcm1hbGl6ZUFnZW50VmVyc2lvbihsYXRlc3Q/LmFnZW50Py52ZXJzaW9uKSB8fCAnXHUyMDE0JztcbiAgICBjb25zdCB0ZW1wID0gbGF0ZXN0Py5jcHU/LnRlbXBlcmF0dXJlO1xuICAgIC8vIENocm9tZSBpbnNpZGUgdGhlIHBhbmVsOiB0aXRsZSAoMSkgKyBpZGVudGl0eSAoMSkgKyBtZXRhK2dhcCAoMikgK1xuICAgIC8vIG1ldHJpY3Mgcm93cyAoMyBvciA0IGlmIHN3YXApICsgYWN0aW9ucytnYXAgKDIpICsgam91cm5hbCBoZWFkZXIrZ2FwICgyKSArXG4gICAgLy8gcGFuZWwgYm9yZGVycyAoMikuIFBsdXMgZGFzaGJvYXJkIGhlYWRlcitmb290ZXIgKDIpLiBUb3RhbCBcdTIyNDggMTUgKCsxIHN3YXApLlxuICAgIGNvbnN0IGNocm9tZVJlc2VydmUgPSAxNSArIChoYXNTd2FwID8gMSA6IDApO1xuICAgIGNvbnN0IGxvZ0hlaWdodCA9IE1hdGgubWF4KDQsIChzdGRvdXQ/LnJvd3MgfHwgNDApIC0gY2hyb21lUmVzZXJ2ZSk7XG5cbiAgICAvLyBQYXJzZSArIGZpbHRlciBvbmNlIHNvIHRoZSBzbGljZSB0aGF0IGZpbGxzIHRoZSB2aXNpYmxlIHdpbmRvd1xuICAgIC8vIGFscmVhZHkgYWNjb3VudHMgZm9yIGhpZGRlbiBsaW5lcy4gV2UgZG9uJ3Qgd2FudCBhIGB3YXJuK2AgZmlsdGVyXG4gICAgLy8gdG8gbGVhdmUgdGhlIHBhbmVsIGhhbGYtZW1wdHkgd2hlbiBtb3N0IGxpbmVzIHdlcmUgYGluZm9gLlxuICAgIGNvbnN0IHBhcnNlZExpbmVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiBsaW5lcy5tYXAoKGxuKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUxvZ0xpbmUobG4udGV4dCwgY29tcGlsZWRQYXR0ZXJuKTtcbiAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IGxuLCBwYXJzZWQgfTtcbiAgICAgICAgfSk7XG4gICAgfSwgW2xpbmVzLCBjb21waWxlZFBhdHRlcm5dKTtcbiAgICBjb25zdCBmaWx0ZXJlZExpbmVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChsZXZlbEZpbHRlciA9PT0gJ2FsbCcpIHJldHVybiBwYXJzZWRMaW5lcztcbiAgICAgICAgcmV0dXJuIHBhcnNlZExpbmVzLmZpbHRlcigocCkgPT5cbiAgICAgICAgICAgIGxldmVsUGFzc2VzVGhyZXNob2xkKHAucGFyc2VkPy5sZXZlbF9ub3JtLCBsZXZlbEZpbHRlciksXG4gICAgICAgICk7XG4gICAgfSwgW3BhcnNlZExpbmVzLCBsZXZlbEZpbHRlcl0pO1xuICAgIGNvbnN0IHZpc2libGVMb2dzID0gZmlsdGVyZWRMaW5lcy5zbGljZSgtbG9nSGVpZ2h0KTtcblxuICAgIGNvbnN0IGxvZ1N0YXR1c0xhYmVsID0gKCgpID0+IHtcbiAgICAgICAgaWYgKCFpZCkgcmV0dXJuIHsgdGV4dDogJ3NlbGVjdCBhIGRldmljZScsIGNvbG9yOiB0aGVtZS5mZ0RpbSB9O1xuICAgICAgICBpZiAoIW9ubGluZSkgcmV0dXJuIHsgdGV4dDogJ2RldmljZSBvZmZsaW5lJywgY29sb3I6IHRoZW1lLmZnRGltIH07XG4gICAgICAgIGlmIChsb2dFcnJvcikgcmV0dXJuIHsgdGV4dDogbG9nRXJyb3IsIGNvbG9yOiB0aGVtZS5yZWQgfTtcbiAgICAgICAgaWYgKHBhdXNlZCkgcmV0dXJuIHsgdGV4dDogJ3BhdXNlZCcsIGNvbG9yOiB0aGVtZS5hbWJlciB9O1xuICAgICAgICBpZiAobG9nU3RhdHVzID09PSAnY29ubmVjdGluZycpIHJldHVybiB7IHRleHQ6ICdjb25uZWN0aW5nXHUyMDI2JywgY29sb3I6IHRoZW1lLmZnRGltIH07XG4gICAgICAgIGlmIChsb2dTdGF0dXMgPT09ICdzdHJlYW1pbmcnKSByZXR1cm4geyB0ZXh0OiAnbGl2ZScsIGNvbG9yOiB0aGVtZS5saW1lIH07XG4gICAgICAgIGlmIChsb2dTdGF0dXMgPT09ICdlbmRlZCcpIHJldHVybiB7IHRleHQ6ICdlbmRlZCcsIGNvbG9yOiB0aGVtZS5mZ0RpbSB9O1xuICAgICAgICByZXR1cm4geyB0ZXh0OiBsb2dTdGF0dXMsIGNvbG9yOiB0aGVtZS5mZ0RpbSB9O1xuICAgIH0pKCk7XG5cbiAgICBpZiAoIWRldmljZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFBhbmVsIHRpdGxlPVwiREVWSUNFXCIgZm9jdXNlZD17Zm9jdXNlZH0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PnNlbGVjdCBhIGRldmljZSBvbiB0aGUgbGVmdDwvVGV4dD5cbiAgICAgICAgICAgIDwvUGFuZWw+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZnJpZW5kbHlOYW1lID0gZGV2aWNlLm5hbWUgfHwgaXAgfHwgbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxQYW5lbFxuICAgICAgICAgICAgdGl0bGU9XCJERVZJQ0VcIlxuICAgICAgICAgICAgc3ViPXtkZXZpY2UuZGV2aWNlfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHJpZ2h0PXtcbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAge3Byb3RvICYmIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+e3Byb3RvfSA8L1RleHQ+fVxuICAgICAgICAgICAgICAgICAgICB7aXAgJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57aXB9PC9UZXh0Pn1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICAgIHsvKiBJZGVudGl0eSBsaW5lICovfVxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17ZG90LmNvbG9yfT57ZG90LmdseXBofSA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e29ubGluZSA/IHRoZW1lLmZnIDogdGhlbWUuZmdEaW19IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtkZXZpY2UuZGV2aWNlfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICB7ZnJpZW5kbHlOYW1lICYmIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZXAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+e2ZyaWVuZGx5TmFtZX08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAgey8qIE1ldGEgbGluZSAqL31cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luQm90dG9tPXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+YWdlbnQgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2FnZW50Vn08L1RleHQ+XG4gICAgICAgICAgICAgICAgPFNlcCAvPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT51cCA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57Zm10VXAobGF0ZXN0Py51cHRpbWUpfTwvVGV4dD5cbiAgICAgICAgICAgICAgICB7bG9hZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VwIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+bG9hZCA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9Pntsb2FkfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7LyogTWV0cmljcywgb25lIHJvdyBlYWNoLCBhbGlnbmVkIGluIGNvbHVtbnMgKi99XG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8TWV0cmljUm93XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQ1BVXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2xhdGVzdD8uY3B1Py51c2FnZX1cbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeT17aGlzdG9yeS5jcHV9XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXt0aGVtZS5hY2NlbnR9XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbD17XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3Q/LmNwdT8uY29yZXMgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7bGF0ZXN0LmNwdS5jb3Jlc30gY29yZSR7bGF0ZXN0LmNwdS5jb3JlcyA9PT0gMSA/ICcnIDogJ3MnfSR7dGVtcCAhPSBudWxsID8gYCBcdTAwQjcgJHt0ZW1wLnRvRml4ZWQoMSl9XHUwMEIwQ2AgOiAnJ31gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8TWV0cmljUm93XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiTUVNXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2xhdGVzdD8ubWVtb3J5Py51c2FnZX1cbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeT17aGlzdG9yeS5tZW19XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXt0aGVtZS5tYWdlbnRhfVxuICAgICAgICAgICAgICAgICAgICBkZXRhaWw9e21lbURldGFpbCB8fCAnJ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNTd2FwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPE1ldHJpY1Jvd1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJTV0FQXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzd2FwLnVzYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeT17aGlzdG9yeS5zd2FwfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e3RoZW1lLmFtYmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsPXtzd2FwRGV0YWlsIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPE1ldHJpY1Jvd1xuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkRJU0tcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bGF0ZXN0Py5kaXNrPy5yb290Py51c2FnZX1cbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeT17aGlzdG9yeS5kaXNrfVxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17dGhlbWUubGltZX1cbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsPXtkaXNrRGV0YWlsIHx8ICcnfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAge21vbkVycm9yICYmICFsYXRlc3QgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnJlZH0+e21vbkVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWxhdGVzdCAmJiBvbmxpbmUgJiYgIW1vbkVycm9yICYmIChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+d2FpdGluZyBmb3IgbW9uaXRvcmluZyBzYW1wbGVcdTIwMjY8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7LyogUXVpY2sgYWN0aW9ucyAqL31cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICA8QWN0aW9uQnRuIGs9XCJlbnRlclwiIGxhYmVsPVwic3NoXCIgZGlzYWJsZWQ9eyFvbmxpbmV9IC8+XG4gICAgICAgICAgICAgICAgPEFjdGlvbkJ0biBrPVwicFwiIGxhYmVsPVwicGF1c2UgbG9nc1wiIC8+XG4gICAgICAgICAgICAgICAgPEFjdGlvbkJ0biBrPVwiY1wiIGxhYmVsPVwiY2xlYXIgbG9nc1wiIC8+XG4gICAgICAgICAgICAgICAgPEFjdGlvbkJ0biBrPVwiclwiIGxhYmVsPVwicmVkZXBsb3lcIiBkaXNhYmxlZCAvPlxuICAgICAgICAgICAgICAgIDxBY3Rpb25CdG4gaz1cInhcIiBsYWJlbD1cInJlYm9vdFwiIGRpc2FibGVkIC8+XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAgey8qIExvZ3MgKi99XG4gICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0ganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57c291cmNlTmFtZSB8fCAnbG9ncyd9IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PnRhaWwgXHUwMEI3IHtkZXZpY2UuZGV2aWNlfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge3NvdXJjZUNvdW50ID4gMSAmJiBhY3RpdmVTb3VyY2VJbmRleCA+PSAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcCAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FjdGl2ZVNvdXJjZUluZGV4ICsgMX0ve3NvdXJjZUNvdW50fXsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5tYWdlbnRhfT5sPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtmaWx0ZXJFbmFibGVkICYmIEZJTFRFUl9MQUJFTFtsZXZlbEZpbHRlcl0gJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VwIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLm1hZ2VudGF9PntGSUxURVJfTEFCRUxbbGV2ZWxGaWx0ZXJdfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7IWZpbHRlckVuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VwIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PnNldCBhIHBhdHRlcm4gdG8gZmlsdGVyIGJ5IGxldmVsPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2xvZ1N0YXR1c0xhYmVsLmNvbG9yfT5cdTI1Q0Yge2xvZ1N0YXR1c0xhYmVsLnRleHR9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBmbGV4R3Jvdz17MX0+XG4gICAgICAgICAgICAgICAge3Zpc2libGVMb2dzLmxlbmd0aCA9PT0gMCAmJiBvbmxpbmUgJiYgIWxvZ0Vycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PndhaXRpbmcgZm9yIGxvZyBzdHJlYW1cdTIwMjY8L1RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7dmlzaWJsZUxvZ3MubWFwKCh7IGxpbmUsIHBhcnNlZCB9LCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxMb2dMaW5lUm93XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2ZpbHRlcmVkTGluZXMubGVuZ3RoIC0gdmlzaWJsZUxvZ3MubGVuZ3RoICsgaX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD17bGluZS50ZXh0fVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkPXtwYXJzZWR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9QYW5lbD5cbiAgICApO1xufVxuIiwgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVEZXZpY2VBUEkgfSBmcm9tICcuLi8uLi8uLi9saWIvZGV2aWNlLWFwaS5qcyc7XG5pbXBvcnQgeyBGQUxMQkFDS19MT0dTX0NPTU1BTkQgfSBmcm9tICcuLi8uLi8uLi9saWIvcHJvZHVjdC9sb2dzLmpzJztcblxuY29uc3QgTUFYX0xJTkVTID0gNTAwO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTG9ncyh7IGRldmljZUlkLCBvbmxpbmUsIHBhdXNlZCwgY29tbWFuZCB9KSB7XG4gICAgY29uc3QgW2xpbmVzLCBzZXRMaW5lc10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3N0YXR1cywgc2V0U3RhdHVzXSA9IHVzZVN0YXRlKCdpZGxlJyk7IC8vIGlkbGUgfCBjb25uZWN0aW5nIHwgc3RyZWFtaW5nIHwgZW5kZWQgfCBlcnJvclxuICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgYnVmZmVyUmVmID0gdXNlUmVmKFtdKTtcbiAgICBjb25zdCByZW1haW5kZXJSZWYgPSB1c2VSZWYoJycpO1xuXG4gICAgY29uc3QgY2xlYXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGJ1ZmZlclJlZi5jdXJyZW50ID0gW107XG4gICAgICAgIHJlbWFpbmRlclJlZi5jdXJyZW50ID0gJyc7XG4gICAgICAgIHNldExpbmVzKFtdKTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBlZmZlY3RpdmVDbWQgPSBjb21tYW5kIHx8IEZBTExCQUNLX0xPR1NfQ09NTUFORDtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGJ1ZmZlclJlZi5jdXJyZW50ID0gW107XG4gICAgICAgIHJlbWFpbmRlclJlZi5jdXJyZW50ID0gJyc7XG4gICAgICAgIHNldExpbmVzKFtdKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgaWYgKCFkZXZpY2VJZCkge1xuICAgICAgICAgICAgc2V0U3RhdHVzKCdpZGxlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvbmxpbmUpIHtcbiAgICAgICAgICAgIHNldFN0YXR1cygnaWRsZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXVzZWQpIHtcbiAgICAgICAgICAgIHNldFN0YXR1cygnaWRsZScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNhbmNlbEZuID0gbnVsbDtcbiAgICAgICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICBzZXRTdGF0dXMoJ2Nvbm5lY3RpbmcnKTtcblxuICAgICAgICBmdW5jdGlvbiBwdXNoQ2h1bmsoY2h1bmssIHN0cmVhbUxhYmVsKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gcmVtYWluZGVyUmVmLmN1cnJlbnQgKyBjaHVuaztcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICByZW1haW5kZXJSZWYuY3VycmVudCA9IHBhcnRzLnBvcCgpID8/ICcnO1xuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5idWZmZXJSZWYuY3VycmVudF07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxuIG9mIHBhcnRzKSB7XG4gICAgICAgICAgICAgICAgbmV4dC5wdXNoKHsgdGV4dDogbG4sIHN0cmVhbTogc3RyZWFtTGFiZWwgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dC5sZW5ndGggPiBNQVhfTElORVMpIG5leHQuc3BsaWNlKDAsIG5leHQubGVuZ3RoIC0gTUFYX0xJTkVTKTtcbiAgICAgICAgICAgIGJ1ZmZlclJlZi5jdXJyZW50ID0gbmV4dDtcbiAgICAgICAgICAgIHNldExpbmVzKG5leHQpO1xuICAgICAgICAgICAgc2V0U3RhdHVzKCdzdHJlYW1pbmcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGNyZWF0ZURldmljZUFQSShkZXZpY2VJZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpLmV4ZWNTdHJlYW0oZWZmZWN0aXZlQ21kLCB7XG4gICAgICAgICAgICAgICAgICAgIG9uU3Rkb3V0OiAocykgPT4gIWNhbmNlbGxlZCAmJiBwdXNoQ2h1bmsocywgJ291dCcpLFxuICAgICAgICAgICAgICAgICAgICBvblN0ZGVycjogKHMpID0+ICFjYW5jZWxsZWQgJiYgcHVzaENodW5rKHMsICdlcnInKSxcbiAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6IChmbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRm4gPSBmbjtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50aW1lZE91dCkgc2V0RXJyb3IoJ2xvZyBzdHJlYW0gdGltZWQgb3V0Jyk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LmV4aXRDb2RlICE9IG51bGwgJiYgcmVzdWx0LmV4aXRDb2RlICE9PSAwKVxuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihgbG9nIHN0cmVhbSBleGl0ZWQgd2l0aCBjb2RlICR7cmVzdWx0LmV4aXRDb2RlfWApO1xuICAgICAgICAgICAgICAgIHNldFN0YXR1cygnZW5kZWQnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlIHx8IFN0cmluZyhlKSk7XG4gICAgICAgICAgICAgICAgc2V0U3RhdHVzKCdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGNhbmNlbEZuKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsRm4oKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtkZXZpY2VJZCwgb25saW5lLCBwYXVzZWQsIGVmZmVjdGl2ZUNtZF0pO1xuXG4gICAgcmV0dXJuIHsgbGluZXMsIHN0YXR1cywgZXJyb3IsIGNsZWFyIH07XG59XG4iLCAiaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICcuLi9saWIvZm9jdXMuanMnO1xuXG5jb25zdCBQQUdFID0gMTI7XG5cbmNvbnN0IEhJTlQgPSBbXG4gICAgeyBrOiAnXHUyMTkxXHUyMTkzJywgbGFiZWw6ICdtb3ZlJyB9LFxuICAgIHsgazogJ2VudGVyJywgbGFiZWw6ICdwaWNrJyB9LFxuICAgIHsgazogJ2VzYycsIGxhYmVsOiAnY2FuY2VsJyB9LFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIERldmljZVBpY2tlck1vZGFsKHsgdGl0bGUsIGRldmljZXMsIG9uU2VsZWN0LCBvbkNhbmNlbCB9KSB7XG4gICAgY29uc3Qgc29ydGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiBbLi4uKGRldmljZXMgfHwgW10pXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbyA9IGEuY29ubmVjdGlvbj8uYWN0aXZlID8gMCA6IDE7XG4gICAgICAgICAgICBjb25zdCBibyA9IGIuY29ubmVjdGlvbj8uYWN0aXZlID8gMCA6IDE7XG4gICAgICAgICAgICBpZiAoYW8gIT09IGJvKSByZXR1cm4gYW8gLSBibztcbiAgICAgICAgICAgIHJldHVybiAoYS5kZXZpY2UgfHwgJycpLmxvY2FsZUNvbXBhcmUoYi5kZXZpY2UgfHwgJycpO1xuICAgICAgICB9KTtcbiAgICB9LCBbZGV2aWNlc10pO1xuXG4gICAgY29uc3QgW2ZpbHRlciwgc2V0RmlsdGVyXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gdXNlU3RhdGUoMCk7XG5cbiAgICBjb25zdCBmaWx0ZXJlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIWZpbHRlcikgcmV0dXJuIHNvcnRlZDtcbiAgICAgICAgY29uc3QgcSA9IGZpbHRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gc29ydGVkLmZpbHRlcihcbiAgICAgICAgICAgIChkKSA9PlxuICAgICAgICAgICAgICAgIGQuZGV2aWNlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkgfHxcbiAgICAgICAgICAgICAgICAoZC5uYW1lICYmIGQubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpKSxcbiAgICAgICAgKTtcbiAgICB9LCBbc29ydGVkLCBmaWx0ZXJdKTtcblxuICAgIGNvbnN0IGVmZmVjdGl2ZUN1cnNvciA9IE1hdGgubWluKGN1cnNvciwgTWF0aC5tYXgoMCwgZmlsdGVyZWQubGVuZ3RoIC0gMSkpO1xuICAgIGNvbnN0IHZpZXdTdGFydCA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICBNYXRoLm1pbihlZmZlY3RpdmVDdXJzb3IgLSBNYXRoLmZsb29yKFBBR0UgLyAyKSwgTWF0aC5tYXgoMCwgZmlsdGVyZWQubGVuZ3RoIC0gUEFHRSkpLFxuICAgICk7XG4gICAgY29uc3Qgdmlld1NsaWNlID0gZmlsdGVyZWQuc2xpY2Uodmlld1N0YXJ0LCB2aWV3U3RhcnQgKyBQQUdFKTtcblxuICAgIHVzZU1vZGFsKFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS5lc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBvbkNhbmNlbD8uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaWNrID0gZmlsdGVyZWRbZWZmZWN0aXZlQ3Vyc29yXTtcbiAgICAgICAgICAgICAgICBpZiAocGljaykgb25TZWxlY3Q/LihwaWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5LnVwQXJyb3cpIHtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IE1hdGgubWF4KDAsIGMgLSAxKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoKGMpID0+IE1hdGgubWluKGZpbHRlcmVkLmxlbmd0aCAtIDEsIGMgKyAxKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5iYWNrc3BhY2UgfHwga2V5LmRlbGV0ZSkge1xuICAgICAgICAgICAgICAgIHNldEZpbHRlcigoZikgPT4gZi5zbGljZSgwLCAtMSkpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigwKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgJiYgIWtleS5jdHJsICYmICFrZXkubWV0YSAmJiBpbnB1dC5sZW5ndGggPT09IDEgJiYgaW5wdXQgPj0gJyAnKSB7XG4gICAgICAgICAgICAgICAgc2V0RmlsdGVyKChmKSA9PiBmICsgaW5wdXQpO1xuICAgICAgICAgICAgICAgIHNldEN1cnNvcigwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBoaW50OiBISU5UIH0sXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3hcbiAgICAgICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICAgICAgYm9yZGVyQ29sb3I9e3RoZW1lLmJvcmRlckZvY3VzfVxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yPXt0aGVtZS5vdmVybGF5Qmd9XG4gICAgICAgICAgICBwYWRkaW5nWD17Mn1cbiAgICAgICAgICAgIHBhZGRpbmdZPXsxfVxuICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgICAgICB3aWR0aD17NjR9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luQm90dG9tPXsxfSBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7dGl0bGUgfHwgJ1BJQ0sgQSBERVZJQ0UnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PlxuICAgICAgICAgICAgICAgICAgICB7ZmlsdGVyZWQubGVuZ3RofS97c29ydGVkLmxlbmd0aH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ZmlsdGVyOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57ZmlsdGVyIHx8ICcgJ308L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0gaW52ZXJzZT5cbiAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cblxuICAgICAgICAgICAge2ZpbHRlcmVkLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pm5vIG1hdGNoaW5nIGRldmljZXM8L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3ZpZXdTbGljZS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnNJZHggPSB2aWV3U3RhcnQgKyBpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRm9jdXNlZCA9IGFic0lkeCA9PT0gZWZmZWN0aXZlQ3Vyc29yO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ubGluZSA9ICEhZC5jb25uZWN0aW9uPy5hY3RpdmU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e2QuZGV2aWNlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtpc0ZvY3VzZWQgPyB0aGVtZS5hY2NlbnQgOiB0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzRm9jdXNlZCA/ICdcdTI1QjYnIDogJyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e29ubGluZSA/IHRoZW1lLmxpbWUgOiB0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29ubGluZSA/ICdcdTI1Q0YnIDogJ1x1MjVDQid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17aXNGb2N1c2VkID8gdGhlbWUuZmcgOiB0aGVtZS5mZ0RpbX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9sZD17aXNGb2N1c2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwPVwidHJ1bmNhdGUtZW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkLmRldmljZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2QubmFtZSA/IGAgICgke2QubmFtZX0pYCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19Plx1MjE5MVx1MjE5MyBtb3ZlIFx1MDBCNyBlbnRlciBwaWNrIFx1MDBCNyBlc2MgY2FuY2VsPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG4iLCAiaW1wb3J0IFJlYWN0LCB7XG4gICAgY3JlYXRlQ29udGV4dCxcbiAgICB1c2VDYWxsYmFjayxcbiAgICB1c2VDb250ZXh0LFxuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VNZW1vLFxuICAgIHVzZVJlZixcbiAgICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSW5wdXQgfSBmcm9tICdpbmsnO1xuXG4vLyBTaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBcIndoYXQgaXMgZm9jdXNlZFwiIGFuZCBcIndoYXQgb3ZlcmxheXMgb3duIGlucHV0XCIuXG4vL1xuLy8gVHdvIHByaW1pdGl2ZXM6XG4vLyAgIHVzZUZvY3VzYWJsZSh7IGlkLCBwYXJlbnQsIGhhbmRsZXJzLCBoaW50LCB3aGVuIH0pIFx1MjAxNCByZWdpc3RlcnMgYW5cbi8vICAgICBpbnRlcmFjdGl2ZSBhcmVhLiBgcGFyZW50YCBncm91cHMgZm9jdXNhYmxlcyAoZS5nLiBhbGwgcGFuZWxzIG9mIHRoZVxuLy8gICAgIG92ZXJ2aWV3IHRhYik7IG9ubHkgb25lIGZvY3VzYWJsZSBwZXIgZ3JvdXAgaXMgZm9jdXNlZCBhdCBhIHRpbWUuXG4vLyAgIHVzZU1vZGFsKGhhbmRsZXIsIHsgd2hlbiwgaGludCB9KSBcdTIwMTQgcHVzaGVzIG9udG8gYSBtb2RhbCBzdGFjay4gV2hpbGVcbi8vICAgICBhbnl0aGluZyBpcyBvbiB0aGUgc3RhY2ssIG5vIHVzZUZvY3VzYWJsZSBoYW5kbGVycyBydW47IHRoZSB0b3Btb3N0XG4vLyAgICAgbW9kYWwgb3ducyBpbnB1dCBhbmQgaXRzIGhpbnRzIHN1cmZhY2UgaW4gdGhlIGZvb3Rlci5cbi8vXG4vLyBgdXNlVGFiQ3ljbGUocGFyZW50KWAgbW91bnRzIG9uY2UgbmVhciB0aGUgZ3JvdXAgcm9vdCBhbmQgaGFuZGxlc1xuLy8gdGFiL3NoaWZ0LXRhYi4gYHVzZUZvY3VzSGludHMocGFyZW50KWAgZXhwb3NlcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBoaW50c1xuLy8gdG8gdGhlIGZvb3RlciBcdTIwMTQgbm8gc3RhdGljIGhpbnQgdGFibGUgdG8gbWFpbnRhaW4gYWxvbmdzaWRlIGhhbmRsZXJzLlxuLy9cbi8vIEludGVybmFsbHkgd2Ugc3BsaXQgdGhlIGNvbnRleHQgaW4gdHdvIHNvIHRoYXQ6XG4vLyAgIC0gRGlzcGF0Y2hDdHggaG9sZHMgc3RhYmxlIGNhbGxiYWNrcyAocmVnaXN0ZXIsIGZvY3VzLCBjeWNsZSwgLi4uKS5cbi8vICAgICBDb21wb25lbnRzIGRlcGVuZGluZyBvbmx5IG9uIHRoZXNlIChlZmZlY3RzIHRoYXQgcmVnaXN0ZXIvdW5yZWdpc3Rlcilcbi8vICAgICBkb24ndCByZS1ydW4gd2hlbiBmb2N1cyBjaGFuZ2VzLlxuLy8gICAtIFNpZ25hbEN0eCBleHBvc2VzIGEgdGljayB0aGF0IGZsaXBzIG9uIGV2ZXJ5IGZvY3VzIGNoYW5nZS4gQ29tcG9uZW50c1xuLy8gICAgIHJlYWRpbmcgZm9jdXMgc3RhdGUgKHNlbGVjdG9ycykgc3Vic2NyaWJlIHRvIHRoaXMgY3R4IGFuZCByZS1yZW5kZXJcbi8vICAgICB3aGVuIHRoZSB0aWNrIGFkdmFuY2VzLlxuXG5jb25zdCBEaXNwYXRjaEN0eCA9IGNyZWF0ZUNvbnRleHQobnVsbCk7XG5jb25zdCBTaWduYWxDdHggPSBjcmVhdGVDb250ZXh0KDApO1xuXG5mdW5jdGlvbiB1c2VEaXNwYXRjaCgpIHtcbiAgICBjb25zdCBkID0gdXNlQ29udGV4dChEaXNwYXRjaEN0eCk7XG4gICAgaWYgKCFkKSB0aHJvdyBuZXcgRXJyb3IoJ0ZvY3VzUHJvdmlkZXIgbWlzc2luZyBcdTIwMTQgd3JhcCB0aGUgZGFzaGJvYXJkIHRyZWUuJyk7XG4gICAgcmV0dXJuIGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGb2N1c1Byb3ZpZGVyKHsgY2hpbGRyZW4gfSkge1xuICAgIGNvbnN0IGZvY3VzYWJsZXNSZWYgPSB1c2VSZWYobmV3IE1hcCgpKTsgLy8gaWQgXHUyMTkyIHsgaWQsIHBhcmVudCwgaGFuZGxlcnNSZWYsIGhpbnRSZWYsIG9yZGVyIH1cbiAgICBjb25zdCBmb2N1c2VkUmVmID0gdXNlUmVmKG5ldyBNYXAoKSk7IC8vIHBhcmVudCBcdTIxOTIgaWRcbiAgICBjb25zdCBtb2RhbHNSZWYgPSB1c2VSZWYoW10pOyAvLyBbeyBoYW5kbGVyUmVmLCBoaW50UmVmIH1dXG4gICAgY29uc3Qgb3JkZXJSZWYgPSB1c2VSZWYoMCk7XG4gICAgY29uc3QgW3RpY2ssIHNldFRpY2tdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgcmVyZW5kZXIgPSB1c2VDYWxsYmFjaygoKSA9PiBzZXRUaWNrKCh0KSA9PiB0ICsgMSksIFtdKTtcblxuICAgIC8vIERpc3BhdGNoIGlzIHN0YWJsZSBcdTIwMTQgcmVmZXJlbmNpbmcgb25seSBgcmVyZW5kZXJgIHdoaWNoIGlzIGl0c2VsZlxuICAgIC8vIHN0YWJsZS4gRWZmZWN0cyB0aGF0IGRlcGVuZCBvbiBkaXNwYXRjaCBkb24ndCByZS1ydW4gb24gZm9jdXNcbiAgICAvLyBjaGFuZ2VzOyBvbmx5IG9uIHByb3ZpZGVyIG1vdW50LlxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdGVyID0gKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICBmb2N1c2FibGVzUmVmLmN1cnJlbnQuc2V0KGVudHJ5LmlkLCB7XG4gICAgICAgICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgICAgICAgb3JkZXI6IG9yZGVyUmVmLmN1cnJlbnQrKyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFmb2N1c2VkUmVmLmN1cnJlbnQuaGFzKGVudHJ5LnBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICBmb2N1c2VkUmVmLmN1cnJlbnQuc2V0KGVudHJ5LnBhcmVudCwgZW50cnkuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVyZW5kZXIoKTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9jdXNhYmxlc1JlZi5jdXJyZW50LmRlbGV0ZShlbnRyeS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKGZvY3VzZWRSZWYuY3VycmVudC5nZXQoZW50cnkucGFyZW50KSA9PT0gZW50cnkuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2libGluZyA9IFsuLi5mb2N1c2FibGVzUmVmLmN1cnJlbnQudmFsdWVzKCldLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZSkgPT4gZS5wYXJlbnQgPT09IGVudHJ5LnBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmcpIGZvY3VzZWRSZWYuY3VycmVudC5zZXQoZW50cnkucGFyZW50LCBzaWJsaW5nLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBmb2N1c2VkUmVmLmN1cnJlbnQuZGVsZXRlKGVudHJ5LnBhcmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcmVuZGVyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGZvY3VzID0gKGlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGZvY3VzYWJsZXNSZWYuY3VycmVudC5nZXQoaWQpO1xuICAgICAgICAgICAgaWYgKCFlbnRyeSkgcmV0dXJuO1xuICAgICAgICAgICAgZm9jdXNlZFJlZi5jdXJyZW50LnNldChlbnRyeS5wYXJlbnQsIGlkKTtcbiAgICAgICAgICAgIHJlcmVuZGVyKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY3ljbGUgPSAoZGlyZWN0aW9uLCBwYXJlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdzID0gWy4uLmZvY3VzYWJsZXNSZWYuY3VycmVudC52YWx1ZXMoKV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlKSA9PiBlLnBhcmVudCA9PT0gcGFyZW50KVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG4gICAgICAgICAgICBpZiAoc2libGluZ3MubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBjdXJJZCA9IGZvY3VzZWRSZWYuY3VycmVudC5nZXQocGFyZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBzaWJsaW5ncy5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGN1cklkKTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gZGlyZWN0aW9uID09PSAncHJldicgPyAtMSA6IDE7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gc2libGluZ3NbKGkgKyBkZWx0YSArIHNpYmxpbmdzLmxlbmd0aCkgJSBzaWJsaW5ncy5sZW5ndGhdO1xuICAgICAgICAgICAgZm9jdXNlZFJlZi5jdXJyZW50LnNldChwYXJlbnQsIG5leHQuaWQpO1xuICAgICAgICAgICAgcmVyZW5kZXIoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwdXNoTW9kYWwgPSAoZW50cnkpID0+IHtcbiAgICAgICAgICAgIG1vZGFsc1JlZi5jdXJyZW50LnB1c2goZW50cnkpO1xuICAgICAgICAgICAgcmVyZW5kZXIoKTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbW9kYWxzUmVmLmN1cnJlbnQgPSBtb2RhbHNSZWYuY3VycmVudC5maWx0ZXIoKG0pID0+IG0gIT09IGVudHJ5KTtcbiAgICAgICAgICAgICAgICByZXJlbmRlcigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTZWxlY3RvcnMgcmVhZCBmcm9tIHJlZnMuIFRoZXkncmUgY2hlYXAgYW5kIGRvbid0IGFsbG9jYXRlLlxuICAgICAgICBjb25zdCBpc0ZvY3VzZWQgPSAoaWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gZm9jdXNhYmxlc1JlZi5jdXJyZW50LmdldChpZCk7XG4gICAgICAgICAgICBpZiAoIWVudHJ5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAobW9kYWxzUmVmLmN1cnJlbnQubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGZvY3VzZWRSZWYuY3VycmVudC5nZXQoZW50cnkucGFyZW50KSA9PT0gaWQ7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRvcE1vZGFsID0gKCkgPT5cbiAgICAgICAgICAgIG1vZGFsc1JlZi5jdXJyZW50Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IG1vZGFsc1JlZi5jdXJyZW50W21vZGFsc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCBpc01vZGFsQWN0aXZlID0gKCkgPT4gbW9kYWxzUmVmLmN1cnJlbnQubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3QgZm9jdXNlZEhpbnRGb3IgPSAocGFyZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGZvY3VzZWRSZWYuY3VycmVudC5nZXQocGFyZW50KTtcbiAgICAgICAgICAgIGlmICghaWQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBmb2N1c2FibGVzUmVmLmN1cnJlbnQuZ2V0KGlkKTtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeT8uaGludFJlZj8uY3VycmVudCA/PyBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZWdpc3RlcixcbiAgICAgICAgICAgIGZvY3VzLFxuICAgICAgICAgICAgY3ljbGUsXG4gICAgICAgICAgICBwdXNoTW9kYWwsXG4gICAgICAgICAgICBpc0ZvY3VzZWQsXG4gICAgICAgICAgICB0b3BNb2RhbCxcbiAgICAgICAgICAgIGlzTW9kYWxBY3RpdmUsXG4gICAgICAgICAgICBmb2N1c2VkSGludEZvcixcbiAgICAgICAgfTtcbiAgICB9LCBbcmVyZW5kZXJdKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBEaXNwYXRjaEN0eC5Qcm92aWRlcixcbiAgICAgICAgeyB2YWx1ZTogZGlzcGF0Y2ggfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTaWduYWxDdHguUHJvdmlkZXIsIHsgdmFsdWU6IHRpY2sgfSwgY2hpbGRyZW4pLFxuICAgICk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYW4gaW50ZXJhY3RpdmUgYXJlYS5cbiAqXG4gKiBIaW50cyBhcmUgcmVhZCB0aHJvdWdoIGEgcmVmIHNvIGNhbGxlcnMgY2FuIHBhc3MgZHluYW1pYyBhcnJheXMgd2l0aG91dFxuICogZm9yY2luZyB0aGUgcmVnaXN0cnkgdG8gcmUtYWRkIHRoZSBlbnRyeSBvbiBldmVyeSByZW5kZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb2N1c2FibGUoeyBpZCwgcGFyZW50LCBoYW5kbGVycywgaGludCwgd2hlbiA9IHRydWUgfSkge1xuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgICAvLyBTdWJzY3JpYmUgdG8gZm9jdXMgY2hhbmdlczogcmUtcmVuZGVyIHdoZW4gdGhlIHNpZ25hbCBhZHZhbmNlcy5cbiAgICB1c2VDb250ZXh0KFNpZ25hbEN0eCk7XG5cbiAgICBjb25zdCBoYW5kbGVyc1JlZiA9IHVzZVJlZihoYW5kbGVycyk7XG4gICAgY29uc3QgaGludFJlZiA9IHVzZVJlZihoaW50KTtcbiAgICBoYW5kbGVyc1JlZi5jdXJyZW50ID0gaGFuZGxlcnM7XG4gICAgaGludFJlZi5jdXJyZW50ID0gaGludDtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghd2hlbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoLnJlZ2lzdGVyKHsgaWQsIHBhcmVudCwgaGFuZGxlcnNSZWYsIGhpbnRSZWYgfSk7XG4gICAgfSwgW2Rpc3BhdGNoLCBpZCwgcGFyZW50LCB3aGVuXSk7XG5cbiAgICBjb25zdCBmb2N1c2VkID0gZGlzcGF0Y2guaXNGb2N1c2VkKGlkKTtcblxuICAgIHVzZUlucHV0KFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm4gPSBoYW5kbGVyc1JlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykgZm4oaW5wdXQsIGtleSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgaXNBY3RpdmU6IHdoZW4gJiYgZm9jdXNlZCB9LFxuICAgICk7XG5cbiAgICBjb25zdCBmb2N1c1NlbGYgPSB1c2VDYWxsYmFjaygoKSA9PiBkaXNwYXRjaC5mb2N1cyhpZCksIFtkaXNwYXRjaCwgaWRdKTtcbiAgICByZXR1cm4geyBmb2N1c2VkLCBmb2N1czogZm9jdXNTZWxmIH07XG59XG5cbi8qKlxuICogUHVzaCBhIG1vZGFsIG9udG8gdGhlIGlucHV0IHN0YWNrLiBXaGlsZSB0b3Btb3N0LCB0aGlzIGhhbmRsZXIgb3ducyBpbnB1dFxuICogYW5kIGFsbCB1c2VGb2N1c2FibGUgc2libGluZ3Mgc3RvcCByZWNlaXZpbmcga2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1vZGFsKGhhbmRsZXIsIHsgd2hlbiA9IHRydWUsIGhpbnQgfSA9IHt9KSB7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICAgIHVzZUNvbnRleHQoU2lnbmFsQ3R4KTsgLy8gcmUtcmVuZGVyIHdoZW4gc3RhY2sgY2hhbmdlc1xuXG4gICAgY29uc3QgaGFuZGxlclJlZiA9IHVzZVJlZihoYW5kbGVyKTtcbiAgICBjb25zdCBoaW50UmVmID0gdXNlUmVmKGhpbnQpO1xuICAgIGNvbnN0IGVudHJ5UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGhhbmRsZXJSZWYuY3VycmVudCA9IGhhbmRsZXI7XG4gICAgaGludFJlZi5jdXJyZW50ID0gaGludDtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghd2hlbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZW50cnkgPSB7IGhhbmRsZXJSZWYsIGhpbnRSZWYgfTtcbiAgICAgICAgZW50cnlSZWYuY3VycmVudCA9IGVudHJ5O1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gucHVzaE1vZGFsKGVudHJ5KTtcbiAgICB9LCBbZGlzcGF0Y2gsIHdoZW5dKTtcblxuICAgIGNvbnN0IGlzVG9wID0gZGlzcGF0Y2gudG9wTW9kYWwoKSA9PT0gZW50cnlSZWYuY3VycmVudDtcbiAgICB1c2VJbnB1dChcbiAgICAgICAgKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZuID0gaGFuZGxlclJlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykgZm4oaW5wdXQsIGtleSk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgaXNBY3RpdmU6IHdoZW4gJiYgaXNUb3AgfSxcbiAgICApO1xufVxuXG4vKipcbiAqIFRhYi9zaGlmdC10YWIgY3ljbGUgd2l0aGluIGEgcGFyZW50IGdyb3VwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlVGFiQ3ljbGUocGFyZW50LCB7IHdoZW4gPSB0cnVlIH0gPSB7fSkge1xuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgICB1c2VDb250ZXh0KFNpZ25hbEN0eCk7XG4gICAgY29uc3QgaXNNb2RhbCA9IGRpc3BhdGNoLmlzTW9kYWxBY3RpdmUoKTtcbiAgICB1c2VJbnB1dChcbiAgICAgICAgKF9pbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWtleS50YWIpIHJldHVybjtcbiAgICAgICAgICAgIGRpc3BhdGNoLmN5Y2xlKGtleS5zaGlmdCA/ICdwcmV2JyA6ICduZXh0JywgcGFyZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpc0FjdGl2ZTogd2hlbiAmJiAhaXNNb2RhbCB9LFxuICAgICk7XG59XG5cbi8qKlxuICogRm9vdGVyIGhpbnRzIGZvciB0aGUgY3VycmVudGx5IGZvY3VzZWQgZm9jdXNhYmxlIGluIGBwYXJlbnRgLiBGYWxscyBiYWNrXG4gKiB0byB0aGUgdG9wbW9zdCBtb2RhbCdzIGhpbnQgd2hlbiBhbiBvdmVybGF5IG93bnMgaW5wdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb2N1c0hpbnRzKHBhcmVudCkge1xuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgICB1c2VDb250ZXh0KFNpZ25hbEN0eCk7XG4gICAgY29uc3QgdG9wID0gZGlzcGF0Y2gudG9wTW9kYWwoKTtcbiAgICBpZiAodG9wPy5oaW50UmVmPy5jdXJyZW50KSByZXR1cm4gdG9wLmhpbnRSZWYuY3VycmVudDtcbiAgICByZXR1cm4gZGlzcGF0Y2guZm9jdXNlZEhpbnRGb3IocGFyZW50KSB8fCBbXTtcbn1cblxuLyoqXG4gKiBHbG9iYWwga2V5cyB0aGF0IGFsd2F5cyB3b3JrIHdoZW4gbm8gbW9kYWwgaXMgYWN0aXZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlR2xvYmFsS2V5cyhoYW5kbGVyLCB7IHdoZW4gPSB0cnVlIH0gPSB7fSkge1xuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgICB1c2VDb250ZXh0KFNpZ25hbEN0eCk7XG4gICAgY29uc3QgaXNNb2RhbCA9IGRpc3BhdGNoLmlzTW9kYWxBY3RpdmUoKTtcbiAgICBjb25zdCByZWYgPSB1c2VSZWYoaGFuZGxlcik7XG4gICAgcmVmLmN1cnJlbnQgPSBoYW5kbGVyO1xuICAgIHVzZUlucHV0KFxuICAgICAgICAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm4gPSByZWYuY3VycmVudDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIGZuKGlucHV0LCBrZXkpO1xuICAgICAgICB9LFxuICAgICAgICB7IGlzQWN0aXZlOiB3aGVuICYmICFpc01vZGFsIH0sXG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VTdGRvdXQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gJy4vUGFuZWwuanN4JztcbmltcG9ydCB7IFNwYXJrbGluZSB9IGZyb20gJy4vU3BhcmtsaW5lLmpzeCc7XG5pbXBvcnQgeyBCYXIsIGNvbG9yRm9yUGN0IH0gZnJvbSAnLi9TcGFya2xpbmUuanN4JztcbmltcG9ydCB7IERldmljZXNQYW5lbCB9IGZyb20gJy4vRGV2aWNlc1BhbmVsLmpzeCc7XG5pbXBvcnQge1xuICAgIGZsZWV0Q291bnRzLFxuICAgIGFnZW50VmVyc2lvbkNvdW50cyxcbiAgICBjb21wYXJlQWdlbnRWZXJzaW9ucyxcbiAgICBkZXZpY2VLaW5kQ291bnRzLFxuICAgIFVOQVNTSUdORURfUFJPRFVDVF9LRVksXG59IGZyb20gJy4uL2xpYi9zdGF0dXMuanMnO1xuaW1wb3J0IHsgQUxBUk1fU0VWRVJJVFksIEFMQVJNX1NUQVRFIH0gZnJvbSAnQHRoaW5nZXItaW8vY2xpLWNvcmUvYWxhcm1zJztcbmltcG9ydCB7IHVzZUZvY3VzYWJsZSwgdXNlVGFiQ3ljbGUgfSBmcm9tICcuLi9saWIvZm9jdXMuanMnO1xuXG5jb25zdCBGTEVFVF9ISU5UID0gW1xuICAgIHsgazogJzEtNScsIGxhYmVsOiAndGFicycgfSxcbiAgICB7IGs6ICd0YWInLCBsYWJlbDogJ3BhbmVsJyB9LFxuICAgIHsgazogJ1x1MjE5MVx1MjE5MycsIGxhYmVsOiAnbmF2JyB9LFxuICAgIHsgazogJ3MnLCBsYWJlbDogJ3NvcnQnIH0sXG4gICAgeyBrOiAnLycsIGxhYmVsOiAnZmlsdGVyJyB9LFxuICAgIHsgazogJ2VudGVyJywgbGFiZWw6ICdkZXRhaWwnIH0sXG4gICAgeyBrOiAncScsIGxhYmVsOiAncXVpdCcgfSxcbl07XG5cbmNvbnN0IEFMRVJUU19ISU5UID0gW1xuICAgIHsgazogJzEtNScsIGxhYmVsOiAndGFicycgfSxcbiAgICB7IGs6ICd0YWInLCBsYWJlbDogJ3BhbmVsJyB9LFxuICAgIHsgazogJ3YnLCBsYWJlbDogJ3ZpZXcnIH0sXG4gICAgeyBrOiAncScsIGxhYmVsOiAncXVpdCcgfSxcbl07XG5cbmNvbnN0IFZFUlNJT05TX0hJTlQgPSBbXG4gICAgeyBrOiAnMS01JywgbGFiZWw6ICd0YWJzJyB9LFxuICAgIHsgazogJ3RhYicsIGxhYmVsOiAncGFuZWwnIH0sXG4gICAgeyBrOiAndScsIGxhYmVsOiAndXBncmFkZScgfSxcbiAgICB7IGs6ICdxJywgbGFiZWw6ICdxdWl0JyB9LFxuXTtcblxuY29uc3QgTUVUUklDX0xJU1RfSElOVCA9IFtcbiAgICB7IGs6ICcxLTUnLCBsYWJlbDogJ3RhYnMnIH0sXG4gICAgeyBrOiAndGFiJywgbGFiZWw6ICdwYW5lbCcgfSxcbiAgICB7IGs6ICdcdTIxOTFcdTIxOTMnLCBsYWJlbDogJ2J1Y2tldCcgfSxcbiAgICB7IGs6ICdlc2MnLCBsYWJlbDogJ2NsZWFyJyB9LFxuICAgIHsgazogJ3EnLCBsYWJlbDogJ3F1aXQnIH0sXG5dO1xuXG5mdW5jdGlvbiBLcGkoeyBsYWJlbCwgdmFsdWUsIGNvbG9yID0gdGhlbWUuZmcsIHN1ZmZpeCB9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2NvbG9yfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWV9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIHtzdWZmaXggJiYgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntzdWZmaXh9PC9UZXh0Pn1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+e2xhYmVsfTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gTWluaU1ldHJpYyh7IGxhYmVsLCB2YWx1ZSwgaGlzdG9yeSwgY29sb3IgfSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSB2YWx1ZSA9PSBudWxsID8gJ1x1MjAxNCcgOiBgJHtNYXRoLnJvdW5kKHZhbHVlKX0lYDtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17NX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57bGFiZWx9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8QmFyIHZhbHVlPXt2YWx1ZSA/PyAwfSB3aWR0aD17MTB9IGNvbG9yPXtjb2xvckZvclBjdCh2YWx1ZSl9IC8+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezF9PlxuICAgICAgICAgICAgICAgIDxTcGFya2xpbmUgc2VyaWVzPXtoaXN0b3J5fSB3aWR0aD17MTJ9IGNvbG9yPXtjb2xvcn0gLz5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17Nn0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2Rpc3BsYXl9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIFZlcnNpb25CYXIoeyB2LCBjb3VudCwgbWF4LCBsZXZlbCB9KSB7XG4gICAgY29uc3Qgd2lkdGggPSAxNjtcbiAgICBjb25zdCBmaWxsZWQgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKChjb3VudCAvIG1heCkgKiB3aWR0aCkpO1xuICAgIC8vIGxldmVsIG1hcHMgc2VtYW50aWMgcm93cyB0byBwYWxldHRlIHNsb3RzOlxuICAgIC8vICAgdGFyZ2V0ICBcdTIxOTIgY3VycmVudC9kZXNpcmVkIHZlcnNpb24gKGxpbWUpXG4gICAgLy8gICBvbGQgICAgIFx1MjE5MiBiZWhpbmQgYnkgb25lIG1pbm9yL3BhdGNoIChhbWJlcilcbiAgICAvLyAgIGFuY2llbnQgXHUyMTkyIG1vcmUgdGhhbiBvbmUgcmVsZWFzZSBiZWhpbmQgKHJlZClcbiAgICBjb25zdCBjb2xvciA9XG4gICAgICAgIGxldmVsID09PSAndGFyZ2V0JyA/IHRoZW1lLmxpbWUgOiBsZXZlbCA9PT0gJ29sZCcgPyB0aGVtZS5hbWJlciA6IHRoZW1lLnJlZDtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17OX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2NvbG9yfT57dn08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtjb2xvcn0+eydcdTI1ODgnLnJlcGVhdChmaWxsZWQpfTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5ib3JkZXJEaW19PnsnXHUyNTkxJy5yZXBlYXQod2lkdGggLSBmaWxsZWQpfTwvVGV4dD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezR9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19Pntjb3VudH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gc2V2ZXJpdHlWaXN1YWwoc2V2KSB7XG4gICAgaWYgKHNldiA9PT0gQUxBUk1fU0VWRVJJVFkuQ1JJVElDQUwgfHwgc2V2ID09PSBBTEFSTV9TRVZFUklUWS5ISUdIKSB7XG4gICAgICAgIHJldHVybiB7IGNvbG9yOiB0aGVtZS5yZWQsIGdseXBoOiAnXHUyNUNGJyB9O1xuICAgIH1cbiAgICBpZiAoc2V2ID09PSBBTEFSTV9TRVZFUklUWS5NRURJVU0pIHJldHVybiB7IGNvbG9yOiB0aGVtZS5hbWJlciwgZ2x5cGg6ICdcdTI1QjInIH07XG4gICAgaWYgKHNldiA9PT0gQUxBUk1fU0VWRVJJVFkuTE9XKSByZXR1cm4geyBjb2xvcjogdGhlbWUuYWNjZW50LCBnbHlwaDogJ2knIH07XG4gICAgcmV0dXJuIHsgY29sb3I6IHRoZW1lLmZnRGltLCBnbHlwaDogJ1x1MDBCNycgfTtcbn1cblxuZnVuY3Rpb24gQWxhcm1Hcm91cFJvdyh7IGdyb3VwLCBub3cgfSkge1xuICAgIGNvbnN0IHsgY29sb3IsIGdseXBoIH0gPSBzZXZlcml0eVZpc3VhbChncm91cC5zZXZlcml0eSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgbWFyZ2luQm90dG9tPXsxfT5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtjb2xvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnbHlwaH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezN9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIiBtYXJnaW5SaWdodD17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtncm91cC5jb3VudH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2dyb3VwLm5hbWV9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezZ9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICB7Z3JvdXAuZGV2aWNlcy5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gc3RhdGVMYWJlbChkLnN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luY2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZC5pbml0aWF0ZWQgIT0gbnVsbCA/IGR1cmF0aW9uTGFiZWwobm93IC0gZC5pbml0aWF0ZWQpIDogJ1x1MjAxNCc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17YCR7ZC5uYW1lfS0ke2l9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0gZmxleEJhc2lzPXswfSBtaW5XaWR0aD17MH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2QubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIiBtYXJnaW5MZWZ0PXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2QudmFsdWUgPyB0aGVtZS5mZyA6IHRoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2QudmFsdWUgfHwgJ1x1MjAxNCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs1fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+e3NpbmNlfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs2fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtzdGF0ZUNvbG9yKGQuc3RhdGUpfT57dGFnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGR1cmF0aW9uTGFiZWwobXMpIHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtcykgfHwgbXMgPCAwKSByZXR1cm4gJ1x1MjAxNCc7XG4gICAgY29uc3QgcyA9IE1hdGguZmxvb3IobXMgLyAxMDAwKTtcbiAgICBpZiAocyA8IDYwKSByZXR1cm4gYCR7c31zYDtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcihzIC8gNjApO1xuICAgIGlmIChtIDwgNjApIHJldHVybiBgJHttfW1gO1xuICAgIGNvbnN0IGggPSBNYXRoLmZsb29yKG0gLyA2MCk7XG4gICAgaWYgKGggPCAyNCkgcmV0dXJuIGAke2h9aGA7XG4gICAgY29uc3QgZCA9IE1hdGguZmxvb3IoaCAvIDI0KTtcbiAgICByZXR1cm4gYCR7ZH1kYDtcbn1cblxuZnVuY3Rpb24gYWN0aXZhdGlvbk1zKGluc3QpIHtcbiAgICBjb25zdCB2ID0gaW5zdD8uYWN0aXZhdGlvbj8uaW5pdGlhdGVkO1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHJldHVybiB2O1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdCA9IERhdGUucGFyc2Uodik7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodCkgPyB0IDogbnVsbDtcbiAgICB9XG4gICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYuJGRhdGUgIT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIHYuJGRhdGUgPT09ICdudW1iZXInKSByZXR1cm4gdi4kZGF0ZTtcbiAgICAgICAgY29uc3QgdCA9IERhdGUucGFyc2Uodi4kZGF0ZSk7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodCkgPyB0IDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHN0YXRlVGFnKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlID09PSBBTEFSTV9TVEFURS5BQ0tOT1dMRURHRUQpIHJldHVybiAnQUNLJztcbiAgICBpZiAoc3RhdGUgPT09IEFMQVJNX1NUQVRFLkxBVENIRUQpIHJldHVybiAnTEFUQ0gnO1xuICAgIGlmIChzdGF0ZSA9PT0gQUxBUk1fU1RBVEUuU0hFTFZFRCkgcmV0dXJuICdTSEVMVic7XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHN0YXRlTGFiZWwoc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUgPT09IEFMQVJNX1NUQVRFLk5PTkUpIHJldHVybiAnUEVORCc7XG4gICAgaWYgKHN0YXRlID09PSBBTEFSTV9TVEFURS5BQ1RJVkFURUQpIHJldHVybiAnQUNUSVZFJztcbiAgICBpZiAoc3RhdGUgPT09IEFMQVJNX1NUQVRFLkNMRUFSRUQpIHJldHVybiAnQ0xFQVInO1xuICAgIHJldHVybiBzdGF0ZVRhZyhzdGF0ZSkgfHwgJyc7XG59XG5cbmZ1bmN0aW9uIHN0YXRlQ29sb3Ioc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUgPT09IEFMQVJNX1NUQVRFLkFDVElWQVRFRCkgcmV0dXJuIHRoZW1lLnJlZDtcbiAgICBpZiAoXG4gICAgICAgIHN0YXRlID09PSBBTEFSTV9TVEFURS5BQ0tOT1dMRURHRUQgfHxcbiAgICAgICAgc3RhdGUgPT09IEFMQVJNX1NUQVRFLkxBVENIRUQgfHxcbiAgICAgICAgc3RhdGUgPT09IEFMQVJNX1NUQVRFLlNIRUxWRURcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoZW1lLmFtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gdGhlbWUuZmdEaW07XG59XG5cbi8vIFB1bGxzIGEgY29tcGFjdCBkaXNwbGF5IHZhbHVlIGZyb20gYGV2YWx1YXRpb24ubGFzdF92YWx1ZXNgLiBUaGUgbWFwXG4vLyB1c3VhbGx5IGhhcyBhIHNpbmdsZSBrZXkgKHRoZSBmaWVsZCB0aGF0IGRyb3ZlIHRoZSBhbGFybSBydWxlKS4gTnVtYmVyc1xuLy8gaW4gdGhlIDAuLjEwMCByYW5nZSByZW5kZXIgYXMgcGVyY2VudGFnZXMgXHUyMDE0IHRoYXQncyBob3cgZXZlcnkgZGVmYXVsdFxuLy8gbW9uaXRvcmluZyBydWxlIChjcHUvbWVtL2Rpc2svc3dhcCB1c2FnZSkgaXMgcGFyYW1ldGVyaXNlZC5cbmZ1bmN0aW9uIGV2YWx1YXRpb25WYWx1ZShpbnN0KSB7XG4gICAgY29uc3QgbHYgPSBpbnN0Py5ldmFsdWF0aW9uPy5sYXN0X3ZhbHVlcztcbiAgICBpZiAoIWx2IHx8IHR5cGVvZiBsdiAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhsdik7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYXcgPSBsdltrZXlzWzBdXTtcbiAgICBpZiAocmF3ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG4gPSBOdW1iZXIocmF3KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSkgcmV0dXJuIFN0cmluZyhyYXcpO1xuICAgIGlmIChuID49IDAgJiYgbiA8PSAxMDApIHJldHVybiBgJHtNYXRoLnJvdW5kKG4pfSVgO1xuICAgIGlmIChNYXRoLmFicyhuKSA+PSAxMDAwKSByZXR1cm4gbi50b0ZpeGVkKDApO1xuICAgIGlmIChNYXRoLmFicyhuKSA+PSAxMCkgcmV0dXJuIG4udG9GaXhlZCgxKTtcbiAgICByZXR1cm4gbi50b0ZpeGVkKDIpO1xufVxuXG5mdW5jdGlvbiBBbGFybUluc3RhbmNlUm93KHsgaW5zdCwgaG9zdFdpZHRoLCBub3cgfSkge1xuICAgIGNvbnN0IHsgY29sb3IsIGdseXBoIH0gPSBzZXZlcml0eVZpc3VhbChpbnN0LnNldmVyaXR5KTtcbiAgICBjb25zdCBkZXYgPSBpbnN0Lm9yaWdpbj8ubmFtZSB8fCBpbnN0Lm9yaWdpbj8uaWQgfHwgJ1x1MjAxNCc7XG4gICAgY29uc3QgbGFiZWwgPSBpbnN0Lm5hbWUgfHwgaW5zdC5hbGFybT8ucnVsZSB8fCAnYWxhcm0nO1xuICAgIGNvbnN0IGluaXRpYXRlZCA9IGFjdGl2YXRpb25NcyhpbnN0KTtcbiAgICBjb25zdCBzaW5jZSA9IGluaXRpYXRlZCAhPSBudWxsID8gZHVyYXRpb25MYWJlbChub3cgLSBpbml0aWF0ZWQpIDogJ1x1MjAxNCc7XG4gICAgY29uc3QgdmFsdWUgPSBldmFsdWF0aW9uVmFsdWUoaW5zdCk7XG4gICAgY29uc3Qgc3RUYWcgPSBzdGF0ZUxhYmVsKGluc3Quc3RhdGUpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17Y29sb3J9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtnbHlwaH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9e2hvc3RXaWR0aCArIDJ9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICB7ZGV2fVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0gZmxleEJhc2lzPXswfSBtaW5XaWR0aD17MH0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIiBtYXJnaW5MZWZ0PXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dmFsdWUgPyB0aGVtZS5mZyA6IHRoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUgfHwgJ1x1MjAxNCd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs1fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57c2luY2V9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs2fSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCIgbWFyZ2luTGVmdD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3N0YXRlQ29sb3IoaW5zdC5zdGF0ZSl9PntzdFRhZ308L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gRXZlbnRSb3coeyBlLCBpc0ZpcnN0IH0pIHtcbiAgICAvLyBgdXBkYCAodXBkYXRlIGFwcGxpZWQpIGlzIGtlcHQgdmlzdWFsbHkgZGlzdGluY3QgZnJvbSBgam9pbmBcbiAgICAvLyAoY29ubmVjdGVkKS4gQm90aCBhcmUgXCJnb29kXCIgb3V0Y29tZXMgYnV0IHRoZXkgbWVhbiBkaWZmZXJlbnQgdGhpbmdzIFx1MjAxNFxuICAgIC8vIHRoZSByb2xsb3V0IGFmdGVybWF0aCB0eXBpY2FsbHkgcHJvZHVjZXMgb25lIG9mIGVhY2ggcGVyIGRldmljZSAoYWdlbnRcbiAgICAvLyBzd2FwcyBiaW5hcnkgXHUyMTkyIExFQVZFIFx1MjE5MiBKT0lOIG9uIHJlY29ubmVjdCwgd2l0aCBteSBzeW50aGV0aWMgVVBEXG4gICAgLy8gdGhyZWFkZWQgaW4gYmV0d2VlbiksIHNvIHNlcGFyYXRlIGNvbG9ycyBrZWVwIHRoZSBsb2cgc2Nhbm5hYmxlLlxuICAgIGNvbnN0IHRhZ0NvbG9yID1cbiAgICAgICAgZS5raW5kID09PSAndXBkJ1xuICAgICAgICAgICAgPyB0aGVtZS5hY2NlbnRcbiAgICAgICAgICAgIDogZS5raW5kID09PSAnam9pbidcbiAgICAgICAgICAgICAgPyB0aGVtZS5saW1lXG4gICAgICAgICAgICAgIDogZS5raW5kID09PSAnbGVhdmUnXG4gICAgICAgICAgICAgICAgPyB0aGVtZS5hbWJlclxuICAgICAgICAgICAgICAgIDogZS5raW5kID09PSAnZXJyJ1xuICAgICAgICAgICAgICAgICAgPyB0aGVtZS5yZWRcbiAgICAgICAgICAgICAgICAgIDogdGhlbWUuYWNjZW50O1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs5fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+e2UudH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezd9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0YWdDb2xvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge2Uua2luZC50b1VwcGVyQ2FzZSgpfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPFRleHQgd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2UuZGV2fTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiB7ZS5tc2d9PC9UZXh0PlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBncm91cE1ldHJpY3NCeVByb2R1Y3QobWV0cmljcykge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IG0gb2YgbWV0cmljcykge1xuICAgICAgICBjb25zdCBrZXkgPSBtLnByb2R1Y3QgfHwgJyc7XG4gICAgICAgIGlmICghbWFwLmhhcyhrZXkpKSBtYXAuc2V0KGtleSwgW10pO1xuICAgICAgICBtYXAuZ2V0KGtleSkucHVzaChtKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5tYXAuZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSkpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNZXRyaWNWYWx1ZSh2LCB1bml0KSB7XG4gICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuICdcdTIwMTQnO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSByZXR1cm4gU3RyaW5nKHYubGVuZ3RoKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShOdW1iZXIodikpKSByZXR1cm4gU3RyaW5nKHYpO1xuICAgIGNvbnN0IG4gPSBOdW1iZXIodik7XG4gICAgY29uc3Qgcm91bmRlZCA9IE1hdGguYWJzKG4pID49IDEwMCA/IE1hdGgucm91bmQobikgOiBNYXRoLnJvdW5kKG4gKiAxMCkgLyAxMDtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByb3VuZGVkLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpO1xuICAgIHJldHVybiB1bml0ID8gYCR7Zm9ybWF0dGVkfSAke3VuaXR9YCA6IGZvcm1hdHRlZDtcbn1cblxuZnVuY3Rpb24gRGlzdHJpYnV0aW9uUm93cyh7IG1ldHJpYywgdmFsdWUsIGxhc3RVcGRhdGUgfSkge1xuICAgIGNvbnN0IGFnZVMgPSBsYXN0VXBkYXRlID8gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIGxhc3RVcGRhdGUpIC8gMTAwMCkgOiBudWxsO1xuICAgIGNvbnN0IGlzUGxhaW5PYmplY3QgPVxuICAgICAgICB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICBjb25zdCBidWNrZXRzID0gaXNQbGFpbk9iamVjdFxuICAgICAgICA/IE9iamVjdC5lbnRyaWVzKHZhbHVlKS5maWx0ZXIoXG4gICAgICAgICAgICAgIChbLCBjXSkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihjKSkgJiYgTnVtYmVyKGMpID4gMCxcbiAgICAgICAgICApXG4gICAgICAgIDogW107XG4gICAgY29uc3QgdG90YWwgPSBidWNrZXRzLnJlZHVjZSgoYWNjLCBbLCBjXSkgPT4gYWNjICsgTnVtYmVyKGMpLCAwKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uYnVja2V0c10uc29ydChcbiAgICAgICAgKGEsIGIpID0+IE51bWJlcihiWzFdKSAtIE51bWJlcihhWzFdKSB8fCBhWzBdLmxvY2FsZUNvbXBhcmUoYlswXSksXG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0gZmxleEJhc2lzPXswfSBtaW5XaWR0aD17MH0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge21ldHJpYy5sYWJlbCB8fCBtZXRyaWMubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2FnZVMgPT0gbnVsbCA/ICdcdTIwMTQnIDogYCR7YWdlU31zYH1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICB7c29ydGVkLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpbkxlZnQ9ezJ9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+bm8gc2FtcGxlcyB5ZXQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtzb3J0ZWQubWFwKChbaywgY10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gTnVtYmVyKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGN0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCA+IDAgPyBNYXRoLnJvdW5kKChjb3VudCAvIHRvdGFsKSAqIDEwMCkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17a30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9IGZsZXhCYXNpcz17MH0gbWluV2lkdGg9ezB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Nn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17NX0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntwY3R9JTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGZsZXhHcm93PXsxfSBmbGV4QmFzaXM9ezB9IG1pbldpZHRoPXswfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PnRvdGFsPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dG90YWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXs1fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGJ1Y2tldHNGcm9tVmFsdWUodmFsdWUpIHtcbiAgICBjb25zdCBpc1BsYWluT2JqZWN0ID1cbiAgICAgICAgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KSByZXR1cm4gW107XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKVxuICAgICAgICAuZmlsdGVyKChbLCBjXSkgPT4gTnVtYmVyLmlzRmluaXRlKE51bWJlcihjKSkgJiYgTnVtYmVyKGMpID4gMClcbiAgICAgICAgLnNvcnQoXG4gICAgICAgICAgICAoYSwgYikgPT4gTnVtYmVyKGJbMV0pIC0gTnVtYmVyKGFbMV0pIHx8IGFbMF0ubG9jYWxlQ29tcGFyZShiWzBdKSxcbiAgICAgICAgKTtcbn1cblxuLy8gRm9jdXNhYmxlIHBlci1tZXRyaWMgcGFuZWw6IGN1cnNvciB3YWxrcyB0aGUgYnVja2V0cywgdGhlIHNsaWNlIHdpbmRvd1xuLy8ga2VlcHMgdGhlIHNlbGVjdGlvbiB2aXNpYmxlIHdoZW4gdGhlcmUgYXJlIG1vcmUgYnVja2V0cyB0aGFuIHJvd3MsIGFuZFxuLy8gdGhlIGN1cnJlbnQgYnVja2V0IGJ1YmJsZXMgdXAgdmlhIGBvbkJ1Y2tldENoYW5nZWAgc28gdGhlIGRldmljZXMgcGFuZWxcbi8vIGNhbiBmaWx0ZXIgdG8gdGhlIG1hdGNoaW5nIG1hY2hpbmVzLlxuZnVuY3Rpb24gRGlzdHJpYnV0aW9uUGFuZWwoe1xuICAgIG1ldHJpYyxcbiAgICB2YWx1ZSxcbiAgICBsYXN0VXBkYXRlLFxuICAgIHByb2R1Y3RJbmZvLFxuICAgIGFjdGl2ZU1ldHJpY0tleSxcbiAgICBvbkJ1Y2tldENoYW5nZSxcbiAgICBtYXhSb3dzLFxufSkge1xuICAgIGNvbnN0IG1ldHJpY0tleSA9IGAke21ldHJpYy5wcm9kdWN0fToke21ldHJpYy5uYW1lfWA7XG4gICAgY29uc3QgZGlzcGxheSA9IHByb2R1Y3RJbmZvPy5bbWV0cmljLnByb2R1Y3RdPy5uYW1lIHx8IG1ldHJpYy5wcm9kdWN0IHx8ICcnO1xuICAgIGNvbnN0IHNvcnRlZCA9IHVzZU1lbW8oKCkgPT4gYnVja2V0c0Zyb21WYWx1ZSh2YWx1ZSksIFt2YWx1ZV0pO1xuICAgIGNvbnN0IHRvdGFsID0gc29ydGVkLnJlZHVjZSgoYWNjLCBbLCBjXSkgPT4gYWNjICsgTnVtYmVyKGMpLCAwKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRJZHgsIHNldFNlbGVjdGVkSWR4XSA9IHVzZVN0YXRlKC0xKTtcblxuICAgIGNvbnN0IGZvY3VzID0gdXNlRm9jdXNhYmxlKHtcbiAgICAgICAgaWQ6IGBvdmVydmlldy1tZXRyaWMtJHttZXRyaWNLZXl9YCxcbiAgICAgICAgcGFyZW50OiAnb3ZlcnZpZXcnLFxuICAgICAgICBoaW50OiBNRVRSSUNfTElTVF9ISU5ULFxuICAgICAgICBoYW5kbGVyczogKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChzb3J0ZWQubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoa2V5LmVzY2FwZSkge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWR4KC0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5LnVwQXJyb3cpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZElkeCgoY3VyKSA9PlxuICAgICAgICAgICAgICAgICAgICBjdXIgPCAwID8gMCA6IE1hdGgubWF4KDAsIGN1ciAtIDEpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZElkeCgoY3VyKSA9PlxuICAgICAgICAgICAgICAgICAgICBjdXIgPCAwID8gMCA6IE1hdGgubWluKHNvcnRlZC5sZW5ndGggLSAxLCBjdXIgKyAxKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ2cnKSByZXR1cm4gc2V0U2VsZWN0ZWRJZHgoMCk7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICdHJykgcmV0dXJuIHNldFNlbGVjdGVkSWR4KHNvcnRlZC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIERyb3AgdGhlIGN1cnNvciBvbiBkZWZvY3VzIHNvIHRoZSBmaWx0ZXIgZG9lc24ndCBvdXRsaXZlIHRoZSBwYW5lbFxuICAgIC8vIHRoYXQgb3ducyBpdCAoZS5nLiB1c2VyIHRhYnMgdG8gYSBzaWJsaW5nLCBvcGVucyBhIG1vZGFsLCBvclxuICAgIC8vIHN3aXRjaGVzIHRhYnMpLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghZm9jdXMuZm9jdXNlZCkgc2V0U2VsZWN0ZWRJZHgoLTEpO1xuICAgIH0sIFtmb2N1cy5mb2N1c2VkXSk7XG5cbiAgICAvLyBDbGFtcCB0aGUgY3Vyc29yIHRvIHRoZSB2aXNpYmxlIHJhbmdlIHdoZW4gdGhlIGJ1Y2tldCBsaXN0IHNocmlua3NcbiAgICAvLyBcdTIwMTQgc2FtcGxlIHVwZGF0ZXMgY2FuIGRyb3AgYSBidWNrZXQgb3V0IGZyb20gdW5kZXIgdGhlIHNlbGVjdGlvbi5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWRJZHggPj0gMCAmJiBzZWxlY3RlZElkeCA+PSBzb3J0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZElkeChzb3J0ZWQubGVuZ3RoID09PSAwID8gLTEgOiBzb3J0ZWQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICB9LCBbc29ydGVkLmxlbmd0aCwgc2VsZWN0ZWRJZHhdKTtcblxuICAgIGNvbnN0IGN1cnJlbnRCdWNrZXQgPVxuICAgICAgICBmb2N1cy5mb2N1c2VkICYmIHNlbGVjdGVkSWR4ID49IDAgJiYgc29ydGVkW3NlbGVjdGVkSWR4XVxuICAgICAgICAgICAgPyBzb3J0ZWRbc2VsZWN0ZWRJZHhdWzBdXG4gICAgICAgICAgICA6IG51bGw7XG5cbiAgICAvLyBPbmx5IGVtaXQgdHJhbnNpdGlvbnM6IHdoZW4gdGhlIGJ1Y2tldCB3ZSBvd24gY2hhbmdlcywgd2hlbiB3ZVxuICAgIC8vIHN0YXJ0IGVtaXR0aW5nLCBvciB3aGVuIHdlIHN0b3AuIFdpdGhvdXQgdGhlIHJlZiBndWFyZCBldmVyeSBwYW5lbFxuICAgIC8vIHdvdWxkIHJhY2UgdG8gY2xlYXIgdGhlIGdsb2JhbCBmaWx0ZXIgb24gZXZlcnkgcmVuZGVyLlxuICAgIGNvbnN0IHdhc0VtaXR0aW5nUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEJ1Y2tldCAhPSBudWxsKSB7XG4gICAgICAgICAgICBvbkJ1Y2tldENoYW5nZT8uKHtcbiAgICAgICAgICAgICAgICBwcm9kdWN0OiBtZXRyaWMucHJvZHVjdCxcbiAgICAgICAgICAgICAgICBtZXRyaWNLZXksXG4gICAgICAgICAgICAgICAgYnVja2V0OiBjdXJyZW50QnVja2V0LFxuICAgICAgICAgICAgICAgIGxhYmVsOiBtZXRyaWMubGFiZWwgfHwgbWV0cmljLm5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHdhc0VtaXR0aW5nUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdhc0VtaXR0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHdhc0VtaXR0aW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIG9uQnVja2V0Q2hhbmdlPy4obnVsbCwgbWV0cmljS2V5KTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgY3VycmVudEJ1Y2tldCxcbiAgICAgICAgbWV0cmljS2V5LFxuICAgICAgICBtZXRyaWMucHJvZHVjdCxcbiAgICAgICAgbWV0cmljLmxhYmVsLFxuICAgICAgICBtZXRyaWMubmFtZSxcbiAgICAgICAgb25CdWNrZXRDaGFuZ2UsXG4gICAgXSk7XG5cbiAgICBjb25zdCB0b3RhbF9idWNrZXRzID0gc29ydGVkLmxlbmd0aDtcbiAgICBjb25zdCB2aXNpYmxlID0gTWF0aC5taW4obWF4Um93cywgdG90YWxfYnVja2V0cyk7XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBpZiAodG90YWxfYnVja2V0cyA+IHZpc2libGUgJiYgc2VsZWN0ZWRJZHggPj0gMCkge1xuICAgICAgICBjb25zdCBoYWxmID0gTWF0aC5mbG9vcih2aXNpYmxlIC8gMik7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgTWF0aC5taW4oc2VsZWN0ZWRJZHggLSBoYWxmLCB0b3RhbF9idWNrZXRzIC0gdmlzaWJsZSksXG4gICAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRvdGFsX2J1Y2tldHMsIHN0YXJ0ICsgdmlzaWJsZSk7XG4gICAgY29uc3Qgc2xpY2UgPSBzb3J0ZWQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgY29uc3QgaGlkZGVuQWJvdmUgPSBzdGFydDtcbiAgICBjb25zdCBoaWRkZW5CZWxvdyA9IHRvdGFsX2J1Y2tldHMgLSBlbmQ7XG4gICAgY29uc3QgYWdlUyA9IGxhc3RVcGRhdGUgPyBNYXRoLnJvdW5kKChEYXRlLm5vdygpIC0gbGFzdFVwZGF0ZSkgLyAxMDAwKSA6IG51bGw7XG4gICAgY29uc3QgZmlsdGVyZWRCeVRoaXNQYW5lbCA9IGFjdGl2ZU1ldHJpY0tleSA9PT0gbWV0cmljS2V5O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICB0aXRsZT17KG1ldHJpYy5sYWJlbCB8fCBtZXRyaWMubmFtZSkudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgIHN1Yj17dG90YWxfYnVja2V0cyA+IDAgPyBgJHt0b3RhbF9idWNrZXRzfWAgOiBudWxsfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXMuZm9jdXNlZH1cbiAgICAgICAgICAgIHJpZ2h0PXtcbiAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkQnlUaGlzUGFuZWwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0+XHUyNUNGIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntkaXNwbGF5fTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2FnZVMgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+IFx1MDBCNyB7YWdlU31zPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZsZXhHcm93PXswfVxuICAgICAgICAgICAgZmxleFNocmluaz17MH1cbiAgICAgICAgPlxuICAgICAgICAgICAge3NvcnRlZC5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pm5vIHNhbXBsZXMgeWV0PC9UZXh0PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7aGlkZGVuQWJvdmUgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cdTIxOTEge2hpZGRlbkFib3ZlfSBtb3JlPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7c2xpY2UubWFwKChbaywgY10sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IHN0YXJ0ICsgaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsID0gaWR4ID09PSBzZWxlY3RlZElkeCAmJiBmb2N1cy5mb2N1c2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBOdW1iZXIoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwY3QgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsID4gMCA/IE1hdGgucm91bmQoKGNvdW50IC8gdG90YWwpICogMTAwKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e2lzU2VsID8gJyMxYTIwMzAnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aXNTZWwgPyB0aGVtZS5hY2NlbnQgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbCA/ICdcdTI1QjYnIDogJyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0gZmxleEJhc2lzPXswfSBtaW5XaWR0aD17MH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc1NlbCA/IHRoZW1lLmZnIDogdGhlbWUuZmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD1cInRydW5jYXRlLWVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Nn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17NX0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntwY3R9JTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAge2hpZGRlbkJlbG93ID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XHUyMTkzIHtoaWRkZW5CZWxvd30gbW9yZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvUGFuZWw+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gTWV0cmljUm93KHsgbWV0cmljLCB2YWx1ZSwgaGlzdG9yeSwgbGFzdFVwZGF0ZSB9KSB7XG4gICAgaWYgKG1ldHJpYy5hZ2dyZWdhdGlvbiA9PT0gJ2Rpc3RyaWJ1dGlvbicpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxEaXN0cmlidXRpb25Sb3dzXG4gICAgICAgICAgICAgICAgbWV0cmljPXttZXRyaWN9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgIGxhc3RVcGRhdGU9e2xhc3RVcGRhdGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBhZ2VTID0gbGFzdFVwZGF0ZSA/IE1hdGgucm91bmQoKERhdGUubm93KCkgLSBsYXN0VXBkYXRlKSAvIDEwMDApIDogbnVsbDtcbiAgICBjb25zdCBzaG93U3BhcmtsaW5lID0gbWV0cmljLnZpc3VhbGl6YXRpb24gPT09ICdzcGFya2xpbmUnO1xuICAgIC8vIEF1dG8tc2NhbGUgYWdhaW5zdCB0aGUgdmlzaWJsZSB3aW5kb3cgc28gdmFsdWVzIG9mIGFueSBtYWduaXR1ZGVcbiAgICAvLyAocGVyY2VudGFnZXMsIGNvdW50cyBpbiB0aGUgdGhvdXNhbmRzKSByZW5kZXIgd2l0aCBmdWxsIGR5bmFtaWMgcmFuZ2UuXG4gICAgY29uc3Qgc3BhcmtNYXggPSBzaG93U3BhcmtsaW5lXG4gICAgICAgID8gTWF0aC5tYXgoMSwgLi4uKGhpc3RvcnkgfHwgW10pLmZpbHRlcigodikgPT4gTnVtYmVyLmlzRmluaXRlKHYpKSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9IGZsZXhCYXNpcz17MH0gbWluV2lkdGg9ezB9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICB7bWV0cmljLmxhYmVsIHx8IG1ldHJpYy5uYW1lfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAge3Nob3dTcGFya2xpbmUgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luUmlnaHQ9ezF9PlxuICAgICAgICAgICAgICAgICAgICA8U3BhcmtsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpZXM9e2hpc3Rvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17dGhlbWUuYWNjZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4PXtzcGFya01heH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXsxNH0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiIG1hcmdpblJpZ2h0PXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0TWV0cmljVmFsdWUodmFsdWUsIG1ldHJpYy51bml0KX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9IGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+e2FnZVMgPT0gbnVsbCA/ICdcdTIwMTQnIDogYCR7YWdlU31zYH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE92ZXJ2aWV3VGFiKHtcbiAgICBkZXZpY2VzLFxuICAgIHNhbXBsZXMsXG4gICAgaGlzdG9yeSxcbiAgICBjcHVIaXN0b3J5LFxuICAgIGV2ZW50cyxcbiAgICBhbGFybXMsXG4gICAgYWxhcm1TZXZlcml0eUJ5RGV2aWNlLFxuICAgIHByb2R1Y3RNZXRyaWNzLFxuICAgIHByb2R1Y3RJbmZvLFxuICAgIGxhdGVzdEFnZW50VmVyc2lvbixcbiAgICBvdXRkYXRlZENvdW50LFxuICAgIHVwZ3JhZGVTdGF0ZSxcbiAgICBzZWxlY3RlZElkLFxuICAgIG9uU2VsZWN0RGV2aWNlLFxuICAgIHNvcnQsXG4gICAgb25DeWNsZVNvcnQsXG4gICAgZmlsdGVyLFxuICAgIGZpbHRlcmluZyxcbiAgICBvblN0YXJ0RmlsdGVyLFxuICAgIG9uQ29uZmlybURldmljZSxcbiAgICBvblJlcXVlc3RVcGdyYWRlLFxuICAgIGRldmljZXNMb2FkaW5nLFxuICAgIGRldmljZXNFcnJvcixcbiAgICBtZXRyaWNGaWx0ZXIsXG4gICAgb25NZXRyaWNGaWx0ZXJDaGFuZ2UsXG59KSB7XG4gICAgdXNlVGFiQ3ljbGUoJ292ZXJ2aWV3Jyk7XG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IHVzZVN0ZG91dCgpO1xuICAgIC8vIFN1YnNjcmliZSB0byByZXNpemUgc28gdGhlIHBlci1wYW5lbCByb3cgYWxsb2NhdGlvbiBiZWxvdyBwaWNrcyB1cFxuICAgIC8vIHRoZSBuZXcgdGVybWluYWwgaGVpZ2h0IG9uIHRoZSBuZXh0IHJlbmRlci4gYHN0ZG91dC5yb3dzYCBpcyBhXG4gICAgLy8gZ2V0dGVyIHRoYXQgcmVmbGVjdHMgdGhlIGN1cnJlbnQgc2l6ZSwgYnV0IHJlYWRpbmcgaXQgZHVyaW5nIHJlbmRlclxuICAgIC8vIGRvZXMgbm90LCBieSBpdHNlbGYsIHNjaGVkdWxlIGEgcmUtcmVuZGVyIHdoZW4gdGhlIHRlcm1pbmFsIGlzXG4gICAgLy8gcmVzaXplZCBcdTIwMTQgdGhlIGxpc3RlbmVyIGJlbG93IGRvZXMuXG4gICAgY29uc3QgW3Rlcm1pbmFsUm93cywgc2V0VGVybWluYWxSb3dzXSA9IHVzZVN0YXRlKCgpID0+IHN0ZG91dD8ucm93cyA/PyAzNik7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFzdGRvdXQpIHJldHVybjtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gKCkgPT4gc2V0VGVybWluYWxSb3dzKHN0ZG91dC5yb3dzID8/IDM2KTtcbiAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgIHN0ZG91dC5vbigncmVzaXplJywgdXBkYXRlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHN0ZG91dC5vZmYoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSwgW3N0ZG91dF0pO1xuXG4gICAgLy8gVHdvIHZpZXdzIG92ZXIgdGhlIHNhbWUgYWxhcm0gbGlzdDogJ3J1bGUnIGNvbGxhcHNlcyB0byBvbmUgcm93IHBlclxuICAgIC8vIGFsYXJtIHJ1bGUgKGJldHRlciBmb3IgdHJpYWdlKSwgJ2luc3RhbmNlJyBzaG93cyBvbmUgcm93IHBlciBkZXZpY2VcbiAgICAvLyAoYmV0dGVyIHdoZW4geW91IHdhbnQgdG8gc3BvdCBhIHNwZWNpZmljIG1hY2hpbmUgcXVpY2tseSkuXG4gICAgY29uc3QgW2FsYXJtVmlldywgc2V0QWxhcm1WaWV3XSA9IHVzZVN0YXRlKCdydWxlJyk7XG5cbiAgICBjb25zdCBmbGVldCA9IHVzZUZvY3VzYWJsZSh7XG4gICAgICAgIGlkOiAnb3ZlcnZpZXctZmxlZXQnLFxuICAgICAgICBwYXJlbnQ6ICdvdmVydmlldycsXG4gICAgICAgIGhpbnQ6IEZMRUVUX0hJTlQsXG4gICAgICAgIGhhbmRsZXJzOiAoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnLycpIHJldHVybiBvblN0YXJ0RmlsdGVyPy4oKTtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ3MnKSByZXR1cm4gb25DeWNsZVNvcnQ/LigpO1xuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4gJiYgc2VsZWN0ZWRJZCkgcmV0dXJuIG9uQ29uZmlybURldmljZT8uKCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgYWxlcnRzSGFzSW5zdGFuY2VzID0gKGFsYXJtcz8uaW5zdGFuY2VzPy5sZW5ndGggfHwgMCkgPiAwO1xuICAgIGNvbnN0IGFsZXJ0c1BhbmVsID0gdXNlRm9jdXNhYmxlKHtcbiAgICAgICAgaWQ6ICdvdmVydmlldy1hbGVydHMnLFxuICAgICAgICBwYXJlbnQ6ICdvdmVydmlldycsXG4gICAgICAgIGhpbnQ6IEFMRVJUU19ISU5ULFxuICAgICAgICBoYW5kbGVyczogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICd2JyAmJiBhbGVydHNIYXNJbnN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICBzZXRBbGFybVZpZXcoKHYpID0+ICh2ID09PSAncnVsZScgPyAnaW5zdGFuY2UnIDogJ3J1bGUnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgdmVyc2lvbnNQYW5lbCA9IHVzZUZvY3VzYWJsZSh7XG4gICAgICAgIGlkOiAnb3ZlcnZpZXctdmVyc2lvbnMnLFxuICAgICAgICBwYXJlbnQ6ICdvdmVydmlldycsXG4gICAgICAgIGhpbnQ6IFZFUlNJT05TX0hJTlQsXG4gICAgICAgIGhhbmRsZXJzOiAoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ3UnKSBvblJlcXVlc3RVcGdyYWRlPy4oKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjb3VudHMgPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PiBmbGVldENvdW50cyhkZXZpY2VzLCBhbGFybVNldmVyaXR5QnlEZXZpY2UpLFxuICAgICAgICBbZGV2aWNlcywgYWxhcm1TZXZlcml0eUJ5RGV2aWNlXSxcbiAgICApO1xuICAgIGNvbnN0IGFsYXJtSW5zdGFuY2VzID0gYWxhcm1zPy5pbnN0YW5jZXMgPz8gW107XG4gICAgY29uc3QgYWxhcm1Db3VudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0ID0geyBjcml0OiAwLCBoaWdoOiAwLCBtZWQ6IDAsIGxvdzogMCB9O1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgYWxhcm1JbnN0YW5jZXMpIHtcbiAgICAgICAgICAgIGlmIChpLnNldmVyaXR5ID09PSBBTEFSTV9TRVZFUklUWS5DUklUSUNBTCkgb3V0LmNyaXQrKztcbiAgICAgICAgICAgIGVsc2UgaWYgKGkuc2V2ZXJpdHkgPT09IEFMQVJNX1NFVkVSSVRZLkhJR0gpIG91dC5oaWdoKys7XG4gICAgICAgICAgICBlbHNlIGlmIChpLnNldmVyaXR5ID09PSBBTEFSTV9TRVZFUklUWS5NRURJVU0pIG91dC5tZWQrKztcbiAgICAgICAgICAgIGVsc2Ugb3V0LmxvdysrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfSwgW2FsYXJtSW5zdGFuY2VzXSk7XG4gICAgY29uc3QgYWxhcm1TdGF0ZUNvdW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBvdXQgPSB7IGFjdGl2ZTogMCwgYWNrOiAwLCBsYXRjaGVkOiAwLCBzaGVsdmVkOiAwIH07XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBhbGFybUluc3RhbmNlcykge1xuICAgICAgICAgICAgaWYgKGkuc3RhdGUgPT09IEFMQVJNX1NUQVRFLkFDS05PV0xFREdFRCkgb3V0LmFjaysrO1xuICAgICAgICAgICAgZWxzZSBpZiAoaS5zdGF0ZSA9PT0gQUxBUk1fU1RBVEUuTEFUQ0hFRCkgb3V0LmxhdGNoZWQrKztcbiAgICAgICAgICAgIGVsc2UgaWYgKGkuc3RhdGUgPT09IEFMQVJNX1NUQVRFLlNIRUxWRUQpIG91dC5zaGVsdmVkKys7XG4gICAgICAgICAgICBlbHNlIG91dC5hY3RpdmUrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sIFthbGFybUluc3RhbmNlc10pO1xuICAgIC8vIEdyb3VwIGFjdGl2ZSBpbnN0YW5jZXMgYnkgcnVsZSBuYW1lLiBFYWNoIGdyb3VwIGxpc3RzIHdoaWNoIGRldmljZXNcbiAgICAvLyBhcmUgZmlyaW5nIFx1MjAxNCBlYXNpZXIgdG8gc2NhbiBcIjUgYm94ZXMgaGl0IEhpZ2ggTWVtb3J5XCIgdGhhbiByZWFkaW5nXG4gICAgLy8gdGhlIHNhbWUgcnVsZSBuYW1lIGRvd24gNSByb3dzLiBFYWNoIGRldmljZSBlbnRyeSBjYXJyaWVzIHRoZSB2YWx1ZVxuICAgIC8vIGFuZCBzdGF0ZSBzbyB0aGUgcm93IHJlbmRlcnMgcGFyaXR5IHdpdGggdGhlIGluc3RhbmNlIHZpZXcuXG4gICAgY29uc3QgYWxhcm1Hcm91cHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgYWxhcm1JbnN0YW5jZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGkubmFtZSB8fCBpLmFsYXJtPy5ydWxlIHx8ICdhbGFybSc7XG4gICAgICAgICAgICBjb25zdCBkZXYgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogaS5vcmlnaW4/Lm5hbWUgfHwgaS5vcmlnaW4/LmlkIHx8ICdcdTIwMTQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBldmFsdWF0aW9uVmFsdWUoaSksXG4gICAgICAgICAgICAgICAgc3RhdGU6IGkuc3RhdGUsXG4gICAgICAgICAgICAgICAgaW5pdGlhdGVkOiBhY3RpdmF0aW9uTXMoaSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc2V2ID0gaS5zZXZlcml0eSA/PyBBTEFSTV9TRVZFUklUWS5OT05FO1xuICAgICAgICAgICAgY29uc3QgY3VyID0gZ3JvdXBzLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGN1cikge1xuICAgICAgICAgICAgICAgIGN1ci5jb3VudCArPSAxO1xuICAgICAgICAgICAgICAgIGN1ci5kZXZpY2VzLnB1c2goZGV2KTtcbiAgICAgICAgICAgICAgICBpZiAoc2V2ID4gY3VyLnNldmVyaXR5KSBjdXIuc2V2ZXJpdHkgPSBzZXY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3Vwcy5zZXQoa2V5LCB7IG5hbWU6IGtleSwgY291bnQ6IDEsIHNldmVyaXR5OiBzZXYsIGRldmljZXM6IFtkZXZdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uZ3JvdXBzLnZhbHVlcygpXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBpZiAoYS5zZXZlcml0eSAhPT0gYi5zZXZlcml0eSkgcmV0dXJuIGIuc2V2ZXJpdHkgLSBhLnNldmVyaXR5O1xuICAgICAgICAgICAgcmV0dXJuIGIuY291bnQgLSBhLmNvdW50O1xuICAgICAgICB9KTtcbiAgICB9LCBbYWxhcm1JbnN0YW5jZXNdKTtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IHVzZU1lbW8oKCkgPT4gYWdlbnRWZXJzaW9uQ291bnRzKGRldmljZXMsIHNhbXBsZXMpLCBbZGV2aWNlcywgc2FtcGxlc10pO1xuICAgIGNvbnN0IGtpbmRzID0gdXNlTWVtbygoKSA9PiBkZXZpY2VLaW5kQ291bnRzKGRldmljZXMpLCBbZGV2aWNlc10pO1xuICAgIC8vIFByZS1jb21wdXRlIHRoZSB3aWRlc3QgaG9zdG5hbWUgYWNyb3NzIGluc3RhbmNlcyBzbyB0aGUgcnVsZSBjb2x1bW5cbiAgICAvLyBhbGlnbnMuIENhcHBlZCB0byBrZWVwIHRoZSBydWxlIGNvbHVtbiBmcm9tIGJlaW5nIHNxdWVlemVkIHdoZW4gb25lXG4gICAgLy8gZGV2aWNlIGhhcyBhIHJ1bmF3YXkgaG9zdG5hbWUuXG4gICAgY29uc3QgYWxhcm1Ib3N0V2lkdGggPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgMzIsXG4gICAgICAgICAgICAgICAgYWxhcm1JbnN0YW5jZXMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAodywgaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHcsIChpLm9yaWdpbj8ubmFtZSB8fCBpLm9yaWdpbj8uaWQgfHwgJycpLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgIDE0LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICBbYWxhcm1JbnN0YW5jZXNdLFxuICAgICk7XG4gICAgY29uc3Qgbm93VHMgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3QgbGFzdENwdSA9IGhpc3RvcnkuY3B1Py5hdD8uKC0xKTtcbiAgICBjb25zdCBsYXN0TWVtID0gaGlzdG9yeS5tZW0/LmF0Py4oLTEpO1xuICAgIGNvbnN0IGxhc3REaXNrID0gaGlzdG9yeS5kaXNrPy5hdD8uKC0xKTtcblxuICAgIGNvbnN0IHZlcnNpb25zTWF4ID0gTWF0aC5tYXgoMSwgLi4udmVyc2lvbnMubWFwKChbLCBjXSkgPT4gYykpO1xuICAgIC8vIFRhcmdldCA9IHdoaWNoZXZlciBpcyBuZXdlcjogdGhlIENETidzIHB1Ymxpc2hlZCBgbGF0ZXN0YCBvciB0aGVcbiAgICAvLyBoaWdoZXN0IHNlbXZlciB3ZSd2ZSBhY3R1YWxseSBvYnNlcnZlZCBvbiB0aGUgZmxlZXQuIFdlIGZhbGwgYmFjayB0b1xuICAgIC8vIHRoZSBsb2NhbCBtYXggc28gdGhlIHBhbmVsIHN0YXlzIHVzZWZ1bCB3aGVuIHRoZSBDRE4gbG9va3VwIGZhaWxzXG4gICAgLy8gKGFpcmdhcCwgRE5TLCB3aGF0ZXZlcikgXHUyMDE0IG91dGRhdGVkIHN0aWxsIHJlc29sdmVzIGFnYWluc3QgdGhlIG5ld2VzdFxuICAgIC8vIHRoaW5nIHdlIGtub3cgYWJvdXQuXG4gICAgY29uc3QgbG9jYWxNYXggPSB2ZXJzaW9uc1swXT8uWzBdO1xuICAgIGNvbnN0IHRhcmdldCA9ICgoKSA9PiB7XG4gICAgICAgIGlmICghbGF0ZXN0QWdlbnRWZXJzaW9uKSByZXR1cm4gbG9jYWxNYXggfHwgbnVsbDtcbiAgICAgICAgaWYgKCFsb2NhbE1heCkgcmV0dXJuIGxhdGVzdEFnZW50VmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVBZ2VudFZlcnNpb25zKGxhdGVzdEFnZW50VmVyc2lvbiwgbG9jYWxNYXgpIDw9IDBcbiAgICAgICAgICAgID8gbGF0ZXN0QWdlbnRWZXJzaW9uXG4gICAgICAgICAgICA6IGxvY2FsTWF4O1xuICAgIH0pKCk7XG4gICAgY29uc3QgdmVyc2lvblJvd3MgPSB2ZXJzaW9ucy5tYXAoKFt2LCBjXSkgPT4ge1xuICAgICAgICBsZXQgbGV2ZWw7XG4gICAgICAgIGlmICghdGFyZ2V0IHx8IHYgPT09IHRhcmdldCkgbGV2ZWwgPSAndGFyZ2V0JztcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID0gY29tcGFyZUFnZW50VmVyc2lvbnModiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIC8vIHBvc2l0aXZlID0gb2xkZXIgdGhhbiB0YXJnZXQ7ID4wIGJ1dCBvbmx5IGEgc3RlcCBhd2F5IGlzIFwib2xkXCIsXG4gICAgICAgICAgICAvLyBhbnl0aGluZyBiaWdnZXIgaXMgXCJhbmNpZW50XCIuIFdlIGFwcHJveGltYXRlIFwiYSBzdGVwXCIgYXMgdGhlXG4gICAgICAgICAgICAvLyByb3cgcmlnaHQgYWZ0ZXIgdGFyZ2V0IGluIHRoZSBzb3J0ZWQgbGlzdC5cbiAgICAgICAgICAgIGxldmVsID0gZGlmZiA+IDAgPyAnb2xkJyA6ICd0YXJnZXQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHYsIGMsIGxldmVsIH07XG4gICAgfSk7XG4gICAgLy8gUmUtbWFyayByb3dzOiBmaXJzdCBub24tdGFyZ2V0IGlzIFwib2xkXCIsIHRoZSByZXN0IGFyZSBcImFuY2llbnRcIi5cbiAgICBsZXQgc2Vlbk9sZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHZlcnNpb25Sb3dzKSB7XG4gICAgICAgIGlmIChyb3cubGV2ZWwgPT09ICd0YXJnZXQnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFzZWVuT2xkKSB7XG4gICAgICAgICAgICByb3cubGV2ZWwgPSAnb2xkJztcbiAgICAgICAgICAgIHNlZW5PbGQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93LmxldmVsID0gJ2FuY2llbnQnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0YWxlID1cbiAgICAgICAgdHlwZW9mIG91dGRhdGVkQ291bnQgPT09ICdudW1iZXInXG4gICAgICAgICAgICA/IG91dGRhdGVkQ291bnRcbiAgICAgICAgICAgIDogdmVyc2lvbnNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKFt2XSkgPT4gdGFyZ2V0ICYmIHYgIT09IHRhcmdldCAmJiBjb21wYXJlQWdlbnRWZXJzaW9ucyh2LCB0YXJnZXQpID4gMClcbiAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGEsIFssIGNdKSA9PiBhICsgYywgMCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgIHsvKiBMZWZ0IGNvbHVtbjogS1BJcyArIEFjdGl2ZSBhbGVydHMgKi99XG4gICAgICAgICAgICA8Qm94IHdpZHRoPVwiMzIlXCIgZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxQYW5lbCB0aXRsZT1cIkZMRUVUXCIgc3ViPVwicmVhbHRpbWVcIiByaWdodD17PFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pmxhc3Qgc3luYyAwczwvVGV4dD59IGZsZXhHcm93PXswfSBmbGV4U2hyaW5rPXswfT5cbiAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgbWFyZ2luQm90dG9tPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxLcGkgbGFiZWw9XCJPTkxJTkVcIiB2YWx1ZT17Y291bnRzLm9ubGluZX0gY29sb3I9e3RoZW1lLmxpbWV9IHN1ZmZpeD17YCAvICR7Y291bnRzLnRvdGFsfWB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8S3BpIGxhYmVsPVwiT0ZGTElORVwiIHZhbHVlPXtjb3VudHMub2ZmbGluZX0gY29sb3I9e3RoZW1lLmZnRGltfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEtwaSBsYWJlbD1cIkRFR1JBREVEXCIgdmFsdWU9e2NvdW50cy53YXJufSBjb2xvcj17Y291bnRzLndhcm4gPyB0aGVtZS5hbWJlciA6IHRoZW1lLmZnRGltfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEtwaSBsYWJlbD1cIkNSSVRJQ0FMXCIgdmFsdWU9e2NvdW50cy5iYWR9IGNvbG9yPXtjb3VudHMuYmFkID8gdGhlbWUucmVkIDogdGhlbWUuZmdEaW19IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1pbmlNZXRyaWMgbGFiZWw9XCJDUFVcIiB2YWx1ZT17bGFzdENwdX0gaGlzdG9yeT17aGlzdG9yeS5jcHV9IGNvbG9yPXt0aGVtZS5hY2NlbnR9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWluaU1ldHJpYyBsYWJlbD1cIk1FTVwiIHZhbHVlPXtsYXN0TWVtfSBoaXN0b3J5PXtoaXN0b3J5Lm1lbX0gY29sb3I9e3RoZW1lLm1hZ2VudGF9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWluaU1ldHJpYyBsYWJlbD1cIkRJU0tcIiB2YWx1ZT17bGFzdERpc2t9IGhpc3Rvcnk9e2hpc3RvcnkuZGlza30gY29sb3I9e3RoZW1lLmxpbWV9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICB7a2luZHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtraW5kcy5zbGljZSgwLCA4KS5tYXAoKFtrLCBjXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1VuYXNzaWduZWQgPSBrID09PSBVTkFTU0lHTkVEX1BST0RVQ1RfS0VZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGlzVW5hc3NpZ25lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbm8gcHJvZHVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcHJvZHVjdEluZm8/LltrXT8ubmFtZSB8fCBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9IGZsZXhCYXNpcz17MH0gbWluV2lkdGg9ezB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5hc3NpZ25lZCA/IHRoZW1lLmZnRmFpbnQgOiB0aGVtZS5mZ0RpbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD1cInRydW5jYXRlLWVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGFsaWM9e2lzVW5hc3NpZ25lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Nn0ganVzdGlmeUNvbnRlbnQ9XCJmbGV4LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5hc3NpZ25lZCA/IHRoZW1lLmZnRGltIDogdGhlbWUuYWNjZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkPXshaXNVbmFzc2lnbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgICAgIHtwcm9kdWN0TWV0cmljcz8ubWV0cmljcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBncm91cE1ldHJpY3NCeVByb2R1Y3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0TWV0cmljcy5tZXRyaWNzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobSkgPT4gbS52aXN1YWxpemF0aW9uICE9PSAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgIChbcHJvZHVjdCwgbGlzdF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdEluZm8/Lltwcm9kdWN0XT8ubmFtZSB8fCBwcm9kdWN0IHx8ICdtZXRyaWNzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cHJvZHVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtkaXNwbGF5LnRvVXBwZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWI9e2Ake2xpc3QubGVuZ3RofWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdE1ldHJpY3MuZXJyb3IgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9PmVycjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+e3Byb2R1Y3R9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhHcm93PXswfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFNocmluaz17MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpc3QubWFwKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgayA9IGAke20ucHJvZHVjdH06JHttLm5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWV0cmljUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWM9e219XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvZHVjdE1ldHJpY3MudmFsdWVzW2tdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeT17cHJvZHVjdE1ldHJpY3MuaGlzdG9yeT8uW2tdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFVwZGF0ZT17cHJvZHVjdE1ldHJpY3MubGFzdFVwZGF0ZVtrXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUGFuZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQUNUSVZFIEFMRVJUU1wiXG4gICAgICAgICAgICAgICAgICAgIHN1Yj17YWxhcm1JbnN0YW5jZXMubGVuZ3RoID4gMCA/IGAke2FsYXJtSW5zdGFuY2VzLmxlbmd0aH1gIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17YWxlcnRzUGFuZWwuZm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1JbnN0YW5jZXMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FsYXJtU3RhdGVDb3VudHMuYWNrICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtU3RhdGVDb3VudHMubGF0Y2hlZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybVN0YXRlQ291bnRzLnNoZWx2ZWQgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FsYXJtU3RhdGVDb3VudHMuYWNrID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHthbGFybVN0YXRlQ291bnRzLmFja30gYWNrIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FsYXJtU3RhdGVDb3VudHMubGF0Y2hlZCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7YWxhcm1TdGF0ZUNvdW50cy5sYXRjaGVkfSBsYXRjaGVkIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FsYXJtU3RhdGVDb3VudHMuc2hlbHZlZCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7YWxhcm1TdGF0ZUNvdW50cy5zaGVsdmVkfSBzaGVsdmVkIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Plx1MDBCNyA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT52IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0+e2FsYXJtVmlld308L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2FsYXJtcz8uZXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnJlZH0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthbGFybXMuZXJyb3I/Lm1lc3NhZ2UgfHwgJ2ZhaWxlZCB0byBsb2FkIGFsYXJtcyd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHshYWxhcm1zPy5lcnJvciAmJiBhbGFybUluc3RhbmNlcy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthbGFybXM/LmxvYWRpbmcgPyAnbG9hZGluZyBhbGFybXNcdTIwMjYnIDogJ25vIGFjdGl2ZSBhbGVydHMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7YWxhcm1JbnN0YW5jZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiIG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLcGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQ1JJVFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YWxhcm1Db3VudHMuY3JpdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXthbGFybUNvdW50cy5jcml0ID8gdGhlbWUucmVkIDogdGhlbWUuZmdEaW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLcGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiSElHSFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17YWxhcm1Db3VudHMuaGlnaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXthbGFybUNvdW50cy5oaWdoID8gdGhlbWUucmVkIDogdGhlbWUuZmdEaW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxLcGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiTUVEXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXthbGFybUNvdW50cy5tZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YWxhcm1Db3VudHMubWVkID8gdGhlbWUuYW1iZXIgOiB0aGVtZS5mZ0RpbX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEtwaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJMT1dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2FsYXJtQ291bnRzLmxvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXthbGFybUNvdW50cy5sb3cgPyB0aGVtZS5hY2NlbnQgOiB0aGVtZS5mZ0RpbX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWxhcm1WaWV3ID09PSAncnVsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhbGFybUdyb3Vwcy5tYXAoKGcpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFsYXJtR3JvdXBSb3cga2V5PXtnLm5hbWV9IGdyb3VwPXtnfSBub3c9e25vd1RzfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYWxhcm1JbnN0YW5jZXMubWFwKChpbnN0KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBbGFybUluc3RhbmNlUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luc3QuaW5zdGFuY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0PXtpbnN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdFdpZHRoPXthbGFybUhvc3RXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdz17bm93VHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIHsvKiBNaWRkbGUgY29sdW1uOiBpbnRlcmFjdGl2ZSBkZXZpY2VzIGxpc3QgKi99XG4gICAgICAgICAgICA8Qm94IHdpZHRoPVwiNDAlXCIgZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxEZXZpY2VzUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlcz17ZGV2aWNlc31cbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcz17c2FtcGxlc31cbiAgICAgICAgICAgICAgICAgICAgY3B1SGlzdG9yeT17Y3B1SGlzdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgYWxhcm1TZXZlcml0eUJ5RGV2aWNlPXthbGFybVNldmVyaXR5QnlEZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2RldmljZXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICBlcnJvcj17ZGV2aWNlc0Vycm9yfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtmbGVldC5mb2N1c2VkfVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZElkPXtzZWxlY3RlZElkfVxuICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17b25TZWxlY3REZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgIHNvcnQ9e3NvcnR9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJpbmc9e2ZpbHRlcmluZ31cbiAgICAgICAgICAgICAgICAgICAgbWV0cmljRmlsdGVyPXttZXRyaWNGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc0J5RGV2aWNlPXtwcm9kdWN0TWV0cmljcz8udmFsdWVzQnlEZXZpY2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7LyogUmlnaHQgY29sdW1uOiB2ZXJzaW9ucyArIGV2ZW50cyAqL31cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9XCIyOCVcIiBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQUdFTlQgVkVSU0lPTlNcIlxuICAgICAgICAgICAgICAgICAgICBzdWI9e3RhcmdldCA/IGBsYXRlc3QgJHt0YXJnZXR9YCA6ICdkZXBsb3llZCd9XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e3ZlcnNpb25zUGFuZWwuZm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZVN0YXRlPy5waGFzZSA9PT0gJ3J1bm5pbmcnID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9Plx1MjVDRiBydW5uaW5nPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHN0YWxlID4gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+dSBcdTAwQjcgdXBncmFkZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmxleEdyb3c9ezB9XG4gICAgICAgICAgICAgICAgICAgIGZsZXhTaHJpbms9ezB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dmVyc2lvblJvd3MubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT53YWl0aW5nIGZvciBzYW1wbGVzXHUyMDI2PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7dmVyc2lvblJvd3MubWFwKChyKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VmVyc2lvbkJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ci52fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY9e3Iudn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD17ci5jfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD17dmVyc2lvbnNNYXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9e3IubGV2ZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAge3VwZ3JhZGVTdGF0ZT8ucGhhc2UgPT09ICdydW5uaW5nJyAmJiB1cGdyYWRlU3RhdGUucHJvZ3Jlc3MgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9Plx1MjFCQiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRpbmcge3VwZ3JhZGVTdGF0ZS5wcm9ncmVzcy5kb25lfS97dXBncmFkZVN0YXRlLnByb2dyZXNzLnRvdGFsfVx1MjAyNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7dXBncmFkZVN0YXRlPy5waGFzZSA9PT0gJ2RvbmUnICYmIHVwZ3JhZGVTdGF0ZS5zdW1tYXJ5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dXBncmFkZVN0YXRlLmFib3J0ZWQgPyB0aGVtZS5hbWJlciA6IHRoZW1lLmxpbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dXBncmFkZVN0YXRlLmFib3J0ZWQgPyAnXHUyNkEwICcgOiAnXHUyNzEzICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1cGdyYWRlU3RhdGUuc3VtbWFyeS5va30gb2sgXHUwMEI3IHt1cGdyYWRlU3RhdGUuc3VtbWFyeS5mYWlsZWR9IGZhaWxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dXBncmFkZVN0YXRlLmFib3J0ZWQgPyBgICgke3VwZ3JhZGVTdGF0ZS5yZWFzb259KWAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge3VwZ3JhZGVTdGF0ZT8ucGhhc2UgIT09ICdydW5uaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZVN0YXRlPy5waGFzZSAhPT0gJ2RvbmUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFsZSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFtYmVyfT5cdTI2QTAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YWxlfSBwZW5kaW5nIHVwZ3JhZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgICAgIHtwcm9kdWN0TWV0cmljcz8ubWV0cmljcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdE1ldHJpY3MgPSBwcm9kdWN0TWV0cmljcy5tZXRyaWNzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobSkgPT4gbS52aXN1YWxpemF0aW9uID09PSAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RNZXRyaWNzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUd28tcGFzcyByb3cgYWxsb2NhdGlvbiBhY3Jvc3MgZGlzdHJpYnV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYW5lbHMgaW4gdGhpcyBjb2x1bW4uIEVhY2ggcGFuZWwgcGF5cyBhIGZpeGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaHJvbWUgY29zdCAoYm9yZGVyICsgdGl0bGUgKyBnYXBzIFx1MjI0OCA0IHJvd3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXJ2ZSB+MTQgcm93cyB1cCB0b3AgZm9yIGRhc2hib2FyZCBjaHJvbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBBR0VOVCBWRVJTSU9OUy4gUGhhc2UgMTogZXZlcnkgcGFuZWwgdGhhdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZml0cyB1bmRlciBmYWlyLXNoYXJlIHRha2VzIGV4YWN0bHkgaXRzIGJ1Y2tldFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY291bnQuIFBoYXNlIDI6IHRoZSBsZWZ0b3ZlciBidWRnZXQgaXMgc3BsaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFtb25nIHBhbmVscyB0aGF0IHdhbnRlZCBtb3JlIChrZXJuZWwpIHNvIHRoZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgc3VycGx1cyBpbnN0ZWFkIG9mIGNsaXBwaW5nIHRoZSByZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxSb3dzID0gdGVybWluYWxSb3dzO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGVyIHBhbmVsOiBib3JkZXIgdG9wICsgdGl0bGUgKyBtYXJnaW5Cb3R0b20gK1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9yZGVyIGJvdHRvbSA9IDQgZml4ZWQgY2hyb21lIHJvd3MuIFNjcm9sbGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhbmVscyBhbHNvIHBheSBvbmUgcm93IGZvciB0aGUgXCJcdTIxOTMgTiBtb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGljYXRvciAoYW5kIGFub3RoZXIgZm9yIFwiXHUyMTkxIE4gbW9yZVwiIHdoZW4gdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXJzb3Igc2Nyb2xsZWQgcGFzdCB0aGUgdG9wKSwgY291bnRlZCBiZWxvdy5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNocm9tZVBlclBhbmVsID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhc2hib2FyZCBjaHJvbWUgYWJvdmUgdGhpcyBjb2x1bW46IHRhYnMgKDEpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFHRU5UIFZFUlNJT05TIHBhbmVsICh+NS02IHJvd3MpICsgZm9vdGVyICgxLTIpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyArIGEgdGlueSBzYWZldHkgbWFyZ2luLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzZXJ2ZWRUb3AgPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsQ2hyb21lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZFRvcCArIGxpc3RNZXRyaWNzLmxlbmd0aCAqIGNocm9tZVBlclBhbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVkZ2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdE1ldHJpY3MubGVuZ3RoICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFJvd3MgLSB0b3RhbENocm9tZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmYWlyU2hhcmUgPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoYnVkZ2V0IC8gbGlzdE1ldHJpY3MubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudHMgPSBsaXN0TWV0cmljcy5tYXAoKG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrID0gYCR7bS5wcm9kdWN0fToke20ubmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBwcm9kdWN0TWV0cmljcy52YWx1ZXNba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXModikubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdGVkID0gY291bnRzLm1hcCgoYykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID4gMCAmJiBjIDw9IGZhaXJTaGFyZSA/IGMgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZWRTb0ZhciA9IGFsbG9jYXRlZC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFjYywgbikgPT4gYWNjICsgKG4gfHwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncmVlZHkgPSBhbGxvY2F0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChuLCBpKSA9PiAobiA9PT0gbnVsbCA/IGkgOiAtMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoaSkgPT4gaSA+PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVhY2ggZ3JlZWR5IHBhbmVsIHBheXMgb25lIGV4dHJhIHJvdyBmb3IgaXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBcIlx1MjE5MyBOIG1vcmVcIiBpbmRpY2F0b3IgaW5zaWRlIHRoZSBjb250ZW50IGFyZWE7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaHJpbmsgdGhlIGxlZnRvdmVyIGJ1ZGdldCBieSB0aGF0IG92ZXJoZWFkIHNvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aG9zZSBwYW5lbHMgZG9uJ3QgcHVzaCBwYXN0IHRoZSBjb2x1bW4uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncmVlZHlPdmVyaGVhZCA9IGdyZWVkeS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZWZ0b3ZlciA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVkZ2V0IC0gdXNlZFNvRmFyIC0gZ3JlZWR5T3ZlcmhlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSBsZWZ0b3ZlciBhbW9uZyBncmVlZHkgcGFuZWxzIHdpdGggdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9vciByZW1haW5kZXIgc3ByZWFkIGFjcm9zcyB0aGUgZmlyc3QgZmV3IHNvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBsZWF2ZSBlbXB0eSByb3dzIGF0IHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2x1bW4uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncmVlZHlCYXNlID0gZ3JlZWR5Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTWF0aC5mbG9vcihsZWZ0b3ZlciAvIGdyZWVkeS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JlZWR5RXh0cmEgPSBncmVlZHkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsZWZ0b3ZlciAtIGdyZWVkeUJhc2UgKiBncmVlZHkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JlZWR5QnlJZHggPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBncmVlZHkuZm9yRWFjaCgoaWR4LCBnaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWVkeUJ5SWR4LnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgyLCBncmVlZHlCYXNlICsgKGdpIDwgZ3JlZWR5RXh0cmEgPyAxIDogMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFJvd3NQZXIgPSBhbGxvY2F0ZWQubWFwKChuLCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBncmVlZHlCeUlkeC5nZXQoaSkgfHwgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1hdGgubWF4KDIsIG4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0TWV0cmljcy5tYXAoKG0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrID0gYCR7bS5wcm9kdWN0fToke20ubmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEaXN0cmlidXRpb25QYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljPXttfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb2R1Y3RNZXRyaWNzLnZhbHVlc1trXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVcGRhdGU9e3Byb2R1Y3RNZXRyaWNzLmxhc3RVcGRhdGVba119XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0SW5mbz17cHJvZHVjdEluZm99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVNZXRyaWNLZXk9e21ldHJpY0ZpbHRlcj8ubWV0cmljS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25CdWNrZXRDaGFuZ2U9e29uTWV0cmljRmlsdGVyQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Um93cz17bWF4Um93c1BlcltpXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJ2luayc7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gJy4uL3RoZW1lLmpzJztcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSAnLi9QYW5lbC5qc3gnO1xuaW1wb3J0IHsgQUxBUk1fU0VWRVJJVFksIEFMQVJNX1NUQVRFIH0gZnJvbSAnQHRoaW5nZXItaW8vY2xpLWNvcmUvYWxhcm1zJztcblxuY29uc3QgU0VWRVJJVFlfU1RZTEUgPSB7XG4gICAgW0FMQVJNX1NFVkVSSVRZLkNSSVRJQ0FMXTogeyBnbHlwaDogJ1x1MjVDRicsIGNvbG9yOiB0aGVtZS5yZWQsIGxhYmVsOiAnQ1JJVCcgfSxcbiAgICBbQUxBUk1fU0VWRVJJVFkuSElHSF06IHsgZ2x5cGg6ICdcdTI1Q0YnLCBjb2xvcjogdGhlbWUucmVkLCBsYWJlbDogJ0hJR0gnIH0sXG4gICAgW0FMQVJNX1NFVkVSSVRZLk1FRElVTV06IHsgZ2x5cGg6ICdcdTI1QjInLCBjb2xvcjogdGhlbWUuYW1iZXIsIGxhYmVsOiAnTUVEJyB9LFxuICAgIFtBTEFSTV9TRVZFUklUWS5MT1ddOiB7IGdseXBoOiAnaScsIGNvbG9yOiB0aGVtZS5hY2NlbnQsIGxhYmVsOiAnTE9XJyB9LFxuICAgIFtBTEFSTV9TRVZFUklUWS5OT05FXTogeyBnbHlwaDogJ1x1MDBCNycsIGNvbG9yOiB0aGVtZS5mZ0RpbSwgbGFiZWw6ICdcdTIwMTQnIH0sXG59O1xuXG5jb25zdCBTVEFURV9TVFlMRSA9IHtcbiAgICBbQUxBUk1fU1RBVEUuTk9ORV06IHsgY29sb3I6IHRoZW1lLmZnRGltLCBsYWJlbDogJ1BFTkQnIH0sXG4gICAgW0FMQVJNX1NUQVRFLkFDVElWQVRFRF06IHsgY29sb3I6IHRoZW1lLnJlZCwgbGFiZWw6ICdBQ1RJVkUnIH0sXG4gICAgW0FMQVJNX1NUQVRFLkFDS05PV0xFREdFRF06IHsgY29sb3I6IHRoZW1lLmFtYmVyLCBsYWJlbDogJ0FDSycgfSxcbiAgICBbQUxBUk1fU1RBVEUuTEFUQ0hFRF06IHsgY29sb3I6IHRoZW1lLmFtYmVyLCBsYWJlbDogJ0xBVENIRUQnIH0sXG4gICAgW0FMQVJNX1NUQVRFLlNIRUxWRURdOiB7IGNvbG9yOiB0aGVtZS5mZ0RpbSwgbGFiZWw6ICdTSEVMVkVEJyB9LFxuICAgIFtBTEFSTV9TVEFURS5DTEVBUkVEXTogeyBjb2xvcjogdGhlbWUuZ3JlZW4sIGxhYmVsOiAnQ0xFQVJFRCcgfSxcbn07XG5cbmZ1bmN0aW9uIHNldmVyaXR5U3R5bGUoc2V2KSB7XG4gICAgcmV0dXJuIFNFVkVSSVRZX1NUWUxFW3Nldl0gPz8gU0VWRVJJVFlfU1RZTEVbQUxBUk1fU0VWRVJJVFkuTk9ORV07XG59XG5cbmZ1bmN0aW9uIHN0YXRlU3R5bGUoc3RhdGUpIHtcbiAgICByZXR1cm4gU1RBVEVfU1RZTEVbc3RhdGVdID8/IFNUQVRFX1NUWUxFW0FMQVJNX1NUQVRFLk5PTkVdO1xufVxuXG5mdW5jdGlvbiBkdXJhdGlvbkxhYmVsKG1zKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobXMpIHx8IG1zIDwgMCkgcmV0dXJuICdcdTIwMTQnO1xuICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKG1zIC8gMTAwMCk7XG4gICAgaWYgKHMgPCA2MCkgcmV0dXJuIGAke3N9c2A7XG4gICAgY29uc3QgbSA9IE1hdGguZmxvb3IocyAvIDYwKTtcbiAgICBpZiAobSA8IDYwKSByZXR1cm4gYCR7bX1tYDtcbiAgICBjb25zdCBoID0gTWF0aC5mbG9vcihtIC8gNjApO1xuICAgIGlmIChoIDwgMjQpIHJldHVybiBgJHtofWhgO1xuICAgIGNvbnN0IGQgPSBNYXRoLmZsb29yKGggLyAyNCk7XG4gICAgcmV0dXJuIGAke2R9ZGA7XG59XG5cbmZ1bmN0aW9uIGFjdGl2YXRpb25NcyhpbnN0KSB7XG4gICAgY29uc3QgdiA9IGluc3Q/LmFjdGl2YXRpb24/LmluaXRpYXRlZDtcbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSByZXR1cm4gdjtcbiAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHQgPSBEYXRlLnBhcnNlKHYpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpID8gdCA6IG51bGw7XG4gICAgfVxuICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2LiRkYXRlICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2LiRkYXRlID09PSAnbnVtYmVyJykgcmV0dXJuIHYuJGRhdGU7XG4gICAgICAgIGNvbnN0IHQgPSBEYXRlLnBhcnNlKHYuJGRhdGUpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpID8gdCA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBIZWFkZXJDZWxsKHsgbGFiZWwsIHdpZHRoLCBhbGlnbiA9ICdsZWZ0JyB9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCB3aWR0aD17d2lkdGh9IGp1c3RpZnlDb250ZW50PXthbGlnbiA9PT0gJ3JpZ2h0JyA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCd9PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntsYWJlbH08L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIEFsYXJtUm93KHsgaW5zdCwgZGV2V2lkdGgsIG5hbWVXaWR0aCwgbm93IH0pIHtcbiAgICBjb25zdCBzZXYgPSBzZXZlcml0eVN0eWxlKGluc3Quc2V2ZXJpdHkpO1xuICAgIGNvbnN0IHN0ID0gc3RhdGVTdHlsZShpbnN0LnN0YXRlKTtcbiAgICBjb25zdCBkZXYgPSBpbnN0Lm9yaWdpbj8ubmFtZSB8fCBpbnN0Lm9yaWdpbj8uaWQgfHwgJ1x1MjAxNCc7XG4gICAgY29uc3QgbmFtZSA9IGluc3QubmFtZSB8fCBpbnN0LmFsYXJtPy5ydWxlIHx8ICdcdTIwMTQnO1xuICAgIGNvbnN0IGluaXRpYXRlZCA9IGFjdGl2YXRpb25NcyhpbnN0KTtcbiAgICBjb25zdCBzaW5jZSA9IGluaXRpYXRlZCAhPSBudWxsID8gZHVyYXRpb25MYWJlbChub3cgLSBpbml0aWF0ZWQpIDogJ1x1MjAxNCc7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezZ9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtzZXYuY29sb3J9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtzZXYuZ2x5cGh9IHtzZXYubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs5fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17c3QuY29sb3J9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHtzdC5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9e2RldldpZHRoICsgMn0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtkZXZ9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXtuYW1lV2lkdGggKyAyfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAge25hbWV9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IGZsZXhHcm93PXsxfSBqdXN0aWZ5Q29udGVudD1cImZsZXgtZW5kXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57c2luY2V9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGNvdW50c0J5U2V2ZXJpdHkoaW5zdGFuY2VzKSB7XG4gICAgY29uc3Qgb3V0ID0geyBjcml0OiAwLCBoaWdoOiAwLCBtZWQ6IDAsIGxvdzogMCB9O1xuICAgIGZvciAoY29uc3QgaSBvZiBpbnN0YW5jZXMpIHtcbiAgICAgICAgaWYgKGkuc2V2ZXJpdHkgPT09IEFMQVJNX1NFVkVSSVRZLkNSSVRJQ0FMKSBvdXQuY3JpdCsrO1xuICAgICAgICBlbHNlIGlmIChpLnNldmVyaXR5ID09PSBBTEFSTV9TRVZFUklUWS5ISUdIKSBvdXQuaGlnaCsrO1xuICAgICAgICBlbHNlIGlmIChpLnNldmVyaXR5ID09PSBBTEFSTV9TRVZFUklUWS5NRURJVU0pIG91dC5tZWQrKztcbiAgICAgICAgZWxzZSBpZiAoaS5zZXZlcml0eSA9PT0gQUxBUk1fU0VWRVJJVFkuTE9XKSBvdXQubG93Kys7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBbGVydHNUYWIoeyBhbGFybXMgfSkge1xuICAgIGNvbnN0IHsgaW5zdGFuY2VzLCBsb2FkaW5nLCBlcnJvciB9ID0gYWxhcm1zO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgY291bnRzID0gdXNlTWVtbygoKSA9PiBjb3VudHNCeVNldmVyaXR5KGluc3RhbmNlcyksIFtpbnN0YW5jZXNdKTtcbiAgICBjb25zdCBkZXZXaWR0aCA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBpbnN0YW5jZXMucmVkdWNlKFxuICAgICAgICAgICAgICAgICh3LCBpKSA9PlxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCh3LCAoaS5vcmlnaW4/Lm5hbWUgfHwgaS5vcmlnaW4/LmlkIHx8ICcnKS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIDEyLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgW2luc3RhbmNlc10sXG4gICAgKTtcbiAgICBjb25zdCBuYW1lV2lkdGggPSB1c2VNZW1vKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgaW5zdGFuY2VzLnJlZHVjZShcbiAgICAgICAgICAgICAgICAodywgaSkgPT4gTWF0aC5tYXgodywgKGkubmFtZSB8fCBpLmFsYXJtPy5ydWxlIHx8ICcnKS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIDE2LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgW2luc3RhbmNlc10sXG4gICAgKTtcblxuICAgIGxldCBib2R5O1xuICAgIGlmIChlcnJvcikge1xuICAgICAgICBib2R5ID0gKFxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnJlZH0+XG4gICAgICAgICAgICAgICAgZmFpbGVkIHRvIGxvYWQgYWxhcm1zOiB7ZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvYWRpbmcgJiYgaW5zdGFuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBib2R5ID0gPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PmxvYWRpbmcgYWxhcm1zXHUyMDI2PC9UZXh0PjtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYm9keSA9IDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5ubyBhY3RpdmUgYWxhcm1zIFx1MjAxNCBmbGVldCBpcyBoZWFsdGh5PC9UZXh0PjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBib2R5ID0gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkZXJDZWxsIGxhYmVsPVwic2V2ZXJpdHlcIiB3aWR0aD17Nn0gLz5cbiAgICAgICAgICAgICAgICAgICAgPEhlYWRlckNlbGwgbGFiZWw9XCJzdGF0ZVwiIHdpZHRoPXs5fSAvPlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGVyQ2VsbCBsYWJlbD1cImRldmljZVwiIHdpZHRoPXtkZXZXaWR0aCArIDJ9IC8+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkZXJDZWxsIGxhYmVsPVwicnVsZVwiIHdpZHRoPXtuYW1lV2lkdGggKyAyfSAvPlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGVyQ2VsbCBsYWJlbD1cInNpbmNlXCIgd2lkdGg9ezh9IGFsaWduPVwicmlnaHRcIiAvPlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgIHtpbnN0YW5jZXMubWFwKChpbnN0KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxBbGFybVJvd1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpbnN0Lmluc3RhbmNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdD17aW5zdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRldldpZHRoPXtkZXZXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVXaWR0aD17bmFtZVdpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgbm93PXtub3d9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgIDxQYW5lbFxuICAgICAgICAgICAgICAgIHRpdGxlPVwiQUxFUlRTXCJcbiAgICAgICAgICAgICAgICBzdWI9e2Ake2luc3RhbmNlcy5sZW5ndGh9IGFjdGl2ZWB9XG4gICAgICAgICAgICAgICAgcmlnaHQ9e1xuICAgICAgICAgICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdW50cy5jcml0ICsgY291bnRzLmhpZ2h9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiBjcml0IFx1MDBCNyA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYW1iZXJ9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdW50cy5tZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiBtZWQgXHUwMEI3IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvdW50cy5sb3d9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiBsb3c8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2JvZHl9XG4gICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tICcuL1BhbmVsLmpzeCc7XG5cbmNvbnN0IEtJTkQgPSB7XG4gICAgam9pbjogeyBjb2xvcjogdGhlbWUubGltZSB9LFxuICAgIGxlYXZlOiB7IGNvbG9yOiB0aGVtZS5hbWJlciB9LFxuICAgIGVycjogeyBjb2xvcjogdGhlbWUucmVkIH0sXG4gICAgaW5mbzogeyBjb2xvcjogdGhlbWUuYWNjZW50IH0sXG4gICAgdXBkOiB7IGNvbG9yOiB0aGVtZS5hY2NlbnQgfSxcbiAgICBkZXBsb3k6IHsgY29sb3I6IHRoZW1lLm1hZ2VudGEgfSxcbn07XG5cbmZ1bmN0aW9uIEV2ZW50Um93KHsgZSwgZGV2V2lkdGggfSkge1xuICAgIGNvbnN0IGsgPSBLSU5EW2Uua2luZF0gfHwgS0lORC5pbmZvO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXsxMH0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntlLnR9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXs4fT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17ay5jb2xvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge2Uua2luZC50b1VwcGVyQ2FzZSgpfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCB3aWR0aD17ZGV2V2lkdGggKyAyfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAge2UuZGV2fVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtlLm1zZ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c1RhYih7IGV2ZW50cyB9KSB7XG4gICAgY29uc3QgY291bnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dCA9IHsgam9pbjogMCwgbGVhdmU6IDAgfTtcbiAgICAgICAgZm9yIChjb25zdCBlIG9mIGV2ZW50cykge1xuICAgICAgICAgICAgaWYgKGUua2luZCA9PT0gJ2pvaW4nKSBvdXQuam9pbisrO1xuICAgICAgICAgICAgZWxzZSBpZiAoZS5raW5kID09PSAnbGVhdmUnKSBvdXQubGVhdmUrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sIFtldmVudHNdKTtcbiAgICBjb25zdCBkZXZXaWR0aCA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IGV2ZW50cy5yZWR1Y2UoKHcsIGUpID0+IE1hdGgubWF4KHcsIGUuZGV2Lmxlbmd0aCksIDEyKSxcbiAgICAgICAgW2V2ZW50c10sXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJFVkVOVFNcIlxuICAgICAgICAgICAgICAgIHN1Yj17YCR7ZXZlbnRzLmxlbmd0aH0gY2FwdHVyZWRgfVxuICAgICAgICAgICAgICAgIHJpZ2h0PXtcbiAgICAgICAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubGltZX0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y291bnRzLmpvaW59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiBqb2lucyBcdTAwQjcgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFtYmVyfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb3VudHMubGVhdmV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiBsZWF2ZXMgXHUwMEI3IDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5saW1lfT5cdTI1Q0YgbGl2ZTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7ZXZlbnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gZXZlbnRzXHUyMDI2IChqb2lucy9sZWF2ZXMgZGVyaXZlZCBmcm9tIGRldmljZSBwb2xsaW5nKVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZXZlbnRzLm1hcCgoZSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8RXZlbnRSb3cga2V5PXtgJHtlLnR9LSR7ZS5kZXZ9LSR7aX1gfSBlPXtlfSBkZXZXaWR0aD17ZGV2V2lkdGh9IC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCwgdXNlU3Rkb3V0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tICcuL1BhbmVsLmpzeCc7XG5pbXBvcnQgeyBQbGF5Ym9va1J1blZpZXcgfSBmcm9tICcuL1BsYXlib29rUnVuVmlldy5qc3gnO1xuaW1wb3J0IHsgUGxheWJvb2tSZXBvcnRWaWV3IH0gZnJvbSAnLi9QbGF5Ym9va1JlcG9ydFZpZXcuanN4JztcbmltcG9ydCB7IFBsYXlib29rVmFyc01vZGFsIH0gZnJvbSAnLi9QbGF5Ym9va1ZhcnNNb2RhbC5qc3gnO1xuaW1wb3J0IHsgRGV2aWNlUGlja2VyTW9kYWwgfSBmcm9tICcuL0RldmljZVBpY2tlck1vZGFsLmpzeCc7XG5pbXBvcnQgeyBDb25maXJtTW9kYWwgfSBmcm9tICcuL0NvbmZpcm1Nb2RhbC5qc3gnO1xuaW1wb3J0IHsgdXNlUHJvZHVjdFBsYXlib29rcyB9IGZyb20gJy4uL2hvb2tzL3VzZVByb2R1Y3RQbGF5Ym9va3MuanMnO1xuaW1wb3J0IHsgdXNlUGxheWJvb2tSdW5Db250cm9sbGVyIH0gZnJvbSAnLi4vaG9va3MvdXNlUGxheWJvb2tSdW5Db250cm9sbGVyLmpzJztcbmltcG9ydCB7IGZpbHRlckFjdGl2ZURldmljZXMgfSBmcm9tICdAdGhpbmdlci1pby9jbGktY29yZS9kZXZpY2VzJztcblxuY29uc3QgUEFORUxTID0gWydsaXN0JywgJ2RldGFpbCcsICdyZXBvcnRzJ107XG5cbmZ1bmN0aW9uIFBsYXlib29rTGlzdCh7IHBsYXlib29rcywgbG9hZGluZywgZXJyb3IsIHNlbGVjdGVkSWR4LCBmb2N1c2VkIH0pIHtcbiAgICBpZiAobG9hZGluZyAmJiBwbGF5Ym9va3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PmxvYWRpbmdcdTIwMjY8L1RleHQ+O1xuICAgIH1cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9PntlcnJvcn08L1RleHQ+O1xuICAgIH1cbiAgICBpZiAocGxheWJvb2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9Pm5vIHBsYXlib29rcyByZWdpc3RlcmVkPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwid3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgVXBsb2FkIGZyb20gQ0xJOnsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGluciBwcm9kdWN0IHBsYXlib29rIHVwbG9hZCAmbHQ7cHJvZHVjdCZndDsgJmx0O25hbWUmZ3Q7ICZsdDtmaWxlJmd0O1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICB7cGxheWJvb2tzLm1hcCgocGIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NlbCA9IGkgPT09IHNlbGVjdGVkSWR4O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmsgPSBmb2N1c2VkICYmIGlzU2VsID8gJ1x1MjVCNicgOiBpc1NlbCA/ICdcdTIwM0EnIDogJyAnO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxCb3gga2V5PXtwYi5uYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtpc1NlbCA/IHRoZW1lLmFjY2VudCA6IHRoZW1lLmZnRmFpbnR9PnttYXJrfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtpc1NlbCA/IHRoZW1lLmZnIDogdGhlbWUuZmdEaW19IGJvbGQ9e2lzU2VsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BiLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYi5kZXNjcmlwdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGIuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gWWFtbFZpZXcoeyBkZXRhaWwsIHNjcm9sbE9mZnNldCwgbWF4TGluZXMgfSkge1xuICAgIGlmICghZGV0YWlsKSB7XG4gICAgICAgIHJldHVybiA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+c2VsZWN0IGEgcGxheWJvb2sgdG8gdmlldzwvVGV4dD47XG4gICAgfVxuICAgIGlmIChkZXRhaWwubG9hZGluZykge1xuICAgICAgICByZXR1cm4gPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5sb2FkaW5nIFlBTUxcdTIwMjY8L1RleHQ+O1xuICAgIH1cbiAgICBpZiAoZGV0YWlsLmVycm9yKSB7XG4gICAgICAgIHJldHVybiA8VGV4dCBjb2xvcj17dGhlbWUucmVkfT57ZGV0YWlsLmVycm9yfTwvVGV4dD47XG4gICAgfVxuICAgIGNvbnN0IGxpbmVzID0gKGRldGFpbC55YW1sIHx8ICcnKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgdmlldyA9IGxpbmVzLnNsaWNlKHNjcm9sbE9mZnNldCwgc2Nyb2xsT2Zmc2V0ICsgTWF0aC5tYXgobWF4TGluZXMgfHwgNDAsIDQpKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIHtkZXRhaWwucGFyc2VFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYW1iZXJ9PllBTUwgcGFyc2UgZXJyb3I6IHtkZXRhaWwucGFyc2VFcnJvcn08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3ZpZXcubWFwKChsbiwgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDxUZXh0IGtleT17aX0gY29sb3I9e3RoZW1lLmZnfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmcoc2Nyb2xsT2Zmc2V0ICsgaSArIDEpLnBhZFN0YXJ0KDMpfXsnICd9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2xuIHx8ICcgJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIHtsaW5lcy5sZW5ndGggPiBzY3JvbGxPZmZzZXQgKyAobWF4TGluZXMgfHwgNDApICYmIChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgIFx1MjAyNntsaW5lcy5sZW5ndGggLSAoc2Nyb2xsT2Zmc2V0ICsgKG1heExpbmVzIHx8IDQwKSl9IG1vcmUgbGluZXNcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBSZXBvcnRzTGlzdCh7IHJlcG9ydHMsIHNlbGVjdGVkSWR4LCBmb2N1c2VkLCBlcnJvciB9KSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJldHVybiA8VGV4dCBjb2xvcj17dGhlbWUuYW1iZXJ9PntlcnJvcn08L1RleHQ+O1xuICAgIH1cbiAgICBpZiAocmVwb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5ubyBwYXN0IHJ1bnM8L1RleHQ+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIHtyZXBvcnRzLnNsaWNlKDAsIDIwKS5tYXAoKHIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NlbCA9IGZvY3VzZWQgJiYgaSA9PT0gc2VsZWN0ZWRJZHg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e3IucGF0aH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aXNTZWwgPyB0aGVtZS5hY2NlbnQgOiB0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzU2VsID8gJ1x1MjVCNicgOiAnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aXNTZWwgPyB0aGVtZS5mZyA6IHRoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyLm5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCAnJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHtyZXBvcnRzLmxlbmd0aCA+IDIwICYmIChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XHUyMDI2e3JlcG9ydHMubGVuZ3RoIC0gMjB9IG9sZGVyPC9UZXh0PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZGVyaXZlUHJvZHVjdHMoZGV2aWNlcykge1xuICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGV2aWNlcyB8fCBbXSkge1xuICAgICAgICBpZiAoZD8ucHJvZHVjdCkgc2V0LmFkZChkLnByb2R1Y3QpO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLnNldF0uc29ydCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUGxheWJvb2tzVGFiKHtcbiAgICBkZXZpY2VzLFxuICAgIGRlZmF1bHRQcm9kdWN0SWQsXG4gICAgZm9jdXNlZCxcbiAgICBvbk1vZGFsQWN0aXZlQ2hhbmdlLFxufSkge1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSB1c2VTdGRvdXQoKTtcbiAgICBjb25zdCByb3dzID0gc3Rkb3V0Py5yb3dzIHx8IDI0O1xuXG4gICAgY29uc3QgcHJvZHVjdE9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IGRlcml2ZVByb2R1Y3RzKGRldmljZXMpO1xuICAgICAgICBpZiAoZGVmYXVsdFByb2R1Y3RJZCAmJiAhbGlzdC5pbmNsdWRlcyhkZWZhdWx0UHJvZHVjdElkKSkgbGlzdC51bnNoaWZ0KGRlZmF1bHRQcm9kdWN0SWQpO1xuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9LCBbZGV2aWNlcywgZGVmYXVsdFByb2R1Y3RJZF0pO1xuXG4gICAgY29uc3QgW3Byb2R1Y3RJZHgsIHNldFByb2R1Y3RJZHhdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgcHJvZHVjdElkID1cbiAgICAgICAgcHJvZHVjdE9wdGlvbnNbcHJvZHVjdElkeF0gfHwgcHJvZHVjdE9wdGlvbnNbMF0gfHwgZGVmYXVsdFByb2R1Y3RJZCB8fCBudWxsO1xuXG4gICAgY29uc3Qge1xuICAgICAgICBwbGF5Ym9va3MsXG4gICAgICAgIGxpc3RFcnJvcixcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgZGV0YWlsLFxuICAgICAgICByZXBvcnRzLFxuICAgICAgICByZXBvcnRzRXJyb3IsXG4gICAgICAgIHJlcG9ydERldGFpbCxcbiAgICAgICAgbG9hZERldGFpbCxcbiAgICAgICAgY2xlYXJEZXRhaWwsXG4gICAgICAgIGxvYWRSZXBvcnRzLFxuICAgICAgICBsb2FkUmVwb3J0LFxuICAgICAgICBjbGVhclJlcG9ydCxcbiAgICAgICAgcmVtb3ZlLFxuICAgICAgICByZWZyZXNoLFxuICAgIH0gPSB1c2VQcm9kdWN0UGxheWJvb2tzKHByb2R1Y3RJZCk7XG5cbiAgICBjb25zdCBydW4gPSB1c2VQbGF5Ym9va1J1bkNvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IFtzZWxlY3RlZElkeCwgc2V0U2VsZWN0ZWRJZHhdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW3JlcG9ydElkeCwgc2V0UmVwb3J0SWR4XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtpbm5lckZvY3VzLCBzZXRJbm5lckZvY3VzXSA9IHVzZVN0YXRlKCdsaXN0Jyk7XG4gICAgY29uc3QgW3Njcm9sbCwgc2V0U2Nyb2xsXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtub3RpY2UsIHNldE5vdGljZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICAvLyBEZXZpY2UgcGlja2VyIG1vZGUgXHUyMDE0IGB0ZXN0YDogYWZ0ZXIgcGljaywgc2VlZCB0aGUgdmFycyBtb2RhbDsgdGhlIHJ1blxuICAgIC8vIGNvbnRyb2xsZXIga2VlcHMgdGhlIHJlc3Qgb2YgdGhlIHN0YXRlIG1hY2hpbmUuXG4gICAgY29uc3QgW2RldmljZVBpY2tlciwgc2V0RGV2aWNlUGlja2VyXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBwbGF5Ym9va3Nbc2VsZWN0ZWRJZHhdO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgICAgICAgY2xlYXJEZXRhaWwoKTtcbiAgICAgICAgICAgIHNldFJlcG9ydElkeCgwKTtcbiAgICAgICAgICAgIHNldFNjcm9sbCgwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsb2FkRGV0YWlsKHNlbGVjdGVkLm5hbWUpO1xuICAgICAgICBsb2FkUmVwb3J0cyhzZWxlY3RlZC5uYW1lKTtcbiAgICAgICAgc2V0UmVwb3J0SWR4KDApO1xuICAgICAgICBzZXRTY3JvbGwoMCk7XG4gICAgfSwgW3NlbGVjdGVkPy5uYW1lLCBwcm9kdWN0SWRdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZElkeCA+PSBwbGF5Ym9va3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZElkeChNYXRoLm1heCgwLCBwbGF5Ym9va3MubGVuZ3RoIC0gMSkpO1xuICAgICAgICB9XG4gICAgfSwgW3BsYXlib29rcywgc2VsZWN0ZWRJZHhdKTtcblxuICAgIGNvbnN0IHJ1blBoYXNlID0gcnVuLnN0YXRlLnBoYXNlO1xuICAgIGNvbnN0IG92ZXJsYXlBY3RpdmUgPVxuICAgICAgICBydW5QaGFzZSA9PT0gJ3ZhcnMnIHx8XG4gICAgICAgIHJ1blBoYXNlID09PSAncnVubmluZycgfHxcbiAgICAgICAgcnVuUGhhc2UgPT09ICdkb25lJyB8fFxuICAgICAgICBydW5QaGFzZSA9PT0gJ2NvbmZpcm1pbmctZGVsZXRlJyB8fFxuICAgICAgICAhIWRldmljZVBpY2tlciB8fFxuICAgICAgICAhIXJlcG9ydERldGFpbDtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIG9uTW9kYWxBY3RpdmVDaGFuZ2U/LihvdmVybGF5QWN0aXZlICYmIGZvY3VzZWQpO1xuICAgIH0sIFtvdmVybGF5QWN0aXZlLCBmb2N1c2VkLCBvbk1vZGFsQWN0aXZlQ2hhbmdlXSk7XG5cbiAgICAvLyBUb3AtbGV2ZWwgaW5wdXQgZm9yIHRoZSB0YWI6IGxpc3QgbmF2aWdhdGlvbiArIGFjdGlvbiBzaG9ydGN1dHMuXG4gICAgdXNlSW5wdXQoXG4gICAgICAgIChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZvY3VzZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChvdmVybGF5QWN0aXZlKSByZXR1cm47IC8vIG1vZGFscyBvd24gaW5wdXRcblxuICAgICAgICAgICAgaWYgKGtleS50YWIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBrZXkuc2hpZnQgPyAtMSA6IDE7XG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IFBBTkVMUy5pbmRleE9mKGlubmVyRm9jdXMpO1xuICAgICAgICAgICAgICAgIHNldElubmVyRm9jdXMoUEFORUxTWyhpICsgZGlyICsgUEFORUxTLmxlbmd0aCkgJSBQQU5FTFMubGVuZ3RoXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAncCcgJiYgcHJvZHVjdE9wdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHNldFByb2R1Y3RJZHgoKGkpID0+IChpICsgMSkgJSBwcm9kdWN0T3B0aW9ucy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWR4KDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ3InKSB7XG4gICAgICAgICAgICAgICAgcmVmcmVzaCgpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkgbG9hZFJlcG9ydHMoc2VsZWN0ZWQubmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5uZXJGb2N1cyA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS51cEFycm93KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWR4KChpKSA9PiBNYXRoLm1heCgwLCBpIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXkuZG93bkFycm93KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWR4KChpKSA9PiBNYXRoLm1pbihwbGF5Ym9va3MubGVuZ3RoIC0gMSwgaSArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5uZXJGb2N1cyA9PT0gJ2RldGFpbCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnVwQXJyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2Nyb2xsKChzKSA9PiBNYXRoLm1heCgwLCBzIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXkuZG93bkFycm93KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNjcm9sbCgocykgPT4gcyArIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gJ2cnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFNjcm9sbCgwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5uZXJGb2N1cyA9PT0gJ3JlcG9ydHMnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleS51cEFycm93KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlcG9ydElkeCgoaSkgPT4gTWF0aC5tYXgoMCwgaSAtIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5LmRvd25BcnJvdykge1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXBvcnRJZHgoKGkpID0+IE1hdGgubWluKHJlcG9ydHMubGVuZ3RoIC0gMSwgaSArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gcmVwb3J0c1tyZXBvcnRJZHhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocikgbG9hZFJlcG9ydChyLnBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgIGlmICghZGV0YWlsPy5wYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Tm90aWNlKCdQbGF5Ym9vayBZQU1MIG5vdCByZWFkeSBcdTIwMTQgb3BlbiBpdCBmaXJzdC4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXREZXZpY2VQaWNrZXIoeyBtb2RlOiAndGVzdCcgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnYScpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRldGFpbD8ucGFyc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldE5vdGljZSgnUGxheWJvb2sgWUFNTCBub3QgcmVhZHkgXHUyMDE0IG9wZW4gaXQgZmlyc3QuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcnVuLnN0YXJ0RmxlZXRWYXJzKHNlbGVjdGVkLCBkZXRhaWwucGFyc2VkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICd4Jykge1xuICAgICAgICAgICAgICAgIHJ1bi5vcGVuRGVsZXRlQ29uZmlybShzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7IGlzQWN0aXZlOiBmb2N1c2VkIH0sXG4gICAgKTtcblxuICAgIC8vIFJlcG9ydCBkZXRhaWwgb3ZlcmxheSBpbnB1dCAoc2ltcGxlIGVzYy10by1jbG9zZSkuXG4gICAgdXNlSW5wdXQoXG4gICAgICAgIChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZvY3VzZWQpIHJldHVybjtcbiAgICAgICAgICAgIGlmICghcmVwb3J0RGV0YWlsKSByZXR1cm47XG4gICAgICAgICAgICBpZiAocnVuUGhhc2UgIT09ICdpZGxlJykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGtleS5lc2NhcGUpIGNsZWFyUmVwb3J0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgaXNBY3RpdmU6IGZvY3VzZWQgJiYgISFyZXBvcnREZXRhaWwgJiYgcnVuUGhhc2UgPT09ICdpZGxlJyB9LFxuICAgICk7XG5cbiAgICAvLyBSdW5uaW5nLXBoYXNlIGlucHV0IChhYm9ydCBvbmx5KS5cbiAgICB1c2VJbnB1dChcbiAgICAgICAgKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChydW5QaGFzZSAhPT0gJ3J1bm5pbmcnKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoa2V5LmVzY2FwZSkgcnVuLmNhbmNlbFJ1bm5pbmcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpc0FjdGl2ZTogZm9jdXNlZCAmJiBydW5QaGFzZSA9PT0gJ3J1bm5pbmcnIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVJ1bkRvbmVDbG9zZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJ1blBoYXNlICE9PSAnZG9uZScpIHJldHVybjtcbiAgICAgICAgcnVuLmRpc21pc3NEb25lKCk7XG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSBsb2FkUmVwb3J0cyhzZWxlY3RlZC5uYW1lKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRSZXBvcnQgPSByZXBvcnRzW3JlcG9ydElkeF0gfHwgbnVsbDtcblxuICAgIGNvbnN0IHRpdGxlID0gcHJvZHVjdElkID8gYFBMQVlCT09LUyBcdTAwQjcgJHtwcm9kdWN0SWR9YCA6ICdQTEFZQk9PS1MnO1xuXG4gICAgY29uc3QgcmlnaHQgPSAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgICB7cHJvZHVjdE9wdGlvbnMubGVuZ3RoID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3Byb2R1Y3RJZHggKyAxfS97cHJvZHVjdE9wdGlvbnMubGVuZ3RofXsnICAnfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5tYWdlbnRhfT5wPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiBwcm9kdWN0PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcblxuICAgIGNvbnN0IHlhbWxNYXhMaW5lcyA9IE1hdGgubWF4KDYsIHJvd3MgLSAxMCk7XG5cbiAgICAvLyBGbGVldCBkZXZpY2UgY29sbGVjdGlvbiBhdCBzdWJtaXQgdGltZS4gVXNpbmcgbGl2ZSBzdGF0ZSBmcm9tXG4gICAgLy8gYGRldmljZXNgIGtlZXBzIG9mZmxpbmUgZmlsdGVyaW5nIGNvbnNpc3RlbnQgd2l0aCB3aGF0IHRoZSB0YWJcbiAgICAvLyBzdXJmYWNlIHNob3dzIGFuZCBhdm9pZHMgYSBzZWNvbmQgcm91bmQtdHJpcC5cbiAgICBjb25zdCBjb2xsZWN0RmxlZXRUYXJnZXRzID0gKGluY2x1ZGVPZmZsaW5lKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbWVQcm9kdWN0ID0gKGRldmljZXMgfHwgW10pLmZpbHRlcigoZCkgPT4gZC5wcm9kdWN0ID09PSBwcm9kdWN0SWQpO1xuICAgICAgICByZXR1cm4gaW5jbHVkZU9mZmxpbmUgPyBzYW1lUHJvZHVjdCA6IGZpbHRlckFjdGl2ZURldmljZXMoc2FtZVByb2R1Y3QpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9XCIyOCVcIiBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgc3ViPXtgJHtwbGF5Ym9va3MubGVuZ3RofWB9XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0PXtyaWdodH1cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17aW5uZXJGb2N1cyA9PT0gJ2xpc3QnfVxuICAgICAgICAgICAgICAgICAgICBmbGV4R3Jvdz17MX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHshcHJvZHVjdElkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIHByb2R1Y3QgYXZhaWxhYmxlIFx1MjAxNCBkZXZpY2VzIHJlcG9ydCBubyBwcm9kdWN0IGJpbmRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxQbGF5Ym9va0xpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5Ym9va3M9e3BsYXlib29rc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtsaXN0RXJyb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJZHg9e3NlbGVjdGVkSWR4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e2lubmVyRm9jdXMgPT09ICdsaXN0J31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9QYW5lbD5cbiAgICAgICAgICAgICAgICB7bm90aWNlICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hbWJlcn0gd3JhcD1cIndyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bm90aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9XCI0NCVcIiBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAge3J1blBoYXNlID09PSAncnVubmluZycgfHwgcnVuUGhhc2UgPT09ICdkb25lJyA/IChcbiAgICAgICAgICAgICAgICAgICAgPFBsYXlib29rUnVuVmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU9e3J1bi5zdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVSdW5Eb25lQ2xvc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhPdXRwdXRMaW5lcz17TWF0aC5tYXgoNiwgcm93cyAtIDE4KX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiWUFNTFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWI9e3NlbGVjdGVkID8gc2VsZWN0ZWQubmFtZSA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17aW5uZXJGb2N1cyA9PT0gJ2RldGFpbCd9XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLm1hZ2VudGF9PnQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+IHRlc3QgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLm1hZ2VudGF9PmE8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+IGFwcGx5ICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5tYWdlbnRhfT54PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiBkZWw8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGV4R3Jvdz17MX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFlhbWxWaWV3IGRldGFpbD17ZGV0YWlsfSBzY3JvbGxPZmZzZXQ9e3Njcm9sbH0gbWF4TGluZXM9e3lhbWxNYXhMaW5lc30gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9QYW5lbD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9XCIyOCVcIiBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUEFTVCBSVU5TXCJcbiAgICAgICAgICAgICAgICAgICAgc3ViPXtzZWxlY3RlZD8ubmFtZSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17aW5uZXJGb2N1cyA9PT0gJ3JlcG9ydHMnfVxuICAgICAgICAgICAgICAgICAgICBmbGV4R3Jvdz17MX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtyZXBvcnREZXRhaWwgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQbGF5Ym9va1JlcG9ydFZpZXcgZGV0YWlsPXtyZXBvcnREZXRhaWx9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PmVzYyBiYWNrPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZXBvcnRzTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRzPXtyZXBvcnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZElkeD17cmVwb3J0SWR4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtpbm5lckZvY3VzID09PSAncmVwb3J0cyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtyZXBvcnRzRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRSZXBvcnQgJiYgaW5uZXJGb2N1cyA9PT0gJ3JlcG9ydHMnICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50ZXIgb3BlbiBcdTAwQjcge3NlbGVjdGVkUmVwb3J0LnBhdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIHtkZXZpY2VQaWNrZXIgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249XCJhYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPXtzdGRvdXQ/LmNvbHVtbnN9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17c3Rkb3V0Py5yb3dzfVxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPERldmljZVBpY2tlck1vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlRFU1QgT04gREVWSUNFXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXM9eyhkZXZpY2VzIHx8IFtdKS5maWx0ZXIoKGQpID0+IGQucHJvZHVjdCA9PT0gcHJvZHVjdElkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXREZXZpY2VQaWNrZXIobnVsbCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17KGRldmljZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldERldmljZVBpY2tlcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgJiYgZGV0YWlsPy5wYXJzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLnN0YXJ0U2luZ2xlVmFycyhzZWxlY3RlZCwgZGV0YWlsLnBhcnNlZCwgZGV2aWNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge3J1blBoYXNlID09PSAndmFycycgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249XCJhYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPXtzdGRvdXQ/LmNvbHVtbnN9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17c3Rkb3V0Py5yb3dzfVxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBsYXlib29rVmFyc01vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5Ym9va05hbWU9e3J1bi5zdGF0ZS5wbGF5Ym9vaz8ubmFtZSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9e3J1bi5zdGF0ZS5tb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzPXtydW4uc3RhdGUucGFyc2VkPy52YXJpYWJsZXMgfHwgW119XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2U9e3J1bi5zdGF0ZS5kZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VDb3VudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLnN0YXRlLm1vZGUgPT09ICdmbGVldCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2xsZWN0RmxlZXRUYXJnZXRzKGZhbHNlKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoU2l6ZT17cnVuLnN0YXRlLmJhdGNoU2l6ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ9e3J1bi5zdGF0ZS5mYWlsdXJlVGhyZXNob2xkfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9mZmxpbmU9e3J1bi5zdGF0ZS5pbmNsdWRlT2ZmbGluZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBydW4uY2FuY2VsRmxvdygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9e2FzeW5jICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVPZmZsaW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydW4uc3RhdGUubW9kZSA9PT0gJ2ZsZWV0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gY29sbGVjdEZsZWV0VGFyZ2V0cyhpbmNsdWRlT2ZmbGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Tm90aWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVPZmZsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ05vIGRldmljZXMgYm91bmQgdG8gdGhpcyBwcm9kdWN0LidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnTm8gYWN0aXZlIGRldmljZXMgXHUyMDE0IGVuYWJsZSBpbmNsdWRlLW9mZmxpbmUgdG8gdGFyZ2V0IG9mZmxpbmUgdG9vLicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLmNhbmNlbEZsb3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBydW4ucnVuRmxlZXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWJvb2s6IHJ1bi5zdGF0ZS5wbGF5Ym9vayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZDogcnVuLnN0YXRlLnBhcnNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXM6IHRhcmdldHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9mZmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJ1bi5ydW5TaW5nbGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWJvb2s6IHJ1bi5zdGF0ZS5wbGF5Ym9vayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZDogcnVuLnN0YXRlLnBhcnNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZTogcnVuLnN0YXRlLmRldmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtydW5QaGFzZSA9PT0gJ2NvbmZpcm1pbmctZGVsZXRlJyAmJiAoXG4gICAgICAgICAgICAgICAgPEJveFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9e3N0ZG91dD8uY29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXtzdGRvdXQ/LnJvd3N9XG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q29uZmlybU1vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17YERFTEVURSBQTEFZQk9PSyBcIiR7cnVuLnN0YXRlLnBsYXlib29rPy5uYW1lIHx8ICcnfVwiYH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9e1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgUmVtb3ZlIFwiJHtydW4uc3RhdGUucGxheWJvb2s/Lm5hbWV9XCIgZnJvbSBwcm9kdWN0IFwiJHtwcm9kdWN0SWR9XCI/YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIFlBTUwgZmlsZSBhbmQgdGhlIGluZGV4IGVudHJ5IHdpbGwgYmUgZGVsZXRlZC4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1MYWJlbD1cImRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0b25lPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBydW4uY2FuY2VsRmxvdygpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gcnVuLnN0YXRlLnBsYXlib29rO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5jYW5jZWxGbG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmVtb3ZlKHRhcmdldC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXROb3RpY2UoYGRlbGV0ZSBmYWlsZWQ6ICR7cmVzLmVycm9yfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE5vdGljZShgZGVsZXRlZCBcIiR7dGFyZ2V0Lm5hbWV9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCwgdXNlSW5wdXQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5pbXBvcnQgeyBQYW5lbCB9IGZyb20gJy4vUGFuZWwuanN4JztcblxuZnVuY3Rpb24gU3RlcExpbmUoeyBzdGVwLCBzZWxlY3RlZCwgZXhwYW5kZWQsIGZvY3VzZWQgfSkge1xuICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXAuc3RhdHVzO1xuICAgIGxldCBnbHlwaCA9ICdcdTAwQjcnO1xuICAgIGxldCBjb2xvciA9IHRoZW1lLmZnRGltO1xuICAgIGlmIChzdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgICBnbHlwaCA9ICdcdTIxQkInO1xuICAgICAgICBjb2xvciA9IHRoZW1lLmFjY2VudDtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICBnbHlwaCA9ICdcdTI3MTMnO1xuICAgICAgICBjb2xvciA9IHRoZW1lLmxpbWU7XG4gICAgfSBlbHNlIGlmIChzdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgIGdseXBoID0gJ1x1MjcxNSc7XG4gICAgICAgIGNvbG9yID0gdGhlbWUucmVkO1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvblR4dCA9XG4gICAgICAgIE51bWJlci5pc0Zpbml0ZShzdGVwLmR1cmF0aW9uTXMpICYmIHN0ZXAuc3RhdHVzICE9PSAncnVubmluZydcbiAgICAgICAgICAgID8gYCAoJHtzdGVwLmR1cmF0aW9uTXN9bXMpYFxuICAgICAgICAgICAgOiAnJztcbiAgICBjb25zdCBtYXJrZXIgPSBzZWxlY3RlZCA/IChmb2N1c2VkID8gJ1x1MjVCNicgOiAnXHUyMDNBJykgOiAnICc7XG4gICAgY29uc3QgZXhwYW5kVGFnID0gZXhwYW5kZWQgPyAnIFx1MjVCRScgOiBzZWxlY3RhYmxlKHN0ZXApID8gJyBcdTI1QjgnIDogJyc7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtzZWxlY3RlZCA/IHRoZW1lLmFjY2VudCA6IHRoZW1lLmZnRmFpbnR9PnttYXJrZXJ9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IHdpZHRoPXsyfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17Y29sb3J9PntnbHlwaH08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3ggd2lkdGg9ezN9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT57U3RyaW5nKHN0ZXAuaW5kZXggKyAxKS5wYWRTdGFydCgyKX0uPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17c2VsZWN0ZWQgPyB0aGVtZS5mZyA6IHRoZW1lLmZnfSBib2xkPXtzZWxlY3RlZH0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICB7c3RlcC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICB7ZXhwYW5kVGFnICYmIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT57ZXhwYW5kVGFnfTwvVGV4dD59XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICB7c3RlcC5zdW1tYXJ5IHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICB7ZHVyYXRpb25UeHR9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGFibGUoc3RlcCkge1xuICAgIHJldHVybiAhIShzdGVwPy5zdGRvdXQgfHwgc3RlcD8uc3RkZXJyIHx8IHN0ZXA/LmVycm9yKTtcbn1cblxuZnVuY3Rpb24gU3RlcE91dHB1dFZpZXcoeyBzdGVwLCBtYXhMaW5lcyB9KSB7XG4gICAgaWYgKCFzdGVwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzdGRvdXQgPSAoc3RlcC5zdGRvdXQgfHwgJycpLnJlcGxhY2UoL1xccyskLywgJycpO1xuICAgIGNvbnN0IHN0ZGVyciA9IChzdGVwLnN0ZGVyciB8fCAnJykucmVwbGFjZSgvXFxzKyQvLCAnJyk7XG4gICAgY29uc3QgZXJyb3IgPSBzdGVwLmVycm9yO1xuICAgIGNvbnN0IG5vdGhpbmcgPSAhc3Rkb3V0ICYmICFzdGRlcnIgJiYgIWVycm9yO1xuICAgIGlmIChub3RoaW5nKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PihubyBvdXRwdXQgY2FwdHVyZWQgZm9yIHRoaXMgc3RlcCk8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYnVkZ2V0ID0gTWF0aC5tYXgoNCwgbWF4TGluZXMgfHwgMTIpO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gW107XG4gICAgaWYgKHN0ZGVycikgc2VjdGlvbnMucHVzaCh7IGxhYmVsOiAnc3RkZXJyJywgY29sb3I6IHRoZW1lLnJlZCwgdGV4dDogc3RkZXJyIH0pO1xuICAgIGlmIChzdGRvdXQpIHNlY3Rpb25zLnB1c2goeyBsYWJlbDogJ3N0ZG91dCcsIGNvbG9yOiB0aGVtZS5mZ0RpbSwgdGV4dDogc3Rkb3V0IH0pO1xuICAgIGlmIChlcnJvciAmJiAhc3RkZXJyICYmICFzdGRvdXQpIHtcbiAgICAgICAgc2VjdGlvbnMucHVzaCh7IGxhYmVsOiAnZXJyb3InLCBjb2xvcjogdGhlbWUucmVkLCB0ZXh0OiBlcnJvciB9KTtcbiAgICB9XG4gICAgY29uc3QgcGVyU2VjdGlvbiA9IE1hdGgubWF4KDIsIE1hdGguZmxvb3IoYnVkZ2V0IC8gTWF0aC5tYXgoMSwgc2VjdGlvbnMubGVuZ3RoKSkpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICB7c2VjdGlvbnMubWFwKChzLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IHMudGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFpbCA9IGxpbmVzLnNsaWNlKC1wZXJTZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wcGVkID0gbGluZXMubGVuZ3RoIC0gdGFpbC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJveCBrZXk9e2lkeH0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblRvcD17aWR4ID09PSAwID8gMCA6IDF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3MuY29sb3J9Plx1MjUwMFx1MjUwMCB7cy5sYWJlbH0gXHUyNTAwXHUyNTAwPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAge2Ryb3BwZWQgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx1MjAyNntkcm9wcGVkfSBlYXJsaWVyIGxpbmV7ZHJvcHBlZCA9PT0gMSA/ICcnIDogJ3MnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGFpbC5tYXAoKGxuLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQga2V5PXtpfSBjb2xvcj17dGhlbWUuZmd9IHdyYXA9XCJ3cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsbiB8fCAnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRTdGVwc0ZvckRvbmUoc3RhdGUpIHtcbiAgICByZXR1cm4gKHN0YXRlLnJlc3VsdD8uc3RlcHMgfHwgW10pLm1hcCgocykgPT4gKHtcbiAgICAgICAgaW5kZXg6IHMuaW5kZXgsXG4gICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgc3RhdHVzOiBzLnNraXBwZWQgPyAnc2tpcHBlZCcgOiBzLm9rID8gJ29rJyA6ICdmYWlsZWQnLFxuICAgICAgICBzdW1tYXJ5OiBzLnN1bW1hcnksXG4gICAgICAgIGVycm9yOiBzLmVycm9yLFxuICAgICAgICBkdXJhdGlvbk1zOiBzLmR1cmF0aW9uTXMsXG4gICAgICAgIHN0ZG91dDogcy5zdGRvdXQsXG4gICAgICAgIHN0ZGVycjogcy5zdGRlcnIsXG4gICAgICAgIGV4aXRDb2RlOiBzLmV4aXRDb2RlLFxuICAgIH0pKTtcbn1cblxuZnVuY3Rpb24gU2luZ2xlUnVuQm9keSh7IHN0YXRlLCBmb2N1c2VkLCBvbkNsb3NlLCBtYXhPdXRwdXRMaW5lcyB9KSB7XG4gICAgY29uc3Qgc3RlcHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLnBoYXNlID09PSAnZG9uZScpIHJldHVybiBidWlsZFN0ZXBzRm9yRG9uZShzdGF0ZSk7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHN0YXRlLnN0ZXBzUHJvZ3Jlc3M/LnZhbHVlcz8uKCkgfHwgW10pLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICB9LCBbc3RhdGVdKTtcblxuICAgIGNvbnN0IGlzRG9uZSA9IHN0YXRlLnBoYXNlID09PSAnZG9uZSc7XG4gICAgY29uc3QgZmlyc3RGYWlsZWRJZHggPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKCFpc0RvbmUpIHJldHVybiAtMTtcbiAgICAgICAgcmV0dXJuIHN0ZXBzLmZpbmRJbmRleCgocykgPT4gcy5zdGF0dXMgPT09ICdmYWlsZWQnKTtcbiAgICB9LCBbc3RlcHMsIGlzRG9uZV0pO1xuXG4gICAgY29uc3QgW3NlbGVjdGVkSWR4LCBzZXRTZWxlY3RlZElkeF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8vIEF1dG8tc2VsZWN0IGFuZCBhdXRvLWV4cGFuZCB0aGUgZmlyc3QgZmFpbGVkIHN0ZXAgdGhlIG1vbWVudCB3ZVxuICAgIC8vIHRyYW5zaXRpb24gdG8gJ2RvbmUnLiBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgbGFzdCBzdGVwIHNvIHRoZVxuICAgIC8vIHVzZXIgc2VlcyB0aGUgbW9zdCByZWNlbnQgb3V0cHV0LlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNEb25lKSByZXR1cm47XG4gICAgICAgIGlmIChzdGVwcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgaWYgKGZpcnN0RmFpbGVkSWR4ID49IDApIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkSWR4KGZpcnN0RmFpbGVkSWR4KTtcbiAgICAgICAgICAgIHNldEV4cGFuZGVkKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRJZHgoc3RlcHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBzZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9LCBbaXNEb25lLCBmaXJzdEZhaWxlZElkeCwgc3RlcHMubGVuZ3RoXSk7XG5cbiAgICB1c2VJbnB1dChcbiAgICAgICAgKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghZm9jdXNlZCB8fCAhaXNEb25lKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoa2V5LmVzY2FwZSkge1xuICAgICAgICAgICAgICAgIG9uQ2xvc2U/LigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkudXBBcnJvdykge1xuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSWR4KChpKSA9PiBNYXRoLm1heCgwLCBpIC0gMSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkuZG93bkFycm93KSB7XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRJZHgoKGkpID0+IE1hdGgubWluKHN0ZXBzLmxlbmd0aCAtIDEsIGkgKyAxKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS5yZXR1cm4gfHwgaW5wdXQgPT09ICcgJykge1xuICAgICAgICAgICAgICAgIHNldEV4cGFuZGVkKChlKSA9PiAhZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgaXNBY3RpdmU6ICEhZm9jdXNlZCAmJiBpc0RvbmUgfSxcbiAgICApO1xuXG4gICAgY29uc3QgaGVhZGVyID1cbiAgICAgICAgc3RhdGUucGhhc2UgPT09ICdydW5uaW5nJ1xuICAgICAgICAgICAgPyAnUlVOTklORydcbiAgICAgICAgICAgIDogc3RhdGUucmVzdWx0Py5va1xuICAgICAgICAgICAgICA/ICdET05FIFx1MDBCNyBPSydcbiAgICAgICAgICAgICAgOiAnRE9ORSBcdTAwQjcgRkFJTEVEJztcbiAgICBjb25zdCBoZWFkZXJDb2xvciA9XG4gICAgICAgIHN0YXRlLnBoYXNlID09PSAncnVubmluZydcbiAgICAgICAgICAgID8gdGhlbWUuYWNjZW50XG4gICAgICAgICAgICA6IHN0YXRlLnJlc3VsdD8ub2tcbiAgICAgICAgICAgICAgPyB0aGVtZS5saW1lXG4gICAgICAgICAgICAgIDogdGhlbWUucmVkO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBpc0RvbmUgPyBzdGVwc1tzZWxlY3RlZElkeF0gOiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICA8Qm94IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiIG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2hlYWRlckNvbG9yfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PlxuICAgICAgICAgICAgICAgICAgICB7c3RhdGUucGxheWJvb2s/Lm5hbWV9IFx1MjE5MiB7c3RhdGUuZGV2aWNlPy5kZXZpY2V9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICB7c3RlcHMubGVuZ3RoID09PSAwICYmIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5wcmVwYXJpbmcuLi48L1RleHQ+fVxuICAgICAgICAgICAge3N0ZXBzLm1hcCgocywgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDxTdGVwTGluZVxuICAgICAgICAgICAgICAgICAgICBrZXk9e3MuaW5kZXh9XG4gICAgICAgICAgICAgICAgICAgIHN0ZXA9e3N9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXtpc0RvbmUgJiYgaSA9PT0gc2VsZWN0ZWRJZHh9XG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkPXtpc0RvbmUgJiYgaSA9PT0gc2VsZWN0ZWRJZHggJiYgZXhwYW5kZWR9XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9eyEhZm9jdXNlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7c3RhdGUucGhhc2UgPT09ICdkb25lJyAmJiAhc3RhdGUucmVzdWx0Py5vayAmJiBzdGF0ZS5yZXN1bHQ/LmVycm9yICYmIChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5yZWR9PntzdGF0ZS5yZXN1bHQuZXJyb3J9PC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtpc0RvbmUgJiYgZXhwYW5kZWQgJiYgc2VsZWN0ZWQgJiYgKFxuICAgICAgICAgICAgICAgIDxTdGVwT3V0cHV0VmlldyBzdGVwPXtzZWxlY3RlZH0gbWF4TGluZXM9e21heE91dHB1dExpbmVzfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtpc0RvbmUgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgXHUyMTkxXHUyMTkzIHN0ZXAgXHUwMEI3IGVudGVyIHtleHBhbmRlZCA/ICdjb2xsYXBzZScgOiAnZXhwYW5kJ30gXHUwMEI3IGVzYyBjbG9zZVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBGbGVldFJ1bkJvZHkoeyBzdGF0ZSB9KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHN0YXRlLnN1bW1hcnkgfHwgeyBhdHRlbXB0ZWQ6IDAsIHN1Y2NlZWRlZDogMCwgZmFpbGVkOiAwLCBmYWlsdXJlUmF0ZTogMCB9O1xuICAgIGNvbnN0IHBlckRldmljZSA9IEFycmF5LmZyb20oc3RhdGUucGVyRGV2aWNlPy52YWx1ZXM/LigpIHx8IFtdKTtcbiAgICBjb25zdCBkb25lID0gc3RhdGUucGhhc2UgPT09ICdkb25lJztcbiAgICBjb25zdCB0aXRsZSA9IGRvbmVcbiAgICAgICAgPyBzdGF0ZS5hYm9ydGVkXG4gICAgICAgICAgICA/ICdST0xMT1VUIEFCT1JURUQnXG4gICAgICAgICAgICA6ICdST0xMT1VUIERPTkUnXG4gICAgICAgIDogJ1JPTExJTkcgT1VUJztcbiAgICBjb25zdCBoZWFkZXJDb2xvciA9IGRvbmVcbiAgICAgICAgPyBzdGF0ZS5hYm9ydGVkXG4gICAgICAgICAgICA/IHRoZW1lLnJlZFxuICAgICAgICAgICAgOiBzdW1tYXJ5LmZhaWxlZCA+IDBcbiAgICAgICAgICAgICAgPyB0aGVtZS5hbWJlclxuICAgICAgICAgICAgICA6IHRoZW1lLmxpbWVcbiAgICAgICAgOiB0aGVtZS5hY2NlbnQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxCb3gganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCIgbWFyZ2luQm90dG9tPXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17aGVhZGVyQ29sb3J9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5cbiAgICAgICAgICAgICAgICAgICAge3N0YXRlLnBsYXlib29rPy5uYW1lfSBcdTAwQjcgYmF0Y2gge3N0YXRlLmJhdGNoU2l6ZX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5wcm9ncmVzczogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+XG4gICAgICAgICAgICAgICAgICAgIHtzdW1tYXJ5LnN1Y2NlZWRlZH0ve3N1bW1hcnkuYXR0ZW1wdGVkfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiBvZiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57c3RhdGUudG90YWxEZXZpY2VzIHx8IHN0YXRlLmRldmljZUNvdW50fTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiAgZmFpbHVyZSA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3N1bW1hcnkuZmFpbHVyZVJhdGUgPiAwID8gdGhlbWUucmVkIDogdGhlbWUuZmdEaW19PlxuICAgICAgICAgICAgICAgICAgICB7c3VtbWFyeS5mYWlsdXJlUmF0ZS50b0ZpeGVkKDEpfSVcbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIHtzdGF0ZS5jdXJyZW50QmF0Y2ggJiYgIWRvbmUgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+YmF0Y2gge3N0YXRlLmN1cnJlbnRCYXRjaC5pbmRleCArIDF9OiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e3N0YXRlLmN1cnJlbnRCYXRjaC5kZXZpY2VJZHM/Lmxlbmd0aH0gZGV2aWNlKHMpPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgW3tzdGF0ZS5jdXJyZW50QmF0Y2guZmlyc3RJbmRleCArIDF9XHUyMDEzXG4gICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuY3VycmVudEJhdGNoLmZpcnN0SW5kZXggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZS5jdXJyZW50QmF0Y2guZGV2aWNlSWRzPy5sZW5ndGggfHwgMCl9XVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyhzdGF0ZS5iYXRjaGVzIHx8IFtdKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PmJhdGNoZXM6PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmF0Y2hlcy5tYXAoKGIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3gga2V5PXtiLmluZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXszfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PntiLmluZGV4ICsgMX0uPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5saW1lfT57Yi5vayB8fCBiLnN1Y2NlZWRlZCB8fCAwfSBvazwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+LCA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9eyhiLmZhaWxlZCB8fCAwKSA+IDAgPyB0aGVtZS5yZWQgOiB0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2IuZmFpbGVkIHx8IDB9IGZhaWxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+ICAoe2Iuc2l6ZX0gZGV2aWNlKHMpKTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7cGVyRGV2aWNlLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ZGV2aWNlczo8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIHtwZXJEZXZpY2Uuc2xpY2UoLTEwKS5tYXAoKHIpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3gga2V5PXtyLmRldmljZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5za2lwcGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhlbWUuYW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByLm9rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGVtZS5saW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGVtZS5yZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Iuc2tpcHBlZCA/ICchJyA6IHIub2sgPyAnXHUyNzEzJyA6ICdcdTI3MTUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3IuZGV2aWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3IuZXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUucmVkfSB3cmFwPVwidHJ1bmNhdGUtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ci5lcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2RvbmUgJiYgc3RhdGUucmVwb3J0VXBsb2FkICYmIChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5yZXBvcnRVcGxvYWQub2sgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PnJlcG9ydDoge3N0YXRlLnJlcG9ydFVwbG9hZC5wYXRofTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hbWJlcn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0IG5vdCBzYXZlZDoge3N0YXRlLnJlcG9ydFVwbG9hZC5yZWFzb259XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUGxheWJvb2tSdW5WaWV3KHsgc3RhdGUsIGZvY3VzZWQsIG9uQ2xvc2UsIG1heE91dHB1dExpbmVzIH0pIHtcbiAgICBpZiAoIXN0YXRlIHx8IHN0YXRlLnBoYXNlID09PSAnaWRsZScpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxQYW5lbCB0aXRsZT1cIlJVTlwiIGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+KG5vIHJ1biBpbiBwcm9ncmVzcyk8L1RleHQ+XG4gICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBydW5uaW5nID0gc3RhdGUucGhhc2UgPT09ICdydW5uaW5nJztcbiAgICBjb25zdCB0aXRsZSA9IHN0YXRlLm1vZGUgPT09ICdmbGVldCcgPyAnUk9MTE9VVCcgOiAnUlVOJztcbiAgICBjb25zdCByaWdodCA9IHJ1bm5pbmcgPyAoXG4gICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9Plx1MjVDRiBydW5uaW5nIFx1MDBCNyBlc2MgYWJvcnQ8L1RleHQ+XG4gICAgKSA6IChcbiAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5lc2MgY2xvc2U8L1RleHQ+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8UGFuZWwgdGl0bGU9e3RpdGxlfSByaWdodD17cmlnaHR9IGZsZXhHcm93PXsxfT5cbiAgICAgICAgICAgIHtzdGF0ZS5tb2RlID09PSAnZmxlZXQnID8gKFxuICAgICAgICAgICAgICAgIDxGbGVldFJ1bkJvZHkgc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8U2luZ2xlUnVuQm9keVxuICAgICAgICAgICAgICAgICAgICBzdGF0ZT17c3RhdGV9XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgICAgICAgICAgIG1heE91dHB1dExpbmVzPXttYXhPdXRwdXRMaW5lc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgPC9QYW5lbD5cbiAgICApO1xufVxuIiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5cbmZ1bmN0aW9uIGZtdFRzKHMpIHtcbiAgICBpZiAoIXMpIHJldHVybiAnXHUyMDE0JztcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUocykudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQbGF5Ym9va1JlcG9ydFZpZXcoeyBkZXRhaWwgfSkge1xuICAgIGlmICghZGV0YWlsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoZGV0YWlsLmxvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+bG9hZGluZyByZXBvcnRcdTIwMjY8L1RleHQ+O1xuICAgIH1cbiAgICBpZiAoZGV0YWlsLmVycm9yICYmICFkZXRhaWwucmVwb3J0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUucmVkfT57ZGV0YWlsLmVycm9yfTwvVGV4dD5cbiAgICAgICAgICAgICAgICB7ZGV0YWlsLnJhdyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2RldGFpbC5yYXcuc2xpY2UoMCwgMzAwKX1cbiAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgciA9IGRldGFpbC5yZXBvcnQ7XG4gICAgaWYgKCFyKSByZXR1cm4gPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PihlbXB0eSk8L1RleHQ+O1xuXG4gICAgY29uc3Qgc3VtbWFyeSA9IHIuc3VtbWFyeSB8fCB7fTtcbiAgICBjb25zdCBmYWlsZWQgPSByLmFib3J0ZWQgfHwgKHN1bW1hcnkuZmFpbGVkIHx8IDApID4gMDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgPEJveCBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7ci5uYW1lfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17ZmFpbGVkID8gdGhlbWUucmVkIDogdGhlbWUubGltZX0+XG4gICAgICAgICAgICAgICAgICAgIHtyLmFib3J0ZWQgPyAnQUJPUlRFRCcgOiBmYWlsZWQgPyAnRkFJTEVEJyA6ICdPSyd9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+c3RhcnRlZDogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2ZtdFRzKHIuc3RhcnRlZEF0KX08L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5maW5pc2hlZDogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e2ZtdFRzKHIuZmluaXNoZWRBdCl9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+dXNlcjogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+e3IudXNlciB8fCAnXHUyMDE0J308L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5tb2RlOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57ci5tb2RlIHx8ICdcdTIwMTQnfTwvVGV4dD5cbiAgICAgICAgICAgICAgICB7ci5yb2xsb3V0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ICBiYXRjaD08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntyLnJvbGxvdXQuYmF0Y2hTaXplfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ICB0aHJlc2hvbGQ9PC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57ci5yb2xsb3V0LmZhaWx1cmVUaHJlc2hvbGR9JTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+YXR0ZW1wdGVkOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57c3VtbWFyeS5hdHRlbXB0ZWQgPz8gMH08L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gIG9rOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmxpbWV9PntzdW1tYXJ5LnN1Y2NlZWRlZCA/PyAwfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiAgZmFpbGVkOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9eyhzdW1tYXJ5LmZhaWxlZCB8fCAwKSA+IDAgPyB0aGVtZS5yZWQgOiB0aGVtZS5mZ0RpbX0+XG4gICAgICAgICAgICAgICAgICAgIHtzdW1tYXJ5LmZhaWxlZCA/PyAwfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiAgcmF0ZTogPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ30+XG4gICAgICAgICAgICAgICAgICAgIHtOdW1iZXIuaXNGaW5pdGUoc3VtbWFyeS5mYWlsdXJlUmF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7c3VtbWFyeS5mYWlsdXJlUmF0ZS50b0ZpeGVkKDEpfSVgXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdcdTIwMTQnfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAge3IucmVhc29uICYmIChcbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PnJlYXNvbjogPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYW1iZXJ9PntyLnJlYXNvbn08L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge0FycmF5LmlzQXJyYXkoci5kZXZpY2VzKSAmJiByLmRldmljZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5kZXZpY2VzOjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge3IuZGV2aWNlcy5zbGljZSgwLCAyMCkubWFwKChkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17ZC5kZXZpY2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2tpcHBlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoZW1lLmFtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZC5va1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhlbWUubGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhlbWUucmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkLnNraXBwZWQgPyAnIScgOiBkLm9rID8gJ1x1MjcxMycgOiAnXHUyNzE1J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9IHdyYXA9XCJ0cnVuY2F0ZS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkLmRldmljZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkLmVycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnJlZH0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2QuZXJyb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICB7ci5kZXZpY2VzLmxlbmd0aCA+IDIwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcdTIwMjZ7ci5kZXZpY2VzLmxlbmd0aCAtIDIwfSBtb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICApO1xufVxuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCwgdXNlSW5wdXQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5cbmNvbnN0IE1JTl9CQVRDSCA9IDE7XG5jb25zdCBNQVhfQkFUQ0ggPSA1MDtcblxuLy8gQSBzaW5nbGUgdGV4dCBpbnB1dCBsaW5lIHdpdGggY3Vyc29yICsga2V5Ym9hcmQgZWRpdGluZy4gVGhlIGNhbGxlclxuLy8gZHJpdmVzIGZvY3VzIGFuZCB2YWx1ZSBcdTIwMTQgd2Uga2VlcCB0aGUgaW1wbGVtZW50YXRpb24gbG9jYWwgc28gZWFjaCB2YXJcbi8vIGZpZWxkIGNhbiBzaGFyZSBleGFjdGx5IHRoZSBzYW1lIGJlaGF2aW91ciB3aXRob3V0IHB1bGxpbmcgaW4gYSBVSSBsaWIuXG5mdW5jdGlvbiBUZXh0RmllbGQoeyB2YWx1ZSwgZm9jdXNlZCwgb25DaGFuZ2UgfSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSB2YWx1ZSA/PyAnJztcbiAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57ZGlzcGxheX08L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0gaW52ZXJzZT5cbiAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntkaXNwbGF5Lmxlbmd0aCA/IGRpc3BsYXkgOiAnICd9PC9UZXh0Pjtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplRGVmYXVsdCh2YWx1ZSwgdHlwZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG4gICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gY29lcmNlKHJhdywgdHlwZSkge1xuICAgIGNvbnN0IHMgPSByYXcgPz8gJyc7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHMgfTtcbiAgICAgICAgY2FzZSAnbnVtYmVyJzoge1xuICAgICAgICAgICAgaWYgKHMgPT09ICcnKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnbnVtYmVyIHJlcXVpcmVkJyB9O1xuICAgICAgICAgICAgY29uc3QgbiA9IE51bWJlcihzKTtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG4pKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnbm90IGEgZmluaXRlIG51bWJlcicgfTtcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogbiB9O1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgaWYgKHMgPT09ICd0cnVlJykgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiB0cnVlIH07XG4gICAgICAgICAgICBpZiAocyA9PT0gJ2ZhbHNlJykgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBmYWxzZSB9O1xuICAgICAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ2V4cGVjdGVkIHRydWUgb3IgZmFsc2UnIH07XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBpZiAocy50cmltKCkgPT09ICcnKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnSlNPTiByZXF1aXJlZCcgfTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBKU09OLnBhcnNlKHMpIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnIubWVzc2FnZSB8fCAnaW52YWxpZCBKU09OJyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBzIH07XG4gICAgfVxufVxuXG4vKipcbiAqIFZhcmlhYmxlcyBlZGl0b3IgKyBydW4gb3B0aW9ucyBtb2RhbC4gVXNlZCBmb3IgYm90aCBzaW5nbGUtZGV2aWNlIGFuZFxuICogZmxlZXQgcnVucyBcdTIwMTQgZmxlZXQgbW9kZSBhbHNvIGV4cG9zZXMgYmF0Y2ggc2l6ZSwgZmFpbHVyZSB0aHJlc2hvbGQgYW5kXG4gKiB0aGUgaW5jbHVkZS1vZmZsaW5lIHRvZ2dsZSAodGhlIHRhc2sgc3BlYyBsaXN0cyBvZmZsaW5lIGluY2x1c2lvbiBhc1xuICogcGFydCBvZiB0aGUgcm9sbG91dCBmb3JtKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFBsYXlib29rVmFyc01vZGFsKHtcbiAgICBwbGF5Ym9va05hbWUsXG4gICAgbW9kZSxcbiAgICB2YXJpYWJsZXMsXG4gICAgZGV2aWNlLFxuICAgIGRldmljZUNvdW50LFxuICAgIGJhdGNoU2l6ZTogaW5pdGlhbEJhdGNoU2l6ZSA9IDUsXG4gICAgZmFpbHVyZVRocmVzaG9sZDogaW5pdGlhbEZhaWx1cmVUaHJlc2hvbGQgPSAxMCxcbiAgICBpbmNsdWRlT2ZmbGluZTogaW5pdGlhbEluY2x1ZGVPZmZsaW5lID0gZmFsc2UsXG4gICAgb25TdWJtaXQsXG4gICAgb25DYW5jZWwsXG59KSB7XG4gICAgLy8gU3RyaW5ncyB0byBtYXRjaCB3aGF0IHRoZSB1c2VyIGFjdHVhbGx5IHR5cGVzLiBXZSBjb2VyY2UgYmFjayB0b1xuICAgIC8vIHRoZSBkZWNsYXJlZCB0eXBlIG9ubHkgYXQgc3VibWl0IHRpbWUuXG4gICAgY29uc3QgaW5pdGlhbEZpZWxkcyA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICAodmFyaWFibGVzIHx8IFtdKS5tYXAoKHYpID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogdi5uYW1lLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB2LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHR5cGU6IHYudHlwZSxcbiAgICAgICAgICAgICAgICBvdmVycmlkYWJsZTogdi5vdmVycmlkYWJsZSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdi5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICBoYXNEZWZhdWx0OiB2Lmhhc0RlZmF1bHQsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IHYuZGVmYXVsdCxcbiAgICAgICAgICAgICAgICB0ZXh0OiBzZXJpYWxpemVEZWZhdWx0KHYuZGVmYXVsdCwgdi50eXBlKSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgW3ZhcmlhYmxlc10sXG4gICAgKTtcblxuICAgIGNvbnN0IGVkaXRhYmxlSW5kaWNlcyA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IGluaXRpYWxGaWVsZHMubWFwKChmLCBpKSA9PiAoZi5vdmVycmlkYWJsZSA/IGkgOiAtMSkpLmZpbHRlcigoaSkgPT4gaSA+PSAwKSxcbiAgICAgICAgW2luaXRpYWxGaWVsZHNdLFxuICAgICk7XG4gICAgY29uc3QgaGFzRWRpdGFibGVWYXJzID0gZWRpdGFibGVJbmRpY2VzLmxlbmd0aCA+IDA7XG5cbiAgICAvLyBGb2N1cyBjdXJzb3IuIE5hdmlnYXRlcyB0aHJvdWdoIGVkaXRhYmxlIHZhcnMsIHRoZW4gZmxlZXQtb25seVxuICAgIC8vIGNvbnRyb2xzLCB0aGVuIGFjdGlvbnMuIFdlIHN0b3JlIGZvY3VzIGFzIGEgdW5pZmllZCBpbmRleCBpbnRvIGFcbiAgICAvLyBmbGF0IGxpc3Qgb2YgZm9jdXNhYmxlIHRhcmdldHMgc28gdGhlIHRhYiBrZXkgbW92ZXMgaW4gb25lIGxpbmUuXG4gICAgY29uc3QgZXh0cmFUYXJnZXRzID1cbiAgICAgICAgbW9kZSA9PT0gJ2ZsZWV0J1xuICAgICAgICAgICAgPyBbJ2JhdGNoJywgJ3RocmVzaG9sZCcsICdvZmZsaW5lJywgJ3N1Ym1pdCcsICdjYW5jZWwnXVxuICAgICAgICAgICAgOiBbJ3N1Ym1pdCcsICdjYW5jZWwnXTtcbiAgICBjb25zdCBmb2N1c09yZGVyID0gWy4uLmVkaXRhYmxlSW5kaWNlcy5tYXAoKGkpID0+IGB2YXI6JHtpfWApLCAuLi5leHRyYVRhcmdldHNdO1xuXG4gICAgY29uc3QgW2ZpZWxkcywgc2V0RmllbGRzXSA9IHVzZVN0YXRlKGluaXRpYWxGaWVsZHMpO1xuICAgIGNvbnN0IFtiYXRjaCwgc2V0QmF0Y2hdID0gdXNlU3RhdGUoaW5pdGlhbEJhdGNoU2l6ZSk7XG4gICAgY29uc3QgW3RocmVzaG9sZCwgc2V0VGhyZXNob2xkXSA9IHVzZVN0YXRlKGluaXRpYWxGYWlsdXJlVGhyZXNob2xkKTtcbiAgICBjb25zdCBbaW5jbHVkZU9mZmxpbmUsIHNldEluY2x1ZGVPZmZsaW5lXSA9IHVzZVN0YXRlKCEhaW5pdGlhbEluY2x1ZGVPZmZsaW5lKTtcbiAgICBjb25zdCBbZm9jdXNJZHgsIHNldEZvY3VzSWR4XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSBmb2N1c09yZGVyW2ZvY3VzSWR4XSA/PyBmb2N1c09yZGVyWzBdO1xuXG4gICAgY29uc3Qgc2V0VmFyVGV4dCA9ICh2YXJJbmRleCwgdXBkYXRlcikgPT4ge1xuICAgICAgICBzZXRGaWVsZHMoKHByZXYpID0+XG4gICAgICAgICAgICBwcmV2Lm1hcCgoZiwgaSkgPT4gKGkgPT09IHZhckluZGV4ID8geyAuLi5mLCB0ZXh0OiB1cGRhdGVyKGYudGV4dCkgfSA6IGYpKSxcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbW92ZUZvY3VzID0gKGRlbHRhKSA9PiB7XG4gICAgICAgIGlmIChmb2N1c09yZGVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBzZXRGb2N1c0lkeCgoaWR4KSA9PiAoaWR4ICsgZGVsdGEgKyBmb2N1c09yZGVyLmxlbmd0aCkgJSBmb2N1c09yZGVyLmxlbmd0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHRyeVN1Ym1pdCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGlmICghZi5vdmVycmlkYWJsZSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIWYudGV4dCB8fCBmLnRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGYucmVxdWlyZWQgJiYgIWYuaGFzRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihgXCIke2YubmFtZX1cIiBpcyByZXF1aXJlZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFbXB0eSBhbmQgb3B0aW9uYWwgYW5kIG5vIGRlZmF1bHQgXHUyMTkyIHNraXAgb3ZlcnJpZGUuXG4gICAgICAgICAgICAgICAgaWYgKCFmLmhhc0RlZmF1bHQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIC8vIEVtcHR5IHdpdGggYSBkZWZhdWx0IFx1MjE5MiBubyBvdmVycmlkZSwgdXNlIHRoZSBkZWZhdWx0LlxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgbGVmdCB0aGUgc3RyaW5naWZpZWQgZGVmYXVsdCB1bnRvdWNoZWQsIHNraXBcbiAgICAgICAgICAgIC8vIHRoZSBvdmVycmlkZSBzbyB0aGUgcnVubmVyIHVzZXMgdGhlIHBhcnNlZCBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICAvLyAoZS5nLiBKU09OIG9iamVjdHMgc3Vydml2ZSByb3VuZC10cmlwcGluZykuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZi5oYXNEZWZhdWx0ICYmXG4gICAgICAgICAgICAgICAgZi50ZXh0ID09PSBzZXJpYWxpemVEZWZhdWx0KGYub3JpZ2luYWwsIGYudHlwZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IGNvZXJjZShmLnRleHQsIGYudHlwZSk7XG4gICAgICAgICAgICBpZiAoIWMub2spIHtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihgXCIke2YubmFtZX1cIjogJHtjLmVycm9yfWApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG92ZXJyaWRlc1tmLm5hbWVdID0gYy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgb25TdWJtaXQoe1xuICAgICAgICAgICAgb3ZlcnJpZGVzLFxuICAgICAgICAgICAgYmF0Y2hTaXplOiBiYXRjaCxcbiAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQ6IHRocmVzaG9sZCxcbiAgICAgICAgICAgIGluY2x1ZGVPZmZsaW5lLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgdXNlSW5wdXQoKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleS5lc2NhcGUpIHtcbiAgICAgICAgICAgIG9uQ2FuY2VsPy4oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5LnRhYikge1xuICAgICAgICAgICAgbW92ZUZvY3VzKGtleS5zaGlmdCA/IC0xIDogMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5kb3duQXJyb3cpIHtcbiAgICAgICAgICAgIG1vdmVGb2N1cygxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5LnVwQXJyb3cpIHtcbiAgICAgICAgICAgIG1vdmVGb2N1cygtMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEZvY3VzID09PSAnc3VibWl0JyAmJiBrZXkucmV0dXJuKSB7XG4gICAgICAgICAgICB0cnlTdWJtaXQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudEZvY3VzID09PSAnY2FuY2VsJyAmJiBrZXkucmV0dXJuKSB7XG4gICAgICAgICAgICBvbkNhbmNlbD8uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleS5yZXR1cm4pIHtcbiAgICAgICAgICAgIHRyeVN1Ym1pdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRGb2N1cyA9PT0gJ2JhdGNoJykge1xuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnKycgfHwgaW5wdXQgPT09ICc9Jykge1xuICAgICAgICAgICAgICAgIHNldEJhdGNoKChuKSA9PiBNYXRoLm1pbihNQVhfQkFUQ0gsIG4gKyAxKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnLScgfHwgaW5wdXQgPT09ICdfJykge1xuICAgICAgICAgICAgICAgIHNldEJhdGNoKChuKSA9PiBNYXRoLm1heChNSU5fQkFUQ0gsIG4gLSAxKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50Rm9jdXMgPT09ICd0aHJlc2hvbGQnKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICcrJyB8fCBpbnB1dCA9PT0gJz0nKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhyZXNob2xkKChuKSA9PiBNYXRoLm1pbigxMDAsIG4gKyA1KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnLScgfHwgaW5wdXQgPT09ICdfJykge1xuICAgICAgICAgICAgICAgIHNldFRocmVzaG9sZCgobikgPT4gTWF0aC5tYXgoMCwgbiAtIDUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRGb2N1cyA9PT0gJ29mZmxpbmUnKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICcgJyB8fCBpbnB1dCA9PT0gJ28nKSB7XG4gICAgICAgICAgICAgICAgc2V0SW5jbHVkZU9mZmxpbmUoKHYpID0+ICF2KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEZvY3VzPy5zdGFydHNXaXRoKCd2YXI6JykpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IE51bWJlcihjdXJyZW50Rm9jdXMuc2xpY2UoNCkpO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHNbaWR4XTtcbiAgICAgICAgICAgIGlmICghZmllbGQgfHwgIWZpZWxkLm92ZXJyaWRhYmxlKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoa2V5LmJhY2tzcGFjZSB8fCBrZXkuZGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0VmFyVGV4dChpZHgsICh0KSA9PiB0LnNsaWNlKDAsIC0xKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ICYmICFrZXkuY3RybCAmJiAha2V5Lm1ldGEgJiYgaW5wdXQubGVuZ3RoID09PSAxICYmIGlucHV0ID49ICcgJykge1xuICAgICAgICAgICAgICAgIHNldFZhclRleHQoaWR4LCAodCkgPT4gdCArIGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdGl0bGUgPVxuICAgICAgICBtb2RlID09PSAnZmxlZXQnXG4gICAgICAgICAgICA/IGBGTEVFVCBST0xMT1VUIFx1MDBCNyAke3BsYXlib29rTmFtZX1gXG4gICAgICAgICAgICA6IGBSVU4gXHUwMEI3ICR7cGxheWJvb2tOYW1lfSR7ZGV2aWNlID8gYCBcdTIxOTIgJHtkZXZpY2UuZGV2aWNlfWAgOiAnJ31gO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveFxuICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj17dGhlbWUuYm9yZGVyRm9jdXN9XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e3RoZW1lLm92ZXJsYXlCZ31cbiAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgcGFkZGluZ1k9ezF9XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgICAgIHdpZHRoPXs3OH1cbiAgICAgICAgPlxuICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9IGp1c3RpZnlDb250ZW50PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hY2NlbnR9IGJvbGQ+XG4gICAgICAgICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAge21vZGUgPT09ICdmbGVldCcgJiYgZGV2aWNlQ291bnQgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZGV2aWNlQ291bnR9IGRldmljZXtkZXZpY2VDb3VudCA9PT0gMSA/ICcnIDogJ3MnfVxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7ZmllbGRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PihwbGF5Ym9vayBkZWNsYXJlcyBubyB2YXJpYWJsZXMpPC9UZXh0PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT5WYXJpYWJsZXMgKHRhYiB0byBtb3ZlLCBlbnRlciB0byBzdWJtaXQpOjwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAge2ZpZWxkcy5tYXAoKGYsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRm9jdXNlZCA9IGN1cnJlbnRGb2N1cyA9PT0gYHZhcjoke2l9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRPbmx5ID0gIWYub3ZlcnJpZGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3gga2V5PXtmLm5hbWV9IG1hcmdpblRvcD17MH0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17MjB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRm9jdXNlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhlbWUuYWNjZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZWFkT25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGVtZS5mZ0ZhaW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoZW1lLmZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9sZD17aXNGb2N1c2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2YubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2YucmVxdWlyZWQgPyAnKicgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezEwfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+e2YudHlwZX08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggZmxleEdyb3c9ezF9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZWFkT25seSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2YudGV4dCB8fCAnKG5vdCBvdmVycmlkYWJsZSknfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2YudGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWQ9e2lzRm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7fX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Zi5kZXNjcmlwdGlvbiAmJiBpc0ZvY3VzZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBtYXJnaW5MZWZ0PXsyMH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT57Zi5kZXNjcmlwdGlvbn08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge21vZGUgPT09ICdmbGVldCcgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfSBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+Um9sbG91dDo8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyMH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvY3VzID09PSAnYmF0Y2gnID8gdGhlbWUuYWNjZW50IDogdGhlbWUuZmdEaW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkPXtjdXJyZW50Rm9jdXMgPT09ICdiYXRjaCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaCBzaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntiYXRjaH08L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+ICAoKy8tKTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyMH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvY3VzID09PSAndGhyZXNob2xkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhlbWUuYWNjZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGVtZS5mZ0RpbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvbGQ9e2N1cnJlbnRGb2N1cyA9PT0gJ3RocmVzaG9sZCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCBhdCBmYWlsdXJlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT57dGhyZXNob2xkfSU8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+ICAoKy8tKTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHdpZHRoPXsyMH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvY3VzID09PSAnb2ZmbGluZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoZW1lLmFjY2VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhlbWUuZmdEaW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkPXtjdXJyZW50Rm9jdXMgPT09ICdvZmZsaW5lJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgb2ZmbGluZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2luY2x1ZGVPZmZsaW5lID8gdGhlbWUubGltZSA6IHRoZW1lLmZnRGltfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aW5jbHVkZU9mZmxpbmUgPyAnW3hdJyA6ICdbIF0nfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PiAgKHNwYWNlKTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLnJlZH0+e2Vycm9yfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfSBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2N1cnJlbnRGb2N1cyA9PT0gJ3N1Ym1pdCcgPyB0aGVtZS5hY2NlbnQgOiB0aGVtZS5mZ0RpbX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJvbGQ9e2N1cnJlbnRGb2N1cyA9PT0gJ3N1Ym1pdCd9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50Rm9jdXMgPT09ICdzdWJtaXQnID8gJ1x1MjVCNiAnIDogJyAgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGVyIHttb2RlID09PSAnZmxlZXQnID8gJ3N0YXJ0IHJvbGxvdXQnIDogJ3J1biBwbGF5Ym9vayd9XG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2N1cnJlbnRGb2N1cyA9PT0gJ2NhbmNlbCcgPyB0aGVtZS5hbWJlciA6IHRoZW1lLmZnRGltfVxuICAgICAgICAgICAgICAgICAgICAgICAgYm9sZD17Y3VycmVudEZvY3VzID09PSAnY2FuY2VsJ31cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgZXNjIGNhbmNlbFxuICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIHshaGFzRWRpdGFibGVWYXJzICYmIG1vZGUgPT09ICdzaW5nbGUnICYmIChcbiAgICAgICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vIG92ZXJyaWRhYmxlIHZhcmlhYmxlcyBcdTIwMTQgcHJlc3MgZW50ZXIgdG8gY29udGludWUuXG4gICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgVGV4dCwgdXNlSW5wdXQgfSBmcm9tICdpbmsnO1xuaW1wb3J0IHsgdGhlbWUgfSBmcm9tICcuLi90aGVtZS5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25maXJtTW9kYWwoeyB0aXRsZSwgYm9keSwgY29uZmlybUxhYmVsID0gJ2NvbmZpcm0nLCB0b25lID0gJ3dhcm4nLCBvbkNvbmZpcm0sIG9uQ2FuY2VsIH0pIHtcbiAgICB1c2VJbnB1dCgoaW5wdXQsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LmVzY2FwZSkge1xuICAgICAgICAgICAgb25DYW5jZWw/LigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkucmV0dXJuIHx8IGlucHV0ID09PSAneScgfHwgaW5wdXQgPT09ICdZJykge1xuICAgICAgICAgICAgb25Db25maXJtPy4oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgPT09ICduJyB8fCBpbnB1dCA9PT0gJ04nKSB7XG4gICAgICAgICAgICBvbkNhbmNlbD8uKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2VudENvbG9yID0gdG9uZSA9PT0gJ2RhbmdlcicgPyB0aGVtZS5yZWQgOiB0b25lID09PSAnb2snID8gdGhlbWUubGltZSA6IHRoZW1lLmFtYmVyO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEJveFxuICAgICAgICAgICAgYm9yZGVyU3R5bGU9XCJyb3VuZFwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj17dGhlbWUuYm9yZGVyRm9jdXN9XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9e3RoZW1lLm92ZXJsYXlCZ31cbiAgICAgICAgICAgIHBhZGRpbmdYPXsyfVxuICAgICAgICAgICAgcGFkZGluZ1k9ezF9XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgICAgICAgIHdpZHRoPXs2MH1cbiAgICAgICAgPlxuICAgICAgICAgICAgPEJveCBtYXJnaW5Cb3R0b209ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXthY2NlbnRDb2xvcn0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAge2JvZHkgJiZcbiAgICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheShib2R5KSA/IGJvZHkgOiBbYm9keV0pLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8Qm94IGtleT17aX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmd9PntsaW5lfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0ganVzdGlmeUNvbnRlbnQ9XCJzcGFjZS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2FjY2VudENvbG9yfSBib2xkPlxuICAgICAgICAgICAgICAgICAgICBlbnRlci95IHtjb25maXJtTGFiZWx9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+ZXNjL24gY2FuY2VsPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG4iLCAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gICAgZGVsZXRlUHJvZHVjdFBsYXlib29rLFxuICAgIGxpc3RQcm9kdWN0UGxheWJvb2tzLFxuICAgIHJlYWRQcm9kdWN0UGxheWJvb2ssXG59IGZyb20gJy4uLy4uLy4uL2xpYi9wcm9kdWN0LmpzJztcbmltcG9ydCB7XG4gICAgbGlzdFN0b3JhZ2VGaWxlcyxcbiAgICByZWFkU3RvcmFnZUZpbGUsXG59IGZyb20gJ0B0aGluZ2VyLWlvL2NsaS1jb3JlL3N0b3JhZ2UnO1xuaW1wb3J0IHsgcGFyc2VQbGF5Ym9vayB9IGZyb20gJy4uLy4uLy4uL2xpYi9wbGF5Ym9vay9sb2FkZXIuanMnO1xuaW1wb3J0IHsgZGVidWdDb3VudCwgZGVidWdMb2cgfSBmcm9tICcuLi8uLi8uLi9saWIvZGVidWctbG9nLmpzJztcblxuY29uc3QgUlVOU19QUkVGSVggPSAncGxheWJvb2tzL3J1bnMvJztcblxuZnVuY3Rpb24gaXNSdW5GaWxlKGYsIG5hbWUpIHtcbiAgICBpZiAoIWYgfHwgZi50eXBlICE9PSAnZmlsZScpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWYucGF0aD8uc3RhcnRzV2l0aChSVU5TX1BSRUZJWCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIW5hbWUpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmLm5hbWU/LmluY2x1ZGVzKGAtJHtuYW1lfS1gKSB8fCBmLm5hbWU/LnN0YXJ0c1dpdGgoYCR7bmFtZX0tYCk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIHBsYXlib29rIGluZGV4IG9mIGEgcHJvZHVjdC4gVGhlIGxpc3QgcmFyZWx5IGNoYW5nZXMgKG9ubHlcbiAqIHdoZW4gYSBodW1hbiBvciBhc3Npc3RhbnQgdXBsb2Fkcy9kZWxldGVzIG9uZSksIHNvIHdlIGRvbid0IHBvbGwgXHUyMDE0XG4gKiB0aGUgaW5kZXggbG9hZHMgb25jZSBvbiBtb3VudCBhbmQgb24gZGVtYW5kIHZpYSBgcmVmcmVzaCgpYC4gVGhlXG4gKiB0YWIncyBgUmAgc2hvcnRjdXQgYW5kIGFueSBsb2NhbCBhY3Rpb24gdGhhdCBtdXRhdGVzIHRoZSBpbmRleFxuICogKHVwbG9hZC9kZWxldGUvcm9sbG91dCkgY2FsbCByZWZyZXNoIHRoZW1zZWx2ZXMuXG4gKlxuICogQWxzbyBleHBvc2VzIHBhcnNlZC1vbi1kZW1hbmQgZGV0YWlsIChZQU1MIHRleHQgKyBwYXJzZWQgc3RydWN0dXJlKVxuICogYW5kIGEgbGlzdCBvZiBydW4gcmVwb3J0cywgYm90aCBwb3B1bGF0ZWQgd2hlbiBhIHBsYXlib29rIGlzIHNlbGVjdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZHVjdFBsYXlib29rcyhwcm9kdWN0SWQpIHtcbiAgICBjb25zdCBbcGxheWJvb2tzLCBzZXRQbGF5Ym9va3NdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtsaXN0RXJyb3IsIHNldExpc3RFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbZGV0YWlsLCBzZXREZXRhaWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3JlcG9ydHMsIHNldFJlcG9ydHNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtyZXBvcnRzRXJyb3IsIHNldFJlcG9ydHNFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbcmVwb3J0RGV0YWlsLCBzZXRSZXBvcnREZXRhaWxdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3JlbG9hZFRva2VuLCBzZXRSZWxvYWRUb2tlbl0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBkZXRhaWxSZXEgPSB1c2VSZWYoMCk7XG4gICAgY29uc3QgcmVwb3J0c1JlcSA9IHVzZVJlZigwKTtcbiAgICBjb25zdCByZXBvcnRSZXEgPSB1c2VSZWYoMCk7XG5cbiAgICBjb25zdCByZWZyZXNoID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0UmVsb2FkVG9rZW4oKHQpID0+IHQgKyAxKSwgW10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFwcm9kdWN0SWQpIHtcbiAgICAgICAgICAgIHNldFBsYXlib29rcyhbXSk7XG4gICAgICAgICAgICBzZXRMaXN0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgICAgICAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBkZWJ1Z0NvdW50KCdodHRwOnBsYXlib29rLWluZGV4Jyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBsaXN0UHJvZHVjdFBsYXlib29rcyhwcm9kdWN0SWQpO1xuICAgICAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOnBsYXlib29rLWluZGV4JywgJ2VuZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogcHJvZHVjdElkLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogbGlzdD8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldFBsYXlib29rcyhsaXN0KTtcbiAgICAgICAgICAgICAgICBzZXRMaXN0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpwbGF5Ym9vay1pbmRleCcsICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogcHJvZHVjdElkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyPy5tZXNzYWdlIHx8IFN0cmluZyhlcnIpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXRMaXN0RXJyb3IoZXJyPy5tZXNzYWdlIHx8IFN0cmluZyhlcnIpKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvYWQoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW3Byb2R1Y3RJZCwgcmVsb2FkVG9rZW5dKTtcblxuICAgIGNvbnN0IGxvYWREZXRhaWwgPSB1c2VDYWxsYmFjayhhc3luYyAobmFtZSkgPT4ge1xuICAgICAgICBpZiAoIXByb2R1Y3RJZCB8fCAhbmFtZSkge1xuICAgICAgICAgICAgc2V0RGV0YWlsKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcUlkID0gKytkZXRhaWxSZXEuY3VycmVudDtcbiAgICAgICAgc2V0RGV0YWlsKHsgbmFtZSwgbG9hZGluZzogdHJ1ZSwgZXJyb3I6IG51bGwsIHlhbWw6IG51bGwsIHBhcnNlZDogbnVsbCB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHlhbWwgPSBhd2FpdCByZWFkUHJvZHVjdFBsYXlib29rKHByb2R1Y3RJZCwgbmFtZSk7XG4gICAgICAgICAgICBpZiAoZGV0YWlsUmVxLmN1cnJlbnQgIT09IHJlcUlkKSByZXR1cm47XG4gICAgICAgICAgICBsZXQgcGFyc2VkID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBwYXJzZUVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gcGFyc2VQbGF5Ym9vayh5YW1sLCB7IHNvdXJjZVBhdGg6IGAke25hbWV9LnlhbWxgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VFcnJvciA9IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZXRhaWxSZXEuY3VycmVudCAhPT0gcmVxSWQpIHJldHVybjtcbiAgICAgICAgICAgIHNldERldGFpbCh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB5YW1sLFxuICAgICAgICAgICAgICAgIHBhcnNlZCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXJzZUVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGRldGFpbFJlcS5jdXJyZW50ICE9PSByZXFJZCkgcmV0dXJuO1xuICAgICAgICAgICAgc2V0RGV0YWlsKHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHlhbWw6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyc2VkOiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVyciksXG4gICAgICAgICAgICAgICAgcGFyc2VFcnJvcjogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW3Byb2R1Y3RJZF0pO1xuXG4gICAgY29uc3QgY2xlYXJEZXRhaWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRldGFpbFJlcS5jdXJyZW50Kys7XG4gICAgICAgIHNldERldGFpbChudWxsKTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBsb2FkUmVwb3J0cyA9IHVzZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcm9kdWN0SWQpIHtcbiAgICAgICAgICAgICAgICBzZXRSZXBvcnRzKFtdKTtcbiAgICAgICAgICAgICAgICBzZXRSZXBvcnRzRXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVxSWQgPSArK3JlcG9ydHNSZXEuY3VycmVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBsaXN0U3RvcmFnZUZpbGVzKHByb2R1Y3RJZCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydHNSZXEuY3VycmVudCAhPT0gcmVxSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IChmaWxlcyB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZikgPT4gaXNSdW5GaWxlKGYsIG5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChmKSA9PiAoeyBuYW1lOiBmLm5hbWUsIHBhdGg6IGYucGF0aCwgc2l6ZTogZi5zaXplIH0pKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5uYW1lLmxvY2FsZUNvbXBhcmUoYS5uYW1lKSk7XG4gICAgICAgICAgICAgICAgc2V0UmVwb3J0cyhmaWx0ZXJlZCk7XG4gICAgICAgICAgICAgICAgc2V0UmVwb3J0c0Vycm9yKG51bGwpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydHNSZXEuY3VycmVudCAhPT0gcmVxSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoL25vdCBmb3VuZHw0MDQvaS50ZXN0KGVycj8ubWVzc2FnZSB8fCAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0cyhbXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlcG9ydHNFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXBvcnRzKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVwb3J0c0Vycm9yKGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbcHJvZHVjdElkXSxcbiAgICApO1xuXG4gICAgY29uc3QgbG9hZFJlcG9ydCA9IHVzZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAocGF0aCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcm9kdWN0SWQgfHwgIXBhdGgpIHtcbiAgICAgICAgICAgICAgICBzZXRSZXBvcnREZXRhaWwobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVxSWQgPSArK3JlcG9ydFJlcS5jdXJyZW50O1xuICAgICAgICAgICAgc2V0UmVwb3J0RGV0YWlsKHsgcGF0aCwgbG9hZGluZzogdHJ1ZSwgcmVwb3J0OiBudWxsLCBlcnJvcjogbnVsbCB9KTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlYWRTdG9yYWdlRmlsZShwcm9kdWN0SWQsIHBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXBvcnRSZXEuY3VycmVudCAhPT0gcmVxSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvciA9IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0UmVwb3J0RGV0YWlsKHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydDogcGFyc2VkLFxuICAgICAgICAgICAgICAgICAgICByYXc6IHRleHQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBwYXJzZUVycm9yLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydFJlcS5jdXJyZW50ICE9PSByZXFJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldFJlcG9ydERldGFpbCh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICByZXBvcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVyciksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtwcm9kdWN0SWRdLFxuICAgICk7XG5cbiAgICBjb25zdCBjbGVhclJlcG9ydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgcmVwb3J0UmVxLmN1cnJlbnQrKztcbiAgICAgICAgc2V0UmVwb3J0RGV0YWlsKG51bGwpO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHJlbW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcm9kdWN0SWQgfHwgIW5hbWUpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdtaXNzaW5nLWlucHV0JyB9O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBkZWxldGVQcm9kdWN0UGxheWJvb2soeyBwcm9kdWN0OiBwcm9kdWN0SWQsIG5hbWUgfSk7XG4gICAgICAgICAgICAgICAgc2V0UGxheWJvb2tzKChwcmV2KSA9PiBwcmV2LmZpbHRlcigocCkgPT4gcC5uYW1lICE9PSBuYW1lKSk7XG4gICAgICAgICAgICAgICAgZGV0YWlsUmVxLmN1cnJlbnQrKztcbiAgICAgICAgICAgICAgICBzZXREZXRhaWwobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHJlc3VsdDogcmVzIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycikgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3Byb2R1Y3RJZF0sXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHBsYXlib29rcyxcbiAgICAgICAgbGlzdEVycm9yLFxuICAgICAgICBsb2FkaW5nLFxuICAgICAgICBkZXRhaWwsXG4gICAgICAgIHJlcG9ydHMsXG4gICAgICAgIHJlcG9ydHNFcnJvcixcbiAgICAgICAgcmVwb3J0RGV0YWlsLFxuICAgICAgICBsb2FkRGV0YWlsLFxuICAgICAgICBjbGVhckRldGFpbCxcbiAgICAgICAgbG9hZFJlcG9ydHMsXG4gICAgICAgIGxvYWRSZXBvcnQsXG4gICAgICAgIGNsZWFyUmVwb3J0LFxuICAgICAgICByZW1vdmUsXG4gICAgICAgIHJlZnJlc2gsXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJ1blBsYXlib29rIH0gZnJvbSAnLi4vLi4vLi4vbGliL3BsYXlib29rL3J1bm5lci5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX0ZBSUxVUkVfVEhSRVNIT0xELCBydW5GbGVldFBsYXlib29rIH0gZnJvbSAnLi4vLi4vLi4vbGliL3BsYXlib29rL2ZsZWV0LmpzJztcbmltcG9ydCB7IHVwbG9hZEZsZWV0UnVuUmVwb3J0IH0gZnJvbSAnLi4vLi4vLi4vbGliL3Byb2R1Y3QuanMnO1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ0B0aGluZ2VyLWlvL2NsaS1jb3JlL2NvbmZpZyc7XG5cbmNvbnN0IERFRkFVTFRfQkFUQ0hfU0laRSA9IDU7XG5cbi8qKlxuICogU3RhdGUgbWFjaGluZSB3cmFwcGluZyB0aGUgc2luZ2xlLWRldmljZSBydW5uZXIgYW5kIGZsZWV0IG9yY2hlc3RyYXRvci5cbiAqIFBoYXNlczpcbiAqICAgaWRsZSAgICAgICAgICAgICAgICAgICAgIFx1MjE5MiBub3RoaW5nIGluIGZsaWdodFxuICogICB2YXJzICAgKHNpbmdsZSB8IGZsZWV0KSAgXHUyMTkyIGNvbGxlY3RpbmcgdmFyaWFibGUgb3ZlcnJpZGVzIC8gcnVuIG9wdGlvbnNcbiAqICAgY29uZmlybWluZy1kZWxldGUgICAgICAgIFx1MjE5MiBkZXN0cnVjdGl2ZSBvcCBhd2FpdGluZyB1c2VyIGNvbmZpcm1hdGlvblxuICogICBydW5uaW5nICAgICAgICAgICAgICAgICAgXHUyMTkyIHJ1bm5lciBleGVjdXRpbmc7IHBlci1kZXZpY2Uvc3RlcCBwcm9ncmVzcyB1cGRhdGVzXG4gKiAgIGRvbmUgICAgICAgICAgICAgICAgICAgICBcdTIxOTIgbGFzdCBydW4ncyByZXN1bHQgaGVsZCB1bnRpbCBkaXNtaXNzZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVBsYXlib29rUnVuQ29udHJvbGxlcigpIHtcbiAgICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKHsgcGhhc2U6ICdpZGxlJyB9KTtcbiAgICBjb25zdCBhYm9ydFJlZiA9IHVzZVJlZihudWxsKTtcblxuICAgIGNvbnN0IGNhbmNlbEZsb3cgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHNldFN0YXRlKHsgcGhhc2U6ICdpZGxlJyB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBjYW5jZWxSdW5uaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBhYm9ydFJlZi5jdXJyZW50Py5hYm9ydD8uKCk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgc3RhcnRTaW5nbGVWYXJzID0gdXNlQ2FsbGJhY2soKHBsYXlib29rLCBwYXJzZWQsIGRldmljZSkgPT4ge1xuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBwaGFzZTogJ3ZhcnMnLFxuICAgICAgICAgICAgbW9kZTogJ3NpbmdsZScsXG4gICAgICAgICAgICBwbGF5Ym9vayxcbiAgICAgICAgICAgIHBhcnNlZCxcbiAgICAgICAgICAgIGRldmljZSxcbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3Qgc3RhcnRGbGVldFZhcnMgPSB1c2VDYWxsYmFjaygocGxheWJvb2ssIHBhcnNlZCkgPT4ge1xuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBwaGFzZTogJ3ZhcnMnLFxuICAgICAgICAgICAgbW9kZTogJ2ZsZWV0JyxcbiAgICAgICAgICAgIHBsYXlib29rLFxuICAgICAgICAgICAgcGFyc2VkLFxuICAgICAgICAgICAgYmF0Y2hTaXplOiBERUZBVUxUX0JBVENIX1NJWkUsXG4gICAgICAgICAgICBmYWlsdXJlVGhyZXNob2xkOiBERUZBVUxUX0ZBSUxVUkVfVEhSRVNIT0xELFxuICAgICAgICAgICAgaW5jbHVkZU9mZmxpbmU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBvcGVuRGVsZXRlQ29uZmlybSA9IHVzZUNhbGxiYWNrKChwbGF5Ym9vaykgPT4ge1xuICAgICAgICBzZXRTdGF0ZSh7IHBoYXNlOiAnY29uZmlybWluZy1kZWxldGUnLCBwbGF5Ym9vayB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBydW5TaW5nbGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgYXN5bmMgKHsgcHJvZHVjdElkLCBwbGF5Ym9vaywgcGFyc2VkLCBkZXZpY2UsIG92ZXJyaWRlcyB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWRldmljZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBiID0gY2xvbmVQbGF5Ym9vayhwYXJzZWQpO1xuICAgICAgICAgICAgcGIudGFyZ2V0LmRldmljZXMgPSBbZGV2aWNlLmRldmljZV07XG4gICAgICAgICAgICBwYi50YXJnZXQucHJvZHVjdCA9IHByb2R1Y3RJZDtcbiAgICAgICAgICAgIHBiLnRhcmdldC5ncm91cCA9IG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0ZXBDb3VudCA9IHBiLnN0ZXBzLmxlbmd0aDtcbiAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBwaGFzZTogJ3J1bm5pbmcnLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdzaW5nbGUnLFxuICAgICAgICAgICAgICAgIHBsYXlib29rLFxuICAgICAgICAgICAgICAgIGRldmljZSxcbiAgICAgICAgICAgICAgICBzdGVwQ291bnQsXG4gICAgICAgICAgICAgICAgc3RlcHNQcm9ncmVzczogbmV3IE1hcCgpLFxuICAgICAgICAgICAgICAgIHN0YXJ0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgICAgYWJvcnRSZWYuY3VycmVudCA9IGNvbnRyb2xsZXI7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJ1blBsYXlib29rKHBiLCBbZGV2aWNlXSwge1xuICAgICAgICAgICAgICAgICAgICBjb25jdXJyZW5jeTogMSxcbiAgICAgICAgICAgICAgICAgICAgZmFpbEZhc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyxcbiAgICAgICAgICAgICAgICAgICAgb25TdGVwU3RhcnQ6ICh7IHN0ZXBJbmRleCwgc3RlcCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZSgocHJldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2LnBoYXNlICE9PSAncnVubmluZycgfHwgcHJldi5tb2RlICE9PSAnc2luZ2xlJykgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IG5ldyBNYXAocHJldi5zdGVwc1Byb2dyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LnNldChzdGVwSW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHN0ZXBJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc3RlcC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2LCBzdGVwc1Byb2dyZXNzOiBuZXh0IH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25TdGVwRW5kOiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9rLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25NcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcmRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGl0Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldi5waGFzZSAhPT0gJ3J1bm5pbmcnIHx8IHByZXYubW9kZSAhPT0gJ3NpbmdsZScpIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBuZXcgTWFwKHByZXYuc3RlcHNQcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5zZXQoc3RlcEluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBzdGVwSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHN0ZXAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBvayA/ICdvaycgOiAnZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2LCBzdGVwc1Byb2dyZXNzOiBuZXh0IH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzWzBdO1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgcGhhc2U6ICdkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgICAgIHBsYXlib29rLFxuICAgICAgICAgICAgICAgICAgICBkZXZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgcGhhc2U6ICdkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgICAgIHBsYXlib29rLFxuICAgICAgICAgICAgICAgICAgICBkZXZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlOiBkZXZpY2UuZGV2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgYWJvcnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtdLFxuICAgICk7XG5cbiAgICBjb25zdCBydW5GbGVldCA9IHVzZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAoeyBwcm9kdWN0SWQsIHBsYXlib29rLCBwYXJzZWQsIGRldmljZXMsIG92ZXJyaWRlcywgYmF0Y2hTaXplLCBmYWlsdXJlVGhyZXNob2xkLCBpbmNsdWRlT2ZmbGluZSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWRldmljZXMgfHwgZGV2aWNlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgcGIgPSBjbG9uZVBsYXlib29rKHBhcnNlZCk7XG4gICAgICAgICAgICBwYi50YXJnZXQuZGV2aWNlcyA9IG51bGw7XG4gICAgICAgICAgICBwYi50YXJnZXQucHJvZHVjdCA9IHByb2R1Y3RJZDtcblxuICAgICAgICAgICAgY29uc3Qgc3RhcnRlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHBoYXNlOiAncnVubmluZycsXG4gICAgICAgICAgICAgICAgbW9kZTogJ2ZsZWV0JyxcbiAgICAgICAgICAgICAgICBwbGF5Ym9vayxcbiAgICAgICAgICAgICAgICBkZXZpY2VDb3VudDogZGV2aWNlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgYmF0Y2hTaXplLFxuICAgICAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgYmF0Y2hlczogW10sXG4gICAgICAgICAgICAgICAgcGVyRGV2aWNlOiBuZXcgTWFwKCksXG4gICAgICAgICAgICAgICAgc3VtbWFyeTogeyBhdHRlbXB0ZWQ6IDAsIHN1Y2NlZWRlZDogMCwgZmFpbGVkOiAwLCBmYWlsdXJlUmF0ZTogMCB9LFxuICAgICAgICAgICAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgICAgYWJvcnRSZWYuY3VycmVudCA9IGNvbnRyb2xsZXI7XG5cbiAgICAgICAgICAgIGxldCBvdXRjb21lO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvdXRjb21lID0gYXdhaXQgcnVuRmxlZXRQbGF5Ym9vayhwYiwgZGV2aWNlcywge1xuICAgICAgICAgICAgICAgICAgICBiYXRjaFNpemUsXG4gICAgICAgICAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgb25CYXRjaFN0YXJ0OiAoaW5mbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldi5waGFzZSAhPT0gJ3J1bm5pbmcnIHx8IHByZXYubW9kZSAhPT0gJ2ZsZWV0JykgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJhdGNoOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5mby5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IGluZm8uc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0SW5kZXg6IGluZm8uZmlyc3RJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZUlkczogaW5mby5kZXZpY2VJZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uQmF0Y2hFbmQ6ICh7IGluZGV4LCBzaXplLCBmaXJzdEluZGV4LCBkZXZpY2VJZHMsIHJlc3VsdHMsIGN1bXVsYXRpdmUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldi5waGFzZSAhPT0gJ3J1bm5pbmcnIHx8IHByZXYubW9kZSAhPT0gJ2ZsZWV0JykgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2sgPSByZXN1bHRzLmZpbHRlcigocikgPT4gcj8ub2spLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmYWlsZWQgPSByZXN1bHRzLmxlbmd0aCAtIG9rO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhdGNoZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXYuYmF0Y2hlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpbmRleCwgc2l6ZSwgZmlyc3RJbmRleCwgZGV2aWNlSWRzLCBvaywgZmFpbGVkIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QmF0Y2g6IHsgLi4ucHJldi5jdXJyZW50QmF0Y2gsIHN0YXR1czogJ2RvbmUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRlZDogY3VtdWxhdGl2ZS5hdHRlbXB0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IGN1bXVsYXRpdmUuc3VjY2VlZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkOiBjdW11bGF0aXZlLmZhaWxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVSYXRlOiBjdW11bGF0aXZlLmZhaWx1cmVSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25EZXZpY2VSZXN1bHQ6IChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZSgocHJldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2LnBoYXNlICE9PSAncnVubmluZycgfHwgcHJldi5tb2RlICE9PSAnZmxlZXQnKSByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gbmV3IE1hcChwcmV2LnBlckRldmljZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5zZXQoci5kZXZpY2UsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlOiByLmRldmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2s6ICEhci5vayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZDogISFyLnNraXBwZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiByLmVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwQ291bnQ6IEFycmF5LmlzQXJyYXkoci5zdGVwcykgPyByLnN0ZXBzLmxlbmd0aCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldiwgcGVyRGV2aWNlOiBuZXh0IH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgcGhhc2U6ICdkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogJ2ZsZWV0JyxcbiAgICAgICAgICAgICAgICAgICAgcGxheWJvb2ssXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogZXJyPy5tZXNzYWdlIHx8IFN0cmluZyhlcnIpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogeyBhdHRlbXB0ZWQ6IDAsIHN1Y2NlZWRlZDogMCwgZmFpbGVkOiAwLCBmYWlsdXJlUmF0ZTogMCB9LFxuICAgICAgICAgICAgICAgICAgICBiYXRjaGVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhYm9ydFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhYm9ydFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGZpbmlzaGVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIC8vIFBlcnNpc3QgYSBydW4gcmVwb3J0IChiZXN0IGVmZm9ydCkuXG4gICAgICAgICAgICBsZXQgdXNlcm5hbWUgPSBudWxsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB1c2VybmFtZSA9IHJlYWRDb25maWcoKT8udXNlcm5hbWUgfHwgbnVsbDtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHVzZXJuYW1lID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydCA9IGJ1aWxkUnVuUmVwb3J0KHtcbiAgICAgICAgICAgICAgICBwcm9kdWN0SWQsXG4gICAgICAgICAgICAgICAgbmFtZTogcGxheWJvb2submFtZSxcbiAgICAgICAgICAgICAgICBwYXJzZWQsXG4gICAgICAgICAgICAgICAgdXNlcjogdXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgc3RhcnRlZEF0LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkQXQsXG4gICAgICAgICAgICAgICAgYmF0Y2hTaXplLFxuICAgICAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgaW5jbHVkZU9mZmxpbmU6ICEhaW5jbHVkZU9mZmxpbmUsXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRWYXJzOiBvdmVycmlkZXMgfHwge30sXG4gICAgICAgICAgICAgICAgb3V0Y29tZSxcbiAgICAgICAgICAgICAgICB0b3RhbERldmljZXM6IGRldmljZXMubGVuZ3RoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgcmVwb3J0VXBsb2FkID0gbnVsbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVwb3J0VXBsb2FkID0gYXdhaXQgdXBsb2FkRmxlZXRSdW5SZXBvcnQoeyBwcm9kdWN0OiBwcm9kdWN0SWQsIHJlcG9ydCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJlcG9ydFVwbG9hZCA9IHsgb2s6IGZhbHNlLCByZWFzb246IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgcGhhc2U6ICdkb25lJyxcbiAgICAgICAgICAgICAgICBtb2RlOiAnZmxlZXQnLFxuICAgICAgICAgICAgICAgIHBsYXlib29rLFxuICAgICAgICAgICAgICAgIHRvdGFsRGV2aWNlczogZGV2aWNlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgYmF0Y2hTaXplLFxuICAgICAgICAgICAgICAgIGZhaWx1cmVUaHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgcmVzdWx0czogb3V0Y29tZS5yZXN1bHRzLFxuICAgICAgICAgICAgICAgIHN1bW1hcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdGVkOiBvdXRjb21lLmF0dGVtcHRlZCxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiBvdXRjb21lLnN1Y2NlZWRlZCxcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkOiBvdXRjb21lLmZhaWxlZCxcbiAgICAgICAgICAgICAgICAgICAgZmFpbHVyZVJhdGU6IG91dGNvbWUuZmFpbHVyZVJhdGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiYXRjaGVzOiBvdXRjb21lLmJhdGNoZXMsXG4gICAgICAgICAgICAgICAgYWJvcnRlZDogb3V0Y29tZS5hYm9ydGVkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogb3V0Y29tZS5yZWFzb24sXG4gICAgICAgICAgICAgICAgcmVwb3J0VXBsb2FkLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW10sXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc21pc3NEb25lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBzZXRTdGF0ZSh7IHBoYXNlOiAnaWRsZScgfSk7XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHN0YXJ0U2luZ2xlVmFycyxcbiAgICAgICAgc3RhcnRGbGVldFZhcnMsXG4gICAgICAgIG9wZW5EZWxldGVDb25maXJtLFxuICAgICAgICBjYW5jZWxGbG93LFxuICAgICAgICBjYW5jZWxSdW5uaW5nLFxuICAgICAgICBydW5TaW5nbGUsXG4gICAgICAgIHJ1bkZsZWV0LFxuICAgICAgICBkaXNtaXNzRG9uZSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZVBsYXlib29rKHBiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucGIsXG4gICAgICAgIHRhcmdldDogeyAuLi4ocGIudGFyZ2V0IHx8IHt9KSB9LFxuICAgICAgICB2YXJzOiB7IC4uLihwYi52YXJzIHx8IHt9KSB9LFxuICAgICAgICB2YXJpYWJsZXM6IEFycmF5LmlzQXJyYXkocGIudmFyaWFibGVzKSA/IHBiLnZhcmlhYmxlcy5tYXAoKHYpID0+ICh7IC4uLnYgfSkpIDogW10sXG4gICAgICAgIHN0ZXBzOiBBcnJheS5pc0FycmF5KHBiLnN0ZXBzKSA/IHBiLnN0ZXBzLm1hcCgocykgPT4gKHsgLi4ucyB9KSkgOiBbXSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFJ1blJlcG9ydCh7XG4gICAgcHJvZHVjdElkLFxuICAgIG5hbWUsXG4gICAgcGFyc2VkLFxuICAgIHVzZXIsXG4gICAgc3RhcnRlZEF0LFxuICAgIGZpbmlzaGVkQXQsXG4gICAgYmF0Y2hTaXplLFxuICAgIGZhaWx1cmVUaHJlc2hvbGQsXG4gICAgaW5jbHVkZU9mZmxpbmUsXG4gICAgcmVzb2x2ZWRWYXJzLFxuICAgIG91dGNvbWUsXG4gICAgdG90YWxEZXZpY2VzLFxufSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb2R1Y3Q6IHByb2R1Y3RJZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdXNlcixcbiAgICAgICAgc3RhcnRlZEF0LFxuICAgICAgICBmaW5pc2hlZEF0LFxuICAgICAgICBkdXJhdGlvbk1zOiBuZXcgRGF0ZShmaW5pc2hlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShzdGFydGVkQXQpLmdldFRpbWUoKSxcbiAgICAgICAgbW9kZTogJ2FwcGx5JyxcbiAgICAgICAgcGxheWJvb2s6IHtcbiAgICAgICAgICAgIG5hbWU6IHBhcnNlZD8ubmFtZSB8fCBudWxsLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHBhcnNlZD8uZGVzY3JpcHRpb24gfHwgbnVsbCxcbiAgICAgICAgICAgIHN0ZXBzOiBwYXJzZWQ/LnN0ZXBzPy5sZW5ndGggfHwgMCxcbiAgICAgICAgfSxcbiAgICAgICAgcm9sbG91dDoge1xuICAgICAgICAgICAgYmF0Y2hTaXplLFxuICAgICAgICAgICAgZmFpbHVyZVRocmVzaG9sZCxcbiAgICAgICAgICAgIGZpbHRlcnM6IG51bGwsXG4gICAgICAgICAgICBncm91cDogbnVsbCxcbiAgICAgICAgICAgIGluY2x1ZGVPZmZsaW5lOiAhIWluY2x1ZGVPZmZsaW5lLFxuICAgICAgICAgICAgc291cmNlOiAnZGFzaGJvYXJkJyxcbiAgICAgICAgfSxcbiAgICAgICAgdmFyczogcmVzb2x2ZWRWYXJzLFxuICAgICAgICBzdW1tYXJ5OiB7XG4gICAgICAgICAgICBhdHRlbXB0ZWQ6IG91dGNvbWUuYXR0ZW1wdGVkLFxuICAgICAgICAgICAgc3VjY2VlZGVkOiBvdXRjb21lLnN1Y2NlZWRlZCxcbiAgICAgICAgICAgIGZhaWxlZDogb3V0Y29tZS5mYWlsZWQsXG4gICAgICAgICAgICBmYWlsdXJlUmF0ZTogb3V0Y29tZS5mYWlsdXJlUmF0ZSxcbiAgICAgICAgICAgIHRvdGFsOiB0b3RhbERldmljZXMsXG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0ZWQ6ICEhb3V0Y29tZS5hYm9ydGVkLFxuICAgICAgICByZWFzb246IG91dGNvbWUucmVhc29uIHx8IG51bGwsXG4gICAgICAgIGJhdGNoZXM6IG91dGNvbWUuYmF0Y2hlcyxcbiAgICAgICAgZGV2aWNlczogb3V0Y29tZS5yZXN1bHRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgICAgIGRldmljZTogcj8uZGV2aWNlLFxuICAgICAgICAgICAgb2s6ICEhcj8ub2ssXG4gICAgICAgICAgICBza2lwcGVkOiAhIXI/LnNraXBwZWQsXG4gICAgICAgICAgICBlcnJvcjogcj8uZXJyb3IgfHwgbnVsbCxcbiAgICAgICAgICAgIHN0ZXBzOiBBcnJheS5pc0FycmF5KHI/LnN0ZXBzKVxuICAgICAgICAgICAgICAgID8gci5zdGVwcy5tYXAoKHMpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHMuaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogcy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIG9rOiAhIXMub2ssXG4gICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZDogISFzLnNraXBwZWQsXG4gICAgICAgICAgICAgICAgICAgICAgdmVyZGljdDogcy52ZXJkaWN0IHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogcy5zdW1tYXJ5LFxuICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uTXM6IHMuZHVyYXRpb25NcyxcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogcy5lcnJvciB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgfSkpLFxuICAgIH07XG59XG4iLCAiaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICcuLi9saWIvZm9jdXMuanMnO1xuXG5jb25zdCBQQUdFID0gMTI7XG5cbmNvbnN0IEhJTlQgPSBbXG4gICAgeyBrOiAnXHUyMTkxXHUyMTkzJywgbGFiZWw6ICdtb3ZlJyB9LFxuICAgIHsgazogJ2VudGVyJywgbGFiZWw6ICdwaWNrJyB9LFxuICAgIHsgazogJ2VzYycsIGxhYmVsOiAnY2FuY2VsJyB9LFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIFByb2ZpbGVQaWNrZXJNb2RhbCh7IHByb2ZpbGVzLCBhY3RpdmUsIG9uU2VsZWN0LCBvbkNhbmNlbCB9KSB7XG4gICAgY29uc3Qgc29ydGVkID0gdXNlTWVtbygoKSA9PiBbLi4uKHByb2ZpbGVzIHx8IFtdKV0uc29ydCgpLCBbcHJvZmlsZXNdKTtcbiAgICBjb25zdCBpbml0aWFsQ3Vyc29yID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBzb3J0ZWQuaW5kZXhPZihhY3RpdmUpO1xuICAgICAgICByZXR1cm4gaSA+PSAwID8gaSA6IDA7XG4gICAgfSwgW3NvcnRlZCwgYWN0aXZlXSk7XG4gICAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IHVzZVN0YXRlKGluaXRpYWxDdXJzb3IpO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlQ3Vyc29yID0gTWF0aC5taW4oY3Vyc29yLCBNYXRoLm1heCgwLCBzb3J0ZWQubGVuZ3RoIC0gMSkpO1xuICAgIGNvbnN0IHZpZXdTdGFydCA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICBNYXRoLm1pbihlZmZlY3RpdmVDdXJzb3IgLSBNYXRoLmZsb29yKFBBR0UgLyAyKSwgTWF0aC5tYXgoMCwgc29ydGVkLmxlbmd0aCAtIFBBR0UpKSxcbiAgICApO1xuICAgIGNvbnN0IHZpZXdTbGljZSA9IHNvcnRlZC5zbGljZSh2aWV3U3RhcnQsIHZpZXdTdGFydCArIFBBR0UpO1xuXG4gICAgdXNlTW9kYWwoXG4gICAgICAgIChpbnB1dCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5LmVzY2FwZSkge1xuICAgICAgICAgICAgICAgIG9uQ2FuY2VsPy4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoa2V5LnJldHVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2sgPSBzb3J0ZWRbZWZmZWN0aXZlQ3Vyc29yXTtcbiAgICAgICAgICAgICAgICBpZiAocGljayAmJiBwaWNrICE9PSBhY3RpdmUpIG9uU2VsZWN0Py4ocGljayk7XG4gICAgICAgICAgICAgICAgZWxzZSBvbkNhbmNlbD8uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleS51cEFycm93KSB7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBNYXRoLm1heCgwLCBjIC0gMSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkuZG93bkFycm93KSB7XG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKChjKSA9PiBNYXRoLm1pbihzb3J0ZWQubGVuZ3RoIC0gMSwgYyArIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBoaW50OiBISU5UIH0sXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxCb3hcbiAgICAgICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICAgICAgYm9yZGVyQ29sb3I9e3RoZW1lLmJvcmRlckZvY3VzfVxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yPXt0aGVtZS5vdmVybGF5Qmd9XG4gICAgICAgICAgICBwYWRkaW5nWD17Mn1cbiAgICAgICAgICAgIHBhZGRpbmdZPXsxfVxuICAgICAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgICAgICB3aWR0aD17NTZ9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luQm90dG9tPXsxfSBqdXN0aWZ5Q29udGVudD1cInNwYWNlLWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuYWNjZW50fSBib2xkPlxuICAgICAgICAgICAgICAgICAgICBTV0lUQ0ggUFJPRklMRVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19Pntzb3J0ZWQubGVuZ3RofTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuXG4gICAgICAgICAgICB7c29ydGVkLmxlbmd0aCA9PT0gMCAmJiA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+bm8gcHJvZmlsZXM8L1RleHQ+fVxuICAgICAgICAgICAge3ZpZXdTbGljZS5tYXAoKG5hbWUsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnNJZHggPSB2aWV3U3RhcnQgKyBpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRm9jdXNlZCA9IGFic0lkeCA9PT0gZWZmZWN0aXZlQ3Vyc29yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gbmFtZSA9PT0gYWN0aXZlO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxCb3gga2V5PXtuYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggd2lkdGg9ezJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXtpc0ZvY3VzZWQgPyB0aGVtZS5hY2NlbnQgOiB0aGVtZS5mZ0ZhaW50fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzRm9jdXNlZCA/ICdcdTI1QjYnIDogJyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCB3aWR0aD17Mn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e2lzQWN0aXZlID8gdGhlbWUubGltZSA6IHRoZW1lLmZnRmFpbnR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNBY3RpdmUgPyAnXHUyNUNGJyA6ICdcdTI1Q0InfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBmbGV4R3Jvdz17MX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2lzRm9jdXNlZCA/IHRoZW1lLmZnIDogdGhlbWUuZmdEaW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvbGQ9e2lzRm9jdXNlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD1cInRydW5jYXRlLWVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzQWN0aXZlID8gJyAgKGFjdGl2ZSknIDogJyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgPEJveCBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+XHUyMTkxXHUyMTkzIG1vdmUgXHUwMEI3IGVudGVyIHBpY2sgXHUwMEI3IGVzYyBjYW5jZWw8L1RleHQ+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9Cb3g+XG4gICAgKTtcbn1cbiIsICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ2V0RGV2aWNlcyB9IGZyb20gJ0B0aGluZ2VyLWlvL2NsaS1jb3JlL2RldmljZXMnO1xuaW1wb3J0IHsgZGVidWdDb3VudCwgZGVidWdMb2cgfSBmcm9tICcuLi8uLi8uLi9saWIvZGVidWctbG9nLmpzJztcblxuLy8gQ29ubmVjdC9kaXNjb25uZWN0IHJpZGUgdGhlIFdTIHZpYSBgZGV2aWNlX3N0YXRlX2NoYW5nZWAsIHNvIHRoaXMgcG9sbFxuLy8gb25seSBleGlzdHMgdG8gY2F0Y2ggZmxlZXQgbWVtYmVyc2hpcCBjaGFuZ2VzIChhZGRlZCBvciByZW1vdmVkXG4vLyBkZXZpY2VzKS4gVGhvc2UgYXJlIHJhcmUgZXZlbnRzOyBvbmNlIGEgbWludXRlIGlzIHBsZW50eS5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEZXZpY2VzKHsgcG9sbE1zID0gNjBfMDAwIH0gPSB7fSkge1xuICAgIGNvbnN0IFtkZXZpY2VzLCBzZXREZXZpY2VzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgICAgICAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBkZWJ1Z0NvdW50KCdodHRwOmRldmljZXMnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IGdldERldmljZXMoe30pO1xuICAgICAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOmRldmljZXMnLCAnZW5kJywge1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogRGF0ZS5ub3coKSAtIHQwLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDogbGlzdD8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldERldmljZXMobGlzdCk7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6ZGV2aWNlcycsICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGU/Lm1lc3NhZ2UgfHwgU3RyaW5nKGUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbG9hZCgpO1xuICAgICAgICBjb25zdCBpZCA9IHNldEludGVydmFsKGxvYWQsIHBvbGxNcyk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH07XG4gICAgfSwgW3BvbGxNc10pO1xuXG4gICAgcmV0dXJuIHsgZGV2aWNlcywgZXJyb3IsIGxvYWRpbmcgfTtcbn1cbiIsICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ2V0TW9uaXRvcmluZ0RhdGEgfSBmcm9tICcuLi8uLi8uLi9saWIvbW9uaXRvcmluZy5qcyc7XG5pbXBvcnQgeyBkZWJ1Z0xvZyB9IGZyb20gJy4uLy4uLy4uL2xpYi9kZWJ1Zy1sb2cuanMnO1xuaW1wb3J0IHsgZXZlbnRTdHJlYW0gfSBmcm9tICcuLi8uLi8uLi9saWIvZGFzaGJvYXJkL2V2ZW50LXN0cmVhbS5qcyc7XG5cbi8vIEZsZWV0LXdpZGUgbW9uaXRvcmluZyArIGNvbm5lY3Rpb24gZXZlbnRzIGRyaXZlbiBieSB0aGUgdXNlci1sZXZlbFxuLy8gL3YyLy4uLi9ldmVudHMgd2Vic29ja2V0LiBBIHNpbmdsZSBwZXJzaXN0ZW50IHNvY2tldCBjYXJyaWVzIHR3b1xuLy8gc3Vic2NyaXB0aW9uczpcbi8vICAgLSBgYnVja2V0X3dyaXRlYCBmaWx0ZXJlZCBieSBgYnVja2V0OiBtb25pdG9yaW5nYCBcdTIxOTIgcGVyLWRldmljZSBzYW1wbGVcbi8vICAgLSBgZGV2aWNlX3N0YXRlX2NoYW5nZWAgdW5maWx0ZXJlZCBcdTIxOTIgY29ubmVjdC9kaXNjb25uZWN0L3NsZWVwIGV2ZW50c1xuLy8gQSBSRVNUIHNuYXBzaG90IHJ1bnMgYXQgc3RhcnR1cCBzbyB0aGUgVUkgaGFzIGEgYmFzZWxpbmUgYmVmb3JlIHRoZSBmaXJzdFxuLy8gbGl2ZSBmcmFtZSBhcnJpdmVzICh0aGUgZXZlbnQgc3RyZWFtIGhhcyBubyBiYWNrZmlsbCBzZW1hbnRpY3MpLlxuLy9cbi8vIEZyYW1lIHNoYXBlcyAob2JzZXJ2ZWQgb24gdGhpbmdlci50aGluci5pbyk6XG4vLyAgIGJ1Y2tldF93cml0ZTogICAgICAgIHsgZXZlbnQsIHVzZXIsIGJ1Y2tldCwgdHMsIGRhdGE6IHsgZGV2aWNlLCBjcHUsXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LCBkaXNrLCBsb2FkLCBuZXR3b3JrLCBhZ2VudCwgLi4uIH0gfVxuLy8gICBkZXZpY2Vfc3RhdGVfY2hhbmdlOiB7IGV2ZW50LCB1c2VyLCB0cywgZGV2aWNlLCBwcm9kdWN0Pywgc3RhdGUgfVxuLy8gICBzdGF0ZSBcdTIyMDggY29ubmVjdGVkIHwgZGlzY29ubmVjdGVkIHwgcmVzdW1lZCB8IGF3YWtlIHwgYXNsZWVwXG5cbi8vIExhc3QgMzAgbWludXRlcyBvZiBwZXItZGV2aWNlIENQVSBoaXN0b3J5IChvbmUgcG9pbnQgcGVyIG1pbnV0ZSwgc2luY2Vcbi8vIGFnZW50cyBwdWJsaXNoIGF0IHRoYXQgY2FkZW5jZSkuIEtlZXBzIHRoZSBwZXItZGV2aWNlIHNwYXJrbGluZXMgYW5kXG4vLyB0aGUgcm9sbGluZyBmbGVldC13aWRlIGNoYXJ0IG9uIGEgY2xlYW4gaGFsZi1ob3VyIHdpbmRvdy5cbmNvbnN0IEhJU1RPUlkgPSAzMDtcbmNvbnN0IEJVQ0tFVCA9ICdtb25pdG9yaW5nJztcbmNvbnN0IEJBU0VMSU5FX0lURU1TID0gNTAwOyAvLyBjYXAgb24gZGV2aWNlcyByZXR1cm5lZCBpbiB0aGUgb25lLXNob3Qgc25hcHNob3QuXG4vLyBGaWVsZHMgcHVsbGVkIG9uIGJhc2VsaW5lLiBUaGUgc2VydmVyIGRyb3BzIHJvd3Mgd2hlcmUgYW55IG9mIHRoZXNlIGlzXG4vLyBudWxsLCBzbyBrZWVwIHRvIHVuaXZlcnNhbCBhZ2VudCBtZXRyaWNzIFx1MjAxNCBhbnl0aGluZyBwbGF0Zm9ybS1zcGVjaWZpY1xuLy8gKHRlbXBlcmF0dXJlLCBuZXR3b3JrIHJhdGVzLCBldGMuKSBjb21lcyB2aWEgdGhlIFdTIHN0cmVhbS4gTWVtb3J5L2Rpc2tcbi8vIHRvdGFscyBhbmQgY3B1LmNvcmVzIGFyZSBzdGFibGUgYWNyb3NzIGFsbCBhZ2VudHMsIHNvIHRoZXkgbGl2ZSBoZXJlIHNvXG4vLyB0aGUgcGVyLWRldmljZSBkZXRhaWwgdGFiIGhhcyB0aGVtIG9uIGZpcnN0IHBhaW50IGluc3RlYWQgb2Ygd2FpdGluZyB1cFxuLy8gdG8gYSBtaW51dGUgZm9yIHRoZSBuZXh0IFdTIHNhbXBsZS5cbmNvbnN0IEJBU0VMSU5FX0ZJRUxEUyA9XG4gICAgJ2NwdS51c2FnZSxjcHUuY29yZXMsbWVtb3J5LnVzYWdlLG1lbW9yeS50b3RhbCxtZW1vcnkuYXZhaWxhYmxlLG1lbW9yeS5zd2FwLnVzYWdlLG1lbW9yeS5zd2FwLnRvdGFsLG1lbW9yeS5zd2FwLmZyZWUsZGlzay5yb290LnVzYWdlLGRpc2sucm9vdC50b3RhbCxkaXNrLnJvb3QuYXZhaWxhYmxlLHVwdGltZSxhZ2VudC52ZXJzaW9uJztcbi8vIEJvdW5kIHRoZSBiYXNlbGluZSB0byByZWNlbnQgc2FtcGxlcy4gV2l0aG91dCBhIHRpbWUgcmFuZ2UgdGhlIE1vbmdvXG4vLyBgZ3JvdXBfYnk9ZGV2aWNlYCBwaXBlbGluZSBkb2VzIGEgJHNvcnQgb3ZlciB0aGUgd2hvbGUgYnVja2V0IGhpc3Rvcnlcbi8vIGJlZm9yZSAkZ3JvdXAvJGZpcnN0LCB3aGljaCBzY2FsZXMgbGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mIGZpZWxkc1xuLy8gYW5kIHRyaXBzIHRoZSAxMHMgZ2F0ZXdheSB0aW1lb3V0IG9uY2Ugd2UgYXNrIGZvciB+NSBmaWVsZHMuIEFnZW50c1xuLy8gcHVibGlzaCBldmVyeSBtaW51dGUsIHNvIGEgZml2ZS1taW51dGUgd2luZG93IGd1YXJhbnRlZXMgd2UgY2F0Y2hcbi8vIGV2ZXJ5IGFjdGl2ZSBkZXZpY2Ugd2hpbGUga2VlcGluZyB0aGUgc2VydmVyLXNpZGUgc29ydCB0aW55LlxuY29uc3QgQkFTRUxJTkVfV0lORE9XX01JTiA9IDU7XG5jb25zdCBGTFVTSF9NUyA9IDQwMDsgLy8gY29hbGVzY2UgYnVyc3RzIG9mIHdyaXRlcyBiZWZvcmUgcmUtcmVuZGVyaW5nLlxuY29uc3QgTUFYX0VWRU5UUyA9IDgwO1xuXG5mdW5jdGlvbiB0c1N0cih0cykge1xuICAgIGNvbnN0IGQgPSB0cyA/IG5ldyBEYXRlKE51bWJlcih0cykpIDogbmV3IERhdGUoKTtcbiAgICByZXR1cm4gZC50b1RpbWVTdHJpbmcoKS5zbGljZSgwLCA4KTtcbn1cblxuZnVuY3Rpb24gbWFwU3RhdGUoc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUgPT09ICdjb25uZWN0ZWQnKSByZXR1cm4geyBraW5kOiAnam9pbicsIG1zZzogJ2Nvbm5lY3RlZCcgfTtcbiAgICBpZiAoc3RhdGUgPT09ICdkaXNjb25uZWN0ZWQnKSByZXR1cm4geyBraW5kOiAnbGVhdmUnLCBtc2c6ICdkaXNjb25uZWN0ZWQnIH07XG4gICAgaWYgKHN0YXRlID09PSAncmVzdW1lZCcpIHJldHVybiB7IGtpbmQ6ICdpbmZvJywgbXNnOiAncmVzdW1lZCcgfTtcbiAgICBpZiAoc3RhdGUgPT09ICdhd2FrZScpIHJldHVybiB7IGtpbmQ6ICdpbmZvJywgbXNnOiAnYXdha2UnIH07XG4gICAgaWYgKHN0YXRlID09PSAnYXNsZWVwJykgcmV0dXJuIHsga2luZDogJ2luZm8nLCBtc2c6ICdhc2xlZXAnIH07XG4gICAgcmV0dXJuIHsga2luZDogJ2luZm8nLCBtc2c6IHN0YXRlIHx8ICdzdGF0ZScgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUZsZWV0TW9uaXRvcmluZ1N0cmVhbShkZXZpY2VzKSB7XG4gICAgY29uc3QgW3NhbXBsZXMsIHNldFNhbXBsZXNdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtoaXN0b3J5LCBzZXRIaXN0b3J5XSA9IHVzZVN0YXRlKHsgY3B1OiBbXSwgbWVtOiBbXSwgZGlzazogW10gfSk7XG4gICAgY29uc3QgW2NwdUhpc3RvcnksIHNldENwdUhpc3RvcnldID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtldmVudHMsIHNldEV2ZW50c10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3N0YXR1cywgc2V0U3RhdHVzXSA9IHVzZVN0YXRlKCdpZGxlJyk7XG5cbiAgICBjb25zdCBzYW1wbGVzUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCBoaXN0b3J5UmVmID0gdXNlUmVmKHsgY3B1OiBbXSwgbWVtOiBbXSwgZGlzazogW10gfSk7XG4gICAgY29uc3QgY3B1SGlzdG9yeVJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgcGVuZGluZ1JlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgZmx1c2hUaW1lclJlZiA9IHVzZVJlZihudWxsKTtcblxuICAgIC8vIEtleSB1c2VkIHRvIGF2b2lkIHJlLWZldGNoaW5nIFJFU1QgYmFzZWxpbmUgaWYgdGhlIGRldmljZSBzZXQgZGlkbid0XG4gICAgLy8gY2hhbmdlIFx1MjAxNCB1c2VEZXZpY2VzIHBvbGxzIGV2ZXJ5IDE1cyBzbyB0aGUgYXJyYXkgcmVmZXJlbmNlIGZsaXBzIG9mdGVuLlxuICAgIGNvbnN0IG9ubGluZUtleSA9IGRldmljZXNcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gZC5jb25uZWN0aW9uPy5hY3RpdmUpXG4gICAgICAgIC5tYXAoKGQpID0+IGQuZGV2aWNlKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5qb2luKCcsJyk7XG5cbiAgICAvLyBIaXN0b3J5IHByZS1maWxsIFx1MjAxNCBwZXItbWludXRlIGF2ZXJhZ2VzIG92ZXIgdGhlIGxhc3QgNDAgbWludXRlcyBzb1xuICAgIC8vIHRoZSBwZXItZGV2aWNlIENQVSBzcGFya2xpbmVzIGhhdmUgc2hhcGUgb24gZGFzaGJvYXJkIG9wZW4gaW5zdGVhZFxuICAgIC8vIG9mIHN0YXJ0aW5nIGVtcHR5LiBUaGUgc2VydmVyJ3MgYGFnZyArIGdyb3VwX2J5YCBwYXRoIHNraXBzIHRoZVxuICAgIC8vIHByZS1ncm91cCBzb3J0IGVudGlyZWx5LCBzbyBpdCBzdGF5cyBmYXN0ICh+OTAwbXMgZm9yIDk5IGRldmljZXMpXG4gICAgLy8gZXZlbiB0aG91Z2ggdGhlIHRpbWUgcmFuZ2UgaXMgNDAgbWluIHdpZGUuIFdTIGZyYW1lcyB0YWtlIG92ZXIgb25cbiAgICAvLyB0b3Agb25jZSB0aGV5IHN0YXJ0IGFycml2aW5nLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHQwID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOmZsZWV0LWhpc3RvcnknLCAnc3RhcnQnLCB7IHdpbmRvd19taW46IEhJU1RPUlkgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRNb25pdG9yaW5nRGF0YSh7XG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM6IEhJU1RPUlksXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5OiAnZGV2aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgYWdnOiAnMW0nLFxuICAgICAgICAgICAgICAgICAgICBhZ2dfdHlwZTogJ2F2ZycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkczogJ2NwdS51c2FnZScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6ZmxlZXQtaGlzdG9yeScsICdlbmQnLCB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBEYXRlLm5vdygpIC0gdDAsXG4gICAgICAgICAgICAgICAgICAgIHJvd3M6IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhLmxlbmd0aCA6IDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCB8fCAhQXJyYXkuaXNBcnJheShkYXRhKSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5RGV2aWNlID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgciBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gci5kZXZpY2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gcj8uY3B1Py51c2FnZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHYpKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYnlEZXZpY2UuaGFzKGlkKSkgYnlEZXZpY2Uuc2V0KGlkLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIGJ5RGV2aWNlLmdldChpZCkucHVzaCh7IHRzOiBOdW1iZXIoci50cyksIHY6IE51bWJlcih2KSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4uY3B1SGlzdG9yeVJlZi5jdXJyZW50IH07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaWQsIHJvd3NdIG9mIGJ5RGV2aWNlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICByb3dzLnNvcnQoKGEsIGIpID0+IGEudHMgLSBiLnRzKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VyaWVzID0gcm93cy5zbGljZSgtSElTVE9SWSkubWFwKChyKSA9PiByLnYpO1xuICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBjbG9iYmVyIGEgc2VyaWVzIHRoZSBXUyBhbHJlYWR5IHBvcHVsYXRlZCBwYXN0XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoYXQgdGhlIGJhc2VsaW5lIGNhbiBvZmZlci5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0W2lkXSB8fCBuZXh0W2lkXS5sZW5ndGggPCBzZXJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0W2lkXSA9IHNlcmllcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjcHVIaXN0b3J5UmVmLmN1cnJlbnQgPSBuZXh0O1xuICAgICAgICAgICAgICAgIHNldENwdUhpc3RvcnkobmV4dCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpmbGVldC1oaXN0b3J5JywgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogRGF0ZS5ub3coKSAtIHQwLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyPy5tZXNzYWdlIHx8IFN0cmluZyhlcnIpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtdKTtcblxuICAgIC8vIFJFU1QgYmFzZWxpbmUgXHUyMDE0IG9uZSBzYW1wbGUgcGVyIG9ubGluZSBkZXZpY2Ugb24gZmlyc3QgYXBwZWFyYW5jZS5cbiAgICAvLyBTaW5nbGUgbXVsdGktZGV2aWNlIGNhbGw6IHdpdGggbm8gYGRldmljZWAgdGhlIGhlbHBlciBkZWZhdWx0cyB0b1xuICAgIC8vIGdyb3VwX2J5PWRldmljZSBhbmQgdGhlIHNlcnZlciByZXR1cm5zIHRoZSBsYXRlc3Qgc2FtcGxlIHBlciBkZXZpY2UuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgaWRzID0gb25saW5lS2V5ID8gb25saW5lS2V5LnNwbGl0KCcsJykgOiBbXTtcbiAgICAgICAgY29uc3QgbWlzc2luZyA9IGlkcy5maWx0ZXIoKGlkKSA9PiAhc2FtcGxlc1JlZi5jdXJyZW50W2lkXSk7XG4gICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpmbGVldC1iYXNlbGluZScsICdzdGFydCcsIHsgbWlzc2luZzogbWlzc2luZy5sZW5ndGggfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRNb25pdG9yaW5nRGF0YSh7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBCQVNFTElORV9JVEVNUyxcbiAgICAgICAgICAgICAgICAgICAgc29ydDogJ2Rlc2MnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IEJBU0VMSU5FX0ZJRUxEUyxcbiAgICAgICAgICAgICAgICAgICAgbWludXRlczogQkFTRUxJTkVfV0lORE9XX01JTixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpmbGVldC1iYXNlbGluZScsICdlbmQnLCB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBEYXRlLm5vdygpIC0gdDAsXG4gICAgICAgICAgICAgICAgICAgIHJvd3M6IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhLmxlbmd0aCA6IDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCB8fCAhQXJyYXkuaXNBcnJheShkYXRhKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pc3NpbmdTZXQgPSBuZXcgU2V0KG1pc3NpbmcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNhbXBsZSBvZiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gc2FtcGxlPy5kZXZpY2U7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaWQgfHwgIW1pc3NpbmdTZXQuaGFzKGlkKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZXNbaWRdID0gc2FtcGxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICAgICAgYXBwbHlVcGRhdGVzKHVwZGF0ZXMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6ZmxlZXQtYmFzZWxpbmUnLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX21zOiBEYXRlLm5vdygpIC0gdDAsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnI/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVyciksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gQmFzZWxpbmUgaXMgYmVzdC1lZmZvcnQ7IHRoZSBXUyBzdHJlYW0gd2lsbCBmaWxsIHNhbXBsZXMgaW4uXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW29ubGluZUtleV0pO1xuXG4gICAgLy8gU3Vic2NyaWJlIHZpYSB0aGUgc2hhcmVkIGV2ZW50IHN0cmVhbS4gV2UgZG9uJ3Qgb3duIHRoZSBzb2NrZXQ7XG4gICAgLy8gdGhlIHNpbmdsZXRvbiBtdWx0aXBsZXhlcyBmbGVldCBtb25pdG9yaW5nIHdpdGggcHJvZHVjdCBtZXRyaWNzXG4gICAgLy8gc28gZGFzaGJvYXJkIGxvYWQgPSAxIFdTLCBub3QgTi5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBldmVudFN0cmVhbS5jb25uZWN0KCk7XG4gICAgICAgIHNldFN0YXR1cygnY29ubmVjdGluZycpO1xuXG4gICAgICAgIGNvbnN0IG9mZkJ1Y2tldCA9IGV2ZW50U3RyZWFtLm9uKCdidWNrZXRfd3JpdGUnLCAoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBmcmFtZS5kYXRhO1xuICAgICAgICAgICAgY29uc3QgaWQgPSBkYXRhPy5kZXZpY2U7XG4gICAgICAgICAgICBpZiAoIWlkIHx8ICFkYXRhKSByZXR1cm47XG4gICAgICAgICAgICBwZW5kaW5nUmVmLmN1cnJlbnRbaWRdID0gZGF0YTtcbiAgICAgICAgICAgIGlmIChmbHVzaFRpbWVyUmVmLmN1cnJlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZsdXNoVGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoZmx1c2gsIEZMVVNIX01TKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9mZlN0YXRlID0gZXZlbnRTdHJlYW0ub24oJ2RldmljZV9zdGF0ZV9jaGFuZ2UnLCAoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZnJhbWUuZGV2aWNlO1xuICAgICAgICAgICAgaWYgKCFpZCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gbWFwU3RhdGUoZnJhbWUuc3RhdGUpO1xuICAgICAgICAgICAgY29uc3QgZXYgPSB7XG4gICAgICAgICAgICAgICAgdDogdHNTdHIoZnJhbWUudHMpLFxuICAgICAgICAgICAgICAgIGtpbmQ6IG1hcHBlZC5raW5kLFxuICAgICAgICAgICAgICAgIGRldjogaWQsXG4gICAgICAgICAgICAgICAgbXNnOiBtYXBwZWQubXNnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNldEV2ZW50cygoY3VyKSA9PiBbZXYsIC4uLmN1cl0uc2xpY2UoMCwgTUFYX0VWRU5UUykpO1xuICAgICAgICB9KTtcblxuICAgICAgICBldmVudFN0cmVhbS5zdWJzY3JpYmUoeyBldmVudDogJ2J1Y2tldF93cml0ZScsIGZpbHRlcnM6IHsgYnVja2V0OiBCVUNLRVQgfSB9KTtcbiAgICAgICAgZXZlbnRTdHJlYW0uc3Vic2NyaWJlKHsgZXZlbnQ6ICdkZXZpY2Vfc3RhdGVfY2hhbmdlJyB9KTtcbiAgICAgICAgLy8gU3VyZmFjZSBhIGNvYXJzZSBzdGF0dXMgXHUyMDE0IHRoZSBzaW5nbGV0b24gaGFuZGxlcyB0aGVcbiAgICAgICAgLy8gb3Blbi9jbG9zZS9yZXRyeSBsaWZlY3ljbGUgaW50ZXJuYWxseS5cbiAgICAgICAgc2V0U3RhdHVzKCdvcGVuJyk7XG4gICAgICAgIGRlYnVnTG9nKCd3czpmbGVldCcsICdzdWJzY3JpYmVkLXZpYS1zaGFyZWQtc3RyZWFtJyk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIG9mZkJ1Y2tldCgpO1xuICAgICAgICAgICAgb2ZmU3RhdGUoKTtcbiAgICAgICAgICAgIGlmIChmbHVzaFRpbWVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZmx1c2hUaW1lclJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgICAgICBmbHVzaFRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRTdHJlYW0uZGlzY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgICBmbHVzaFRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBjb25zdCB1cGRhdGVzID0gcGVuZGluZ1JlZi5jdXJyZW50O1xuICAgICAgICBwZW5kaW5nUmVmLmN1cnJlbnQgPSB7fTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVwZGF0ZXMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBhcHBseVVwZGF0ZXModXBkYXRlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHlVcGRhdGVzKHVwZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4uc2FtcGxlc1JlZi5jdXJyZW50LCAuLi51cGRhdGVzIH07XG4gICAgICAgIHNhbXBsZXNSZWYuY3VycmVudCA9IG5leHQ7XG4gICAgICAgIHNldFNhbXBsZXMobmV4dCk7XG4gICAgICAgIHB1c2hEZXZpY2VDcHUodXBkYXRlcyk7XG4gICAgICAgIHB1c2hIaXN0b3J5KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaERldmljZUNwdSh1cGRhdGVzKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLmNwdUhpc3RvcnlSZWYuY3VycmVudCB9O1xuICAgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgc10gb2YgT2JqZWN0LmVudHJpZXModXBkYXRlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBzPy5jcHU/LnVzYWdlO1xuICAgICAgICAgICAgaWYgKHYgPT0gbnVsbCB8fCAhTnVtYmVyLmlzRmluaXRlKE51bWJlcih2KSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgYXJyID0gbmV4dFtpZF0gPyBuZXh0W2lkXS5zbGljZSgpIDogW107XG4gICAgICAgICAgICBhcnIucHVzaChOdW1iZXIodikpO1xuICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPiBISVNUT1JZKSBhcnIuc3BsaWNlKDAsIGFyci5sZW5ndGggLSBISVNUT1JZKTtcbiAgICAgICAgICAgIG5leHRbaWRdID0gYXJyO1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGFuZ2VkKSByZXR1cm47XG4gICAgICAgIGNwdUhpc3RvcnlSZWYuY3VycmVudCA9IG5leHQ7XG4gICAgICAgIHNldENwdUhpc3RvcnkobmV4dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaEhpc3RvcnkoKSB7XG4gICAgICAgIGxldCBjcHUgPSAwLFxuICAgICAgICAgICAgbWVtID0gMCxcbiAgICAgICAgICAgIGRpc2sgPSAwO1xuICAgICAgICBsZXQgY24gPSAwLFxuICAgICAgICAgICAgbW4gPSAwLFxuICAgICAgICAgICAgZG4gPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHMgb2YgT2JqZWN0LnZhbHVlcyhzYW1wbGVzUmVmLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICBpZiAocy5jcHU/LnVzYWdlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjcHUgKz0gTnVtYmVyKHMuY3B1LnVzYWdlKTtcbiAgICAgICAgICAgICAgICBjbisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMubWVtb3J5Py51c2FnZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbWVtICs9IE51bWJlcihzLm1lbW9yeS51c2FnZSk7XG4gICAgICAgICAgICAgICAgbW4rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzLmRpc2s/LnJvb3Q/LnVzYWdlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkaXNrICs9IE51bWJlcihzLmRpc2sucm9vdC51c2FnZSk7XG4gICAgICAgICAgICAgICAgZG4rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdXNoID0gKGFyciwgdikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3V0ID0gWy4uLmFyciwgdl07XG4gICAgICAgICAgICByZXR1cm4gb3V0Lmxlbmd0aCA+IEhJU1RPUlkgPyBvdXQuc2xpY2UoLUhJU1RPUlkpIDogb3V0O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXh0ID0ge1xuICAgICAgICAgICAgY3B1OiBwdXNoKGhpc3RvcnlSZWYuY3VycmVudC5jcHUsIGNuID8gY3B1IC8gY24gOiBudWxsKSxcbiAgICAgICAgICAgIG1lbTogcHVzaChoaXN0b3J5UmVmLmN1cnJlbnQubWVtLCBtbiA/IG1lbSAvIG1uIDogbnVsbCksXG4gICAgICAgICAgICBkaXNrOiBwdXNoKGhpc3RvcnlSZWYuY3VycmVudC5kaXNrLCBkbiA/IGRpc2sgLyBkbiA6IG51bGwpLFxuICAgICAgICB9O1xuICAgICAgICBoaXN0b3J5UmVmLmN1cnJlbnQgPSBuZXh0O1xuICAgICAgICBzZXRIaXN0b3J5KG5leHQpO1xuICAgIH1cblxuICAgIC8vIFB1c2ggYSBzeW50aGV0aWMgZXZlbnQgaW50byB0aGUgc2FtZSBzdHJlYW0gdGhlIFdTIHVzZXMuIFRoZSBFVkVOVFNcbiAgICAvLyBwYW5lbCBkb2Vzbid0IGNhcmUgd2hlcmUgYSByb3cgY2FtZSBmcm9tIFx1MjAxNCB0aGlzIGxldHMgdGhlIHVwZ3JhZGVcbiAgICAvLyBjb250cm9sbGVyIHN1cmZhY2UgcHJvZ3Jlc3MgYW5kIGZhaWx1cmVzIG5leHQgdG8gY29ubmVjdC9kaXNjb25uZWN0XG4gICAgLy8gZXZlbnRzIHdpdGhvdXQga2VlcGluZyBhIHNlcGFyYXRlIHBhbmVsLlxuICAgIGNvbnN0IHB1c2hFdmVudCA9IHVzZUNhbGxiYWNrKChldikgPT4ge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHtcbiAgICAgICAgICAgIHQ6IHRzU3RyKGV2LnRzIHx8IERhdGUubm93KCkpLFxuICAgICAgICAgICAga2luZDogZXYua2luZCB8fCAnaW5mbycsXG4gICAgICAgICAgICBkZXY6IGV2LmRldiB8fCAnJyxcbiAgICAgICAgICAgIG1zZzogZXYubXNnIHx8ICcnLFxuICAgICAgICB9O1xuICAgICAgICBzZXRFdmVudHMoKGN1cikgPT4gW2ZyYW1lLCAuLi5jdXJdLnNsaWNlKDAsIE1BWF9FVkVOVFMpKTtcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4geyBzYW1wbGVzLCBoaXN0b3J5LCBjcHVIaXN0b3J5LCBldmVudHMsIHN0YXR1cywgcHVzaEV2ZW50IH07XG59XG4iLCAiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ2V0QWxhcm1JbnN0YW5jZXMsIEFMQVJNX1NUQVRFIH0gZnJvbSAnQHRoaW5nZXItaW8vY2xpLWNvcmUvYWxhcm1zJztcbmltcG9ydCB7IGV2ZW50U3RyZWFtIH0gZnJvbSAnLi4vLi4vLi4vbGliL2Rhc2hib2FyZC9ldmVudC1zdHJlYW0uanMnO1xuaW1wb3J0IHsgZGVidWdMb2cgfSBmcm9tICcuLi8uLi8uLi9saWIvZGVidWctbG9nLmpzJztcblxuLy8gTGl2ZSB2aWV3IG9mIHNlcnZlci1zaWRlIGFsYXJtIGluc3RhbmNlcy4gT25lIFJFU1QgY2FsbCBhdCBtb3VudCB0byBzZWVkXG4vLyB0aGUgbGlzdCB3aXRoIGV2ZXJ5IG5vbi1jbGVhcmVkIGluc3RhbmNlLCB0aGVuIGZvdXIgV1Mgc3Vic2NyaXB0aW9ucyBvblxuLy8gdGhlIHNoYXJlZCAvdjIvLi4uL2V2ZW50cyBzb2NrZXQgZm9yIGRlbHRhczpcbi8vICAgLSBhbGFybV9pbnN0YW5jZV9hY3RpdmF0ZSAgIFx1MjE5MiB1cHNlcnQgKHJ1bGUgZmlyZWQsIG5ldyBpbnN0YW5jZSlcbi8vICAgLSBhbGFybV9pbnN0YW5jZV9ub3JtYWxpemUgIFx1MjE5MiBkcm9wIChpbnN0YW5jZSBhdXRvLWNsZWFyZWQgYnkgdGhlIHJ1bGUpXG4vLyAgIC0gYWxhcm1faW5zdGFuY2VfdXBkYXRlICAgICBcdTIxOTIgdXBzZXJ0LCBvciBkcm9wIGlmIHRoZSBuZXcgc3RhdGUgaXMgQ0xFQVJFRFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY292ZXJzIG1hbnVhbCBhY2svc2hlbHZlL2xhdGNoIGFuZCBtYW51YWxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJzIHZpYSB0aGUgdXNlcl9yZXNvdXJjZSB1cGRhdGUgZXZlbnQpXG4vLyAgIC0gYWxhcm1faW5zdGFuY2VfZGVsZXRlICAgICBcdTIxOTIgZHJvcCAoaW5zdGFuY2UgcHVyZ2VkIGZyb20gaGlzdG9yeSlcbi8vIFRoZSBiYWNrZW5kIG1lcmdlcyB0aGUgaW5zdGFuY2UgZmllbGRzIChpbnN0YW5jZSwgYWxhcm0sIHN0YXRlLCBcdTIwMjYpIGludG9cbi8vIHRoZSB0b3AtbGV2ZWwgZnJhbWUgaW5zdGVhZCBvZiB3cmFwcGluZyB0aGVtIHVuZGVyIGEgYC5kYXRhYCBlbnZlbG9wZVxuLy8gKGNvbXBhcmUgYnVja2V0cy5jcHA6OmdldF93cml0ZV9ldmVudF9kYXRhLCB3aGljaCBkb2VzIHdyYXApLiBTbyB0aGVcbi8vIGZyYW1lIGl0c2VsZiBpcyB0aGUgaW5zdGFuY2UgZG9jdW1lbnQgXHUyMDE0IHdlIGp1c3Qgc3RyaXAgdGhlIG1ldGEgZmllbGRzXG4vLyAoZXZlbnQsIHRzLCB1c2VyKSB0aGUgZXZlbnRzX3Bvb2wgaW5qZWN0cyBiZWZvcmUgc3RvcmluZyBpdC5cbi8vXG4vLyBSZXR1cm5zIHsgaW5zdGFuY2VzLCBsb2FkaW5nLCBlcnJvciwgcmVmcmVzaCB9IHdoZXJlIGBpbnN0YW5jZXNgIGlzIGFcbi8vIHN0YWJsZSBhcnJheSBzb3J0ZWQgd2l0aCB0aGUgc2FtZSBydWxlIHRoZSBzZXJ2ZXIgdXNlcyBieSBkZWZhdWx0XG4vLyAoc3RhdGUgYXNjLCBzZXZlcml0eSBkZXNjLCBjcmVhdGVkIGRlc2MpIHNvIHRoZSBVSSBkb2Vzbid0IHJlc2h1ZmZsZVxuLy8gcm93cyBvbiBldmVyeSBkZWx0YS5cblxuY29uc3QgQUNUSVZFX1NUQVRFUyA9IFtcbiAgICBBTEFSTV9TVEFURS5OT05FLFxuICAgIEFMQVJNX1NUQVRFLkFDVElWQVRFRCxcbiAgICBBTEFSTV9TVEFURS5BQ0tOT1dMRURHRUQsXG4gICAgQUxBUk1fU1RBVEUuTEFUQ0hFRCxcbiAgICBBTEFSTV9TVEFURS5TSEVMVkVELFxuXTtcblxuZnVuY3Rpb24gaW5zdGFuY2VLZXkoaW5zdCkge1xuICAgIHJldHVybiBpbnN0Py5pbnN0YW5jZSB8fCBpbnN0Py5faWQgfHwgbnVsbDtcbn1cblxuLy8gU3RyaXAgdGhlIG1ldGEgZmllbGRzIGV2ZW50c19wb29sIGluamVjdHMgKGV2ZW50L3RzL3VzZXIpIHNvIHRoZSByZXN0XG4vLyBvZiB0aGUgaG9vayB0cmVhdHMgV1MgZnJhbWVzIGlkZW50aWNhbGx5IHRvIFJFU1Qgc25hcHNob3Qgcm93cy5cbmZ1bmN0aW9uIGZyYW1lVG9JbnN0YW5jZShmcmFtZSkge1xuICAgIGlmICghZnJhbWUgfHwgdHlwZW9mIGZyYW1lICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgeyBldmVudDogX2UsIHRzOiBfdHMsIHVzZXI6IF91LCAuLi5pbnN0IH0gPSBmcmFtZTtcbiAgICByZXR1cm4gaW5zdDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlZE1zKGluc3QpIHtcbiAgICBjb25zdCB2ID0gaW5zdD8uY3JlYXRlZDtcbiAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gMDtcbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSByZXR1cm4gdjtcbiAgICAvLyBTZXJ2ZXIgc29tZXRpbWVzIHNlcmlhbGlzZXMgZGF0ZXMgYXMgeyAkZGF0ZTogLi4uIH0gdmlhIERCX0RBVEUgXHUyMDE0IGFjY2VwdCBib3RoLlxuICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2LiRkYXRlID09PSAnbnVtYmVyJykgcmV0dXJuIHYuJGRhdGU7XG4gICAgICAgIGlmICh0eXBlb2Ygdi4kZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBEYXRlLnBhcnNlKHYuJGRhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSA/IHQgOiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdCA9IERhdGUucGFyc2Uodik7XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodCkgPyB0IDogMDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVJbnN0YW5jZXMoYSwgYikge1xuICAgIGNvbnN0IHNhID0gYT8uc3RhdGUgPz8gMDtcbiAgICBjb25zdCBzYiA9IGI/LnN0YXRlID8/IDA7XG4gICAgaWYgKHNhICE9PSBzYikgcmV0dXJuIHNhIC0gc2I7XG4gICAgY29uc3QgdmEgPSBhPy5zZXZlcml0eSA/PyAwO1xuICAgIGNvbnN0IHZiID0gYj8uc2V2ZXJpdHkgPz8gMDtcbiAgICBpZiAodmEgIT09IHZiKSByZXR1cm4gdmIgLSB2YTtcbiAgICByZXR1cm4gY3JlYXRlZE1zKGIpIC0gY3JlYXRlZE1zKGEpO1xufVxuXG5mdW5jdGlvbiB0b1NvcnRlZEFycmF5KG1hcCkge1xuICAgIHJldHVybiBbLi4ubWFwLnZhbHVlcygpXS5zb3J0KGNvbXBhcmVJbnN0YW5jZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRmxlZXRBbGFybXMoKSB7XG4gICAgY29uc3QgW2luc3RhbmNlcywgc2V0SW5zdGFuY2VzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtyZWxvYWRUb2tlbiwgc2V0UmVsb2FkVG9rZW5dID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgbWFwUmVmID0gdXNlUmVmKG5ldyBNYXAoKSk7XG5cbiAgICBmdW5jdGlvbiBjb21taXQoKSB7XG4gICAgICAgIHNldEluc3RhbmNlcyh0b1NvcnRlZEFycmF5KG1hcFJlZi5jdXJyZW50KSk7XG4gICAgfVxuXG4gICAgLy8gUkVTVCBzbmFwc2hvdC4gUHVsbHMgZXZlcnl0aGluZyBleGNlcHQgQ0xFQVJFRCBzbyB0aGUgV1MgZGVsdGFzIG9ubHlcbiAgICAvLyBuZWVkIHRvIGhhbmRsZSBhZGRpdGlvbnMvcmVtb3ZhbHMuIFRoZSBzZXJ2ZXIncyBkZWZhdWx0IHNvcnQgYWxyZWFkeVxuICAgIC8vIHB1dHMgbm9uLWNvbmZpcm1lZC9hY3RpdmUgZmlyc3QsIHNvIGEgc2luZ2xlIHBhZ2UgaXMgZW5vdWdoIGZvciB0aGVcbiAgICAvLyB0eXBpY2FsIGZsZWV0IFx1MjAxNCBidW1wIGBjb3VudGAgaWYgdGhhdCBzdG9wcyBob2xkaW5nLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDphbGFybXMnLCAnc25hcHNob3Qtc3RhcnQnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldEFsYXJtSW5zdGFuY2VzKHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQ6IDUwMCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IEFDVElWRV9TVEFURVMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6YWxhcm1zJywgJ3NuYXBzaG90LWVuZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgcm93czogZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbnN0IG9mIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgayA9IGluc3RhbmNlS2V5KGluc3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaykgbmV4dC5zZXQoaywgaW5zdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hcFJlZi5jdXJyZW50ID0gbmV4dDtcbiAgICAgICAgICAgICAgICBjb21taXQoKTtcbiAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOmFsYXJtcycsICdzbmFwc2hvdC1lcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW3JlbG9hZFRva2VuXSk7XG5cbiAgICAvLyBXUyBkZWx0YXMuIFRoZSBzaGFyZWQgZXZlbnQtc3RyZWFtIGlzIHJlZi1jb3VudGVkOyBjb25uZWN0L2Rpc2Nvbm5lY3RcbiAgICAvLyBoZXJlIGp1c3QgYnVtcHMgdGhhdCBjb3VudGVyLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGV2ZW50U3RyZWFtLmNvbm5lY3QoKTtcblxuICAgICAgICBjb25zdCBvZmZBY3RpdmF0ZSA9IGV2ZW50U3RyZWFtLm9uKCdhbGFybV9pbnN0YW5jZV9hY3RpdmF0ZScsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IGZyYW1lVG9JbnN0YW5jZShmcmFtZSk7XG4gICAgICAgICAgICBjb25zdCBrID0gaW5zdGFuY2VLZXkoaW5zdCk7XG4gICAgICAgICAgICBpZiAoIWspIHJldHVybjtcbiAgICAgICAgICAgIG1hcFJlZi5jdXJyZW50LnNldChrLCBpbnN0KTtcbiAgICAgICAgICAgIGNvbW1pdCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb2ZmTm9ybWFsaXplID0gZXZlbnRTdHJlYW0ub24oJ2FsYXJtX2luc3RhbmNlX25vcm1hbGl6ZScsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IGZyYW1lVG9JbnN0YW5jZShmcmFtZSk7XG4gICAgICAgICAgICBjb25zdCBrID0gaW5zdGFuY2VLZXkoaW5zdCk7XG4gICAgICAgICAgICBpZiAoIWspIHJldHVybjtcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0cmFuc2l0aW9ucyB0aGUgaW5zdGFuY2UgdG8gQ0xFQVJFRC4gRHJvcCBpdCBmcm9tXG4gICAgICAgICAgICAvLyB0aGUgYWN0aXZlIGxpc3QgXHUyMDE0IHRoZSBBbGVydHNUYWIgb25seSBzaG93cyB3aGF0J3Mgb3V0c3RhbmRpbmcuXG4gICAgICAgICAgICBpZiAobWFwUmVmLmN1cnJlbnQuZGVsZXRlKGspKSBjb21taXQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9mZlVwZGF0ZSA9IGV2ZW50U3RyZWFtLm9uKCdhbGFybV9pbnN0YW5jZV91cGRhdGUnLCAoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3QgPSBmcmFtZVRvSW5zdGFuY2UoZnJhbWUpO1xuICAgICAgICAgICAgY29uc3QgayA9IGluc3RhbmNlS2V5KGluc3QpO1xuICAgICAgICAgICAgaWYgKCFrKSByZXR1cm47XG4gICAgICAgICAgICAvLyBNYW51YWwgdHJhbnNpdGlvbnMgKGFjaywgc2hlbHZlLCBsYXRjaCwgYW5ub3RhdGUsIHJlYWN0aXZhdGlvblxuICAgICAgICAgICAgLy8gY2hhbmdlKSBjb21lIHRocm91Z2ggaGVyZS4gQSBtYW51YWwgY2xlYXIgbGFuZHMgaGVyZSB0b28gXHUyMDE0IHRoZVxuICAgICAgICAgICAgLy8gQWxlcnRzVGFiIG9ubHkgdHJhY2tzIG91dHN0YW5kaW5nIGFsYXJtcywgc28gZHJvcCB0aG9zZS5cbiAgICAgICAgICAgIGlmIChpbnN0Py5zdGF0ZSA9PT0gQUxBUk1fU1RBVEUuQ0xFQVJFRCkge1xuICAgICAgICAgICAgICAgIGlmIChtYXBSZWYuY3VycmVudC5kZWxldGUoaykpIGNvbW1pdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYXBSZWYuY3VycmVudC5zZXQoaywgaW5zdCk7XG4gICAgICAgICAgICAgICAgY29tbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvZmZEZWxldGUgPSBldmVudFN0cmVhbS5vbignYWxhcm1faW5zdGFuY2VfZGVsZXRlJywgKGZyYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0ID0gZnJhbWVUb0luc3RhbmNlKGZyYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBpbnN0YW5jZUtleShpbnN0KTtcbiAgICAgICAgICAgIGlmICghaykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKG1hcFJlZi5jdXJyZW50LmRlbGV0ZShrKSkgY29tbWl0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV2ZW50U3RyZWFtLnN1YnNjcmliZSh7IGV2ZW50OiAnYWxhcm1faW5zdGFuY2VfYWN0aXZhdGUnIH0pO1xuICAgICAgICBldmVudFN0cmVhbS5zdWJzY3JpYmUoeyBldmVudDogJ2FsYXJtX2luc3RhbmNlX25vcm1hbGl6ZScgfSk7XG4gICAgICAgIGV2ZW50U3RyZWFtLnN1YnNjcmliZSh7IGV2ZW50OiAnYWxhcm1faW5zdGFuY2VfdXBkYXRlJyB9KTtcbiAgICAgICAgZXZlbnRTdHJlYW0uc3Vic2NyaWJlKHsgZXZlbnQ6ICdhbGFybV9pbnN0YW5jZV9kZWxldGUnIH0pO1xuICAgICAgICBkZWJ1Z0xvZygnd3M6YWxhcm1zJywgJ3N1YnNjcmliZWQnKTtcblxuICAgICAgICAvLyBJZiB0aGUgc29ja2V0IGRyb3BzIGFuZCByZW9wZW5zIHdlIG1heSBoYXZlIG1pc3NlZCBldmVudHMuIFB1bGwgYVxuICAgICAgICAvLyBmcmVzaCBzbmFwc2hvdCB0byByZWNvdmVyIGF1dGhvcml0YXRpdmUgc3RhdGUgXHUyMDE0IGJ1bXBpbmcgdGhlIHJlbG9hZFxuICAgICAgICAvLyB0b2tlbiBpcyBlbm91Z2g7IHRoZSBzbmFwc2hvdCBlZmZlY3QgaGFuZGxlcyB0aGUgcmVzdC5cbiAgICAgICAgY29uc3Qgb2ZmUmVjb25uZWN0ID0gZXZlbnRTdHJlYW0ub25SZWNvbm5lY3QoKCkgPT4ge1xuICAgICAgICAgICAgZGVidWdMb2coJ3dzOmFsYXJtcycsICdyZXN5bmMtb24tcmVjb25uZWN0Jyk7XG4gICAgICAgICAgICBzZXRSZWxvYWRUb2tlbigobikgPT4gbiArIDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgb2ZmQWN0aXZhdGUoKTtcbiAgICAgICAgICAgIG9mZk5vcm1hbGl6ZSgpO1xuICAgICAgICAgICAgb2ZmVXBkYXRlKCk7XG4gICAgICAgICAgICBvZmZEZWxldGUoKTtcbiAgICAgICAgICAgIG9mZlJlY29ubmVjdCgpO1xuICAgICAgICAgICAgZXZlbnRTdHJlYW0uZGlzY29ubmVjdCgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlcyxcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIHJlZnJlc2g6ICgpID0+IHNldFJlbG9hZFRva2VuKChuKSA9PiBuICsgMSksXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdCB9IGZyb20gJ0B0aGluZ2VyLWlvL2NsaS1jb3JlL3Byb2R1Y3QnO1xuaW1wb3J0IHsgZGVidWdMb2cgfSBmcm9tICcuLi8uLi8uLi9saWIvZGVidWctbG9nLmpzJztcblxuLy8gUmVzb2x2ZSBwcm9kdWN0IGRpc3BsYXkgbmFtZXMgZm9yIGV2ZXJ5IHByb2R1Y3QgcHJlc2VudCBpbiB0aGUgZmxlZXQuXG4vLyBPbmUgUkVTVCBjYWxsIHBlciBwcm9kdWN0LCBpbiBwYXJhbGxlbDsgY2FjaGVkIGJ5IGlkIHNvIHJlLXJlbmRlcnMgZG9uJ3Rcbi8vIHJlLWZldGNoLiBGYWlsdXJlcyBmYWxsIGJhY2sgc2lsZW50bHkgdG8gdGhlIGlkLlxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRmxlZXRQcm9kdWN0cyhwcm9kdWN0SWRzKSB7XG4gICAgY29uc3QgaWRzS2V5ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9kdWN0SWRzKSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gWy4uLnByb2R1Y3RJZHNdLmZpbHRlcihCb29sZWFuKS5zb3J0KCkuam9pbignLCcpO1xuICAgIH0sIFtwcm9kdWN0SWRzXSk7XG4gICAgY29uc3QgaWRzID0gdXNlTWVtbygoKSA9PiAoaWRzS2V5ID8gaWRzS2V5LnNwbGl0KCcsJykgOiBbXSksIFtpZHNLZXldKTtcblxuICAgIGNvbnN0IFtwcm9kdWN0cywgc2V0UHJvZHVjdHNdID0gdXNlU3RhdGUoe30pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNldFByb2R1Y3RzKHt9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0MCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpmbGVldC1wcm9kdWN0cycsICdzdGFydCcsIHsgcHJvZHVjdHM6IGlkcyB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBpZHMubWFwKGFzeW5jIChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFByb2R1Y3QoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtpZCwgeyBpZCwgbmFtZTogZGF0YT8ubmFtZSB8fCBpZCB9XTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6ZmxlZXQtcHJvZHVjdHMnLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGU/Lm1lc3NhZ2UgfHwgU3RyaW5nKGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2lkLCB7IGlkLCBuYW1lOiBpZCB9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOmZsZWV0LXByb2R1Y3RzJywgJ2VuZCcsIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogRGF0ZS5ub3coKSAtIHQwLFxuICAgICAgICAgICAgICAgIHByb2R1Y3RzOiBpZHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldFByb2R1Y3RzKE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKSk7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtpZHNdKTtcblxuICAgIHJldHVybiBwcm9kdWN0cztcbn1cbiIsICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgICBmYWxsYmFja0xvZ3NDb25maWcsXG4gICAgZ2V0UHJvZHVjdExvZ3MsXG4gICAgcmVzb2x2ZVNvdXJjZVBhdHRlcm4sXG59IGZyb20gJy4uLy4uLy4uL2xpYi9wcm9kdWN0L2xvZ3MuanMnO1xuaW1wb3J0IHsgZGVidWdMb2cgfSBmcm9tICcuLi8uLi8uLi9saWIvZGVidWctbG9nLmpzJztcblxuLy8gUmVzb2x2ZSB0aGUgYGxvZ3NgIHByb3BlcnR5IG9mIGEgcHJvZHVjdDogYSBsaXN0IG9mIGB7bmFtZSwgY29tbWFuZH1gXG4vLyBzb3VyY2VzIHRoZSBkYXNoYm9hcmQgY2FuIHN0cmVhbS4gV2hlbiB0aGUgcHJvZHVjdCBoYXMgbm8gcHJvcGVydHlcbi8vIGNvbmZpZ3VyZWQgd2UgZmFsbCBiYWNrIHRvIHRoZSBzeW50aGV0aWMgYHN5c3RlbWAgc291cmNlIChqb3VybmFsY3RsKVxuLy8gc28gdGhlIHBhbmVsIGtlZXBzIHdvcmtpbmcgdW5jaGFuZ2VkIGZvciBwcm9kdWN0cyB0aGF0IGhhdmUgbm90IG9wdGVkXG4vLyBpbi4gVGhlIGxpc3QgcmFyZWx5IGNoYW5nZXMsIHNvIHRoaXMgaG9vayBsb2FkcyBpdCBvbmNlIHBlciBwcm9kdWN0SWRcbi8vIGFuZCBpZ25vcmVzIHN1YnNlcXVlbnQgZWRpdHMgdW50aWwgdGhlIHByb2R1Y3QgY2hhbmdlcy5cblxuLy8gUHJlLXJlc29sdmUgZWFjaCBzb3VyY2UncyBwYXR0ZXJuIChsaXRlcmFsIGBwYXR0ZXJuYCBvciBwcmVzZXQgXHUyMTkyXG4vLyBwYXR0ZXJuKSBzbyB0aGUgcGFuZWwgbmV2ZXIgaGFzIHRvIGtub3cgYWJvdXQgdGhlIHByZXNldCBjYXRhbG9nLlxuLy8gYHJlc29sdmVkUGF0dGVybmAgaXMgYG51bGxgIHdoZW4gdGhlIHNvdXJjZSBjYXJyaWVzIG5laXRoZXIsIGluXG4vLyB3aGljaCBjYXNlIHRoZSBwYW5lbCBmYWxscyBiYWNrIHRvIHJhdyByZW5kZXJpbmcuXG5mdW5jdGlvbiBkZWNvcmF0ZShzb3VyY2VzKSB7XG4gICAgcmV0dXJuIHNvdXJjZXMubWFwKChzKSA9PiAoe1xuICAgICAgICAuLi5zLFxuICAgICAgICByZXNvbHZlZFBhdHRlcm46IHJlc29sdmVTb3VyY2VQYXR0ZXJuKHMpLFxuICAgIH0pKTtcbn1cblxuY29uc3QgRkFMTEJBQ0sgPSAoKCkgPT4ge1xuICAgIGNvbnN0IGNmZyA9IGZhbGxiYWNrTG9nc0NvbmZpZygpO1xuICAgIHJldHVybiB7IHNvdXJjZXM6IGRlY29yYXRlKGNmZy5zb3VyY2VzKSwgZGVmYXVsdDogY2ZnLmRlZmF1bHQsIGZhbGxiYWNrOiB0cnVlIH07XG59KSgpO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZHVjdExvZ1NvdXJjZXMocHJvZHVjdElkKSB7XG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSgoKSA9PlxuICAgICAgICBwcm9kdWN0SWQgPyB7IHNvdXJjZXM6IFtdLCBkZWZhdWx0OiBudWxsLCBmYWxsYmFjazogZmFsc2UsIGxvYWRpbmc6IHRydWUgfSA6IEZBTExCQUNLLFxuICAgICk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIXByb2R1Y3RJZCkge1xuICAgICAgICAgICAgc2V0U3RhdGUoRkFMTEJBQ0spO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgc2V0U3RhdGUoeyBzb3VyY2VzOiBbXSwgZGVmYXVsdDogbnVsbCwgZmFsbGJhY2s6IGZhbHNlLCBsb2FkaW5nOiB0cnVlIH0pO1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdDAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZmcgPSBhd2FpdCBnZXRQcm9kdWN0TG9ncyhwcm9kdWN0SWQpO1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpwcm9kdWN0LWxvZ3MnLCAnZW5kJywge1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9tczogRGF0ZS5ub3coKSAtIHQwLFxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0OiBwcm9kdWN0SWQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZXM6IGNmZy5zb3VyY2VzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s6ICEhY2ZnLl9fZmFsbGJhY2ssXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VzOiBkZWNvcmF0ZShjZmcuc291cmNlcyksXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGNmZy5kZWZhdWx0IHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrOiAhIWNmZy5fX2ZhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWJ1Z0xvZygnaHR0cDpwcm9kdWN0LWxvZ3MnLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3Q6IHByb2R1Y3RJZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7IC4uLkZBTExCQUNLLCBsb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW3Byb2R1Y3RJZF0pO1xuXG4gICAgcmV0dXJuIHN0YXRlO1xufVxuIiwgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXRQcm9kdWN0UHJvcGVydHkgfSBmcm9tICdAdGhpbmdlci1pby9jbGktY29yZS9wcm9kdWN0JztcbmltcG9ydCB7IGRlYnVnQ291bnQsIGRlYnVnTG9nIH0gZnJvbSAnLi4vLi4vLi4vbGliL2RlYnVnLWxvZy5qcyc7XG5pbXBvcnQgeyBldmVudFN0cmVhbSB9IGZyb20gJy4uLy4uLy4uL2xpYi9kYXNoYm9hcmQvZXZlbnQtc3RyZWFtLmpzJztcbmltcG9ydCB7IGFnZ3JlZ2F0ZSwgZ2V0UGF0aCB9IGZyb20gJy4uLy4uLy4uL2xpYi9kYXNoYm9hcmQvbWV0cmljLWFnZ3JlZ2F0ZS5qcyc7XG5cbi8vIFJlYWRzIGBkYXNoYm9hcmRfbWV0cmljc2AgZnJvbSBlYWNoIHByb2R1Y3QgcHJlc2VudCBpbiB0aGUgZmxlZXQgYW5kXG4vLyB3YXRjaGVzIHRoZWlyIHJlc291cmNlcyBhY3Jvc3MgZXZlcnkgZGV2aWNlIG9mIGVhY2ggcHJvZHVjdCB2aWEgYVxuLy8gcGVyc2lzdGVudCB3ZWJzb2NrZXQgc3Vic2NyaXB0aW9uIHRvIGBkZXZpY2VfcmVzb3VyY2Vfc3RyZWFtYC4gVGhlXG4vLyBzdHJlYW0gaGFzIG5vIGJhY2tmaWxsOiBwYW5lbHMgcmVuZGVyIHdpdGggcGxhY2Vob2xkZXJzIHVudGlsIHRoZVxuLy8gZmlyc3QgZnJhbWUgZm9yIGVhY2ggbWV0cmljIGFycml2ZXMuXG4vL1xuLy8gTWV0cmljcyBmcm9tIGRpZmZlcmVudCBwcm9kdWN0cyBsaXZlIGluIHRoZSBzYW1lIGZsYXQgbGlzdC4gVGhlXG4vLyBmcm9udGVuZCBrZXlzIHBlci1tZXRyaWMgc3RhdGUgYnkgYDxwcm9kdWN0Pjo8bmFtZT5gIHNvIHR3byBwcm9kdWN0c1xuLy8gdXNpbmcgdGhlIHNhbWUgbWV0cmljIG5hbWUgZG9uJ3QgY29sbGlkZS5cblxuY29uc3QgSElTVE9SWV9MRU4gPSAzMjtcblxuZnVuY3Rpb24gbWV0cmljS2V5KHByb2R1Y3RJZCwgbmFtZSkge1xuICAgIHJldHVybiBgJHtwcm9kdWN0SWR9OiR7bmFtZX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZHVjdE1ldHJpY3MocHJvZHVjdElkcykge1xuICAgIC8vIFN0YWJsZSBrZXkgc28gd2UgY2FuIGRlcCBvbiB0aGUgYWN0dWFsIHByb2R1Y3Qgc2V0IHJhdGhlciB0aGFuIHRoZVxuICAgIC8vIGlkZW50aXR5IG9mIHRoZSBhcnJheSBwYXNzZWQgaW4gKGNhbGxlcnMgdGVuZCB0byByZWNvbXB1dGUpLlxuICAgIGNvbnN0IGlkc0tleSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvZHVjdElkcykpIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIFsuLi5wcm9kdWN0SWRzXS5maWx0ZXIoQm9vbGVhbikuc29ydCgpLmpvaW4oJywnKTtcbiAgICB9LCBbcHJvZHVjdElkc10pO1xuICAgIGNvbnN0IGlkcyA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IChpZHNLZXkgPyBpZHNLZXkuc3BsaXQoJywnKSA6IFtdKSxcbiAgICAgICAgW2lkc0tleV0sXG4gICAgKTtcblxuICAgIGNvbnN0IFttZXRyaWNzLCBzZXRNZXRyaWNzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbdmFsdWVzLCBzZXRWYWx1ZXNdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtoaXN0b3J5LCBzZXRIaXN0b3J5XSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbbGFzdFVwZGF0ZSwgc2V0TGFzdFVwZGF0ZV0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgLy8gTGF0ZXN0IHNhbXBsZSBwZXIgKG1ldHJpY0tleSwgZGV2aWNlSWQpLiBNaXJyb3JzIHRoZSBzYW1lIHBlci1kZXZpY2VcbiAgICAvLyBtYXAgdGhlIGFnZ3JlZ2F0b3IgYWxyZWFkeSBob2xkcywgYnV0IGV4cG9zZWQgdG8gUmVhY3Qgc28gcGFuZWxzIGNhblxuICAgIC8vIHR1cm4gdGhlIGJ1Y2tldCBjdXJzb3IgaW50byBhIGRldmljZSBsaXN0IGZpbHRlciAoXCJ3aGljaCBib3hlc1xuICAgIC8vIHJlcG9ydGVkIHRoaXMgZXhhY3QgdmFsdWU/XCIpLlxuICAgIGNvbnN0IFt2YWx1ZXNCeURldmljZSwgc2V0VmFsdWVzQnlEZXZpY2VdID0gdXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICAvLyBMb2FkIHRoZSBtZXRyaWMgbGlzdCBwZXIgcHJvZHVjdCwgaW4gcGFyYWxsZWwsIGFuZCBjb25jYXRlbmF0ZS5cbiAgICAvLyBFYWNoIG1ldHJpYyBjYXJyaWVzIHRoZSBgcHJvZHVjdGAgaXQgY2FtZSBmcm9tIHNvIHRoZSBsaXZlLXN0cmVhbVxuICAgIC8vIGVmZmVjdCBjYW4gc3Vic2NyaWJlIHdpdGggdGhlIHJpZ2h0IGZpbHRlciBhbmQgcmVuZGVyLWtleXMgc3RheVxuICAgIC8vIHN0YWJsZSBhY3Jvc3MgcHJvZHVjdHMuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHNldE1ldHJpY3MoW10pO1xuICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdDAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6bWV0cmljcy1saXN0JywgJ3N0YXJ0JywgeyBwcm9kdWN0czogaWRzIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIGlkcy5tYXAoYXN5bmMgKHByb2R1Y3RJZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBnZXRQcm9kdWN0UHJvcGVydHkocHJvZHVjdElkLCAnZGFzaGJvYXJkX21ldHJpY3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWU/Lm1ldHJpY3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlLm1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdC5tYXAoKG0pID0+ICh7IC4uLm0sIHByb2R1Y3Q6IHByb2R1Y3RJZCB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvbm90IGZvdW5kL2kudGVzdChlPy5tZXNzYWdlIHx8ICcnKSkgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGZsYXQgPSByZXN1bHRzLmZsYXQoKTtcbiAgICAgICAgICAgIGRlYnVnTG9nKCdodHRwOm1ldHJpY3MtbGlzdCcsICdlbmQnLCB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25fbXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgICAgICAgICAgICBwcm9kdWN0czogaWRzLFxuICAgICAgICAgICAgICAgIG1ldHJpY19jb3VudDogZmxhdC5sZW5ndGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldE1ldHJpY3MoZmxhdCk7XG4gICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZGVidWdMb2coJ2h0dHA6bWV0cmljcy1saXN0JywgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgIHByb2R1Y3RzOiBpZHMsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGU/Lm1lc3NhZ2UgfHwgU3RyaW5nKGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNhbmNlbGxlZCkgc2V0RXJyb3IoZT8ubWVzc2FnZSB8fCBTdHJpbmcoZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW2lkc10pO1xuXG4gICAgLy8gTGl2ZSBzdHJlYW0gdmlhIHRoZSBzaGFyZWQgZXZlbnQgc3RyZWFtIHNpbmdsZXRvbi4gU3Vic2NyaWJlcyB0b1xuICAgIC8vIGBkZXZpY2VfcmVzb3VyY2Vfc3RyZWFtYCBvbmNlIHBlciAocHJvZHVjdCwgcmVzb3VyY2UpIHR1cGxlOyB0aGVcbiAgICAvLyBzaW5nbGV0b24gaGFuZGxlcyBjb25uZWN0aW9uLCByZXBsYXkgb24gcmVjb25uZWN0LCBhbmQgZGlzcGF0Y2hpbmdcbiAgICAvLyBmcmFtZXMgd2hvc2UgYGV2ZW50YCBtYXRjaGVzLlxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChtZXRyaWNzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIGtleSAocHJvZHVjdDpuYW1lKSBcdTIxOTIgeyBpbnRlcnZhbCwgcmVzb3VyY2UsIGZpZWxkLCBhZ2dyZWdhdGlvbiwgcGVyRGV2aWNlIH1cbiAgICAgICAgY29uc3Qgc3RhdGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgbWV0cmljIG9mIG1ldHJpY3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG1ldHJpY0tleShtZXRyaWMucHJvZHVjdCwgbWV0cmljLm5hbWUpO1xuICAgICAgICAgICAgc3RhdGUuc2V0KGtleSwge1xuICAgICAgICAgICAgICAgIHByb2R1Y3Q6IG1ldHJpYy5wcm9kdWN0LFxuICAgICAgICAgICAgICAgIGludGVydmFsOiBOdW1iZXIobWV0cmljLmludGVydmFsKSA+IDAgPyBOdW1iZXIobWV0cmljLmludGVydmFsKSA6IDAsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IG1ldHJpYy5yZXNvdXJjZSxcbiAgICAgICAgICAgICAgICBmaWVsZDogbWV0cmljLmZpZWxkLFxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uOiBtZXRyaWMuYWdncmVnYXRpb24gfHwgJ3N1bScsXG4gICAgICAgICAgICAgICAgcGVyRGV2aWNlOiB7fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIChwcm9kdWN0LCByZXNvdXJjZSkgXHUyMTkyIFtrZXldIHNvIGEgc2luZ2xlIGluY29taW5nIGZyYW1lIHVwZGF0ZXNcbiAgICAgICAgLy8gZXZlcnkgbWV0cmljIGRlcml2ZWQgZnJvbSB0aGUgc2FtZSByZXNvdXJjZSB3aXRoaW4gdGhhdCBwcm9kdWN0LlxuICAgICAgICBjb25zdCBieVByb2R1Y3RSZXNvdXJjZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBzXSBvZiBzdGF0ZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHR1cGxlS2V5ID0gYCR7cy5wcm9kdWN0fTo6JHtzLnJlc291cmNlfWA7XG4gICAgICAgICAgICBpZiAoIWJ5UHJvZHVjdFJlc291cmNlLmhhcyh0dXBsZUtleSkpIGJ5UHJvZHVjdFJlc291cmNlLnNldCh0dXBsZUtleSwgW10pO1xuICAgICAgICAgICAgYnlQcm9kdWN0UmVzb3VyY2UuZ2V0KHR1cGxlS2V5KS5wdXNoKGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudFN0cmVhbS5jb25uZWN0KCk7XG4gICAgICAgIGNvbnN0IG9mZkZyYW1lID0gZXZlbnRTdHJlYW0ub24oJ2RldmljZV9yZXNvdXJjZV9zdHJlYW0nLCAoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChmcmFtZS5zaWduYWwgJiYgZnJhbWUuc2lnbmFsICE9PSAnZGF0YScpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z0NvdW50KGB3czptZXRyaWNzOmRyb3BwZWQ6JHtmcmFtZS5zaWduYWx9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBmcmFtZS5yZXNvdXJjZTtcbiAgICAgICAgICAgIGNvbnN0IGRldmljZSA9IGZyYW1lLmRldmljZTtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3QgPSBmcmFtZS5wcm9kdWN0O1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGZyYW1lLnBheWxvYWQ7XG4gICAgICAgICAgICBpZiAoIXJlc291cmNlIHx8ICFkZXZpY2UgfHwgcGF5bG9hZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVidWdDb3VudCgnd3M6bWV0cmljczpkcm9wcGVkOm1pc3NpbmctZmllbGRzJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2VydmVyLXNpZGUgZmlsdGVyIHJvdXRlcyBmcmFtZXMgcGVyIHN1YnNjcmlwdGlvbiwgYnV0IHRoZVxuICAgICAgICAgICAgLy8gc2hhcmVkIHNpbmdsZXRvbiBtdWx0aXBsZXhlcyBldmVyeSBwcm9kdWN0J3Mgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAvLyBvdmVyIHRoZSBzYW1lIHNvY2tldCBcdTIwMTQgbWF0Y2ggdGhlIGZyYW1lIHRvIHRoZSByaWdodCBtZXRyaWNcbiAgICAgICAgICAgIC8vIGJ1Y2tldCB1c2luZyBgcHJvZHVjdGAgd2hlbiB0aGUgZmllbGQgaXMgcHJlc2VudCwgZmFsbGluZ1xuICAgICAgICAgICAgLy8gYmFjayB0byBhbnkgdHVwbGUgd2l0aCB0aGUgc2FtZSByZXNvdXJjZSBzbyBvbGRlciBmcmFtZXNcbiAgICAgICAgICAgIC8vIHdpdGhvdXQgdGhlIGZpZWxkIHN0aWxsIHVwZGF0ZSB0aGUgcmlnaHQgbWV0cmljcyAodGhlXG4gICAgICAgICAgICAvLyByZXNvdXJjZSBuYW1lIGlzIHVuaXF1ZSBwZXIgcHJvZHVjdCBpbiBwcmFjdGljZSkuXG4gICAgICAgICAgICBjb25zdCB0dXBsZUtleSA9IHByb2R1Y3QgPyBgJHtwcm9kdWN0fTo6JHtyZXNvdXJjZX1gIDogbnVsbDtcbiAgICAgICAgICAgIGxldCBrZXlzID0gdHVwbGVLZXkgPyBieVByb2R1Y3RSZXNvdXJjZS5nZXQodHVwbGVLZXkpIDogbnVsbDtcbiAgICAgICAgICAgIGlmICgha2V5cykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3RrLCBrc10gb2YgYnlQcm9kdWN0UmVzb3VyY2UuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ay5lbmRzV2l0aChgOjoke3Jlc291cmNlfWApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzID0ga3M7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgha2V5cykge1xuICAgICAgICAgICAgICAgIGRlYnVnQ291bnQoJ3dzOm1ldHJpY3M6ZHJvcHBlZDp1bmtub3duLXJlc291cmNlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVidWdDb3VudChgd3M6bWV0cmljczpvazoke3Jlc291cmNlfWApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBzdGF0ZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2ID0gZ2V0UGF0aChwYXlsb2FkLCBzLmZpZWxkKTtcbiAgICAgICAgICAgICAgICBzLnBlckRldmljZVtkZXZpY2VdID0gdjtcbiAgICAgICAgICAgICAgICBjb25zdCBhZ2cgPSBhZ2dyZWdhdGUoT2JqZWN0LnZhbHVlcyhzLnBlckRldmljZSksIHMuYWdncmVnYXRpb24pO1xuICAgICAgICAgICAgICAgIHNldFZhbHVlcygoY3VyKSA9PiAoeyAuLi5jdXIsIFtrZXldOiBhZ2cgfSkpO1xuICAgICAgICAgICAgICAgIHNldEhpc3RvcnkoKGN1cikgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY3VyLFxuICAgICAgICAgICAgICAgICAgICBba2V5XTogWy4uLihjdXJba2V5XSB8fCBbXSksIGFnZ10uc2xpY2UoLUhJU1RPUllfTEVOKSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgc2V0TGFzdFVwZGF0ZSgoY3VyKSA9PiAoeyAuLi5jdXIsIFtrZXldOiBEYXRlLm5vdygpIH0pKTtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZXNCeURldmljZSgoY3VyKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5jdXIsXG4gICAgICAgICAgICAgICAgICAgIFtrZXldOiB7IC4uLihjdXJba2V5XSB8fCB7fSksIFtkZXZpY2VdOiB2IH0sXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IFt0dXBsZUtleSwga2V5c10gb2YgYnlQcm9kdWN0UmVzb3VyY2UuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCBbcHJvZHVjdCwgcmVzb3VyY2VdID0gdHVwbGVLZXkuc3BsaXQoJzo6Jyk7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGl2ZXMgPSBrZXlzXG4gICAgICAgICAgICAgICAgLm1hcCgoaykgPT4gc3RhdGUuZ2V0KGspLmludGVydmFsKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYgPiAwKTtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IHtcbiAgICAgICAgICAgICAgICBldmVudDogJ2RldmljZV9yZXNvdXJjZV9zdHJlYW0nLFxuICAgICAgICAgICAgICAgIGZpbHRlcnM6IHsgcHJvZHVjdCwgcmVzb3VyY2UgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocG9zaXRpdmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBtc2cucGFyYW1zID0geyBpbnRlcnZhbDogTWF0aC5taW4oLi4ucG9zaXRpdmVzKSAqIDEwMDAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50U3RyZWFtLnN1YnNjcmliZShtc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIG9mZkZyYW1lKCk7XG4gICAgICAgICAgICBldmVudFN0cmVhbS5kaXNjb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgfSwgW21ldHJpY3NdKTtcblxuICAgIHJldHVybiB7IG1ldHJpY3MsIHZhbHVlcywgaGlzdG9yeSwgbGFzdFVwZGF0ZSwgdmFsdWVzQnlEZXZpY2UsIGVycm9yIH07XG59XG4iLCAiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuLy8gQ0ROIGVuZHBvaW50IHRoYXQgdGhlIGFnZW50IGl0c2VsZiBwb2xscyBmb3Igc2VsZi11cGRhdGVzLiBTaW5nbGUgc291cmNlIG9mXG4vLyB0cnV0aCBmb3IgXCJ3aGF0J3MgdGhlIGN1cnJlbnQgc3RhYmxlIHJlbGVhc2U/XCIgXHUyMDE0IHNhbWUgZmlsZSBhZ2VudHMgc2VlLFxuLy8gd2hpY2gga2VlcHMgdGhlIGRhc2hib2FyZCBob25lc3QgKHdlJ3JlIG5vdCBjb21wYXJpbmcgYWdhaW5zdCBhIGRpZmZlcmVudFxuLy8gcmVsZWFzZSBzb3VyY2UgdGhhbiB0aGUgb25lIHRoZSBhZ2VudHMgd2lsbCBhY3R1YWxseSBwdWxsIGZyb20pLlxuY29uc3QgTEFURVNUX1VSTCA9ICdodHRwczovL2dldC50aGlucmVtb3RlLmlvL2xhdGVzdC5qc29uJztcblxuLy8gNSBtaW4gbWF0Y2hlcyB0aGUgYWdlbnQncyBzZWxmLXVwZGF0ZSBwb2xsIGNhZGVuY2UgXHUyMDE0IG5vIHBvaW50IGNoZWNraW5nIG1vcmVcbi8vIG9mdGVuIHRoYW4gdGhhdCwgYW5kIGxlc3Mgb2Z0ZW4gbWFrZXMgdGhlIGRhc2hib2FyZCBmZWVsIHN0YWxlIGFmdGVyIGFcbi8vIHJlbGVhc2UgaXMgY3V0LlxuY29uc3QgUE9MTF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMYXRlc3RBZ2VudFZlcnNpb24oeyB1cmwgPSBMQVRFU1RfVVJMLCBwb2xsTXMgPSBQT0xMX01TIH0gPSB7fSkge1xuICAgIGNvbnN0IFtsYXRlc3QsIHNldExhdGVzdF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pO1xuICAgICAgICAgICAgICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXMuc3RhdHVzfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXRMYXRlc3QoZGF0YT8udmVyc2lvbiB8fCBudWxsKTtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FuY2VsbGVkIHx8IGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoZS5tZXNzYWdlIHx8IFN0cmluZyhlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkKCk7XG4gICAgICAgIGNvbnN0IGlkID0gc2V0SW50ZXJ2YWwobG9hZCwgcG9sbE1zKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfTtcbiAgICB9LCBbdXJsLCBwb2xsTXNdKTtcblxuICAgIHJldHVybiB7IGxhdGVzdCwgZXJyb3IgfTtcbn1cbiIsICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJ1bkZsZWV0VXBncmFkZSwgc3VtbWFyaXplIH0gZnJvbSAnLi4vLi4vLi4vbGliL2ZsZWV0LXVwZ3JhZGUuanMnO1xuXG5jb25zdCBET05FX1RPQVNUX01TID0gODAwMDtcblxuLy8gRW5jYXBzdWxhdGVzIHRoZSBcInVwZ3JhZGUgdGhlIGZsZWV0XCIgc3RhdGUgbWFjaGluZSBzbyBBcHAuanN4IGFuZCB0aGVcbi8vIHBhbmVsIHN0YXkgZHVtYiBhYm91dCBpdC4gUGhhc2VzOlxuLy8gICBpZGxlICAgICAgIFx1MjE5MiBubyB1cGdyYWRlIHJ1bm5pbmcsIG5vIGNvbmZpcm1hdGlvbiBvcGVuXG4vLyAgIGNvbmZpcm1pbmcgXHUyMTkyIG1vZGFsIHZpc2libGUsIHdhaXRpbmcgZm9yIHVzZXIgaW5wdXRcbi8vICAgcnVubmluZyAgICBcdTIxOTIgb3JjaGVzdHJhdG9yIGZpcmVkOyBgcHJvZ3Jlc3NgIHRpY2tzIGFzIGRldmljZXMgZmluaXNoXG4vLyAgIGRvbmUgICAgICAgXHUyMTkyIGJyaWVmIHBvc3QtcnVuIHN1bW1hcnkgdG9hc3Q7IGF1dG8tY2xlYXJzIGJhY2sgdG8gaWRsZVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZ3JhZGVDb250cm9sbGVyKHsgb25FdmVudCB9ID0ge30pIHtcbiAgICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKHsgcGhhc2U6ICdpZGxlJyB9KTtcblxuICAgIC8vIENhY2hlZCBhY3Jvc3MgcmVuZGVycyBzbyBgc3RhcnRgIGNhbiBmaXJlIHdpdGhvdXQgaGF2aW5nIHRvIHJlLXJlYWRcbiAgICAvLyBSZWFjdCBzdGF0ZSAod2hpY2ggd291bGQgYmUgc3RhbGUgYXQgY2FsbCB0aW1lIGFueXdheSkuXG4gICAgY29uc3QgcGVuZGluZ1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBhYm9ydFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBkb25lVGltZXJSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgICBjb25zdCBjbGVhckRvbmVUaW1lciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGRvbmVUaW1lclJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZG9uZVRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgZG9uZVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9wZW5Db25maXJtID0gdXNlQ2FsbGJhY2soKHRhcmdldCwgb3V0ZGF0ZWQpID0+IHtcbiAgICAgICAgaWYgKCFvdXRkYXRlZD8ubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGNsZWFyRG9uZVRpbWVyKCk7XG4gICAgICAgIHBlbmRpbmdSZWYuY3VycmVudCA9IHsgdGFyZ2V0LCBvdXRkYXRlZCB9O1xuICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBwaGFzZTogJ2NvbmZpcm1pbmcnLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgb3V0ZGF0ZWRDb3VudDogb3V0ZGF0ZWQubGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBjYW5jZWxDb25maXJtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBwZW5kaW5nUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBzZXRTdGF0ZSh7IHBoYXNlOiAnaWRsZScgfSk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgY2FuY2VsUnVubmluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgYWJvcnRSZWYuY3VycmVudD8uYWJvcnQoKTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBzdGFydCA9IHVzZUNhbGxiYWNrKFxuICAgICAgICBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdSZWYuY3VycmVudDtcbiAgICAgICAgICAgIGlmICghcGVuZGluZykgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeyB0YXJnZXQsIG91dGRhdGVkIH0gPSBwZW5kaW5nO1xuICAgICAgICAgICAgcGVuZGluZ1JlZi5jdXJyZW50ID0gbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgZGV2aWNlSWRzID0gb3V0ZGF0ZWQubWFwKChkKSA9PiBkLmRldmljZSk7XG4gICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgcGhhc2U6ICdydW5uaW5nJyxcbiAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHsgZG9uZTogMCwgdG90YWw6IGRldmljZUlkcy5sZW5ndGggfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgICAgYWJvcnRSZWYuY3VycmVudCA9IGNvbnRyb2xsZXI7XG5cbiAgICAgICAgICAgIG9uRXZlbnQ/Lih7XG4gICAgICAgICAgICAgICAga2luZDogJ2luZm8nLFxuICAgICAgICAgICAgICAgIGRldjogJ2ZsZWV0JyxcbiAgICAgICAgICAgICAgICBtc2c6IGB1cGdyYWRlIHN0YXJ0IFx1MDBCNyAke2RldmljZUlkcy5sZW5ndGh9IGRldmljZSR7ZGV2aWNlSWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSBcdTIxOTIgJHt0YXJnZXR9YCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5GbGVldFVwZ3JhZGUoe1xuICAgICAgICAgICAgICAgIGRldmljZUlkcyxcbiAgICAgICAgICAgICAgICBjaGFubmVsOiAnbGF0ZXN0JyxcbiAgICAgICAgICAgICAgICBjYW5hcnk6IG9wdGlvbnMuY2FuYXJ5LFxuICAgICAgICAgICAgICAgIGFib3J0T25GYWlsdXJlOiBvcHRpb25zLmFib3J0T25GYWlsdXJlLFxuICAgICAgICAgICAgICAgIGJhdGNoU2l6ZTogb3B0aW9ucy5iYXRjaFNpemUsXG4gICAgICAgICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICAgICAgICBvblByb2dyZXNzOiAoeyBkb25lLCB0b3RhbCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKChwcmV2KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5waGFzZSA9PT0gJ3J1bm5pbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7IC4uLnByZXYsIHByb2dyZXNzOiB7IGRvbmUsIHRvdGFsIH0gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcHJldixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uRGV2aWNlUmVzdWx0OiAocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvbkV2ZW50Py4oXG4gICAgICAgICAgICAgICAgICAgICAgICByLm9rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGtpbmQ6ICd1cGQnLCBkZXY6IHIuZGV2aWNlSWQsIG1zZzogJ3VwZGF0ZSBhcHBsaWVkJyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IGtpbmQ6ICdlcnInLCBkZXY6IHIuZGV2aWNlSWQsIG1zZzogYHVwZGF0ZSBmYWlsZWQ6ICR7ci5lcnJvcn1gIH0sXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzdW1tYXJ5ID0gc3VtbWFyaXplKHJlc3VsdC5yZXN1bHRzKTtcbiAgICAgICAgICAgIG9uRXZlbnQ/Lih7XG4gICAgICAgICAgICAgICAga2luZDogcmVzdWx0LmFib3J0ZWQgPyAnZXJyJyA6ICdpbmZvJyxcbiAgICAgICAgICAgICAgICBkZXY6ICdmbGVldCcsXG4gICAgICAgICAgICAgICAgbXNnOiByZXN1bHQuYWJvcnRlZFxuICAgICAgICAgICAgICAgICAgICA/IGB1cGdyYWRlIGFib3J0ZWQgKCR7cmVzdWx0LnJlYXNvbn0pIFx1MDBCNyAke3N1bW1hcnkub2t9IG9rIFx1MDBCNyAke3N1bW1hcnkuZmFpbGVkfSBmYWlsZWRgXG4gICAgICAgICAgICAgICAgICAgIDogYHVwZ3JhZGUgZG9uZSBcdTAwQjcgJHtzdW1tYXJ5Lm9rfSBvayBcdTAwQjcgJHtzdW1tYXJ5LmZhaWxlZH0gZmFpbGVkYCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgcGhhc2U6ICdkb25lJyxcbiAgICAgICAgICAgICAgICBzdW1tYXJ5LFxuICAgICAgICAgICAgICAgIGFib3J0ZWQ6IHJlc3VsdC5hYm9ydGVkLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogcmVzdWx0LnJlYXNvbixcbiAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY2xlYXJEb25lVGltZXIoKTtcbiAgICAgICAgICAgIGRvbmVUaW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoeyBwaGFzZTogJ2lkbGUnIH0pO1xuICAgICAgICAgICAgICAgIGRvbmVUaW1lclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH0sIERPTkVfVE9BU1RfTVMpO1xuXG4gICAgICAgICAgICBhYm9ydFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgW29uRXZlbnRdLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGF0ZSxcbiAgICAgICAgb3BlbkNvbmZpcm0sXG4gICAgICAgIGNhbmNlbENvbmZpcm0sXG4gICAgICAgIGNhbmNlbFJ1bm5pbmcsXG4gICAgICAgIHN0YXJ0LFxuICAgIH07XG59XG4iLCAiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnaW5rJztcbmltcG9ydCB7IHRoZW1lIH0gZnJvbSAnLi4vdGhlbWUuanMnO1xuaW1wb3J0IHsgdXNlTW9kYWwgfSBmcm9tICcuLi9saWIvZm9jdXMuanMnO1xuXG5jb25zdCBNSU5fQkFUQ0ggPSAxO1xuY29uc3QgTUFYX0JBVENIID0gMjA7XG5cbmNvbnN0IEhJTlQgPSBbXG4gICAgeyBrOiAnYycsIGxhYmVsOiAnY2FuYXJ5JyB9LFxuICAgIHsgazogJ2YnLCBsYWJlbDogJ2Fib3J0IG9uIGZhaWwnIH0sXG4gICAgeyBrOiAnKy8tJywgbGFiZWw6ICdiYXRjaCcgfSxcbiAgICB7IGs6ICdlbnRlcicsIGxhYmVsOiAnc3RhcnQnIH0sXG4gICAgeyBrOiAnZXNjJywgbGFiZWw6ICdjYW5jZWwnIH0sXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gVXBncmFkZU1vZGFsKHsgb3V0ZGF0ZWRDb3VudCwgdGFyZ2V0LCBvbkNvbmZpcm0sIG9uQ2FuY2VsIH0pIHtcbiAgICBjb25zdCBbY2FuYXJ5LCBzZXRDYW5hcnldID0gdXNlU3RhdGUodHJ1ZSk7XG4gICAgY29uc3QgW2Fib3J0T25GYWlsdXJlLCBzZXRBYm9ydE9uRmFpbHVyZV0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbYmF0Y2hTaXplLCBzZXRCYXRjaFNpemVdID0gdXNlU3RhdGUoNSk7XG5cbiAgICB1c2VNb2RhbChcbiAgICAgICAgKGlucHV0LCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkuZXNjYXBlKSB7XG4gICAgICAgICAgICAgICAgb25DYW5jZWw/LigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXkucmV0dXJuKSB7XG4gICAgICAgICAgICAgICAgb25Db25maXJtPy4oeyBjYW5hcnksIGFib3J0T25GYWlsdXJlLCBiYXRjaFNpemUgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAnYycpIHNldENhbmFyeSgodikgPT4gIXYpO1xuICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXQgPT09ICdmJykgc2V0QWJvcnRPbkZhaWx1cmUoKHYpID0+ICF2KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0ID09PSAnKycgfHwgaW5wdXQgPT09ICc9JylcbiAgICAgICAgICAgICAgICBzZXRCYXRjaFNpemUoKG4pID0+IE1hdGgubWluKE1BWF9CQVRDSCwgbiArIDEpKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0ID09PSAnLScgfHwgaW5wdXQgPT09ICdfJylcbiAgICAgICAgICAgICAgICBzZXRCYXRjaFNpemUoKG4pID0+IE1hdGgubWF4KE1JTl9CQVRDSCwgbiAtIDEpKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBoaW50OiBISU5UIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGNoZWNrID0gKG9uKSA9PiAob24gPyA8VGV4dCBjb2xvcj17dGhlbWUubGltZX0+W3hdPC9UZXh0PiA6IDxUZXh0IGNvbG9yPXt0aGVtZS5mZ0RpbX0+WyBdPC9UZXh0Pik7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Qm94XG4gICAgICAgICAgICBib3JkZXJTdHlsZT1cInJvdW5kXCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPXt0aGVtZS5ib3JkZXJGb2N1c31cbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcj17dGhlbWUub3ZlcmxheUJnfVxuICAgICAgICAgICAgcGFkZGluZ1g9ezJ9XG4gICAgICAgICAgICBwYWRkaW5nWT17MX1cbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIlxuICAgICAgICAgICAgd2lkdGg9ezYwfVxuICAgICAgICA+XG4gICAgICAgICAgICA8Qm94IG1hcmdpbkJvdHRvbT17MX0+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0gYm9sZD5cbiAgICAgICAgICAgICAgICAgICAgVVBHUkFERSB7b3V0ZGF0ZWRDb3VudH0gREVWSUNFe291dGRhdGVkQ291bnQgPT09IDEgPyAnJyA6ICdTJ31cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gXHUwMEI3IHRhcmdldCA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmxpbWV9Pnt0YXJnZXQgfHwgJ2xhdGVzdCd9PC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIDxCb3g+XG4gICAgICAgICAgICAgICAge2NoZWNrKGNhbmFyeSl9XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT4gY2FuYXJ5IGZpcnN0IDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+KGMpPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PlxuICAgICAgICAgICAgICAgIHtjaGVjayhhYm9ydE9uRmFpbHVyZSl9XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnfT4gYWJvcnQgb24gZmFpbHVyZSA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRmFpbnR9PihmKTwvVGV4dD5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PiAgICBiYXRjaCBzaXplOiA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmFjY2VudH0gYm9sZD57YmF0Y2hTaXplfTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdGYWludH0+ICgrLy0pPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG5cbiAgICAgICAgICAgIDxCb3ggbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUuZmdEaW19PmVudGVyIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj17dGhlbWUubGltZX0+c3RhcnQ8L1RleHQ+XG4gICAgICAgICAgICAgICAgPFRleHQgY29sb3I9e3RoZW1lLmZnRGltfT4gICBcdTAwQjcgICBlc2MgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDxUZXh0IGNvbG9yPXt0aGVtZS5hbWJlcn0+Y2FuY2VsPC9UZXh0PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvQm94PlxuICAgICk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsT0FBT0EsYUFBVztBQUNsQixTQUFTLGNBQWM7OztBQ0R2QixPQUFPQyxXQUFTLGVBQUFDLGNBQWEsYUFBQUMsYUFBVyxXQUFBQyxXQUFTLFlBQUFDLGtCQUFnQjtBQUNqRSxTQUFTLE9BQUFDLE9BQUssUUFBQUMsUUFBTSxRQUFRLGFBQUFDLGtCQUFpQjs7O0FDQ3RDLElBQU0sUUFBUTtBQUFBLEVBQ2pCLElBQUk7QUFBQSxFQUNKLE9BQU87QUFBQSxFQUNQLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTVQsUUFBUTtBQUFBLEVBQ1IsV0FBVztBQUFBLEVBQ1gsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBRWIsUUFBUTtBQUFBO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEs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QUFDeEIsZ0JBQVEsT0FBTyxNQUFNLFlBQVk7QUFDakM7QUFBQSxNQUNKO0FBQ0E7QUFBQSxJQUNKO0FBQUEsRUFDSixVQUFFO0FBQ0UsYUFBUztBQUNULFlBQVEsSUFBSSxRQUFRLE1BQU07QUFDMUIsWUFBUSxJQUFJLFVBQVUsTUFBTTtBQUM1QixZQUFRLElBQUksV0FBVyxNQUFNO0FBQzdCLFlBQVEsSUFBSSxxQkFBcUIsTUFBTTtBQUFBLEVBQzNDO0FBQ0o7IiwKICAibmFtZXMiOiBbIlJlYWN0IiwgIlJlYWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgIkJveCIsICJUZXh0IiwgInVzZVN0ZG91dCIsICJSZWFjdCIsICJCb3giLCAiVGV4dCIsICJqc3giLCAianN4cyIsICJUZXh0IiwgIkJveCIsICJSZWFjdCIsICJCb3giLCAiVGV4dCIsICJSZWFjdCIsICJCb3giLCAiVGV4dCIsICJqc3giLCAianN4cyIsICJCb3giLCAiVGV4dCIsICJSZWFjdCIsICJUZXh0IiwgImpzeCIsICJqc3hzIiwgIlRleHQiLCAianN4IiwgImpzeHMiLCAiVGV4dCIsICJCb3giLCAiUmVhY3QiLCAidXNlRWZmZWN0IiwgInVzZU1lbW8iLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgIkJveCIsICJUZXh0IiwgInVzZVN0ZG91dCIsICJ1c2VFZmZlY3QiLCAianN4IiwgImpzeHMiLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgInVzZUVmZmVjdCIsICJmbXRVcCIsICJCb3giLCAiVGV4dCIsICJ1c2VNZW1vIiwgInVzZVN0ZG91dCIsICJSZWFjdCIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgIkJveCIsICJUZXh0IiwgIlJlYWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVJlZiIsICJ1c2VTdGF0ZSIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgIkJveCIsICJUZXh0IiwgIlJlYWN0IiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVJlZiIsICJ1c2VTdGF0ZSIsICJCb3giLCAiVGV4dCIsICJ1c2VTdGRvdXQiLCAiQUxBUk1fU0VWRVJJVFkiLCAiRnJhZ21lbnQiLCAianN4IiwgImpzeHMiLCAiQm94IiwgIlRleHQiLCAiQUxBUk1fU0VWRVJJVFkiLCAianN4cyIsICJCb3giLCAianN4IiwgIlRleHQiLCAiRnJhZ21lbnQiLCAibWV0cmljS2V5IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJNZXRyaWNSb3ciLCAidXNlU3Rkb3V0IiwgIkFMQVJNX1NFVkVSSVRZIiwgImNvdW50cyIsICJSZWFjdCIsICJ1c2VNZW1vIiwgIkJveCIsICJUZXh0IiwgIkFMQVJNX1NFVkVSSVRZIiwgIkFMQVJNX1NUQVRFIiwgIkZyYWdtZW50IiwgImpzeCIsICJqc3hzIiwgImR1cmF0aW9uTGFiZWwiLCAiYWN0aXZhdGlvbk1zIiwgIkhlYWRlckNlbGwiLCAiQm94IiwgIlRleHQiLCAidXNlTWVtbyIsICJSZWFjdCIsICJ1c2VNZW1vIiwgIkJveCIsICJUZXh0IiwgImpzeCIsICJqc3hzIiwgIkJveCIsICJUZXh0IiwgInVzZU1lbW8iLCAiUmVhY3QiLCAidXNlRWZmZWN0IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAidXNlSW5wdXQiLCAidXNlU3Rkb3V0IiwgIlJlYWN0IiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgIkJveCIsICJUZXh0IiwgInVzZUlucHV0IiwgImpzeCIsICJqc3hzIiwgIkJveCIsICJUZXh0IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAidXNlRWZmZWN0IiwgInVzZUlucHV0IiwgIlJlYWN0IiwgIkJveCIsICJUZXh0IiwgIkZyYWdtZW50IiwgImpzeCIsICJqc3hzIiwgIlRleHQiLCAiQm94IiwgIlJlYWN0IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAiVGV4dCIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgInVzZUlucHV0IiwgIkJveCIsICJSZWFjdCIsICJCb3giLCAiVGV4dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJ1c2VJbnB1dCIsICJCb3giLCAiVGV4dCIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgImRlYnVnTG9nIiwgInVzZUNhbGxiYWNrIiwgInVzZVJlZiIsICJ1c2VTdGF0ZSIsICJGcmFnbWVudCIsICJqc3giLCAianN4cyIsICJUZXh0IiwgIkJveCIsICJ1c2VTdGRvdXQiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJydW4iLCAidXNlRWZmZWN0IiwgInVzZUlucHV0IiwgIlJlYWN0IiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAianN4IiwgImpzeHMiLCAiUEFHRSIsICJISU5UIiwgInVzZU1lbW8iLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAidXNlRWZmZWN0IiwgInVzZVN0YXRlIiwgImRlYnVnQ291bnQiLCAiZGVidWdMb2ciLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VTdGF0ZSIsICJkZWJ1Z0xvZyIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgInVzZVN0YXRlIiwgIkFMQVJNX1NUQVRFIiwgImV2ZW50U3RyZWFtIiwgImRlYnVnTG9nIiwgInVzZUVmZmVjdCIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgImRlYnVnTG9nIiwgInVzZUVmZmVjdCIsICJ1c2VTdGF0ZSIsICJkZWJ1Z0xvZyIsICJ1c2VFZmZlY3QiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJkZWJ1Z0NvdW50IiwgImRlYnVnTG9nIiwgImV2ZW50U3RyZWFtIiwgIkhJU1RPUllfTEVOIiwgInVzZUVmZmVjdCIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VSZWYiLCAidXNlU3RhdGUiLCAiUmVhY3QiLCAidXNlU3RhdGUiLCAiQm94IiwgIlRleHQiLCAianN4IiwgImpzeHMiLCAiTUlOX0JBVENIIiwgIk1BWF9CQVRDSCIsICJISU5UIiwgInVzZVN0YXRlIiwgIlRleHQiLCAiQm94IiwgImpzeCIsICJqc3hzIiwgInVzZVN0ZG91dCIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlTWVtbyIsICJCb3giLCAiVGV4dCIsICJyZWFkQ29uZmlnIiwgImpzeCJdCn0K
|