kepler.gl 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -132
- package/dist/src/common-utils/src/data-type.d.ts +9 -1
- package/dist/src/components/src/common/data-table/header-cell.d.ts +1 -0
- package/dist/src/components/src/common/data-table/index.d.ts +1 -0
- package/dist/src/components/src/common/file-uploader/file-drop.d.ts +1 -32
- package/dist/src/components/src/common/item-selector/dropdown-list.d.ts +2 -2
- package/dist/src/components/src/common/item-selector/item-selector.d.ts +1 -1
- package/dist/src/components/src/common/item-selector/typeahead.d.ts +1 -1
- package/dist/src/components/src/geocoder/geocoder.d.ts +7 -0
- package/dist/src/components/src/geocoder-panel.d.ts +2 -2
- package/dist/src/components/src/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
- package/dist/src/constants/src/default-settings.d.ts +14 -1
- package/dist/src/deckgl-arrow-layers/src/constants.d.ts +0 -12
- package/dist/src/deckgl-arrow-layers/src/index.d.ts +0 -1
- package/dist/src/deckgl-arrow-layers/src/utils/utils.d.ts +12 -1
- package/dist/src/duckdb/src/components/preview-data-panel.d.ts +7 -2
- package/dist/src/duckdb/src/components/schema-panel.d.ts +12 -3
- package/dist/src/duckdb/src/processors/data-processor.d.ts +1 -0
- package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +106 -0
- package/dist/src/duckdb/src/table/duckdb-table.d.ts +5 -3
- package/dist/src/processors/src/data-processor.d.ts +15 -1
- package/dist/src/reducers/src/provider-state-updaters.d.ts +1 -0
- package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -1
- package/dist/src/table/src/dataset-utils.d.ts +1 -1
- package/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
- package/dist/src/utils/src/application-config.d.ts +4 -3
- package/dist/src/utils/src/data-utils.d.ts +9 -3
- package/dist/src/utils/src/indexed-data-container.d.ts +2 -2
- package/dist/src/utils/src/map-style-utils/mapbox-utils.d.ts +1 -1
- package/dist/src/utils/src/map-utils.d.ts +1 -1
- package/dist/src/utils/src/plot.d.ts +2 -2
- package/package.json +5 -5
- package/src/actions/package.json +8 -8
- package/src/ai-assistant/dist/components/ai-assistant-component.js +2 -1
- package/src/ai-assistant/package.json +7 -7
- package/src/ai-assistant/src/components/ai-assistant-component.tsx +1 -0
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/dist/data-type.d.ts +9 -1
- package/src/common-utils/dist/data-type.js +50 -1
- package/src/common-utils/package.json +3 -3
- package/src/common-utils/src/data-type.ts +49 -1
- package/src/components/dist/common/data-table/header-cell.d.ts +1 -0
- package/src/components/dist/common/data-table/header-cell.js +2 -2
- package/src/components/dist/common/data-table/index.d.ts +1 -0
- package/src/components/dist/common/data-table/index.js +5 -1
- package/src/components/dist/common/file-uploader/file-drop.d.ts +1 -32
- package/src/components/dist/common/file-uploader/file-drop.js +152 -167
- package/src/components/dist/common/item-selector/dropdown-list.d.ts +2 -2
- package/src/components/dist/common/item-selector/dropdown-list.js +2 -3
- package/src/components/dist/common/item-selector/item-selector.d.ts +1 -1
- package/src/components/dist/common/item-selector/typeahead.d.ts +1 -1
- package/src/components/dist/common/range-brush.js +3 -3
- package/src/components/dist/geocoder/geocoder.d.ts +7 -0
- package/src/components/dist/geocoder/geocoder.js +19 -11
- package/src/components/dist/geocoder-panel.d.ts +2 -2
- package/src/components/dist/geocoder-panel.js +64 -91
- package/src/components/dist/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
- package/src/components/dist/hooks/use-fetch-vector-tile-metadata.js +35 -26
- package/src/components/dist/hooks/use-legend-position.js +8 -4
- package/src/components/dist/map/map-legend-panel.js +2 -3
- package/src/components/dist/modal-container.js +8 -8
- package/src/components/dist/modals/tilesets-modals/tileset-vector-form.js +31 -12
- package/src/components/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
- package/src/components/dist/side-panel/layer-panel/color-range-selector.js +10 -11
- package/src/components/dist/side-panel/layer-panel/color-selector.js +3 -3
- package/src/components/dist/side-panel/layer-panel/custom-palette.js +1 -2
- package/src/components/dist/side-panel/layer-panel/layer-configurator.js +6 -8
- package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +1 -2
- package/src/components/package.json +16 -16
- package/src/components/src/common/data-table/header-cell.tsx +2 -1
- package/src/components/src/common/data-table/index.tsx +4 -0
- package/src/components/src/common/file-uploader/file-drop.tsx +186 -161
- package/src/components/src/common/item-selector/dropdown-list.tsx +1 -6
- package/src/components/src/common/range-brush.tsx +2 -2
- package/src/components/src/geocoder/geocoder.tsx +16 -8
- package/src/components/src/geocoder-panel.tsx +95 -85
- package/src/components/src/hooks/use-fetch-vector-tile-metadata.ts +27 -25
- package/src/components/src/hooks/use-legend-position.ts +5 -2
- package/src/components/src/map/map-legend-panel.tsx +1 -2
- package/src/components/src/modal-container.tsx +7 -7
- package/src/components/src/modals/tilesets-modals/tileset-vector-form.tsx +12 -3
- package/src/components/src/side-panel/layer-panel/color-palette-preset.tsx +1 -1
- package/src/components/src/side-panel/layer-panel/color-range-selector.tsx +6 -11
- package/src/components/src/side-panel/layer-panel/color-selector.tsx +2 -2
- package/src/components/src/side-panel/layer-panel/custom-palette.tsx +0 -1
- package/src/components/src/side-panel/layer-panel/layer-configurator.tsx +23 -33
- package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +0 -1
- package/src/constants/dist/default-settings.d.ts +14 -1
- package/src/constants/dist/default-settings.js +20 -5
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/91/4f/6c65f3a1eba584ffd2d892cabc25ab5804d4a9ef53694c98707372a83e56343a274bec04f15927a6fe7602615f0f23f73ccf599f524ef97ad6c77c8832ea +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/a6/b2/5424aa4477192fb44cc90fd80892efdc96731f2ff0f48e8f28abf64243cc +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/src/default-settings.ts +16 -1
- package/src/constants/umd/keplergl.min.js +2 -2
- package/src/deckgl-arrow-layers/dist/constants.d.ts +0 -12
- package/src/deckgl-arrow-layers/dist/constants.js +4 -15
- package/src/deckgl-arrow-layers/dist/index.d.ts +0 -1
- package/src/deckgl-arrow-layers/dist/index.js +1 -8
- package/src/deckgl-arrow-layers/dist/layers/geo-arrow-scatterplot-layer.js +4 -4
- package/src/deckgl-arrow-layers/dist/layers/geo-arrow-text-layer.js +5 -5
- package/src/deckgl-arrow-layers/dist/utils/utils.d.ts +12 -1
- package/src/deckgl-arrow-layers/dist/utils/utils.js +7 -5
- package/src/deckgl-arrow-layers/package.json +2 -1
- package/src/deckgl-arrow-layers/src/constants.ts +0 -13
- package/src/deckgl-arrow-layers/src/index.ts +0 -2
- package/src/deckgl-arrow-layers/src/layers/geo-arrow-scatterplot-layer.ts +5 -3
- package/src/deckgl-arrow-layers/src/layers/geo-arrow-text-layer.ts +8 -4
- package/src/deckgl-arrow-layers/src/utils/utils.ts +7 -5
- package/src/deckgl-layers/dist/deckgl-extensions/filter-arrow-layer.d.ts +1 -1
- package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.d.ts +1 -1
- package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.js +3 -3
- package/src/deckgl-layers/package.json +5 -5
- package/src/deckgl-layers/src/deckgl-extensions/filter-shader-module.ts +4 -3
- package/src/duckdb/dist/components/monaco-editor.js +4 -5
- package/src/duckdb/dist/components/preview-data-panel.d.ts +7 -2
- package/src/duckdb/dist/components/preview-data-panel.js +7 -8
- package/src/duckdb/dist/components/schema-panel.d.ts +12 -3
- package/src/duckdb/dist/components/schema-panel.js +41 -24
- package/src/duckdb/dist/components/sql-panel.js +245 -56
- package/src/duckdb/dist/init.js +20 -14
- package/src/duckdb/dist/processors/data-processor.d.ts +1 -0
- package/src/duckdb/dist/processors/data-processor.js +4 -4
- package/src/duckdb/dist/table/duckdb-table-utils.d.ts +106 -0
- package/src/duckdb/dist/table/duckdb-table-utils.js +493 -2
- package/src/duckdb/dist/table/duckdb-table.d.ts +5 -3
- package/src/duckdb/dist/table/duckdb-table.js +153 -261
- package/src/duckdb/package.json +6 -6
- package/src/duckdb/src/components/monaco-editor.tsx +3 -3
- package/src/duckdb/src/components/preview-data-panel.tsx +15 -8
- package/src/duckdb/src/components/schema-panel.tsx +92 -21
- package/src/duckdb/src/components/sql-panel.tsx +160 -22
- package/src/duckdb/src/init.ts +4 -1
- package/src/duckdb/src/processors/data-processor.ts +2 -2
- package/src/duckdb/src/table/duckdb-table-utils.ts +407 -1
- package/src/duckdb/src/table/duckdb-table.ts +61 -92
- package/src/effects/package.json +5 -5
- package/src/layers/dist/arc-layer/arc-layer.d.ts +1 -1
- package/src/layers/dist/arc-layer/arc-layer.js +2 -3
- package/src/layers/dist/base-layer.d.ts +7 -6
- package/src/layers/dist/base-layer.js +36 -19
- package/src/layers/dist/geojson-layer/geojson-layer.js +4 -2
- package/src/layers/dist/geojson-layer/geojson-utils.js +10 -3
- package/src/layers/dist/heatmap-layer/heatmap-layer.d.ts +2 -0
- package/src/layers/dist/heatmap-layer/heatmap-layer.js +16 -9
- package/src/layers/dist/icon-layer/icon-layer.d.ts +6 -3
- package/src/layers/dist/icon-layer/icon-layer.js +19 -11
- package/src/layers/dist/index.d.ts +1 -1
- package/src/layers/dist/index.js +1 -1
- package/src/layers/dist/layer-text-label.d.ts +9 -0
- package/src/layers/dist/layer-text-label.js +51 -6
- package/src/layers/dist/layer-utils.d.ts +39 -30
- package/src/layers/dist/layer-utils.js +69 -9
- package/src/layers/dist/line-layer/line-layer.d.ts +1 -1
- package/src/layers/dist/line-layer/line-layer.js +2 -3
- package/src/layers/dist/point-layer/point-layer.d.ts +10 -7
- package/src/layers/dist/point-layer/point-layer.js +16 -8
- package/src/layers/dist/trip-layer/trip-layer.d.ts +2 -2
- package/src/layers/dist/trip-layer/trip-layer.js +4 -2
- package/src/layers/dist/vector-tile/abstract-tile-layer.d.ts +3 -7
- package/src/layers/dist/vector-tile/abstract-tile-layer.js +7 -6
- package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +5 -7
- package/src/layers/dist/vector-tile/vector-tile-layer.js +23 -2
- package/src/layers/package.json +11 -10
- package/src/layers/src/arc-layer/arc-layer.ts +1 -1
- package/src/layers/src/base-layer.ts +50 -9
- package/src/layers/src/geojson-layer/geojson-layer.ts +3 -1
- package/src/layers/src/geojson-layer/geojson-utils.ts +4 -1
- package/src/layers/src/heatmap-layer/heatmap-layer.ts +17 -12
- package/src/layers/src/icon-layer/icon-layer.ts +7 -3
- package/src/layers/src/index.ts +1 -2
- package/src/layers/src/layer-text-label.ts +53 -4
- package/src/layers/src/layer-utils.ts +88 -9
- package/src/layers/src/line-layer/line-layer.ts +1 -1
- package/src/layers/src/point-layer/point-layer.ts +15 -11
- package/src/layers/src/trip-layer/trip-layer.ts +4 -2
- package/src/layers/src/vector-tile/abstract-tile-layer.ts +11 -5
- package/src/layers/src/vector-tile/vector-tile-layer.ts +33 -4
- package/src/localization/package.json +1 -1
- package/src/processors/dist/data-processor.d.ts +15 -1
- package/src/processors/dist/data-processor.js +104 -11
- package/src/processors/package.json +8 -7
- package/src/processors/src/data-processor.ts +116 -13
- package/src/reducers/dist/export-utils.js +2 -2
- package/src/reducers/dist/layer-utils.js +1 -1
- package/src/reducers/dist/provider-state-updaters.d.ts +1 -0
- package/src/reducers/dist/provider-state-updaters.js +5 -2
- package/src/reducers/dist/vis-state-updaters.d.ts +1 -1
- package/src/reducers/dist/vis-state-updaters.js +23 -12
- package/src/reducers/package.json +16 -16
- package/src/reducers/src/export-utils.ts +1 -1
- package/src/reducers/src/layer-utils.ts +2 -1
- package/src/reducers/src/provider-state-updaters.ts +4 -1
- package/src/reducers/src/vis-state-updaters.ts +45 -10
- package/src/schemas/dist/dataset-schema.js +35 -6
- package/src/schemas/package.json +7 -7
- package/src/schemas/src/dataset-schema.ts +36 -8
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a3/a9/7f26bbc52905b0e21e9366a30ef0ba98f4ccf9aa8dd8326d90ba90191ba2e305323f505bf134c825356156c793bf9386ed2cef2aeb48eb327c26d106f69a +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/7e/51/b8756555a0e2e696d944445ac23f7febf769006013fbc8419f39a701649d +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +2 -2
- package/src/table/dist/dataset-utils.js +23 -14
- package/src/table/dist/src/table/src/dataset-utils.d.ts +1 -1
- package/src/table/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
- package/src/table/dist/tileset/vector-tile-utils.js +122 -2
- package/src/table/package.json +5 -5
- package/src/table/src/dataset-utils.ts +16 -6
- package/src/table/src/tileset/vector-tile-utils.ts +131 -8
- package/src/tasks/package.json +2 -2
- package/src/types/actions.d.ts +1 -0
- package/src/types/layers.d.ts +1 -0
- package/src/types/package.json +1 -1
- package/src/types/types.d.ts +17 -0
- package/src/utils/dist/application-config.d.ts +4 -3
- package/src/utils/dist/application-config.js +3 -2
- package/src/utils/dist/data-scale-utils.js +4 -4
- package/src/utils/dist/data-utils.d.ts +9 -3
- package/src/utils/dist/data-utils.js +40 -7
- package/src/utils/dist/dataset-utils.js +23 -8
- package/src/utils/dist/indexed-data-container.d.ts +2 -2
- package/src/utils/dist/indexed-data-container.js +1 -1
- package/src/utils/dist/map-style-utils/mapbox-utils.d.ts +1 -1
- package/src/utils/dist/map-style-utils/mapbox-utils.js +3 -3
- package/src/utils/dist/plot.d.ts +2 -2
- package/src/utils/dist/plot.js +6 -6
- package/src/utils/map-utils.spec.js +1 -2
- package/src/utils/package.json +5 -4
- package/src/utils/src/application-config.ts +11 -8
- package/src/utils/src/data-scale-utils.ts +3 -3
- package/src/utils/src/data-utils.ts +36 -7
- package/src/utils/src/dataset-utils.ts +41 -9
- package/src/utils/src/indexed-data-container.ts +1 -1
- package/src/utils/src/map-style-utils/mapbox-utils.ts +2 -2
- package/src/utils/src/plot.ts +5 -5
- package/umd/keplergl.min.js +1279 -1295
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
var _regeneratorRuntime2 = require("@babel/runtime/regenerator");
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
6
|
Object.defineProperty(exports, "__esModule", {
|
|
6
7
|
value: true
|
|
7
8
|
});
|
|
8
9
|
exports.layerColors = exports.defaultGetFieldValue = exports["default"] = exports.colorMaker = exports.OVERLAY_TYPE_CONST = exports.LAYER_ID_LENGTH = void 0;
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
12
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
13
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
14
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
12
15
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
15
17
|
var _core = require("@deck.gl/core");
|
|
16
18
|
var _deckglArrowLayers = require("@kepler.gl/deckgl-arrow-layers");
|
|
17
19
|
var _extensions = require("@deck.gl/extensions");
|
|
@@ -21,10 +23,13 @@ var _keymirror = _interopRequireDefault(require("keymirror"));
|
|
|
21
23
|
var arrow = _interopRequireWildcard(require("apache-arrow"));
|
|
22
24
|
var _defaultLayerIcon = _interopRequireDefault(require("./default-layer-icon"));
|
|
23
25
|
var _layerUpdate = require("./layer-update");
|
|
26
|
+
var _layerUtils = require("./layer-utils");
|
|
24
27
|
var _constants = require("@kepler.gl/constants");
|
|
25
28
|
var _utils = require("@kepler.gl/utils");
|
|
26
29
|
var _commonUtils = require("@kepler.gl/common-utils");
|
|
27
30
|
var _lodash = _interopRequireDefault(require("lodash.memoize"));
|
|
31
|
+
var _getApplicationConfig; // SPDX-License-Identifier: MIT
|
|
32
|
+
// Copyright contributors to the kepler.gl project
|
|
28
33
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
29
34
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
30
35
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
@@ -32,8 +37,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
|
|
|
32
37
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
33
38
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
34
39
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
35
|
-
var _marked = /*#__PURE__*/
|
|
36
|
-
// Copyright contributors to the kepler.gl project
|
|
40
|
+
var _marked = /*#__PURE__*/_regeneratorRuntime2.mark(generateColor);
|
|
37
41
|
/**
|
|
38
42
|
* Approx. number of points to sample in a large data set
|
|
39
43
|
*/
|
|
@@ -42,8 +46,9 @@ var MAX_SAMPLE_SIZE = 5000;
|
|
|
42
46
|
var defaultDomain = [0, 1];
|
|
43
47
|
var dataFilterExtension = new _extensions.DataFilterExtension({
|
|
44
48
|
filterSize: _constants.MAX_GPU_FILTERS,
|
|
49
|
+
// `countItems` option. It enables the GPU to report the number of objects that pass the filter criteria via the `onFilteredItemsChange` callback.
|
|
45
50
|
// @ts-expect-error not typed
|
|
46
|
-
countItems:
|
|
51
|
+
countItems: (_getApplicationConfig = (0, _utils.getApplicationConfig)().useOnFilteredItemsChange) !== null && _getApplicationConfig !== void 0 ? _getApplicationConfig : false
|
|
47
52
|
});
|
|
48
53
|
|
|
49
54
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -333,6 +338,7 @@ var Layer = /*#__PURE__*/function () {
|
|
|
333
338
|
get: function get() {
|
|
334
339
|
return null;
|
|
335
340
|
}
|
|
341
|
+
|
|
336
342
|
/*
|
|
337
343
|
* Given a dataset, automatically find props to create layer based on it
|
|
338
344
|
* and return the props and previous found layers.
|
|
@@ -431,7 +437,7 @@ var Layer = /*#__PURE__*/function () {
|
|
|
431
437
|
var _ref = ((_this$columnPairs2 = this.columnPairs) === null || _this$columnPairs2 === void 0 ? void 0 : _this$columnPairs2[key]) || {},
|
|
432
438
|
pair = _ref.pair,
|
|
433
439
|
fieldPairKey = _ref.fieldPairKey;
|
|
434
|
-
if (typeof fieldPairKey === 'string' && !
|
|
440
|
+
if (typeof fieldPairKey === 'string' && !fieldPairs[fieldPairKey]) {
|
|
435
441
|
// do not allow `key: undefined` to creep into the `updatedColumn` object
|
|
436
442
|
return this.config.columns;
|
|
437
443
|
}
|
|
@@ -543,10 +549,12 @@ var Layer = /*#__PURE__*/function () {
|
|
|
543
549
|
* When change layer type, try to copy over layer configs as much as possible
|
|
544
550
|
* @param configToCopy - config to copy over
|
|
545
551
|
* @param visConfigSettings - visConfig settings of config to copy
|
|
552
|
+
* @param datasets - current datasets.
|
|
553
|
+
* @param defaultLayerProps - default layer creation configurations for current layer and datasets.
|
|
546
554
|
*/
|
|
547
555
|
}, {
|
|
548
556
|
key: "assignConfigToLayer",
|
|
549
|
-
value: function assignConfigToLayer(configToCopy, visConfigSettings) {
|
|
557
|
+
value: function assignConfigToLayer(configToCopy, visConfigSettings, datasets, defaultLayerProps) {
|
|
550
558
|
var _this = this;
|
|
551
559
|
// don't deep merge visualChannel field
|
|
552
560
|
// don't deep merge color range, reversed: is not a key by default
|
|
@@ -574,16 +582,25 @@ var Layer = /*#__PURE__*/function () {
|
|
|
574
582
|
|
|
575
583
|
// update columNode based on new columns
|
|
576
584
|
if (this.config.columnMode && this.supportedColumnModes) {
|
|
577
|
-
var
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
585
|
+
var _satisfiedColumnMode;
|
|
586
|
+
var dataset = datasets === null || datasets === void 0 ? void 0 : datasets[this.config.dataId];
|
|
587
|
+
// try to find a mode with all requied columns from the source config
|
|
588
|
+
var satisfiedColumnMode = (0, _layerUtils.getSatisfiedColumnMode)(this.supportedColumnModes, copied.columns, dataset === null || dataset === void 0 ? void 0 : dataset.fields);
|
|
589
|
+
|
|
590
|
+
// if no suitable column mode found or no such columMode exists for the layer
|
|
591
|
+
// then try use one of the automatically detected layer configs
|
|
592
|
+
if (!satisfiedColumnMode) {
|
|
593
|
+
var options = [].concat((0, _toConsumableArray2["default"])((defaultLayerProps === null || defaultLayerProps === void 0 ? void 0 : defaultLayerProps.props) || []), (0, _toConsumableArray2["default"])((defaultLayerProps === null || defaultLayerProps === void 0 ? void 0 : defaultLayerProps.altProps) || []));
|
|
594
|
+
if (options.length) {
|
|
595
|
+
// Use the first of the default configurations
|
|
596
|
+
var defaultColumnConfig = options[0].columns;
|
|
597
|
+
satisfiedColumnMode = (0, _layerUtils.getSatisfiedColumnMode)(this.supportedColumnModes, defaultColumnConfig, dataset === null || dataset === void 0 ? void 0 : dataset.fields);
|
|
598
|
+
if (satisfiedColumnMode) {
|
|
599
|
+
copied.columns = _objectSpread(_objectSpread({}, copied.columns), defaultColumnConfig);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
copied.columnMode = ((_satisfiedColumnMode = satisfiedColumnMode) === null || _satisfiedColumnMode === void 0 ? void 0 : _satisfiedColumnMode.key) || copied.columnMode;
|
|
587
604
|
}
|
|
588
605
|
this.updateLayerConfig(copied);
|
|
589
606
|
// validate visualChannel field type and scale types
|
|
@@ -903,7 +920,7 @@ var Layer = /*#__PURE__*/function () {
|
|
|
903
920
|
}
|
|
904
921
|
}, {
|
|
905
922
|
key: "accessVSFieldValue",
|
|
906
|
-
value: function accessVSFieldValue(
|
|
923
|
+
value: function accessVSFieldValue(_field, _indexKey) {
|
|
907
924
|
return defaultGetFieldValue;
|
|
908
925
|
}
|
|
909
926
|
/**
|
|
@@ -1518,4 +1535,4 @@ var Layer = /*#__PURE__*/function () {
|
|
|
1518
1535
|
}]);
|
|
1519
1536
|
}();
|
|
1520
1537
|
var _default = exports["default"] = Layer;
|
|
1521
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZGVja2dsQXJyb3dMYXllcnMiLCJfZXh0ZW5zaW9ucyIsIl9sYXllcnMiLCJfd2luZG93IiwiX2tleW1pcnJvciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2RlZmF1bHRMYXllckljb24iLCJfbGF5ZXJVcGRhdGUiLCJfY29uc3RhbnRzIiwiX3V0aWxzIiwiX2NvbW1vblV0aWxzIiwiX2xvZGFzaCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfbWFya2VkIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsImdlbmVyYXRlQ29sb3IiLCJMQVlFUl9JRF9MRU5HVEgiLCJleHBvcnRzIiwiTUFYX1NBTVBMRV9TSVpFIiwiZGVmYXVsdERvbWFpbiIsImRhdGFGaWx0ZXJFeHRlbnNpb24iLCJEYXRhRmlsdGVyRXh0ZW5zaW9uIiwiZmlsdGVyU2l6ZSIsIk1BWF9HUFVfRklMVEVSUyIsImNvdW50SXRlbXMiLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiaWRlbnRpdHkiLCJkZWZhdWx0R2V0RmllbGRWYWx1ZSIsImZpZWxkIiwidmFsdWVBY2Nlc3NvciIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImtleW1pcnJvciIsImRlY2tnbCIsIm1hcGJveGdsIiwibGF5ZXJDb2xvcnMiLCJ2YWx1ZXMiLCJEYXRhVml6Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsIndyYXAiLCJnZW5lcmF0ZUNvbG9yJCIsIl9jb250ZXh0IiwicHJldiIsInN0b3AiLCJjb2xvck1ha2VyIiwiTGF5ZXIiLCJwcm9wcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJpZCIsImdlbmVyYXRlSGFzaElkIiwibWV0YSIsInZpc0NvbmZpZ1NldHRpbmdzIiwiY29uZmlnIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiY29sdW1uTW9kZSIsInN1cHBvcnRlZENvbHVtbk1vZGVzIiwiX3N1cHBvcnRlZENvbHVtbk1vZGVzIiwia2V5IiwiY29sdW1ucyIsImdldExheWVyQ29sdW1ucyIsImlzVmFsaWQiLCJlcnJvck1lc3NhZ2UiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIl9jcmVhdGVDbGFzczIiLCJEZWZhdWx0TGF5ZXJJY29uIiwidHlwZSIsInJlZHVjZSIsImFjYyIsIm9iaiIsInJlcXVpcmVkQ29sdW1ucyIsImNvbmNhdCIsIm9wdGlvbmFsQ29sdW1ucyIsImNvbG9yIiwicHJvcGVydHkiLCJzY2FsZSIsImRvbWFpbiIsInJhbmdlIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwibnVsbFZhbHVlIiwiTk9fVkFMVUVfQ09MT1IiLCJkZWZhdWx0VmFsdWUiLCJzaXplIiwibGF0IiwicGFpciIsImZpZWxkUGFpcktleSIsImxuZyIsImFsdGl0dWRlIiwiYWx0IiwibGF0MCIsImxuZzAiLCJhbHQwIiwibGF0MSIsImxuZzEiLCJhbHQxIiwiX3Byb3BzJGlzVmlzaWJsZSIsIl9wcm9wcyRpc0NvbmZpZ0FjdGl2ZSIsIl9wcm9wcyRoaWRkZW4iLCJkYXRhSWQiLCJsYWJlbCIsIkRFRkFVTFRfTEFZRVJfTEFCRUwiLCJpc1Zpc2libGUiLCJpc0NvbmZpZ0FjdGl2ZSIsImhpZ2hsaWdodENvbG9yIiwiREVGQVVMVF9ISUdITElHSFRfQ09MT1IiLCJoaWRkZW4iLCJjb2xvckZpZWxkIiwiY29sb3JEb21haW4iLCJjb2xvclNjYWxlIiwiU0NBTEVfVFlQRVMiLCJxdWFudGlsZSIsInNpemVEb21haW4iLCJzaXplU2NhbGUiLCJsaW5lYXIiLCJzaXplRmllbGQiLCJ2aXNDb25maWciLCJ0ZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJjb2xvclVJIiwiREVGQVVMVF9DT0xPUl9VSSIsImNvbG9yUmFuZ2UiLCJhbmltYXRpb24iLCJlbmFibGVkIiwiZ2V0VmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uIiwiY2hhbm5lbCIsInZpc3VhbENoYW5uZWxzIiwibWVhc3VyZSIsInVuZGVmaW5lZCIsInJhbmdlU2V0dGluZ3MiLCJmaWVsZFNldHRpbmdzIiwiZGlzcGxheU5hbWUiLCJkZWZhdWx0TWVhc3VyZSIsImFzc2lnbkNvbHVtbiIsIl90aGlzJGNvbmZpZyRjb2x1bW5zIiwidXBkYXRlIiwiZmllbGRJZHgiLCJhc3NpZ25Db2x1bW5QYWlycyIsImZpZWxkUGFpcnMiLCJfdGhpcyRjb2x1bW5QYWlycyIsIl90aGlzJGNvbHVtblBhaXJzMiIsImNvbHVtblBhaXJzIiwiX3JlZiIsInVwZGF0ZWRDb2x1bW4iLCJwYXJ0bmVyS2V5cyIsInRvQXJyYXkiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIl90aGlzJGNvbHVtblBhaXJzMyIsIl90aGlzJGNvbHVtblBhaXJzNCIsInBhcnRuZXJLZXkiLCJfdGhpcyRjb2x1bW5QYWlyczUiLCJlcnIiLCJnZXRab29tRmFjdG9yIiwiX3JlZjIiLCJ6b29tIiwiX3JlZjIkem9vbU9mZnNldCIsInpvb21PZmZzZXQiLCJNYXRoIiwicG93IiwibWF4IiwiZ2V0RWxldmF0aW9uWm9vbUZhY3RvciIsIl9yZWYzIiwiX3JlZjMkem9vbU9mZnNldCIsIl90aGlzJGNvbmZpZyR2aXNDb25maSIsImZpeGVkSGVpZ2h0IiwiZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiYW5pbWF0aW9uQ29uZmlnIiwicmVuZGVyTGF5ZXIiLCJnZXRIb3ZlckRhdGEiLCJvYmplY3QiLCJkYXRhQ29udGFpbmVyIiwiZmllbGRzIiwiaG92ZXJJbmZvIiwicm93IiwiZ2V0RmlsdGVyZWRJdGVtQ291bnQiLCJmaXJzdExheWVyIiwiYXNzaWduQ29uZmlnVG9MYXllciIsImNvbmZpZ1RvQ29weSIsIl90aGlzIiwic2hhbGxvd0NvcHkiLCJ2Iiwibm90VG9Db3B5IiwiZ3JvdXAiLCJjdXJyZW50Q29uZmlnIiwiY29waWVkIiwiY29weUxheWVyQ29uZmlnIiwiX3RoaXMkc3VwcG9ydGVkQ29sdW1uIiwic2F0aXNmaWVkQ29sdW1uTW9kZSIsImZpbmQiLCJtb2RlIiwiX21vZGUkcmVxdWlyZWRDb2x1bW5zIiwiZXZlcnkiLCJyZXF1cmllZENvbCIsIl9jb3BpZWQkY29sdW1ucyIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX3RoaXMyIiwiX3JlZjQiLCJfcmVmNCRzaGFsbG93Q29weSIsIl9yZWY0JG5vdFRvQ29weSIsImlzUGxhaW5PYmplY3QiLCJpbmNsdWRlcyIsIm5vdE51bGxvclVuZGVmaW5lZCIsInJlZ2lzdGVyVmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdzIiwiX3RoaXMzIiwiaXRlbSIsImNvbmZpZ0l0ZW0iLCJMQVlFUl9WSVNfQ09ORklHUyIsIl90eXBlb2YyIiwicCIsInByb3RvdHlwZSIsInByb3BzQ29sdW1ucyIsImNvbHVtblZhbGlkYXRvcnMiLCJyZXF1aXJlZCIsInJlcXVpcmVkTGF5ZXJDb2x1bW5zIiwiYWNjdSIsIl9wcm9wc0NvbHVtbnMka2V5JHZhbCIsIl9wcm9wc0NvbHVtbnMka2V5IiwiX3Byb3BzQ29sdW1ucyRrZXkkZmllIiwiX3Byb3BzQ29sdW1ucyRrZXkyIiwiX3Byb3BzQ29sdW1ucyRrZXkkdmFsMiIsIl9wcm9wc0NvbHVtbnMka2V5MyIsIl9wcm9wc0NvbHVtbnMka2V5JGZpZTIiLCJfcHJvcHNDb2x1bW5zJGtleTQiLCJ2YWxpZGF0b3IiLCJvcHRpb25hbCIsIl9wcm9wc0NvbHVtbnMka2V5JHZhbDMiLCJfcHJvcHNDb2x1bW5zJGtleTUiLCJfcHJvcHNDb2x1bW5zJGtleSRmaWUzIiwiX3Byb3BzQ29sdW1ucyRrZXk2IiwibmV3Q29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJwcm9wIiwiX3RoaXMkY29uZmlnIiwicHJldmlvdXMiLCJjb2xvclVJUHJvcCIsImVudHJpZXMiLCJfcmVmNSIsIl9yZWY2IiwiX3NsaWNlZFRvQXJyYXkyIiwiaXNDb2xvclJhbmdlIiwiY29sb3JzIiwidXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZSIsInVwZGF0ZUNvbG9yUmFuZ2VCeUNvbG9yVUkiLCJ1cGRhdGVDdXN0b21QYWxldHRlIiwiX25ld0NvbmZpZyRjb2xvclJhbmdlIiwiX25ld0NvbmZpZyRjb2xvclJhbmdlMiIsImNvbG9yUmFuZ2VDb25maWciLCJjdXN0b20iLCJjdXN0b21CcmVha3MiLCJjdXN0b21QYWxldHRlIiwiX3RoaXMkY29uZmlnMiIsImNvbG9yTWFwIiwiY2hhbm5lbEtleSIsIkNvbnNvbGUiLCJ3YXJuIiwiaW5pdGlhbGl6ZUxheWVyQ29sb3JNYXAiLCJpbml0aWFsaXplQ3VzdG9tUGFsZXR0ZSIsIl9uZXdDb25maWckY3VzdG9tUGFsZSIsIl90aGlzJGNvbmZpZzMiLCJpc0N1c3RvbSIsImNhdGVnb3J5IiwiY3VzdG9tU3RlcHNDaGFuZ2VkIiwic2hvd0Ryb3Bkb3duIiwic3RlcHMiLCJyZXZlcnNlZCIsIkJvb2xlYW4iLCJzaG91bGRVcGRhdGUiLCJzb21lIiwiX3RoaXMkY29uZmlnNCIsImlzQ3VzdG9tQ29sb3JSZXZlcnNlZCIsInVwZGF0ZUN1c3RvbUNvbG9yUmFuZ2VCeUNvbG9yVUkiLCJ1cGRhdGVDb2xvclJhbmdlQnlNYXRjaGluZ1BhbGV0dGUiLCJoYXNDb2x1bW5WYWx1ZSIsImNvbHVtbiIsImhhc1JlcXVpcmVkQ29sdW1uIiwiaGFzQWxsQ29sdW1ucyIsIl90aGlzNCIsIl90aGlzJGNvbmZpZzUiLCJfY3VycmVudENvbHVtbk1vZGVzJHIiLCJjdXJyZW50Q29sdW1uTW9kZXMiLCJjb2xNb2RlIiwiY29sS2V5IiwiaGFzTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiZGF0YSIsIm51bVJvd3MiLCJpc1ZhbGlkVG9TYXZlIiwic2hvdWxkUmVuZGVyTGF5ZXIiLCJnZXRDb2xvclNjYWxlIiwiY3VzdG9tT3JkaW5hbCIsImdldENhdGVnb3JpY2FsQ29sb3JTY2FsZSIsImhhc0NvbG9yTWFwIiwiX2NvbG9yUmFuZ2UkY29sb3JNYXAiLCJjTWFwIiwiTWFwIiwiX3JlZjciLCJfcmVmOCIsImsiLCJzY2FsZVR5cGUiLCJvcmRpbmFsIiwiZ2V0U2NhbGVGdW5jdGlvbiIsInVua25vd24iLCJVTktOT1dOX0NPTE9SX0tFWSIsImdldFZpc0NoYW5uZWxTY2FsZSIsImFjY2Vzc1ZTRmllbGRWYWx1ZSIsImluZGV4S2V5IiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiX3JlZjkiLCJfdGhpczUiLCJfcmVmOSRkYXRhQWNjZXNzb3IiLCJkYXRhQWNjZXNzb3IiLCJhdHRyaWJ1dGVBY2Nlc3NvcnMiLCJfdGhpczUkdmlzdWFsQ2hhbm5lbHMiLCJmaXhlZCIsImFjY2Vzc29yIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJzaG91bGRHZXRTY2FsZSIsImlzRml4ZWQiLCJzY2FsZUZ1bmN0aW9uIiwiZ2V0RmllbGRWYWx1ZSIsImJ5Wm9vbSIsIm1lbW9pemUiLCJ6Iiwic2NhbGVGdW5jIiwiZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZSIsImlzRG9tYWluUXVhbnRpbGUiLCJ6U3RlcHMiLCJnZXRTY2FsZSIsImdldFNjYWxlQnlab29tIiwic2NhbGVEb21haW4iLCJnZXREb21haW5TdGVwc2J5Wm9vbSIsInF1YW50aWxlcyIsInRocmVzaG9sZHMiLCJnZXRUaHJlc2hvbGRzRnJvbVF1YW50aWxlcyIsImlzRG9tYWluU3RvcHMiLCJzdG9wcyIsIlNDQUxFX0ZVTkMiLCJnZXRQb2ludHNCb3VuZHMiLCJnZXRQb3NpdGlvbiIsInNhbXBsZURhdGEiLCJnZXRTYW1wbGVDb250YWluZXJEYXRhIiwicG9pbnRzIiwibWFwSW5kZXgiLCJsYXRCb3VuZHMiLCJnZXRMYXRMbmdCb3VuZHMiLCJsbmdCb3VuZHMiLCJnZXRDaGFuZ2VkVHJpZ2dlcnMiLCJkYXRhVXBkYXRlVHJpZ2dlcnMiLCJ0cmlnZ2VyQ2hhbmdlZCIsImRpZmZVcGRhdGVUcmlnZ2VycyIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJnZXRWYWx1ZSIsImF0dHJpYnV0ZVZhbHVlIiwidXBkYXRlTWV0YSIsImdldERhdGFVcGRhdGVUcmlnZ2VycyIsIl9yZWYxMCIsImZpbHRlcmVkSW5kZXgiLCJnZXREYXRhIiwiZGF0YXNldElkIiwiZ2V0TWV0YSIsInRsIiwidXBkYXRlRGF0YSIsImxheWVyRGF0YXNldCIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJ1cGRhdGVMYXllck1ldGEiLCJjYWxjdWxhdGVEYXRhQXR0cmlidXRlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJuZXdGaWx0ZXIiLCJfdGhpczYiLCJ0YWJsZSIsImdldERhdGFzZXQiLCJ1cGRhdGVkRG9tYWluIiwiY2FsY3VsYXRlTGF5ZXJEb21haW4iLCJ2YWxpZGF0ZUZpZWxkVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwic3VwcG9ydGVkRmllbGRUeXBlcyIsImNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzIiwiQ0hBTk5FTF9TQ0FMRV9TVVBQT1JURURfRklFTERTIiwic2NhbGVPcHRpb25zIiwiZ2V0U2NhbGVPcHRpb25zIiwiRklFTERfT1BUUyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsImRhdGFzZXQiLCJnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMiLCJfdGhpczciLCJ1cGRhdGVUcmlnZ2VycyIsImdldENvbHVtbkxheWVyRG9tYWluIiwiaGFzSG92ZXJlZE9iamVjdCIsIm9iamVjdEluZm8iLCJpc0xheWVySG92ZXJlZCIsIl9vYmplY3RJbmZvJGxheWVyIiwicGlja2VkIiwibGF5ZXIiLCJnZXRSYWRpdXNTY2FsZUJ5Wm9vbSIsIm1hcFN0YXRlIiwiZml4ZWRSYWRpdXMiLCJyYWRpdXNDaGFubmVsIiwidmMiLCJyYWRpdXMiLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJfdGhpczgiLCJub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMiLCJnZXRCcnVzaGluZ0V4dGVuc2lvblByb3BzIiwiaW50ZXJhY3Rpb25Db25maWciLCJicnVzaGluZ1RhcmdldCIsImJydXNoIiwiYXV0b0hpZ2hsaWdodCIsImJydXNoaW5nUmFkaXVzIiwiYnJ1c2hpbmdFbmFibGVkIiwiZ2V0RGVmYXVsdERlY2tMYXllclByb3BzIiwiX3JlZjEyIiwiaWR4IiwiZ3B1RmlsdGVyIiwibGF5ZXJDYWxsYmFja3MiLCJ2aXNpYmxlIiwiY29vcmRpbmF0ZVN5c3RlbSIsIkNPT1JESU5BVEVfU1lTVEVNIiwiTE5HTEFUIiwicGlja2FibGUiLCJ3cmFwTG9uZ2l0dWRlIiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImRyYWdSb3RhdGUiLCJlbmFibGUzZCIsIm9wYWNpdHkiLCJleHRlbnNpb25zIiwiZmlsdGVyUmFuZ2UiLCJvbkZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwicmVuZGVyVGV4dExhYmVsTGF5ZXIiLCJfcmVmMTMiLCJyZW5kZXJPcHRzIiwiX3RoaXM5IiwiZ2V0RmlsdGVyZWQiLCJnZXRQaXhlbE9mZnNldCIsImJhY2tncm91bmRQcm9wcyIsInNoYXJlZFByb3BzIiwiVGV4dExheWVyQ2xhc3MiLCJUYWJsZSIsIkdlb0Fycm93VGV4dExheWVyIiwiVGV4dExheWVyIiwidGV4dExhYmVscyIsImdldFRleHQiLCJfdGV4dExhYmVsJGkkZmllbGQiLCJfdGV4dExhYmVsJGkkZmllbGQyIiwiYmFja2dyb3VuZCIsImNoYXJhY3RlclNldCIsImdldFNpemUiLCJQUk9KRUNURURfUElYRUxfU0laRV9NVUxUSVBMSUVSIiwiZ2V0VGV4dEFuY2hvciIsImFuY2hvciIsImdldEFsaWdubWVudEJhc2VsaW5lIiwiYWxpZ25tZW50IiwiZ2V0Q29sb3IiLCJvdXRsaW5lV2lkdGgiLCJURVhUX09VVExJTkVfTVVMVElQTElFUiIsIm91dGxpbmVDb2xvciIsImdldEJhY2tncm91bmRDb2xvciIsImJhY2tncm91bmRDb2xvciIsImZvbnRTZXR0aW5ncyIsInNkZiIsImdldEZpbHRlclZhbHVlIiwiZ2V0UmFkaXVzIiwiX3N1YkxheWVyUHJvcHMiLCJjdWxsIiwia2VwbGVyVGFibGUiLCJnZXRMZWdlbmRWaXN1YWxDaGFubmVscyIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsImZvdW5kTGF5ZXJzIiwiZmluZERlZmF1bHRDb2x1bW5GaWVsZCIsImRlZmF1bHRGaWVsZHMiLCJhbGxGaWVsZHMiLCJyZXF1aXJlZEZpZWxkcyIsImdldEFsbFBvc3NpYmxlQ29sdW1uUGFpcnMiLCJhbGxLZXlzIiwicG9pbnRlcnMiLCJjb3VudFBlcktleSIsInBhaXJzIiwiaW5jcmVtZW50UG9pbnRlcnMiLCJuZXdQYWlyIiwiY3V1ciIsInB0cyIsImNvdW50cyIsImMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Q09PUkRJTkFURV9TWVNURU19IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtHZW9BcnJvd1RleHRMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtYXJyb3ctbGF5ZXJzJztcbmltcG9ydCB7RGF0YUZpbHRlckV4dGVuc2lvbn0gZnJvbSAnQGRlY2suZ2wvZXh0ZW5zaW9ucyc7XG5pbXBvcnQge1RleHRMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBrZXltaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IERlZmF1bHRMYXllckljb24gZnJvbSAnLi9kZWZhdWx0LWxheWVyLWljb24nO1xuaW1wb3J0IHtkaWZmVXBkYXRlVHJpZ2dlcnN9IGZyb20gJy4vbGF5ZXItdXBkYXRlJztcblxuaW1wb3J0IHtcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyxcbiAgREVGQVVMVF9DT0xPUl9VSSxcbiAgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gIERFRkFVTFRfTEFZRVJfTEFCRUwsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRGF0YVZpekNvbG9ycyxcbiAgRklFTERfT1BUUyxcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgTk9fVkFMVUVfQ09MT1IsXG4gIFBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIsXG4gIFNDQUxFX0ZVTkMsXG4gIFNDQUxFX1RZUEVTLFxuICBURVhUX09VVExJTkVfTVVMVElQTElFUixcbiAgVU5LTk9XTl9DT0xPUl9LRVlcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgRG9tYWluUXVhbnRpbGVzLFxuICBnZXRMYXRMbmdCb3VuZHMsXG4gIGdldFNhbXBsZUNvbnRhaW5lckRhdGEsXG4gIGhhc0NvbG9yTWFwLFxuICBoZXhUb1JnYixcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNEb21haW5TdG9wcyxcbiAgdXBkYXRlQ29sb3JSYW5nZUJ5TWF0Y2hpbmdQYWxldHRlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgbm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge0RhdGFzZXRzLCBHcHVGaWx0ZXIsIEtlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0ZWRCaW4sXG4gIENvbG9yUmFuZ2UsXG4gIENvbG9yVUksXG4gIEZpZWxkLFxuICBGaWx0ZXIsXG4gIEdldFZpc0NoYW5uZWxTY2FsZVJldHVyblR5cGUsXG4gIExheWVyVmlzQ29uZmlnU2V0dGluZ3MsXG4gIE1hcFN0YXRlLFxuICBBbmltYXRpb25Db25maWcsXG4gIEtlcGxlckxheWVyLFxuICBMYXllckJhc2VDb25maWcsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW4sXG4gIENvbHVtblBhaXJzLFxuICBDb2x1bW5MYWJlbHMsXG4gIFN1cHBvcnRlZENvbHVtbk1vZGUsXG4gIEZpZWxkUGFpcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgUkdCQ29sb3IsXG4gIFZhbHVlT2YsXG4gIFZpc3VhbENoYW5uZWwsXG4gIFZpc3VhbENoYW5uZWxzLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBWaXN1YWxDaGFubmVsRmllbGQsXG4gIFZpc3VhbENoYW5uZWxTY2FsZVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGdldFNjYWxlRnVuY3Rpb24sXG4gIGluaXRpYWxpemVMYXllckNvbG9yTWFwLFxuICBnZXRDYXRlZ29yaWNhbENvbG9yU2NhbGUsXG4gIHVwZGF0ZUN1c3RvbUNvbG9yUmFuZ2VCeUNvbG9yVUlcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gubWVtb2l6ZSc7XG5pbXBvcnQge1xuICBpbml0aWFsaXplQ3VzdG9tUGFsZXR0ZSxcbiAgaXNEb21haW5RdWFudGlsZSxcbiAgZ2V0RG9tYWluU3RlcHNieVpvb20sXG4gIGdldFRocmVzaG9sZHNGcm9tUXVhbnRpbGVzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5leHBvcnQgdHlwZSB7XG4gIEFnZ3JlZ2F0ZWRCaW4sXG4gIExheWVyQmFzZUNvbmZpZyxcbiAgVmlzdWFsQ2hhbm5lbCxcbiAgVmlzdWFsQ2hhbm5lbHMsXG4gIFZpc3VhbENoYW5uZWxEb21haW4sXG4gIFZpc3VhbENoYW5uZWxGaWVsZCxcbiAgVmlzdWFsQ2hhbm5lbFNjYWxlXG59O1xuXG5leHBvcnQgdHlwZSBMYXllckJhc2VDb25maWdQYXJ0aWFsID0ge2RhdGFJZDogTGF5ZXJCYXNlQ29uZmlnWydkYXRhSWQnXX0gJiBQYXJ0aWFsPExheWVyQmFzZUNvbmZpZz47XG5cbmV4cG9ydCB0eXBlIExheWVyQ29sb3JDb25maWcgPSB7XG4gIGNvbG9yRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgY29sb3JEb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIGNvbG9yU2NhbGU6IFZpc3VhbENoYW5uZWxTY2FsZTtcbn07XG5leHBvcnQgdHlwZSBMYXllclNpemVDb25maWcgPSB7XG4gIC8vIGNvbG9yIGJ5IHNpemUsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgc2l6ZURvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjtcbiAgc2l6ZVNjYWxlOiBWaXN1YWxDaGFubmVsU2NhbGU7XG4gIHNpemVGaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkO1xufTtcbmV4cG9ydCB0eXBlIExheWVySGVpZ2h0Q29uZmlnID0ge1xuICBoZWlnaHRGaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkO1xuICBoZWlnaHREb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIGhlaWdodFNjYWxlOiBWaXN1YWxDaGFubmVsU2NhbGU7XG59O1xuZXhwb3J0IHR5cGUgTGF5ZXJTdHJva2VDb2xvckNvbmZpZyA9IHtcbiAgc3Ryb2tlQ29sb3JGaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkO1xuICBzdHJva2VDb2xvckRvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjtcbiAgc3Ryb2tlQ29sb3JTY2FsZTogVmlzdWFsQ2hhbm5lbFNjYWxlO1xufTtcbmV4cG9ydCB0eXBlIExheWVyQ292ZXJhZ2VDb25maWcgPSB7XG4gIGNvdmVyYWdlRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgY292ZXJhZ2VEb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIGNvdmVyYWdlU2NhbGU6IFZpc3VhbENoYW5uZWxTY2FsZTtcbn07XG5leHBvcnQgdHlwZSBMYXllclJhZGl1c0NvbmZpZyA9IHtcbiAgcmFkaXVzRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgcmFkaXVzRG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluO1xuICByYWRpdXNTY2FsZTogVmlzdWFsQ2hhbm5lbFNjYWxlO1xufTtcbmV4cG9ydCB0eXBlIExheWVyV2VpZ2h0Q29uZmlnID0ge1xuICB3ZWlnaHRGaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkO1xufTtcblxuZXhwb3J0IHR5cGUgVmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBtZWFzdXJlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIENvbHVtblZhbGlkYXRvciA9IChjb2x1bW46IExheWVyQ29sdW1uLCBjb2x1bW5zOiBMYXllckNvbHVtbnMsIGFsbEZpZWxkczogRmllbGRbXSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IHR5cGUgVXBkYXRlVHJpZ2dlcnMgPSB7XG4gIFtrZXk6IHN0cmluZ106IFVwZGF0ZVRyaWdnZXI7XG59O1xuZXhwb3J0IHR5cGUgVXBkYXRlVHJpZ2dlciA9IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufTtcbmV4cG9ydCB0eXBlIExheWVyQm91bmRzID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5leHBvcnQgdHlwZSBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSA9IHtwcm9wczogYW55W107IGZvdW5kTGF5ZXJzPzogYW55W119O1xuLyoqXG4gKiBBcHByb3guIG51bWJlciBvZiBwb2ludHMgdG8gc2FtcGxlIGluIGEgbGFyZ2UgZGF0YSBzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IExBWUVSX0lEX0xFTkdUSCA9IDY7XG5cbmNvbnN0IE1BWF9TQU1QTEVfU0laRSA9IDUwMDA7XG5jb25zdCBkZWZhdWx0RG9tYWluOiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDFdO1xuY29uc3QgZGF0YUZpbHRlckV4dGVuc2lvbiA9IG5ldyBEYXRhRmlsdGVyRXh0ZW5zaW9uKHtcbiAgZmlsdGVyU2l6ZTogTUFYX0dQVV9GSUxURVJTLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vdCB0eXBlZFxuICBjb3VudEl0ZW1zOiB0cnVlXG59KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuY29uc3QgZGVmYXVsdERhdGFBY2Nlc3NvciA9IGRjID0+IGQgPT4gZDtcbmNvbnN0IGlkZW50aXR5ID0gZCA9PiBkO1xuLy8gQ2FuJ3QgdXNlIGZpZWRWYWx1ZUFjY2Vzb3IgYmVjYXVzZSBuZWVkIHRoZSByYXcgZGF0YSB0byByZW5kZXIgdG9vbHRpcFxuLy8gU0hBTjogUmV2aXNpdCBoZXJlXG5leHBvcnQgY29uc3QgZGVmYXVsdEdldEZpZWxkVmFsdWUgPSAoZmllbGQsIGQpID0+IGZpZWxkLnZhbHVlQWNjZXNzb3IoZCk7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX1RZUEVfQ09OU1QgPSBrZXltaXJyb3Ioe1xuICBkZWNrZ2w6IG51bGwsXG4gIG1hcGJveGdsOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JzID0gT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKS5tYXAoaGV4VG9SZ2IpO1xuZnVuY3Rpb24qIGdlbmVyYXRlQ29sb3IoKTogR2VuZXJhdG9yPFJHQkNvbG9yPiB7XG4gIGxldCBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IGxheWVyQ29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGxheWVyQ29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBsYXllckNvbG9yc1tpbmRleCsrXTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBMYXllckluZm9Nb2RhbCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdGVtcGxhdGU6IFJlYWN0LkZDPHZvaWQ+O1xuICBtb2RhbFByb3BzOiB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb2xvck1ha2VyID0gZ2VuZXJhdGVDb2xvcigpO1xuXG5leHBvcnQgdHlwZSBCYXNlTGF5ZXJDb25zdHJ1Y3RvclByb3BzID0ge1xuICBpZD86IHN0cmluZztcbn0gJiBMYXllckJhc2VDb25maWdQYXJ0aWFsO1xuXG5jbGFzcyBMYXllciBpbXBsZW1lbnRzIEtlcGxlckxheWVyIHtcbiAgaWQ6IHN0cmluZztcbiAgbWV0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdmlzQ29uZmlnU2V0dGluZ3M6IHtcbiAgICBba2V5OiBzdHJpbmddOiBWYWx1ZU9mPExheWVyVmlzQ29uZmlnU2V0dGluZ3M+O1xuICB9O1xuICBjb25maWc6IExheWVyQmFzZUNvbmZpZyAmIFBhcnRpYWw8TGF5ZXJDb2xvckNvbmZpZyAmIExheWVyU2l6ZUNvbmZpZz47XG4gIC8vIFRPRE86IGRlZmluZSBfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzXG4gIF9vbGREYXRhVXBkYXRlVHJpZ2dlcnM6IGFueTtcblxuICBpc1ZhbGlkOiBib29sZWFuO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gIGZpbHRlcmVkSXRlbUNvdW50OiB7XG4gICAgW2RlY2tMYXllcklkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEJhc2VMYXllckNvbnN0cnVjdG9yUHJvcHMpIHtcbiAgICB0aGlzLmlkID0gcHJvcHMuaWQgfHwgZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcbiAgICAvLyBtZXRhXG4gICAgdGhpcy5tZXRhID0ge307XG5cbiAgICAvLyB2aXNDb25maWdTZXR0aW5nc1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3MgPSB7fTtcblxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMpO1xuXG4gICAgLy8gc2V0IGNvbHVtbk1vZGUgZnJvbSBzdXBwb3J0ZWQgY29sdW1uc1xuICAgIGlmICghdGhpcy5jb25maWcuY29sdW1uTW9kZSkge1xuICAgICAgY29uc3Qge3N1cHBvcnRlZENvbHVtbk1vZGVzfSA9IHRoaXM7XG4gICAgICBpZiAoc3VwcG9ydGVkQ29sdW1uTW9kZXM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlID0gc3VwcG9ydGVkQ29sdW1uTW9kZXNbMF0/LmtleTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlbiBzZXQgY29sdW1uLCBjb2x1bW5Nb2RlIHNob3VsZCBhbHJlYWR5IGJlZW4gc2V0XG4gICAgdGhpcy5jb25maWcuY29sdW1ucyA9IHRoaXMuZ2V0TGF5ZXJDb2x1bW5zKHByb3BzLmNvbHVtbnMpO1xuXG4gICAgLy8gZmFsc2UgaW5kaWNhdGVzIHRoYXQgdGhlIGxheWVyIGNhdXNlZCBhbiBlcnJvciwgYW5kIHdhcyBkaXNhYmxlZFxuICAgIHRoaXMuaXNWYWxpZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBudWxsO1xuICAgIC8vIGl0ZW0gY291bnRcbiAgICB0aGlzLmZpbHRlcmVkSXRlbUNvdW50ID0ge307XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCk6IFJlYWN0LkVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVySWNvbjtcbiAgfVxuXG4gIGdldCBvdmVybGF5VHlwZSgpOiBrZXlvZiB0eXBlb2YgT1ZFUkxBWV9UWVBFX0NPTlNUIHtcbiAgICByZXR1cm4gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbDtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB7c3VwcG9ydGVkQ29sdW1uTW9kZXN9ID0gdGhpcztcbiAgICBpZiAoc3VwcG9ydGVkQ29sdW1uTW9kZXMpIHtcbiAgICAgIHJldHVybiBzdXBwb3J0ZWRDb2x1bW5Nb2Rlcy5yZWR1Y2U8c3RyaW5nW10+KFxuICAgICAgICAoYWNjLCBvYmopID0+IChvYmoucmVxdWlyZWRDb2x1bW5zID8gYWNjLmNvbmNhdChvYmoucmVxdWlyZWRDb2x1bW5zKSA6IGFjYyksXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgb3B0aW9uYWxDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB7c3VwcG9ydGVkQ29sdW1uTW9kZXN9ID0gdGhpcztcbiAgICBpZiAoc3VwcG9ydGVkQ29sdW1uTW9kZXMpIHtcbiAgICAgIHJldHVybiBzdXBwb3J0ZWRDb2x1bW5Nb2Rlcy5yZWR1Y2U8c3RyaW5nW10+KFxuICAgICAgICAoYWNjLCBvYmopID0+IChvYmoub3B0aW9uYWxDb2x1bW5zID8gYWNjLmNvbmNhdChvYmoub3B0aW9uYWxDb2x1bW5zKSA6IGFjYyksXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbJ2xhYmVsJywgJ29wYWNpdHknLCAndGhpY2tuZXNzJywgJ2lzVmlzaWJsZScsICdoaWRkZW4nXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpOiBWaXN1YWxDaGFubmVscyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnY29sb3InLFxuICAgICAgICBmaWVsZDogJ2NvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ2NvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdjb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnY29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIG51bGxWYWx1ZTogTk9fVkFMVUVfQ09MT1IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzaXplJyxcbiAgICAgICAgZmllbGQ6ICdzaXplRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3NpemVTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3NpemVEb21haW4nLFxuICAgICAgICByYW5nZTogJ3NpemVSYW5nZScsXG4gICAgICAgIGtleTogJ3NpemUnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5zaXplLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXQgY29sdW1uVmFsaWRhdG9ycygpOiB7W2tleTogc3RyaW5nXTogQ29sdW1uVmFsaWRhdG9yfSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIC8qXG4gICAqIENvbHVtbiBwYWlycyBtYXBzIGxheWVyIGNvbHVtbiB0byBhIHNwZWNpZmljIGZpZWxkIHBhaXJzLFxuICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gbnVsbFxuICAgKi9cbiAgZ2V0IGNvbHVtblBhaXJzKCk6IENvbHVtblBhaXJzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29sdW1uIGxhYmVscyBpZiBpdHMgZGlmZmVyZW50IHRoYW4gY29sdW1uIGtleVxuICAgKi9cbiAgZ2V0IGNvbHVtbkxhYmVscygpOiBDb2x1bW5MYWJlbHMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgcG9pbnQgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgcG9pbnQgYmFzZWQgbGF5ZXJzOiBwb2ludCwgaWNvbiBldGMuXG4gICAqL1xuICBnZXQgZGVmYXVsdFBvaW50Q29sdW1uUGFpcnMoKTogQ29sdW1uUGFpcnMge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQ6IHtwYWlyOiBbJ2xuZycsICdhbHRpdHVkZSddLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzoge3BhaXI6IFsnbGF0JywgJ2FsdGl0dWRlJ10sIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgYWx0aXR1ZGU6IHtwYWlyOiBbJ2xuZycsICdsYXQnXSwgZmllbGRQYWlyS2V5OiAnYWx0aXR1ZGUnfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBEZWZhdWx0IGxpbmsgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgbGluayBiYXNlZCBsYXllcnM6IGFyYywgbGluZSBldGNcbiAgICovXG4gIGdldCBkZWZhdWx0TGlua0NvbHVtblBhaXJzKCk6IENvbHVtblBhaXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0OiB7cGFpcjogWydsbmcnLCAnYWx0J10sIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nOiB7cGFpcjogWydsYXQnLCAnYWx0J10sIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgYWx0OiB7cGFpcjogWydsbmcnLCAnbGF0J10sIGZpZWxkUGFpcktleTogJ2FsdGl0dWRlJ30sXG5cbiAgICAgIGxhdDA6IHtwYWlyOiAnbG5nMCcsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMDoge3BhaXI6ICdsYXQwJywgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBhbHQwOiB7cGFpcjogWydsbmcwJywgJ2xhdDAnXSwgZmllbGRQYWlyS2V5OiAnYWx0aXR1ZGUnfSxcblxuICAgICAgbGF0MToge3BhaXI6ICdsbmcxJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcxOiB7cGFpcjogJ2xhdDEnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfSxcbiAgICAgIGFsdDE6IHtwYWlyOiBbJ2xuZzEnLCAnbGF0MSddLCBmaWVsZFBhaXJLZXk6ICdhbHRpdHVkZSd9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBSZWFjdCBjb21wb25lbnQgZm9yIHRvIHJlbmRlciBsYXllciBpbnN0cnVjdGlvbnMgaW4gYSBtb2RhbFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGFuIG9iamVjdFxuICAgKiBAZXhhbXBsZVxuICAgKiAgcmV0dXJuIHtcbiAgICogICAgaWQ6ICdpY29uSW5mbycsXG4gICAqICAgIHRlbXBsYXRlOiBJY29uSW5mb01vZGFsLFxuICAgKiAgICBtb2RhbFByb3BzOiB7XG4gICAqICAgICAgdGl0bGU6ICdIb3cgdG8gZHJhdyBpY29ucydcbiAgICogICB9O1xuICAgKiB9XG4gICAqL1xuICBnZXQgbGF5ZXJJbmZvTW9kYWwoKTogTGF5ZXJJbmZvTW9kYWwgfCBSZWNvcmQ8c3RyaW5nLCBMYXllckluZm9Nb2RhbD4gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoaWNoIGNvbHVtbiBtb2RlcyB0aGlzIGxheWVyIHN1cHBvcnRzXG4gICAqL1xuICBnZXQgc3VwcG9ydGVkQ29sdW1uTW9kZXMoKTogU3VwcG9ydGVkQ29sdW1uTW9kZVtdIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgc3VwcG9ydGVkRGF0YXNldFR5cGVzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLypcbiAgICogR2l2ZW4gYSBkYXRhc2V0LCBhdXRvbWF0aWNhbGx5IGZpbmQgcHJvcHMgdG8gY3JlYXRlIGxheWVyIGJhc2VkIG9uIGl0XG4gICAqIGFuZCByZXR1cm4gdGhlIHByb3BzIGFuZCBwcmV2aW91cyBmb3VuZCBsYXllcnMuXG4gICAqIEJ5IGRlZmF1bHQsIG5vIGxheWVycyB3aWxsIGJlIGZvdW5kXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKFxuICAgIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICAgIGZvdW5kTGF5ZXJzPzogYW55W11cbiAgKTogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUge1xuICAgIHJldHVybiB7cHJvcHM6IFtdLCBmb3VuZExheWVyc307XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYSBhcnJheSBvZiBwcmVzZXQgcmVxdWlyZWQgY29sdW1uIG5hbWVzXG4gICAqIGZvdW5kIGZpZWxkIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgdG8gc2V0IGFzIGxheWVyIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdEZpZWxkc1xuICAgKiBAcGFyYW0ge29iamVjdFtdfSBhbGxGaWVsZHNcbiAgICogQHJldHVybnMge29iamVjdFtdIHwgbnVsbH0gYWxsIHBvc3NpYmxlIHJlcXVpcmVkIGxheWVyIGNvbHVtbiBwYWlyc1xuICAgKi9cbiAgc3RhdGljIGZpbmREZWZhdWx0Q29sdW1uRmllbGQoZGVmYXVsdEZpZWxkcywgYWxsRmllbGRzKSB7XG4gICAgLy8gZmluZCBhbGwgbWF0Y2hlZCBmaWVsZHMgZm9yIGVhY2ggcmVxdWlyZWQgY29sXG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZGVmYXVsdEZpZWxkcykucmVkdWNlKChwcmV2LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gYWxsRmllbGRzLmZpbHRlcihcbiAgICAgICAgZiA9PiBmLm5hbWUgPT09IGRlZmF1bHRGaWVsZHNba2V5XSB8fCBkZWZhdWx0RmllbGRzW2tleV0uaW5jbHVkZXMoZi5uYW1lKVxuICAgICAgKTtcblxuICAgICAgcHJldltrZXldID0gcmVxdWlyZWRGaWVsZHMubGVuZ3RoXG4gICAgICAgID8gcmVxdWlyZWRGaWVsZHMubWFwKGYgPT4gKHtcbiAgICAgICAgICAgIHZhbHVlOiBmLm5hbWUsXG4gICAgICAgICAgICBmaWVsZElkeDogZi5maWVsZElkeFxuICAgICAgICAgIH0pKVxuICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSk7XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMocmVxdWlyZWRDb2x1bW5zKS5ldmVyeShCb29sZWFuKSkge1xuICAgICAgLy8gaWYgYW55IGZpZWxkIG1pc3NpbmcsIHJldHVybiBudWxsXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRBbGxQb3NzaWJsZUNvbHVtblBhaXJzKHJlcXVpcmVkQ29sdW1ucyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0QWxsUG9zc2libGVDb2x1bW5QYWlycyhyZXF1aXJlZENvbHVtbnMpIHtcbiAgICAvLyBmb3IgbXVsdGlwbGUgbWF0Y2hlZCBmaWVsZCBmb3Igb25lIHJlcXVpcmVkIGNvbHVtbiwgcmV0dXJuIG11bHRpcGxlXG4gICAgLy8gY29tYmluYXRpb25zLCBlLiBnLiBpZiBjb2x1bW4gYSBoYXMgMiBtYXRjaGVkLCBjb2x1bW4gYiBoYXMgMyBtYXRjaGVkXG4gICAgLy8gNiBwb3NzaWJsZSBjb2x1bW4gcGFpcnMgd2lsbCBiZSByZXR1cm5lZFxuICAgIGNvbnN0IGFsbEtleXMgPSBPYmplY3Qua2V5cyhyZXF1aXJlZENvbHVtbnMpO1xuICAgIGNvbnN0IHBvaW50ZXJzID0gYWxsS2V5cy5tYXAoKGssIGkpID0+IChpID09PSBhbGxLZXlzLmxlbmd0aCAtIDEgPyAtMSA6IDApKTtcbiAgICBjb25zdCBjb3VudFBlcktleSA9IGFsbEtleXMubWFwKGsgPT4gcmVxdWlyZWRDb2x1bW5zW2tdLmxlbmd0aCk7XG4gICAgLy8gVE9ETzogQmV0dGVyIHR5cGluZ3NcbiAgICBjb25zdCBwYWlyczogYW55W10gPSBbXTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuICAgIHdoaWxlIChpbmNyZW1lbnRQb2ludGVycyhwb2ludGVycywgY291bnRQZXJLZXksIHBvaW50ZXJzLmxlbmd0aCAtIDEpKSB7XG4gICAgICBjb25zdCBuZXdQYWlyID0gcG9pbnRlcnMucmVkdWNlKChwcmV2LCBjdXVyLCBpKSA9PiB7XG4gICAgICAgIHByZXZbYWxsS2V5c1tpXV0gPSByZXF1aXJlZENvbHVtbnNbYWxsS2V5c1tpXV1bY3V1cl07XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSwge30pO1xuXG4gICAgICBwYWlycy5wdXNoKG5ld1BhaXIpO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG4gICAgLy8gcmVjdXJzaXZlbHkgaW5jcmVtZW50IHBvaW50ZXJzXG4gICAgZnVuY3Rpb24gaW5jcmVtZW50UG9pbnRlcnMocHRzLCBjb3VudHMsIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgcHRzWzBdID09PSBjb3VudHNbMF0gLSAxKSB7XG4gICAgICAgIC8vIG5vdGhpbmcgdG8gaW5jcmVtZW50XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHB0c1tpbmRleF0gKyAxIDwgY291bnRzW2luZGV4XSkge1xuICAgICAgICBwdHNbaW5kZXhdID0gcHRzW2luZGV4XSArIDE7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwdHNbaW5kZXhdID0gMDtcbiAgICAgIHJldHVybiBpbmNyZW1lbnRQb2ludGVycyhwdHMsIGNvdW50cywgaW5kZXggLSAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFpcnM7XG4gIH1cblxuICBzdGF0aWMgaGV4VG9SZ2IoYykge1xuICAgIHJldHVybiBoZXhUb1JnYihjKTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhcbiAgICBwcm9wczogTGF5ZXJCYXNlQ29uZmlnUGFydGlhbFxuICApOiBMYXllckJhc2VDb25maWcgJiBQYXJ0aWFsPExheWVyQ29sb3JDb25maWcgJiBMYXllclNpemVDb25maWc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YUlkOiBwcm9wcy5kYXRhSWQsXG4gICAgICBsYWJlbDogcHJvcHMubGFiZWwgfHwgREVGQVVMVF9MQVlFUl9MQUJFTCxcbiAgICAgIGNvbG9yOiBwcm9wcy5jb2xvciB8fCBjb2xvck1ha2VyLm5leHQoKS52YWx1ZSxcbiAgICAgIC8vIHNldCBjb2x1bW5zIGxhdGVyXG4gICAgICBjb2x1bW5zOiB7fSxcbiAgICAgIGlzVmlzaWJsZTogcHJvcHMuaXNWaXNpYmxlID8/IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogcHJvcHMuaXNDb25maWdBY3RpdmUgPz8gZmFsc2UsXG4gICAgICBoaWdobGlnaHRDb2xvcjogcHJvcHMuaGlnaGxpZ2h0Q29sb3IgfHwgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gICAgICBoaWRkZW46IHByb3BzLmhpZGRlbiA/PyBmYWxzZSxcblxuICAgICAgLy8gVE9ETzogcmVmYWN0b3IgdGhpcyBpbnRvIHNlcGFyYXRlIHZpc3VhbCBDaGFubmVsIGNvbmZpZ1xuICAgICAgLy8gY29sb3IgYnkgZmllbGQsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIGNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBjb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgY29sb3JTY2FsZTogU0NBTEVfVFlQRVMucXVhbnRpbGUsXG5cbiAgICAgIC8vIGNvbG9yIGJ5IHNpemUsIGRvbWFpbiBpcyBzZXQgYnkgZmlsdGVycywgZmllbGQsIHNjYWxlIHR5cGVcbiAgICAgIHNpemVEb21haW46IFswLCAxXSxcbiAgICAgIHNpemVTY2FsZTogU0NBTEVfVFlQRVMubGluZWFyLFxuICAgICAgc2l6ZUZpZWxkOiBudWxsLFxuXG4gICAgICB2aXNDb25maWc6IHt9LFxuXG4gICAgICB0ZXh0TGFiZWw6IFtERUZBVUxUX1RFWFRfTEFCRUxdLFxuXG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIGNvbG9yOiBERUZBVUxUX0NPTE9SX1VJLFxuICAgICAgICBjb2xvclJhbmdlOiBERUZBVUxUX0NPTE9SX1VJXG4gICAgICB9LFxuICAgICAgYW5pbWF0aW9uOiB7ZW5hYmxlZDogZmFsc2V9LFxuICAgICAgLi4uKHByb3BzLmNvbHVtbk1vZGUgPyB7Y29sdW1uTW9kZTogcHJvcHMuY29sdW1uTW9kZX0gOiB7fSlcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgYSB2aXN1YWxDaGFubmVsIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24oa2V5OiBzdHJpbmcpOiBWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24ge1xuICAgIC8vIGUuZy4gbGFiZWw6IENvbG9yLCBtZWFzdXJlOiBWZWhpY2xlIFR5cGVcbiAgICBjb25zdCBjaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1trZXldO1xuICAgIGlmICghY2hhbm5lbCkgcmV0dXJuIHtsYWJlbDogJycsIG1lYXN1cmU6IHVuZGVmaW5lZH07XG4gICAgY29uc3QgcmFuZ2VTZXR0aW5ncyA9IHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbY2hhbm5lbC5yYW5nZV07XG4gICAgY29uc3QgZmllbGRTZXR0aW5ncyA9IHRoaXMuY29uZmlnW2NoYW5uZWwuZmllbGRdO1xuICAgIGNvbnN0IGxhYmVsID0gcmFuZ2VTZXR0aW5ncz8ubGFiZWw7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0eXBlb2YgbGFiZWwgPT09ICdmdW5jdGlvbicgPyBsYWJlbCh0aGlzLmNvbmZpZykgOiBsYWJlbCB8fCAnJyxcbiAgICAgIG1lYXN1cmU6IGZpZWxkU2V0dGluZ3NcbiAgICAgICAgPyBmaWVsZFNldHRpbmdzLmRpc3BsYXlOYW1lIHx8IGZpZWxkU2V0dGluZ3MubmFtZVxuICAgICAgICA6IGNoYW5uZWwuZGVmYXVsdE1lYXN1cmVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIGZpZWxkIHRvIGxheWVyIGNvbHVtbiwgcmV0dXJuIGNvbHVtbiBjb25maWdcbiAgICovXG4gIGFzc2lnbkNvbHVtbihrZXk6IHN0cmluZywgZmllbGQ6IHtuYW1lOiBzdHJpbmc7IGZpZWxkSWR4OiBudW1iZXJ9KTogTGF5ZXJDb2x1bW5zIHtcbiAgICAvLyBmaWVsZCB2YWx1ZSBjb3VsZCBiZSBudWxsIGZvciBvcHRpb25hbCBjb2x1bW5zXG4gICAgY29uc3QgdXBkYXRlID0gZmllbGRcbiAgICAgID8ge1xuICAgICAgICAgIHZhbHVlOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIGZpZWxkSWR4OiBmaWVsZC5maWVsZElkeFxuICAgICAgICB9XG4gICAgICA6IHt2YWx1ZTogbnVsbCwgZmllbGRJZHg6IC0xfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgW2tleV06IHtcbiAgICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucz8uW2tleV0sXG4gICAgICAgIC4uLnVwZGF0ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgcGFpciB0byBjb2x1bW4gY29uZmlnLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKi9cbiAgYXNzaWduQ29sdW1uUGFpcnMoa2V5OiBzdHJpbmcsIGZpZWxkUGFpcnM6IEZpZWxkUGFpcik6IExheWVyQ29sdW1ucyB7XG4gICAgaWYgKCF0aGlzLmNvbHVtblBhaXJzIHx8ICF0aGlzLmNvbHVtblBhaXJzPy5ba2V5XSkge1xuICAgICAgLy8gc2hvdWxkIG5vdCBlbmQgaW4gdGhpcyBzdGF0ZVxuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbHVtbnM7XG4gICAgfVxuICAgIC8vIGtleSA9ICdsYXQnXG4gICAgY29uc3Qge3BhaXIsIGZpZWxkUGFpcktleX0gPSB0aGlzLmNvbHVtblBhaXJzPy5ba2V5XSB8fCB7fTtcblxuICAgIGlmICh0eXBlb2YgZmllbGRQYWlyS2V5ID09PSAnc3RyaW5nJyAmJiAhcGFpcltmaWVsZFBhaXJLZXldKSB7XG4gICAgICAvLyBkbyBub3QgYWxsb3cgYGtleTogdW5kZWZpbmVkYCB0byBjcmVlcCBpbnRvIHRoZSBgdXBkYXRlZENvbHVtbmAgb2JqZWN0XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgICB9XG5cbiAgICAvLyBwYWlyID0gWydsbmcnLCAnYWx0XSB8ICdsbmcnXG4gICAgY29uc3QgdXBkYXRlZENvbHVtbiA9IHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpZWxkUGFpcktleSBjYW4gYmUgc3RyaW5nW10gaGVyZT9cbiAgICAgIFtrZXldOiBmaWVsZFBhaXJzW2ZpZWxkUGFpcktleV1cbiAgICB9O1xuXG4gICAgY29uc3QgcGFydG5lcktleXMgPSB0b0FycmF5KHBhaXIpO1xuICAgIGZvciAoY29uc3QgcGFydG5lcktleSBvZiBwYXJ0bmVyS2V5cykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zW3BhcnRuZXJLZXldICYmXG4gICAgICAgIHRoaXMuY29sdW1uUGFpcnM/LltwYXJ0bmVyS2V5XSAmJlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGZpZWxkUGFpcnNbdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldLmZpZWxkUGFpcktleV1cbiAgICAgICkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHVwZGF0ZWRDb2x1bW5bcGFydG5lcktleV0gPSBmaWVsZFBhaXJzW3RoaXMuY29sdW1uUGFpcnM/LltwYXJ0bmVyS2V5XS5maWVsZFBhaXJLZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkQ29sdW1uO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhIHJhZGl1cyB6b29tIG11bHRpcGxpZXIgdG8gcmVuZGVyIHBvaW50cywgc28gdGhleSBhcmUgdmlzaWJsZSBpbiBhbGwgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwU3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcFN0YXRlLnpvb20gLSBhY3R1YWwgem9vbVxuICAgKiBAcGFyYW0ge251bWJlciB8IHZvaWR9IG1hcFN0YXRlLnpvb21PZmZzZXQgLSB6b29tT2Zmc2V0IHdoZW4gcmVuZGVyIGluIHRoZSBwbG90IGNvbnRhaW5lciBmb3IgZXhwb3J0IGltYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRab29tRmFjdG9yKHt6b29tLCB6b29tT2Zmc2V0ID0gMH0pIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5tYXgoMTQgLSB6b29tICsgem9vbU9mZnNldCwgMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhIGVsZXZhdGlvbiB6b29tIG11bHRpcGxpZXIgdG8gcmVuZGVyIHBvaW50cywgc28gdGhleSBhcmUgdmlzaWJsZSBpbiBhbGwgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwU3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcFN0YXRlLnpvb20gLSBhY3R1YWwgem9vbVxuICAgKiBAcGFyYW0ge251bWJlcj19IG1hcFN0YXRlLnpvb21PZmZzZXQgLSB6b29tT2Zmc2V0IHdoZW4gcmVuZGVyIGluIHRoZSBwbG90IGNvbnRhaW5lciBmb3IgZXhwb3J0IGltYWdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRFbGV2YXRpb25ab29tRmFjdG9yKHt6b29tLCB6b29tT2Zmc2V0ID0gMH06IHt6b29tOiBudW1iZXI7IHpvb21PZmZzZXQ/OiBudW1iZXJ9KTogbnVtYmVyIHtcbiAgICAvLyBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIGlzIHVzZWQgdG8gc3VwcG9ydCBleGlzdGluZyBtYXBzXG4gICAgY29uc3Qge2ZpeGVkSGVpZ2h0LCBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yfSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZztcbiAgICByZXR1cm4gZml4ZWRIZWlnaHQgfHwgZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciA9PT0gZmFsc2VcbiAgICAgID8gMVxuICAgICAgOiBNYXRoLnBvdygyLCBNYXRoLm1heCg4IC0gem9vbSArIHpvb21PZmZzZXQsIDApKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzOiBEYXRhc2V0cywgb2xkTGF5ZXJEYXRhPzogdW5rbm93biwgYW5pbWF0aW9uQ29uZmlnPzogQW5pbWF0aW9uQ29uZmlnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICByZW5kZXJMYXllciguLi5hcmdzOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGdldEhvdmVyRGF0YShcbiAgICBvYmplY3Q6IGFueSxcbiAgICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBmaWVsZHM/OiBGaWVsZFtdLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBhbmltYXRpb25Db25maWc/OiBBbmltYXRpb25Db25maWcsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGhvdmVySW5mbz86IHtpbmRleDogbnVtYmVyfVxuICApOiBhbnkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBlYWNoIGVudHJ5IG9mIGxheWVyRGF0YSBzaG91bGQgaGF2ZSBhbiBpbmRleCBvZiBhIHJvdyBpbiB0aGUgb3JpZ2luYWwgZGF0YSBjb250YWluZXIuXG4gICAgLy8gRWFjaCBsYXllciBjYW4gaW1wbGVtZW50IGl0cyBvd24gZ2V0SG92ZXJEYXRhIG1ldGhvZFxuICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnJvdyhvYmplY3QuaW5kZXgpO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRJdGVtQ291bnQoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgLy8gdXNlIGZpcnN0IGxheWVyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyZWRJdGVtQ291bnQpLmxlbmd0aCkge1xuICAgICAgY29uc3QgZmlyc3RMYXllciA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyZWRJdGVtQ291bnQpWzBdO1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRJdGVtQ291bnRbZmlyc3RMYXllcl07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBXaGVuIGNoYW5nZSBsYXllciB0eXBlLCB0cnkgdG8gY29weSBvdmVyIGxheWVyIGNvbmZpZ3MgYXMgbXVjaCBhcyBwb3NzaWJsZVxuICAgKiBAcGFyYW0gY29uZmlnVG9Db3B5IC0gY29uZmlnIHRvIGNvcHkgb3ZlclxuICAgKiBAcGFyYW0gdmlzQ29uZmlnU2V0dGluZ3MgLSB2aXNDb25maWcgc2V0dGluZ3Mgb2YgY29uZmlnIHRvIGNvcHlcbiAgICovXG4gIGFzc2lnbkNvbmZpZ1RvTGF5ZXIoY29uZmlnVG9Db3B5LCB2aXNDb25maWdTZXR0aW5ncykge1xuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgdmlzdWFsQ2hhbm5lbCBmaWVsZFxuICAgIC8vIGRvbid0IGRlZXAgbWVyZ2UgY29sb3IgcmFuZ2UsIHJldmVyc2VkOiBpcyBub3QgYSBrZXkgYnkgZGVmYXVsdFxuICAgIGNvbnN0IHNoYWxsb3dDb3B5ID0gWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXS5jb25jYXQoXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZmllbGQpXG4gICAgKTtcblxuICAgIC8vIGRvbid0IGNvcHkgb3ZlciBkb21haW4gYW5kIGFuaW1hdGlvblxuICAgIGNvbnN0IG5vdFRvQ29weSA9IFsnYW5pbWF0aW9uJ10uY29uY2F0KE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykubWFwKHYgPT4gdi5kb21haW4pKTtcbiAgICAvLyBpZiByYW5nZSBpcyBmb3IgdGhlIHNhbWUgcHJvcGVydHkgZ3JvdXAgY29weSBpdCwgb3RoZXJ3aXNlLCBub3QgdG8gY29weVxuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY29uZmlnVG9Db3B5LnZpc0NvbmZpZ1t2LnJhbmdlXSAmJlxuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdICYmXG4gICAgICAgIHZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwICE9PSB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3YucmFuZ2VdLmdyb3VwXG4gICAgICApIHtcbiAgICAgICAgbm90VG9Db3B5LnB1c2godi5yYW5nZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgdmlzdWFsQ2hhbm5lbCByYW5nZVxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBjb3BpZWQgPSB0aGlzLmNvcHlMYXllckNvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHksIHtcbiAgICAgIHNoYWxsb3dDb3B5LFxuICAgICAgbm90VG9Db3B5XG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGUgY29sdW1Ob2RlIGJhc2VkIG9uIG5ldyBjb2x1bW5zXG4gICAgaWYgKHRoaXMuY29uZmlnLmNvbHVtbk1vZGUgJiYgdGhpcy5zdXBwb3J0ZWRDb2x1bW5Nb2Rlcykge1xuICAgICAgLy8gZmluZCBhIG1vZGUgd2l0aCBhbGwgcmVxdWllZCBjb2x1bW5zXG4gICAgICBjb25zdCBzYXRpc2ZpZWRDb2x1bW5Nb2RlID0gdGhpcy5zdXBwb3J0ZWRDb2x1bW5Nb2Rlcz8uZmluZChtb2RlID0+IHtcbiAgICAgICAgcmV0dXJuIG1vZGUucmVxdWlyZWRDb2x1bW5zPy5ldmVyeShyZXF1cmllZENvbCA9PiBjb3BpZWQuY29sdW1ucz8uW3JlcXVyaWVkQ29sXT8udmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBjb3BpZWQuY29sdW1uTW9kZSA9IHNhdGlzZmllZENvbHVtbk1vZGU/LmtleSB8fCBjb3BpZWQuY29sdW1uTW9kZTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKGNvcGllZCk7XG4gICAgLy8gdmFsaWRhdGUgdmlzdWFsQ2hhbm5lbCBmaWVsZCB0eXBlIGFuZCBzY2FsZSB0eXBlc1xuICAgIE9iamVjdC5rZXlzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIFJlY3Vyc2l2ZWx5IGNvcHkgY29uZmlnIG92ZXIgdG8gYW4gZW1wdHkgbGF5ZXJcbiAgICogd2hlbiByZWNlaXZlZCBzYXZlZCBjb25maWcsIG9yIGNvcHkgY29uZmlnIG92ZXIgZnJvbSBhIGRpZmZlcmVudCBsYXllciB0eXBlXG4gICAqIG1ha2Ugc3VyZSB0byBvbmx5IGNvcHkgb3ZlciB2YWx1ZSB0byBleGlzdGluZyBrZXlzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjdXJyZW50Q29uZmlnIC0gZXhpc3RpbmcgY29uZmlnIHRvIGJlIG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdUb0NvcHkgLSBuZXcgQ29uZmlnIHRvIGNvcHkgb3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBzaGFsbG93Q29weSAtIGFycmF5IG9mIHByb3BlcnRpZXMgdG8gbm90IHRvIGJlIGRlZXAgY29waWVkXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IG5vdFRvQ29weSAtIGFycmF5IG9mIHByb3BlcnRpZXMgbm90IHRvIGNvcHlcbiAgICogQHJldHVybnMge29iamVjdH0gLSBjb3BpZWQgY29uZmlnXG4gICAqL1xuICBjb3B5TGF5ZXJDb25maWcoXG4gICAgY3VycmVudENvbmZpZyxcbiAgICBjb25maWdUb0NvcHksXG4gICAge3NoYWxsb3dDb3B5ID0gW10sIG5vdFRvQ29weSA9IFtdfToge3NoYWxsb3dDb3B5Pzogc3RyaW5nW107IG5vdFRvQ29weT86IHN0cmluZ1tdfSA9IHt9XG4gICkge1xuICAgIGNvbnN0IGNvcGllZDoge2NvbHVtbk1vZGU/OiBzdHJpbmc7IGNvbHVtbnM/OiBMYXllckNvbHVtbnN9ID0ge307XG4gICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBpc1BsYWluT2JqZWN0KGN1cnJlbnRDb25maWdba2V5XSkgJiZcbiAgICAgICAgaXNQbGFpbk9iamVjdChjb25maWdUb0NvcHlba2V5XSkgJiZcbiAgICAgICAgIXNoYWxsb3dDb3B5LmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgIW5vdFRvQ29weS5pbmNsdWRlcyhrZXkpXG4gICAgICApIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlbHkgYXNzaWduIG9iamVjdCB2YWx1ZVxuICAgICAgICBjb3BpZWRba2V5XSA9IHRoaXMuY29weUxheWVyQ29uZmlnKGN1cnJlbnRDb25maWdba2V5XSwgY29uZmlnVG9Db3B5W2tleV0sIHtcbiAgICAgICAgICBzaGFsbG93Q29weSxcbiAgICAgICAgICBub3RUb0NvcHlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKG5vdE51bGxvclVuZGVmaW5lZChjb25maWdUb0NvcHlba2V5XSkgJiYgIW5vdFRvQ29weS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIC8vIGNvcHlcbiAgICAgICAgY29waWVkW2tleV0gPSBjb25maWdUb0NvcHlba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGtlZXAgZXhpc3RpbmdcbiAgICAgICAgY29waWVkW2tleV0gPSBjdXJyZW50Q29uZmlnW2tleV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29waWVkO1xuICB9XG5cbiAgcmVnaXN0ZXJWaXNDb25maWcobGF5ZXJWaXNDb25maWdzOiB7XG4gICAgW2tleTogc3RyaW5nXToga2V5b2YgTGF5ZXJWaXNDb25maWdTZXR0aW5ncyB8IFZhbHVlT2Y8TGF5ZXJWaXNDb25maWdTZXR0aW5ncz47XG4gIH0pIHtcbiAgICBPYmplY3Qua2V5cyhsYXllclZpc0NvbmZpZ3MpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBjb25maWdJdGVtID0gbGF5ZXJWaXNDb25maWdzW2l0ZW1dO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWdJdGVtID09PSAnc3RyaW5nJyAmJiBMQVlFUl9WSVNfQ09ORklHU1tjb25maWdJdGVtXSkge1xuICAgICAgICAvLyBpZiBhc3NpZ25lZCBvbmUgb2YgZGVmYXVsdCBMQVlFUl9DT05GSUdTXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2NvbmZpZ0l0ZW1dLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1tpdGVtXSA9IExBWUVSX1ZJU19DT05GSUdTW2NvbmZpZ0l0ZW1dO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIGNvbmZpZ0l0ZW0gPT09ICdvYmplY3QnICYmXG4gICAgICAgIFsndHlwZScsICdkZWZhdWx0VmFsdWUnXS5ldmVyeShwID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25maWdJdGVtLCBwKSlcbiAgICAgICkge1xuICAgICAgICAvLyBpZiBwcm92aWRlZCBjdXN0b21pemVkIHZpc0NvbmZpZywgYW5kIGhhcyB0eXBlICYmIGRlZmF1bHRWYWx1ZVxuICAgICAgICAvLyBUT0RPOiBmdXJ0aGVyIGNoZWNrIGlmIGN1c3RvbWl6ZWQgdmlzQ29uZmlnIGlzIHZhbGlkXG4gICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tpdGVtXSA9IGNvbmZpZ0l0ZW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gY29uZmlnSXRlbTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldExheWVyQ29sdW1ucyhwcm9wc0NvbHVtbnMgPSB7fSkge1xuICAgIGNvbnN0IGNvbHVtblZhbGlkYXRvcnMgPSB0aGlzLmNvbHVtblZhbGlkYXRvcnMgfHwge307XG4gICAgY29uc3QgcmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkTGF5ZXJDb2x1bW5zLnJlZHVjZShcbiAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBjb2x1bW5WYWxpZGF0b3JzW2tleV1cbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgdmFsdWU6IHByb3BzQ29sdW1uc1trZXldPy52YWx1ZSA/PyBudWxsLFxuICAgICAgICAgICAgICBmaWVsZElkeDogcHJvcHNDb2x1bW5zW2tleV0/LmZpZWxkSWR4ID8/IC0xLFxuICAgICAgICAgICAgICB2YWxpZGF0b3I6IGNvbHVtblZhbGlkYXRvcnNba2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge3ZhbHVlOiBwcm9wc0NvbHVtbnNba2V5XT8udmFsdWUgPz8gbnVsbCwgZmllbGRJZHg6IHByb3BzQ29sdW1uc1trZXldPy5maWVsZElkeCA/PyAtMX1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICAgIGNvbnN0IG9wdGlvbmFsID0gdGhpcy5vcHRpb25hbENvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IHtcbiAgICAgICAgICB2YWx1ZTogcHJvcHNDb2x1bW5zW2tleV0/LnZhbHVlID8/IG51bGwsXG4gICAgICAgICAgZmllbGRJZHg6IHByb3BzQ29sdW1uc1trZXldPy5maWVsZElkeCA/PyAtMSxcbiAgICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSB7Li4ucmVxdWlyZWQsIC4uLm9wdGlvbmFsfTtcblxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJDb25maWc8XG4gICAgTGF5ZXJDb25maWcgZXh0ZW5kcyBMYXllckJhc2VDb25maWcgJlxuICAgICAgUGFydGlhbDxMYXllckNvbG9yQ29uZmlnICYgTGF5ZXJTaXplQ29uZmlnPiA9IExheWVyQmFzZUNvbmZpZ1xuICA+KG5ld0NvbmZpZzogUGFydGlhbDxMYXllckNvbmZpZz4pOiBMYXllciB7XG4gICAgdGhpcy5jb25maWcgPSB7Li4udGhpcy5jb25maWcsIC4uLm5ld0NvbmZpZ307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZy52aXNDb25maWcgPSB7Li4udGhpcy5jb25maWcudmlzQ29uZmlnLCAuLi5uZXdWaXNDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJDb2xvclVJKHByb3A6IHN0cmluZywgbmV3Q29uZmlnOiBOZXN0ZWRQYXJ0aWFsPENvbG9yVUk+KTogTGF5ZXIge1xuICAgIGNvbnN0IHtjb2xvclVJOiBwcmV2aW91cywgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KG5ld0NvbmZpZykgfHwgdHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBjb2xvclVJUHJvcCA9IE9iamVjdC5lbnRyaWVzKG5ld0NvbmZpZykucmVkdWNlKChhY2N1LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOlxuICAgICAgICAgIGlzUGxhaW5PYmplY3QoYWNjdVtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbHVlKVxuICAgICAgICAgICAgPyB7Li4uYWNjdVtrZXldLCAuLi4odmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pfVxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9LCBwcmV2aW91c1twcm9wXSB8fCBERUZBVUxUX0NPTE9SX1VJKTtcblxuICAgIGNvbnN0IGNvbG9yVUkgPSB7XG4gICAgICAuLi5wcmV2aW91cyxcbiAgICAgIFtwcm9wXTogY29sb3JVSVByb3BcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7Y29sb3JVSX0pO1xuICAgIC8vIGlmIGNvbG9yVUlbcHJvcF0gaXMgY29sb3JSYW5nZVxuICAgIGNvbnN0IGlzQ29sb3JSYW5nZSA9IHZpc0NvbmZpZ1twcm9wXSAmJiB2aXNDb25maWdbcHJvcF0uY29sb3JzO1xuXG4gICAgaWYgKGlzQ29sb3JSYW5nZSkge1xuICAgICAgLy8gaWYgb3BlbiBkcm9wZG93biBhbmQgcHJvcCBpcyBjb2xvciByYW5nZVxuICAgICAgLy8gQXV0b21hdGljYWxseSBzZXQgY29sb3JSYW5nZUNvbmZpZydzIHN0ZXAgYW5kIHJldmVyc2VkXG4gICAgICB0aGlzLnVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UobmV3Q29uZmlnLCBwcm9wKTtcblxuICAgICAgLy8gaWYgY2hhbmdlcyBpbiBVSSBpcyBtYWRlIHRvICdyZXZlcnNlZCcsICdzdGVwcycgb3Igc3RlcHNcbiAgICAgIC8vIHVwZGF0ZSBjdXJyZW50IGxheWVyIGNvbG9yUmFuZ2VcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKTtcblxuICAgICAgLy8gaWYgc2V0IGNvbG9yUmFuZ2VDb25maWcgdG8gY3VzdG9tXG4gICAgICAvLyBpbml0aWF0ZSBjdXN0b21QYWxldHRlIHRvIGJlIGVkaXRlZCBpbiB0aGUgdWlcbiAgICAgIHRoaXMudXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGlmIHNldCBjb2xvclJhbmdlQ29uZmlnIHRvIGN1c3RvbSBwYWxldHRlIG9yIGN1c3RvbSBicmVha3NcbiAgLy8gaW5pdGlhdGUgY3VzdG9tUGFsZXR0ZSB0byBiZSBlZGl0ZWQgaW4gdGhlIHVpXG4gIHVwZGF0ZUN1c3RvbVBhbGV0dGUobmV3Q29uZmlnLCBwcmV2aW91cywgcHJvcCkge1xuICAgIGlmICghbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWc/LmN1c3RvbSAmJiAhbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWc/LmN1c3RvbUJyZWFrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuZXdDb25maWcuY3VzdG9tUGFsZXR0ZSkge1xuICAgICAgLy8gaWYgbmV3IGNvbmZpZyBhbHNvIHNldCBjdXN0b21QYWxldHRlLCBubyBuZWVkIHRvIGluaXRpYXRlIG5ld1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKCF2aXNDb25maWdbcHJvcF0pIHJldHVybjtcbiAgICAvLyBtYWtlIGNvcHkgb2YgY3VycmVudCBjb2xvciByYW5nZSB0byBjdXN0b21QYWxldHRlXG4gICAgbGV0IGN1c3RvbVBhbGV0dGUgPSB7XG4gICAgICAuLi52aXNDb25maWdbcHJvcF1cbiAgICB9O1xuXG4gICAgaWYgKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmN1c3RvbUJyZWFrcyAmJiAhY3VzdG9tUGFsZXR0ZS5jb2xvck1hcCkge1xuICAgICAgLy8gZmluZCB2aXN1YWxDaGFuZWxcbiAgICAgIGNvbnN0IHZpc3VhbENoYW5uZWxzID0gdGhpcy52aXN1YWxDaGFubmVscztcbiAgICAgIGNvbnN0IGNoYW5uZWxLZXkgPSBPYmplY3Qua2V5cyh2aXN1YWxDaGFubmVscykuZmluZChcbiAgICAgICAga2V5ID0+IHZpc3VhbENoYW5uZWxzW2tleV0ucmFuZ2UgPT09IHByb3BcbiAgICAgICk7XG4gICAgICBpZiAoIWNoYW5uZWxLZXkpIHtcbiAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBuXG4gICAgICAgIENvbnNvbGUud2FybihgdXBkYXRlQ29sb3JVSTogQ2FuJ3QgZmluZCB2aXN1YWwgY2hhbm5lbCB3aGljaCByYW5nZSBpcyAke3Byb3B9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGFkZCBuYW1lfHR5cGV8Y2F0ZWdvcnkgdG8gdXBkYXRlQ3VzdG9tUGFsZXR0ZSBpZiBjdXN0b21CcmVha3MsIHNvIHRoYXRcbiAgICAgIC8vIGNvbG9ycyB3aWxsIG5vdCBiZSBvdmVycmlkZSBhcyB3ZWxsIHdoZW4gaW52ZXJzZSBwYWxldHRlIHdpdGggY3VzdG9tIGJyZWFrXG4gICAgICAvLyBpbml0aWF0ZSBjb2xvck1hcCBmcm9tIGN1cnJlbnQgc2NhbGVcblxuICAgICAgY29uc3QgY29sb3JNYXAgPSBpbml0aWFsaXplTGF5ZXJDb2xvck1hcCh0aGlzLCB2aXN1YWxDaGFubmVsc1tjaGFubmVsS2V5XSk7XG4gICAgICBjdXN0b21QYWxldHRlID0gaW5pdGlhbGl6ZUN1c3RvbVBhbGV0dGUodmlzQ29uZmlnW3Byb3BdLCBjb2xvck1hcCk7XG4gICAgfSBlbHNlIGlmIChuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZy5jdXN0b20pIHtcbiAgICAgIGN1c3RvbVBhbGV0dGUgPSBpbml0aWFsaXplQ3VzdG9tUGFsZXR0ZSh2aXNDb25maWdbcHJvcF0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgY29sb3JVSToge1xuICAgICAgICAuLi5jb2xvclVJLFxuICAgICAgICBbcHJvcF06IHtcbiAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLFxuICAgICAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGlmIG9wZW4gZHJvcGRvd24gYW5kIHByb3AgaXMgY29sb3IgcmFuZ2VcbiAgICogQXV0b21hdGljYWxseSBzZXQgY29sb3JSYW5nZUNvbmZpZydzIHN0ZXAgYW5kIHJldmVyc2VkXG4gICAqIEBwYXJhbSB7Kn0gbmV3Q29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gcHJvcFxuICAgKi9cbiAgdXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApIHtcbiAgICBjb25zdCB7Y29sb3JVSSwgdmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgLy8gd2hlbiBjdXN0b20gcGFsZXR0ZSBhZGRzL3JlbW92ZXMgc3RlcCwgdGhlIG51bWJlciBpbiBcIlN0ZXBzXCIgaW5wdXQgY29udHJvbFxuICAgIC8vIHNob3VsZCBiZSB1cGRhdGVkIGFzIHdlbGxcbiAgICBjb25zdCBpc0N1c3RvbSA9IG5ld0NvbmZpZy5jdXN0b21QYWxldHRlPy5jYXRlZ29yeSA9PT0gJ0N1c3RvbSc7XG4gICAgY29uc3QgY3VzdG9tU3RlcHNDaGFuZ2VkID0gaXNDdXN0b21cbiAgICAgID8gbmV3Q29uZmlnLmN1c3RvbVBhbGV0dGUuY29sb3JzLmxlbmd0aCAhPT0gdmlzQ29uZmlnW3Byb3BdLmNvbG9ycy5sZW5ndGhcbiAgICAgIDogZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIG5ld0NvbmZpZy5zaG93RHJvcGRvd24gIT09ICdudW1iZXInICYmICFjdXN0b21TdGVwc0NoYW5nZWQpIHJldHVybjtcblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgY29sb3JVSToge1xuICAgICAgICAuLi5jb2xvclVJLFxuICAgICAgICBbcHJvcF06IHtcbiAgICAgICAgICAuLi5jb2xvclVJW3Byb3BdLFxuICAgICAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgICAgIHN0ZXBzOiBjdXN0b21TdGVwc0NoYW5nZWRcbiAgICAgICAgICAgICAgPyBjb2xvclVJW3Byb3BdLmN1c3RvbVBhbGV0dGUuY29sb3JzLmxlbmd0aFxuICAgICAgICAgICAgICA6IHZpc0NvbmZpZ1twcm9wXS5jb2xvcnMubGVuZ3RoLFxuICAgICAgICAgICAgcmV2ZXJzZWQ6IEJvb2xlYW4odmlzQ29uZmlnW3Byb3BdLnJldmVyc2VkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlQ29sb3JSYW5nZUJ5Q29sb3JVSShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgLy8gb25seSB1cGRhdGUgY29sb3JSYW5nZSBpZiBjaGFuZ2VzIGluIFVJIGlzIG1hZGUgdG8gJ3JldmVyc2VkJywgJ3N0ZXBzJyBvciBzdGVwc1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZSA9XG4gICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyAmJlxuICAgICAgWydyZXZlcnNlZCcsICdzdGVwcycsICdjb2xvckJsaW5kU2FmZScsICd0eXBlJ10uc29tZShcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLCBrZXkpICYmXG4gICAgICAgICAgbmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWdba2V5XSAhPT1cbiAgICAgICAgICAgIChwcmV2aW91c1twcm9wXSB8fCBERUZBVUxUX0NPTE9SX1VJKS5jb2xvclJhbmdlQ29uZmlnW2tleV1cbiAgICAgICk7XG4gICAgaWYgKCFzaG91bGRVcGRhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICAvLyBmb3IgY3VzdG9tIHBhbGV0dGUsIG9uZSBjYW4gb25seSAncmV2ZXJzZScgdGhlIGNvbG9ycyBpbiBjdXN0b20gcGFsZXR0ZS5cbiAgICAvLyBjaGFuZ2luZyAnc3RlcHMnLCAnY29sb3JCaW5kU2FmZScsICd0eXBlJyBzaG91bGQgZmFsbCBiYWNrIHRvIHByZWRlZmluZWQgcGFsZXR0ZS5cbiAgICBjb25zdCBpc0N1c3RvbUNvbG9yUmV2ZXJzZWQgPVxuICAgICAgdmlzQ29uZmlnLmNvbG9yUmFuZ2UuY2F0ZWdvcnkgPT09ICdDdXN0b20nICYmXG4gICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLCAncmV2ZXJzZWQnKTtcblxuICAgIGNvbnN0IHVwZGF0ZSA9IGlzQ3VzdG9tQ29sb3JSZXZlcnNlZFxuICAgICAgPyB1cGRhdGVDdXN0b21Db2xvclJhbmdlQnlDb2xvclVJKHZpc0NvbmZpZ1twcm9wXSwgY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnKVxuICAgICAgOiB1cGRhdGVDb2xvclJhbmdlQnlNYXRjaGluZ1BhbGV0dGUodmlzQ29uZmlnW3Byb3BdLCBjb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWcpO1xuXG4gICAgaWYgKHVwZGF0ZSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7W3Byb3BdOiB1cGRhdGV9KTtcbiAgICB9XG4gIH1cbiAgaGFzQ29sdW1uVmFsdWUoY29sdW1uPzogTGF5ZXJDb2x1bW4pIHtcbiAgICByZXR1cm4gQm9vbGVhbihjb2x1bW4gJiYgY29sdW1uLnZhbHVlICYmIGNvbHVtbi5maWVsZElkeCA+IC0xKTtcbiAgfVxuICBoYXNSZXF1aXJlZENvbHVtbihjb2x1bW4/OiBMYXllckNvbHVtbikge1xuICAgIHJldHVybiBCb29sZWFuKGNvbHVtbiAmJiAoY29sdW1uLm9wdGlvbmFsIHx8IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1uKSkpO1xuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGxheWVyIGhhcyBhbGwgY29sdW1uc1xuICAgKiBAcmV0dXJucyB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0FsbENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge2NvbHVtbnMsIGNvbHVtbk1vZGV9ID0gdGhpcy5jb25maWc7XG4gICAgLy8gaWYgbGF5ZXIgaGFzIGRpZmZlcmVudCBjb2x1bW4gbW9kZSwgY2hlY2sgaWYgaGF2ZSBhbGwgcmVxdWlyZWQgY29sdW1ucyBvZiBjdXJyZW50IGNvbHVtbiBNb2RlXG4gICAgaWYgKGNvbHVtbk1vZGUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5Nb2RlcyA9ICh0aGlzLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBjb2x1bW5Nb2RlXG4gICAgICApO1xuICAgICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICAgIGN1cnJlbnRDb2x1bW5Nb2RlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgY3VycmVudENvbHVtbk1vZGVzLnJlcXVpcmVkQ29sdW1ucz8uZXZlcnkoY29sS2V5ID0+IHRoaXMuaGFzQ29sdW1uVmFsdWUoY29sdW1uc1tjb2xLZXldKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgY29sdW1ucyAmJlxuICAgICAgICBPYmplY3QudmFsdWVzKGNvbHVtbnMpLmV2ZXJ5KChjb2x1bW4/OiBMYXllckNvbHVtbikgPT4gdGhpcy5oYXNSZXF1aXJlZENvbHVtbihjb2x1bW4pKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBsYXllciBoYXMgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBsYXllckRhdGFcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHllcyBvciBub1xuICAgKi9cbiAgaGFzTGF5ZXJEYXRhKGxheWVyRGF0YToge2RhdGE6IHVua25vd25bXSB8IGFycm93LlRhYmxlfSkge1xuICAgIGlmICghbGF5ZXJEYXRhKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICBsYXllckRhdGEuZGF0YSAmJlxuICAgICAgICAoKGxheWVyRGF0YS5kYXRhIGFzIHVua25vd25bXSkubGVuZ3RoIHx8IChsYXllckRhdGEuZGF0YSBhcyBhcnJvdy5UYWJsZSkubnVtUm93cylcbiAgICApO1xuICB9XG5cbiAgaXNWYWxpZFRvU2F2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnR5cGUgJiYgdGhpcy5oYXNBbGxDb2x1bW5zKCkpO1xuICB9XG5cbiAgc2hvdWxkUmVuZGVyTGF5ZXIoZGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBCb29sZWFuKHRoaXMudHlwZSkgJiZcbiAgICAgIHRoaXMuaGFzQWxsQ29sdW1ucygpICYmXG4gICAgICB0aGlzLmhhc0xheWVyRGF0YShkYXRhKSAmJlxuICAgICAgdHlwZW9mIHRoaXMucmVuZGVyTGF5ZXIgPT09ICdmdW5jdGlvbidcbiAgICApO1xuICB9XG5cbiAgZ2V0Q29sb3JTY2FsZShcbiAgICBjb2xvclNjYWxlOiBzdHJpbmcsXG4gICAgY29sb3JEb21haW46IFZpc3VhbENoYW5uZWxEb21haW4sXG4gICAgY29sb3JSYW5nZTogQ29sb3JSYW5nZVxuICApOiBHZXRWaXNDaGFubmVsU2NhbGVSZXR1cm5UeXBlIHtcbiAgICBpZiAoY29sb3JTY2FsZSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCkge1xuICAgICAgcmV0dXJuIGdldENhdGVnb3JpY2FsQ29sb3JTY2FsZShjb2xvckRvbWFpbiwgY29sb3JSYW5nZSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0NvbG9yTWFwKGNvbG9yUmFuZ2UpICYmIGNvbG9yU2NhbGUgPT09IFNDQUxFX1RZUEVTLmN1c3RvbSkge1xuICAgICAgY29uc3QgY01hcCA9IG5ldyBNYXAoKTtcbiAgICAgIGNvbG9yUmFuZ2UuY29sb3JNYXA/LmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgICBjTWFwLnNldChrLCB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyBoZXhUb1JnYih2KSA6IHYpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNjYWxlVHlwZSA9IGNvbG9yU2NhbGUgPT09IFNDQUxFX1RZUEVTLmN1c3RvbSA/IGNvbG9yU2NhbGUgOiBTQ0FMRV9UWVBFUy5vcmRpbmFsO1xuXG4gICAgICBjb25zdCBzY2FsZSA9IGdldFNjYWxlRnVuY3Rpb24oc2NhbGVUeXBlLCBjTWFwLnZhbHVlcygpLCBjTWFwLmtleXMoKSwgZmFsc2UpO1xuICAgICAgc2NhbGUudW5rbm93bihjTWFwLmdldChVTktOT1dOX0NPTE9SX0tFWSkgfHwgTk9fVkFMVUVfQ09MT1IpO1xuXG4gICAgICByZXR1cm4gc2NhbGUgYXMgR2V0VmlzQ2hhbm5lbFNjYWxlUmV0dXJuVHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzQ2hhbm5lbFNjYWxlKGNvbG9yU2NhbGUsIGNvbG9yRG9tYWluLCBjb2xvclJhbmdlLmNvbG9ycy5tYXAoaGV4VG9SZ2IpKTtcbiAgfVxuXG4gIGFjY2Vzc1ZTRmllbGRWYWx1ZShmaWVsZCwgaW5kZXhLZXkpIHtcbiAgICByZXR1cm4gZGVmYXVsdEdldEZpZWxkVmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSB2aXN1YWwgY2hhbm5lbHMgdG8gZGVjay5nbCBhY2Nlc29yc1xuICAgKiBAcGFyYW0gcGFyYW0gUGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcGFyYW0uZGF0YUFjY2Vzc29yIEFjY2VzcyBrZXBsZXIuZ2wgbGF5ZXIgZGF0YSBmcm9tIGRlY2suZ2wgbGF5ZXJcbiAgICogQHBhcmFtIHBhcmFtLmRhdGFDb250YWluZXIgRGF0YUNvbnRhaW5lciB0byB1c2UgdXNlIHdpdGggZGF0YUFjY2Vzc29yXG4gICAqIEByZXR1cm4ge09iamVjdH0gYXR0cmlidXRlQWNjZXNzb3JzIC0gZGVjay5nbCBsYXllciBhdHRyaWJ1dGUgYWNjZXNzb3JzXG4gICAqL1xuICBnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMoe1xuICAgIGRhdGFBY2Nlc3NvciA9IGRlZmF1bHREYXRhQWNjZXNzb3IsXG4gICAgZGF0YUNvbnRhaW5lcixcbiAgICBpbmRleEtleVxuICB9OiB7XG4gICAgZGF0YUFjY2Vzc29yPzogdHlwZW9mIGRlZmF1bHREYXRhQWNjZXNzb3I7XG4gICAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZTtcbiAgICBpbmRleEtleT86IG51bWJlciB8IG51bGw7XG4gIH0pIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVBY2Nlc3NvcnM6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgZml4ZWQsXG4gICAgICAgIHNjYWxlLFxuICAgICAgICBkb21haW4sXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBhY2Nlc3NvcixcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlXG4gICAgICB9ID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcblxuICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZEdldFNjYWxlID0gdGhpcy5jb25maWdbZmllbGRdO1xuXG4gICAgICAgIGlmIChzaG91bGRHZXRTY2FsZSkge1xuICAgICAgICAgIGNvbnN0IGlzRml4ZWQgPSBmaXhlZCAmJiB0aGlzLmNvbmZpZy52aXNDb25maWdbZml4ZWRdO1xuXG4gICAgICAgICAgY29uc3Qgc2NhbGVGdW5jdGlvbiA9XG4gICAgICAgICAgICBjaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvclxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0Q29sb3JTY2FsZShcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHRoaXMuZ2V0VmlzQ2hhbm5lbFNjYWxlKFxuICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdbc2NhbGVdLFxuICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdbZG9tYWluXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgICAgICAgICAgICBpc0ZpeGVkXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGdldEZpZWxkVmFsdWUgPSB0aGlzLmFjY2Vzc1ZTRmllbGRWYWx1ZSh0aGlzLmNvbmZpZ1tmaWVsZF0sIGluZGV4S2V5KTtcblxuICAgICAgICAgIGlmIChzY2FsZUZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gc2NhbGVGdW5jdGlvbi5ieVpvb21cbiAgICAgICAgICAgICAgPyBtZW1vaXplKHogPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVGdW5jID0gc2NhbGVGdW5jdGlvbih6KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICBzY2FsZUZ1bmMsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YUFjY2Vzc29yKGRhdGFDb250YWluZXIpKGQpLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0RmllbGRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogZCA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBzY2FsZUZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBkYXRhQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikoZCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBnZXRGaWVsZFZhbHVlXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBzZXQgZ2V0RmlsbENvbG9yQnlab29tIHRvIHRydWVcbiAgICAgICAgICAgIGlmIChzY2FsZUZ1bmN0aW9uLmJ5Wm9vbSkge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYCR7YWNjZXNzb3J9Qnlab29tYF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZ2V0QXR0cmlidXRlVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID0gZ2V0QXR0cmlidXRlVmFsdWUodGhpcy5jb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0gPVxuICAgICAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWF0dHJpYnV0ZUFjY2Vzc29yc1thY2Nlc3Nvcl0pIHtcbiAgICAgICAgICBDb25zb2xlLndhcm4oYEZhaWxlZCB0byBwcm92aWRlIGFjY2Vzc29yIGZ1bmN0aW9uIGZvciAke2FjY2Vzc29yIHx8IGNoYW5uZWx9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVBY2Nlc3NvcnM7XG4gIH1cblxuICBnZXRWaXNDaGFubmVsU2NhbGUoXG4gICAgc2NhbGU6IHN0cmluZyxcbiAgICBkb21haW46IFZpc3VhbENoYW5uZWxEb21haW4gfCBEb21haW5RdWFudGlsZXMsXG4gICAgcmFuZ2U6IGFueSxcbiAgICBmaXhlZD86IGJvb2xlYW5cbiAgKTogR2V0VmlzQ2hhbm5lbFNjYWxlUmV0dXJuVHlwZSB7XG4gICAgLy8gaWYgcXVhbnRpbGUgaXMgcHJvdmlkZWQgcGVyIHpvb21cbiAgICBpZiAoaXNEb21haW5RdWFudGlsZShkb21haW4pICYmIHNjYWxlID09PSBTQ0FMRV9UWVBFUy5xdWFudGlsZSkge1xuICAgICAgY29uc3QgelN0ZXBzID0gZG9tYWluLno7XG5cbiAgICAgIGNvbnN0IGdldFNjYWxlID0gZnVuY3Rpb24gZ2V0U2NhbGVCeVpvb20oeikge1xuICAgICAgICBjb25zdCBzY2FsZURvbWFpbiA9IGdldERvbWFpblN0ZXBzYnlab29tKGRvbWFpbi5xdWFudGlsZXMsIHpTdGVwcywgeik7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZHMgPSBnZXRUaHJlc2hvbGRzRnJvbVF1YW50aWxlcyhzY2FsZURvbWFpbiwgcmFuZ2UubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gZ2V0U2NhbGVGdW5jdGlvbigndGhyZXNob2xkJywgcmFuZ2UsIHRocmVzaG9sZHMsIGZhbHNlKTtcbiAgICAgIH07XG5cbiAgICAgIGdldFNjYWxlLmJ5Wm9vbSA9IHRydWU7XG4gICAgICByZXR1cm4gZ2V0U2NhbGU7XG4gICAgfSBlbHNlIGlmIChpc0RvbWFpblN0b3BzKGRvbWFpbikpIHtcbiAgICAgIC8vIGNvbG9yIGlzIGJhc2VkIG9uIHpvb21cbiAgICAgIGNvbnN0IHpTdGVwcyA9IGRvbWFpbi56O1xuICAgICAgLy8gZ2V0IHNjYWxlIGZ1bmN0aW9uIGJ5IHpcbiAgICAgIC8vIHtcbiAgICAgIC8vICB6OiBbeiwgeiwgel0sXG4gICAgICAvLyAgc3RvcHM6IFtbbWluLCBtYXhdLCBbbWluLCBtYXhdXSxcbiAgICAgIC8vICBpbnRlcnBvbGF0aW9uOiAnaW50ZXJwb2xhdGUnXG4gICAgICAvLyB9XG5cbiAgICAgIGNvbnN0IGdldFNjYWxlID0gZnVuY3Rpb24gZ2V0U2NhbGVCeVpvb20oeikge1xuICAgICAgICBjb25zdCBzY2FsZURvbWFpbiA9IGdldERvbWFpblN0ZXBzYnlab29tKGRvbWFpbi5zdG9wcywgelN0ZXBzLCB6KTtcblxuICAgICAgICByZXR1cm4gZ2V0U2NhbGVGdW5jdGlvbihzY2FsZSwgcmFuZ2UsIHNjYWxlRG9tYWluLCBmaXhlZCk7XG4gICAgICB9O1xuXG4gICAgICBnZXRTY2FsZS5ieVpvb20gPSB0cnVlO1xuICAgICAgcmV0dXJuIGdldFNjYWxlO1xuICAgIH1cblxuICAgIHJldHVybiBTQ0FMRV9GVU5DW2ZpeGVkID8gJ2xpbmVhcicgOiBzY2FsZV0oKVxuICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAucmFuZ2UoZml4ZWQgPyBkb21haW4gOiByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgYm91bmRzIG9mIHRoZSBkYXRhLlxuICAgKi9cbiAgZ2V0UG9pbnRzQm91bmRzKFxuICAgIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gICAgZ2V0UG9zaXRpb246ICh4OiBhbnksIGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiBudW1iZXJbXSA9IGlkZW50aXR5XG4gICk6IG51bWJlcltdIHwgbnVsbCB7XG4gICAgLy8gbm8gbmVlZCB0byBsb29wIHRocm91Z2ggdGhlIGVudGlyZSBkYXRhc2V0XG4gICAgLy8gZ2V0IGEgc2FtcGxlIG9mIGRhdGEgdG8gY2FsY3VsYXRlIGJvdW5kc1xuICAgIGNvbnN0IHNhbXBsZURhdGEgPVxuICAgICAgZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkgPiBNQVhfU0FNUExFX1NJWkVcbiAgICAgICAgPyBnZXRTYW1wbGVDb250YWluZXJEYXRhKGRhdGFDb250YWluZXIsIE1BWF9TQU1QTEVfU0laRSlcbiAgICAgICAgOiBkYXRhQ29udGFpbmVyO1xuXG4gICAgY29uc3QgcG9pbnRzID0gZ2V0UG9zaXRpb24gPyBzYW1wbGVEYXRhLm1hcEluZGV4KGdldFBvc2l0aW9uKSA6IFtdO1xuXG4gICAgY29uc3QgbGF0Qm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMSwgWy05MCwgOTBdKTtcbiAgICBjb25zdCBsbmdCb3VuZHMgPSBnZXRMYXRMbmdCb3VuZHMocG9pbnRzLCAwLCBbLTE4MCwgMTgwXSk7XG5cbiAgICBpZiAoIWxhdEJvdW5kcyB8fCAhbG5nQm91bmRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xuZ0JvdW5kc1swXSwgbGF0Qm91bmRzWzBdLCBsbmdCb3VuZHNbMV0sIGxhdEJvdW5kc1sxXV07XG4gIH1cblxuICBnZXRDaGFuZ2VkVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzKSB7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSBkaWZmVXBkYXRlVHJpZ2dlcnMoZGF0YVVwZGF0ZVRyaWdnZXJzLCB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMpO1xuICAgIHRoaXMuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IGRhdGFVcGRhdGVUcmlnZ2VycztcblxuICAgIHJldHVybiB0cmlnZ2VyQ2hhbmdlZDtcbiAgfVxuXG4gIGdldEVuY29kZWRDaGFubmVsVmFsdWUoXG4gICAgc2NhbGU6ICh2YWx1ZSkgPT4gYW55LFxuICAgIGRhdGE6IGFueVtdLFxuICAgIGZpZWxkOiBWaXN1YWxDaGFubmVsRmllbGQsXG4gICAgbnVsbFZhbHVlID0gTk9fVkFMVUVfQ09MT1IsXG4gICAgZ2V0VmFsdWUgPSBkZWZhdWx0R2V0RmllbGRWYWx1ZVxuICApIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGZpZWxkLCBkYXRhKTtcblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGxWYWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgYXR0cmlidXRlVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHZhbHVlLm1hcChzY2FsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gc2NhbGUodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG5cbiAgdXBkYXRlTWV0YShtZXRhOiBMYXllclsnbWV0YSddKSB7XG4gICAgdGhpcy5tZXRhID0gey4uLnRoaXMubWV0YSwgLi4ubWV0YX07XG4gIH1cblxuICBnZXREYXRhVXBkYXRlVHJpZ2dlcnMoe2ZpbHRlcmVkSW5kZXgsIGlkLCBkYXRhQ29udGFpbmVyfTogS2VwbGVyVGFibGUpOiBhbnkge1xuICAgIGNvbnN0IHtjb2x1bW5zfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldERhdGE6IHtkYXRhc2V0SWQ6IGlkLCBkYXRhQ29udGFpbmVyLCBjb2x1bW5zLCBmaWx0ZXJlZEluZGV4fSxcbiAgICAgIGdldE1ldGE6IHtkYXRhc2V0SWQ6IGlkLCBkYXRhQ29udGFpbmVyLCBjb2x1bW5zfSxcbiAgICAgIC4uLih0aGlzLmNvbmZpZy50ZXh0TGFiZWwgfHwgW10pLnJlZHVjZShcbiAgICAgICAgKGFjY3UsIHRsLCBpKSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2BnZXRMYWJlbENoYXJhY3RlclNldC0ke2l9YF06IHRsLmZpZWxkID8gdGwuZmllbGQubmFtZSA6IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZURhdGEoZGF0YXNldHM6IERhdGFzZXRzLCBvbGRMYXllckRhdGE6IGFueSkge1xuICAgIGlmICghdGhpcy5jb25maWcuZGF0YUlkKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGxheWVyRGF0YXNldCA9IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gbGF5ZXJEYXRhc2V0O1xuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgY29uc3QgZGF0YVVwZGF0ZVRyaWdnZXJzID0gdGhpcy5nZXREYXRhVXBkYXRlVHJpZ2dlcnMobGF5ZXJEYXRhc2V0KTtcbiAgICBjb25zdCB0cmlnZ2VyQ2hhbmdlZCA9IHRoaXMuZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycyk7XG5cbiAgICBpZiAodHJpZ2dlckNoYW5nZWQgJiYgKHRyaWdnZXJDaGFuZ2VkLmdldE1ldGEgfHwgdHJpZ2dlckNoYW5nZWQuZ2V0RGF0YSkpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJNZXRhKGxheWVyRGF0YXNldCwgZ2V0UG9zaXRpb24pO1xuXG4gICAgICAvLyByZXNldCBmaWx0ZXJlZEl0ZW1Db3VudFxuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1Db3VudCA9IHt9O1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gW107XG5cbiAgICBpZiAoISh0cmlnZ2VyQ2hhbmdlZCAmJiB0cmlnZ2VyQ2hhbmdlZC5nZXREYXRhKSAmJiBvbGRMYXllckRhdGEgJiYgb2xkTGF5ZXJEYXRhLmRhdGEpIHtcbiAgICAgIC8vIHNhbWUgZGF0YVxuICAgICAgZGF0YSA9IG9sZExheWVyRGF0YS5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gdGhpcy5jYWxjdWxhdGVEYXRhQXR0cmlidXRlKGxheWVyRGF0YXNldCwgZ2V0UG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7ZGF0YSwgdHJpZ2dlckNoYW5nZWR9O1xuICB9XG5cbiAgLyoqXG4gICAqIGhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgb25lIGxheWVyIGRvbWFpbiB3aGVuIHN0YXRlLmRhdGEgY2hhbmdlZFxuICAgKiBpZiBzdGF0ZS5kYXRhIGNoYW5nZSBpcyBkdWUgb3QgdXBkYXRlIGZpbHRlciwgbmV3RmlsZXIgd2lsbCBiZSBwYXNzZWRcbiAgICogY2FsbGVkIGJ5IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YVxuICAgKiBAcGFyYW0gZGF0YXNldHNcbiAgICogQHBhcmFtIG5ld0ZpbHRlclxuICAgKiBAcmV0dXJucyBsYXllclxuICAgKi9cbiAgdXBkYXRlTGF5ZXJEb21haW4oZGF0YXNldHM6IERhdGFzZXRzLCBuZXdGaWx0ZXI/OiBGaWx0ZXIpOiBMYXllciB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmdldERhdGFzZXQoZGF0YXNldHMpO1xuICAgIGlmICghdGFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbCA9PiB7XG4gICAgICBjb25zdCB7c2NhbGV9ID0gY2hhbm5lbDtcbiAgICAgIGNvbnN0IHNjYWxlVHlwZSA9IHRoaXMuY29uZmlnW3NjYWxlXTtcbiAgICAgIC8vIG9yZGluYWwgZG9tYWluIGlzIGJhc2VkIG9uIGRhdGFDb250YWluZXIsIGlmIG9ubHkgZmlsdGVyIGNoYW5nZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlIG9yZGluYWwgZG9tYWluXG4gICAgICBpZiAoIW5ld0ZpbHRlciB8fCBzY2FsZVR5cGUgIT09IFNDQUxFX1RZUEVTLm9yZGluYWwpIHtcbiAgICAgICAgY29uc3Qge2RvbWFpbn0gPSBjaGFubmVsO1xuICAgICAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbih0YWJsZSwgY2hhbm5lbCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tkb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldERhdGFzZXQoZGF0YXNldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGF0YUlkID8gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdmlzdWFsIGNoYW5uZWwgZmllbGQgYW5kIHNjYWxlcyBiYXNlZCBvbiBzdXBwb3J0ZWQgZmllbGQgJiBzY2FsZSB0eXBlXG4gICAqIEBwYXJhbSBjaGFubmVsXG4gICAqL1xuICB2YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbDogc3RyaW5nKSB7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsKTtcbiAgICB0aGlzLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZmllbGQgdHlwZSBiYXNlZCBvbiBjaGFubmVsU2NhbGVUeXBlXG4gICAqL1xuICB2YWxpZGF0ZUZpZWxkVHlwZShjaGFubmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIGNoYW5uZWxTY2FsZVR5cGUsIHN1cHBvcnRlZEZpZWxkVHlwZXN9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgIGlmICh0aGlzLmNvbmZpZ1tmaWVsZF0pIHtcbiAgICAgIC8vIGlmIGZpZWxkIGlzIHNlbGVjdGVkLCBjaGVjayBpZiBmaWVsZCB0eXBlIGlzIHN1cHBvcnRlZFxuICAgICAgY29uc3QgY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMgPVxuICAgICAgICBzdXBwb3J0ZWRGaWVsZFR5cGVzIHx8IENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEU1tjaGFubmVsU2NhbGVUeXBlXTtcblxuICAgICAgaWYgKCFjaGFubmVsU3VwcG9ydGVkRmllbGRUeXBlcy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1tmaWVsZF0udHlwZSkpIHtcbiAgICAgICAgLy8gZmllbGQgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLCBzZXQgaXQgYmFjayB0byBudWxsXG4gICAgICAgIC8vIHNldCBzY2FsZSBiYWNrIHRvIGRlZmF1bHRcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbnVsbH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzY2FsZSB0eXBlIGJhc2VkIG9uIGFnZ3JlZ2F0aW9uXG4gICAqL1xuICB2YWxpZGF0ZVNjYWxlKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7c2NhbGV9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBpZiAoIXNjYWxlKSB7XG4gICAgICAvLyB2aXN1YWxDaGFubmVsIGRvZXNuJ3QgaGF2ZSBzY2FsZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY2FsZU9wdGlvbnMgPSB0aGlzLmdldFNjYWxlT3B0aW9ucyhjaGFubmVsKTtcbiAgICAvLyBjaGVjayBpZiBjdXJyZW50IHNlbGVjdGVkIHNjYWxlIGlzXG4gICAgLy8gc3VwcG9ydGVkLCBpZiBub3QsIGNoYW5nZSB0byBkZWZhdWx0XG4gICAgaWYgKCFzY2FsZU9wdGlvbnMuaW5jbHVkZXModGhpcy5jb25maWdbc2NhbGVdKSkge1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W3NjYWxlXTogc2NhbGVPcHRpb25zWzBdfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzY2FsZSBvcHRpb25zIGJhc2VkIG9uIGN1cnJlbnQgZmllbGRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgZ2V0U2NhbGVPcHRpb25zKGNoYW5uZWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIHNjYWxlLCBjaGFubmVsU2NhbGVUeXBlfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWdbZmllbGRdXG4gICAgICA/IEZJRUxEX09QVFNbdGhpcy5jb25maWdbZmllbGRdLnR5cGVdLnNjYWxlW2NoYW5uZWxTY2FsZVR5cGVdXG4gICAgICA6IFt0aGlzLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pW3NjYWxlXV07XG4gIH1cblxuICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldDogS2VwbGVyVGFibGUsIGNoYW5uZWw6IHN0cmluZykge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIC8vIGNhbGN1bGF0ZSBsYXllciBjaGFubmVsIGRvbWFpblxuICAgIGNvbnN0IHVwZGF0ZWREb21haW4gPSB0aGlzLmNhbGN1bGF0ZUxheWVyRG9tYWluKGRhdGFzZXQsIHZpc3VhbENoYW5uZWwpO1xuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1t2aXN1YWxDaGFubmVsLmRvbWFpbl06IHVwZGF0ZWREb21haW59KTtcbiAgfVxuXG4gIGdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpOiBVcGRhdGVUcmlnZ2VycyB7XG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnM6IFVwZGF0ZVRyaWdnZXJzID0ge307XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKHZpc3VhbENoYW5uZWwgPT4ge1xuICAgICAgLy8gZmllbGQgcmFuZ2Ugc2NhbGUgZG9tYWluXG4gICAgICBjb25zdCB7YWNjZXNzb3IsIGZpZWxkLCBzY2FsZSwgZG9tYWluLCByYW5nZSwgZGVmYXVsdFZhbHVlLCBmaXhlZH0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnNbYWNjZXNzb3JdID0ge1xuICAgICAgICAgIFtmaWVsZF06IHRoaXMuY29uZmlnW2ZpZWxkXSxcbiAgICAgICAgICBbc2NhbGVdOiB0aGlzLmNvbmZpZ1tzY2FsZV0sXG4gICAgICAgICAgW2RvbWFpbl06IHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgICAgW3JhbmdlXTogdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXSxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6XG4gICAgICAgICAgICB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnZnVuY3Rpb24nID8gZGVmYXVsdFZhbHVlKHRoaXMuY29uZmlnKSA6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAuLi4oZml4ZWQgPyB7W2ZpeGVkXTogdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXX0gOiB7fSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlVHJpZ2dlcnM7XG4gIH1cblxuICBjYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKSB7XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgY29uc3Qgc2NhbGVUeXBlID0gdGhpcy5jb25maWdbc2NhbGVdO1xuXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXTtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAvLyBpZiBjb2xvckZpZWxkIG9yIHNpemVGaWVsZCB3ZXJlIHNldCBiYWNrIHRvIG51bGxcbiAgICAgIHJldHVybiBkZWZhdWx0RG9tYWluO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhc2V0LmdldENvbHVtbkxheWVyRG9tYWluKGZpZWxkLCBzY2FsZVR5cGUpIHx8IGRlZmF1bHREb21haW47XG4gIH1cblxuICBoYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm8pIHtcbiAgICByZXR1cm4gdGhpcy5pc0xheWVySG92ZXJlZChvYmplY3RJbmZvKSAmJiBvYmplY3RJbmZvLm9iamVjdCA/IG9iamVjdEluZm8ub2JqZWN0IDogbnVsbDtcbiAgfVxuXG4gIGlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb2JqZWN0SW5mbz8ucGlja2VkICYmIG9iamVjdEluZm8/LmxheWVyPy5wcm9wcz8uaWQgPT09IHRoaXMuaWQ7XG4gIH1cblxuICBnZXRSYWRpdXNTY2FsZUJ5Wm9vbShtYXBTdGF0ZTogTWFwU3RhdGUsIGZpeGVkUmFkaXVzPzogYm9vbGVhbikge1xuICAgIGNvbnN0IHJhZGl1c0NoYW5uZWwgPSBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZpbmQodmMgPT4gdmMucHJvcGVydHkgPT09ICdyYWRpdXMnKTtcblxuICAgIGlmICghcmFkaXVzQ2hhbm5lbCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSByYWRpdXNDaGFubmVsLmZpZWxkO1xuICAgIGNvbnN0IGZpeGVkID0gZml4ZWRSYWRpdXMgPT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5maXhlZFJhZGl1cyA6IGZpeGVkUmFkaXVzO1xuICAgIGNvbnN0IHtyYWRpdXN9ID0gdGhpcy5jb25maWcudmlzQ29uZmlnO1xuXG4gICAgcmV0dXJuIGZpeGVkID8gMSA6ICh0aGlzLmNvbmZpZ1tmaWVsZF0gPyAxIDogcmFkaXVzKSAqIHRoaXMuZ2V0Wm9vbUZhY3RvcihtYXBTdGF0ZSk7XG4gIH1cblxuICBzaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHByb3BzLnNvbWUocCA9PiAhdGhpcy5ub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMuaW5jbHVkZXMocCkpO1xuICB9XG5cbiAgZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyhpbnRlcmFjdGlvbkNvbmZpZywgYnJ1c2hpbmdUYXJnZXQ/KSB7XG4gICAgY29uc3Qge2JydXNofSA9IGludGVyYWN0aW9uQ29uZmlnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIGJydXNoaW5nXG4gICAgICBhdXRvSGlnaGxpZ2h0OiAhYnJ1c2guZW5hYmxlZCxcbiAgICAgIGJydXNoaW5nUmFkaXVzOiBicnVzaC5jb25maWcuc2l6ZSAqIDEwMDAsXG4gICAgICBicnVzaGluZ1RhcmdldDogYnJ1c2hpbmdUYXJnZXQgfHwgJ3NvdXJjZScsXG4gICAgICBicnVzaGluZ0VuYWJsZWQ6IGJydXNoLmVuYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKHtcbiAgICBpZHgsXG4gICAgZ3B1RmlsdGVyLFxuICAgIG1hcFN0YXRlLFxuICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgIHZpc2libGVcbiAgfToge1xuICAgIGlkeDogbnVtYmVyO1xuICAgIGdwdUZpbHRlcjogR3B1RmlsdGVyO1xuICAgIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgICBsYXllckNhbGxiYWNrczogYW55O1xuICAgIHZpc2libGU6IGJvb2xlYW47XG4gIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBpZHgsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVQsXG4gICAgICBwaWNrYWJsZTogdHJ1ZSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBwYXJhbWV0ZXJzOiB7ZGVwdGhUZXN0OiBCb29sZWFuKG1hcFN0YXRlLmRyYWdSb3RhdGUgfHwgdGhpcy5jb25maWcudmlzQ29uZmlnLmVuYWJsZTNkKX0sXG4gICAgICBoaWRkZW46IHRoaXMuY29uZmlnLmhpZGRlbixcbiAgICAgIC8vIHZpc2NvbmZpZ1xuICAgICAgb3BhY2l0eTogdGhpcy5jb25maWcudmlzQ29uZmlnLm9wYWNpdHksXG4gICAgICBoaWdobGlnaHRDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAvLyBkYXRhIGZpbHRlcmluZ1xuICAgICAgZXh0ZW5zaW9uczogW2RhdGFGaWx0ZXJFeHRlbnNpb25dLFxuICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlciA/IGdwdUZpbHRlci5maWx0ZXJSYW5nZSA6IHVuZGVmaW5lZCxcbiAgICAgIG9uRmlsdGVyZWRJdGVtc0NoYW5nZTogZ3B1RmlsdGVyID8gbGF5ZXJDYWxsYmFja3M/Lm9uRmlsdGVyZWRJdGVtc0NoYW5nZSA6IHVuZGVmaW5lZCxcblxuICAgICAgLy8gbGF5ZXIgc2hvdWxkIGJlIHZpc2libGUgYW5kIGlmIHNwbGl0TWFwLCBzaG93biBpbiB0byBvbmUgb2YgcGFuZWxcbiAgICAgIHZpc2libGU6IHRoaXMuY29uZmlnLmlzVmlzaWJsZSAmJiB2aXNpYmxlXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRIb3ZlckxheWVyUHJvcHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHt0aGlzLmlkfS1ob3ZlcmVkYCxcbiAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgIHdyYXBMb25naXR1ZGU6IHRydWUsXG4gICAgICBjb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVRcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyVGV4dExhYmVsTGF5ZXIoXG4gICAge1xuICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICBnZXRGaWx0ZXJlZCxcbiAgICAgIGdldFBpeGVsT2Zmc2V0LFxuICAgICAgYmFja2dyb3VuZFByb3BzLFxuICAgICAgdXBkYXRlVHJpZ2dlcnMsXG4gICAgICBzaGFyZWRQcm9wc1xuICAgIH06IHtcbiAgICAgIGdldFBvc2l0aW9uPzogKChkOiBhbnkpID0+IG51bWJlcltdKSB8IGFycm93LlZlY3RvcjtcbiAgICAgIGdldEZpbHRlcmVkPzogKGRhdGE6IHtpbmRleDogbnVtYmVyfSwgb2JqZWN0SW5mbzoge2luZGV4OiBudW1iZXJ9KSA9PiBudW1iZXI7XG4gICAgICBnZXRQaXhlbE9mZnNldDogKHRleHRMYWJlbDogYW55KSA9PiBudW1iZXJbXSB8ICgoZDogYW55KSA9PiBudW1iZXJbXSk7XG4gICAgICBiYWNrZ3JvdW5kUHJvcHM/OiB7YmFja2dyb3VuZDogYm9vbGVhbn07XG4gICAgICB1cGRhdGVUcmlnZ2Vyczoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICB9O1xuICAgICAgc2hhcmVkUHJvcHM6IGFueTtcbiAgICB9LFxuICAgIHJlbmRlck9wdHNcbiAgKSB7XG4gICAgY29uc3Qge2RhdGEsIG1hcFN0YXRlfSA9IHJlbmRlck9wdHM7XG4gICAgY29uc3Qge3RleHRMYWJlbH0gPSB0aGlzLmNvbmZpZztcblxuICAgIGNvbnN0IFRleHRMYXllckNsYXNzID0gZGF0YS5kYXRhIGluc3RhbmNlb2YgYXJyb3cuVGFibGUgPyBHZW9BcnJvd1RleHRMYXllciA6IFRleHRMYXllcjtcblxuICAgIHJldHVybiBkYXRhLnRleHRMYWJlbHMucmVkdWNlKChhY2N1LCBkLCBpKSA9PiB7XG4gICAgICBpZiAoZC5nZXRUZXh0KSB7XG4gICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSB0ZXh0TGFiZWxbaV0uYmFja2dyb3VuZCB8fCBiYWNrZ3JvdW5kUHJvcHM/LmJhY2tncm91bmQ7XG5cbiAgICAgICAgYWNjdS5wdXNoKFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBuZXcgVGV4dExheWVyQ2xhc3Moe1xuICAgICAgICAgICAgLi4uc2hhcmVkUHJvcHMsXG4gICAgICAgICAgICBpZDogYCR7dGhpcy5pZH0tbGFiZWwtJHt0ZXh0TGFiZWxbaV0uZmllbGQ/Lm5hbWV9YCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEuZGF0YSxcbiAgICAgICAgICAgIHZpc2libGU6IHRoaXMuY29uZmlnLmlzVmlzaWJsZSxcbiAgICAgICAgICAgIGdldFRleHQ6IGQuZ2V0VGV4dCxcbiAgICAgICAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgICAgICAgZ2V0RmlsdGVyZWQsXG4gICAgICAgICAgICBjaGFyYWN0ZXJTZXQ6IGQuY2hhcmFjdGVyU2V0LFxuICAgICAgICAgICAgZ2V0UGl4ZWxPZmZzZXQ6IGdldFBpeGVsT2Zmc2V0KHRleHRMYWJlbFtpXSksXG4gICAgICAgICAgICBnZXRTaXplOiBQUk9KRUNURURfUElYRUxfU0laRV9NVUxUSVBMSUVSLFxuICAgICAgICAgICAgc2l6ZVNjYWxlOiB0ZXh0TGFiZWxbaV0uc2l6ZSxcbiAgICAgICAgICAgIGdldFRleHRBbmNob3I6IHRleHRMYWJlbFtpXS5hbmNob3IsXG4gICAgICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogdGV4dExhYmVsW2ldLmFsaWdubWVudCxcbiAgICAgICAgICAgIGdldENvbG9yOiB0ZXh0TGFiZWxbaV0uY29sb3IsXG4gICAgICAgICAgICBvdXRsaW5lV2lkdGg6IHRleHRMYWJlbFtpXS5vdXRsaW5lV2lkdGggKiBURVhUX09VVExJTkVfTVVMVElQTElFUixcbiAgICAgICAgICAgIG91dGxpbmVDb2xvcjogdGV4dExhYmVsW2ldLm91dGxpbmVDb2xvcixcbiAgICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgICBnZXRCYWNrZ3JvdW5kQ29sb3I6IHRleHRMYWJlbFtpXS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICBmb250U2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgc2RmOiB0ZXh0TGFiZWxbaV0ub3V0bGluZVdpZHRoID4gMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgLy8gdGV4dCB3aWxsIGFsd2F5cyBzaG93IG9uIHRvcCBvZiBhbGwgbGF5ZXJzXG4gICAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2VcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldEZpbHRlclZhbHVlOiBkYXRhLmdldEZpbHRlclZhbHVlLFxuICAgICAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICAgICAgLi4udXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgICAgICAgIGdldFRleHQ6IHRleHRMYWJlbFtpXS5maWVsZD8ubmFtZSxcbiAgICAgICAgICAgICAgZ2V0UGl4ZWxPZmZzZXQ6IHtcbiAgICAgICAgICAgICAgICAuLi51cGRhdGVUcmlnZ2Vycy5nZXRSYWRpdXMsXG4gICAgICAgICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgICAgICAgYW5jaG9yOiB0ZXh0TGFiZWxbaV0uYW5jaG9yLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogdGV4dExhYmVsW2ldLmFsaWdubWVudFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBnZXRUZXh0QW5jaG9yOiB0ZXh0TGFiZWxbaV0uYW5jaG9yLFxuICAgICAgICAgICAgICBnZXRBbGlnbm1lbnRCYXNlbGluZTogdGV4dExhYmVsW2ldLmFsaWdubWVudCxcbiAgICAgICAgICAgICAgZ2V0Q29sb3I6IHRleHRMYWJlbFtpXS5jb2xvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9zdWJMYXllclByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLihiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKGtlcGxlclRhYmxlOiBLZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pOiBhbnkge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhc2V0OiBLZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pIHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcj86IERhdGFDb250YWluZXJJbnRlcmZhY2UpOiAoLi4uYXJnczogYW55W10pID0+IGFueSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICAgIHJldHVybiAoKSA9PiBudWxsO1xuICB9XG5cbiAgZ2V0TGVnZW5kVmlzdWFsQ2hhbm5lbHMoKToge1trZXk6IHN0cmluZ106IFZpc3VhbENoYW5uZWx9IHtcbiAgICByZXR1cm4gdGhpcy52aXN1YWxDaGFubmVscztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxrQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBQyxzQkFBQSxDQUFBTixPQUFBO0FBRUEsSUFBQU8sS0FBQSxHQUFBQyx1QkFBQSxDQUFBUixPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQUgsc0JBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQVYsT0FBQTtBQUVBLElBQUFXLFVBQUEsR0FBQVgsT0FBQTtBQWtCQSxJQUFBWSxNQUFBLEdBQUFaLE9BQUE7QUFXQSxJQUFBYSxZQUFBLEdBQUFiLE9BQUE7QUFtQ0EsSUFBQWMsT0FBQSxHQUFBUixzQkFBQSxDQUFBTixPQUFBO0FBQXFDLFNBQUFlLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBUix3QkFBQVEsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxRQUFBLENBQUFMLENBQUEs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SUFBTTBmLEtBQVksR0FBRyxFQUFFOztNQUV2QjtNQUNBLE9BQU9DLGlCQUFpQixDQUFDSCxRQUFRLEVBQUVDLFdBQVcsRUFBRUQsUUFBUSxDQUFDeGYsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3BFLElBQU00ZixPQUFPLEdBQUdKLFFBQVEsQ0FBQ2phLE1BQU0sQ0FBQyxVQUFDeEIsSUFBSSxFQUFFOGIsSUFBSSxFQUFFcmdCLENBQUMsRUFBSztVQUNqRHVFLElBQUksQ0FBQ3diLE9BQU8sQ0FBQy9mLENBQUMsQ0FBQyxDQUFDLEdBQUdrRyxlQUFlLENBQUM2WixPQUFPLENBQUMvZixDQUFDLENBQUMsQ0FBQyxDQUFDcWdCLElBQUksQ0FBQztVQUNwRCxPQUFPOWIsSUFBSTtRQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVOMmIsS0FBSyxDQUFDcGUsSUFBSSxDQUFDc2UsT0FBTyxDQUFDO01BQ3JCO01BQ0E7O01BRUE7TUFDQSxTQUFTRCxpQkFBaUJBLENBQUNHLEdBQUcsRUFBRUMsTUFBTSxFQUFFcGMsS0FBSyxFQUFFO1FBQzdDLElBQUlBLEtBQUssS0FBSyxDQUFDLElBQUltYyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUtDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDM0M7VUFDQSxPQUFPLEtBQUs7UUFDZDtRQUVBLElBQUlELEdBQUcsQ0FBQ25jLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBR29jLE1BQU0sQ0FBQ3BjLEtBQUssQ0FBQyxFQUFFO1VBQ2xDbWMsR0FBRyxDQUFDbmMsS0FBSyxDQUFDLEdBQUdtYyxHQUFHLENBQUNuYyxLQUFLLENBQUMsR0FBRyxDQUFDO1VBQzNCLE9BQU8sSUFBSTtRQUNiO1FBRUFtYyxHQUFHLENBQUNuYyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ2QsT0FBT2djLGlCQUFpQixDQUFDRyxHQUFHLEVBQUVDLE1BQU0sRUFBRXBjLEtBQUssR0FBRyxDQUFDLENBQUM7TUFDbEQ7TUFFQSxPQUFPK2IsS0FBSztJQUNkO0VBQUM7SUFBQTVhLEdBQUE7SUFBQXpFLEtBQUEsRUFFRCxTQUFPcUQsUUFBUUEsQ0FBQ3NjLENBQUMsRUFBRTtNQUNqQixPQUFPLElBQUF0YyxlQUFRLEVBQUNzYyxDQUFDLENBQUM7SUFDcEI7RUFBQztBQUFBO0FBQUEsSUFBQUMsUUFBQSxHQUFBOWQsT0FBQSxjQXlvQ1krQixLQUFLIiwiaWdub3JlTGlzdCI6W119
|
|
1538
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZGVja2dsQXJyb3dMYXllcnMiLCJfZXh0ZW5zaW9ucyIsIl9sYXllcnMiLCJfd2luZG93IiwiX2tleW1pcnJvciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2RlZmF1bHRMYXllckljb24iLCJfbGF5ZXJVcGRhdGUiLCJfbGF5ZXJVdGlscyIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfbG9kYXNoIiwiX2dldEFwcGxpY2F0aW9uQ29uZmlnIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9tYXJrZWQiLCJfcmVnZW5lcmF0b3JSdW50aW1lMiIsIm1hcmsiLCJnZW5lcmF0ZUNvbG9yIiwiTEFZRVJfSURfTEVOR1RIIiwiZXhwb3J0cyIsIk1BWF9TQU1QTEVfU0laRSIsImRlZmF1bHREb21haW4iLCJkYXRhRmlsdGVyRXh0ZW5zaW9uIiwiRGF0YUZpbHRlckV4dGVuc2lvbiIsImZpbHRlclNpemUiLCJNQVhfR1BVX0ZJTFRFUlMiLCJjb3VudEl0ZW1zIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VPbkZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJkZWZhdWx0RGF0YUFjY2Vzc29yIiwiZGMiLCJkIiwiaWRlbnRpdHkiLCJkZWZhdWx0R2V0RmllbGRWYWx1ZSIsImZpZWxkIiwidmFsdWVBY2Nlc3NvciIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImtleW1pcnJvciIsImRlY2tnbCIsIm1hcGJveGdsIiwibGF5ZXJDb2xvcnMiLCJ2YWx1ZXMiLCJEYXRhVml6Q29sb3JzIiwibWFwIiwiaGV4VG9SZ2IiLCJpbmRleCIsIl9yZWdlbmVyYXRvciIsIndyYXAiLCJnZW5lcmF0ZUNvbG9yJCIsIl9jb250ZXh0IiwicHJldiIsInN0b3AiLCJjb2xvck1ha2VyIiwiTGF5ZXIiLCJwcm9wcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJpZCIsImdlbmVyYXRlSGFzaElkIiwibWV0YSIsInZpc0NvbmZpZ1NldHRpbmdzIiwiY29uZmlnIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiY29sdW1uTW9kZSIsInN1cHBvcnRlZENvbHVtbk1vZGVzIiwiX3N1cHBvcnRlZENvbHVtbk1vZGVzIiwia2V5IiwiY29sdW1ucyIsImdldExheWVyQ29sdW1ucyIsImlzVmFsaWQiLCJlcnJvck1lc3NhZ2UiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIl9jcmVhdGVDbGFzczIiLCJEZWZhdWx0TGF5ZXJJY29uIiwidHlwZSIsInJlZHVjZSIsImFjYyIsIm9iaiIsInJlcXVpcmVkQ29sdW1ucyIsImNvbmNhdCIsIm9wdGlvbmFsQ29sdW1ucyIsImNvbG9yIiwicHJvcGVydHkiLCJzY2FsZSIsImRvbWFpbiIsInJhbmdlIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwibnVsbFZhbHVlIiwiTk9fVkFMVUVfQ09MT1IiLCJkZWZhdWx0VmFsdWUiLCJzaXplIiwibGF0IiwicGFpciIsImZpZWxkUGFpcktleSIsImxuZyIsImFsdGl0dWRlIiwiYWx0IiwibGF0MCIsImxuZzAiLCJhbHQwIiwibGF0MSIsImxuZzEiLCJhbHQxIiwiX3Byb3BzJGlzVmlzaWJsZSIsIl9wcm9wcyRpc0NvbmZpZ0FjdGl2ZSIsIl9wcm9wcyRoaWRkZW4iLCJkYXRhSWQiLCJsYWJlbCIsIkRFRkFVTFRfTEFZRVJfTEFCRUwiLCJpc1Zpc2libGUiLCJpc0NvbmZpZ0FjdGl2ZSIsImhpZ2hsaWdodENvbG9yIiwiREVGQVVMVF9ISUdITElHSFRfQ09MT1IiLCJoaWRkZW4iLCJjb2xvckZpZWxkIiwiY29sb3JEb21haW4iLCJjb2xvclNjYWxlIiwiU0NBTEVfVFlQRVMiLCJxdWFudGlsZSIsInNpemVEb21haW4iLCJzaXplU2NhbGUiLCJsaW5lYXIiLCJzaXplRmllbGQiLCJ2aXNDb25maWciLCJ0ZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJjb2xvclVJIiwiREVGQVVMVF9DT0xPUl9VSSIsImNvbG9yUmFuZ2UiLCJhbmltYXRpb24iLCJlbmFibGVkIiwiZ2V0VmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uIiwiY2hhbm5lbCIsInZpc3VhbENoYW5uZWxzIiwibWVhc3VyZSIsInVuZGVmaW5lZCIsInJhbmdlU2V0dGluZ3MiLCJmaWVsZFNldHRpbmdzIiwiZGlzcGxheU5hbWUiLCJkZWZhdWx0TWVhc3VyZSIsImFzc2lnbkNvbHVtbiIsIl90aGlzJGNvbmZpZyRjb2x1bW5zIiwidXBkYXRlIiwiZmllbGRJZHgiLCJhc3NpZ25Db2x1bW5QYWlycyIsImZpZWxkUGFpcnMiLCJfdGhpcyRjb2x1bW5QYWlycyIsIl90aGlzJGNvbHVtblBhaXJzMiIsImNvbHVtblBhaXJzIiwiX3JlZiIsInVwZGF0ZWRDb2x1bW4iLCJwYXJ0bmVyS2V5cyIsInRvQXJyYXkiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIl90aGlzJGNvbHVtblBhaXJzMyIsIl90aGlzJGNvbHVtblBhaXJzNCIsInBhcnRuZXJLZXkiLCJfdGhpcyRjb2x1bW5QYWlyczUiLCJlcnIiLCJnZXRab29tRmFjdG9yIiwiX3JlZjIiLCJ6b29tIiwiX3JlZjIkem9vbU9mZnNldCIsInpvb21PZmZzZXQiLCJNYXRoIiwicG93IiwibWF4IiwiZ2V0RWxldmF0aW9uWm9vbUZhY3RvciIsIl9yZWYzIiwiX3JlZjMkem9vbU9mZnNldCIsIl90aGlzJGNvbmZpZyR2aXNDb25maSIsImZpeGVkSGVpZ2h0IiwiZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvciIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiYW5pbWF0aW9uQ29uZmlnIiwicmVuZGVyTGF5ZXIiLCJnZXRIb3ZlckRhdGEiLCJvYmplY3QiLCJkYXRhQ29udGFpbmVyIiwiZmllbGRzIiwiaG92ZXJJbmZvIiwicm93IiwiZ2V0RmlsdGVyZWRJdGVtQ291bnQiLCJmaXJzdExheWVyIiwiYXNzaWduQ29uZmlnVG9MYXllciIsImNvbmZpZ1RvQ29weSIsImRlZmF1bHRMYXllclByb3BzIiwiX3RoaXMiLCJzaGFsbG93Q29weSIsInYiLCJub3RUb0NvcHkiLCJncm91cCIsImN1cnJlbnRDb25maWciLCJjb3BpZWQiLCJjb3B5TGF5ZXJDb25maWciLCJfc2F0aXNmaWVkQ29sdW1uTW9kZSIsImRhdGFzZXQiLCJzYXRpc2ZpZWRDb2x1bW5Nb2RlIiwiZ2V0U2F0aXNmaWVkQ29sdW1uTW9kZSIsIm9wdGlvbnMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWx0UHJvcHMiLCJkZWZhdWx0Q29sdW1uQ29uZmlnIiwidXBkYXRlTGF5ZXJDb25maWciLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJfdGhpczIiLCJfcmVmNCIsIl9yZWY0JHNoYWxsb3dDb3B5IiwiX3JlZjQkbm90VG9Db3B5IiwiaXNQbGFpbk9iamVjdCIsImluY2x1ZGVzIiwibm90TnVsbG9yVW5kZWZpbmVkIiwicmVnaXN0ZXJWaXNDb25maWciLCJsYXllclZpc0NvbmZpZ3MiLCJfdGhpczMiLCJpdGVtIiwiY29uZmlnSXRlbSIsIkxBWUVSX1ZJU19DT05GSUdTIiwiX3R5cGVvZjIiLCJldmVyeSIsInAiLCJwcm90b3R5cGUiLCJwcm9wc0NvbHVtbnMiLCJjb2x1bW5WYWxpZGF0b3JzIiwicmVxdWlyZWQiLCJyZXF1aXJlZExheWVyQ29sdW1ucyIsImFjY3UiLCJfcHJvcHNDb2x1bW5zJGtleSR2YWwiLCJfcHJvcHNDb2x1bW5zJGtleSIsIl9wcm9wc0NvbHVtbnMka2V5JGZpZSIsIl9wcm9wc0NvbHVtbnMka2V5MiIsIl9wcm9wc0NvbHVtbnMka2V5JHZhbDIiLCJfcHJvcHNDb2x1bW5zJGtleTMiLCJfcHJvcHNDb2x1bW5zJGtleSRmaWUyIiwiX3Byb3BzQ29sdW1ucyRrZXk0IiwidmFsaWRhdG9yIiwib3B0aW9uYWwiLCJfcHJvcHNDb2x1bW5zJGtleSR2YWwzIiwiX3Byb3BzQ29sdW1ucyRrZXk1IiwiX3Byb3BzQ29sdW1ucyRrZXkkZmllMyIsIl9wcm9wc0NvbHVtbnMka2V5NiIsIm5ld0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicHJvcCIsIl90aGlzJGNvbmZpZyIsInByZXZpb3VzIiwiY29sb3JVSVByb3AiLCJlbnRyaWVzIiwiX3JlZjUiLCJfcmVmNiIsIl9zbGljZWRUb0FycmF5MiIsImlzQ29sb3JSYW5nZSIsImNvbG9ycyIsInVwZGF0ZUNvbG9yVUlCeUNvbG9yUmFuZ2UiLCJ1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJIiwidXBkYXRlQ3VzdG9tUGFsZXR0ZSIsIl9uZXdDb25maWckY29sb3JSYW5nZSIsIl9uZXdDb25maWckY29sb3JSYW5nZTIiLCJjb2xvclJhbmdlQ29uZmlnIiwiY3VzdG9tIiwiY3VzdG9tQnJlYWtzIiwiY3VzdG9tUGFsZXR0ZSIsIl90aGlzJGNvbmZpZzIiLCJjb2xvck1hcCIsImNoYW5uZWxLZXkiLCJmaW5kIiwiQ29uc29sZSIsIndhcm4iLCJpbml0aWFsaXplTGF5ZXJDb2xvck1hcCIsImluaXRpYWxpemVDdXN0b21QYWxldHRlIiwiX25ld0NvbmZpZyRjdXN0b21QYWxlIiwiX3RoaXMkY29uZmlnMyIsImlzQ3VzdG9tIiwiY2F0ZWdvcnkiLCJjdXN0b21TdGVwc0NoYW5nZWQiLCJzaG93RHJvcGRvd24iLCJzdGVwcyIsInJldmVyc2VkIiwiQm9vbGVhbiIsInNob3VsZFVwZGF0ZSIsInNvbWUiLCJfdGhpcyRjb25maWc0IiwiaXNDdXN0b21Db2xvclJldmVyc2VkIiwidXBkYXRlQ3VzdG9tQ29sb3JSYW5nZUJ5Q29sb3JVSSIsInVwZGF0ZUNvbG9yUmFuZ2VCeU1hdGNoaW5nUGFsZXR0ZSIsImhhc0NvbHVtblZhbHVlIiwiY29sdW1uIiwiaGFzUmVxdWlyZWRDb2x1bW4iLCJoYXNBbGxDb2x1bW5zIiwiX3RoaXM0IiwiX3RoaXMkY29uZmlnNSIsIl9jdXJyZW50Q29sdW1uTW9kZXMkciIsImN1cnJlbnRDb2x1bW5Nb2RlcyIsImNvbE1vZGUiLCJjb2xLZXkiLCJoYXNMYXllckRhdGEiLCJsYXllckRhdGEiLCJkYXRhIiwibnVtUm93cyIsImlzVmFsaWRUb1NhdmUiLCJzaG91bGRSZW5kZXJMYXllciIsImdldENvbG9yU2NhbGUiLCJjdXN0b21PcmRpbmFsIiwiZ2V0Q2F0ZWdvcmljYWxDb2xvclNjYWxlIiwiaGFzQ29sb3JNYXAiLCJfY29sb3JSYW5nZSRjb2xvck1hcCIsImNNYXAiLCJNYXAiLCJfcmVmNyIsIl9yZWY4IiwiayIsInNjYWxlVHlwZSIsIm9yZGluYWwiLCJnZXRTY2FsZUZ1bmN0aW9uIiwidW5rbm93biIsIlVOS05PV05fQ09MT1JfS0VZIiwiZ2V0VmlzQ2hhbm5lbFNjYWxlIiwiYWNjZXNzVlNGaWVsZFZhbHVlIiwiX2ZpZWxkIiwiX2luZGV4S2V5IiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiX3JlZjkiLCJfdGhpczUiLCJfcmVmOSRkYXRhQWNjZXNzb3IiLCJkYXRhQWNjZXNzb3IiLCJpbmRleEtleSIsImF0dHJpYnV0ZUFjY2Vzc29ycyIsIl90aGlzNSR2aXN1YWxDaGFubmVscyIsImZpeGVkIiwiYWNjZXNzb3IiLCJnZXRBdHRyaWJ1dGVWYWx1ZSIsInNob3VsZEdldFNjYWxlIiwiaXNGaXhlZCIsInNjYWxlRnVuY3Rpb24iLCJnZXRGaWVsZFZhbHVlIiwiYnlab29tIiwibWVtb2l6ZSIsInoiLCJzY2FsZUZ1bmMiLCJnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlIiwiaXNEb21haW5RdWFudGlsZSIsInpTdGVwcyIsImdldFNjYWxlIiwiZ2V0U2NhbGVCeVpvb20iLCJzY2FsZURvbWFpbiIsImdldERvbWFpblN0ZXBzYnlab29tIiwicXVhbnRpbGVzIiwidGhyZXNob2xkcyIsImdldFRocmVzaG9sZHNGcm9tUXVhbnRpbGVzIiwiaXNEb21haW5TdG9wcyIsInN0b3BzIiwiU0NBTEVfRlVOQyIsImdldFBvaW50c0JvdW5kcyIsImdldFBvc2l0aW9uIiwic2FtcGxlRGF0YSIsImdldFNhbXBsZUNvbnRhaW5lckRhdGEiLCJwb2ludHMiLCJtYXBJbmRleCIsImxhdEJvdW5kcyIsImdldExhdExuZ0JvdW5kcyIsImxuZ0JvdW5kcyIsImdldENoYW5nZWRUcmlnZ2VycyIsImRhdGFVcGRhdGVUcmlnZ2VycyIsInRyaWdnZXJDaGFuZ2VkIiwiZGlmZlVwZGF0ZVRyaWdnZXJzIiwiX29sZERhdGFVcGRhdGVUcmlnZ2VycyIsImdldFZhbHVlIiwiYXR0cmlidXRlVmFsdWUiLCJ1cGRhdGVNZXRhIiwiZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzIiwiX3JlZjEwIiwiZmlsdGVyZWRJbmRleCIsImdldERhdGEiLCJkYXRhc2V0SWQiLCJnZXRNZXRhIiwidGwiLCJ1cGRhdGVEYXRhIiwibGF5ZXJEYXRhc2V0IiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsInVwZGF0ZUxheWVyTWV0YSIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIm5ld0ZpbHRlciIsIl90aGlzNiIsInRhYmxlIiwiZ2V0RGF0YXNldCIsInVwZGF0ZWREb21haW4iLCJjYWxjdWxhdGVMYXllckRvbWFpbiIsInZhbGlkYXRlRmllbGRUeXBlIiwidmFsaWRhdGVTY2FsZSIsInZpc3VhbENoYW5uZWwiLCJzdXBwb3J0ZWRGaWVsZFR5cGVzIiwiY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMiLCJDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFMiLCJzY2FsZU9wdGlvbnMiLCJnZXRTY2FsZU9wdGlvbnMiLCJGSUVMRF9PUFRTIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwiZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzIiwiX3RoaXM3IiwidXBkYXRlVHJpZ2dlcnMiLCJnZXRDb2x1bW5MYXllckRvbWFpbiIsImhhc0hvdmVyZWRPYmplY3QiLCJvYmplY3RJbmZvIiwiaXNMYXllckhvdmVyZWQiLCJfb2JqZWN0SW5mbyRsYXllciIsInBpY2tlZCIsImxheWVyIiwiZ2V0UmFkaXVzU2NhbGVCeVpvb20iLCJtYXBTdGF0ZSIsImZpeGVkUmFkaXVzIiwicmFkaXVzQ2hhbm5lbCIsInZjIiwicmFkaXVzIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwiX3RoaXM4Iiwibm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzIiwiZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyIsImludGVyYWN0aW9uQ29uZmlnIiwiYnJ1c2hpbmdUYXJnZXQiLCJicnVzaCIsImF1dG9IaWdobGlnaHQiLCJicnVzaGluZ1JhZGl1cyIsImJydXNoaW5nRW5hYmxlZCIsImdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyIsIl9yZWYxMiIsImlkeCIsImdwdUZpbHRlciIsImxheWVyQ2FsbGJhY2tzIiwidmlzaWJsZSIsImNvb3JkaW5hdGVTeXN0ZW0iLCJDT09SRElOQVRFX1NZU1RFTSIsIkxOR0xBVCIsInBpY2thYmxlIiwid3JhcExvbmdpdHVkZSIsInBhcmFtZXRlcnMiLCJkZXB0aFRlc3QiLCJkcmFnUm90YXRlIiwiZW5hYmxlM2QiLCJvcGFjaXR5IiwiZXh0ZW5zaW9ucyIsImZpbHRlclJhbmdlIiwib25GaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwiZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcyIsInJlbmRlclRleHRMYWJlbExheWVyIiwiX3JlZjEzIiwicmVuZGVyT3B0cyIsIl90aGlzOSIsImdldEZpbHRlcmVkIiwiZ2V0UGl4ZWxPZmZzZXQiLCJiYWNrZ3JvdW5kUHJvcHMiLCJzaGFyZWRQcm9wcyIsIlRleHRMYXllckNsYXNzIiwiVGFibGUiLCJHZW9BcnJvd1RleHRMYXllciIsIlRleHRMYXllciIsInRleHRMYWJlbHMiLCJnZXRUZXh0IiwiX3RleHRMYWJlbCRpJGZpZWxkIiwiX3RleHRMYWJlbCRpJGZpZWxkMiIsImJhY2tncm91bmQiLCJjaGFyYWN0ZXJTZXQiLCJnZXRTaXplIiwiUFJPSkVDVEVEX1BJWEVMX1NJWkVfTVVMVElQTElFUiIsImdldFRleHRBbmNob3IiLCJhbmNob3IiLCJnZXRBbGlnbm1lbnRCYXNlbGluZSIsImFsaWdubWVudCIsImdldENvbG9yIiwib3V0bGluZVdpZHRoIiwiVEVYVF9PVVRMSU5FX01VTFRJUExJRVIiLCJvdXRsaW5lQ29sb3IiLCJnZXRCYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250U2V0dGluZ3MiLCJzZGYiLCJnZXRGaWx0ZXJWYWx1ZSIsImdldFJhZGl1cyIsIl9zdWJMYXllclByb3BzIiwiY3VsbCIsImtlcGxlclRhYmxlIiwiZ2V0TGVnZW5kVmlzdWFsQ2hhbm5lbHMiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0Q29sdW1uRmllbGQiLCJkZWZhdWx0RmllbGRzIiwiYWxsRmllbGRzIiwicmVxdWlyZWRGaWVsZHMiLCJnZXRBbGxQb3NzaWJsZUNvbHVtblBhaXJzIiwiYWxsS2V5cyIsInBvaW50ZXJzIiwiY291bnRQZXJLZXkiLCJwYWlycyIsImluY3JlbWVudFBvaW50ZXJzIiwibmV3UGFpciIsImN1dXIiLCJwdHMiLCJjb3VudHMiLCJjIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvYmFzZS1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NPT1JESU5BVEVfU1lTVEVNfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7R2VvQXJyb3dUZXh0TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWFycm93LWxheWVycyc7XG5pbXBvcnQge0RhdGFGaWx0ZXJFeHRlbnNpb259IGZyb20gJ0BkZWNrLmdsL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHtUZXh0TGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQga2V5bWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCBEZWZhdWx0TGF5ZXJJY29uIGZyb20gJy4vZGVmYXVsdC1sYXllci1pY29uJztcbmltcG9ydCB7ZGlmZlVwZGF0ZVRyaWdnZXJzfSBmcm9tICcuL2xheWVyLXVwZGF0ZSc7XG5pbXBvcnQge2dldFNhdGlzZmllZENvbHVtbk1vZGUsIEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlfSBmcm9tICcuL2xheWVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIENIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyxcbiAgREVGQVVMVF9DT0xPUl9VSSxcbiAgREVGQVVMVF9ISUdITElHSFRfQ09MT1IsXG4gIERFRkFVTFRfTEFZRVJfTEFCRUwsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRGF0YVZpekNvbG9ycyxcbiAgRklFTERfT1BUUyxcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIE1BWF9HUFVfRklMVEVSUyxcbiAgTk9fVkFMVUVfQ09MT1IsXG4gIFBST0pFQ1RFRF9QSVhFTF9TSVpFX01VTFRJUExJRVIsXG4gIFNDQUxFX0ZVTkMsXG4gIFNDQUxFX1RZUEVTLFxuICBURVhUX09VVExJTkVfTVVMVElQTElFUixcbiAgVU5LTk9XTl9DT0xPUl9LRVlcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgRGF0YUNvbnRhaW5lckludGVyZmFjZSxcbiAgRG9tYWluUXVhbnRpbGVzLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgZ2V0TGF0TG5nQm91bmRzLFxuICBnZXRTYW1wbGVDb250YWluZXJEYXRhLFxuICBoYXNDb2xvck1hcCxcbiAgaGV4VG9SZ2IsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzRG9tYWluU3RvcHMsXG4gIHVwZGF0ZUNvbG9yUmFuZ2VCeU1hdGNoaW5nUGFsZXR0ZVxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHRvQXJyYXksIG5vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtEYXRhc2V0cywgR3B1RmlsdGVyLCBLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVkQmluLFxuICBDb2xvclJhbmdlLFxuICBDb2xvclVJLFxuICBGaWVsZCxcbiAgRmlsdGVyLFxuICBHZXRWaXNDaGFubmVsU2NhbGVSZXR1cm5UeXBlLFxuICBMYXllclZpc0NvbmZpZ1NldHRpbmdzLFxuICBNYXBTdGF0ZSxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBLZXBsZXJMYXllcixcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBDb2x1bW5QYWlycyxcbiAgQ29sdW1uTGFiZWxzLFxuICBTdXBwb3J0ZWRDb2x1bW5Nb2RlLFxuICBGaWVsZFBhaXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFJHQkNvbG9yLFxuICBWYWx1ZU9mLFxuICBWaXN1YWxDaGFubmVsLFxuICBWaXN1YWxDaGFubmVscyxcbiAgVmlzdWFsQ2hhbm5lbERvbWFpbixcbiAgVmlzdWFsQ2hhbm5lbEZpZWxkLFxuICBWaXN1YWxDaGFubmVsU2NhbGVcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBnZXRTY2FsZUZ1bmN0aW9uLFxuICBpbml0aWFsaXplTGF5ZXJDb2xvck1hcCxcbiAgZ2V0Q2F0ZWdvcmljYWxDb2xvclNjYWxlLFxuICB1cGRhdGVDdXN0b21Db2xvclJhbmdlQnlDb2xvclVJXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoLm1lbW9pemUnO1xuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZUN1c3RvbVBhbGV0dGUsXG4gIGlzRG9tYWluUXVhbnRpbGUsXG4gIGdldERvbWFpblN0ZXBzYnlab29tLFxuICBnZXRUaHJlc2hvbGRzRnJvbVF1YW50aWxlc1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuZXhwb3J0IHR5cGUge1xuICBBZ2dyZWdhdGVkQmluLFxuICBMYXllckJhc2VDb25maWcsXG4gIFZpc3VhbENoYW5uZWwsXG4gIFZpc3VhbENoYW5uZWxzLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBWaXN1YWxDaGFubmVsRmllbGQsXG4gIFZpc3VhbENoYW5uZWxTY2FsZVxufTtcblxuZXhwb3J0IHR5cGUgTGF5ZXJCYXNlQ29uZmlnUGFydGlhbCA9IHtkYXRhSWQ6IExheWVyQmFzZUNvbmZpZ1snZGF0YUlkJ119ICYgUGFydGlhbDxMYXllckJhc2VDb25maWc+O1xuXG5leHBvcnQgdHlwZSBMYXllckNvbG9yQ29uZmlnID0ge1xuICBjb2xvckZpZWxkOiBWaXN1YWxDaGFubmVsRmllbGQ7XG4gIGNvbG9yRG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluO1xuICBjb2xvclNjYWxlOiBWaXN1YWxDaGFubmVsU2NhbGU7XG59O1xuZXhwb3J0IHR5cGUgTGF5ZXJTaXplQ29uZmlnID0ge1xuICAvLyBjb2xvciBieSBzaXplLCBkb21haW4gaXMgc2V0IGJ5IGZpbHRlcnMsIGZpZWxkLCBzY2FsZSB0eXBlXG4gIHNpemVEb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIHNpemVTY2FsZTogVmlzdWFsQ2hhbm5lbFNjYWxlO1xuICBzaXplRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbn07XG5leHBvcnQgdHlwZSBMYXllckhlaWdodENvbmZpZyA9IHtcbiAgaGVpZ2h0RmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgaGVpZ2h0RG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluO1xuICBoZWlnaHRTY2FsZTogVmlzdWFsQ2hhbm5lbFNjYWxlO1xufTtcbmV4cG9ydCB0eXBlIExheWVyU3Ryb2tlQ29sb3JDb25maWcgPSB7XG4gIHN0cm9rZUNvbG9yRmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbiAgc3Ryb2tlQ29sb3JEb21haW46IFZpc3VhbENoYW5uZWxEb21haW47XG4gIHN0cm9rZUNvbG9yU2NhbGU6IFZpc3VhbENoYW5uZWxTY2FsZTtcbn07XG5leHBvcnQgdHlwZSBMYXllckNvdmVyYWdlQ29uZmlnID0ge1xuICBjb3ZlcmFnZUZpZWxkOiBWaXN1YWxDaGFubmVsRmllbGQ7XG4gIGNvdmVyYWdlRG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluO1xuICBjb3ZlcmFnZVNjYWxlOiBWaXN1YWxDaGFubmVsU2NhbGU7XG59O1xuZXhwb3J0IHR5cGUgTGF5ZXJSYWRpdXNDb25maWcgPSB7XG4gIHJhZGl1c0ZpZWxkOiBWaXN1YWxDaGFubmVsRmllbGQ7XG4gIHJhZGl1c0RvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjtcbiAgcmFkaXVzU2NhbGU6IFZpc3VhbENoYW5uZWxTY2FsZTtcbn07XG5leHBvcnQgdHlwZSBMYXllcldlaWdodENvbmZpZyA9IHtcbiAgd2VpZ2h0RmllbGQ6IFZpc3VhbENoYW5uZWxGaWVsZDtcbn07XG5cbmV4cG9ydCB0eXBlIFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbiA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbWVhc3VyZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxudHlwZSBDb2x1bW5WYWxpZGF0b3IgPSAoY29sdW1uOiBMYXllckNvbHVtbiwgY29sdW1uczogTGF5ZXJDb2x1bW5zLCBhbGxGaWVsZHM6IEZpZWxkW10pID0+IGJvb2xlYW47XG5cbmV4cG9ydCB0eXBlIFVwZGF0ZVRyaWdnZXJzID0ge1xuICBba2V5OiBzdHJpbmddOiBVcGRhdGVUcmlnZ2VyO1xufTtcbmV4cG9ydCB0eXBlIFVwZGF0ZVRyaWdnZXIgPSB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn07XG5leHBvcnQgdHlwZSBMYXllckJvdW5kcyA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG4vKipcbiAqIEFwcHJveC4gbnVtYmVyIG9mIHBvaW50cyB0byBzYW1wbGUgaW4gYSBsYXJnZSBkYXRhIHNldFxuICovXG5leHBvcnQgY29uc3QgTEFZRVJfSURfTEVOR1RIID0gNjtcblxuY29uc3QgTUFYX1NBTVBMRV9TSVpFID0gNTAwMDtcbmNvbnN0IGRlZmF1bHREb21haW46IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMV07XG5jb25zdCBkYXRhRmlsdGVyRXh0ZW5zaW9uID0gbmV3IERhdGFGaWx0ZXJFeHRlbnNpb24oe1xuICBmaWx0ZXJTaXplOiBNQVhfR1BVX0ZJTFRFUlMsXG4gIC8vIGBjb3VudEl0ZW1zYCBvcHRpb24uIEl0IGVuYWJsZXMgdGhlIEdQVSB0byByZXBvcnQgdGhlIG51bWJlciBvZiBvYmplY3RzIHRoYXQgcGFzcyB0aGUgZmlsdGVyIGNyaXRlcmlhIHZpYSB0aGUgYG9uRmlsdGVyZWRJdGVtc0NoYW5nZWAgY2FsbGJhY2suXG4gIC8vIEB0cy1leHBlY3QtZXJyb3Igbm90IHR5cGVkXG4gIGNvdW50SXRlbXM6IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlT25GaWx0ZXJlZEl0ZW1zQ2hhbmdlID8/IGZhbHNlXG59KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuY29uc3QgZGVmYXVsdERhdGFBY2Nlc3NvciA9IGRjID0+IGQgPT4gZDtcbmNvbnN0IGlkZW50aXR5ID0gZCA9PiBkO1xuLy8gQ2FuJ3QgdXNlIGZpZWRWYWx1ZUFjY2Vzb3IgYmVjYXVzZSBuZWVkIHRoZSByYXcgZGF0YSB0byByZW5kZXIgdG9vbHRpcFxuLy8gU0hBTjogUmV2aXNpdCBoZXJlXG5leHBvcnQgY29uc3QgZGVmYXVsdEdldEZpZWxkVmFsdWUgPSAoZmllbGQsIGQpID0+IGZpZWxkLnZhbHVlQWNjZXNzb3IoZCk7XG5cbmV4cG9ydCBjb25zdCBPVkVSTEFZX1RZUEVfQ09OU1QgPSBrZXltaXJyb3Ioe1xuICBkZWNrZ2w6IG51bGwsXG4gIG1hcGJveGdsOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JzID0gT2JqZWN0LnZhbHVlcyhEYXRhVml6Q29sb3JzKS5tYXAoaGV4VG9SZ2IpO1xuZnVuY3Rpb24qIGdlbmVyYXRlQ29sb3IoKTogR2VuZXJhdG9yPFJHQkNvbG9yPiB7XG4gIGxldCBpbmRleCA9IDA7XG4gIHdoaWxlIChpbmRleCA8IGxheWVyQ29sb3JzLmxlbmd0aCArIDEpIHtcbiAgICBpZiAoaW5kZXggPT09IGxheWVyQ29sb3JzLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSAwO1xuICAgIH1cbiAgICB5aWVsZCBsYXllckNvbG9yc1tpbmRleCsrXTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBMYXllckluZm9Nb2RhbCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdGVtcGxhdGU6IFJlYWN0LkZDPHZvaWQ+O1xuICBtb2RhbFByb3BzOiB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb2xvck1ha2VyID0gZ2VuZXJhdGVDb2xvcigpO1xuXG5leHBvcnQgdHlwZSBCYXNlTGF5ZXJDb25zdHJ1Y3RvclByb3BzID0ge1xuICBpZD86IHN0cmluZztcbn0gJiBMYXllckJhc2VDb25maWdQYXJ0aWFsO1xuXG5jbGFzcyBMYXllciBpbXBsZW1lbnRzIEtlcGxlckxheWVyIHtcbiAgaWQ6IHN0cmluZztcbiAgbWV0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdmlzQ29uZmlnU2V0dGluZ3M6IHtcbiAgICBba2V5OiBzdHJpbmddOiBWYWx1ZU9mPExheWVyVmlzQ29uZmlnU2V0dGluZ3M+O1xuICB9O1xuICBjb25maWc6IExheWVyQmFzZUNvbmZpZyAmIFBhcnRpYWw8TGF5ZXJDb2xvckNvbmZpZyAmIExheWVyU2l6ZUNvbmZpZz47XG4gIC8vIFRPRE86IGRlZmluZSBfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzXG4gIF9vbGREYXRhVXBkYXRlVHJpZ2dlcnM6IGFueTtcblxuICBpc1ZhbGlkOiBib29sZWFuO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gIGZpbHRlcmVkSXRlbUNvdW50OiB7XG4gICAgW2RlY2tMYXllcklkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEJhc2VMYXllckNvbnN0cnVjdG9yUHJvcHMpIHtcbiAgICB0aGlzLmlkID0gcHJvcHMuaWQgfHwgZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcbiAgICAvLyBtZXRhXG4gICAgdGhpcy5tZXRhID0ge307XG5cbiAgICAvLyB2aXNDb25maWdTZXR0aW5nc1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3MgPSB7fTtcblxuICAgIHRoaXMuY29uZmlnID0gdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMpO1xuXG4gICAgLy8gc2V0IGNvbHVtbk1vZGUgZnJvbSBzdXBwb3J0ZWQgY29sdW1uc1xuICAgIGlmICghdGhpcy5jb25maWcuY29sdW1uTW9kZSkge1xuICAgICAgY29uc3Qge3N1cHBvcnRlZENvbHVtbk1vZGVzfSA9IHRoaXM7XG4gICAgICBpZiAoc3VwcG9ydGVkQ29sdW1uTW9kZXM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlID0gc3VwcG9ydGVkQ29sdW1uTW9kZXNbMF0/LmtleTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlbiBzZXQgY29sdW1uLCBjb2x1bW5Nb2RlIHNob3VsZCBhbHJlYWR5IGJlZW4gc2V0XG4gICAgdGhpcy5jb25maWcuY29sdW1ucyA9IHRoaXMuZ2V0TGF5ZXJDb2x1bW5zKHByb3BzLmNvbHVtbnMpO1xuXG4gICAgLy8gZmFsc2UgaW5kaWNhdGVzIHRoYXQgdGhlIGxheWVyIGNhdXNlZCBhbiBlcnJvciwgYW5kIHdhcyBkaXNhYmxlZFxuICAgIHRoaXMuaXNWYWxpZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBudWxsO1xuICAgIC8vIGl0ZW0gY291bnRcbiAgICB0aGlzLmZpbHRlcmVkSXRlbUNvdW50ID0ge307XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCk6IFJlYWN0LkVsZW1lbnRUeXBlIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVySWNvbjtcbiAgfVxuXG4gIGdldCBvdmVybGF5VHlwZSgpOiBrZXlvZiB0eXBlb2YgT1ZFUkxBWV9UWVBFX0NPTlNUIHtcbiAgICByZXR1cm4gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbDtcbiAgfVxuXG4gIGdldCB0eXBlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB7c3VwcG9ydGVkQ29sdW1uTW9kZXN9ID0gdGhpcztcbiAgICBpZiAoc3VwcG9ydGVkQ29sdW1uTW9kZXMpIHtcbiAgICAgIHJldHVybiBzdXBwb3J0ZWRDb2x1bW5Nb2Rlcy5yZWR1Y2U8c3RyaW5nW10+KFxuICAgICAgICAoYWNjLCBvYmopID0+IChvYmoucmVxdWlyZWRDb2x1bW5zID8gYWNjLmNvbmNhdChvYmoucmVxdWlyZWRDb2x1bW5zKSA6IGFjYyksXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgb3B0aW9uYWxDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB7c3VwcG9ydGVkQ29sdW1uTW9kZXN9ID0gdGhpcztcbiAgICBpZiAoc3VwcG9ydGVkQ29sdW1uTW9kZXMpIHtcbiAgICAgIHJldHVybiBzdXBwb3J0ZWRDb2x1bW5Nb2Rlcy5yZWR1Y2U8c3RyaW5nW10+KFxuICAgICAgICAoYWNjLCBvYmopID0+IChvYmoub3B0aW9uYWxDb2x1bW5zID8gYWNjLmNvbmNhdChvYmoub3B0aW9uYWxDb2x1bW5zKSA6IGFjYyksXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbJ2xhYmVsJywgJ29wYWNpdHknLCAndGhpY2tuZXNzJywgJ2lzVmlzaWJsZScsICdoaWRkZW4nXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpOiBWaXN1YWxDaGFubmVscyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIHByb3BlcnR5OiAnY29sb3InLFxuICAgICAgICBmaWVsZDogJ2NvbG9yRmllbGQnLFxuICAgICAgICBzY2FsZTogJ2NvbG9yU2NhbGUnLFxuICAgICAgICBkb21haW46ICdjb2xvckRvbWFpbicsXG4gICAgICAgIHJhbmdlOiAnY29sb3JSYW5nZScsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3IsXG4gICAgICAgIG51bGxWYWx1ZTogTk9fVkFMVUVfQ09MT1IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzaXplJyxcbiAgICAgICAgZmllbGQ6ICdzaXplRmllbGQnLFxuICAgICAgICBzY2FsZTogJ3NpemVTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3NpemVEb21haW4nLFxuICAgICAgICByYW5nZTogJ3NpemVSYW5nZScsXG4gICAgICAgIGtleTogJ3NpemUnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5zaXplLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogMVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXQgY29sdW1uVmFsaWRhdG9ycygpOiB7W2tleTogc3RyaW5nXTogQ29sdW1uVmFsaWRhdG9yfSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIC8qXG4gICAqIENvbHVtbiBwYWlycyBtYXBzIGxheWVyIGNvbHVtbiB0byBhIHNwZWNpZmljIGZpZWxkIHBhaXJzLFxuICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gbnVsbFxuICAgKi9cbiAgZ2V0IGNvbHVtblBhaXJzKCk6IENvbHVtblBhaXJzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29sdW1uIGxhYmVscyBpZiBpdHMgZGlmZmVyZW50IHRoYW4gY29sdW1uIGtleVxuICAgKi9cbiAgZ2V0IGNvbHVtbkxhYmVscygpOiBDb2x1bW5MYWJlbHMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIERlZmF1bHQgcG9pbnQgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgcG9pbnQgYmFzZWQgbGF5ZXJzOiBwb2ludCwgaWNvbiBldGMuXG4gICAqL1xuICBnZXQgZGVmYXVsdFBvaW50Q29sdW1uUGFpcnMoKTogQ29sdW1uUGFpcnMge1xuICAgIHJldHVybiB7XG4gICAgICBsYXQ6IHtwYWlyOiBbJ2xuZycsICdhbHRpdHVkZSddLCBmaWVsZFBhaXJLZXk6ICdsYXQnfSxcbiAgICAgIGxuZzoge3BhaXI6IFsnbGF0JywgJ2FsdGl0dWRlJ10sIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgYWx0aXR1ZGU6IHtwYWlyOiBbJ2xuZycsICdsYXQnXSwgZmllbGRQYWlyS2V5OiAnYWx0aXR1ZGUnfVxuICAgIH07XG4gIH1cblxuICAvKlxuICAgKiBEZWZhdWx0IGxpbmsgY29sdW1uIHBhaXJzLCBjYW4gYmUgdXNlZCBmb3IgbGluayBiYXNlZCBsYXllcnM6IGFyYywgbGluZSBldGNcbiAgICovXG4gIGdldCBkZWZhdWx0TGlua0NvbHVtblBhaXJzKCk6IENvbHVtblBhaXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGF0OiB7cGFpcjogWydsbmcnLCAnYWx0J10sIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nOiB7cGFpcjogWydsYXQnLCAnYWx0J10sIGZpZWxkUGFpcktleTogJ2xuZyd9LFxuICAgICAgYWx0OiB7cGFpcjogWydsbmcnLCAnbGF0J10sIGZpZWxkUGFpcktleTogJ2FsdGl0dWRlJ30sXG5cbiAgICAgIGxhdDA6IHtwYWlyOiAnbG5nMCcsIGZpZWxkUGFpcktleTogJ2xhdCd9LFxuICAgICAgbG5nMDoge3BhaXI6ICdsYXQwJywgZmllbGRQYWlyS2V5OiAnbG5nJ30sXG4gICAgICBhbHQwOiB7cGFpcjogWydsbmcwJywgJ2xhdDAnXSwgZmllbGRQYWlyS2V5OiAnYWx0aXR1ZGUnfSxcblxuICAgICAgbGF0MToge3BhaXI6ICdsbmcxJywgZmllbGRQYWlyS2V5OiAnbGF0J30sXG4gICAgICBsbmcxOiB7cGFpcjogJ2xhdDEnLCBmaWVsZFBhaXJLZXk6ICdsbmcnfSxcbiAgICAgIGFsdDE6IHtwYWlyOiBbJ2xuZzEnLCAnbGF0MSddLCBmaWVsZFBhaXJLZXk6ICdhbHRpdHVkZSd9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBSZWFjdCBjb21wb25lbnQgZm9yIHRvIHJlbmRlciBsYXllciBpbnN0cnVjdGlvbnMgaW4gYSBtb2RhbFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGFuIG9iamVjdFxuICAgKiBAZXhhbXBsZVxuICAgKiAgcmV0dXJuIHtcbiAgICogICAgaWQ6ICdpY29uSW5mbycsXG4gICAqICAgIHRlbXBsYXRlOiBJY29uSW5mb01vZGFsLFxuICAgKiAgICBtb2RhbFByb3BzOiB7XG4gICAqICAgICAgdGl0bGU6ICdIb3cgdG8gZHJhdyBpY29ucydcbiAgICogICB9O1xuICAgKiB9XG4gICAqL1xuICBnZXQgbGF5ZXJJbmZvTW9kYWwoKTogTGF5ZXJJbmZvTW9kYWwgfCBSZWNvcmQ8c3RyaW5nLCBMYXllckluZm9Nb2RhbD4gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoaWNoIGNvbHVtbiBtb2RlcyB0aGlzIGxheWVyIHN1cHBvcnRzXG4gICAqL1xuICBnZXQgc3VwcG9ydGVkQ29sdW1uTW9kZXMoKTogU3VwcG9ydGVkQ29sdW1uTW9kZVtdIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgc3VwcG9ydGVkRGF0YXNldFR5cGVzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKlxuICAgKiBHaXZlbiBhIGRhdGFzZXQsIGF1dG9tYXRpY2FsbHkgZmluZCBwcm9wcyB0byBjcmVhdGUgbGF5ZXIgYmFzZWQgb24gaXRcbiAgICogYW5kIHJldHVybiB0aGUgcHJvcHMgYW5kIHByZXZpb3VzIGZvdW5kIGxheWVycy5cbiAgICogQnkgZGVmYXVsdCwgbm8gbGF5ZXJzIHdpbGwgYmUgZm91bmRcbiAgICovXG4gIHN0YXRpYyBmaW5kRGVmYXVsdExheWVyUHJvcHMoXG4gICAgZGF0YXNldDogS2VwbGVyVGFibGUsXG4gICAgZm91bmRMYXllcnM/OiBhbnlbXVxuICApOiBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSB7XG4gICAgcmV0dXJuIHtwcm9wczogW10sIGZvdW5kTGF5ZXJzfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGFycmF5IG9mIHByZXNldCByZXF1aXJlZCBjb2x1bW4gbmFtZXNcbiAgICogZm91bmQgZmllbGQgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSB0byBzZXQgYXMgbGF5ZXIgY29sdW1uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0RmllbGRzXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGFsbEZpZWxkc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0W10gfCBudWxsfSBhbGwgcG9zc2libGUgcmVxdWlyZWQgbGF5ZXIgY29sdW1uIHBhaXJzXG4gICAqL1xuICBzdGF0aWMgZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0RmllbGRzLCBhbGxGaWVsZHMpIHtcbiAgICAvLyBmaW5kIGFsbCBtYXRjaGVkIGZpZWxkcyBmb3IgZWFjaCByZXF1aXJlZCBjb2xcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRzKS5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBhbGxGaWVsZHMuZmlsdGVyKFxuICAgICAgICBmID0+IGYubmFtZSA9PT0gZGVmYXVsdEZpZWxkc1trZXldIHx8IGRlZmF1bHRGaWVsZHNba2V5XS5pbmNsdWRlcyhmLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBwcmV2W2tleV0gPSByZXF1aXJlZEZpZWxkcy5sZW5ndGhcbiAgICAgICAgPyByZXF1aXJlZEZpZWxkcy5tYXAoZiA9PiAoe1xuICAgICAgICAgICAgdmFsdWU6IGYubmFtZSxcbiAgICAgICAgICAgIGZpZWxkSWR4OiBmLmZpZWxkSWR4XG4gICAgICAgICAgfSkpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9KTtcblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhyZXF1aXJlZENvbHVtbnMpLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAvLyBpZiBhbnkgZmllbGQgbWlzc2luZywgcmV0dXJuIG51bGxcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldEFsbFBvc3NpYmxlQ29sdW1uUGFpcnMocmVxdWlyZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBbGxQb3NzaWJsZUNvbHVtblBhaXJzKHJlcXVpcmVkQ29sdW1ucykge1xuICAgIC8vIGZvciBtdWx0aXBsZSBtYXRjaGVkIGZpZWxkIGZvciBvbmUgcmVxdWlyZWQgY29sdW1uLCByZXR1cm4gbXVsdGlwbGVcbiAgICAvLyBjb21iaW5hdGlvbnMsIGUuIGcuIGlmIGNvbHVtbiBhIGhhcyAyIG1hdGNoZWQsIGNvbHVtbiBiIGhhcyAzIG1hdGNoZWRcbiAgICAvLyA2IHBvc3NpYmxlIGNvbHVtbiBwYWlycyB3aWxsIGJlIHJldHVybmVkXG4gICAgY29uc3QgYWxsS2V5cyA9IE9iamVjdC5rZXlzKHJlcXVpcmVkQ29sdW1ucyk7XG4gICAgY29uc3QgcG9pbnRlcnMgPSBhbGxLZXlzLm1hcCgoaywgaSkgPT4gKGkgPT09IGFsbEtleXMubGVuZ3RoIC0gMSA/IC0xIDogMCkpO1xuICAgIGNvbnN0IGNvdW50UGVyS2V5ID0gYWxsS2V5cy5tYXAoayA9PiByZXF1aXJlZENvbHVtbnNba10ubGVuZ3RoKTtcbiAgICAvLyBUT0RPOiBCZXR0ZXIgdHlwaW5nc1xuICAgIGNvbnN0IHBhaXJzOiBhbnlbXSA9IFtdO1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG4gICAgd2hpbGUgKGluY3JlbWVudFBvaW50ZXJzKHBvaW50ZXJzLCBjb3VudFBlcktleSwgcG9pbnRlcnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIGNvbnN0IG5ld1BhaXIgPSBwb2ludGVycy5yZWR1Y2UoKHByZXYsIGN1dXIsIGkpID0+IHtcbiAgICAgICAgcHJldlthbGxLZXlzW2ldXSA9IHJlcXVpcmVkQ29sdW1uc1thbGxLZXlzW2ldXVtjdXVyXTtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgIHBhaXJzLnB1c2gobmV3UGFpcik7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cbiAgICAvLyByZWN1cnNpdmVseSBpbmNyZW1lbnQgcG9pbnRlcnNcbiAgICBmdW5jdGlvbiBpbmNyZW1lbnRQb2ludGVycyhwdHMsIGNvdW50cywgaW5kZXgpIHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBwdHNbMF0gPT09IGNvdW50c1swXSAtIDEpIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBpbmNyZW1lbnRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHRzW2luZGV4XSArIDEgPCBjb3VudHNbaW5kZXhdKSB7XG4gICAgICAgIHB0c1tpbmRleF0gPSBwdHNbaW5kZXhdICsgMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHB0c1tpbmRleF0gPSAwO1xuICAgICAgcmV0dXJuIGluY3JlbWVudFBvaW50ZXJzKHB0cywgY291bnRzLCBpbmRleCAtIDEpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWlycztcbiAgfVxuXG4gIHN0YXRpYyBoZXhUb1JnYihjKSB7XG4gICAgcmV0dXJuIGhleFRvUmdiKGMpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdExheWVyQ29uZmlnKFxuICAgIHByb3BzOiBMYXllckJhc2VDb25maWdQYXJ0aWFsXG4gICk6IExheWVyQmFzZUNvbmZpZyAmIFBhcnRpYWw8TGF5ZXJDb2xvckNvbmZpZyAmIExheWVyU2l6ZUNvbmZpZz4ge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhSWQ6IHByb3BzLmRhdGFJZCxcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCB8fCBERUZBVUxUX0xBWUVSX0xBQkVMLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yIHx8IGNvbG9yTWFrZXIubmV4dCgpLnZhbHVlLFxuICAgICAgLy8gc2V0IGNvbHVtbnMgbGF0ZXJcbiAgICAgIGNvbHVtbnM6IHt9LFxuICAgICAgaXNWaXNpYmxlOiBwcm9wcy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiBwcm9wcy5pc0NvbmZpZ0FjdGl2ZSA/PyBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiBwcm9wcy5oaWdobGlnaHRDb2xvciB8fCBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUixcbiAgICAgIGhpZGRlbjogcHJvcHMuaGlkZGVuID8/IGZhbHNlLFxuXG4gICAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGludG8gc2VwYXJhdGUgdmlzdWFsIENoYW5uZWwgY29uZmlnXG4gICAgICAvLyBjb2xvciBieSBmaWVsZCwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgY29sb3JGaWVsZDogbnVsbCxcbiAgICAgIGNvbG9yRG9tYWluOiBbMCwgMV0sXG4gICAgICBjb2xvclNjYWxlOiBTQ0FMRV9UWVBFUy5xdWFudGlsZSxcblxuICAgICAgLy8gY29sb3IgYnkgc2l6ZSwgZG9tYWluIGlzIHNldCBieSBmaWx0ZXJzLCBmaWVsZCwgc2NhbGUgdHlwZVxuICAgICAgc2l6ZURvbWFpbjogWzAsIDFdLFxuICAgICAgc2l6ZVNjYWxlOiBTQ0FMRV9UWVBFUy5saW5lYXIsXG4gICAgICBzaXplRmllbGQ6IG51bGwsXG5cbiAgICAgIHZpc0NvbmZpZzoge30sXG5cbiAgICAgIHRleHRMYWJlbDogW0RFRkFVTFRfVEVYVF9MQUJFTF0sXG5cbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgY29sb3I6IERFRkFVTFRfQ09MT1JfVUksXG4gICAgICAgIGNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfVUlcbiAgICAgIH0sXG4gICAgICBhbmltYXRpb246IHtlbmFibGVkOiBmYWxzZX0sXG4gICAgICAuLi4ocHJvcHMuY29sdW1uTW9kZSA/IHtjb2x1bW5Nb2RlOiBwcm9wcy5jb2x1bW5Nb2RlfSA6IHt9KVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiBhIHZpc3VhbENoYW5uZWwgY29uZmlnXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbihrZXk6IHN0cmluZyk6IFZpc3VhbENoYW5uZWxEZXNjcmlwdGlvbiB7XG4gICAgLy8gZS5nLiBsYWJlbDogQ29sb3IsIG1lYXN1cmU6IFZlaGljbGUgVHlwZVxuICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2tleV07XG4gICAgaWYgKCFjaGFubmVsKSByZXR1cm4ge2xhYmVsOiAnJywgbWVhc3VyZTogdW5kZWZpbmVkfTtcbiAgICBjb25zdCByYW5nZVNldHRpbmdzID0gdGhpcy52aXNDb25maWdTZXR0aW5nc1tjaGFubmVsLnJhbmdlXTtcbiAgICBjb25zdCBmaWVsZFNldHRpbmdzID0gdGhpcy5jb25maWdbY2hhbm5lbC5maWVsZF07XG4gICAgY29uc3QgbGFiZWwgPSByYW5nZVNldHRpbmdzPy5sYWJlbDtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHR5cGVvZiBsYWJlbCA9PT0gJ2Z1bmN0aW9uJyA/IGxhYmVsKHRoaXMuY29uZmlnKSA6IGxhYmVsIHx8ICcnLFxuICAgICAgbWVhc3VyZTogZmllbGRTZXR0aW5nc1xuICAgICAgICA/IGZpZWxkU2V0dGluZ3MuZGlzcGxheU5hbWUgfHwgZmllbGRTZXR0aW5ncy5uYW1lXG4gICAgICAgIDogY2hhbm5lbC5kZWZhdWx0TWVhc3VyZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgdG8gbGF5ZXIgY29sdW1uLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKi9cbiAgYXNzaWduQ29sdW1uKGtleTogc3RyaW5nLCBmaWVsZDoge25hbWU6IHN0cmluZzsgZmllbGRJZHg6IG51bWJlcn0pOiBMYXllckNvbHVtbnMge1xuICAgIC8vIGZpZWxkIHZhbHVlIGNvdWxkIGJlIG51bGwgZm9yIG9wdGlvbmFsIGNvbHVtbnNcbiAgICBjb25zdCB1cGRhdGUgPSBmaWVsZFxuICAgICAgPyB7XG4gICAgICAgICAgdmFsdWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGZpZWxkLmZpZWxkSWR4XG4gICAgICAgIH1cbiAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XToge1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zPy5ba2V5XSxcbiAgICAgICAgLi4udXBkYXRlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gYSBmaWVsZCBwYWlyIHRvIGNvbHVtbiBjb25maWcsIHJldHVybiBjb2x1bW4gY29uZmlnXG4gICAqL1xuICBhc3NpZ25Db2x1bW5QYWlycyhrZXk6IHN0cmluZywgZmllbGRQYWlyczogRmllbGRQYWlyKTogTGF5ZXJDb2x1bW5zIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uUGFpcnMgfHwgIXRoaXMuY29sdW1uUGFpcnM/LltrZXldKSB7XG4gICAgICAvLyBzaG91bGQgbm90IGVuZCBpbiB0aGlzIHN0YXRlXG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1ucztcbiAgICB9XG4gICAgLy8ga2V5ID0gJ2xhdCdcbiAgICBjb25zdCB7cGFpciwgZmllbGRQYWlyS2V5fSA9IHRoaXMuY29sdW1uUGFpcnM/LltrZXldIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBmaWVsZFBhaXJLZXkgPT09ICdzdHJpbmcnICYmICFmaWVsZFBhaXJzW2ZpZWxkUGFpcktleV0pIHtcbiAgICAgIC8vIGRvIG5vdCBhbGxvdyBga2V5OiB1bmRlZmluZWRgIHRvIGNyZWVwIGludG8gdGhlIGB1cGRhdGVkQ29sdW1uYCBvYmplY3RcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zO1xuICAgIH1cblxuICAgIC8vIHBhaXIgPSBbJ2xuZycsICdhbHRdIHwgJ2xuZydcbiAgICBjb25zdCB1cGRhdGVkQ29sdW1uID0ge1xuICAgICAgLi4udGhpcy5jb25maWcuY29sdW1ucyxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZmllbGRQYWlyS2V5IGNhbiBiZSBzdHJpbmdbXSBoZXJlP1xuICAgICAgW2tleV06IGZpZWxkUGFpcnNbZmllbGRQYWlyS2V5XVxuICAgIH07XG5cbiAgICBjb25zdCBwYXJ0bmVyS2V5cyA9IHRvQXJyYXkocGFpcik7XG4gICAgZm9yIChjb25zdCBwYXJ0bmVyS2V5IG9mIHBhcnRuZXJLZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnNbcGFydG5lcktleV0gJiZcbiAgICAgICAgdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldICYmXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZmllbGRQYWlyc1t0aGlzLmNvbHVtblBhaXJzPy5bcGFydG5lcktleV0uZmllbGRQYWlyS2V5XVxuICAgICAgKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdXBkYXRlZENvbHVtbltwYXJ0bmVyS2V5XSA9IGZpZWxkUGFpcnNbdGhpcy5jb2x1bW5QYWlycz8uW3BhcnRuZXJLZXldLmZpZWxkUGFpcktleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGEgcmFkaXVzIHpvb20gbXVsdGlwbGllciB0byByZW5kZXIgcG9pbnRzLCBzbyB0aGV5IGFyZSB2aXNpYmxlIGluIGFsbCB6b29tIGxldmVsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXBTdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbWFwU3RhdGUuem9vbSAtIGFjdHVhbCB6b29tXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdm9pZH0gbWFwU3RhdGUuem9vbU9mZnNldCAtIHpvb21PZmZzZXQgd2hlbiByZW5kZXIgaW4gdGhlIHBsb3QgY29udGFpbmVyIGZvciBleHBvcnQgaW1hZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfSkge1xuICAgIHJldHVybiBNYXRoLnBvdygyLCBNYXRoLm1heCgxNCAtIHpvb20gKyB6b29tT2Zmc2V0LCAwKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGEgZWxldmF0aW9uIHpvb20gbXVsdGlwbGllciB0byByZW5kZXIgcG9pbnRzLCBzbyB0aGV5IGFyZSB2aXNpYmxlIGluIGFsbCB6b29tIGxldmVsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXBTdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbWFwU3RhdGUuem9vbSAtIGFjdHVhbCB6b29tXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gbWFwU3RhdGUuem9vbU9mZnNldCAtIHpvb21PZmZzZXQgd2hlbiByZW5kZXIgaW4gdGhlIHBsb3QgY29udGFpbmVyIGZvciBleHBvcnQgaW1hZ2VcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEVsZXZhdGlvblpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfToge3pvb206IG51bWJlcjsgem9vbU9mZnNldD86IG51bWJlcn0pOiBudW1iZXIge1xuICAgIC8vIGVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3IgaXMgdXNlZCB0byBzdXBwb3J0IGV4aXN0aW5nIG1hcHNcbiAgICBjb25zdCB7Zml4ZWRIZWlnaHQsIGVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3J9ID0gdGhpcy5jb25maWcudmlzQ29uZmlnO1xuICAgIHJldHVybiBmaXhlZEhlaWdodCB8fCBlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yID09PSBmYWxzZVxuICAgICAgPyAxXG4gICAgICA6IE1hdGgucG93KDIsIE1hdGgubWF4KDggLSB6b29tICsgem9vbU9mZnNldCwgMCkpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHM6IERhdGFzZXRzLCBvbGRMYXllckRhdGE/OiB1bmtub3duLCBhbmltYXRpb25Db25maWc/OiBBbmltYXRpb25Db25maWcpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHJlbmRlckxheWVyKC4uLmFyZ3M6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgZ2V0SG92ZXJEYXRhKFxuICAgIG9iamVjdDogYW55LFxuICAgIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGZpZWxkcz86IEZpZWxkW10sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGFuaW1hdGlvbkNvbmZpZz86IEFuaW1hdGlvbkNvbmZpZyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgaG92ZXJJbmZvPzoge2luZGV4OiBudW1iZXJ9XG4gICk6IGFueSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQsIGVhY2ggZW50cnkgb2YgbGF5ZXJEYXRhIHNob3VsZCBoYXZlIGFuIGluZGV4IG9mIGEgcm93IGluIHRoZSBvcmlnaW5hbCBkYXRhIGNvbnRhaW5lci5cbiAgICAvLyBFYWNoIGxheWVyIGNhbiBpbXBsZW1lbnQgaXRzIG93biBnZXRIb3ZlckRhdGEgbWV0aG9kXG4gICAgcmV0dXJuIGRhdGFDb250YWluZXIucm93KG9iamVjdC5pbmRleCk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZEl0ZW1Db3VudCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAvLyB1c2UgZmlyc3QgbGF5ZXJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZEl0ZW1Db3VudCkubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmaXJzdExheWVyID0gT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZEl0ZW1Db3VudClbMF07XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZEl0ZW1Db3VudFtmaXJzdExheWVyXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdoZW4gY2hhbmdlIGxheWVyIHR5cGUsIHRyeSB0byBjb3B5IG92ZXIgbGF5ZXIgY29uZmlncyBhcyBtdWNoIGFzIHBvc3NpYmxlXG4gICAqIEBwYXJhbSBjb25maWdUb0NvcHkgLSBjb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB2aXNDb25maWdTZXR0aW5ncyAtIHZpc0NvbmZpZyBzZXR0aW5ncyBvZiBjb25maWcgdG8gY29weVxuICAgKiBAcGFyYW0gZGF0YXNldHMgLSBjdXJyZW50IGRhdGFzZXRzLlxuICAgKiBAcGFyYW0gZGVmYXVsdExheWVyUHJvcHMgLSBkZWZhdWx0IGxheWVyIGNyZWF0aW9uIGNvbmZpZ3VyYXRpb25zIGZvciBjdXJyZW50IGxheWVyIGFuZCBkYXRhc2V0cy5cbiAgICovXG4gIGFzc2lnbkNvbmZpZ1RvTGF5ZXIoXG4gICAgY29uZmlnVG9Db3B5OiBMYXllckJhc2VDb25maWcgJiBQYXJ0aWFsPExheWVyQ29sb3JDb25maWcgJiBMYXllclNpemVDb25maWc+LFxuICAgIHZpc0NvbmZpZ1NldHRpbmdzOiB7W2tleTogc3RyaW5nXTogVmFsdWVPZjxMYXllclZpc0NvbmZpZ1NldHRpbmdzPn0sXG4gICAgZGF0YXNldHM/OiBEYXRhc2V0cyxcbiAgICBkZWZhdWx0TGF5ZXJQcm9wcz86IEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlIHwgbnVsbFxuICApIHtcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIHZpc3VhbENoYW5uZWwgZmllbGRcbiAgICAvLyBkb24ndCBkZWVwIG1lcmdlIGNvbG9yIHJhbmdlLCByZXZlcnNlZDogaXMgbm90IGEga2V5IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaGFsbG93Q29weSA9IFsnY29sb3JSYW5nZScsICdzdHJva2VDb2xvclJhbmdlJ10uY29uY2F0KFxuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5tYXAodiA9PiB2LmZpZWxkKVxuICAgICk7XG5cbiAgICAvLyBkb24ndCBjb3B5IG92ZXIgZG9tYWluIGFuZCBhbmltYXRpb25cbiAgICBjb25zdCBub3RUb0NvcHkgPSBbJ2FuaW1hdGlvbiddLmNvbmNhdChPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLm1hcCh2ID0+IHYuZG9tYWluKSk7XG4gICAgLy8gaWYgcmFuZ2UgaXMgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGdyb3VwIGNvcHkgaXQsIG90aGVyd2lzZSwgbm90IHRvIGNvcHlcbiAgICBPYmplY3QudmFsdWVzKHRoaXMudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2godiA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbmZpZ1RvQ29weS52aXNDb25maWdbdi5yYW5nZV0gJiZcbiAgICAgICAgdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXSAmJlxuICAgICAgICB2aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cCAhPT0gdGhpcy52aXNDb25maWdTZXR0aW5nc1t2LnJhbmdlXS5ncm91cFxuICAgICAgKSB7XG4gICAgICAgIG5vdFRvQ29weS5wdXNoKHYucmFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZG9uJ3QgY29weSBvdmVyIHZpc3VhbENoYW5uZWwgcmFuZ2VcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY29waWVkID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZywgY29uZmlnVG9Db3B5LCB7XG4gICAgICBzaGFsbG93Q29weSxcbiAgICAgIG5vdFRvQ29weVxuICAgIH0pO1xuXG4gICAgLy8gdXBkYXRlIGNvbHVtTm9kZSBiYXNlZCBvbiBuZXcgY29sdW1uc1xuICAgIGlmICh0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlICYmIHRoaXMuc3VwcG9ydGVkQ29sdW1uTW9kZXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0cz8uW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgICAvLyB0cnkgdG8gZmluZCBhIG1vZGUgd2l0aCBhbGwgcmVxdWllZCBjb2x1bW5zIGZyb20gdGhlIHNvdXJjZSBjb25maWdcbiAgICAgIGxldCBzYXRpc2ZpZWRDb2x1bW5Nb2RlID0gZ2V0U2F0aXNmaWVkQ29sdW1uTW9kZShcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRDb2x1bW5Nb2RlcyxcbiAgICAgICAgY29waWVkLmNvbHVtbnMsXG4gICAgICAgIGRhdGFzZXQ/LmZpZWxkc1xuICAgICAgKTtcblxuICAgICAgLy8gaWYgbm8gc3VpdGFibGUgY29sdW1uIG1vZGUgZm91bmQgb3Igbm8gc3VjaCBjb2x1bU1vZGUgZXhpc3RzIGZvciB0aGUgbGF5ZXJcbiAgICAgIC8vIHRoZW4gdHJ5IHVzZSBvbmUgb2YgdGhlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgbGF5ZXIgY29uZmlnc1xuICAgICAgaWYgKCFzYXRpc2ZpZWRDb2x1bW5Nb2RlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICAgICAgLi4uKGRlZmF1bHRMYXllclByb3BzPy5wcm9wcyB8fCBbXSksXG4gICAgICAgICAgLi4uKGRlZmF1bHRMYXllclByb3BzPy5hbHRQcm9wcyB8fCBbXSlcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gVXNlIHRoZSBmaXJzdCBvZiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uc1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5Db25maWcgPSBvcHRpb25zWzBdLmNvbHVtbnM7XG5cbiAgICAgICAgICBzYXRpc2ZpZWRDb2x1bW5Nb2RlID0gZ2V0U2F0aXNmaWVkQ29sdW1uTW9kZShcbiAgICAgICAgICAgIHRoaXMuc3VwcG9ydGVkQ29sdW1uTW9kZXMsXG4gICAgICAgICAgICBkZWZhdWx0Q29sdW1uQ29uZmlnLFxuICAgICAgICAgICAgZGF0YXNldD8uZmllbGRzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzYXRpc2ZpZWRDb2x1bW5Nb2RlKSB7XG4gICAgICAgICAgICBjb3BpZWQuY29sdW1ucyA9IHtcbiAgICAgICAgICAgICAgLi4uY29waWVkLmNvbHVtbnMsXG4gICAgICAgICAgICAgIC4uLmRlZmF1bHRDb2x1bW5Db25maWdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvcGllZC5jb2x1bW5Nb2RlID0gc2F0aXNmaWVkQ29sdW1uTW9kZT8ua2V5IHx8IGNvcGllZC5jb2x1bW5Nb2RlO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoY29waWVkKTtcbiAgICAvLyB2YWxpZGF0ZSB2aXN1YWxDaGFubmVsIGZpZWxkIHR5cGUgYW5kIHNjYWxlIHR5cGVzXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICogUmVjdXJzaXZlbHkgY29weSBjb25maWcgb3ZlciB0byBhbiBlbXB0eSBsYXllclxuICAgKiB3aGVuIHJlY2VpdmVkIHNhdmVkIGNvbmZpZywgb3IgY29weSBjb25maWcgb3ZlciBmcm9tIGEgZGlmZmVyZW50IGxheWVyIHR5cGVcbiAgICogbWFrZSBzdXJlIHRvIG9ubHkgY29weSBvdmVyIHZhbHVlIHRvIGV4aXN0aW5nIGtleXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb25maWcgLSBleGlzdGluZyBjb25maWcgdG8gYmUgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1RvQ29weSAtIG5ldyBDb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHNoYWxsb3dDb3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyB0byBub3QgdG8gYmUgZGVlcCBjb3BpZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbm90VG9Db3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyBub3QgdG8gY29weVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGNvcGllZCBjb25maWdcbiAgICovXG4gIGNvcHlMYXllckNvbmZpZyhcbiAgICBjdXJyZW50Q29uZmlnLFxuICAgIGNvbmZpZ1RvQ29weSxcbiAgICB7c2hhbGxvd0NvcHkgPSBbXSwgbm90VG9Db3B5ID0gW119OiB7c2hhbGxvd0NvcHk/OiBzdHJpbmdbXTsgbm90VG9Db3B5Pzogc3RyaW5nW119ID0ge31cbiAgKSB7XG4gICAgY29uc3QgY29waWVkOiB7Y29sdW1uTW9kZT86IHN0cmluZzsgY29sdW1ucz86IExheWVyQ29sdW1uc30gPSB7fTtcbiAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY3VycmVudENvbmZpZ1trZXldKSAmJlxuICAgICAgICBpc1BsYWluT2JqZWN0KGNvbmZpZ1RvQ29weVtrZXldKSAmJlxuICAgICAgICAhc2hhbGxvd0NvcHkuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAhbm90VG9Db3B5LmluY2x1ZGVzKGtleSlcbiAgICAgICkge1xuICAgICAgICAvLyByZWN1cnNpdmVseSBhc3NpZ24gb2JqZWN0IHZhbHVlXG4gICAgICAgIGNvcGllZFtrZXldID0gdGhpcy5jb3B5TGF5ZXJDb25maWcoY3VycmVudENvbmZpZ1trZXldLCBjb25maWdUb0NvcHlba2V5XSwge1xuICAgICAgICAgIHNoYWxsb3dDb3B5LFxuICAgICAgICAgIG5vdFRvQ29weVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAobm90TnVsbG9yVW5kZWZpbmVkKGNvbmZpZ1RvQ29weVtrZXldKSAmJiAhbm90VG9Db3B5LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgLy8gY29weVxuICAgICAgICBjb3BpZWRba2V5XSA9IGNvbmZpZ1RvQ29weVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZ1xuICAgICAgICBjb3BpZWRba2V5XSA9IGN1cnJlbnRDb25maWdba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb3BpZWQ7XG4gIH1cblxuICByZWdpc3RlclZpc0NvbmZpZyhsYXllclZpc0NvbmZpZ3M6IHtcbiAgICBba2V5OiBzdHJpbmddOiBrZXlvZiBMYXllclZpc0NvbmZpZ1NldHRpbmdzIHwgVmFsdWVPZjxMYXllclZpc0NvbmZpZ1NldHRpbmdzPjtcbiAgfSkge1xuICAgIE9iamVjdC5rZXlzKGxheWVyVmlzQ29uZmlncykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZ0l0ZW0gPSBsYXllclZpc0NvbmZpZ3NbaXRlbV07XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZ0l0ZW0gPT09ICdzdHJpbmcnICYmIExBWUVSX1ZJU19DT05GSUdTW2NvbmZpZ0l0ZW1dKSB7XG4gICAgICAgIC8vIGlmIGFzc2lnbmVkIG9uZSBvZiBkZWZhdWx0IExBWUVSX0NPTkZJR1NcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbY29uZmlnSXRlbV0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW2l0ZW1dID0gTEFZRVJfVklTX0NPTkZJR1NbY29uZmlnSXRlbV07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2YgY29uZmlnSXRlbSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgWyd0eXBlJywgJ2RlZmF1bHRWYWx1ZSddLmV2ZXJ5KHAgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZ0l0ZW0sIHApKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGlmIHByb3ZpZGVkIGN1c3RvbWl6ZWQgdmlzQ29uZmlnLCBhbmQgaGFzIHR5cGUgJiYgZGVmYXVsdFZhbHVlXG4gICAgICAgIC8vIFRPRE86IGZ1cnRoZXIgY2hlY2sgaWYgY3VzdG9taXplZCB2aXNDb25maWcgaXMgdmFsaWRcbiAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW2l0ZW1dID0gY29uZmlnSXRlbS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbaXRlbV0gPSBjb25maWdJdGVtO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TGF5ZXJDb2x1bW5zKHByb3BzQ29sdW1ucyA9IHt9KSB7XG4gICAgY29uc3QgY29sdW1uVmFsaWRhdG9ycyA9IHRoaXMuY29sdW1uVmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCByZXF1aXJlZCA9IHRoaXMucmVxdWlyZWRMYXllckNvbHVtbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGNvbHVtblZhbGlkYXRvcnNba2V5XVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNDb2x1bW5zW2tleV0/LnZhbHVlID8/IG51bGwsXG4gICAgICAgICAgICAgIGZpZWxkSWR4OiBwcm9wc0NvbHVtbnNba2V5XT8uZmllbGRJZHggPz8gLTEsXG4gICAgICAgICAgICAgIHZhbGlkYXRvcjogY29sdW1uVmFsaWRhdG9yc1trZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7dmFsdWU6IHByb3BzQ29sdW1uc1trZXldPy52YWx1ZSA/PyBudWxsLCBmaWVsZElkeDogcHJvcHNDb2x1bW5zW2tleV0/LmZpZWxkSWR4ID8/IC0xfVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gICAgY29uc3Qgb3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToge1xuICAgICAgICAgIHZhbHVlOiBwcm9wc0NvbHVtbnNba2V5XT8udmFsdWUgPz8gbnVsbCxcbiAgICAgICAgICBmaWVsZElkeDogcHJvcHNDb2x1bW5zW2tleV0/LmZpZWxkSWR4ID8/IC0xLFxuICAgICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgY29uc3QgY29sdW1ucyA9IHsuLi5yZXF1aXJlZCwgLi4ub3B0aW9uYWx9O1xuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICB1cGRhdGVMYXllckNvbmZpZzxcbiAgICBMYXllckNvbmZpZyBleHRlbmRzIExheWVyQmFzZUNvbmZpZyAmXG4gICAgICBQYXJ0aWFsPExheWVyQ29sb3JDb25maWcgJiBMYXllclNpemVDb25maWc+ID0gTGF5ZXJCYXNlQ29uZmlnXG4gID4obmV3Q29uZmlnOiBQYXJ0aWFsPExheWVyQ29uZmlnPik6IExheWVyIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsuLi50aGlzLmNvbmZpZywgLi4ubmV3Q29uZmlnfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZyA9IHsuLi50aGlzLmNvbmZpZy52aXNDb25maWcsIC4uLm5ld1Zpc0NvbmZpZ307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB1cGRhdGVMYXllckNvbG9yVUkocHJvcDogc3RyaW5nLCBuZXdDb25maWc6IE5lc3RlZFBhcnRpYWw8Q29sb3JVST4pOiBMYXllciB7XG4gICAgY29uc3Qge2NvbG9yVUk6IHByZXZpb3VzLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QobmV3Q29uZmlnKSB8fCB0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yVUlQcm9wID0gT2JqZWN0LmVudHJpZXMobmV3Q29uZmlnKS5yZWR1Y2UoKGFjY3UsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06XG4gICAgICAgICAgaXNQbGFpbk9iamVjdChhY2N1W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IHsuLi5hY2N1W2tleV0sIC4uLih2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPil9XG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICB9O1xuICAgIH0sIHByZXZpb3VzW3Byb3BdIHx8IERFRkFVTFRfQ09MT1JfVUkpO1xuXG4gICAgY29uc3QgY29sb3JVSSA9IHtcbiAgICAgIC4uLnByZXZpb3VzLFxuICAgICAgW3Byb3BdOiBjb2xvclVJUHJvcFxuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtjb2xvclVJfSk7XG4gICAgLy8gaWYgY29sb3JVSVtwcm9wXSBpcyBjb2xvclJhbmdlXG4gICAgY29uc3QgaXNDb2xvclJhbmdlID0gdmlzQ29uZmlnW3Byb3BdICYmIHZpc0NvbmZpZ1twcm9wXS5jb2xvcnM7XG5cbiAgICBpZiAoaXNDb2xvclJhbmdlKSB7XG4gICAgICAvLyBpZiBvcGVuIGRyb3Bkb3duIGFuZCBwcm9wIGlzIGNvbG9yIHJhbmdlXG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCBhbmQgcmV2ZXJzZWRcbiAgICAgIHRoaXMudXBkYXRlQ29sb3JVSUJ5Q29sb3JSYW5nZShuZXdDb25maWcsIHByb3ApO1xuXG4gICAgICAvLyBpZiBjaGFuZ2VzIGluIFVJIGlzIG1hZGUgdG8gJ3JldmVyc2VkJywgJ3N0ZXBzJyBvciBzdGVwc1xuICAgICAgLy8gdXBkYXRlIGN1cnJlbnQgbGF5ZXIgY29sb3JSYW5nZVxuICAgICAgdGhpcy51cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuXG4gICAgICAvLyBpZiBzZXQgY29sb3JSYW5nZUNvbmZpZyB0byBjdXN0b21cbiAgICAgIC8vIGluaXRpYXRlIGN1c3RvbVBhbGV0dGUgdG8gYmUgZWRpdGVkIGluIHRoZSB1aVxuICAgICAgdGhpcy51cGRhdGVDdXN0b21QYWxldHRlKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gaWYgc2V0IGNvbG9yUmFuZ2VDb25maWcgdG8gY3VzdG9tIHBhbGV0dGUgb3IgY3VzdG9tIGJyZWFrc1xuICAvLyBpbml0aWF0ZSBjdXN0b21QYWxldHRlIHRvIGJlIGVkaXRlZCBpbiB0aGUgdWlcbiAgdXBkYXRlQ3VzdG9tUGFsZXR0ZShuZXdDb25maWcsIHByZXZpb3VzLCBwcm9wKSB7XG4gICAgaWYgKCFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZz8uY3VzdG9tICYmICFuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZz8uY3VzdG9tQnJlYWtzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5ld0NvbmZpZy5jdXN0b21QYWxldHRlKSB7XG4gICAgICAvLyBpZiBuZXcgY29uZmlnIGFsc28gc2V0IGN1c3RvbVBhbGV0dGUsIG5vIG5lZWQgdG8gaW5pdGlhdGUgbmV3XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoIXZpc0NvbmZpZ1twcm9wXSkgcmV0dXJuO1xuICAgIC8vIG1ha2UgY29weSBvZiBjdXJyZW50IGNvbG9yIHJhbmdlIHRvIGN1c3RvbVBhbGV0dGVcbiAgICBsZXQgY3VzdG9tUGFsZXR0ZSA9IHtcbiAgICAgIC4uLnZpc0NvbmZpZ1twcm9wXVxuICAgIH07XG5cbiAgICBpZiAobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcuY3VzdG9tQnJlYWtzICYmICFjdXN0b21QYWxldHRlLmNvbG9yTWFwKSB7XG4gICAgICAvLyBmaW5kIHZpc3VhbENoYW5lbFxuICAgICAgY29uc3QgdmlzdWFsQ2hhbm5lbHMgPSB0aGlzLnZpc3VhbENoYW5uZWxzO1xuICAgICAgY29uc3QgY2hhbm5lbEtleSA9IE9iamVjdC5rZXlzKHZpc3VhbENoYW5uZWxzKS5maW5kKFxuICAgICAgICBrZXkgPT4gdmlzdWFsQ2hhbm5lbHNba2V5XS5yYW5nZSA9PT0gcHJvcFxuICAgICAgKTtcbiAgICAgIGlmICghY2hhbm5lbEtleSkge1xuICAgICAgICAvLyBzaG91bGQgbmV2ZXIgaGFwcG5cbiAgICAgICAgQ29uc29sZS53YXJuKGB1cGRhdGVDb2xvclVJOiBDYW4ndCBmaW5kIHZpc3VhbCBjaGFubmVsIHdoaWNoIHJhbmdlIGlzICR7cHJvcH1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gYWRkIG5hbWV8dHlwZXxjYXRlZ29yeSB0byB1cGRhdGVDdXN0b21QYWxldHRlIGlmIGN1c3RvbUJyZWFrcywgc28gdGhhdFxuICAgICAgLy8gY29sb3JzIHdpbGwgbm90IGJlIG92ZXJyaWRlIGFzIHdlbGwgd2hlbiBpbnZlcnNlIHBhbGV0dGUgd2l0aCBjdXN0b20gYnJlYWtcbiAgICAgIC8vIGluaXRpYXRlIGNvbG9yTWFwIGZyb20gY3VycmVudCBzY2FsZVxuXG4gICAgICBjb25zdCBjb2xvck1hcCA9IGluaXRpYWxpemVMYXllckNvbG9yTWFwKHRoaXMsIHZpc3VhbENoYW5uZWxzW2NoYW5uZWxLZXldKTtcbiAgICAgIGN1c3RvbVBhbGV0dGUgPSBpbml0aWFsaXplQ3VzdG9tUGFsZXR0ZSh2aXNDb25maWdbcHJvcF0sIGNvbG9yTWFwKTtcbiAgICB9IGVsc2UgaWYgKG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnLmN1c3RvbSkge1xuICAgICAgY3VzdG9tUGFsZXR0ZSA9IGluaXRpYWxpemVDdXN0b21QYWxldHRlKHZpc0NvbmZpZ1twcm9wXSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogaWYgb3BlbiBkcm9wZG93biBhbmQgcHJvcCBpcyBjb2xvciByYW5nZVxuICAgKiBBdXRvbWF0aWNhbGx5IHNldCBjb2xvclJhbmdlQ29uZmlnJ3Mgc3RlcCBhbmQgcmV2ZXJzZWRcbiAgICogQHBhcmFtIHsqfSBuZXdDb25maWdcbiAgICogQHBhcmFtIHsqfSBwcm9wXG4gICAqL1xuICB1cGRhdGVDb2xvclVJQnlDb2xvclJhbmdlKG5ld0NvbmZpZywgcHJvcCkge1xuICAgIGNvbnN0IHtjb2xvclVJLCB2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICAvLyB3aGVuIGN1c3RvbSBwYWxldHRlIGFkZHMvcmVtb3ZlcyBzdGVwLCB0aGUgbnVtYmVyIGluIFwiU3RlcHNcIiBpbnB1dCBjb250cm9sXG4gICAgLy8gc2hvdWxkIGJlIHVwZGF0ZWQgYXMgd2VsbFxuICAgIGNvbnN0IGlzQ3VzdG9tID0gbmV3Q29uZmlnLmN1c3RvbVBhbGV0dGU/LmNhdGVnb3J5ID09PSAnQ3VzdG9tJztcbiAgICBjb25zdCBjdXN0b21TdGVwc0NoYW5nZWQgPSBpc0N1c3RvbVxuICAgICAgPyBuZXdDb25maWcuY3VzdG9tUGFsZXR0ZS5jb2xvcnMubGVuZ3RoICE9PSB2aXNDb25maWdbcHJvcF0uY29sb3JzLmxlbmd0aFxuICAgICAgOiBmYWxzZTtcblxuICAgIGlmICh0eXBlb2YgbmV3Q29uZmlnLnNob3dEcm9wZG93biAhPT0gJ251bWJlcicgJiYgIWN1c3RvbVN0ZXBzQ2hhbmdlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmNvbG9yVUksXG4gICAgICAgIFtwcm9wXToge1xuICAgICAgICAgIC4uLmNvbG9yVUlbcHJvcF0sXG4gICAgICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAgICAgLi4uY29sb3JVSVtwcm9wXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICAgICAgc3RlcHM6IGN1c3RvbVN0ZXBzQ2hhbmdlZFxuICAgICAgICAgICAgICA/IGNvbG9yVUlbcHJvcF0uY3VzdG9tUGFsZXR0ZS5jb2xvcnMubGVuZ3RoXG4gICAgICAgICAgICAgIDogdmlzQ29uZmlnW3Byb3BdLmNvbG9ycy5sZW5ndGgsXG4gICAgICAgICAgICByZXZlcnNlZDogQm9vbGVhbih2aXNDb25maWdbcHJvcF0ucmV2ZXJzZWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVDb2xvclJhbmdlQnlDb2xvclVJKG5ld0NvbmZpZywgcHJldmlvdXMsIHByb3ApIHtcbiAgICAvLyBvbmx5IHVwZGF0ZSBjb2xvclJhbmdlIGlmIGNoYW5nZXMgaW4gVUkgaXMgbWFkZSB0byAncmV2ZXJzZWQnLCAnc3RlcHMnIG9yIHN0ZXBzXG4gICAgY29uc3Qgc2hvdWxkVXBkYXRlID1cbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBbJ3JldmVyc2VkJywgJ3N0ZXBzJywgJ2NvbG9yQmxpbmRTYWZlJywgJ3R5cGUnXS5zb21lKFxuICAgICAgICBrZXkgPT5cbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcsIGtleSkgJiZcbiAgICAgICAgICBuZXdDb25maWcuY29sb3JSYW5nZUNvbmZpZ1trZXldICE9PVxuICAgICAgICAgICAgKHByZXZpb3VzW3Byb3BdIHx8IERFRkFVTFRfQ09MT1JfVUkpLmNvbG9yUmFuZ2VDb25maWdba2V5XVxuICAgICAgKTtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qge2NvbG9yVUksIHZpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcblxuICAgIC8vIGZvciBjdXN0b20gcGFsZXR0ZSwgb25lIGNhbiBvbmx5ICdyZXZlcnNlJyB0aGUgY29sb3JzIGluIGN1c3RvbSBwYWxldHRlLlxuICAgIC8vIGNoYW5naW5nICdzdGVwcycsICdjb2xvckJpbmRTYWZlJywgJ3R5cGUnIHNob3VsZCBmYWxsIGJhY2sgdG8gcHJlZGVmaW5lZCBwYWxldHRlLlxuICAgIGNvbnN0IGlzQ3VzdG9tQ29sb3JSZXZlcnNlZCA9XG4gICAgICB2aXNDb25maWcuY29sb3JSYW5nZS5jYXRlZ29yeSA9PT0gJ0N1c3RvbScgJiZcbiAgICAgIG5ld0NvbmZpZy5jb2xvclJhbmdlQ29uZmlnICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobmV3Q29uZmlnLmNvbG9yUmFuZ2VDb25maWcsICdyZXZlcnNlZCcpO1xuXG4gICAgY29uc3QgdXBkYXRlID0gaXNDdXN0b21Db2xvclJldmVyc2VkXG4gICAgICA/IHVwZGF0ZUN1c3RvbUNvbG9yUmFuZ2VCeUNvbG9yVUkodmlzQ29uZmlnW3Byb3BdLCBjb2xvclVJW3Byb3BdLmNvbG9yUmFuZ2VDb25maWcpXG4gICAgICA6IHVwZGF0ZUNvbG9yUmFuZ2VCeU1hdGNoaW5nUGFsZXR0ZSh2aXNDb25maWdbcHJvcF0sIGNvbG9yVUlbcHJvcF0uY29sb3JSYW5nZUNvbmZpZyk7XG5cbiAgICBpZiAodXBkYXRlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbcHJvcF06IHVwZGF0ZX0pO1xuICAgIH1cbiAgfVxuICBoYXNDb2x1bW5WYWx1ZShjb2x1bW4/OiBMYXllckNvbHVtbikge1xuICAgIHJldHVybiBCb29sZWFuKGNvbHVtbiAmJiBjb2x1bW4udmFsdWUgJiYgY29sdW1uLmZpZWxkSWR4ID4gLTEpO1xuICB9XG4gIGhhc1JlcXVpcmVkQ29sdW1uKGNvbHVtbj86IExheWVyQ29sdW1uKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY29sdW1uICYmIChjb2x1bW4ub3B0aW9uYWwgfHwgdGhpcy5oYXNDb2x1bW5WYWx1ZShjb2x1bW4pKSk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgbGF5ZXIgaGFzIGFsbCBjb2x1bW5zXG4gICAqIEByZXR1cm5zIHllcyBvciBub1xuICAgKi9cbiAgaGFzQWxsQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICBjb25zdCB7Y29sdW1ucywgY29sdW1uTW9kZX0gPSB0aGlzLmNvbmZpZztcbiAgICAvLyBpZiBsYXllciBoYXMgZGlmZmVyZW50IGNvbHVtbiBtb2RlLCBjaGVjayBpZiBoYXZlIGFsbCByZXF1aXJlZCBjb2x1bW5zIG9mIGN1cnJlbnQgY29sdW1uIE1vZGVcbiAgICBpZiAoY29sdW1uTW9kZSkge1xuICAgICAgY29uc3QgY3VycmVudENvbHVtbk1vZGVzID0gKHRoaXMuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IGNvbHVtbk1vZGVcbiAgICAgICk7XG4gICAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgICAgY3VycmVudENvbHVtbk1vZGVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBjdXJyZW50Q29sdW1uTW9kZXMucmVxdWlyZWRDb2x1bW5zPy5ldmVyeShjb2xLZXkgPT4gdGhpcy5oYXNDb2x1bW5WYWx1ZShjb2x1bW5zW2NvbEtleV0pKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICBjb2x1bW5zICYmXG4gICAgICAgIE9iamVjdC52YWx1ZXMoY29sdW1ucykuZXZlcnkoKGNvbHVtbj86IExheWVyQ29sdW1uKSA9PiB0aGlzLmhhc1JlcXVpcmVkQ29sdW1uKGNvbHVtbikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGxheWVyIGhhcyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBPYmplY3R9IGxheWVyRGF0YVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0geWVzIG9yIG5vXG4gICAqL1xuICBoYXNMYXllckRhdGEobGF5ZXJEYXRhOiB7ZGF0YTogdW5rbm93bltdIHwgYXJyb3cuVGFibGV9KSB7XG4gICAgaWYgKCFsYXllckRhdGEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIGxheWVyRGF0YS5kYXRhICYmXG4gICAgICAgICgobGF5ZXJEYXRhLmRhdGEgYXMgdW5rbm93bltdKS5sZW5ndGggfHwgKGxheWVyRGF0YS5kYXRhIGFzIGFycm93LlRhYmxlKS5udW1Sb3dzKVxuICAgICk7XG4gIH1cblxuICBpc1ZhbGlkVG9TYXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMudHlwZSAmJiB0aGlzLmhhc0FsbENvbHVtbnMoKSk7XG4gIH1cblxuICBzaG91bGRSZW5kZXJMYXllcihkYXRhKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIEJvb2xlYW4odGhpcy50eXBlKSAmJlxuICAgICAgdGhpcy5oYXNBbGxDb2x1bW5zKCkgJiZcbiAgICAgIHRoaXMuaGFzTGF5ZXJEYXRhKGRhdGEpICYmXG4gICAgICB0eXBlb2YgdGhpcy5yZW5kZXJMYXllciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICk7XG4gIH1cblxuICBnZXRDb2xvclNjYWxlKFxuICAgIGNvbG9yU2NhbGU6IHN0cmluZyxcbiAgICBjb2xvckRvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbixcbiAgICBjb2xvclJhbmdlOiBDb2xvclJhbmdlXG4gICk6IEdldFZpc0NoYW5uZWxTY2FsZVJldHVyblR5cGUge1xuICAgIGlmIChjb2xvclNjYWxlID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsKSB7XG4gICAgICByZXR1cm4gZ2V0Q2F0ZWdvcmljYWxDb2xvclNjYWxlKGNvbG9yRG9tYWluLCBjb2xvclJhbmdlKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQ29sb3JNYXAoY29sb3JSYW5nZSkgJiYgY29sb3JTY2FsZSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tKSB7XG4gICAgICBjb25zdCBjTWFwID0gbmV3IE1hcCgpO1xuICAgICAgY29sb3JSYW5nZS5jb2xvck1hcD8uZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgIGNNYXAuc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IGhleFRvUmdiKHYpIDogdik7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2NhbGVUeXBlID0gY29sb3JTY2FsZSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tID8gY29sb3JTY2FsZSA6IFNDQUxFX1RZUEVTLm9yZGluYWw7XG5cbiAgICAgIGNvbnN0IHNjYWxlID0gZ2V0U2NhbGVGdW5jdGlvbihzY2FsZVR5cGUsIGNNYXAudmFsdWVzKCksIGNNYXAua2V5cygpLCBmYWxzZSk7XG4gICAgICBzY2FsZS51bmtub3duKGNNYXAuZ2V0KFVOS05PV05fQ09MT1JfS0VZKSB8fCBOT19WQUxVRV9DT0xPUik7XG5cbiAgICAgIHJldHVybiBzY2FsZSBhcyBHZXRWaXNDaGFubmVsU2NhbGVSZXR1cm5UeXBlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRWaXNDaGFubmVsU2NhbGUoY29sb3JTY2FsZSwgY29sb3JEb21haW4sIGNvbG9yUmFuZ2UuY29sb3JzLm1hcChoZXhUb1JnYikpO1xuICB9XG5cbiAgYWNjZXNzVlNGaWVsZFZhbHVlKF9maWVsZCwgX2luZGV4S2V5KSB7XG4gICAgcmV0dXJuIGRlZmF1bHRHZXRGaWVsZFZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gdmlzdWFsIGNoYW5uZWxzIHRvIGRlY2suZ2wgYWNjZXNvcnNcbiAgICogQHBhcmFtIHBhcmFtIFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHBhcmFtLmRhdGFBY2Nlc3NvciBBY2Nlc3Mga2VwbGVyLmdsIGxheWVyIGRhdGEgZnJvbSBkZWNrLmdsIGxheWVyXG4gICAqIEBwYXJhbSBwYXJhbS5kYXRhQ29udGFpbmVyIERhdGFDb250YWluZXIgdG8gdXNlIHVzZSB3aXRoIGRhdGFBY2Nlc3NvclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGF0dHJpYnV0ZUFjY2Vzc29ycyAtIGRlY2suZ2wgbGF5ZXIgYXR0cmlidXRlIGFjY2Vzc29yc1xuICAgKi9cbiAgZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtcbiAgICBkYXRhQWNjZXNzb3IgPSBkZWZhdWx0RGF0YUFjY2Vzc29yLFxuICAgIGRhdGFDb250YWluZXIsXG4gICAgaW5kZXhLZXlcbiAgfToge1xuICAgIGRhdGFBY2Nlc3Nvcj86IHR5cGVvZiBkZWZhdWx0RGF0YUFjY2Vzc29yO1xuICAgIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7XG4gICAgaW5kZXhLZXk/OiBudW1iZXIgfCBudWxsO1xuICB9KSB7XG4gICAgY29uc3QgYXR0cmlidXRlQWNjZXNzb3JzOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGZpeGVkLFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICByYW5nZSxcbiAgICAgICAgYWNjZXNzb3IsXG4gICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWUsXG4gICAgICAgIG51bGxWYWx1ZSxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZVxuICAgICAgfSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG5cbiAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICBjb25zdCBzaG91bGRHZXRTY2FsZSA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcblxuICAgICAgICBpZiAoc2hvdWxkR2V0U2NhbGUpIHtcbiAgICAgICAgICBjb25zdCBpc0ZpeGVkID0gZml4ZWQgJiYgdGhpcy5jb25maWcudmlzQ29uZmlnW2ZpeGVkXTtcblxuICAgICAgICAgIGNvbnN0IHNjYWxlRnVuY3Rpb24gPVxuICAgICAgICAgICAgY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3JcbiAgICAgICAgICAgICAgPyB0aGlzLmdldENvbG9yU2NhbGUoXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1tzY2FsZV0sXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1tkb21haW5dLFxuICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcudmlzQ29uZmlnW3JhbmdlXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiB0aGlzLmdldFZpc0NoYW5uZWxTY2FsZShcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW3NjYWxlXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnW2RvbWFpbl0sXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy52aXNDb25maWdbcmFuZ2VdLFxuICAgICAgICAgICAgICAgICAgaXNGaXhlZFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBnZXRGaWVsZFZhbHVlID0gdGhpcy5hY2Nlc3NWU0ZpZWxkVmFsdWUodGhpcy5jb25maWdbZmllbGRdLCBpbmRleEtleSk7XG5cbiAgICAgICAgICBpZiAoc2NhbGVGdW5jdGlvbikge1xuICAgICAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IHNjYWxlRnVuY3Rpb24uYnlab29tXG4gICAgICAgICAgICAgID8gbWVtb2l6ZSh6ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlRnVuYyA9IHNjYWxlRnVuY3Rpb24oeik7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZCA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEVuY29kZWRDaGFubmVsVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgc2NhbGVGdW5jLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFBY2Nlc3NvcihkYXRhQ29udGFpbmVyKShkKSxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGdldEZpZWxkVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IGQgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RW5jb2RlZENoYW5uZWxWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVGdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgZGF0YUFjY2Vzc29yKGRhdGFDb250YWluZXIpKGQpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgICAgICAgICAgICAgIG51bGxWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RmllbGRWYWx1ZVxuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gc2V0IGdldEZpbGxDb2xvckJ5Wm9vbSB0byB0cnVlXG4gICAgICAgICAgICBpZiAoc2NhbGVGdW5jdGlvbi5ieVpvb20pIHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2Ake2FjY2Vzc29yfUJ5Wm9vbWBdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGdldEF0dHJpYnV0ZVZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYXR0cmlidXRlQWNjZXNzb3JzW2FjY2Vzc29yXSA9IGdldEF0dHJpYnV0ZVZhbHVlKHRoaXMuY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdID1cbiAgICAgICAgICAgIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUodGhpcy5jb25maWcpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVBY2Nlc3NvcnNbYWNjZXNzb3JdKSB7XG4gICAgICAgICAgQ29uc29sZS53YXJuKGBGYWlsZWQgdG8gcHJvdmlkZSBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgJHthY2Nlc3NvciB8fCBjaGFubmVsfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXR0cmlidXRlQWNjZXNzb3JzO1xuICB9XG5cbiAgZ2V0VmlzQ2hhbm5lbFNjYWxlKFxuICAgIHNjYWxlOiBzdHJpbmcsXG4gICAgZG9tYWluOiBWaXN1YWxDaGFubmVsRG9tYWluIHwgRG9tYWluUXVhbnRpbGVzLFxuICAgIHJhbmdlOiBhbnksXG4gICAgZml4ZWQ/OiBib29sZWFuXG4gICk6IEdldFZpc0NoYW5uZWxTY2FsZVJldHVyblR5cGUge1xuICAgIC8vIGlmIHF1YW50aWxlIGlzIHByb3ZpZGVkIHBlciB6b29tXG4gICAgaWYgKGlzRG9tYWluUXVhbnRpbGUoZG9tYWluKSAmJiBzY2FsZSA9PT0gU0NBTEVfVFlQRVMucXVhbnRpbGUpIHtcbiAgICAgIGNvbnN0IHpTdGVwcyA9IGRvbWFpbi56O1xuXG4gICAgICBjb25zdCBnZXRTY2FsZSA9IGZ1bmN0aW9uIGdldFNjYWxlQnlab29tKHopIHtcbiAgICAgICAgY29uc3Qgc2NhbGVEb21haW4gPSBnZXREb21haW5TdGVwc2J5Wm9vbShkb21haW4ucXVhbnRpbGVzLCB6U3RlcHMsIHopO1xuICAgICAgICBjb25zdCB0aHJlc2hvbGRzID0gZ2V0VGhyZXNob2xkc0Zyb21RdWFudGlsZXMoc2NhbGVEb21haW4sIHJhbmdlLmxlbmd0aCk7XG5cbiAgICAgICAgcmV0dXJuIGdldFNjYWxlRnVuY3Rpb24oJ3RocmVzaG9sZCcsIHJhbmdlLCB0aHJlc2hvbGRzLCBmYWxzZSk7XG4gICAgICB9O1xuXG4gICAgICBnZXRTY2FsZS5ieVpvb20gPSB0cnVlO1xuICAgICAgcmV0dXJuIGdldFNjYWxlO1xuICAgIH0gZWxzZSBpZiAoaXNEb21haW5TdG9wcyhkb21haW4pKSB7XG4gICAgICAvLyBjb2xvciBpcyBiYXNlZCBvbiB6b29tXG4gICAgICBjb25zdCB6U3RlcHMgPSBkb21haW4uejtcbiAgICAgIC8vIGdldCBzY2FsZSBmdW5jdGlvbiBieSB6XG4gICAgICAvLyB7XG4gICAgICAvLyAgejogW3osIHosIHpdLFxuICAgICAgLy8gIHN0b3BzOiBbW21pbiwgbWF4XSwgW21pbiwgbWF4XV0sXG4gICAgICAvLyAgaW50ZXJwb2xhdGlvbjogJ2ludGVycG9sYXRlJ1xuICAgICAgLy8gfVxuXG4gICAgICBjb25zdCBnZXRTY2FsZSA9IGZ1bmN0aW9uIGdldFNjYWxlQnlab29tKHopIHtcbiAgICAgICAgY29uc3Qgc2NhbGVEb21haW4gPSBnZXREb21haW5TdGVwc2J5Wm9vbShkb21haW4uc3RvcHMsIHpTdGVwcywgeik7XG5cbiAgICAgICAgcmV0dXJuIGdldFNjYWxlRnVuY3Rpb24oc2NhbGUsIHJhbmdlLCBzY2FsZURvbWFpbiwgZml4ZWQpO1xuICAgICAgfTtcblxuICAgICAgZ2V0U2NhbGUuYnlab29tID0gdHJ1ZTtcbiAgICAgIHJldHVybiBnZXRTY2FsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gU0NBTEVfRlVOQ1tmaXhlZCA/ICdsaW5lYXInIDogc2NhbGVdKClcbiAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgLnJhbmdlKGZpeGVkID8gZG9tYWluIDogcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGJvdW5kcyBvZiB0aGUgZGF0YS5cbiAgICovXG4gIGdldFBvaW50c0JvdW5kcyhcbiAgICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICAgIGdldFBvc2l0aW9uOiAoeDogYW55LCBkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT4gbnVtYmVyW10gPSBpZGVudGl0eVxuICApOiBudW1iZXJbXSB8IG51bGwge1xuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZSBlbnRpcmUgZGF0YXNldFxuICAgIC8vIGdldCBhIHNhbXBsZSBvZiBkYXRhIHRvIGNhbGN1bGF0ZSBib3VuZHNcbiAgICBjb25zdCBzYW1wbGVEYXRhID1cbiAgICAgIGRhdGFDb250YWluZXIubnVtUm93cygpID4gTUFYX1NBTVBMRV9TSVpFXG4gICAgICAgID8gZ2V0U2FtcGxlQ29udGFpbmVyRGF0YShkYXRhQ29udGFpbmVyLCBNQVhfU0FNUExFX1NJWkUpXG4gICAgICAgIDogZGF0YUNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHBvaW50cyA9IGdldFBvc2l0aW9uID8gc2FtcGxlRGF0YS5tYXBJbmRleChnZXRQb3NpdGlvbikgOiBbXTtcblxuICAgIGNvbnN0IGxhdEJvdW5kcyA9IGdldExhdExuZ0JvdW5kcyhwb2ludHMsIDEsIFstOTAsIDkwXSk7XG4gICAgY29uc3QgbG5nQm91bmRzID0gZ2V0TGF0TG5nQm91bmRzKHBvaW50cywgMCwgWy0xODAsIDE4MF0pO1xuXG4gICAgaWYgKCFsYXRCb3VuZHMgfHwgIWxuZ0JvdW5kcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsbmdCb3VuZHNbMF0sIGxhdEJvdW5kc1swXSwgbG5nQm91bmRzWzFdLCBsYXRCb3VuZHNbMV1dO1xuICB9XG5cbiAgZ2V0Q2hhbmdlZFRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2Vycykge1xuICAgIGNvbnN0IHRyaWdnZXJDaGFuZ2VkID0gZGlmZlVwZGF0ZVRyaWdnZXJzKGRhdGFVcGRhdGVUcmlnZ2VycywgdGhpcy5fb2xkRGF0YVVwZGF0ZVRyaWdnZXJzKTtcbiAgICB0aGlzLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMgPSBkYXRhVXBkYXRlVHJpZ2dlcnM7XG5cbiAgICByZXR1cm4gdHJpZ2dlckNoYW5nZWQ7XG4gIH1cblxuICBnZXRFbmNvZGVkQ2hhbm5lbFZhbHVlKFxuICAgIHNjYWxlOiAodmFsdWUpID0+IGFueSxcbiAgICBkYXRhOiBhbnlbXSxcbiAgICBmaWVsZDogVmlzdWFsQ2hhbm5lbEZpZWxkLFxuICAgIG51bGxWYWx1ZSA9IE5PX1ZBTFVFX0NPTE9SLFxuICAgIGdldFZhbHVlID0gZGVmYXVsdEdldEZpZWxkVmFsdWVcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShmaWVsZCwgZGF0YSk7XG5cbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsVmFsdWU7XG4gICAgfVxuXG4gICAgbGV0IGF0dHJpYnV0ZVZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlVmFsdWUgPSB2YWx1ZS5tYXAoc2NhbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9IHNjYWxlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIGF0dHJpYnV0ZVZhbHVlID0gbnVsbFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTtcbiAgfVxuXG4gIHVwZGF0ZU1ldGEobWV0YTogTGF5ZXJbJ21ldGEnXSkge1xuICAgIHRoaXMubWV0YSA9IHsuLi50aGlzLm1ldGEsIC4uLm1ldGF9O1xuICB9XG5cbiAgZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKHtmaWx0ZXJlZEluZGV4LCBpZCwgZGF0YUNvbnRhaW5lcn06IEtlcGxlclRhYmxlKTogYW55IHtcbiAgICBjb25zdCB7Y29sdW1uc30gPSB0aGlzLmNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICBnZXREYXRhOiB7ZGF0YXNldElkOiBpZCwgZGF0YUNvbnRhaW5lciwgY29sdW1ucywgZmlsdGVyZWRJbmRleH0sXG4gICAgICBnZXRNZXRhOiB7ZGF0YXNldElkOiBpZCwgZGF0YUNvbnRhaW5lciwgY29sdW1uc30sXG4gICAgICAuLi4odGhpcy5jb25maWcudGV4dExhYmVsIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCB0bCwgaSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFtgZ2V0TGFiZWxDaGFyYWN0ZXJTZXQtJHtpfWBdOiB0bC5maWVsZCA/IHRsLmZpZWxkLm5hbWUgOiBudWxsXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICB1cGRhdGVEYXRhKGRhdGFzZXRzOiBEYXRhc2V0cywgb2xkTGF5ZXJEYXRhOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBsYXllckRhdGFzZXQgPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyfSA9IGxheWVyRGF0YXNldDtcblxuICAgIGNvbnN0IGdldFBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuICAgIGNvbnN0IGRhdGFVcGRhdGVUcmlnZ2VycyA9IHRoaXMuZ2V0RGF0YVVwZGF0ZVRyaWdnZXJzKGxheWVyRGF0YXNldCk7XG4gICAgY29uc3QgdHJpZ2dlckNoYW5nZWQgPSB0aGlzLmdldENoYW5nZWRUcmlnZ2VycyhkYXRhVXBkYXRlVHJpZ2dlcnMpO1xuXG4gICAgaWYgKHRyaWdnZXJDaGFuZ2VkICYmICh0cmlnZ2VyQ2hhbmdlZC5nZXRNZXRhIHx8IHRyaWdnZXJDaGFuZ2VkLmdldERhdGEpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyTWV0YShsYXllckRhdGFzZXQsIGdldFBvc2l0aW9uKTtcblxuICAgICAgLy8gcmVzZXQgZmlsdGVyZWRJdGVtQ291bnRcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtQ291bnQgPSB7fTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YSA9IFtdO1xuXG4gICAgaWYgKCEodHJpZ2dlckNoYW5nZWQgJiYgdHJpZ2dlckNoYW5nZWQuZ2V0RGF0YSkgJiYgb2xkTGF5ZXJEYXRhICYmIG9sZExheWVyRGF0YS5kYXRhKSB7XG4gICAgICAvLyBzYW1lIGRhdGFcbiAgICAgIGRhdGEgPSBvbGRMYXllckRhdGEuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IHRoaXMuY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShsYXllckRhdGFzZXQsIGdldFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2RhdGEsIHRyaWdnZXJDaGFuZ2VkfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBoZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIG9uZSBsYXllciBkb21haW4gd2hlbiBzdGF0ZS5kYXRhIGNoYW5nZWRcbiAgICogaWYgc3RhdGUuZGF0YSBjaGFuZ2UgaXMgZHVlIG90IHVwZGF0ZSBmaWx0ZXIsIG5ld0ZpbGVyIHdpbGwgYmUgcGFzc2VkXG4gICAqIGNhbGxlZCBieSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGFcbiAgICogQHBhcmFtIGRhdGFzZXRzXG4gICAqIEBwYXJhbSBuZXdGaWx0ZXJcbiAgICogQHJldHVybnMgbGF5ZXJcbiAgICovXG4gIHVwZGF0ZUxheWVyRG9tYWluKGRhdGFzZXRzOiBEYXRhc2V0cywgbmV3RmlsdGVyPzogRmlsdGVyKTogTGF5ZXIge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXREYXRhc2V0KGRhdGFzZXRzKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWwgPT4ge1xuICAgICAgY29uc3Qge3NjYWxlfSA9IGNoYW5uZWw7XG4gICAgICBjb25zdCBzY2FsZVR5cGUgPSB0aGlzLmNvbmZpZ1tzY2FsZV07XG4gICAgICAvLyBvcmRpbmFsIGRvbWFpbiBpcyBiYXNlZCBvbiBkYXRhQ29udGFpbmVyLCBpZiBvbmx5IGZpbHRlciBjaGFuZ2VkXG4gICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBvcmRpbmFsIGRvbWFpblxuICAgICAgaWYgKCFuZXdGaWx0ZXIgfHwgc2NhbGVUeXBlICE9PSBTQ0FMRV9UWVBFUy5vcmRpbmFsKSB7XG4gICAgICAgIGNvbnN0IHtkb21haW59ID0gY2hhbm5lbDtcbiAgICAgICAgY29uc3QgdXBkYXRlZERvbWFpbiA9IHRoaXMuY2FsY3VsYXRlTGF5ZXJEb21haW4odGFibGUsIGNoYW5uZWwpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbZG9tYWluXTogdXBkYXRlZERvbWFpbn0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXREYXRhc2V0KGRhdGFzZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFJZCA/IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHZpc3VhbCBjaGFubmVsIGZpZWxkIGFuZCBzY2FsZXMgYmFzZWQgb24gc3VwcG9ydGVkIGZpZWxkICYgc2NhbGUgdHlwZVxuICAgKiBAcGFyYW0gY2hhbm5lbFxuICAgKi9cbiAgdmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWw6IHN0cmluZykge1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCk7XG4gICAgdGhpcy52YWxpZGF0ZVNjYWxlKGNoYW5uZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGZpZWxkIHR5cGUgYmFzZWQgb24gY2hhbm5lbFNjYWxlVHlwZVxuICAgKi9cbiAgdmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbDogc3RyaW5nKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBjaGFubmVsU2NhbGVUeXBlLCBzdXBwb3J0ZWRGaWVsZFR5cGVzfSA9IHZpc3VhbENoYW5uZWw7XG5cbiAgICBpZiAodGhpcy5jb25maWdbZmllbGRdKSB7XG4gICAgICAvLyBpZiBmaWVsZCBpcyBzZWxlY3RlZCwgY2hlY2sgaWYgZmllbGQgdHlwZSBpcyBzdXBwb3J0ZWRcbiAgICAgIGNvbnN0IGNoYW5uZWxTdXBwb3J0ZWRGaWVsZFR5cGVzID1cbiAgICAgICAgc3VwcG9ydGVkRmllbGRUeXBlcyB8fCBDSEFOTkVMX1NDQUxFX1NVUFBPUlRFRF9GSUVMRFNbY2hhbm5lbFNjYWxlVHlwZV07XG5cbiAgICAgIGlmICghY2hhbm5lbFN1cHBvcnRlZEZpZWxkVHlwZXMuaW5jbHVkZXModGhpcy5jb25maWdbZmllbGRdLnR5cGUpKSB7XG4gICAgICAgIC8vIGZpZWxkIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgc2V0IGl0IGJhY2sgdG8gbnVsbFxuICAgICAgICAvLyBzZXQgc2NhbGUgYmFjayB0byBkZWZhdWx0XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tmaWVsZF06IG51bGx9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgc2NhbGUgdHlwZSBiYXNlZCBvbiBhZ2dyZWdhdGlvblxuICAgKi9cbiAgdmFsaWRhdGVTY2FsZShjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge3NjYWxlfSA9IHZpc3VhbENoYW5uZWw7XG4gICAgaWYgKCFzY2FsZSkge1xuICAgICAgLy8gdmlzdWFsQ2hhbm5lbCBkb2Vzbid0IGhhdmUgc2NhbGVcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2NhbGVPcHRpb25zID0gdGhpcy5nZXRTY2FsZU9wdGlvbnMoY2hhbm5lbCk7XG4gICAgLy8gY2hlY2sgaWYgY3VycmVudCBzZWxlY3RlZCBzY2FsZSBpc1xuICAgIC8vIHN1cHBvcnRlZCwgaWYgbm90LCBjaGFuZ2UgdG8gZGVmYXVsdFxuICAgIGlmICghc2NhbGVPcHRpb25zLmluY2x1ZGVzKHRoaXMuY29uZmlnW3NjYWxlXSkpIHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tzY2FsZV06IHNjYWxlT3B0aW9uc1swXX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2NhbGUgb3B0aW9ucyBiYXNlZCBvbiBjdXJyZW50IGZpZWxkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGdldFNjYWxlT3B0aW9ucyhjaGFubmVsOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBzY2FsZSwgY2hhbm5lbFNjYWxlVHlwZX0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnW2ZpZWxkXVxuICAgICAgPyBGSUVMRF9PUFRTW3RoaXMuY29uZmlnW2ZpZWxkXS50eXBlXS5zY2FsZVtjaGFubmVsU2NhbGVUeXBlXVxuICAgICAgOiBbdGhpcy5nZXREZWZhdWx0TGF5ZXJDb25maWcoe2RhdGFJZDogJyd9KVtzY2FsZV1dO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQ6IEtlcGxlclRhYmxlLCBjaGFubmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICB0aGlzLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKTtcbiAgICAvLyBjYWxjdWxhdGUgbGF5ZXIgY2hhbm5lbCBkb21haW5cbiAgICBjb25zdCB1cGRhdGVkRG9tYWluID0gdGhpcy5jYWxjdWxhdGVMYXllckRvbWFpbihkYXRhc2V0LCB2aXN1YWxDaGFubmVsKTtcbiAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtbdmlzdWFsQ2hhbm5lbC5kb21haW5dOiB1cGRhdGVkRG9tYWlufSk7XG4gIH1cblxuICBnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKTogVXBkYXRlVHJpZ2dlcnMge1xuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzOiBVcGRhdGVUcmlnZ2VycyA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXModGhpcy52aXN1YWxDaGFubmVscykuZm9yRWFjaCh2aXN1YWxDaGFubmVsID0+IHtcbiAgICAgIC8vIGZpZWxkIHJhbmdlIHNjYWxlIGRvbWFpblxuICAgICAgY29uc3Qge2FjY2Vzc29yLCBmaWVsZCwgc2NhbGUsIGRvbWFpbiwgcmFuZ2UsIGRlZmF1bHRWYWx1ZSwgZml4ZWR9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzW2FjY2Vzc29yXSA9IHtcbiAgICAgICAgICBbZmllbGRdOiB0aGlzLmNvbmZpZ1tmaWVsZF0sXG4gICAgICAgICAgW3NjYWxlXTogdGhpcy5jb25maWdbc2NhbGVdLFxuICAgICAgICAgIFtkb21haW5dOiB0aGlzLmNvbmZpZ1tkb21haW5dLFxuICAgICAgICAgIFtyYW5nZV06IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tyYW5nZV0sXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOlxuICAgICAgICAgICAgdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRWYWx1ZSh0aGlzLmNvbmZpZykgOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgLi4uKGZpeGVkID8ge1tmaXhlZF06IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1tmaXhlZF19IDoge30pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZVRyaWdnZXJzO1xuICB9XG5cbiAgY2FsY3VsYXRlTGF5ZXJEb21haW4oZGF0YXNldCwgdmlzdWFsQ2hhbm5lbCkge1xuICAgIGNvbnN0IHtzY2FsZX0gPSB2aXN1YWxDaGFubmVsO1xuICAgIGNvbnN0IHNjYWxlVHlwZSA9IHRoaXMuY29uZmlnW3NjYWxlXTtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gICAgaWYgKCFmaWVsZCkge1xuICAgICAgLy8gaWYgY29sb3JGaWVsZCBvciBzaXplRmllbGQgd2VyZSBzZXQgYmFjayB0byBudWxsXG4gICAgICByZXR1cm4gZGVmYXVsdERvbWFpbjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YXNldC5nZXRDb2x1bW5MYXllckRvbWFpbihmaWVsZCwgc2NhbGVUeXBlKSB8fCBkZWZhdWx0RG9tYWluO1xuICB9XG5cbiAgaGFzSG92ZXJlZE9iamVjdChvYmplY3RJbmZvKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbykgJiYgb2JqZWN0SW5mby5vYmplY3QgPyBvYmplY3RJbmZvLm9iamVjdCA6IG51bGw7XG4gIH1cblxuICBpc0xheWVySG92ZXJlZChvYmplY3RJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9iamVjdEluZm8/LnBpY2tlZCAmJiBvYmplY3RJbmZvPy5sYXllcj8ucHJvcHM/LmlkID09PSB0aGlzLmlkO1xuICB9XG5cbiAgZ2V0UmFkaXVzU2NhbGVCeVpvb20obWFwU3RhdGU6IE1hcFN0YXRlLCBmaXhlZFJhZGl1cz86IGJvb2xlYW4pIHtcbiAgICBjb25zdCByYWRpdXNDaGFubmVsID0gT2JqZWN0LnZhbHVlcyh0aGlzLnZpc3VhbENoYW5uZWxzKS5maW5kKHZjID0+IHZjLnByb3BlcnR5ID09PSAncmFkaXVzJyk7XG5cbiAgICBpZiAoIXJhZGl1c0NoYW5uZWwpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gcmFkaXVzQ2hhbm5lbC5maWVsZDtcbiAgICBjb25zdCBmaXhlZCA9IGZpeGVkUmFkaXVzID09PSB1bmRlZmluZWQgPyB0aGlzLmNvbmZpZy52aXNDb25maWcuZml4ZWRSYWRpdXMgOiBmaXhlZFJhZGl1cztcbiAgICBjb25zdCB7cmFkaXVzfSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZztcblxuICAgIHJldHVybiBmaXhlZCA/IDEgOiAodGhpcy5jb25maWdbZmllbGRdID8gMSA6IHJhZGl1cykgKiB0aGlzLmdldFpvb21GYWN0b3IobWFwU3RhdGUpO1xuICB9XG5cbiAgc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBwcm9wcy5zb21lKHAgPT4gIXRoaXMubm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzLmluY2x1ZGVzKHApKTtcbiAgfVxuXG4gIGdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcsIGJydXNoaW5nVGFyZ2V0Pykge1xuICAgIGNvbnN0IHticnVzaH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBicnVzaGluZ1xuICAgICAgYXV0b0hpZ2hsaWdodDogIWJydXNoLmVuYWJsZWQsXG4gICAgICBicnVzaGluZ1JhZGl1czogYnJ1c2guY29uZmlnLnNpemUgKiAxMDAwLFxuICAgICAgYnJ1c2hpbmdUYXJnZXQ6IGJydXNoaW5nVGFyZ2V0IHx8ICdzb3VyY2UnLFxuICAgICAgYnJ1c2hpbmdFbmFibGVkOiBicnVzaC5lbmFibGVkXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyh7XG4gICAgaWR4LFxuICAgIGdwdUZpbHRlcixcbiAgICBtYXBTdGF0ZSxcbiAgICBsYXllckNhbGxiYWNrcyxcbiAgICB2aXNpYmxlXG4gIH06IHtcbiAgICBpZHg6IG51bWJlcjtcbiAgICBncHVGaWx0ZXI6IEdwdUZpbHRlcjtcbiAgICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gICAgbGF5ZXJDYWxsYmFja3M6IGFueTtcbiAgICB2aXNpYmxlOiBib29sZWFuO1xuICB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgaWR4LFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFULFxuICAgICAgcGlja2FibGU6IHRydWUsXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgcGFyYW1ldGVyczoge2RlcHRoVGVzdDogQm9vbGVhbihtYXBTdGF0ZS5kcmFnUm90YXRlIHx8IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCl9LFxuICAgICAgaGlkZGVuOiB0aGlzLmNvbmZpZy5oaWRkZW4sXG4gICAgICAvLyB2aXNjb25maWdcbiAgICAgIG9wYWNpdHk6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5vcGFjaXR5LFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgLy8gZGF0YSBmaWx0ZXJpbmdcbiAgICAgIGV4dGVuc2lvbnM6IFtkYXRhRmlsdGVyRXh0ZW5zaW9uXSxcbiAgICAgIGZpbHRlclJhbmdlOiBncHVGaWx0ZXIgPyBncHVGaWx0ZXIuZmlsdGVyUmFuZ2UgOiB1bmRlZmluZWQsXG4gICAgICBvbkZpbHRlcmVkSXRlbXNDaGFuZ2U6IGdwdUZpbHRlciA/IGxheWVyQ2FsbGJhY2tzPy5vbkZpbHRlcmVkSXRlbXNDaGFuZ2UgOiB1bmRlZmluZWQsXG5cbiAgICAgIC8vIGxheWVyIHNob3VsZCBiZSB2aXNpYmxlIGFuZCBpZiBzcGxpdE1hcCwgc2hvd24gaW4gdG8gb25lIG9mIHBhbmVsXG4gICAgICB2aXNpYmxlOiB0aGlzLmNvbmZpZy5pc1Zpc2libGUgJiYgdmlzaWJsZVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYCR7dGhpcy5pZH0taG92ZXJlZGAsXG4gICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICB3cmFwTG9uZ2l0dWRlOiB0cnVlLFxuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uTE5HTEFUXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlclRleHRMYWJlbExheWVyKFxuICAgIHtcbiAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgZ2V0RmlsdGVyZWQsXG4gICAgICBnZXRQaXhlbE9mZnNldCxcbiAgICAgIGJhY2tncm91bmRQcm9wcyxcbiAgICAgIHVwZGF0ZVRyaWdnZXJzLFxuICAgICAgc2hhcmVkUHJvcHNcbiAgICB9OiB7XG4gICAgICBnZXRQb3NpdGlvbj86ICgoZDogYW55KSA9PiBudW1iZXJbXSkgfCBhcnJvdy5WZWN0b3I7XG4gICAgICBnZXRGaWx0ZXJlZD86IChkYXRhOiB7aW5kZXg6IG51bWJlcn0sIG9iamVjdEluZm86IHtpbmRleDogbnVtYmVyfSkgPT4gbnVtYmVyO1xuICAgICAgZ2V0UGl4ZWxPZmZzZXQ6ICh0ZXh0TGFiZWw6IGFueSkgPT4gbnVtYmVyW10gfCAoKGQ6IGFueSkgPT4gbnVtYmVyW10pO1xuICAgICAgYmFja2dyb3VuZFByb3BzPzoge2JhY2tncm91bmQ6IGJvb2xlYW59O1xuICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgfTtcbiAgICAgIHNoYXJlZFByb3BzOiBhbnk7XG4gICAgfSxcbiAgICByZW5kZXJPcHRzXG4gICkge1xuICAgIGNvbnN0IHtkYXRhLCBtYXBTdGF0ZX0gPSByZW5kZXJPcHRzO1xuICAgIGNvbnN0IHt0ZXh0TGFiZWx9ID0gdGhpcy5jb25maWc7XG5cbiAgICBjb25zdCBUZXh0TGF5ZXJDbGFzcyA9IGRhdGEuZGF0YSBpbnN0YW5jZW9mIGFycm93LlRhYmxlID8gR2VvQXJyb3dUZXh0TGF5ZXIgOiBUZXh0TGF5ZXI7XG5cbiAgICByZXR1cm4gZGF0YS50ZXh0TGFiZWxzLnJlZHVjZSgoYWNjdSwgZCwgaSkgPT4ge1xuICAgICAgaWYgKGQuZ2V0VGV4dCkge1xuICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGV4dExhYmVsW2ldLmJhY2tncm91bmQgfHwgYmFja2dyb3VuZFByb3BzPy5iYWNrZ3JvdW5kO1xuXG4gICAgICAgIGFjY3UucHVzaChcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgbmV3IFRleHRMYXllckNsYXNzKHtcbiAgICAgICAgICAgIC4uLnNoYXJlZFByb3BzLFxuICAgICAgICAgICAgaWQ6IGAke3RoaXMuaWR9LWxhYmVsLSR7dGV4dExhYmVsW2ldLmZpZWxkPy5uYW1lfWAsXG4gICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGEsXG4gICAgICAgICAgICB2aXNpYmxlOiB0aGlzLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgICAgICAgICBnZXRUZXh0OiBkLmdldFRleHQsXG4gICAgICAgICAgICBnZXRQb3NpdGlvbixcbiAgICAgICAgICAgIGdldEZpbHRlcmVkLFxuICAgICAgICAgICAgY2hhcmFjdGVyU2V0OiBkLmNoYXJhY3RlclNldCxcbiAgICAgICAgICAgIGdldFBpeGVsT2Zmc2V0OiBnZXRQaXhlbE9mZnNldCh0ZXh0TGFiZWxbaV0pLFxuICAgICAgICAgICAgZ2V0U2l6ZTogUFJPSkVDVEVEX1BJWEVMX1NJWkVfTVVMVElQTElFUixcbiAgICAgICAgICAgIHNpemVTY2FsZTogdGV4dExhYmVsW2ldLnNpemUsXG4gICAgICAgICAgICBnZXRUZXh0QW5jaG9yOiB0ZXh0TGFiZWxbaV0uYW5jaG9yLFxuICAgICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IHRleHRMYWJlbFtpXS5hbGlnbm1lbnQsXG4gICAgICAgICAgICBnZXRDb2xvcjogdGV4dExhYmVsW2ldLmNvbG9yLFxuICAgICAgICAgICAgb3V0bGluZVdpZHRoOiB0ZXh0TGFiZWxbaV0ub3V0bGluZVdpZHRoICogVEVYVF9PVVRMSU5FX01VTFRJUExJRVIsXG4gICAgICAgICAgICBvdXRsaW5lQ29sb3I6IHRleHRMYWJlbFtpXS5vdXRsaW5lQ29sb3IsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgICAgZ2V0QmFja2dyb3VuZENvbG9yOiB0ZXh0TGFiZWxbaV0uYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgZm9udFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgIHNkZjogdGV4dExhYmVsW2ldLm91dGxpbmVXaWR0aCA+IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgIC8vIHRleHQgd2lsbCBhbHdheXMgc2hvdyBvbiB0b3Agb2YgYWxsIGxheWVyc1xuICAgICAgICAgICAgICBkZXB0aFRlc3Q6IGZhbHNlXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YS5nZXRGaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICAgICAgICBnZXRUZXh0OiB0ZXh0TGFiZWxbaV0uZmllbGQ/Lm5hbWUsXG4gICAgICAgICAgICAgIGdldFBpeGVsT2Zmc2V0OiB7XG4gICAgICAgICAgICAgICAgLi4udXBkYXRlVHJpZ2dlcnMuZ2V0UmFkaXVzLFxuICAgICAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgICAgIGFuY2hvcjogdGV4dExhYmVsW2ldLmFuY2hvcixcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IHRleHRMYWJlbFtpXS5hbGlnbm1lbnRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZ2V0VGV4dEFuY2hvcjogdGV4dExhYmVsW2ldLmFuY2hvcixcbiAgICAgICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6IHRleHRMYWJlbFtpXS5hbGlnbm1lbnQsXG4gICAgICAgICAgICAgIGdldENvbG9yOiB0ZXh0TGFiZWxbaV0uY29sb3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfc3ViTGF5ZXJQcm9wczoge1xuICAgICAgICAgICAgICAuLi4oYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VsbDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZShrZXBsZXJUYWJsZTogS2VwbGVyVGFibGUsIGdldFBvc2l0aW9uKTogYW55IHtcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB1cGRhdGVMYXllck1ldGEoZGF0YXNldDogS2VwbGVyVGFibGUsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3Nlc1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBnZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXI/OiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkge1xuICAgIC8vIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXNcbiAgICByZXR1cm4gKCkgPT4gbnVsbDtcbiAgfVxuXG4gIGdldExlZ2VuZFZpc3VhbENoYW5uZWxzKCk6IHtba2V5OiBzdHJpbmddOiBWaXN1YWxDaGFubmVsfSB7XG4gICAgcmV0dXJuIHRoaXMudmlzdWFsQ2hhbm5lbHM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxrQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBQyxzQkFBQSxDQUFBTixPQUFBO0FBRUEsSUFBQU8sS0FBQSxHQUFBQyx1QkFBQSxDQUFBUixPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQUgsc0JBQUEsQ0FBQU4sT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFdBQUEsR0FBQVgsT0FBQTtBQUVBLElBQUFZLFVBQUEsR0FBQVosT0FBQTtBQWtCQSxJQUFBYSxNQUFBLEdBQUFiLE9BQUE7QUFZQSxJQUFBYyxZQUFBLEdBQUFkLE9BQUE7QUFtQ0EsSUFBQWUsT0FBQSxHQUFBVCxzQkFBQSxDQUFBTixPQUFBO0FBQXFDLElBQUFnQixxQkFBQSxFQWhGckM7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBVix3QkFBQVUsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxRQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxD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
|