haya-select 1.0.112 → 1.0.113

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.
@@ -20,6 +20,7 @@ import useEventListener from "ya-use-event-listener";
20
20
  import usePressOutside from "outside-eye/build/use-press-outside";
21
21
  const styles = {};
22
22
  const dataSets = {};
23
+ const MOBILE_OPTIONS_MAX_WIDTH = 768;
23
24
  /**
24
25
  * @typedef {object} HayaSelectToggleOption
25
26
  * @property {string} icon
@@ -56,6 +57,7 @@ const dataSets = {};
56
57
  * @property {boolean} [debug]
57
58
  * @property {import("react").ReactNode} [id]
58
59
  * @property {object} [model]
60
+ * @property {"auto"|"always"|"never"} [mobileOptionsMode]
59
61
  * @property {boolean} [multiple]
60
62
  * @property {string} [name]
61
63
  * @property {function(): import("react").ReactNode} [noOptionsText]
@@ -96,7 +98,7 @@ const dataSets = {};
96
98
  * @property {number|null} pageSize
97
99
  * @property {boolean} opened
98
100
  * @property {HayaSelectLayout|null} optionsContainerLayout
99
- * @property {"above"|"below"|undefined} optionsPlacement
101
+ * @property {"above"|"below"|"sheet"|undefined} optionsPlacement
100
102
  * @property {number|undefined} optionsTop
101
103
  * @property {"hidden"|"visible"|undefined} optionsVisibility
102
104
  * @property {number|undefined|null} optionsWidth
@@ -156,7 +158,7 @@ function layoutHasPosition(layout) {
156
158
  /**
157
159
  * @typedef {object} HayaSelectStylingContext
158
160
  * @property {boolean} opened
159
- * @property {"above"|"below"|undefined} optionsPlacement
161
+ * @property {"above"|"below"|"sheet"|undefined} optionsPlacement
160
162
  * @property {HayaSelectState} state
161
163
  * @property {Record<string, any>} style
162
164
  */
@@ -178,6 +180,7 @@ const nameForComponentWithMultiple = (component) => {
178
180
  class HayaSelect extends ShapeComponent {
179
181
  static defaultProps = {
180
182
  debug: false,
183
+ mobileOptionsMode: "auto",
181
184
  multiple: false,
182
185
  noOptionsText: null,
183
186
  onBlur: null,
@@ -199,6 +202,7 @@ class HayaSelect extends ShapeComponent {
199
202
  debug: PropTypes.bool.isRequired,
200
203
  id: PropTypes.node,
201
204
  model: PropTypes.object,
205
+ mobileOptionsMode: PropTypes.oneOf(["auto", "always", "never"]),
202
206
  multiple: PropTypes.bool.isRequired,
203
207
  name: PropTypes.string,
204
208
  noOptionsText: PropTypes.func,
@@ -240,10 +244,13 @@ class HayaSelect extends ShapeComponent {
240
244
  values: PropTypes.array
241
245
  });
242
246
  callOptionsPositionAboveIfOutsideScreen = false;
247
+ bodyScrollLocked = false;
243
248
  endOfSelectRef = createRef();
244
249
  latestLoadOptionsRequestId = 0;
245
250
  optionsContainerRef = createRef();
246
251
  pageInputRef = createRef();
252
+ previousBodyOverflow = undefined;
253
+ previousDocumentOverflow = undefined;
247
254
  searchTextValue = "";
248
255
  searchTextInputRef = createRef();
249
256
  selectContainerRef = createRef();
@@ -363,6 +370,14 @@ class HayaSelect extends ShapeComponent {
363
370
  }
364
371
  /** @returns {number} */
365
372
  getActivePage = () => this.s.page || 1;
373
+ /** @returns {boolean} */
374
+ isMobileOptionsSheet() {
375
+ if (this.p.mobileOptionsMode == "always")
376
+ return true;
377
+ if (this.p.mobileOptionsMode == "never")
378
+ return false;
379
+ return Dimensions.get("window").width <= MOBILE_OPTIONS_MAX_WIDTH;
380
+ }
366
381
  /**
367
382
  * @param {Array<HayaSelectOption>|HayaSelectOptionsResult} result
368
383
  * @returns {HayaSelectOptionsResult}
@@ -485,6 +500,11 @@ class HayaSelect extends ShapeComponent {
485
500
  this.debugLog("componentDidUpdate", { syncingKeys: Object.keys(newState) });
486
501
  this.s.toggled = newState.toggled;
487
502
  }
503
+ this.syncOptionsPlacementWithMode();
504
+ }
505
+ /** @returns {void} */
506
+ componentWillUnmount() {
507
+ this.unlockBodyScroll();
488
508
  }
489
509
  /** @returns {import("react").ReactNode} */
490
510
  render() {
@@ -495,6 +515,7 @@ class HayaSelect extends ShapeComponent {
495
515
  const { opened, optionsPlacement } = this.s;
496
516
  const currentOptions = this.getCurrentOptions();
497
517
  const id = idForComponent(this);
518
+ const mobileOptionsSheet = this.isMobileOptionsSheet();
498
519
  const selectContainerStyleActual = { ...this.stylingFor("selectContainer", {
499
520
  flexDirection: "row",
500
521
  alignItems: "center",
@@ -508,7 +529,7 @@ class HayaSelect extends ShapeComponent {
508
529
  paddingBottom: 5,
509
530
  paddingLeft: 5
510
531
  }, [transparent]) };
511
- if (opened) {
532
+ if (opened && !mobileOptionsSheet) {
512
533
  // Prevent select from changing size once the content is replaced with search text once opened
513
534
  selectContainerStyleActual.height = this.s.height;
514
535
  const baseBorderRadius = selectContainerStyleActual.borderRadius;
@@ -539,14 +560,9 @@ class HayaSelect extends ShapeComponent {
539
560
  }, [this.s.loadOptionsAppliedRequestId, className, id, opened, optionsPlacement, this.s.loadOptionsRequestId, Boolean(toggleOptions)]), style: this.stylingFor("main") },
540
561
  React.createElement(Pressable, { dataSet: this.selectContainerDataSet ||= { class: "select-container" }, onLayout: this.tt.onSelectContainerLayout, onPress: this.tt.onSelectClicked, ref: this.tt.selectContainerRef, style: selectContainerStyleActual },
541
562
  React.createElement(View, { dataSet: this.currentSelectedDataSet ||= { class: "current-selected" }, style: this.stylingFor("currentSelected", this.currentSelectedStyle ||= { flex: 1, flexWrap: "wrap", overflow: "hidden" }) },
542
- opened &&
543
- React.createElement(TextInput, { dataSet: this.searchTextInputDataSet ||= { class: "search-text-input" }, onChangeText: this.tt.onChangeSearchText, placeholder: this.translate(".search_dot_dot_dot"), ref: this.tt.searchTextInputRef, style: this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
544
- width: "100%",
545
- borderWidth: 0,
546
- outline: Platform.OS == "web" ? "none" : undefined,
547
- padding: 0
548
- }), defaultValue: this.searchTextValue, ...this.p.searchTextInputProps }),
549
- !opened &&
563
+ opened && !mobileOptionsSheet &&
564
+ this.searchTextInput(),
565
+ (!opened || mobileOptionsSheet) &&
550
566
  React.createElement(React.Fragment, null,
551
567
  currentOptions.length == 0 &&
552
568
  React.createElement(Text, { numberOfLines: 1, style: this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= { color: "grey" }) }, placeholder || this.translate(".nothing_selected")),
@@ -579,6 +595,15 @@ class HayaSelect extends ShapeComponent {
579
595
  opened && !this.p.optionsPortal &&
580
596
  React.createElement(View, null, this.optionsContainer())));
581
597
  }
598
+ /** @returns {import("react").ReactNode} */
599
+ searchTextInput() {
600
+ return (React.createElement(TextInput, { dataSet: this.searchTextInputDataSet ||= { class: "search-text-input" }, defaultValue: this.searchTextValue, onChangeText: this.tt.onChangeSearchText, placeholder: this.translate(".search_dot_dot_dot"), ref: this.tt.searchTextInputRef, style: this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
601
+ width: "100%",
602
+ borderWidth: 0,
603
+ outline: Platform.OS == "web" ? "none" : undefined,
604
+ padding: 0
605
+ }), testID: "haya-select-search-input", ...this.p.searchTextInputProps }));
606
+ }
582
607
  /** @returns {Array<string|number>|string|number|undefined} */
583
608
  defaultValues() {
584
609
  const { attribute, defaultValue, defaultValues, defaultValuesFromOptions, model } = this.props;
@@ -712,7 +737,7 @@ class HayaSelect extends ShapeComponent {
712
737
  this.windowWidth = window.width;
713
738
  this.windowHeight = window.height;
714
739
  if (this.s.opened) {
715
- this.measureNativeSelectLayouts();
740
+ this.syncOptionsPlacementWithMode();
716
741
  }
717
742
  };
718
743
  /**
@@ -812,6 +837,7 @@ class HayaSelect extends ShapeComponent {
812
837
  if (this.isDebugEnabled())
813
838
  this.debugLog("closeOptions", { closedOptionsCount: closedOptions?.length || 0 });
814
839
  this.callOptionsPositionAboveIfOutsideScreen = false;
840
+ this.unlockBodyScroll();
815
841
  this.setState({
816
842
  height: null,
817
843
  loadedOptions: undefined,
@@ -871,28 +897,35 @@ class HayaSelect extends ShapeComponent {
871
897
  };
872
898
  /** @returns {void} */
873
899
  openOptions() {
900
+ const mobileOptionsSheet = this.isMobileOptionsSheet();
874
901
  if (this.isDebugEnabled())
875
902
  this.debugLog("openOptions", {
876
903
  currentOptionsCount: this.getCurrentOptions()?.length || 0,
904
+ mobileOptionsSheet,
877
905
  searchEnabled: this.p.search
878
906
  });
879
907
  this.searchTextValue = "";
880
- this.callOptionsPositionAboveIfOutsideScreen = true;
908
+ this.callOptionsPositionAboveIfOutsideScreen = !mobileOptionsSheet;
881
909
  this.setState({
882
- height: this.s.selectContainerLayout.height,
910
+ height: mobileOptionsSheet ? null : this.s.selectContainerLayout?.height,
883
911
  opened: true,
884
- optionsPlacement: "below",
885
- optionsVisibility: "hidden",
886
- optionsWidth: this.s.endOfSelectLayout?.width,
912
+ optionsPlacement: mobileOptionsSheet ? "sheet" : "below",
913
+ optionsVisibility: mobileOptionsSheet ? "visible" : "hidden",
914
+ optionsWidth: mobileOptionsSheet ? undefined : this.s.endOfSelectLayout?.width,
887
915
  page: 1,
888
916
  pageInputFocused: false,
889
917
  pageInputValue: "1",
890
918
  scrollLeft: Platform.OS == "web" ? document.documentElement.scrollLeft : null,
891
919
  scrollTop: Platform.OS == "web" ? document.documentElement.scrollTop : null
892
920
  }, () => {
893
- this.measureNativeSelectLayouts();
921
+ if (mobileOptionsSheet) {
922
+ this.lockBodyScroll();
923
+ }
924
+ else {
925
+ this.measureNativeSelectLayouts();
926
+ this.focusTextInput();
927
+ }
894
928
  this.resetSearchTextInput();
895
- this.focusTextInput();
896
929
  this.loadOptions({ page: 1 });
897
930
  });
898
931
  if (this.p.onFocus)
@@ -901,19 +934,68 @@ class HayaSelect extends ShapeComponent {
901
934
  /** @returns {void} */
902
935
  focusTextInput = () => digg(this.tt.searchTextInputRef, "current")?.focus();
903
936
  /** @returns {void} */
937
+ lockBodyScroll() {
938
+ if (Platform.OS != "web" || typeof document == "undefined" || this.bodyScrollLocked)
939
+ return;
940
+ this.previousBodyOverflow = document.body?.style.overflow;
941
+ this.previousDocumentOverflow = document.documentElement?.style.overflow;
942
+ if (document.body)
943
+ document.body.style.overflow = "hidden";
944
+ if (document.documentElement)
945
+ document.documentElement.style.overflow = "hidden";
946
+ this.bodyScrollLocked = true;
947
+ }
948
+ /** @returns {void} */
949
+ unlockBodyScroll() {
950
+ if (Platform.OS != "web" || typeof document == "undefined" || !this.bodyScrollLocked)
951
+ return;
952
+ if (document.body)
953
+ document.body.style.overflow = this.previousBodyOverflow || "";
954
+ if (document.documentElement)
955
+ document.documentElement.style.overflow = this.previousDocumentOverflow || "";
956
+ this.previousBodyOverflow = undefined;
957
+ this.previousDocumentOverflow = undefined;
958
+ this.bodyScrollLocked = false;
959
+ }
960
+ /** @returns {void} */
904
961
  setOptionsPosition() {
905
962
  if (!this.isActive()) {
906
963
  return; // Debounce after un-mount handeling.
907
964
  }
965
+ if (this.isMobileOptionsSheet()) {
966
+ this.setOptionsPositionSheet();
967
+ return;
968
+ }
969
+ this.unlockBodyScroll();
908
970
  if (this.isDebugEnabled())
909
971
  this.debugLog("setOptionsPosition");
910
972
  this.callOptionsPositionAboveIfOutsideScreen = true;
911
973
  this.setOptionsPositionBelow();
912
974
  }
913
975
  /** @returns {void} */
976
+ syncOptionsPlacementWithMode() {
977
+ if (!this.s.opened)
978
+ return;
979
+ if (this.isMobileOptionsSheet()) {
980
+ if (this.s.optionsPlacement != "sheet")
981
+ this.setOptionsPositionSheet();
982
+ return;
983
+ }
984
+ if (this.s.optionsPlacement == "sheet") {
985
+ this.setOptionsPositionBelow();
986
+ return;
987
+ }
988
+ this.unlockBodyScroll();
989
+ this.measureNativeSelectLayouts();
990
+ }
991
+ /** @returns {void} */
914
992
  setOptionsPositionAboveIfOutsideScreen() {
915
993
  if (!this.s.opened)
916
994
  return;
995
+ if (this.isMobileOptionsSheet()) {
996
+ this.setOptionsPositionSheet();
997
+ return;
998
+ }
917
999
  const { windowHeight } = this.tt;
918
1000
  const { optionsContainerLayout, selectContainerLayout } = this.s;
919
1001
  const endOfSelectLayout = this.s.endOfSelectLayout;
@@ -942,12 +1024,26 @@ class HayaSelect extends ShapeComponent {
942
1024
  }
943
1025
  }
944
1026
  /** @returns {void} */
1027
+ setOptionsPositionSheet() {
1028
+ if (!this.s.opened)
1029
+ return;
1030
+ this.lockBodyScroll();
1031
+ this.setState({
1032
+ height: null,
1033
+ opened: true,
1034
+ optionsPlacement: "sheet",
1035
+ optionsVisibility: "visible",
1036
+ optionsWidth: undefined
1037
+ });
1038
+ }
1039
+ /** @returns {void} */
945
1040
  setOptionsPositionAbove() {
946
1041
  if (!this.s.opened)
947
1042
  return;
948
1043
  const { endOfSelectLayout } = this.s;
949
1044
  if (this.isDebugEnabled())
950
1045
  this.debugLog("setOptionsPositionAbove");
1046
+ this.unlockBodyScroll();
951
1047
  this.setState({
952
1048
  opened: true,
953
1049
  optionsPlacement: "above",
@@ -961,6 +1057,7 @@ class HayaSelect extends ShapeComponent {
961
1057
  return;
962
1058
  if (this.isDebugEnabled())
963
1059
  this.debugLog("setOptionsPositionBelow");
1060
+ this.unlockBodyScroll();
964
1061
  this.setState({
965
1062
  opened: true,
966
1063
  optionsPlacement: "below",
@@ -984,6 +1081,8 @@ class HayaSelect extends ShapeComponent {
984
1081
  if (this.s.opened) {
985
1082
  this.s.scrollLeft = Platform.OS == "web" ? document.documentElement.scrollLeft : null;
986
1083
  this.s.scrollTop = Platform.OS == "web" ? document.documentElement.scrollTop : null;
1084
+ if (this.isMobileOptionsSheet())
1085
+ return;
987
1086
  this.setOptionsPosition();
988
1087
  }
989
1088
  };
@@ -997,6 +1096,15 @@ class HayaSelect extends ShapeComponent {
997
1096
  this.closeOptions();
998
1097
  }
999
1098
  };
1099
+ /**
1100
+ * @param {import("react").SyntheticEvent} event Press event.
1101
+ * @returns {void}
1102
+ */
1103
+ onMobileOptionsBackdropPress = (event) => {
1104
+ event.preventDefault();
1105
+ event.stopPropagation();
1106
+ this.closeOptions();
1107
+ };
1000
1108
  /** @returns {number|null} */
1001
1109
  paginationTotalPages() {
1002
1110
  const { totalCount } = this.s;
@@ -1225,10 +1333,63 @@ class HayaSelect extends ShapeComponent {
1225
1333
  return (React.createElement(PaginationPageButton, { active: item.value == currentPage, key: item.key, onPageSelected: this.tt.setPaginationPage, page: item.value }));
1226
1334
  }))));
1227
1335
  }
1336
+ /**
1337
+ * @param {{id: string|number, optionsContent: import("react").ReactNode}} args Mobile sheet content.
1338
+ * @returns {import("react").ReactNode}
1339
+ */
1340
+ mobileOptionsContainer({ id, optionsContent }) {
1341
+ const sheetHeight = Math.max(Math.round(Dimensions.get("window").height * 0.8), 240);
1342
+ const sheetStyle = this.stylingFor("optionsContainer", {
1343
+ position: "absolute",
1344
+ zIndex: 100000,
1345
+ elevation: 100000,
1346
+ left: 0,
1347
+ right: 0,
1348
+ bottom: 0,
1349
+ height: sheetHeight,
1350
+ maxHeight: sheetHeight,
1351
+ backgroundColor: "#fff",
1352
+ borderTopColor: "#cbd5e1",
1353
+ borderTopLeftRadius: 18,
1354
+ borderTopRightRadius: 18,
1355
+ borderTopWidth: 1,
1356
+ overflow: "hidden",
1357
+ visibility: this.s.optionsVisibility
1358
+ }, [sheetHeight, this.s.optionsVisibility]);
1359
+ return (React.createElement(View, { dataSet: this.mobileOptionsOverlayDataSet ||= { class: "mobile-options-overlay" }, style: this.stylingFor("mobileOptionsOverlay", styles.mobileOptionsOverlay ||= {
1360
+ position: Platform.OS == "web" ? "fixed" : "absolute",
1361
+ top: 0,
1362
+ right: 0,
1363
+ bottom: 0,
1364
+ left: 0,
1365
+ zIndex: 99999,
1366
+ elevation: 99999
1367
+ }), testID: "haya-select-mobile-options-overlay" },
1368
+ React.createElement(Pressable, { dataSet: this.mobileOptionsBackdropDataSet ||= { class: "mobile-options-backdrop" }, onPress: this.tt.onMobileOptionsBackdropPress, style: this.stylingFor("mobileOptionsBackdrop", styles.mobileOptionsBackdrop ||= {
1369
+ position: "absolute",
1370
+ top: 0,
1371
+ right: 0,
1372
+ bottom: 0,
1373
+ left: 0,
1374
+ backgroundColor: "rgba(15, 23, 42, 0.32)"
1375
+ }), testID: "haya-select-mobile-options-backdrop" }),
1376
+ React.createElement(View, { dataSet: this.cache("mobileOptionsContainerDataSet", { class: "options-container", id, role: "dialog", optionsPlacement: "sheet", optionsVisibility: this.s.optionsVisibility || "hidden" }, [id, this.s.optionsVisibility]), onLayout: this.tt.onOptionsContainerLayout, ref: this.tt.optionsContainerRef, style: sheetStyle, testID: "haya-select-mobile-options-container" },
1377
+ React.createElement(ScrollView, { dataSet: this.mobileOptionsScrollViewDataSet ||= { class: "mobile-options-scroll-view" }, keyboardShouldPersistTaps: "handled", nestedScrollEnabled: true, style: this.stylingFor("mobileOptionsScrollView", styles.mobileOptionsScrollView ||= { flex: 1 }), testID: "haya-select-mobile-options-scroll-view" }, optionsContent),
1378
+ React.createElement(View, { dataSet: this.mobileOptionsSearchContainerDataSet ||= { class: "mobile-options-search-container" }, style: this.stylingFor("mobileOptionsSearchContainer", styles.mobileOptionsSearchContainer ||= {
1379
+ borderTopColor: "#cbd5e1",
1380
+ borderTopWidth: 1,
1381
+ paddingBottom: 14,
1382
+ paddingLeft: 14,
1383
+ paddingRight: 14,
1384
+ paddingTop: 10
1385
+ }), testID: "haya-select-mobile-options-search-container" }, this.searchTextInput()))));
1386
+ }
1228
1387
  /** @returns {import("react").ReactNode|null} */
1229
1388
  optionsContainer() {
1230
1389
  const { selectContainerLayout, loadedOptions, endOfSelectLayout, optionsContainerLayout, optionsPlacement, optionsVisibility } = this.s;
1231
1390
  let left, top;
1391
+ const id = idForComponent(this);
1392
+ const desktopOptionsPlacement = optionsPlacement == "sheet" ? "below" : optionsPlacement;
1232
1393
  const optionsContent = (React.createElement(React.Fragment, null,
1233
1394
  loadedOptions?.map((loadedOption) => this.hayaSelectOption({
1234
1395
  key: loadedOption.key || `loaded-option-${loadedOption.value}`,
@@ -1243,6 +1404,9 @@ class HayaSelect extends ShapeComponent {
1243
1404
  }) },
1244
1405
  React.createElement(Text, null, this.p.noOptionsText ? this.p.noOptionsText() : this.translate(".no_options_found"))),
1245
1406
  this.paginationControls()));
1407
+ if (this.isMobileOptionsSheet()) {
1408
+ return this.mobileOptionsContainer({ id, optionsContent });
1409
+ }
1246
1410
  let style = {
1247
1411
  position: "absolute",
1248
1412
  zIndex: 99999,
@@ -1263,7 +1427,7 @@ class HayaSelect extends ShapeComponent {
1263
1427
  style.left = 0;
1264
1428
  style.bottom = 0;
1265
1429
  }
1266
- else if (optionsPlacement == "below") {
1430
+ else if (desktopOptionsPlacement == "below") {
1267
1431
  if (Platform.OS == "web") {
1268
1432
  // onLayout top value is sometimes negative so use browser JS to get it instead
1269
1433
  top = digg(this.tt.endOfSelectRef.current.getBoundingClientRect(), "top") + document.documentElement.scrollTop + 1;
@@ -1286,7 +1450,7 @@ class HayaSelect extends ShapeComponent {
1286
1450
  style.visibility = "hidden";
1287
1451
  }
1288
1452
  }
1289
- else if (optionsPlacement == "above") {
1453
+ else if (desktopOptionsPlacement == "above") {
1290
1454
  if (Platform.OS == "web") {
1291
1455
  // onLayout top value is sometimes negative so use browser JS to get it instead
1292
1456
  top = digg(this.tt.selectContainerRef.current.getBoundingClientRect(), "top") + document.documentElement.scrollTop;
@@ -1308,14 +1472,13 @@ class HayaSelect extends ShapeComponent {
1308
1472
  }
1309
1473
  }
1310
1474
  else {
1311
- throw new Error(`Unkonwn options placement: ${optionsPlacement}`);
1475
+ throw new Error(`Unkonwn options placement: ${desktopOptionsPlacement}`);
1312
1476
  }
1313
1477
  if (Platform.OS != "web") {
1314
1478
  style.opacity = optionsVisibility == "hidden" ? 0 : 1;
1315
1479
  style.overflow = "hidden";
1316
1480
  }
1317
1481
  style = this.stylingFor("optionsContainer", style, [left, top, style.visibility, style.width]);
1318
- const id = idForComponent(this);
1319
1482
  return (React.createElement(View, { dataSet: this.cache("optionsContainerDataSet", { class: "options-container", id, role: "dialog", optionsVisibility: optionsVisibility || "hidden" }, [id, optionsVisibility]), onLayout: this.tt.onOptionsContainerLayout, ref: this.tt.optionsContainerRef, style: style },
1320
1483
  Platform.OS == "web" &&
1321
1484
  optionsContent,
@@ -1546,4 +1709,4 @@ class HayaSelect extends ShapeComponent {
1546
1709
  }
1547
1710
  const HayaSelectShapeComponent = shapeComponent(HayaSelect);
1548
1711
  export default memo(HayaSelectShapeComponent);
1549
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDdkQsT0FBTyxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN6RixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxlQUFlLE1BQU0sdUNBQXVDLENBQUE7QUFDbkUsT0FBTyxjQUFjLE1BQU0sbURBQW1ELENBQUE7QUFDOUUsT0FBTyxnQkFBZ0IsTUFBTSxxREFBcUQsQ0FBQTtBQUNsRixPQUFPLElBQUksTUFBTSxzQ0FBc0MsQ0FBQTtBQUN2RCxPQUFPLE1BQU0sTUFBTSxVQUFVLENBQUE7QUFDN0IsT0FBTyxXQUFXLE1BQU0sZ0JBQWdCLENBQUE7QUFDeEMsT0FBTyxvQkFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUMzRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUE7QUFDakQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNuQyxPQUFPLGdCQUFnQixNQUFNLHVCQUF1QixDQUFBO0FBQ3BELE9BQU8s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QUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YW55dGhpbmdEaWZmZXJlbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9kaWZmLXV0aWxzXCJcbmltcG9ydCBDb25maWcgZnJvbSBcIi4uL2NvbmZpZy5qc1wiXG5pbXBvcnQge2RpZywgZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQge0RpbWVuc2lvbnMsIFBsYXRmb3JtLCBQcmVzc2FibGUsIFNjcm9sbFZpZXcsIFRleHRJbnB1dCwgVmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQgUmVhY3QsIHtjcmVhdGVSZWYsIG1lbW8sIHVzZUVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsIFNoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IEZvbnRBd2Vzb21lSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZVwiXG5pbXBvcnQgaWRGb3JDb21wb25lbnQgZnJvbSBcIkBrYXNwZXJuai9hcGktbWFrZXIvYnVpbGQvaW5wdXRzL2lkLWZvci1jb21wb25lbnRcIlxuaW1wb3J0IG5hbWVGb3JDb21wb25lbnQgZnJvbSBcIkBrYXNwZXJuai9hcGktbWFrZXIvYnVpbGQvaW5wdXRzL25hbWUtZm9yLWNvbXBvbmVudFwiXG5pbXBvcnQgVGV4dCBmcm9tIFwiQGthc3Blcm5qL2FwaS1tYWtlci9idWlsZC91dGlscy90ZXh0XCJcbmltcG9ydCBPcHRpb24gZnJvbSBcIi4vb3B0aW9uXCJcbmltcG9ydCBPcHRpb25Hcm91cCBmcm9tIFwiLi9vcHRpb24tZ3JvdXBcIlxuaW1wb3J0IFBhZ2luYXRpb25QYWdlQnV0dG9uIGZyb20gXCIuL3BhZ2luYXRpb24tcGFnZS1idXR0b25cIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IFJlbmRlckh0bWwgZnJvbSBcInJlYWN0LW5hdGl2ZS1yZW5kZXItaHRtbFwiXG5pbXBvcnQge1BvcnRhbH0gZnJvbSBcImNvbmpvaW50bWVudFwiXG5pbXBvcnQgdXNlRXZlbnRMaXN0ZW5lciBmcm9tIFwieWEtdXNlLWV2ZW50LWxpc3RlbmVyXCJcbmltcG9ydCB1c2VQcmVzc091dHNpZGUgZnJvbSBcIm91dHNpZGUtZXllL2J1aWxkL3VzZS1wcmVzcy1vdXRzaWRlXCJcblxuY29uc3Qgc3R5bGVzID0ge31cbmNvbnN0IGRhdGFTZXRzID0ge31cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0VG9nZ2xlT3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWNvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVsXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gdmFsdWVcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbdGV4dF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbY29udGVudF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbY3VycmVudENvbnRlbnRdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkaXNhYmxlZF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaHRtbF1cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbcmlnaHRdXG4gKlxuICogQWRkaXRpb25hbCBvcHRpb24gcHJvcHMgYXJlIGFsbG93ZWQ7IEhheWFTZWxlY3Qgb25seSB1c2VzIHRoZSBrZXlzIGFib3ZlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdE9wdGlvbnNSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdG90YWxDb3VudF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGFnZV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGFnZVNpemVdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYXR0cmlidXRlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjbGFzc05hbWVdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW2RlZmF1bHRUb2dnbGVkXVxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSBbZGVmYXVsdFZhbHVlXVxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gW2RlZmF1bHRWYWx1ZXNdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBbZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWddXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2lkXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFttb2RlbF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW211bHRpcGxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtub09wdGlvbnNUZXh0XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudD0pOiB2b2lkfSBbb25CbHVyXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudD0pOiB2b2lkfSBbb25DaGFuZ2VdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKEFycmF5PHN0cmluZ3xudW1iZXI+PSk6IHZvaWR9IFtvbkNoYW5nZVZhbHVlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudD0pOiB2b2lkfSBbb25Gb2N1c11cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe29wdGlvbnM6IEFycmF5fSk6IHZvaWR9IFtvbk9wdGlvbnNDbG9zZWRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtvcHRpb25zOiBBcnJheX0pOiB2b2lkfSBbb25PcHRpb25zTG9hZGVkXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihvYmplY3QpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtvcHRpb25Db250ZW50XVxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxmdW5jdGlvbigpOiAoQXJyYXk8SGF5YVNlbGVjdE9wdGlvbj58SGF5YVNlbGVjdE9wdGlvbnNSZXN1bHQpfSBvcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtvcHRpb25zQWJzb2x1dGVdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtvcHRpb25zUG9ydGFsXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtvcHRpb25zV2lkdGhdXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3BsYWNlaG9sZGVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RlZEJhY2tncm91bmRDb2xvcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NlYXJjaF1cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlRleHRJbnB1dFByb3BzfSBbc2VhcmNoVGV4dElucHV0UHJvcHNdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3N0eWxlc11cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbdG9nZ2xlZF1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdFRvZ2dsZU9wdGlvbj59IFt0b2dnbGVPcHRpb25zXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbdHJhbnNwYXJlbnRdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xudW1iZXI+fSBbdmFsdWVzXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFN0YXRlXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBjdXJyZW50T3B0aW9uc1xuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0TGF5b3V0fG51bGx9IHNlbGVjdENvbnRhaW5lckxheW91dFxuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0TGF5b3V0fG51bGx9IGVuZE9mU2VsZWN0TGF5b3V0XG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj58dW5kZWZpbmVkfSBsb2FkZWRPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9hZE9wdGlvbnNSZXF1ZXN0SWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwYWdlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhZ2VJbnB1dEZvY3VzZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYWdlSW5wdXRWYWx1ZVxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gcGFnZVNpemVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbmVkXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RMYXlvdXR8bnVsbH0gb3B0aW9uc0NvbnRhaW5lckxheW91dFxuICogQHByb3BlcnR5IHtcImFib3ZlXCJ8XCJiZWxvd1wifHVuZGVmaW5lZH0gb3B0aW9uc1BsYWNlbWVudFxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBvcHRpb25zVG9wXG4gKiBAcHJvcGVydHkge1wiaGlkZGVuXCJ8XCJ2aXNpYmxlXCJ8dW5kZWZpbmVkfSBvcHRpb25zVmlzaWJpbGl0eVxuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfG51bGx9IG9wdGlvbnNXaWR0aFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsTGVmdFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gc2Nyb2xsVG9wXG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSB0b3RhbENvdW50XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0TGF5b3V0XG4gKiBAcHJvcGVydHkge251bWJlcn0gW3RvcF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGVmdF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbeF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbeV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbd2lkdGhdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2hlaWdodF1cbiAqL1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgUmVhY3QgTmF0aXZlIGFuZCBSZWFjdCBOYXRpdmUgV2ViIGxheW91dCBrZXlzLlxuICogQHBhcmFtIHtIYXlhU2VsZWN0TGF5b3V0fG51bGx8dW5kZWZpbmVkfSBsYXlvdXQgTmF0aXZlIGxheW91dC5cbiAqIEByZXR1cm5zIHtIYXlhU2VsZWN0TGF5b3V0fSBOb3JtYWxpemVkIGxheW91dC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTGF5b3V0KGxheW91dCkge1xuICBjb25zdCBub3JtYWxpemVkTGF5b3V0ID0gT2JqZWN0LmFzc2lnbih7fSwgbGF5b3V0KVxuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZExheW91dC5sZWZ0ICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQueCA9PSBcIm51bWJlclwiKSB7XG4gICAgbm9ybWFsaXplZExheW91dC5sZWZ0ID0gbm9ybWFsaXplZExheW91dC54XG4gIH1cblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQudG9wICE9IFwibnVtYmVyXCIgJiYgdHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQueSA9PSBcIm51bWJlclwiKSB7XG4gICAgbm9ybWFsaXplZExheW91dC50b3AgPSBub3JtYWxpemVkTGF5b3V0LnlcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkTGF5b3V0XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBsYXlvdXQgaGFzIHVzYWJsZSBhYnNvbHV0ZS1pc2ggcG9zaXRpb24uXG4gKiBAcGFyYW0ge0hheWFTZWxlY3RMYXlvdXR8bnVsbHx1bmRlZmluZWR9IGxheW91dCBMYXlvdXQgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIHdoZW4gdG9wIGFuZCBsZWZ0IGNhbiBiZSB1c2VkLlxuICovXG5mdW5jdGlvbiBsYXlvdXRIYXNQb3NpdGlvbihsYXlvdXQpIHtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShsYXlvdXQ/LmxlZnQpICYmIE51bWJlci5pc0Zpbml0ZShsYXlvdXQ/LnRvcClcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T3B0aW9uUmVuZGVyQ29udGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBpY29uXG4gKiBAcHJvcGVydHkge1wiY3VycmVudFwifFwib3B0aW9uXCJ9IG1vZGVcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHNlbGVjdGVkXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RUb2dnbGVPcHRpb258dW5kZWZpbmVkfSB0b2dnbGVPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gdG9nZ2xlVmFsdWVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59IHRvZ2dsZWRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPbkNoYW5nZVBheWxvYWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBvcHRpb25zXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0U3R5bGluZ0NvbnRleHRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbmVkXG4gKiBAcHJvcGVydHkge1wiYWJvdmVcInxcImJlbG93XCJ8dW5kZWZpbmVkfSBvcHRpb25zUGxhY2VtZW50XG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RTdGF0ZX0gc3RhdGVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc3R5bGVcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7U2hhcGVDb21wb25lbnQ8SGF5YVNlbGVjdFByb3BzLCBIYXlhU2VsZWN0U3RhdGU+fSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUgPSAoY29tcG9uZW50KSA9PiB7XG4gIGxldCBuYW1lID0gbmFtZUZvckNvbXBvbmVudChjb21wb25lbnQpXG5cbiAgY29uc3QgY3VycmVudE9wdGlvbnMgPSBjb21wb25lbnQuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICBjb25zdCB2YWx1ZXMgPSBjb21wb25lbnQuZ2V0VmFsdWVzKClcblxuICBjb25zdCBoYXNNdWx0aXBsZVZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSAmJiB2YWx1ZXMubGVuZ3RoID4gMFxuXG4gIGlmIChjb21wb25lbnQucHJvcHMubXVsdGlwbGUgJiYgbmFtZSAmJiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID4gMCB8fCBoYXNNdWx0aXBsZVZhbHVlcykpIHtcbiAgICBuYW1lICs9IFwiW11cIlxuICB9XG5cbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqIEBhdWdtZW50cyB7U2hhcGVDb21wb25lbnQ8SGF5YVNlbGVjdFByb3BzLCBIYXlhU2VsZWN0U3RhdGU+fSAqL1xuY2xhc3MgSGF5YVNlbGVjdCBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkZWJ1ZzogZmFsc2UsXG4gICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgIG5vT3B0aW9uc1RleHQ6IG51bGwsXG4gICAgb25CbHVyOiBudWxsLFxuICAgIG9uRm9jdXM6IG51bGwsXG4gICAgb3B0aW9uc0Fic29sdXRlOiB0cnVlLFxuICAgIG9wdGlvbnNQb3J0YWw6IHRydWUsXG4gICAgb3B0aW9uc1dpZHRoOiBudWxsLFxuICAgIHNlYXJjaDogZmFsc2UsXG4gICAgc2VhcmNoVGV4dElucHV0UHJvcHM6IHVuZGVmaW5lZCxcbiAgICB0cmFuc3BhcmVudDogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgYXR0cmlidXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0VG9nZ2xlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBkZWZhdWx0VmFsdWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVidWc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgaWQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbm9PcHRpb25zVGV4dDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25DaGFuZ2VWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25PcHRpb25zQ2xvc2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk9wdGlvbnNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9wdGlvbkNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgY29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGN1cnJlbnRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICBodG1sOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICByaWdodDogUHJvcFR5cGVzLm5vZGUsXG4gICAgICAgIHRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWRcbiAgICAgIH0pKSxcbiAgICAgIFByb3BUeXBlcy5mdW5jXG4gICAgXSkuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zQWJzb2x1dGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc1BvcnRhbDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zV2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAgIHNlbGVjdGVkQmFja2dyb3VuZENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHNlYXJjaFRleHRJbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b2dnbGVkOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHRvZ2dsZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICAgIH0pKSxcbiAgICB0cmFuc3BhcmVudDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZXM6IFByb3BUeXBlcy5hcnJheVxuICB9KVxuXG4gIGNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gIGVuZE9mU2VsZWN0UmVmID0gY3JlYXRlUmVmKClcbiAgbGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQgPSAwXG4gIG9wdGlvbnNDb250YWluZXJSZWYgPSBjcmVhdGVSZWYoKVxuICBwYWdlSW5wdXRSZWYgPSBjcmVhdGVSZWYoKVxuICBzZWFyY2hUZXh0VmFsdWUgPSBcIlwiXG4gIHNlYXJjaFRleHRJbnB1dFJlZiA9IGNyZWF0ZVJlZigpXG4gIHNlbGVjdENvbnRhaW5lclJlZiA9IGNyZWF0ZVJlZigpXG4gIHQgPSBDb25maWcuY3VycmVudCgpLmdldFVzZVRyYW5zbGF0ZSgpKCkudFxuICB3aW5kb3dXaWR0aCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLndpZHRoXG4gIHdpbmRvd0hlaWdodCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLmhlaWdodFxuICAvKiogQHR5cGUge0hheWFTZWxlY3RTdGF0ZX0gKi9cbiAgc3RhdGUgPSB7XG4gICAgY3VycmVudE9wdGlvbnM6IHRoaXMuZGVmYXVsdEN1cnJlbnRPcHRpb25zKCksXG4gICAgc2VsZWN0Q29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgIGVuZE9mU2VsZWN0TGF5b3V0OiBudWxsLFxuICAgIGhlaWdodDogbnVsbCxcbiAgICBsb2FkZWRPcHRpb25zOiB0aGlzLmRlZmF1bHRMb2FkZWRPcHRpb25zKCksXG4gICAgbG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkOiAwLFxuICAgIGxvYWRPcHRpb25zUmVxdWVzdElkOiAwLFxuICAgIHBhZ2U6IDEsXG4gICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgcGFnZUlucHV0VmFsdWU6IFwiMVwiLFxuICAgIHBhZ2VTaXplOiBudWxsLFxuICAgIG9wZW5lZDogZmFsc2UsXG4gICAgb3B0aW9uc0NvbnRhaW5lckxheW91dDogbnVsbCxcbiAgICBvcHRpb25zUGxhY2VtZW50OiB1bmRlZmluZWQsXG4gICAgb3B0aW9uc1RvcDogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNWaXNpYmlsaXR5OiB1bmRlZmluZWQsXG4gICAgb3B0aW9uc1dpZHRoOiB1bmRlZmluZWQsXG4gICAgc2Nyb2xsTGVmdDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbCxcbiAgICBzY3JvbGxUb3A6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbCxcbiAgICB0b3RhbENvdW50OiBudWxsLFxuICAgIHRvZ2dsZWQ6IHRoaXMuZGVmYXVsdFRvZ2dsZWQoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc0RlYnVnRW5hYmxlZCA9ICgpID0+IEJvb2xlYW4odGhpcy5wLmRlYnVnKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW2RldGFpbHNdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZGVidWdMb2cgPSAoZnVuY3Rpb25OYW1lLCBkZXRhaWxzID0gdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzRGVidWdFbmFibGVkKCkpIHJldHVyblxuXG4gICAgY29uc3QgYmFzZURldGFpbHMgPSB7XG4gICAgICBpZDogdGhpcy5wLmlkLFxuICAgICAgbmFtZTogdGhpcy5wLm5hbWVcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZWREZXRhaWxzID0gZGV0YWlscyA/IE9iamVjdC5hc3NpZ24oe30sIGJhc2VEZXRhaWxzLCBkZXRhaWxzKSA6IGJhc2VEZXRhaWxzXG5cbiAgICBpZiAobWVyZ2VkRGV0YWlscyAmJiBPYmplY3Qua2V5cyhtZXJnZWREZXRhaWxzKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0hheWFTZWxlY3RdICR7ZnVuY3Rpb25OYW1lfWAsIG1lcmdlZERldGFpbHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbSGF5YVNlbGVjdF0gJHtmdW5jdGlvbk5hbWV9YClcbiAgICB9XG4gIH1cblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSBDb25maWcuY3VycmVudCgpLmdldFVzZVRyYW5zbGF0ZSgpKClcblxuICAgIHRoaXMudCA9IHRcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMudmFsdWVzKSkge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnByb3BzLnZhbHVlcykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIYXlhU2VsZWN0OiBVbmRlZmluZWQgZ2l2ZW4gYXMgdmFsdWVcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdpbmRvd1RhcmdldCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgJiYgdHlwZW9mIHdpbmRvdyAhPSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogbnVsbFxuXG4gICAgdXNlRXZlbnRMaXN0ZW5lcihEaW1lbnNpb25zLCBcImNoYW5nZVwiLCB0aGlzLnR0Lm9uRGltZW5zaW9uc0NoYW5nZSlcbiAgICB1c2VQcmVzc091dHNpZGUodGhpcy50dC5vcHRpb25zQ29udGFpbmVyUmVmLCB0aGlzLnR0Lm9uUHJlc3NPdXRzaWRlT3B0aW9ucylcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvd1RhcmdldCwgXCJyZXNpemVcIiwgdGhpcy50dC5vbkFueXRoaW5nUmVzaXplZERlYm91bmNlZClcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvd1RhcmdldCwgXCJzY3JvbGxcIiwgdGhpcy50dC5vbkFueXRoaW5nU2Nyb2xsZWREZWJvdW5jZWQpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0dXBcIiwge1xuICAgICAgaGFzQ29udHJvbGxlZFZhbHVlczogXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzLFxuICAgICAgaGFzQ29udHJvbGxlZFRvZ2dsZWQ6IFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMsXG4gICAgICBtdWx0aXBsZTogdGhpcy5wLm11bHRpcGxlLFxuICAgICAgb3B0aW9uc1R5cGU6IEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5vcHRpb25zKSA/IFwiYXJyYXlcIiA6IHR5cGVvZiB0aGlzLnByb3BzLm9wdGlvbnNcbiAgICB9KVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiAmJiB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCkge1xuICAgICAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiwgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXRdKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25JZHMgPSB0aGlzLnMuY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpICYmIGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRPcHRpb25JZHMsIHRoaXMucHJvcHMudmFsdWVzKSAmJiB0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRGcm9tR2l2ZW5WYWx1ZXMoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnByb3BzLnZhbHVlc10pXG4gIH1cblxuICB0cmFuc2xhdGUobXNnSUQsIG9wdGlvbnMpIHtcbiAgICBpZiAobXNnSUQuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgIHJldHVybiB0aGlzLnQoYGhheWFfc2VsZWN0JHttc2dJRH1gLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50KG1zZ0lELCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59ICovXG4gIGRlZmF1bHRDdXJyZW50T3B0aW9ucygpIHtcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCB2YWx1ZXN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpKSByZXR1cm4gW11cbiAgICBjb25zdCBjb250cm9sbGVkVmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW11cblxuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigoe3ZhbHVlfSkgPT5cbiAgICAgIChkZWZhdWx0VmFsdWUgJiYgdmFsdWUgPT0gZGVmYXVsdFZhbHVlKSB8fFxuICAgICAgICAoZGVmYXVsdFZhbHVlcyAmJiBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkgfHxcbiAgICAgICAgY29udHJvbGxlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fHVuZGVmaW5lZH0gKi9cbiAgZGVmYXVsdExvYWRlZE9wdGlvbnMoKSB7XG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIG9wdGlvbnM6ICR7dHlwZW9mIG9wdGlvbnN9YClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfSAqL1xuICBnZXRBY3RpdmVQYWdlID0gKCkgPT4gdGhpcy5zLnBhZ2UgfHwgMVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fEhheWFTZWxlY3RPcHRpb25zUmVzdWx0fSByZXN1bHRcbiAgICogQHJldHVybnMge0hheWFTZWxlY3RPcHRpb25zUmVzdWx0fVxuICAgKi9cbiAgcGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiB7b3B0aW9uczogcmVzdWx0fVxuXG4gICAgaWYgKHJlc3VsdCAmJiBBcnJheS5pc0FycmF5KHJlc3VsdC5vcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW9uczogcmVzdWx0Lm9wdGlvbnMsXG4gICAgICAgIHRvdGFsQ291bnQ6IHJlc3VsdC50b3RhbENvdW50LFxuICAgICAgICBwYWdlOiByZXN1bHQucGFnZSxcbiAgICAgICAgcGFnZVNpemU6IHJlc3VsdC5wYWdlU2l6ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcHRpb25zIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtc1xuICAgKiBAcGFyYW0ge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBwYXJhbXMub3B0aW9uc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5wYWdlXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5wYWdlU2l6ZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMudG90YWxDb3VudF1cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfVxuICAgKi9cbiAgcmVzb2x2ZVBhZ2VTaXplKHtvcHRpb25zLCBwYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0pIHtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHBhZ2VTaXplKSAmJiBwYWdlU2l6ZSA+IDApIHJldHVybiBwYWdlU2l6ZVxuXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0aGlzLnMucGFnZVNpemUpICYmIHRoaXMucy5wYWdlU2l6ZSA+IDAgJiYgcGFnZSAhPSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5zLnBhZ2VTaXplXG4gICAgfVxuXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubGVuZ3RoXG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0aGlzLnMucGFnZVNpemUpICYmIHRoaXMucy5wYWdlU2l6ZSA+IDAgPyB0aGlzLnMucGFnZVNpemUgOiBudWxsXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSAqL1xuICBkZWZhdWx0VG9nZ2xlZCgpIHtcbiAgICByZXR1cm4gKFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMpID8gdGhpcy5wLnRvZ2dsZWQgOiB0aGlzLnByb3BzLmRlZmF1bHRUb2dnbGVkIHx8IHt9XG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgcG9ydGFsTmFtZSgpIHtcbiAgICByZXR1cm4gbmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKSB8fCBgaGF5YS1zZWxlY3QtJHtTdHJpbmcoaWRGb3JDb21wb25lbnQodGhpcykpfWBcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59ICovXG4gIGdldFRvZ2dsZWQgPSAoKSA9PiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykgPyB0aGlzLnAudG9nZ2xlZCA6IHRoaXMucy50b2dnbGVkXG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gKi9cbiAgZ2V0VmFsdWVzID0gKCkgPT4gKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcylcbiAgICA/IChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpID8gdGhpcy5wLnZhbHVlcyA6IFtdKVxuICAgIDogKEFycmF5LmlzQXJyYXkodGhpcy5zLmN1cnJlbnRPcHRpb25zKSA/IHRoaXMucy5jdXJyZW50T3B0aW9ucyA6IFtdKS5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9ufHt2YWx1ZTogc3RyaW5nfG51bWJlcn0+fSAqL1xuICBnZXRDdXJyZW50T3B0aW9ucyA9ICgpID0+IHtcbiAgICBpZiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzICYmIHR5cGVvZiB0aGlzLnByb3BzLnZhbHVlcyAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSAmJiB0aGlzLnAudmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMub3B0aW9ucykgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSkge1xuICAgICAgICAvKiogQHR5cGUge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSAqL1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5wLnZhbHVlcykge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucC5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKVxuXG4gICAgICAgICAgaWYgKG9wdGlvbikgcmVzdWx0LnB1c2gob3B0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmICh0aGlzLnMubG9hZGVkT3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59ICovXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnAudmFsdWVzKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICAgIHRoaXMucy5sb2FkZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKSB8fFxuICAgICAgICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKVxuXG4gICAgICAgICAgaWYgKG9wdGlvbikgcmVzdWx0LnB1c2gob3B0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBPcHRpb25zIGhhdmVuJ3QgYmVlbiBsb2FkZWQgeWV0LlxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAudmFsdWVzLm1hcCgodmFsdWUpID0+ICh7dmFsdWV9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zLmN1cnJlbnRPcHRpb25zXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PHN0cmluZ3xudW1iZXI+fSAqL1xuICBnZXRDdXJyZW50T3B0aW9uVmFsdWVzKCkge1xuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpID8gdGhpcy5wLnZhbHVlcyA6IFtdXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcblxuICAgIGlmICghY3VycmVudE9wdGlvbnMpIHJldHVybiBbXVxuXG4gICAgcmV0dXJuIGN1cnJlbnRPcHRpb25zXG4gICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbj8udmFsdWUpXG4gICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlICE9IFwidW5kZWZpbmVkXCIpXG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7YXR0cmlidXRlLCBkZWZhdWx0VmFsdWUsIGRlZmF1bHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucywgbW9kZWwsIG9wdGlvbnN9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImNvbXBvbmVudERpZE1vdW50XCIsIHtcbiAgICAgIGhhc0F0dHJpYnV0ZU1vZGVsOiBCb29sZWFuKGF0dHJpYnV0ZSAmJiBtb2RlbCksXG4gICAgICBoYXNEZWZhdWx0VmFsdWVzOiBCb29sZWFuKGRlZmF1bHRWYWx1ZSB8fCBkZWZhdWx0VmFsdWVzIHx8IGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucyksXG4gICAgICBvcHRpb25zVHlwZTogdHlwZW9mIG9wdGlvbnNcbiAgICB9KVxuXG4gICAgaWYgKCgoZGVmYXVsdFZhbHVlIHx8IGRlZmF1bHRWYWx1ZXMgfHwgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSB8fCAoYXR0cmlidXRlICYmIG1vZGVsKSkgJiYgdHlwZW9mIG9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge31cblxuICAgIGlmIChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSB7XG4gICAgICBjb25zdCBuZXdUb2dnbGVkID0gdGhpcy5wLnRvZ2dsZWRcblxuICAgICAgaWYgKGFueXRoaW5nRGlmZmVyZW50KHRoaXMuc3RhdGUudG9nZ2xlZCwgbmV3VG9nZ2xlZCkpIHtcbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3U3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjb21wb25lbnREaWRVcGRhdGVcIiwge3N5bmNpbmdLZXlzOiBPYmplY3Qua2V5cyhuZXdTdGF0ZSl9KVxuICAgICAgdGhpcy5zLnRvZ2dsZWQgPSBuZXdTdGF0ZS50b2dnbGVkXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9ICovXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7ZW5kT2ZTZWxlY3RSZWZ9ID0gdGhpcy50dFxuICAgIGNvbnN0IHt0cmFuc3BhcmVudH0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2xhc3NOYW1lLCBwbGFjZWhvbGRlciwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BzLnZhbHVlcykgPyB0aGlzLnByb3BzLnZhbHVlcyA6IFtdXG4gICAgY29uc3Qge29wZW5lZCwgb3B0aW9uc1BsYWNlbWVudH0gPSB0aGlzLnNcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGNvbnN0IGlkID0gaWRGb3JDb21wb25lbnQodGhpcylcblxuICAgIGNvbnN0IHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsID0gey4uLnRoaXMuc3R5bGluZ0ZvcihcInNlbGVjdENvbnRhaW5lclwiLCB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlckNvbG9yOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IFwiIzk5OVwiLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0cmFuc3BhcmVudCA/IHVuZGVmaW5lZCA6IDQsXG4gICAgICBib3JkZXJXaWR0aDogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiAxLFxuICAgICAgY29sb3I6IFwiIzAwMFwiLFxuICAgICAgY3Vyc29yOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJwb2ludGVyXCIgOiB1bmRlZmluZWQsXG4gICAgICBwYWRkaW5nVG9wOiA1LFxuICAgICAgcGFkZGluZ0JvdHRvbTogNSxcbiAgICAgIHBhZGRpbmdMZWZ0OiA1XG4gICAgfSwgW3RyYW5zcGFyZW50XSl9XG5cbiAgICBpZiAob3BlbmVkKSB7XG4gICAgICAvLyBQcmV2ZW50IHNlbGVjdCBmcm9tIGNoYW5naW5nIHNpemUgb25jZSB0aGUgY29udGVudCBpcyByZXBsYWNlZCB3aXRoIHNlYXJjaCB0ZXh0IG9uY2Ugb3BlbmVkXG4gICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5oZWlnaHQgPSB0aGlzLnMuaGVpZ2h0XG5cbiAgICAgIGNvbnN0IGJhc2VCb3JkZXJSYWRpdXMgPSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcblxuICAgICAgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcExlZnRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcblxuICAgICAgICBkZWxldGUgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJiZWxvd1wiKSB7XG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcExlZnRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IDBcblxuICAgICAgICBkZWxldGUgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJyb290Vmlld0RhdGFTZXRcIiwge1xuICAgICAgICAgIGFwcGxpZWRSZXF1ZXN0SWQ6IHRoaXMucy5sb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQsXG4gICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgICBjb21wb25lbnQ6IFwiaGF5YS1zZWxlY3RcIixcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvcGVuZWQsXG4gICAgICAgICAgb3B0aW9uc1BsYWNlbWVudCxcbiAgICAgICAgICByZXF1ZXN0SWQ6IHRoaXMucy5sb2FkT3B0aW9uc1JlcXVlc3RJZCxcbiAgICAgICAgICB0b2dnbGVzOiBCb29sZWFuKHRvZ2dsZU9wdGlvbnMpXG4gICAgICAgIH0sIFt0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkLCBjbGFzc05hbWUsIGlkLCBvcGVuZWQsIG9wdGlvbnNQbGFjZW1lbnQsIHRoaXMucy5sb2FkT3B0aW9uc1JlcXVlc3RJZCwgQm9vbGVhbih0b2dnbGVPcHRpb25zKV0pfVxuICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibWFpblwiKX1cbiAgICAgID5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuc2VsZWN0Q29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcInNlbGVjdC1jb250YWluZXJcIn19XG4gICAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25TZWxlY3RDb250YWluZXJMYXlvdXR9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblNlbGVjdENsaWNrZWR9XG4gICAgICAgICAgcmVmPXt0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZn1cbiAgICAgICAgICBzdHlsZT17c2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWx9XG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jdXJyZW50U2VsZWN0ZWREYXRhU2V0IHx8PSB7Y2xhc3M6IFwiY3VycmVudC1zZWxlY3RlZFwifX1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50U2VsZWN0ZWRcIiwgdGhpcy5jdXJyZW50U2VsZWN0ZWRTdHlsZSB8fD0ge2ZsZXg6IDEsIGZsZXhXcmFwOiBcIndyYXBcIiwgb3ZlcmZsb3c6IFwiaGlkZGVuXCJ9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3BlbmVkICYmXG4gICAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgICBkYXRhU2V0PXt0aGlzLnNlYXJjaFRleHRJbnB1dERhdGFTZXQgfHw9IHtjbGFzczogXCJzZWFyY2gtdGV4dC1pbnB1dFwifX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZVRleHQ9e3RoaXMudHQub25DaGFuZ2VTZWFyY2hUZXh0fVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnRyYW5zbGF0ZShcIi5zZWFyY2hfZG90X2RvdF9kb3RcIil9XG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwic2VhcmNoVGV4dElucHV0XCIsIHRoaXMuc2VhcmNoVGV4dElucHV0U3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgb3V0bGluZTogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IFwibm9uZVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5zZWFyY2hUZXh0VmFsdWV9XG4gICAgICAgICAgICAgICAgey4uLnRoaXMucC5zZWFyY2hUZXh0SW5wdXRQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHshb3BlbmVkICYmXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgICA8VGV4dCBudW1iZXJPZkxpbmVzPXsxfSBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibm90aGluZ1NlbGVjdGVkXCIsIHRoaXMubm90aGluZ1NlbGVjdGVkU3R5bGUgfHw9IHtjb2xvcjogXCJncmV5XCJ9KX0+XG4gICAgICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlciB8fCB0aGlzLnRyYW5zbGF0ZShcIi5ub3RoaW5nX3NlbGVjdGVkXCIpfVxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubGVuZ3RoID09IDAgJiYgUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiAmJlxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge3ZhbHVlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHRoaXMucC5tdWx0aXBsZSA/IHZhbHVlcyA6IFt2YWx1ZXNbMF1dKS5tYXAoKHZhbHVlKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkRm9yQ29tcG9uZW50KHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BjdXJyZW50LXZhbHVlLSR7dmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7dmFsdWVzLmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17aWRGb3JDb21wb25lbnQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5tYXAoKGN1cnJlbnRPcHRpb24pID0+XG4gICAgICAgICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmN1cnJlbnRPcHRpb25EYXRhU2V0IHx8PSB7Y2xhc3M6IFwiY3VycmVudC1vcHRpb25cIn19XG4gICAgICAgICAgICAgICAgICAgIGtleT17Y3VycmVudE9wdGlvbi5rZXkgfHwgYGN1cnJlbnQtdmFsdWUtJHtjdXJyZW50T3B0aW9uLnZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uXCIsIHttYXJnaW5SaWdodDogNn0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbi50eXBlID09IFwiZ3JvdXBcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uR3JvdXBcIiwgdGhpcy5jdXJyZW50T3B0aW9uR3JvdXBTdHlsZSB8fD0ge2ZvbnRXZWlnaHQ6IFwiYm9sZFwifSl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25Hcm91cFRleHRcIil9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbi50ZXh0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbi50eXBlICE9IFwiZ3JvdXBcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7UGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiAmJiBuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtkaWdnKGN1cnJlbnRPcHRpb24sIFwidmFsdWVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcmVzZW50T3B0aW9uKGN1cnJlbnRPcHRpb24sIFwiY3VycmVudFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jaGV2cm9uQ29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcImNoZXZyb24tY29udGFpbmVyXCJ9fVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImNoZXZyb25Db250YWluZXJcIiwgdGhpcy5jaGV2cm9uQ29udGFpbmVyU3R5bGUgfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodDogOFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvbiBuYW1lPXtvcGVuZWQgPyBcImNoZXZyb24tdXBcIiA6IFwiY2hldnJvbi1kb3duXCJ9IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjaGV2cm9uXCIsIHRoaXMuY2hldnJvblN0eWxlIHx8PSB7Zm9udFNpemU6IDEyfSl9IC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBkYXRhU2V0PXt0aGlzLmVuZE9mU2VsZWN0RGF0YVNldCB8fD0ge2NsYXNzOiBcImVuZC1vZi1zZWxlY3RcIn19XG4gICAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25FbmRPZlNlbGVjdExheW91dH1cbiAgICAgICAgICByZWY9e2VuZE9mU2VsZWN0UmVmfVxuICAgICAgICAvPlxuICAgICAgICB7b3BlbmVkICYmIHRoaXMucC5vcHRpb25zUG9ydGFsICYmXG4gICAgICAgICAgPFBvcnRhbCBuYW1lPXt0aGlzLnBvcnRhbE5hbWUoKX0+XG4gICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29udGFpbmVyKCl9XG4gICAgICAgICAgPC9Qb3J0YWw+XG4gICAgICAgIH1cbiAgICAgICAge29wZW5lZCAmJiAhdGhpcy5wLm9wdGlvbnNQb3J0YWwgJiZcbiAgICAgICAgICA8Vmlldz5cbiAgICAgICAgICAgIHt0aGlzLm9wdGlvbnNDb250YWluZXIoKX1cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PHN0cmluZ3xudW1iZXI+fHN0cmluZ3xudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICBkZWZhdWx0VmFsdWVzICgpIHtcbiAgICBjb25zdCB7YXR0cmlidXRlLCBkZWZhdWx0VmFsdWUsIGRlZmF1bHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucywgbW9kZWx9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucykgcmV0dXJuIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc1xuICAgIGlmIChkZWZhdWx0VmFsdWUpIHJldHVybiBkZWZhdWx0VmFsdWVcbiAgICBpZiAoZGVmYXVsdFZhbHVlcykgcmV0dXJuIGRlZmF1bHRWYWx1ZXNcblxuICAgIGlmIChhdHRyaWJ1dGUgJiYgbW9kZWwpIHtcbiAgICAgIGlmICghKGF0dHJpYnV0ZSBpbiBtb2RlbCkpIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBhdHRyaWJ1dGUgb24gJHttb2RlbC5tb2RlbENsYXNzRGF0YSgpLm5hbWV9OiAke2F0dHJpYnV0ZX1gKVxuXG4gICAgICByZXR1cm4gbW9kZWxbYXR0cmlidXRlXSgpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc0FjdGl2ZSgpIHtcbiAgICBpZiAodGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBsb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2soKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IHRoaXMuZGVmYXVsdFZhbHVlcygpXG5cbiAgICBpZiAoIWRlZmF1bHRWYWx1ZXMpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFja1wiLCB7ZGVmYXVsdFZhbHVlc30pXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByb3BzLm9wdGlvbnMoe1xuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuZ2V0U2VhcmNoVGV4dCgpLFxuICAgICAgcGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksXG4gICAgICB2YWx1ZXM6IGRlZmF1bHRWYWx1ZXNcbiAgICB9KVxuXG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wYXJzZU9wdGlvbnNSZXN1bHQocmVzdWx0KVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2sucmVzdWx0XCIsIHtsb2FkZWRPcHRpb25zQ291bnQ6IG9wdGlvbnM/Lmxlbmd0aCB8fCAwfSlcblxuICAgIHRoaXMucy5jdXJyZW50T3B0aW9ucyA9IHRoaXMuc3RhdGUuY3VycmVudE9wdGlvbnMuY29uY2F0KG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7cGFnZT86IG51bWJlcn19IFtwYXJhbXNdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgbG9hZE9wdGlvbnMgPSBhc3luYyAoe3BhZ2V9ID0ge30pID0+IHtcbiAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLnBcbiAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IHRoaXMuZ2V0U2VhcmNoVGV4dCgpXG4gICAgY29uc3QgcmVxdWVzdElkID0gKyt0aGlzLmxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkXG4gICAgdGhpcy5zLmxvYWRPcHRpb25zUmVxdWVzdElkID0gcmVxdWVzdElkXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zXCIsIHtcbiAgICAgIHBhZ2UsXG4gICAgICByZXF1ZXN0SWQsXG4gICAgICBzZWFyY2hWYWx1ZSxcbiAgICAgIG9wdGlvbnNUeXBlOiBBcnJheS5pc0FycmF5KG9wdGlvbnMpID8gXCJhcnJheVwiIDogdHlwZW9mIG9wdGlvbnNcbiAgICB9KVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRPcHRpb25zRnJvbUFycmF5KG9wdGlvbnMsIHNlYXJjaFZhbHVlLCByZXF1ZXN0SWQpXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdGVkUGFnZSA9IE51bWJlci5pc0Zpbml0ZShwYWdlKSA/IHBhZ2UgOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wdGlvbnMoe3NlYXJjaFZhbHVlLCBwYWdlOiByZXF1ZXN0ZWRQYWdlfSlcbiAgICBjb25zdCB7b3B0aW9uczogbG9hZGVkT3B0aW9ucywgcGFnZTogcmVzdWx0UGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9ID0gdGhpcy5wYXJzZU9wdGlvbnNSZXN1bHQocmVzdWx0KVxuXG4gICAgaWYgKHJlcXVlc3RJZCAhPSB0aGlzLmxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkKSB7XG4gICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnMuaWdub3JlZF9zdGFsZV9yZXN1bHRcIiwge1xuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkOiB0aGlzLmxhdGVzdExvYWRPcHRpb25zUmVxdWVzdElkLFxuICAgICAgICByZXF1ZXN0ZWRQYWdlLFxuICAgICAgICBzZWFyY2hWYWx1ZVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWRQYWdlID0gTnVtYmVyLmlzRmluaXRlKHJlc3VsdFBhZ2UpID8gcmVzdWx0UGFnZSA6IHJlcXVlc3RlZFBhZ2VcbiAgICBjb25zdCByZXNvbHZlZFBhZ2VTaXplID0gdGhpcy5yZXNvbHZlUGFnZVNpemUoe29wdGlvbnM6IGxvYWRlZE9wdGlvbnMsIHBhZ2U6IHJlc29sdmVkUGFnZSwgcGFnZVNpemUsIHRvdGFsQ291bnR9KVxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgJiYgTnVtYmVyLmlzRmluaXRlKHJlc29sdmVkUGFnZVNpemUpICYmIHJlc29sdmVkUGFnZVNpemUgPiAwXG4gICAgICA/IE1hdGguY2VpbCh0b3RhbENvdW50IC8gcmVzb2x2ZWRQYWdlU2l6ZSlcbiAgICAgIDogbnVsbFxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBsb2FkZWRPcHRpb25zLFxuICAgICAgbG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkOiByZXF1ZXN0SWQsXG4gICAgICBwYWdlOiByZXNvbHZlZFBhZ2UsXG4gICAgICBwYWdlSW5wdXRWYWx1ZTogU3RyaW5nKHJlc29sdmVkUGFnZSksXG4gICAgICBwYWdlU2l6ZTogTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpID8gcmVzb2x2ZWRQYWdlU2l6ZSA6IG51bGwsXG4gICAgICB0b3RhbENvdW50OiBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgPyB0b3RhbENvdW50IDogbnVsbFxuICAgIH0sICgpID0+IHRoaXMucHJvcHMub25PcHRpb25zTG9hZGVkPy4oe29wdGlvbnM6IGxvYWRlZE9wdGlvbnN9KSlcblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkT3B0aW9ucy5yZXN1bHRcIiwge1xuICAgICAgbG9hZGVkT3B0aW9uc0NvdW50OiBsb2FkZWRPcHRpb25zPy5sZW5ndGggfHwgMCxcbiAgICAgIHJlc29sdmVkUGFnZSxcbiAgICAgIHJlc29sdmVkUGFnZVNpemUsXG4gICAgICB0b3RhbENvdW50OiBOdW1iZXIuaXNGaW5pdGUodG90YWxDb3VudCkgPyB0b3RhbENvdW50IDogbnVsbFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7a2V5OiBzdHJpbmcsIGxvYWRlZE9wdGlvbjogSGF5YVNlbGVjdE9wdGlvbn19XG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9XG4gICAqL1xuICBoYXlhU2VsZWN0T3B0aW9uKHtrZXksIGxvYWRlZE9wdGlvbn0pIHtcbiAgICBpZiAobG9hZGVkT3B0aW9uLnR5cGUgPT0gXCJncm91cFwiKSB7XG4gICAgICByZXR1cm4gPE9wdGlvbkdyb3VwIGtleT17a2V5fSBvcHRpb249e2xvYWRlZE9wdGlvbn0gLz5cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE9wdGlvblxuICAgICAgICBjdXJyZW50T3B0aW9uVmFsdWVzPXt0aGlzLmdldEN1cnJlbnRPcHRpb25WYWx1ZXMoKX1cbiAgICAgICAgaWNvbj17dGhpcy5pY29uRm9yT3B0aW9uKGxvYWRlZE9wdGlvbil9XG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBvcHRpb249e2xvYWRlZE9wdGlvbn1cbiAgICAgICAgb25PcHRpb25DbGlja2VkPXt0aGlzLnR0Lm9uT3B0aW9uQ2xpY2tlZH1cbiAgICAgICAgcHJlc2VudE9wdGlvbj17dGhpcy50dC5wcmVzZW50T3B0aW9ufVxuICAgICAgICBzZWxlY3RlZEJhY2tncm91bmRDb2xvcj17dGhpcy5wcm9wcy5zZWxlY3RlZEJhY2tncm91bmRDb2xvcn1cbiAgICAgICAgc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcj17dGhpcy5wcm9wcy5zZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlYXJjaFZhbHVlXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3JlcXVlc3RJZF1cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBsb2FkT3B0aW9uc0Zyb21BcnJheShvcHRpb25zLCBzZWFyY2hWYWx1ZSwgcmVxdWVzdElkID0gdGhpcy5sYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZCkge1xuICAgIGNvbnN0IGxvd2VyU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZT8udG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGxvYWRlZE9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcigoe3RleHR9KSA9PiAhbG93ZXJTZWFyY2hWYWx1ZSB8fCB0ZXh0Py50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhsb3dlclNlYXJjaFZhbHVlKSlcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnNGcm9tQXJyYXlcIiwge1xuICAgICAgcmVxdWVzdElkLFxuICAgICAgdG90YWxPcHRpb25zQ291bnQ6IG9wdGlvbnMubGVuZ3RoLFxuICAgICAgc2VhcmNoVmFsdWUsXG4gICAgICBsb2FkZWRPcHRpb25zQ291bnQ6IGxvYWRlZE9wdGlvbnMubGVuZ3RoXG4gICAgfSlcblxuICAgIHRoaXMucy5sb2FkZWRPcHRpb25zID0gbG9hZGVkT3B0aW9uc1xuICAgIHRoaXMucy5sb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQgPSByZXF1ZXN0SWRcbiAgICB0aGlzLnMucGFnZSA9IDFcbiAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBcIjFcIlxuICAgIHRoaXMucy5wYWdlU2l6ZSA9IG51bGxcbiAgICB0aGlzLnMudG90YWxDb3VudCA9IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3t3aW5kb3c6IHt3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcn19fSBldmVudFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uRGltZW5zaW9uc0NoYW5nZSA9ICh7d2luZG93fSkgPT4ge1xuICAgIHRoaXMud2luZG93V2lkdGggPSB3aW5kb3cud2lkdGhcbiAgICB0aGlzLndpbmRvd0hlaWdodCA9IHdpbmRvdy5oZWlnaHRcblxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLm1lYXN1cmVOYXRpdmVTZWxlY3RMYXlvdXRzKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7bmF0aXZlRXZlbnQ/OiB7bGF5b3V0PzogSGF5YVNlbGVjdExheW91dH19fSBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25TZWxlY3RDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQgPSBub3JtYWxpemVMYXlvdXQoZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZiwgXCJzZWxlY3RDb250YWluZXJMYXlvdXRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkVuZE9mU2VsZWN0TGF5b3V0ID0gKGUpID0+IHtcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IG5vcm1hbGl6ZUxheW91dChkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7ZW5kT2ZTZWxlY3RMYXlvdXR9XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGgpIHtcbiAgICAgIG5ld1N0YXRlLm9wdGlvbnNXaWR0aCA9IGVuZE9mU2VsZWN0TGF5b3V0LndpZHRoXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT4ge1xuICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYsIFwiZW5kT2ZTZWxlY3RMYXlvdXRcIilcblxuICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk9wdGlvbnNDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0ID0gbm9ybWFsaXplTGF5b3V0KGRpZ2coZSwgXCJuYXRpdmVFdmVudFwiLCBcImxheW91dFwiKSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgbWVhc3VyZU5hdGl2ZVNlbGVjdExheW91dHMoKSB7XG4gICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLCBcInNlbGVjdENvbnRhaW5lckxheW91dFwiKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLCBcImVuZE9mU2VsZWN0TGF5b3V0XCIpXG4gIH1cblxuICAvKipcbiAgICogTWVhc3VyZXMgYSBuYXRpdmUgdmlldyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMgZm9yIHBvcnRhbCBwb3NpdGlvbmluZy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWZPYmplY3Q8b2JqZWN0Pn0gcmVmIFZpZXcgcmVmLlxuICAgKiBAcGFyYW0ge1wic2VsZWN0Q29udGFpbmVyTGF5b3V0XCJ8XCJlbmRPZlNlbGVjdExheW91dFwifSBzdGF0ZUtleSBTdGF0ZSBsYXlvdXQga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG1lYXN1cmVOYXRpdmVMYXlvdXQocmVmLCBzdGF0ZUtleSkge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSByZXR1cm5cblxuICAgIGNvbnN0IGVsZW1lbnQgPSByZWYuY3VycmVudFxuICAgIGlmICghZWxlbWVudCB8fCB0eXBlb2YgZWxlbWVudC5tZWFzdXJlSW5XaW5kb3cgIT0gXCJmdW5jdGlvblwiKSByZXR1cm5cblxuICAgIGVsZW1lbnQubWVhc3VyZUluV2luZG93KChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkTGF5b3V0ID0ge2hlaWdodCwgbGVmdCwgdG9wLCB3aWR0aH1cblxuICAgICAgaWYgKCFsYXlvdXRIYXNQb3NpdGlvbihtZWFzdXJlZExheW91dCkpIHJldHVyblxuXG4gICAgICAvKiogQHR5cGUge1BhcnRpYWw8SGF5YVNlbGVjdFN0YXRlPn0gKi9cbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBbc3RhdGVLZXldOiBtZWFzdXJlZExheW91dFxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVLZXkgPT0gXCJlbmRPZlNlbGVjdExheW91dFwiICYmIHRoaXMucy5vcGVuZWQgJiYgd2lkdGgpIHtcbiAgICAgICAgbmV3U3RhdGUub3B0aW9uc1dpZHRoID0gd2lkdGhcbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnl0aGluZ0RpZmZlcmVudCh0aGlzLnNbc3RhdGVLZXldLCBtZWFzdXJlZExheW91dCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblNlbGVjdENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvcGVuZWR9ID0gdGhpcy5zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uU2VsZWN0Q2xpY2tlZFwiLCB7b3BlbmVkfSlcblxuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5sb2FkT3B0aW9ucywgMjAwKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tvcHRpb25zPzogQXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsb3NlT3B0aW9ucyh7b3B0aW9uc30gPSB7fSkge1xuICAgIGNvbnN0IGNsb3NlZE9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjbG9zZU9wdGlvbnNcIiwge2Nsb3NlZE9wdGlvbnNDb3VudDogY2xvc2VkT3B0aW9ucz8ubGVuZ3RoIHx8IDB9KVxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gZmFsc2VcblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGhlaWdodDogbnVsbCxcbiAgICAgICAgbG9hZGVkT3B0aW9uczogdW5kZWZpbmVkLFxuICAgICAgICBvcGVuZWQ6IGZhbHNlLFxuICAgICAgICBvcHRpb25zQ29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgcGFnZTogMSxcbiAgICAgICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICAgIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIixcbiAgICAgICAgcGFnZVNpemU6IG51bGwsXG4gICAgICAgIHRvdGFsQ291bnQ6IG51bGxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjbG9zZU9wdGlvbnMuZG9uZVwiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkLCBvcHRpb25zVmlzaWJpbGl0eTogdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5fSlcbiAgICAgIH1cbiAgICApXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbk9wdGlvbnNDbG9zZWQpIHtcbiAgICAgIHRoaXMucHJvcHMub25PcHRpb25zQ2xvc2VkKHtvcHRpb25zOiBjbG9zZWRPcHRpb25zfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wLm9uQmx1cikgdGhpcy5wLm9uQmx1cigpXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgZ2V0U2VhcmNoVGV4dCA9ICgpID0+IHRoaXMuc2VhcmNoVGV4dFZhbHVlIHx8IFwiXCJcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHJlc2V0U2VhcmNoVGV4dElucHV0ID0gKCkgPT4ge1xuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICAgIGNvbnN0IGlucHV0ID0gdGhpcy50dC5zZWFyY2hUZXh0SW5wdXRSZWYuY3VycmVudFxuXG4gICAgaWYgKGlucHV0Py5jbGVhcikge1xuICAgICAgaW5wdXQuY2xlYXIoKVxuICAgIH0gZWxzZSBpZiAoaW5wdXQ/LnNldE5hdGl2ZVByb3BzKSB7XG4gICAgICBpbnB1dC5zZXROYXRpdmVQcm9wcyh7dGV4dDogXCJcIn0pXG4gICAgfSBlbHNlIGlmIChpbnB1dCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5wdXQudmFsdWUgPSBcIlwiXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZ25vcmUgaWYgdGhlIHJlZiBkb2Vzbid0IHN1cHBvcnQgZGlyZWN0IHZhbHVlIGFzc2lnbm1lbnQuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hUZXh0XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25DaGFuZ2VTZWFyY2hUZXh0ID0gKHNlYXJjaFRleHQpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25DaGFuZ2VTZWFyY2hUZXh0XCIsIHtzZWFyY2hUZXh0LCBjdXJyZW50UGFnZTogdGhpcy5zLnBhZ2V9KVxuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gc2VhcmNoVGV4dFxuXG4gICAgaWYgKHRoaXMucy5wYWdlICE9IDEpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2U6IDEsIHBhZ2VJbnB1dFZhbHVlOiBcIjFcIn0sIHRoaXMudHQub25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnR0Lm9uU2VhcmNoVGV4dElucHV0Q2hhbmdlZERlYm91bmNlZCgpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvcGVuT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib3Blbk9wdGlvbnNcIiwge1xuICAgICAgY3VycmVudE9wdGlvbnNDb3VudDogdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpPy5sZW5ndGggfHwgMCxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRoaXMucC5zZWFyY2hcbiAgICB9KVxuICAgIHRoaXMuc2VhcmNoVGV4dFZhbHVlID0gXCJcIlxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gdHJ1ZVxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGhlaWdodDogdGhpcy5zLnNlbGVjdENvbnRhaW5lckxheW91dC5oZWlnaHQsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJiZWxvd1wiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgb3B0aW9uc1dpZHRoOiB0aGlzLnMuZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgICAgcGFnZUlucHV0VmFsdWU6IFwiMVwiLFxuICAgICAgICBzY3JvbGxMZWZ0OiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgOiBudWxsLFxuICAgICAgICBzY3JvbGxUb3A6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpXG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hUZXh0SW5wdXQoKVxuICAgICAgICB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICAgICAgdGhpcy5sb2FkT3B0aW9ucyh7cGFnZTogMX0pXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKHRoaXMucC5vbkZvY3VzKSB0aGlzLnAub25Gb2N1cygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGZvY3VzVGV4dElucHV0ID0gKCkgPT4gZGlnZyh0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZiwgXCJjdXJyZW50XCIpPy5mb2N1cygpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgIHJldHVybiAvLyBEZWJvdW5jZSBhZnRlciB1bi1tb3VudCBoYW5kZWxpbmcuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvblwiKVxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gdHJ1ZVxuICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQmVsb3coKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuXG4gICAgY29uc3Qge3dpbmRvd0hlaWdodH0gPSB0aGlzLnR0XG4gICAgY29uc3Qge29wdGlvbnNDb250YWluZXJMYXlvdXQsIHNlbGVjdENvbnRhaW5lckxheW91dH0gPSB0aGlzLnNcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IHRoaXMucy5lbmRPZlNlbGVjdExheW91dFxuXG4gICAgY29uc3Qgb3B0aW9uc1RvcCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCJcbiAgICAgID8gZW5kT2ZTZWxlY3RMYXlvdXQ/LnRvcFxuICAgICAgOiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py50b3AgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQgPT0gXCJudW1iZXJcIlxuICAgICAgICA/IHNlbGVjdENvbnRhaW5lckxheW91dC50b3AgKyBzZWxlY3RDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9uc1RvcCkpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlblwiLCB7cGxhY2VtZW50OiBcImJlbG93XCIsIHJlYXNvbjogXCJtaXNzaW5nLW9wdGlvbnMtdG9wXCJ9KVxuICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbiA9IG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgb3B0aW9uc1RvcFxuICAgIGNvbnN0IHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPSB3aW5kb3dIZWlnaHQgKyAodGhpcy5zLnNjcm9sbFRvcCB8fCAwKVxuXG4gICAgaWYgKHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbikge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYWJvdmVcIn0pXG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlKClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYmVsb3dcIn0pXG4gICAgICB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHkgPSBcInZpc2libGVcIlxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmUoKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIGNvbnN0IHtlbmRPZlNlbGVjdExheW91dH0gPSB0aGlzLnNcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVcIilcblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJhYm92ZVwiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoXG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25CZWxvdygpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkJlbG93XCIpXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICBvcHRpb25zUGxhY2VtZW50OiBcImJlbG93XCIsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICBvcHRpb25zV2lkdGg6IHRoaXMucy5lbmRPZlNlbGVjdExheW91dD8ud2lkdGhcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLmZvY3VzVGV4dElucHV0KClcbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uQW55dGhpbmdSZXNpemVkID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbkFueXRoaW5nUmVzaXplZFwiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkfSlcbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIG9uQW55dGhpbmdSZXNpemVkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5vbkFueXRoaW5nUmVzaXplZCwgMjUpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvbkFueXRoaW5nU2Nyb2xsZWQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uQW55dGhpbmdTY3JvbGxlZFwiLCB7b3BlbmVkOiB0aGlzLnMub3BlbmVkfSlcbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5zLnNjcm9sbExlZnQgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgOiBudWxsXG4gICAgICB0aGlzLnMuc2Nyb2xsVG9wID0gUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsXG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbigpXG4gICAgfVxuICB9XG5cbiAgb25Bbnl0aGluZ1Njcm9sbGVkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5vbkFueXRoaW5nU2Nyb2xsZWQsIDI1KVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25QcmVzc091dHNpZGVPcHRpb25zID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvblByZXNzT3V0c2lkZU9wdGlvbnNcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZH0pXG4gICAgLy8gSWYgb3B0aW9ucyBhcmUgb3BlbiBhbmQgYSBjbGljayBpcyBtYWRlIG91dHNpZGUgb2YgdGhlIG9wdGlvbnMgY29udGFpbmVyXG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge251bWJlcnxudWxsfSAqL1xuICBwYWdpbmF0aW9uVG90YWxQYWdlcygpIHtcbiAgICBjb25zdCB7dG90YWxDb3VudH0gPSB0aGlzLnNcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpIHx8IHRvdGFsQ291bnQgPD0gMCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5yZXNvbHZlUGFnZVNpemUoe1xuICAgICAgb3B0aW9uczogdGhpcy5zLmxvYWRlZE9wdGlvbnMgfHwgW10sXG4gICAgICBwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnMucGFnZVNpemUsXG4gICAgICB0b3RhbENvdW50XG4gICAgfSlcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHBhZ2VTaXplKSB8fCBwYWdlU2l6ZSA8PSAwKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIE1hdGguY2VpbCh0b3RhbENvdW50IC8gcGFnZVNpemUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsUGFnZXNcbiAgICogQHJldHVybnMge0FycmF5PHtrZXk6IHN0cmluZywgdHlwZTogXCJwYWdlXCJ8XCJlbGxpcHNpc1wiLCB2YWx1ZT86IG51bWJlcn0+fVxuICAgKi9cbiAgcGFnaW5hdGlvblBhZ2VJdGVtcyh0b3RhbFBhZ2VzKSB7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IGl0ZW1zID0gW11cbiAgICBjb25zdCBhZGRQYWdlID0gKHBhZ2UpID0+IGl0ZW1zLnB1c2goe2tleTogYHBhZ2UtJHtwYWdlfWAsIHR5cGU6IFwicGFnZVwiLCB2YWx1ZTogcGFnZX0pXG4gICAgY29uc3QgYWRkRWxsaXBzaXMgPSAoa2V5KSA9PiBpdGVtcy5wdXNoKHtrZXksIHR5cGU6IFwiZWxsaXBzaXNcIn0pXG5cbiAgICBpZiAodG90YWxQYWdlcyA8PSA3KSB7XG4gICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSB0b3RhbFBhZ2VzOyBwYWdlICs9IDEpIHtcbiAgICAgICAgYWRkUGFnZShwYWdlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXNcbiAgICB9XG5cbiAgICBhZGRQYWdlKDEpXG5cbiAgICBjb25zdCB3aW5kb3dTaXplID0gMlxuICAgIGxldCBzdGFydCA9IE1hdGgubWF4KDIsIGN1cnJlbnRQYWdlIC0gd2luZG93U2l6ZSlcbiAgICBsZXQgZW5kID0gTWF0aC5taW4odG90YWxQYWdlcyAtIDEsIGN1cnJlbnRQYWdlICsgd2luZG93U2l6ZSlcblxuICAgIGlmIChjdXJyZW50UGFnZSA8PSAzKSB7XG4gICAgICBzdGFydCA9IDJcbiAgICAgIGVuZCA9IE1hdGgubWluKHRvdGFsUGFnZXMgLSAxLCA1KVxuICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gdG90YWxQYWdlcyAtIDIpIHtcbiAgICAgIGVuZCA9IHRvdGFsUGFnZXMgLSAxXG4gICAgICBzdGFydCA9IE1hdGgubWF4KDIsIHRvdGFsUGFnZXMgLSA0KVxuICAgIH1cblxuICAgIGlmIChzdGFydCA+IDIpIGFkZEVsbGlwc2lzKFwiZWxsaXBzaXMtc3RhcnRcIilcblxuICAgIGZvciAobGV0IHBhZ2UgPSBzdGFydDsgcGFnZSA8PSBlbmQ7IHBhZ2UgKz0gMSkge1xuICAgICAgYWRkUGFnZShwYWdlKVxuICAgIH1cblxuICAgIGlmIChlbmQgPCB0b3RhbFBhZ2VzIC0gMSkgYWRkRWxsaXBzaXMoXCJlbGxpcHNpcy1lbmRcIilcblxuICAgIGFkZFBhZ2UodG90YWxQYWdlcylcblxuICAgIHJldHVybiBpdGVtc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFBhZ2VzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBwYWdpbmF0aW9uRGlzcGxheVZhbHVlKHRvdGFsUGFnZXMpIHtcbiAgICBjb25zdCBhY3RpdmVQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBmYWxsYmFja1RleHQgPSBgUGFnZSAke2FjdGl2ZVBhZ2V9IG9mICR7dG90YWxQYWdlc31gXG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUoXCIucGFnaW5hdGlvbl9wYWdlX29mX3BhZ2VzXCIsIHtcbiAgICAgIGRlZmF1bHRWYWx1ZTogZmFsbGJhY2tUZXh0LFxuICAgICAgcGFnZTogYWN0aXZlUGFnZSxcbiAgICAgIHRvdGFsUGFnZXNcbiAgICB9KSB8fCBmYWxsYmFja1RleHRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxQYWdlc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcGFnaW5hdGlvbklucHV0VmFsdWUodG90YWxQYWdlcykge1xuICAgIGlmICh0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCkgcmV0dXJuIHRoaXMucy5wYWdlSW5wdXRWYWx1ZVxuXG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbkRpc3BsYXlWYWx1ZSh0b3RhbFBhZ2VzKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7bnVtYmVyfSBwYWdlICovXG4gIHNldFBhZ2luYXRpb25QYWdlID0gKHBhZ2UpID0+IHtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldFBhZ2luYXRpb25QYWdlXCIsIHtyZXF1ZXN0ZWRQYWdlOiBwYWdlLCB0b3RhbFBhZ2VzfSlcblxuICAgIGlmICghdG90YWxQYWdlcykgcmV0dXJuXG5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE1hdGgubWluKE1hdGgubWF4KE1hdGguZmxvb3IocGFnZSksIDEpLCB0b3RhbFBhZ2VzKVxuXG4gICAgaWYgKG5leHRQYWdlID09IHRoaXMuZ2V0QWN0aXZlUGFnZSgpKSB7XG4gICAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge3BhZ2U6IG5leHRQYWdlLCBwYWdlSW5wdXRWYWx1ZTogU3RyaW5nKG5leHRQYWdlKX0sXG4gICAgICAoKSA9PiB0aGlzLnR0LmxvYWRPcHRpb25zKHtwYWdlOiBuZXh0UGFnZX0pXG4gICAgKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvblByZXZQcmVzc2VkID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uUGFnZSh0aGlzLmdldEFjdGl2ZVBhZ2UoKSAtIDEpXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uTmV4dFByZXNzZWQgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICB0aGlzLnNldFBhZ2luYXRpb25QYWdlKHRoaXMuZ2V0QWN0aXZlUGFnZSgpICsgMSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRGb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCA9IHRydWVcbiAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gIH1cblxuICAvKiogQHBhcmFtIHtzdHJpbmd9IHZhbHVlICovXG4gIG9uUGFnaW5hdGlvbklucHV0Q2hhbmdlID0gKHZhbHVlKSA9PiB7XG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25JbnB1dEJsdXIgPSAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24/LigpXG5cbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG4gICAgY29uc3QgcmF3VmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZSA/PyB0aGlzLnMucGFnZUlucHV0VmFsdWVcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHJhd1ZhbHVlID8gTnVtYmVyKFN0cmluZyhyYXdWYWx1ZSkubWF0Y2goL1xcZCsvKT8uWzBdKSA6IE5hTlxuICAgIGNvbnN0IG5leHRQYWdlID0gTnVtYmVyLmlzRmluaXRlKHBhcnNlZFZhbHVlKSA/IHBhcnNlZFZhbHVlIDogTnVtYmVyKHRoaXMucy5wYWdlSW5wdXRWYWx1ZSlcblxuICAgIGlmICh0b3RhbFBhZ2VzICYmIE51bWJlci5pc0Zpbml0ZShuZXh0UGFnZSkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlfSwgKCkgPT4gdGhpcy5zZXRQYWdpbmF0aW9uUGFnZShuZXh0UGFnZSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgcGFnZUlucHV0VmFsdWU6IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0U3VibWl0ID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuXG4gICAgaWYgKCF0b3RhbFBhZ2VzKSB7XG4gICAgICB0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE51bWJlcih0aGlzLnMucGFnZUlucHV0VmFsdWUpXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuZXh0UGFnZSkpIHtcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRGb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLmdldEFjdGl2ZVBhZ2UoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe3BhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlfSwgKCkgPT4gdGhpcy5zZXRQYWdpbmF0aW9uUGFnZShuZXh0UGFnZSkpXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRLZXlEb3duID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50Py5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuXG5cbiAgICB0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0U3VibWl0KGV2ZW50KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV8bnVsbH0gKi9cbiAgcGFnaW5hdGlvbkNvbnRyb2xzKCkge1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcblxuICAgIGlmICghdG90YWxQYWdlcyB8fCB0b3RhbFBhZ2VzIDw9IDEpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgcHJldkRpc2FibGVkID0gY3VycmVudFBhZ2UgPD0gMVxuICAgIGNvbnN0IG5leHREaXNhYmxlZCA9IGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXNcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uQ29udGFpbmVyIHx8PSB7Y2xhc3M6IFwib3B0aW9ucy1wYWdpbmF0aW9uXCJ9fVxuICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25Db250YWluZXIgfHw9IHtcbiAgICAgICAgICBib3JkZXJUb3BDb2xvcjogXCIjZTJlOGYwXCIsXG4gICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IDEsXG4gICAgICAgICAgcGFkZGluZzogOFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25IZWFkZXIgfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLWhlYWRlclwifX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25IZWFkZXIgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCJ9fVxuICAgICAgICA+XG4gICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvblByZXZCdXR0b24gfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLXByZXZcIn19XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJldkRpc2FibGVkfVxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblBhZ2luYXRpb25QcmV2UHJlc3NlZH1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXNbYHBhZ2luYXRpb25OYXZCdXR0b24tJHtwcmV2RGlzYWJsZWR9YF0gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmOGZhZmNcIixcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMwLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogcHJldkRpc2FibGVkID8gMC40IDogMSxcbiAgICAgICAgICAgICAgd2lkdGg6IDMwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tbGVmdFwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbk5hdkljb24gfHw9IHtjb2xvcjogXCIjMzM0MTU1XCIsIGZvbnRTaXplOiAxMn19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFwicGFnaW5hdGlvbkxhYmVsRGF0YVNldFwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBcInBhZ2luYXRpb24tbGFiZWxcIixcbiAgICAgICAgICAgICAgcGFnZTogY3VycmVudFBhZ2VcbiAgICAgICAgICAgIH0sIFtjdXJyZW50UGFnZV0pfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTGFiZWxCdXR0b24gfHw9IHtcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmMWY1ZjlcIixcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE0LFxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG1pbldpZHRoOiAxNDAsXG4gICAgICAgICAgICAgIHBhZGRpbmdIb3Jpem9udGFsOiAxMCxcbiAgICAgICAgICAgICAgcGFkZGluZ1ZlcnRpY2FsOiA2XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbklucHV0IHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1pbnB1dFwifX1cbiAgICAgICAgICAgICAga2V5Ym9hcmRUeXBlPVwibnVtYmVyLXBhZFwiXG4gICAgICAgICAgICAgIG9uQmx1cj17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEJsdXJ9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlVGV4dD17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgb25Gb2N1cz17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEZvY3VzfVxuICAgICAgICAgICAgICBvblByZXNzSW49e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRGb2N1c31cbiAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0S2V5RG93bn1cbiAgICAgICAgICAgICAgb25TdWJtaXRFZGl0aW5nPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0U3VibWl0fVxuICAgICAgICAgICAgICByZWY9e3RoaXMudHQucGFnZUlucHV0UmVmfVxuICAgICAgICAgICAgICBzZWxlY3RUZXh0T25Gb2N1c1xuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25JbnB1dFN0eWxlIHx8PSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiIzBmMTcyYVwiLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICBvdXRsaW5lOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJub25lXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5wYWdpbmF0aW9uSW5wdXRWYWx1ZSh0b3RhbFBhZ2VzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25OZXh0QnV0dG9uIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1uZXh0XCJ9fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e25leHREaXNhYmxlZH1cbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25QYWdpbmF0aW9uTmV4dFByZXNzZWR9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzW2BwYWdpbmF0aW9uTmF2QnV0dG9uLSR7bmV4dERpc2FibGVkfWBdIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjhmYWZjXCIsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcIiNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IG5leHREaXNhYmxlZCA/IDAuNCA6IDEsXG4gICAgICAgICAgICAgIHdpZHRoOiAzMFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uTmF2SWNvbiB8fD0ge2NvbG9yOiBcIiMzMzQxNTVcIiwgZm9udFNpemU6IDEyfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDwvVmlldz5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uUGFnZXMgfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLXBhZ2VzXCJ9fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvblBhZ2VzIHx8PSB7XG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgICAgICAgZmxleFdyYXA6IFwid3JhcFwiLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICBtYXJnaW5Ub3A6IDhcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucGFnaW5hdGlvblBhZ2VJdGVtcyh0b3RhbFBhZ2VzKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJlbGxpcHNpc1wiKSB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzW2BwYWdpbmF0aW9uRWxsaXBzaXMtJHtpdGVtLmtleX1gXSB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tZWxsaXBzaXNcIn19XG4gICAgICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uRWxsaXBzaXMgfHw9IHtwYWRkaW5nSG9yaXpvbnRhbDogNn19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uRWxsaXBzaXNUZXh0IHx8PSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiIzY0NzQ4YlwiLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA2MDBcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgLi4uXG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxQYWdpbmF0aW9uUGFnZUJ1dHRvblxuICAgICAgICAgICAgICAgIGFjdGl2ZT17aXRlbS52YWx1ZSA9PSBjdXJyZW50UGFnZX1cbiAgICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxuICAgICAgICAgICAgICAgIG9uUGFnZVNlbGVjdGVkPXt0aGlzLnR0LnNldFBhZ2luYXRpb25QYWdlfVxuICAgICAgICAgICAgICAgIHBhZ2U9e2l0ZW0udmFsdWV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZXxudWxsfSAqL1xuICBvcHRpb25zQ29udGFpbmVyKCkge1xuICAgIGNvbnN0IHtzZWxlY3RDb250YWluZXJMYXlvdXQsIGxvYWRlZE9wdGlvbnMsIGVuZE9mU2VsZWN0TGF5b3V0LCBvcHRpb25zQ29udGFpbmVyTGF5b3V0LCBvcHRpb25zUGxhY2VtZW50LCBvcHRpb25zVmlzaWJpbGl0eX0gPSB0aGlzLnNcbiAgICBsZXQgbGVmdCwgdG9wXG4gICAgY29uc3Qgb3B0aW9uc0NvbnRlbnQgPSAoXG4gICAgICA8PlxuICAgICAgICB7bG9hZGVkT3B0aW9ucz8ubWFwKChsb2FkZWRPcHRpb24pID0+XG4gICAgICAgICAgdGhpcy5oYXlhU2VsZWN0T3B0aW9uKHtcbiAgICAgICAgICAgIGtleTogbG9hZGVkT3B0aW9uLmtleSB8fCBgbG9hZGVkLW9wdGlvbi0ke2xvYWRlZE9wdGlvbi52YWx1ZX1gLFxuICAgICAgICAgICAgbG9hZGVkT3B0aW9uXG4gICAgICAgICAgfSlcbiAgICAgICAgKX1cbiAgICAgICAge2xvYWRlZE9wdGlvbnM/Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLm5vT3B0aW9uc0NvbnRhaW5lckRhdGFTZXQgfHw9IHtjbGFzczogXCJuby1vcHRpb25zLWNvbnRhaW5lclwifX1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJub09wdGlvbnNDb250YWluZXJcIiwgdGhpcy5ub09wdGlvbnNDb250YWluZXJTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICBwYWRkaW5nQm90dG9tOiAxMCxcbiAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IDgsXG4gICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogOCxcbiAgICAgICAgICAgICAgcGFkZGluZ1RvcDogMTBcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICB7dGhpcy5wLm5vT3B0aW9uc1RleHQgPyB0aGlzLnAubm9PcHRpb25zVGV4dCgpIDogdGhpcy50cmFuc2xhdGUoXCIubm9fb3B0aW9uc19mb3VuZFwiKX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgICAge3RoaXMucGFnaW5hdGlvbkNvbnRyb2xzKCl9XG4gICAgICA8Lz5cbiAgICApXG5cbiAgICBsZXQgc3R5bGUgPSB7XG4gICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgekluZGV4OiA5OTk5OSxcbiAgICAgIGVsZXZhdGlvbjogOTk5OTksXG4gICAgICB2aXNpYmlsaXR5OiBvcHRpb25zVmlzaWJpbGl0eSxcbiAgICAgIHdpZHRoOiB0aGlzLnAub3B0aW9uc1dpZHRoIHx8IHRoaXMucy5vcHRpb25zV2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiLFxuICAgICAgYm9yZGVyQ29sb3I6IFwiIzk5OVwiLFxuICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICBtYXhIZWlnaHQ6IDMwMCxcbiAgICAgIG92ZXJmbG93WTogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IFwiYXV0b1wiIDogdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnAub3B0aW9uc1BvcnRhbCkge1xuICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnAub3B0aW9uc0Fic29sdXRlKSB7XG4gICAgICBzdHlsZS5sZWZ0ID0gMFxuICAgICAgc3R5bGUuYm90dG9tID0gMFxuICAgIH0gZWxzZSBpZiAob3B0aW9uc1BsYWNlbWVudCA9PSBcImJlbG93XCIpIHtcbiAgICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICAgIC8vIG9uTGF5b3V0IHRvcCB2YWx1ZSBpcyBzb21ldGltZXMgbmVnYXRpdmUgc28gdXNlIGJyb3dzZXIgSlMgdG8gZ2V0IGl0IGluc3RlYWRcbiAgICAgICAgdG9wID0gZGlnZyh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIFwidG9wXCIpICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIDFcblxuICAgICAgICAvLyBvbkxheW91dCBsZWZ0IHZhbHVlcyBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgd2hlbiBjaGFuZ2VkXG4gICAgICAgIGxlZnQgPSBkaWdnKHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJsZWZ0XCIpICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBzZWxlY3RDb250YWluZXJMYXlvdXQ/LmxlZnRcbiAgICAgICAgdG9wID0gdHlwZW9mIHNlbGVjdENvbnRhaW5lckxheW91dD8udG9wID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHNlbGVjdENvbnRhaW5lckxheW91dD8uaGVpZ2h0ID09IFwibnVtYmVyXCJcbiAgICAgICAgICA/IHNlbGVjdENvbnRhaW5lckxheW91dC50b3AgKyBzZWxlY3RDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUobGVmdCkgJiYgTnVtYmVyLmlzRmluaXRlKHRvcCkpIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IGxlZnRcbiAgICAgICAgc3R5bGUudG9wID0gUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IHRvcCAtIDIgOiB0b3BcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLmxlZnQgPSAwXG4gICAgICAgIHN0eWxlLnRvcCA9IDBcbiAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCJcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAvLyBvbkxheW91dCB0b3AgdmFsdWUgaXMgc29tZXRpbWVzIG5lZ2F0aXZlIHNvIHVzZSBicm93c2VyIEpTIHRvIGdldCBpdCBpbnN0ZWFkXG4gICAgICAgIHRvcCA9IGRpZ2codGhpcy50dC5zZWxlY3RDb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICAgICAgLy8gb25MYXlvdXQgbGVmdCB2YWx1ZXMgZG9lc24ndCBhbHdheXMgdXBkYXRlIHdoZW4gY2hhbmdlZFxuICAgICAgICBsZWZ0ID0gZGlnZyh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IHNlbGVjdENvbnRhaW5lckxheW91dD8ubGVmdFxuICAgICAgICB0b3AgPSBzZWxlY3RDb250YWluZXJMYXlvdXQ/LnRvcFxuICAgICAgfVxuXG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGxlZnQpICYmIE51bWJlci5pc0Zpbml0ZSh0b3ApKSB7XG4gICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0XG4gICAgICAgIHN0eWxlLnRvcCA9IHRvcCAtIG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua29ud24gb3B0aW9ucyBwbGFjZW1lbnQ6ICR7b3B0aW9uc1BsYWNlbWVudH1gKVxuICAgIH1cblxuICAgIGlmIChQbGF0Zm9ybS5PUyAhPSBcIndlYlwiKSB7XG4gICAgICBzdHlsZS5vcGFjaXR5ID0gb3B0aW9uc1Zpc2liaWxpdHkgPT0gXCJoaWRkZW5cIiA/IDAgOiAxXG4gICAgICBzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCJcbiAgICB9XG5cbiAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcIm9wdGlvbnNDb250YWluZXJcIiwgc3R5bGUsIFtsZWZ0LCB0b3AsIHN0eWxlLnZpc2liaWxpdHksIHN0eWxlLndpZHRoXSlcblxuICAgIGNvbnN0IGlkID0gaWRGb3JDb21wb25lbnQodGhpcylcblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXt0aGlzLmNhY2hlKFxuICAgICAgICAgIFwib3B0aW9uc0NvbnRhaW5lckRhdGFTZXRcIixcbiAgICAgICAgICB7Y2xhc3M6IFwib3B0aW9ucy1jb250YWluZXJcIiwgaWQsIHJvbGU6IFwiZGlhbG9nXCIsIG9wdGlvbnNWaXNpYmlsaXR5OiBvcHRpb25zVmlzaWJpbGl0eSB8fCBcImhpZGRlblwifSxcbiAgICAgICAgICBbaWQsIG9wdGlvbnNWaXNpYmlsaXR5XVxuICAgICAgICApfVxuICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbk9wdGlvbnNDb250YWluZXJMYXlvdXR9XG4gICAgICAgIHJlZj17dGhpcy50dC5vcHRpb25zQ29udGFpbmVyUmVmfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICA+XG4gICAgICAgIHtQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmXG4gICAgICAgICAgb3B0aW9uc0NvbnRlbnRcbiAgICAgICAgfVxuICAgICAgICB7UGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIiAmJlxuICAgICAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgICAgICBrZXlib2FyZFNob3VsZFBlcnNpc3RUYXBzPVwiaGFuZGxlZFwiXG4gICAgICAgICAgICBuZXN0ZWRTY3JvbGxFbmFibGVkXG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzW2BuYXRpdmVPcHRpb25zU2Nyb2xsVmlldy0ke3N0eWxlLm1heEhlaWdodCB8fCAzMDB9YF0gfHw9IHtcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBzdHlsZS5tYXhIZWlnaHQgfHwgMzAwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtvcHRpb25zQ29udGVudH1cbiAgICAgICAgICA8L1Njcm9sbFZpZXc+XG4gICAgICAgIH1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHtIYXlhU2VsZWN0T3B0aW9ufSBsb2FkZWRPcHRpb25cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk9wdGlvbkNsaWNrZWQgPSAoZXZlbnQsIGxvYWRlZE9wdGlvbikgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgY29uc3Qge29uQ2hhbmdlLCB0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7bXVsdGlwbGV9ID0gdGhpcy5wXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcbiAgICBjb25zdCB0b2dnbGVkID0gdGhpcy5nZXRUb2dnbGVkKClcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHt9XG4gICAgY29uc3QgZXhpc3RpbmdPcHRpb24gPSBjdXJyZW50T3B0aW9ucy5maW5kKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlID09IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICBjb25zdCBuZXdUb2dnbGVkID0gey4uLnRvZ2dsZWR9XG4gICAgbGV0IG5ld0N1cnJlbnRPcHRpb25zXG4gICAgbGV0IGFjdGlvblxuXG4gICAgaWYgKGV4aXN0aW5nT3B0aW9uKSB7XG4gICAgICBpZiAodG9nZ2xlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBjdXJyZW50VG9nZ2xlID0gdG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRvZ2dsZU9wdGlvbnMuZmluZEluZGV4KChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlID09IGN1cnJlbnRUb2dnbGUpXG5cbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSAodG9nZ2xlT3B0aW9ucy5sZW5ndGggLSAxKSkge1xuICAgICAgICAgIC8vIE5vIG5leHQgdG9nZ2xlZCAtIHJlbW92ZSB0b2dnbGVkIGFuZCBvcHRpb25cbiAgICAgICAgICBkZWxldGUgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdXG4gICAgICAgICAgYWN0aW9uID0gXCJyZW1vdmUtb3B0aW9uLWFmdGVyLWxhc3QtdG9nZ2xlXCJcblxuICAgICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuZmlsdGVyKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlICE9IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbHJlYWR5IHRvZ2dsZWQgLSBzZXQgdG8gbmV4dCB0b2dnbGVcbiAgICAgICAgICBuZXdUb2dnbGVkW2xvYWRlZE9wdGlvbi52YWx1ZV0gPSBkaWdnKHRvZ2dsZU9wdGlvbnMsIGN1cnJlbnRJbmRleCArIDEsIFwidmFsdWVcIilcbiAgICAgICAgICBhY3Rpb24gPSBcImN5Y2xlLXRvZ2dsZVwiXG4gICAgICAgIH1cblxuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gY3VycmVudCBvcHRpb25zXG4gICAgICAgIGFjdGlvbiA9IFwicmVtb3ZlLW9wdGlvblwiXG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuZmlsdGVyKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlICE9IGxvYWRlZE9wdGlvbi52YWx1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGNsaWNrZWQgb3B0aW9uIGlzIGRpc2FibGVkXG4gICAgICBpZiAobG9hZGVkT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbk9wdGlvbkNsaWNrZWRcIiwge1xuICAgICAgICAgIGFjdGlvbjogXCJpZ25vcmUtZGlzYWJsZWQtb3B0aW9uXCIsXG4gICAgICAgICAgb3B0aW9uVmFsdWU6IGxvYWRlZE9wdGlvbi52YWx1ZVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgLy8gU2V0IGZyZXNoIHRvZ2dsZVxuICAgICAgICBuZXdUb2dnbGVkW2xvYWRlZE9wdGlvbi52YWx1ZV0gPSB0b2dnbGVPcHRpb25zWzBdLnZhbHVlXG4gICAgICAgIG5ld1N0YXRlLnRvZ2dsZWQgPSBuZXdUb2dnbGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChtdWx0aXBsZSB8fCB0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIGFjdGlvbiA9IFwiYWRkLW9wdGlvblwiXG4gICAgICAgIG5ld0N1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnMuY29uY2F0KFtsb2FkZWRPcHRpb25dKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uID0gXCJyZXBsYWNlLXNpbmdsZS1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IFtsb2FkZWRPcHRpb25dXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLnZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBjdXJyZW50T3B0aW9ucyBhcmUgY29udHJvbGxlZCBhbmQgYSB1c2VNZW1vIGNhbGxiYWNrIGlzIGhhbmRlbGluZyBzZXR0aW5nIGN1cnJlbnQgb3B0aW9ucy5cbiAgICB9IGVsc2UgaWYgKG5ld0N1cnJlbnRPcHRpb25zKSB7XG4gICAgICBuZXdTdGF0ZS5jdXJyZW50T3B0aW9ucyA9IG5ld0N1cnJlbnRPcHRpb25zXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IG5ld0N1cnJlbnRPcHRpb25zIHx8IGN1cnJlbnRPcHRpb25zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uT3B0aW9uQ2xpY2tlZFwiLCB7XG4gICAgICBhY3Rpb246IGFjdGlvbiB8fCBcInRvZ2dsZS1vbmx5XCIsXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIG9wdGlvblZhbHVlOiBsb2FkZWRPcHRpb24udmFsdWUsXG4gICAgICBvcHRpb25zQ291bnRCZWZvcmU6IGN1cnJlbnRPcHRpb25zLmxlbmd0aCxcbiAgICAgIG9wdGlvbnNDb3VudEFmdGVyOiBvcHRpb25zLmxlbmd0aFxuICAgIH0pXG5cbiAgICBpZiAoIW11bHRpcGxlKSB0aGlzLmNsb3NlT3B0aW9ucyh7b3B0aW9uc30pXG5cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGF5YVNlbGVjdE9uQ2hhbmdlUGF5bG9hZH0gKi9cbiAgICAgIG9uQ2hhbmdlKHtcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHRvZ2dsZXM6IG5ld1RvZ2dsZWRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2VWYWx1ZSkge1xuICAgICAgbGV0IG9wdGlvblZhbHVlXG5cbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICBvcHRpb25WYWx1ZSA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvblZhbHVlID0gZGlnKG9wdGlvbnMsIDAsIFwidmFsdWVcIilcbiAgICAgIH1cblxuICAgICAgdGhpcy5wLm9uQ2hhbmdlVmFsdWUob3B0aW9uVmFsdWUpXG4gICAgfVxuXG4gICAgaWYgKFwidG9nZ2xlZFwiIGluIG5ld1N0YXRlKSB7XG4gICAgICB0aGlzLnMudG9nZ2xlZCA9IG5ld1N0YXRlLnRvZ2dsZWRcbiAgICB9XG5cbiAgICBpZiAoXCJjdXJyZW50T3B0aW9uc1wiIGluIG5ld1N0YXRlKSB7XG4gICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSBuZXdTdGF0ZS5jdXJyZW50T3B0aW9uc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3R5bGluZ05hbWVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbc3R5bGVdXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gW2NhY2hlc11cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59XG4gICAqL1xuICBzdHlsaW5nRm9yKHN0eWxpbmdOYW1lLCBzdHlsZSA9IHt9LCBjYWNoZXMgPSBbXSkge1xuICAgIGxldCBjdXN0b21TdHlsaW5nID0gZGlnKHRoaXMsIFwicHJvcHNcIiwgXCJzdHlsZXNcIiwgc3R5bGluZ05hbWUpXG4gICAgY29uc3QgYmFzZVN0eWxlID0gey4uLnN0eWxlfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21TdHlsaW5nID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLyoqIEB0eXBlIHtIYXlhU2VsZWN0U3R5bGluZ0NvbnRleHR9ICovXG4gICAgICBjdXN0b21TdHlsaW5nID0gY3VzdG9tU3R5bGluZyh7XG4gICAgICAgIG9wZW5lZDogdGhpcy5zLm9wZW5lZCxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogdGhpcy5zLm9wdGlvbnNQbGFjZW1lbnQsXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBzdHlsZTogYmFzZVN0eWxlXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChjdXN0b21TdHlsaW5nKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVN0eWxlLCBjdXN0b21TdHlsaW5nKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlKGBzdHlsaW5nRm9yLSR7c3R5bGluZ05hbWV9YCwgc3R5bGUsIGNhY2hlcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hheWFTZWxlY3RPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH1cbiAgICovXG4gIGljb25Gb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3Qge3RvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wcyB8fCB7fVxuICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLmdldFRvZ2dsZWQoKVxuXG4gICAgaWYgKHRvZ2dsZU9wdGlvbnMgJiYgKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSkge1xuICAgICAgY29uc3QgdG9nZ2xlZFZhbHVlID0gdG9nZ2xlZFtvcHRpb24udmFsdWVdXG4gICAgICBjb25zdCB0b2dnbGVkT3B0aW9uID0gdG9nZ2xlT3B0aW9ucy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LnZhbHVlID09IHRvZ2dsZWRWYWx1ZSlcblxuICAgICAgaWYgKCF0b2dnbGVkT3B0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBhIHRvZ2dsZSBvcHRpb24gZm9yIHZhbHVlOiAke3RvZ2dsZWRWYWx1ZX1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9nZ2xlZE9wdGlvbi5pY29uXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SGF5YVNlbGVjdE9wdGlvbn0gb3B0aW9uXG4gICAqIEBwYXJhbSB7XCJjdXJyZW50XCJ8XCJvcHRpb25cIn0gbW9kZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgcHJlc2VudE9wdGlvbiA9IChvcHRpb24sIG1vZGUpID0+IHtcbiAgICBjb25zdCB7b3B0aW9uQ29udGVudCwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzIHx8IHt9XG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG4gICAgY29uc3QgaWNvbiA9IHRoaXMuaWNvbkZvck9wdGlvbihvcHRpb24pXG4gICAgY29uc3QgdG9nZ2xlVmFsdWUgPSB0b2dnbGVkW29wdGlvbi52YWx1ZV1cbiAgICBjb25zdCB0b2dnbGVPcHRpb24gPSB0b2dnbGVPcHRpb25zPy5maW5kKCh0b2dnbGVPcHRpb25JKSA9PiB0b2dnbGVPcHRpb25JLnZhbHVlID09IHRvZ2dsZVZhbHVlKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRDdXJyZW50T3B0aW9uVmFsdWVzKCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IG9wdGlvbi52YWx1ZSlcbiAgICBsZXQgc3R5bGVcbiAgICBsZXQgY29udGVudE5vZGVcblxuICAgIGlmIChtb2RlID09IFwiY3VycmVudFwiKSB7XG4gICAgICBzdHlsZSA9IHRoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25QcmVzZW50YXRpb25UZXh0XCIsIHtmbGV4OiAxLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwifSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25QcmVzZW50YXRpb25UZXh0XCIsIHtmbGV4OiAxLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwifSlcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInByZXNlbnRPcHRpb25WaWV3RGF0YVNldFwiLCB7XG4gICAgICAgICAgdGV4dDogb3B0aW9uLnRleHQsXG4gICAgICAgICAgdG9nZ2xlSWNvbjogdG9nZ2xlT3B0aW9uPy5pY29uLFxuICAgICAgICAgIHRvZ2dsZVZhbHVlOiB0b2dnbGVPcHRpb24/LnZhbHVlLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWVcbiAgICAgICAgfSwgW29wdGlvbi50ZXh0LCBvcHRpb24udmFsdWUsIHRvZ2dsZU9wdGlvbj8uaWNvbiwgdG9nZ2xlT3B0aW9uPy52YWx1ZV0pfVxuICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvblN0eWxlXCIsIHtmbGV4RGlyZWN0aW9uOiBcInJvd1wiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwifSl9XG4gICAgICAgIHRlc3RJRD1cIm9wdGlvbi1wcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICB7dG9nZ2xlT3B0aW9ucyAmJiAhKG9wdGlvbi52YWx1ZSBpbiB0b2dnbGVkKSAmJlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5jYWNoZShcInRvZ2dsZUljb25QbGFjZWhvbGRlclN0eWxlXCIsIHt3aWR0aDogMjB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cInRvZ2dsZS1pY29uLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIHt0b2dnbGVPcHRpb25zICYmIChvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkgJiZcbiAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcInRvZ2dsZUljb25Db250YWluZXJTdHlsZVwiLCB7YWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIHdpZHRoOiAyMH0pfT5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb25cbiAgICAgICAgICAgICAgbmFtZT17aWNvbn1cbiAgICAgICAgICAgICAgdGVzdElEPVwidG9nZ2xlLWljb25cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIH1cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbkNvbnRlbnQpIHtcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7SGF5YVNlbGVjdE9wdGlvblJlbmRlckNvbnRleHR9ICovXG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbkNvbnRlbnQoe2ljb24sIG1vZGUsIG9wdGlvbiwgc2VsZWN0ZWQsIHRvZ2dsZU9wdGlvbiwgdG9nZ2xlVmFsdWUsIHRvZ2dsZWR9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcImN1cnJlbnRcIiAmJiBvcHRpb24uY3VycmVudENvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gb3B0aW9uLmN1cnJlbnRDb250ZW50KClcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5jb250ZW50KSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbi5jb250ZW50KClcbiAgICAgICAgICB9IGVsc2UgaWYgKFwiaHRtbFwiIGluIG9wdGlvbiAmJiBQbGF0Zm9ybS5PUyAhPSBcIndlYlwiKSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IDxSZW5kZXJIdG1sIHNvdXJjZT17e2h0bWw6IGRpZ2cob3B0aW9uLCBcImh0bWxcIil9fSAvPlxuICAgICAgICAgIH0gZWxzZSBpZiAoXCJodG1sXCIgaW4gb3B0aW9uICYmIFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogZGlnZyhvcHRpb24sIFwiaHRtbFwiKX19IC8+XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnROb2RlID0gKFxuICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICAgICAgICB0ZXN0SUQ9XCJvcHRpb24tcHJlc2VudGF0aW9uLXRleHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge29wdGlvbi50ZXh0fVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uQ29udGVudFN0eWxlXCIsIHtmbGV4OiAxfSl9PlxuICAgICAgICAgICAgICAgIHtjb250ZW50Tm9kZX1cbiAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICB7b3B0aW9uLnJpZ2h0ICYmXG4gICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuY2FjaGUoXCJvcHRpb25QcmVzZW50YXRpb25SaWdodFN0eWxlXCIsIHthbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiwgbWFyZ2luTGVmdDogOH0pfT5cbiAgICAgICAgICAgICAgICAgIHtvcHRpb24ucmlnaHR9XG4gICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApXG4gICAgICAgIH0pKCl9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBzZXRDdXJyZW50RnJvbUdpdmVuVmFsdWVzKCkge1xuICAgIGNvbnN0IHtvcHRpb25zLCB2YWx1ZXN9ID0gdGhpcy5wXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpICYmIHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnMuY3VycmVudE9wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSBbXVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcHRpb25zKHtwYWdlOiB0aGlzLmdldEFjdGl2ZVBhZ2UoKSwgdmFsdWVzfSlcbiAgICBjb25zdCB7b3B0aW9uczogY3VycmVudE9wdGlvbnN9ID0gdGhpcy5wYXJzZU9wdGlvbnNSZXN1bHQocmVzdWx0KVxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSBjdXJyZW50T3B0aW9ucz8ubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuICAgIGNvbnN0IHN0YXRlVmFsdWVzID0gdGhpcy5zLmN1cnJlbnRPcHRpb25zPy5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgICBpZiAoYW55dGhpbmdEaWZmZXJlbnQoY3VycmVudFZhbHVlcywgc3RhdGVWYWx1ZXMpKSB7XG4gICAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSBjdXJyZW50T3B0aW9uc1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBIYXlhU2VsZWN0U2hhcGVDb21wb25lbnQgPSBzaGFwZUNvbXBvbmVudChIYXlhU2VsZWN0KVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKEhheWFTZWxlY3RTaGFwZUNvbXBvbmVudClcbiJdfQ==
1712
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VsZWN0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3pGLE9BQU8sS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDdkQsT0FBTyxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN6RixPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxlQUFlLE1BQU0sdUNBQXVDLENBQUE7QUFDbkUsT0FBTyxjQUFjLE1BQU0sbURBQW1ELENBQUE7QUFDOUUsT0FBTyxnQkFBZ0IsTUFBTSxxREFBcUQsQ0FBQTtBQUNsRixPQUFPLElBQUksTUFBTSxzQ0FBc0MsQ0FBQTtBQUN2RCxPQUFPLE1BQU0sTUFBTSxVQUFVLENBQUE7QUFDN0IsT0FBTyxXQUFXLE1BQU0sZ0JBQWdCLENBQUE7QUFDeEMsT0FBTyxvQkFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUMzRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUE7QUFDakQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNuQyxPQUFPLGdCQUFnQixNQUFNLHVCQUF1QixDQUFBO0FBQ3BELE9BQU8s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UUFDbEUsTUFBTSxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDakUsTUFBTSxhQUFhLEdBQUcsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRXRGLElBQUksaUJBQWlCLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO1FBQ3hDLENBQUM7SUFDSCxDQUFDOztBQUdILE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBRTNELGVBQWUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FueXRoaW5nRGlmZmVyZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvZGlmZi11dGlsc1wiXG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuLi9jb25maWcuanNcIlxuaW1wb3J0IHtkaWcsIGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IHtEaW1lbnNpb25zLCBQbGF0Zm9ybSwgUHJlc3NhYmxlLCBTY3JvbGxWaWV3LCBUZXh0SW5wdXQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IFJlYWN0LCB7Y3JlYXRlUmVmLCBtZW1vLCB1c2VFZmZlY3R9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50LCBTaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcImRlYm91bmNlXCJcbmltcG9ydCBGb250QXdlc29tZUljb24gZnJvbSBcInJlYWN0LW5hdGl2ZS12ZWN0b3ItaWNvbnMvRm9udEF3ZXNvbWVcIlxuaW1wb3J0IGlkRm9yQ29tcG9uZW50IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL2lucHV0cy9pZC1mb3ItY29tcG9uZW50XCJcbmltcG9ydCBuYW1lRm9yQ29tcG9uZW50IGZyb20gXCJAa2FzcGVybmovYXBpLW1ha2VyL2J1aWxkL2lucHV0cy9uYW1lLWZvci1jb21wb25lbnRcIlxuaW1wb3J0IFRleHQgZnJvbSBcIkBrYXNwZXJuai9hcGktbWFrZXIvYnVpbGQvdXRpbHMvdGV4dFwiXG5pbXBvcnQgT3B0aW9uIGZyb20gXCIuL29wdGlvblwiXG5pbXBvcnQgT3B0aW9uR3JvdXAgZnJvbSBcIi4vb3B0aW9uLWdyb3VwXCJcbmltcG9ydCBQYWdpbmF0aW9uUGFnZUJ1dHRvbiBmcm9tIFwiLi9wYWdpbmF0aW9uLXBhZ2UtYnV0dG9uXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCBSZW5kZXJIdG1sIGZyb20gXCJyZWFjdC1uYXRpdmUtcmVuZGVyLWh0bWxcIlxuaW1wb3J0IHtQb3J0YWx9IGZyb20gXCJjb25qb2ludG1lbnRcIlxuaW1wb3J0IHVzZUV2ZW50TGlzdGVuZXIgZnJvbSBcInlhLXVzZS1ldmVudC1saXN0ZW5lclwiXG5pbXBvcnQgdXNlUHJlc3NPdXRzaWRlIGZyb20gXCJvdXRzaWRlLWV5ZS9idWlsZC91c2UtcHJlc3Mtb3V0c2lkZVwiXG5cbmNvbnN0IHN0eWxlcyA9IHt9XG5jb25zdCBkYXRhU2V0cyA9IHt9XG5jb25zdCBNT0JJTEVfT1BUSU9OU19NQVhfV0lEVEggPSA3NjhcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0VG9nZ2xlT3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWNvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVsXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEhheWFTZWxlY3RPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gdmFsdWVcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbdGV4dF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbY29udGVudF1cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbY3VycmVudENvbnRlbnRdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkaXNhYmxlZF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaHRtbF1cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBbcmlnaHRdXG4gKlxuICogQWRkaXRpb25hbCBvcHRpb24gcHJvcHMgYXJlIGFsbG93ZWQ7IEhheWFTZWxlY3Qgb25seSB1c2VzIHRoZSBrZXlzIGFib3ZlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdE9wdGlvbnNSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdG90YWxDb3VudF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGFnZV1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGFnZVNpemVdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0UHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYXR0cmlidXRlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjbGFzc05hbWVdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW2RlZmF1bHRUb2dnbGVkXVxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSBbZGVmYXVsdFZhbHVlXVxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gW2RlZmF1bHRWYWx1ZXNdXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBbZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGVidWddXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW2lkXVxuICogQHByb3BlcnR5IHtvYmplY3R9IFttb2RlbF1cbiAqIEBwcm9wZXJ0eSB7XCJhdXRvXCJ8XCJhbHdheXNcInxcIm5ldmVyXCJ9IFttb2JpbGVPcHRpb25zTW9kZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW211bHRpcGxlXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtub09wdGlvbnNUZXh0XVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudD0pOiB2b2lkfSBbb25CbHVyXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudD0pOiB2b2lkfSBbb25DaGFuZ2VdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKEFycmF5PHN0cmluZ3xudW1iZXI+PSk6IHZvaWR9IFtvbkNoYW5nZVZhbHVlXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudD0pOiB2b2lkfSBbb25Gb2N1c11cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oe29wdGlvbnM6IEFycmF5fSk6IHZvaWR9IFtvbk9wdGlvbnNDbG9zZWRdXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHtvcHRpb25zOiBBcnJheX0pOiB2b2lkfSBbb25PcHRpb25zTG9hZGVkXVxuICogQHByb3BlcnR5IHtmdW5jdGlvbihvYmplY3QpOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IFtvcHRpb25Db250ZW50XVxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPnxmdW5jdGlvbigpOiAoQXJyYXk8SGF5YVNlbGVjdE9wdGlvbj58SGF5YVNlbGVjdE9wdGlvbnNSZXN1bHQpfSBvcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtvcHRpb25zQWJzb2x1dGVdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtvcHRpb25zUG9ydGFsXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtvcHRpb25zV2lkdGhdXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW3BsYWNlaG9sZGVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RlZEJhY2tncm91bmRDb2xvcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcl1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NlYXJjaF1cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlRleHRJbnB1dFByb3BzfSBbc2VhcmNoVGV4dElucHV0UHJvcHNdXG4gKiBAcHJvcGVydHkge29iamVjdH0gW3N0eWxlc11cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbdG9nZ2xlZF1cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdFRvZ2dsZU9wdGlvbj59IFt0b2dnbGVPcHRpb25zXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbdHJhbnNwYXJlbnRdXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZ3xudW1iZXI+fSBbdmFsdWVzXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFN0YXRlXG4gKiBAcHJvcGVydHkge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBjdXJyZW50T3B0aW9uc1xuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0TGF5b3V0fG51bGx9IHNlbGVjdENvbnRhaW5lckxheW91dFxuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0TGF5b3V0fG51bGx9IGVuZE9mU2VsZWN0TGF5b3V0XG4gKiBAcHJvcGVydHkge251bWJlcnxudWxsfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj58dW5kZWZpbmVkfSBsb2FkZWRPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9hZE9wdGlvbnNSZXF1ZXN0SWRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwYWdlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhZ2VJbnB1dEZvY3VzZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYWdlSW5wdXRWYWx1ZVxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gcGFnZVNpemVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gb3BlbmVkXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RMYXlvdXR8bnVsbH0gb3B0aW9uc0NvbnRhaW5lckxheW91dFxuICogQHByb3BlcnR5IHtcImFib3ZlXCJ8XCJiZWxvd1wifFwic2hlZXRcInx1bmRlZmluZWR9IG9wdGlvbnNQbGFjZW1lbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gb3B0aW9uc1RvcFxuICogQHByb3BlcnR5IHtcImhpZGRlblwifFwidmlzaWJsZVwifHVuZGVmaW5lZH0gb3B0aW9uc1Zpc2liaWxpdHlcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZHxudWxsfSBvcHRpb25zV2lkdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IHNjcm9sbExlZnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfG51bGx9IHNjcm9sbFRvcFxuICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gdG90YWxDb3VudFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nfG51bWJlciwgc3RyaW5nPn0gdG9nZ2xlZFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdExheW91dFxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0b3BdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xlZnRdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3hdXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3ldXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3dpZHRoXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtoZWlnaHRdXG4gKi9cblxuLyoqXG4gKiBOb3JtYWxpemVzIFJlYWN0IE5hdGl2ZSBhbmQgUmVhY3QgTmF0aXZlIFdlYiBsYXlvdXQga2V5cy5cbiAqIEBwYXJhbSB7SGF5YVNlbGVjdExheW91dHxudWxsfHVuZGVmaW5lZH0gbGF5b3V0IE5hdGl2ZSBsYXlvdXQuXG4gKiBAcmV0dXJucyB7SGF5YVNlbGVjdExheW91dH0gTm9ybWFsaXplZCBsYXlvdXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUxheW91dChsYXlvdXQpIHtcbiAgY29uc3Qgbm9ybWFsaXplZExheW91dCA9IE9iamVjdC5hc3NpZ24oe30sIGxheW91dClcblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRMYXlvdXQubGVmdCAhPSBcIm51bWJlclwiICYmIHR5cGVvZiBub3JtYWxpemVkTGF5b3V0LnggPT0gXCJudW1iZXJcIikge1xuICAgIG5vcm1hbGl6ZWRMYXlvdXQubGVmdCA9IG5vcm1hbGl6ZWRMYXlvdXQueFxuICB9XG5cbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkTGF5b3V0LnRvcCAhPSBcIm51bWJlclwiICYmIHR5cGVvZiBub3JtYWxpemVkTGF5b3V0LnkgPT0gXCJudW1iZXJcIikge1xuICAgIG5vcm1hbGl6ZWRMYXlvdXQudG9wID0gbm9ybWFsaXplZExheW91dC55XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZExheW91dFxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbGF5b3V0IGhhcyB1c2FibGUgYWJzb2x1dGUtaXNoIHBvc2l0aW9uLlxuICogQHBhcmFtIHtIYXlhU2VsZWN0TGF5b3V0fG51bGx8dW5kZWZpbmVkfSBsYXlvdXQgTGF5b3V0IHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSB3aGVuIHRvcCBhbmQgbGVmdCBjYW4gYmUgdXNlZC5cbiAqL1xuZnVuY3Rpb24gbGF5b3V0SGFzUG9zaXRpb24obGF5b3V0KSB7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobGF5b3V0Py5sZWZ0KSAmJiBOdW1iZXIuaXNGaW5pdGUobGF5b3V0Py50b3ApXG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdE9wdGlvblJlbmRlckNvbnRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gaWNvblxuICogQHByb3BlcnR5IHtcImN1cnJlbnRcInxcIm9wdGlvblwifSBtb2RlXG4gKiBAcHJvcGVydHkge0hheWFTZWxlY3RPcHRpb259IG9wdGlvblxuICogQHByb3BlcnR5IHtib29sZWFufSBzZWxlY3RlZFxuICogQHByb3BlcnR5IHtIYXlhU2VsZWN0VG9nZ2xlT3B0aW9ufHVuZGVmaW5lZH0gdG9nZ2xlT3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IHRvZ2dsZVZhbHVlXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSB0b2dnbGVkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBIYXlhU2VsZWN0T25DaGFuZ2VQYXlsb2FkXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudFxuICogQHByb3BlcnR5IHtBcnJheTxIYXlhU2VsZWN0T3B0aW9uPn0gb3B0aW9uc1xuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nfG51bWJlciwgc3RyaW5nPn0gdG9nZ2xlc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSGF5YVNlbGVjdFN0eWxpbmdDb250ZXh0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wZW5lZFxuICogQHByb3BlcnR5IHtcImFib3ZlXCJ8XCJiZWxvd1wifFwic2hlZXRcInx1bmRlZmluZWR9IG9wdGlvbnNQbGFjZW1lbnRcbiAqIEBwcm9wZXJ0eSB7SGF5YVNlbGVjdFN0YXRlfSBzdGF0ZVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBzdHlsZVxuICovXG5cbi8qKlxuICogQHBhcmFtIHtTaGFwZUNvbXBvbmVudDxIYXlhU2VsZWN0UHJvcHMsIEhheWFTZWxlY3RTdGF0ZT59IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgbmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSA9IChjb21wb25lbnQpID0+IHtcbiAgbGV0IG5hbWUgPSBuYW1lRm9yQ29tcG9uZW50KGNvbXBvbmVudClcblxuICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IGNvbXBvbmVudC5nZXRDdXJyZW50T3B0aW9ucygpXG4gIGNvbnN0IHZhbHVlcyA9IGNvbXBvbmVudC5nZXRWYWx1ZXMoKVxuXG4gIGNvbnN0IGhhc011bHRpcGxlVmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpICYmIHZhbHVlcy5sZW5ndGggPiAwXG5cbiAgaWYgKGNvbXBvbmVudC5wcm9wcy5tdWx0aXBsZSAmJiBuYW1lICYmIChjdXJyZW50T3B0aW9ucy5sZW5ndGggPiAwIHx8IGhhc011bHRpcGxlVmFsdWVzKSkge1xuICAgIG5hbWUgKz0gXCJbXVwiXG4gIH1cblxuICByZXR1cm4gbmFtZVxufVxuXG4vKiogQGF1Z21lbnRzIHtTaGFwZUNvbXBvbmVudDxIYXlhU2VsZWN0UHJvcHMsIEhheWFTZWxlY3RTdGF0ZT59ICovXG5jbGFzcyBIYXlhU2VsZWN0IGV4dGVuZHMgU2hhcGVDb21wb25lbnQge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBtb2JpbGVPcHRpb25zTW9kZTogXCJhdXRvXCIsXG4gICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgIG5vT3B0aW9uc1RleHQ6IG51bGwsXG4gICAgb25CbHVyOiBudWxsLFxuICAgIG9uRm9jdXM6IG51bGwsXG4gICAgb3B0aW9uc0Fic29sdXRlOiB0cnVlLFxuICAgIG9wdGlvbnNQb3J0YWw6IHRydWUsXG4gICAgb3B0aW9uc1dpZHRoOiBudWxsLFxuICAgIHNlYXJjaDogZmFsc2UsXG4gICAgc2VhcmNoVGV4dElucHV0UHJvcHM6IHVuZGVmaW5lZCxcbiAgICB0cmFuc3BhcmVudDogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgYXR0cmlidXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0VG9nZ2xlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBkZWZhdWx0VmFsdWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgZGVidWc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgaWQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG1vYmlsZU9wdGlvbnNNb2RlOiBQcm9wVHlwZXMub25lT2YoW1wiYXV0b1wiLCBcImFsd2F5c1wiLCBcIm5ldmVyXCJdKSxcbiAgICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG5vT3B0aW9uc1RleHQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uT3B0aW9uc0Nsb3NlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25PcHRpb25zTG9hZGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvcHRpb25Db250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBjdXJyZW50Q29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgICAgaHRtbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgcmlnaHQ6IFByb3BUeXBlcy5ub2RlLFxuICAgICAgICB0ZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgICAgICAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkXG4gICAgICB9KSksXG4gICAgICBQcm9wVHlwZXMuZnVuY1xuICAgIF0pLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc0Fic29sdXRlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnNQb3J0YWw6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uc1dpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgICBzZWxlY3RlZEJhY2tncm91bmRDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZEhvdmVyQmFja2dyb3VuZENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBzZWFyY2hUZXh0SW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzdHlsZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdG9nZ2xlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB0b2dnbGVPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgICB9KSksXG4gICAgdHJhbnNwYXJlbnQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdmFsdWVzOiBQcm9wVHlwZXMuYXJyYXlcbiAgfSlcblxuICBjYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSBmYWxzZVxuICBib2R5U2Nyb2xsTG9ja2VkID0gZmFsc2VcbiAgZW5kT2ZTZWxlY3RSZWYgPSBjcmVhdGVSZWYoKVxuICBsYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZCA9IDBcbiAgb3B0aW9uc0NvbnRhaW5lclJlZiA9IGNyZWF0ZVJlZigpXG4gIHBhZ2VJbnB1dFJlZiA9IGNyZWF0ZVJlZigpXG4gIHByZXZpb3VzQm9keU92ZXJmbG93ID0gdW5kZWZpbmVkXG4gIHByZXZpb3VzRG9jdW1lbnRPdmVyZmxvdyA9IHVuZGVmaW5lZFxuICBzZWFyY2hUZXh0VmFsdWUgPSBcIlwiXG4gIHNlYXJjaFRleHRJbnB1dFJlZiA9IGNyZWF0ZVJlZigpXG4gIHNlbGVjdENvbnRhaW5lclJlZiA9IGNyZWF0ZVJlZigpXG4gIHQgPSBDb25maWcuY3VycmVudCgpLmdldFVzZVRyYW5zbGF0ZSgpKCkudFxuICB3aW5kb3dXaWR0aCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLndpZHRoXG4gIHdpbmRvd0hlaWdodCA9IERpbWVuc2lvbnMuZ2V0KFwid2luZG93XCIpLmhlaWdodFxuICAvKiogQHR5cGUge0hheWFTZWxlY3RTdGF0ZX0gKi9cbiAgc3RhdGUgPSB7XG4gICAgY3VycmVudE9wdGlvbnM6IHRoaXMuZGVmYXVsdEN1cnJlbnRPcHRpb25zKCksXG4gICAgc2VsZWN0Q29udGFpbmVyTGF5b3V0OiBudWxsLFxuICAgIGVuZE9mU2VsZWN0TGF5b3V0OiBudWxsLFxuICAgIGhlaWdodDogbnVsbCxcbiAgICBsb2FkZWRPcHRpb25zOiB0aGlzLmRlZmF1bHRMb2FkZWRPcHRpb25zKCksXG4gICAgbG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkOiAwLFxuICAgIGxvYWRPcHRpb25zUmVxdWVzdElkOiAwLFxuICAgIHBhZ2U6IDEsXG4gICAgcGFnZUlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgcGFnZUlucHV0VmFsdWU6IFwiMVwiLFxuICAgIHBhZ2VTaXplOiBudWxsLFxuICAgIG9wZW5lZDogZmFsc2UsXG4gICAgb3B0aW9uc0NvbnRhaW5lckxheW91dDogbnVsbCxcbiAgICBvcHRpb25zUGxhY2VtZW50OiB1bmRlZmluZWQsXG4gICAgb3B0aW9uc1RvcDogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNWaXNpYmlsaXR5OiB1bmRlZmluZWQsXG4gICAgb3B0aW9uc1dpZHRoOiB1bmRlZmluZWQsXG4gICAgc2Nyb2xsTGVmdDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogbnVsbCxcbiAgICBzY3JvbGxUb3A6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogbnVsbCxcbiAgICB0b3RhbENvdW50OiBudWxsLFxuICAgIHRvZ2dsZWQ6IHRoaXMuZGVmYXVsdFRvZ2dsZWQoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc0RlYnVnRW5hYmxlZCA9ICgpID0+IEJvb2xlYW4odGhpcy5wLmRlYnVnKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW2RldGFpbHNdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZGVidWdMb2cgPSAoZnVuY3Rpb25OYW1lLCBkZXRhaWxzID0gdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzRGVidWdFbmFibGVkKCkpIHJldHVyblxuXG4gICAgY29uc3QgYmFzZURldGFpbHMgPSB7XG4gICAgICBpZDogdGhpcy5wLmlkLFxuICAgICAgbmFtZTogdGhpcy5wLm5hbWVcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZWREZXRhaWxzID0gZGV0YWlscyA/IE9iamVjdC5hc3NpZ24oe30sIGJhc2VEZXRhaWxzLCBkZXRhaWxzKSA6IGJhc2VEZXRhaWxzXG5cbiAgICBpZiAobWVyZ2VkRGV0YWlscyAmJiBPYmplY3Qua2V5cyhtZXJnZWREZXRhaWxzKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0hheWFTZWxlY3RdICR7ZnVuY3Rpb25OYW1lfWAsIG1lcmdlZERldGFpbHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbSGF5YVNlbGVjdF0gJHtmdW5jdGlvbk5hbWV9YClcbiAgICB9XG4gIH1cblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSBDb25maWcuY3VycmVudCgpLmdldFVzZVRyYW5zbGF0ZSgpKClcblxuICAgIHRoaXMudCA9IHRcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMudmFsdWVzKSkge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnByb3BzLnZhbHVlcykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIYXlhU2VsZWN0OiBVbmRlZmluZWQgZ2l2ZW4gYXMgdmFsdWVcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdpbmRvd1RhcmdldCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgJiYgdHlwZW9mIHdpbmRvdyAhPSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogbnVsbFxuXG4gICAgdXNlRXZlbnRMaXN0ZW5lcihEaW1lbnNpb25zLCBcImNoYW5nZVwiLCB0aGlzLnR0Lm9uRGltZW5zaW9uc0NoYW5nZSlcbiAgICB1c2VQcmVzc091dHNpZGUodGhpcy50dC5vcHRpb25zQ29udGFpbmVyUmVmLCB0aGlzLnR0Lm9uUHJlc3NPdXRzaWRlT3B0aW9ucylcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvd1RhcmdldCwgXCJyZXNpemVcIiwgdGhpcy50dC5vbkFueXRoaW5nUmVzaXplZERlYm91bmNlZClcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvd1RhcmdldCwgXCJzY3JvbGxcIiwgdGhpcy50dC5vbkFueXRoaW5nU2Nyb2xsZWREZWJvdW5jZWQpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0dXBcIiwge1xuICAgICAgaGFzQ29udHJvbGxlZFZhbHVlczogXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzLFxuICAgICAgaGFzQ29udHJvbGxlZFRvZ2dsZWQ6IFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMsXG4gICAgICBtdWx0aXBsZTogdGhpcy5wLm11bHRpcGxlLFxuICAgICAgb3B0aW9uc1R5cGU6IEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy5vcHRpb25zKSA/IFwiYXJyYXlcIiA6IHR5cGVvZiB0aGlzLnByb3BzLm9wdGlvbnNcbiAgICB9KVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiAmJiB0aGlzLnMub3B0aW9uc0NvbnRhaW5lckxheW91dCkge1xuICAgICAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4oKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnR0LmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiwgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXRdKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25JZHMgPSB0aGlzLnMuY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpICYmIGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRPcHRpb25JZHMsIHRoaXMucHJvcHMudmFsdWVzKSAmJiB0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRGcm9tR2l2ZW5WYWx1ZXMoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnByb3BzLnZhbHVlc10pXG4gIH1cblxuICB0cmFuc2xhdGUobXNnSUQsIG9wdGlvbnMpIHtcbiAgICBpZiAobXNnSUQuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgIHJldHVybiB0aGlzLnQoYGhheWFfc2VsZWN0JHttc2dJRH1gLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50KG1zZ0lELCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59ICovXG4gIGRlZmF1bHRDdXJyZW50T3B0aW9ucygpIHtcbiAgICBjb25zdCB7ZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCB2YWx1ZXN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpKSByZXR1cm4gW11cbiAgICBjb25zdCBjb250cm9sbGVkVmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gdmFsdWVzIDogW11cblxuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigoe3ZhbHVlfSkgPT5cbiAgICAgIChkZWZhdWx0VmFsdWUgJiYgdmFsdWUgPT0gZGVmYXVsdFZhbHVlKSB8fFxuICAgICAgICAoZGVmYXVsdFZhbHVlcyAmJiBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKHZhbHVlKSkgfHxcbiAgICAgICAgY29udHJvbGxlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICApXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fHVuZGVmaW5lZH0gKi9cbiAgZGVmYXVsdExvYWRlZE9wdGlvbnMoKSB7XG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIG9wdGlvbnM6ICR7dHlwZW9mIG9wdGlvbnN9YClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfSAqL1xuICBnZXRBY3RpdmVQYWdlID0gKCkgPT4gdGhpcy5zLnBhZ2UgfHwgMVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgaXNNb2JpbGVPcHRpb25zU2hlZXQoKSB7XG4gICAgaWYgKHRoaXMucC5tb2JpbGVPcHRpb25zTW9kZSA9PSBcImFsd2F5c1wiKSByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzLnAubW9iaWxlT3B0aW9uc01vZGUgPT0gXCJuZXZlclwiKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiBEaW1lbnNpb25zLmdldChcIndpbmRvd1wiKS53aWR0aCA8PSBNT0JJTEVfT1BUSU9OU19NQVhfV0lEVEhcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fEhheWFTZWxlY3RPcHRpb25zUmVzdWx0fSByZXN1bHRcbiAgICogQHJldHVybnMge0hheWFTZWxlY3RPcHRpb25zUmVzdWx0fVxuICAgKi9cbiAgcGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiB7b3B0aW9uczogcmVzdWx0fVxuXG4gICAgaWYgKHJlc3VsdCAmJiBBcnJheS5pc0FycmF5KHJlc3VsdC5vcHRpb25zKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW9uczogcmVzdWx0Lm9wdGlvbnMsXG4gICAgICAgIHRvdGFsQ291bnQ6IHJlc3VsdC50b3RhbENvdW50LFxuICAgICAgICBwYWdlOiByZXN1bHQucGFnZSxcbiAgICAgICAgcGFnZVNpemU6IHJlc3VsdC5wYWdlU2l6ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcHRpb25zIHJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmFtc1xuICAgKiBAcGFyYW0ge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSBwYXJhbXMub3B0aW9uc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5wYWdlXVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3BhcmFtcy5wYWdlU2l6ZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwYXJhbXMudG90YWxDb3VudF1cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfVxuICAgKi9cbiAgcmVzb2x2ZVBhZ2VTaXplKHtvcHRpb25zLCBwYWdlLCBwYWdlU2l6ZSwgdG90YWxDb3VudH0pIHtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHBhZ2VTaXplKSAmJiBwYWdlU2l6ZSA+IDApIHJldHVybiBwYWdlU2l6ZVxuXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0aGlzLnMucGFnZVNpemUpICYmIHRoaXMucy5wYWdlU2l6ZSA+IDAgJiYgcGFnZSAhPSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5zLnBhZ2VTaXplXG4gICAgfVxuXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubGVuZ3RoXG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0aGlzLnMucGFnZVNpemUpICYmIHRoaXMucy5wYWdlU2l6ZSA+IDAgPyB0aGlzLnMucGFnZVNpemUgOiBudWxsXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmd8bnVtYmVyLCBzdHJpbmc+fSAqL1xuICBkZWZhdWx0VG9nZ2xlZCgpIHtcbiAgICByZXR1cm4gKFwidG9nZ2xlZFwiIGluIHRoaXMucHJvcHMpID8gdGhpcy5wLnRvZ2dsZWQgOiB0aGlzLnByb3BzLmRlZmF1bHRUb2dnbGVkIHx8IHt9XG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgcG9ydGFsTmFtZSgpIHtcbiAgICByZXR1cm4gbmFtZUZvckNvbXBvbmVudFdpdGhNdWx0aXBsZSh0aGlzKSB8fCBgaGF5YS1zZWxlY3QtJHtTdHJpbmcoaWRGb3JDb21wb25lbnQodGhpcykpfWBcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZ3xudW1iZXIsIHN0cmluZz59ICovXG4gIGdldFRvZ2dsZWQgPSAoKSA9PiAoXCJ0b2dnbGVkXCIgaW4gdGhpcy5wcm9wcykgPyB0aGlzLnAudG9nZ2xlZCA6IHRoaXMucy50b2dnbGVkXG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gKi9cbiAgZ2V0VmFsdWVzID0gKCkgPT4gKFwidmFsdWVzXCIgaW4gdGhpcy5wcm9wcylcbiAgICA/IChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpID8gdGhpcy5wLnZhbHVlcyA6IFtdKVxuICAgIDogKEFycmF5LmlzQXJyYXkodGhpcy5zLmN1cnJlbnRPcHRpb25zKSA/IHRoaXMucy5jdXJyZW50T3B0aW9ucyA6IFtdKS5tYXAoKGN1cnJlbnRPcHRpb24pID0+IGN1cnJlbnRPcHRpb24udmFsdWUpXG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxIYXlhU2VsZWN0T3B0aW9ufHt2YWx1ZTogc3RyaW5nfG51bWJlcn0+fSAqL1xuICBnZXRDdXJyZW50T3B0aW9ucyA9ICgpID0+IHtcbiAgICBpZiAoXCJ2YWx1ZXNcIiBpbiB0aGlzLnByb3BzICYmIHR5cGVvZiB0aGlzLnByb3BzLnZhbHVlcyAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSAmJiB0aGlzLnAudmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucHJvcHMub3B0aW9ucykgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnAudmFsdWVzKSkge1xuICAgICAgICAvKiogQHR5cGUge0FycmF5PEhheWFTZWxlY3RPcHRpb24+fSAqL1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5wLnZhbHVlcykge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMucC5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKVxuXG4gICAgICAgICAgaWYgKG9wdGlvbikgcmVzdWx0LnB1c2gob3B0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmICh0aGlzLnMubG9hZGVkT3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59ICovXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLnAudmFsdWVzKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICAgIHRoaXMucy5sb2FkZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKSB8fFxuICAgICAgICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09IHZhbHVlKVxuXG4gICAgICAgICAgaWYgKG9wdGlvbikgcmVzdWx0LnB1c2gob3B0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vcHRpb25zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBPcHRpb25zIGhhdmVuJ3QgYmVlbiBsb2FkZWQgeWV0LlxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnAudmFsdWVzLm1hcCgodmFsdWUpID0+ICh7dmFsdWV9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zLmN1cnJlbnRPcHRpb25zXG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PHN0cmluZ3xudW1iZXI+fSAqL1xuICBnZXRDdXJyZW50T3B0aW9uVmFsdWVzKCkge1xuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucC52YWx1ZXMpID8gdGhpcy5wLnZhbHVlcyA6IFtdXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcblxuICAgIGlmICghY3VycmVudE9wdGlvbnMpIHJldHVybiBbXVxuXG4gICAgcmV0dXJuIGN1cnJlbnRPcHRpb25zXG4gICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbj8udmFsdWUpXG4gICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlICE9IFwidW5kZWZpbmVkXCIpXG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7YXR0cmlidXRlLCBkZWZhdWx0VmFsdWUsIGRlZmF1bHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucywgbW9kZWwsIG9wdGlvbnN9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImNvbXBvbmVudERpZE1vdW50XCIsIHtcbiAgICAgIGhhc0F0dHJpYnV0ZU1vZGVsOiBCb29sZWFuKGF0dHJpYnV0ZSAmJiBtb2RlbCksXG4gICAgICBoYXNEZWZhdWx0VmFsdWVzOiBCb29sZWFuKGRlZmF1bHRWYWx1ZSB8fCBkZWZhdWx0VmFsdWVzIHx8IGRlZmF1bHRWYWx1ZXNGcm9tT3B0aW9ucyksXG4gICAgICBvcHRpb25zVHlwZTogdHlwZW9mIG9wdGlvbnNcbiAgICB9KVxuXG4gICAgaWYgKCgoZGVmYXVsdFZhbHVlIHx8IGRlZmF1bHRWYWx1ZXMgfHwgZGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zKSB8fCAoYXR0cmlidXRlICYmIG1vZGVsKSkgJiYgdHlwZW9mIG9wdGlvbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmxvYWREZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNDYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge31cblxuICAgIGlmIChcInRvZ2dsZWRcIiBpbiB0aGlzLnByb3BzKSB7XG4gICAgICBjb25zdCBuZXdUb2dnbGVkID0gdGhpcy5wLnRvZ2dsZWRcblxuICAgICAgaWYgKGFueXRoaW5nRGlmZmVyZW50KHRoaXMuc3RhdGUudG9nZ2xlZCwgbmV3VG9nZ2xlZCkpIHtcbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3U3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjb21wb25lbnREaWRVcGRhdGVcIiwge3N5bmNpbmdLZXlzOiBPYmplY3Qua2V5cyhuZXdTdGF0ZSl9KVxuICAgICAgdGhpcy5zLnRvZ2dsZWQgPSBuZXdTdGF0ZS50b2dnbGVkXG4gICAgfVxuXG4gICAgdGhpcy5zeW5jT3B0aW9uc1BsYWNlbWVudFdpdGhNb2RlKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy51bmxvY2tCb2R5U2Nyb2xsKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSAqL1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2VuZE9mU2VsZWN0UmVmfSA9IHRoaXMudHRcbiAgICBjb25zdCB7dHJhbnNwYXJlbnR9ID0gdGhpcy5wXG4gICAgY29uc3Qge2NsYXNzTmFtZSwgcGxhY2Vob2xkZXIsIHRvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodGhpcy5wcm9wcy52YWx1ZXMpID8gdGhpcy5wcm9wcy52YWx1ZXMgOiBbXVxuICAgIGNvbnN0IHtvcGVuZWQsIG9wdGlvbnNQbGFjZW1lbnR9ID0gdGhpcy5zXG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRPcHRpb25zKClcbiAgICBjb25zdCBpZCA9IGlkRm9yQ29tcG9uZW50KHRoaXMpXG4gICAgY29uc3QgbW9iaWxlT3B0aW9uc1NoZWV0ID0gdGhpcy5pc01vYmlsZU9wdGlvbnNTaGVldCgpXG5cbiAgICBjb25zdCBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbCA9IHsuLi50aGlzLnN0eWxpbmdGb3IoXCJzZWxlY3RDb250YWluZXJcIiwge1xuICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRyYW5zcGFyZW50ID8gdW5kZWZpbmVkIDogXCIjZmZmXCIsXG4gICAgICBib3JkZXJDb2xvcjogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiBcIiM5OTlcIixcbiAgICAgIGJvcmRlclJhZGl1czogdHJhbnNwYXJlbnQgPyB1bmRlZmluZWQgOiA0LFxuICAgICAgYm9yZGVyV2lkdGg6IHRyYW5zcGFyZW50ID8gdW5kZWZpbmVkIDogMSxcbiAgICAgIGNvbG9yOiBcIiMwMDBcIixcbiAgICAgIGN1cnNvcjogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IFwicG9pbnRlclwiIDogdW5kZWZpbmVkLFxuICAgICAgcGFkZGluZ1RvcDogNSxcbiAgICAgIHBhZGRpbmdCb3R0b206IDUsXG4gICAgICBwYWRkaW5nTGVmdDogNVxuICAgIH0sIFt0cmFuc3BhcmVudF0pfVxuXG4gICAgaWYgKG9wZW5lZCAmJiAhbW9iaWxlT3B0aW9uc1NoZWV0KSB7XG4gICAgICAvLyBQcmV2ZW50IHNlbGVjdCBmcm9tIGNoYW5naW5nIHNpemUgb25jZSB0aGUgY29udGVudCBpcyByZXBsYWNlZCB3aXRoIHNlYXJjaCB0ZXh0IG9uY2Ugb3BlbmVkXG4gICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5oZWlnaHQgPSB0aGlzLnMuaGVpZ2h0XG5cbiAgICAgIGNvbnN0IGJhc2VCb3JkZXJSYWRpdXMgPSBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJSYWRpdXNcblxuICAgICAgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcExlZnRSYWRpdXMgPSAwXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gMFxuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IGJhc2VCb3JkZXJSYWRpdXNcblxuICAgICAgICBkZWxldGUgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnNQbGFjZW1lbnQgPT0gXCJiZWxvd1wiKSB7XG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcExlZnRSYWRpdXMgPSBiYXNlQm9yZGVyUmFkaXVzXG4gICAgICAgIHNlbGVjdENvbnRhaW5lclN0eWxlQWN0dWFsLmJvcmRlclRvcFJpZ2h0UmFkaXVzID0gYmFzZUJvcmRlclJhZGl1c1xuICAgICAgICBzZWxlY3RDb250YWluZXJTdHlsZUFjdHVhbC5ib3JkZXJCb3R0b21SaWdodFJhZGl1cyA9IDBcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyQm90dG9tTGVmdFJhZGl1cyA9IDBcblxuICAgICAgICBkZWxldGUgc2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWwuYm9yZGVyUmFkaXVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJyb290Vmlld0RhdGFTZXRcIiwge1xuICAgICAgICAgIGFwcGxpZWRSZXF1ZXN0SWQ6IHRoaXMucy5sb2FkT3B0aW9uc0FwcGxpZWRSZXF1ZXN0SWQsXG4gICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgICBjb21wb25lbnQ6IFwiaGF5YS1zZWxlY3RcIixcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvcGVuZWQsXG4gICAgICAgICAgb3B0aW9uc1BsYWNlbWVudCxcbiAgICAgICAgICByZXF1ZXN0SWQ6IHRoaXMucy5sb2FkT3B0aW9uc1JlcXVlc3RJZCxcbiAgICAgICAgICB0b2dnbGVzOiBCb29sZWFuKHRvZ2dsZU9wdGlvbnMpXG4gICAgICAgIH0sIFt0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkLCBjbGFzc05hbWUsIGlkLCBvcGVuZWQsIG9wdGlvbnNQbGFjZW1lbnQsIHRoaXMucy5sb2FkT3B0aW9uc1JlcXVlc3RJZCwgQm9vbGVhbih0b2dnbGVPcHRpb25zKV0pfVxuICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwibWFpblwiKX1cbiAgICAgID5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuc2VsZWN0Q29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcInNlbGVjdC1jb250YWluZXJcIn19XG4gICAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25TZWxlY3RDb250YWluZXJMYXlvdXR9XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblNlbGVjdENsaWNrZWR9XG4gICAgICAgICAgcmVmPXt0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZn1cbiAgICAgICAgICBzdHlsZT17c2VsZWN0Q29udGFpbmVyU3R5bGVBY3R1YWx9XG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jdXJyZW50U2VsZWN0ZWREYXRhU2V0IHx8PSB7Y2xhc3M6IFwiY3VycmVudC1zZWxlY3RlZFwifX1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50U2VsZWN0ZWRcIiwgdGhpcy5jdXJyZW50U2VsZWN0ZWRTdHlsZSB8fD0ge2ZsZXg6IDEsIGZsZXhXcmFwOiBcIndyYXBcIiwgb3ZlcmZsb3c6IFwiaGlkZGVuXCJ9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3BlbmVkICYmICFtb2JpbGVPcHRpb25zU2hlZXQgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0SW5wdXQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeyghb3BlbmVkIHx8IG1vYmlsZU9wdGlvbnNTaGVldCkgJiZcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7Y3VycmVudE9wdGlvbnMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIDxUZXh0IG51bWJlck9mTGluZXM9ezF9IHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJub3RoaW5nU2VsZWN0ZWRcIiwgdGhpcy5ub3RoaW5nU2VsZWN0ZWRTdHlsZSB8fD0ge2NvbG9yOiBcImdyZXlcIn0pfT5cbiAgICAgICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyIHx8IHRoaXMudHJhbnNsYXRlKFwiLm5vdGhpbmdfc2VsZWN0ZWRcIil9XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9ucy5sZW5ndGggPT0gMCAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7dmFsdWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5wLm11bHRpcGxlID8gdmFsdWVzIDogW3ZhbHVlc1swXV0pLm1hcCgodmFsdWUpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWRGb3JDb21wb25lbnQodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGN1cnJlbnQtdmFsdWUtJHt2YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lRm9yQ29tcG9uZW50V2l0aE11bHRpcGxlKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHt2YWx1ZXMubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZEZvckNvbXBvbmVudCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2N1cnJlbnRPcHRpb25zLm1hcCgoY3VycmVudE9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuY3VycmVudE9wdGlvbkRhdGFTZXQgfHw9IHtjbGFzczogXCJjdXJyZW50LW9wdGlvblwifX1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtjdXJyZW50T3B0aW9uLmtleSB8fCBgY3VycmVudC12YWx1ZS0ke2N1cnJlbnRPcHRpb24udmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25cIiwge21hcmdpblJpZ2h0OiA2fSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgPT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImN1cnJlbnRPcHRpb25Hcm91cFwiLCB0aGlzLmN1cnJlbnRPcHRpb25Hcm91cFN0eWxlIHx8PSB7Zm9udFdlaWdodDogXCJib2xkXCJ9KX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY3VycmVudE9wdGlvbkdyb3VwVGV4dFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHtjdXJyZW50T3B0aW9uLnR5cGUgIT0gXCJncm91cFwiICYmXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtQbGF0Zm9ybS5PUyA9PSBcIndlYlwiICYmIG5hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkRm9yQ29tcG9uZW50KHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWVGb3JDb21wb25lbnRXaXRoTXVsdGlwbGUodGhpcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2RpZ2coY3VycmVudE9wdGlvbiwgXCJ2YWx1ZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByZXNlbnRPcHRpb24oY3VycmVudE9wdGlvbiwgXCJjdXJyZW50XCIpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLmNoZXZyb25Db250YWluZXJEYXRhU2V0IHx8PSB7Y2xhc3M6IFwiY2hldnJvbi1jb250YWluZXJcIn19XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsaW5nRm9yKFwiY2hldnJvbkNvbnRhaW5lclwiLCB0aGlzLmNoZXZyb25Db250YWluZXJTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiA4XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIG5hbWU9e29wZW5lZCA/IFwiY2hldnJvbi11cFwiIDogXCJjaGV2cm9uLWRvd25cIn0gc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcImNoZXZyb25cIiwgdGhpcy5jaGV2cm9uU3R5bGUgfHw9IHtmb250U2l6ZTogMTJ9KX0gLz5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8Vmlld1xuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMuZW5kT2ZTZWxlY3REYXRhU2V0IHx8PSB7Y2xhc3M6IFwiZW5kLW9mLXNlbGVjdFwifX1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkVuZE9mU2VsZWN0TGF5b3V0fVxuICAgICAgICAgIHJlZj17ZW5kT2ZTZWxlY3RSZWZ9XG4gICAgICAgIC8+XG4gICAgICAgIHtvcGVuZWQgJiYgdGhpcy5wLm9wdGlvbnNQb3J0YWwgJiZcbiAgICAgICAgICA8UG9ydGFsIG5hbWU9e3RoaXMucG9ydGFsTmFtZSgpfT5cbiAgICAgICAgICAgIHt0aGlzLm9wdGlvbnNDb250YWluZXIoKX1cbiAgICAgICAgICA8L1BvcnRhbD5cbiAgICAgICAgfVxuICAgICAgICB7b3BlbmVkICYmICF0aGlzLnAub3B0aW9uc1BvcnRhbCAmJlxuICAgICAgICAgIDxWaWV3PlxuICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbnRhaW5lcigpfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSAqL1xuICBzZWFyY2hUZXh0SW5wdXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgZGF0YVNldD17dGhpcy5zZWFyY2hUZXh0SW5wdXREYXRhU2V0IHx8PSB7Y2xhc3M6IFwic2VhcmNoLXRleHQtaW5wdXRcIn19XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17dGhpcy5zZWFyY2hUZXh0VmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlVGV4dD17dGhpcy50dC5vbkNoYW5nZVNlYXJjaFRleHR9XG4gICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnRyYW5zbGF0ZShcIi5zZWFyY2hfZG90X2RvdF9kb3RcIil9XG4gICAgICAgIHJlZj17dGhpcy50dC5zZWFyY2hUZXh0SW5wdXRSZWZ9XG4gICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJzZWFyY2hUZXh0SW5wdXRcIiwgdGhpcy5zZWFyY2hUZXh0SW5wdXRTdHlsZSB8fD0ge1xuICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICBib3JkZXJXaWR0aDogMCxcbiAgICAgICAgICBvdXRsaW5lOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJub25lXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICB9KX1cbiAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3Qtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgey4uLnRoaXMucC5zZWFyY2hUZXh0SW5wdXRQcm9wc31cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxzdHJpbmd8bnVtYmVyPnxzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZH0gKi9cbiAgZGVmYXVsdFZhbHVlcyAoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZSwgZGVmYXVsdFZhbHVlLCBkZWZhdWx0VmFsdWVzLCBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMsIG1vZGVsfSA9IHRoaXMucHJvcHNcblxuICAgIGlmIChkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnMpIHJldHVybiBkZWZhdWx0VmFsdWVzRnJvbU9wdGlvbnNcbiAgICBpZiAoZGVmYXVsdFZhbHVlKSByZXR1cm4gZGVmYXVsdFZhbHVlXG4gICAgaWYgKGRlZmF1bHRWYWx1ZXMpIHJldHVybiBkZWZhdWx0VmFsdWVzXG5cbiAgICBpZiAoYXR0cmlidXRlICYmIG1vZGVsKSB7XG4gICAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbW9kZWwpKSB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggYXR0cmlidXRlIG9uICR7bW9kZWwubW9kZWxDbGFzc0RhdGEoKS5uYW1lfTogJHthdHRyaWJ1dGV9YClcblxuICAgICAgcmV0dXJuIG1vZGVsW2F0dHJpYnV0ZV0oKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gKi9cbiAgaXNBY3RpdmUoKSB7XG4gICAgaWYgKHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgbG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrKCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSB0aGlzLmRlZmF1bHRWYWx1ZXMoKVxuXG4gICAgaWYgKCFkZWZhdWx0VmFsdWVzKSByZXR1cm5cblxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkRGVmYXVsdFZhbHVlc0Zyb21PcHRpb25zQ2FsbGJhY2tcIiwge2RlZmF1bHRWYWx1ZXN9KVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9wcy5vcHRpb25zKHtcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmdldFNlYXJjaFRleHQoKSxcbiAgICAgIHBhZ2U6IHRoaXMuZ2V0QWN0aXZlUGFnZSgpLFxuICAgICAgdmFsdWVzOiBkZWZhdWx0VmFsdWVzXG4gICAgfSlcblxuICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZERlZmF1bHRWYWx1ZXNGcm9tT3B0aW9uc0NhbGxiYWNrLnJlc3VsdFwiLCB7bG9hZGVkT3B0aW9uc0NvdW50OiBvcHRpb25zPy5sZW5ndGggfHwgMH0pXG5cbiAgICB0aGlzLnMuY3VycmVudE9wdGlvbnMgPSB0aGlzLnN0YXRlLmN1cnJlbnRPcHRpb25zLmNvbmNhdChvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e3BhZ2U/OiBudW1iZXJ9fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGxvYWRPcHRpb25zID0gYXN5bmMgKHtwYWdlfSA9IHt9KSA9PiB7XG4gICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5wXG4gICAgY29uc3Qgc2VhcmNoVmFsdWUgPSB0aGlzLmdldFNlYXJjaFRleHQoKVxuICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrdGhpcy5sYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZFxuICAgIHRoaXMucy5sb2FkT3B0aW9uc1JlcXVlc3RJZCA9IHJlcXVlc3RJZFxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJsb2FkT3B0aW9uc1wiLCB7XG4gICAgICBwYWdlLFxuICAgICAgcmVxdWVzdElkLFxuICAgICAgc2VhcmNoVmFsdWUsXG4gICAgICBvcHRpb25zVHlwZTogQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IFwiYXJyYXlcIiA6IHR5cGVvZiBvcHRpb25zXG4gICAgfSlcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkT3B0aW9uc0Zyb21BcnJheShvcHRpb25zLCBzZWFyY2hWYWx1ZSwgcmVxdWVzdElkKVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RlZFBhZ2UgPSBOdW1iZXIuaXNGaW5pdGUocGFnZSkgPyBwYWdlIDogdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcHRpb25zKHtzZWFyY2hWYWx1ZSwgcGFnZTogcmVxdWVzdGVkUGFnZX0pXG4gICAgY29uc3Qge29wdGlvbnM6IGxvYWRlZE9wdGlvbnMsIHBhZ2U6IHJlc3VsdFBhZ2UsIHBhZ2VTaXplLCB0b3RhbENvdW50fSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcblxuICAgIGlmIChyZXF1ZXN0SWQgIT0gdGhpcy5sYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZCkge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zLmlnbm9yZWRfc3RhbGVfcmVzdWx0XCIsIHtcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBsYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZDogdGhpcy5sYXRlc3RMb2FkT3B0aW9uc1JlcXVlc3RJZCxcbiAgICAgICAgcmVxdWVzdGVkUGFnZSxcbiAgICAgICAgc2VhcmNoVmFsdWVcbiAgICAgIH0pXG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc29sdmVkUGFnZSA9IE51bWJlci5pc0Zpbml0ZShyZXN1bHRQYWdlKSA/IHJlc3VsdFBhZ2UgOiByZXF1ZXN0ZWRQYWdlXG4gICAgY29uc3QgcmVzb2x2ZWRQYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZVBhZ2VTaXplKHtvcHRpb25zOiBsb2FkZWRPcHRpb25zLCBwYWdlOiByZXNvbHZlZFBhZ2UsIHBhZ2VTaXplLCB0b3RhbENvdW50fSlcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpICYmIE51bWJlci5pc0Zpbml0ZShyZXNvbHZlZFBhZ2VTaXplKSAmJiByZXNvbHZlZFBhZ2VTaXplID4gMFxuICAgICAgPyBNYXRoLmNlaWwodG90YWxDb3VudCAvIHJlc29sdmVkUGFnZVNpemUpXG4gICAgICA6IG51bGxcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbG9hZGVkT3B0aW9ucyxcbiAgICAgIGxvYWRPcHRpb25zQXBwbGllZFJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgcGFnZTogcmVzb2x2ZWRQYWdlLFxuICAgICAgcGFnZUlucHV0VmFsdWU6IFN0cmluZyhyZXNvbHZlZFBhZ2UpLFxuICAgICAgcGFnZVNpemU6IE51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSA/IHJlc29sdmVkUGFnZVNpemUgOiBudWxsLFxuICAgICAgdG90YWxDb3VudDogTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpID8gdG90YWxDb3VudCA6IG51bGxcbiAgICB9LCAoKSA9PiB0aGlzLnByb3BzLm9uT3B0aW9uc0xvYWRlZD8uKHtvcHRpb25zOiBsb2FkZWRPcHRpb25zfSkpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwibG9hZE9wdGlvbnMucmVzdWx0XCIsIHtcbiAgICAgIGxvYWRlZE9wdGlvbnNDb3VudDogbG9hZGVkT3B0aW9ucz8ubGVuZ3RoIHx8IDAsXG4gICAgICByZXNvbHZlZFBhZ2UsXG4gICAgICByZXNvbHZlZFBhZ2VTaXplLFxuICAgICAgdG90YWxDb3VudDogTnVtYmVyLmlzRmluaXRlKHRvdGFsQ291bnQpID8gdG90YWxDb3VudCA6IG51bGxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2tleTogc3RyaW5nLCBsb2FkZWRPcHRpb246IEhheWFTZWxlY3RPcHRpb259fVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfVxuICAgKi9cbiAgaGF5YVNlbGVjdE9wdGlvbih7a2V5LCBsb2FkZWRPcHRpb259KSB7XG4gICAgaWYgKGxvYWRlZE9wdGlvbi50eXBlID09IFwiZ3JvdXBcIikge1xuICAgICAgcmV0dXJuIDxPcHRpb25Hcm91cCBrZXk9e2tleX0gb3B0aW9uPXtsb2FkZWRPcHRpb259IC8+XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxPcHRpb25cbiAgICAgICAgY3VycmVudE9wdGlvblZhbHVlcz17dGhpcy5nZXRDdXJyZW50T3B0aW9uVmFsdWVzKCl9XG4gICAgICAgIGljb249e3RoaXMuaWNvbkZvck9wdGlvbihsb2FkZWRPcHRpb24pfVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgb3B0aW9uPXtsb2FkZWRPcHRpb259XG4gICAgICAgIG9uT3B0aW9uQ2xpY2tlZD17dGhpcy50dC5vbk9wdGlvbkNsaWNrZWR9XG4gICAgICAgIHByZXNlbnRPcHRpb249e3RoaXMudHQucHJlc2VudE9wdGlvbn1cbiAgICAgICAgc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3J9XG4gICAgICAgIHNlbGVjdGVkSG92ZXJCYWNrZ3JvdW5kQ29sb3I9e3RoaXMucHJvcHMuc2VsZWN0ZWRIb3ZlckJhY2tncm91bmRDb2xvcn1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59IG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWFyY2hWYWx1ZV1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtyZXF1ZXN0SWRdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgbG9hZE9wdGlvbnNGcm9tQXJyYXkob3B0aW9ucywgc2VhcmNoVmFsdWUsIHJlcXVlc3RJZCA9IHRoaXMubGF0ZXN0TG9hZE9wdGlvbnNSZXF1ZXN0SWQpIHtcbiAgICBjb25zdCBsb3dlclNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWU/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBsb2FkZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIoKHt0ZXh0fSkgPT4gIWxvd2VyU2VhcmNoVmFsdWUgfHwgdGV4dD8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMobG93ZXJTZWFyY2hWYWx1ZSkpXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImxvYWRPcHRpb25zRnJvbUFycmF5XCIsIHtcbiAgICAgIHJlcXVlc3RJZCxcbiAgICAgIHRvdGFsT3B0aW9uc0NvdW50OiBvcHRpb25zLmxlbmd0aCxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgbG9hZGVkT3B0aW9uc0NvdW50OiBsb2FkZWRPcHRpb25zLmxlbmd0aFxuICAgIH0pXG5cbiAgICB0aGlzLnMubG9hZGVkT3B0aW9ucyA9IGxvYWRlZE9wdGlvbnNcbiAgICB0aGlzLnMubG9hZE9wdGlvbnNBcHBsaWVkUmVxdWVzdElkID0gcmVxdWVzdElkXG4gICAgdGhpcy5zLnBhZ2UgPSAxXG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gXCIxXCJcbiAgICB0aGlzLnMucGFnZVNpemUgPSBudWxsXG4gICAgdGhpcy5zLnRvdGFsQ291bnQgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7d2luZG93OiB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXJ9fX0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkRpbWVuc2lvbnNDaGFuZ2UgPSAoe3dpbmRvd30pID0+IHtcbiAgICB0aGlzLndpbmRvd1dpZHRoID0gd2luZG93LndpZHRoXG4gICAgdGhpcy53aW5kb3dIZWlnaHQgPSB3aW5kb3cuaGVpZ2h0XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCkge1xuICAgICAgdGhpcy5zeW5jT3B0aW9uc1BsYWNlbWVudFdpdGhNb2RlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7bmF0aXZlRXZlbnQ/OiB7bGF5b3V0PzogSGF5YVNlbGVjdExheW91dH19fSBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25TZWxlY3RDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5zZWxlY3RDb250YWluZXJMYXlvdXQgPSBub3JtYWxpemVMYXlvdXQoZGlnZyhlLCBcIm5hdGl2ZUV2ZW50XCIsIFwibGF5b3V0XCIpKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZiwgXCJzZWxlY3RDb250YWluZXJMYXlvdXRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkVuZE9mU2VsZWN0TGF5b3V0ID0gKGUpID0+IHtcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IG5vcm1hbGl6ZUxheW91dChkaWdnKGUsIFwibmF0aXZlRXZlbnRcIiwgXCJsYXlvdXRcIikpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7ZW5kT2ZTZWxlY3RMYXlvdXR9XG5cbiAgICBpZiAodGhpcy5zLm9wZW5lZCAmJiBlbmRPZlNlbGVjdExheW91dD8ud2lkdGgpIHtcbiAgICAgIG5ld1N0YXRlLm9wdGlvbnNXaWR0aCA9IGVuZE9mU2VsZWN0TGF5b3V0LndpZHRoXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT4ge1xuICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYsIFwiZW5kT2ZTZWxlY3RMYXlvdXRcIilcblxuICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tuYXRpdmVFdmVudD86IHtsYXlvdXQ/OiBIYXlhU2VsZWN0TGF5b3V0fX19IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbk9wdGlvbnNDb250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIHRoaXMucy5vcHRpb25zQ29udGFpbmVyTGF5b3V0ID0gbm9ybWFsaXplTGF5b3V0KGRpZ2coZSwgXCJuYXRpdmVFdmVudFwiLCBcImxheW91dFwiKSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgbWVhc3VyZU5hdGl2ZVNlbGVjdExheW91dHMoKSB7XG4gICAgdGhpcy5tZWFzdXJlTmF0aXZlTGF5b3V0KHRoaXMudHQuc2VsZWN0Q29udGFpbmVyUmVmLCBcInNlbGVjdENvbnRhaW5lckxheW91dFwiKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZUxheW91dCh0aGlzLnR0LmVuZE9mU2VsZWN0UmVmLCBcImVuZE9mU2VsZWN0TGF5b3V0XCIpXG4gIH1cblxuICAvKipcbiAgICogTWVhc3VyZXMgYSBuYXRpdmUgdmlldyBpbiB3aW5kb3cgY29vcmRpbmF0ZXMgZm9yIHBvcnRhbCBwb3NpdGlvbmluZy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5SZWZPYmplY3Q8b2JqZWN0Pn0gcmVmIFZpZXcgcmVmLlxuICAgKiBAcGFyYW0ge1wic2VsZWN0Q29udGFpbmVyTGF5b3V0XCJ8XCJlbmRPZlNlbGVjdExheW91dFwifSBzdGF0ZUtleSBTdGF0ZSBsYXlvdXQga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG1lYXN1cmVOYXRpdmVMYXlvdXQocmVmLCBzdGF0ZUtleSkge1xuICAgIGlmIChQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSByZXR1cm5cblxuICAgIGNvbnN0IGVsZW1lbnQgPSByZWYuY3VycmVudFxuICAgIGlmICghZWxlbWVudCB8fCB0eXBlb2YgZWxlbWVudC5tZWFzdXJlSW5XaW5kb3cgIT0gXCJmdW5jdGlvblwiKSByZXR1cm5cblxuICAgIGVsZW1lbnQubWVhc3VyZUluV2luZG93KChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpID0+IHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkTGF5b3V0ID0ge2hlaWdodCwgbGVmdCwgdG9wLCB3aWR0aH1cblxuICAgICAgaWYgKCFsYXlvdXRIYXNQb3NpdGlvbihtZWFzdXJlZExheW91dCkpIHJldHVyblxuXG4gICAgICAvKiogQHR5cGUge1BhcnRpYWw8SGF5YVNlbGVjdFN0YXRlPn0gKi9cbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBbc3RhdGVLZXldOiBtZWFzdXJlZExheW91dFxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVLZXkgPT0gXCJlbmRPZlNlbGVjdExheW91dFwiICYmIHRoaXMucy5vcGVuZWQgJiYgd2lkdGgpIHtcbiAgICAgICAgbmV3U3RhdGUub3B0aW9uc1dpZHRoID0gd2lkdGhcbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnl0aGluZ0RpZmZlcmVudCh0aGlzLnNbc3RhdGVLZXldLCBtZWFzdXJlZExheW91dCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucy5vcGVuZWQgJiYgdGhpcy5zLm9wdGlvbnNDb250YWluZXJMYXlvdXQpIHtcbiAgICAgICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblNlbGVjdENsaWNrZWQgPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvcGVuZWR9ID0gdGhpcy5zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uU2VsZWN0Q2xpY2tlZFwiLCB7b3BlbmVkfSlcblxuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuT3B0aW9ucygpXG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5sb2FkT3B0aW9ucywgMjAwKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tvcHRpb25zPzogQXJyYXk8SGF5YVNlbGVjdE9wdGlvbj59fSBbcGFyYW1zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsb3NlT3B0aW9ucyh7b3B0aW9uc30gPSB7fSkge1xuICAgIGNvbnN0IGNsb3NlZE9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJjbG9zZU9wdGlvbnNcIiwge2Nsb3NlZE9wdGlvbnNDb3VudDogY2xvc2VkT3B0aW9ucz8ubGVuZ3RoIHx8IDB9KVxuICAgIHRoaXMuY2FsbE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuID0gZmFsc2VcbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICBsb2FkZWRPcHRpb25zOiB1bmRlZmluZWQsXG4gICAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICAgIG9wdGlvbnNDb250YWluZXJMYXlvdXQ6IG51bGwsXG4gICAgICAgIG9wdGlvbnNWaXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgICAgcGFnZUlucHV0VmFsdWU6IFwiMVwiLFxuICAgICAgICBwYWdlU2l6ZTogbnVsbCxcbiAgICAgICAgdG90YWxDb3VudDogbnVsbFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcImNsb3NlT3B0aW9ucy5kb25lXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWQsIG9wdGlvbnNWaXNpYmlsaXR5OiB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHl9KVxuICAgICAgfVxuICAgIClcblxuICAgIGlmICh0aGlzLnByb3BzLm9uT3B0aW9uc0Nsb3NlZCkge1xuICAgICAgdGhpcy5wcm9wcy5vbk9wdGlvbnNDbG9zZWQoe29wdGlvbnM6IGNsb3NlZE9wdGlvbnN9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnAub25CbHVyKSB0aGlzLnAub25CbHVyKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBnZXRTZWFyY2hUZXh0ID0gKCkgPT4gdGhpcy5zZWFyY2hUZXh0VmFsdWUgfHwgXCJcIlxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgcmVzZXRTZWFyY2hUZXh0SW5wdXQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZWFyY2hUZXh0VmFsdWUgPSBcIlwiXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZi5jdXJyZW50XG5cbiAgICBpZiAoaW5wdXQ/LmNsZWFyKSB7XG4gICAgICBpbnB1dC5jbGVhcigpXG4gICAgfSBlbHNlIGlmIChpbnB1dD8uc2V0TmF0aXZlUHJvcHMpIHtcbiAgICAgIGlucHV0LnNldE5hdGl2ZVByb3BzKHt0ZXh0OiBcIlwifSlcbiAgICB9IGVsc2UgaWYgKGlucHV0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbnB1dC52YWx1ZSA9IFwiXCJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElnbm9yZSBpZiB0aGUgcmVmIGRvZXNuJ3Qgc3VwcG9ydCBkaXJlY3QgdmFsdWUgYXNzaWdubWVudC5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRleHRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkNoYW5nZVNlYXJjaFRleHQgPSAoc2VhcmNoVGV4dCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbkNoYW5nZVNlYXJjaFRleHRcIiwge3NlYXJjaFRleHQsIGN1cnJlbnRQYWdlOiB0aGlzLnMucGFnZX0pXG4gICAgdGhpcy5zZWFyY2hUZXh0VmFsdWUgPSBzZWFyY2hUZXh0XG5cbiAgICBpZiAodGhpcy5zLnBhZ2UgIT0gMSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7cGFnZTogMSwgcGFnZUlucHV0VmFsdWU6IFwiMVwifSwgdGhpcy50dC5vblNlYXJjaFRleHRJbnB1dENoYW5nZWREZWJvdW5jZWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHQub25TZWFyY2hUZXh0SW5wdXRDaGFuZ2VkRGVib3VuY2VkKClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9wZW5PcHRpb25zKCkge1xuICAgIGNvbnN0IG1vYmlsZU9wdGlvbnNTaGVldCA9IHRoaXMuaXNNb2JpbGVPcHRpb25zU2hlZXQoKVxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9wZW5PcHRpb25zXCIsIHtcbiAgICAgIGN1cnJlbnRPcHRpb25zQ291bnQ6IHRoaXMuZ2V0Q3VycmVudE9wdGlvbnMoKT8ubGVuZ3RoIHx8IDAsXG4gICAgICBtb2JpbGVPcHRpb25zU2hlZXQsXG4gICAgICBzZWFyY2hFbmFibGVkOiB0aGlzLnAuc2VhcmNoXG4gICAgfSlcbiAgICB0aGlzLnNlYXJjaFRleHRWYWx1ZSA9IFwiXCJcbiAgICB0aGlzLmNhbGxPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbiA9ICFtb2JpbGVPcHRpb25zU2hlZXRcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBoZWlnaHQ6IG1vYmlsZU9wdGlvbnNTaGVldCA/IG51bGwgOiB0aGlzLnMuc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQsXG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogbW9iaWxlT3B0aW9uc1NoZWV0ID8gXCJzaGVldFwiIDogXCJiZWxvd1wiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogbW9iaWxlT3B0aW9uc1NoZWV0ID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiLFxuICAgICAgICBvcHRpb25zV2lkdGg6IG1vYmlsZU9wdGlvbnNTaGVldCA/IHVuZGVmaW5lZCA6IHRoaXMucy5lbmRPZlNlbGVjdExheW91dD8ud2lkdGgsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHBhZ2VJbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICBwYWdlSW5wdXRWYWx1ZTogXCIxXCIsXG4gICAgICAgIHNjcm9sbExlZnQ6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGwsXG4gICAgICAgIHNjcm9sbFRvcDogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBudWxsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAobW9iaWxlT3B0aW9uc1NoZWV0KSB7XG4gICAgICAgICAgdGhpcy5sb2NrQm9keVNjcm9sbCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpXG4gICAgICAgICAgdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0U2VhcmNoVGV4dElucHV0KClcbiAgICAgICAgdGhpcy5sb2FkT3B0aW9ucyh7cGFnZTogMX0pXG4gICAgICB9XG4gICAgKVxuXG4gICAgaWYgKHRoaXMucC5vbkZvY3VzKSB0aGlzLnAub25Gb2N1cygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGZvY3VzVGV4dElucHV0ID0gKCkgPT4gZGlnZyh0aGlzLnR0LnNlYXJjaFRleHRJbnB1dFJlZiwgXCJjdXJyZW50XCIpPy5mb2N1cygpXG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBsb2NrQm9keVNjcm9sbCgpIHtcbiAgICBpZiAoUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIiB8fCB0eXBlb2YgZG9jdW1lbnQgPT0gXCJ1bmRlZmluZWRcIiB8fCB0aGlzLmJvZHlTY3JvbGxMb2NrZWQpIHJldHVyblxuXG4gICAgdGhpcy5wcmV2aW91c0JvZHlPdmVyZmxvdyA9IGRvY3VtZW50LmJvZHk/LnN0eWxlLm92ZXJmbG93XG4gICAgdGhpcy5wcmV2aW91c0RvY3VtZW50T3ZlcmZsb3cgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/LnN0eWxlLm92ZXJmbG93XG5cbiAgICBpZiAoZG9jdW1lbnQuYm9keSkgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCJcbiAgICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiXG5cbiAgICB0aGlzLmJvZHlTY3JvbGxMb2NrZWQgPSB0cnVlXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHVubG9ja0JvZHlTY3JvbGwoKSB7XG4gICAgaWYgKFBsYXRmb3JtLk9TICE9IFwid2ViXCIgfHwgdHlwZW9mIGRvY3VtZW50ID09IFwidW5kZWZpbmVkXCIgfHwgIXRoaXMuYm9keVNjcm9sbExvY2tlZCkgcmV0dXJuXG5cbiAgICBpZiAoZG9jdW1lbnQuYm9keSkgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IHRoaXMucHJldmlvdXNCb2R5T3ZlcmZsb3cgfHwgXCJcIlxuICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IHRoaXMucHJldmlvdXNEb2N1bWVudE92ZXJmbG93IHx8IFwiXCJcblxuICAgIHRoaXMucHJldmlvdXNCb2R5T3ZlcmZsb3cgPSB1bmRlZmluZWRcbiAgICB0aGlzLnByZXZpb3VzRG9jdW1lbnRPdmVyZmxvdyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYm9keVNjcm9sbExvY2tlZCA9IGZhbHNlXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuIC8vIERlYm91bmNlIGFmdGVyIHVuLW1vdW50IGhhbmRlbGluZy5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc01vYmlsZU9wdGlvbnNTaGVldCgpKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvblNoZWV0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudW5sb2NrQm9keVNjcm9sbCgpXG5cbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwic2V0T3B0aW9uc1Bvc2l0aW9uXCIpXG4gICAgdGhpcy5jYWxsT3B0aW9uc1Bvc2l0aW9uQWJvdmVJZk91dHNpZGVTY3JlZW4gPSB0cnVlXG4gICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25CZWxvdygpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHN5bmNPcHRpb25zUGxhY2VtZW50V2l0aE1vZGUoKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIGlmICh0aGlzLnMub3B0aW9uc1BsYWNlbWVudCAhPSBcInNoZWV0XCIpIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucy5vcHRpb25zUGxhY2VtZW50ID09IFwic2hlZXRcIikge1xuICAgICAgdGhpcy5zZXRPcHRpb25zUG9zaXRpb25CZWxvdygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnVubG9ja0JvZHlTY3JvbGwoKVxuICAgIHRoaXMubWVhc3VyZU5hdGl2ZVNlbGVjdExheW91dHMoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlbigpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qge3dpbmRvd0hlaWdodH0gPSB0aGlzLnR0XG4gICAgY29uc3Qge29wdGlvbnNDb250YWluZXJMYXlvdXQsIHNlbGVjdENvbnRhaW5lckxheW91dH0gPSB0aGlzLnNcbiAgICBjb25zdCBlbmRPZlNlbGVjdExheW91dCA9IHRoaXMucy5lbmRPZlNlbGVjdExheW91dFxuXG4gICAgY29uc3Qgb3B0aW9uc1RvcCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCJcbiAgICAgID8gZW5kT2ZTZWxlY3RMYXlvdXQ/LnRvcFxuICAgICAgOiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py50b3AgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQgPT0gXCJudW1iZXJcIlxuICAgICAgICA/IHNlbGVjdENvbnRhaW5lckxheW91dC50b3AgKyBzZWxlY3RDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9uc1RvcCkpIHtcbiAgICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRPcHRpb25zUG9zaXRpb25BYm92ZUlmT3V0c2lkZVNjcmVlblwiLCB7cGxhY2VtZW50OiBcImJlbG93XCIsIHJlYXNvbjogXCJtaXNzaW5nLW9wdGlvbnMtdG9wXCJ9KVxuICAgICAgdGhpcy5tZWFzdXJlTmF0aXZlU2VsZWN0TGF5b3V0cygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbiA9IG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgb3B0aW9uc1RvcFxuICAgIGNvbnN0IHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPSB3aW5kb3dIZWlnaHQgKyAodGhpcy5zLnNjcm9sbFRvcCB8fCAwKVxuXG4gICAgaWYgKHdpbmRvd0hlaWdodFdpdGhTY3JvbGwgPCBvcHRpb25zVG90YWxCb3R0b21Qb3NpdGlvbikge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYWJvdmVcIn0pXG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbkFib3ZlKClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlSWZPdXRzaWRlU2NyZWVuXCIsIHtwbGFjZW1lbnQ6IFwiYmVsb3dcIn0pXG4gICAgICB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHkgPSBcInZpc2libGVcIlxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0T3B0aW9uc1Bvc2l0aW9uU2hlZXQoKSB7XG4gICAgaWYgKCF0aGlzLnMub3BlbmVkKSByZXR1cm5cblxuICAgIHRoaXMubG9ja0JvZHlTY3JvbGwoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICBvcHRpb25zUGxhY2VtZW50OiBcInNoZWV0XCIsXG4gICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICBvcHRpb25zV2lkdGg6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHNldE9wdGlvbnNQb3NpdGlvbkFib3ZlKCkge1xuICAgIGlmICghdGhpcy5zLm9wZW5lZCkgcmV0dXJuXG5cbiAgICBjb25zdCB7ZW5kT2ZTZWxlY3RMYXlvdXR9ID0gdGhpcy5zXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkFib3ZlXCIpXG4gICAgdGhpcy51bmxvY2tCb2R5U2Nyb2xsKClcblxuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uc1BsYWNlbWVudDogXCJhYm92ZVwiLFxuICAgICAgICBvcHRpb25zVmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogZW5kT2ZTZWxlY3RMYXlvdXQ/LndpZHRoXG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5mb2N1c1RleHRJbnB1dCgpXG4gICAgKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBzZXRPcHRpb25zUG9zaXRpb25CZWxvdygpIHtcbiAgICBpZiAoIXRoaXMucy5vcGVuZWQpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcInNldE9wdGlvbnNQb3NpdGlvbkJlbG93XCIpXG4gICAgdGhpcy51bmxvY2tCb2R5U2Nyb2xsKClcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IFwiYmVsb3dcIixcbiAgICAgICAgb3B0aW9uc1Zpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgIG9wdGlvbnNXaWR0aDogdGhpcy5zLmVuZE9mU2VsZWN0TGF5b3V0Py53aWR0aFxuICAgICAgfSxcbiAgICAgICgpID0+IHRoaXMuZm9jdXNUZXh0SW5wdXQoKVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25Bbnl0aGluZ1Jlc2l6ZWQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z0VuYWJsZWQoKSkgdGhpcy5kZWJ1Z0xvZyhcIm9uQW55dGhpbmdSZXNpemVkXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWR9KVxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbigpXG4gICAgfVxuICB9XG5cbiAgb25Bbnl0aGluZ1Jlc2l6ZWREZWJvdW5jZWQgPSBkZWJvdW5jZSh0aGlzLnR0Lm9uQW55dGhpbmdSZXNpemVkLCAyNSlcblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uQW55dGhpbmdTY3JvbGxlZCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25Bbnl0aGluZ1Njcm9sbGVkXCIsIHtvcGVuZWQ6IHRoaXMucy5vcGVuZWR9KVxuICAgIGlmICh0aGlzLnMub3BlbmVkKSB7XG4gICAgICB0aGlzLnMuc2Nyb2xsTGVmdCA9IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IG51bGxcbiAgICAgIHRoaXMucy5zY3JvbGxUb3AgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA6IG51bGxcbiAgICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHJldHVyblxuXG4gICAgICB0aGlzLnNldE9wdGlvbnNQb3NpdGlvbigpXG4gICAgfVxuICB9XG5cbiAgb25Bbnl0aGluZ1Njcm9sbGVkRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy50dC5vbkFueXRoaW5nU2Nyb2xsZWQsIDI1KVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25QcmVzc091dHNpZGVPcHRpb25zID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvblByZXNzT3V0c2lkZU9wdGlvbnNcIiwge29wZW5lZDogdGhpcy5zLm9wZW5lZH0pXG4gICAgLy8gSWYgb3B0aW9ucyBhcmUgb3BlbiBhbmQgYSBjbGljayBpcyBtYWRlIG91dHNpZGUgb2YgdGhlIG9wdGlvbnMgY29udGFpbmVyXG4gICAgaWYgKHRoaXMucy5vcGVuZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VPcHRpb25zKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgUHJlc3MgZXZlbnQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25Nb2JpbGVPcHRpb25zQmFja2Ryb3BQcmVzcyA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgdGhpcy5jbG9zZU9wdGlvbnMoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH0gKi9cbiAgcGFnaW5hdGlvblRvdGFsUGFnZXMoKSB7XG4gICAgY29uc3Qge3RvdGFsQ291bnR9ID0gdGhpcy5zXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0b3RhbENvdW50KSB8fCB0b3RhbENvdW50IDw9IDApIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZVBhZ2VTaXplKHtcbiAgICAgIG9wdGlvbnM6IHRoaXMucy5sb2FkZWRPcHRpb25zIHx8IFtdLFxuICAgICAgcGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksXG4gICAgICBwYWdlU2l6ZTogdGhpcy5zLnBhZ2VTaXplLFxuICAgICAgdG90YWxDb3VudFxuICAgIH0pXG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYWdlU2l6ZSkgfHwgcGFnZVNpemUgPD0gMCkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBNYXRoLmNlaWwodG90YWxDb3VudCAvIHBhZ2VTaXplKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFBhZ2VzXG4gICAqIEByZXR1cm5zIHtBcnJheTx7a2V5OiBzdHJpbmcsIHR5cGU6IFwicGFnZVwifFwiZWxsaXBzaXNcIiwgdmFsdWU/OiBudW1iZXJ9Pn1cbiAgICovXG4gIHBhZ2luYXRpb25QYWdlSXRlbXModG90YWxQYWdlcykge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRBY3RpdmVQYWdlKClcbiAgICBjb25zdCBpdGVtcyA9IFtdXG4gICAgY29uc3QgYWRkUGFnZSA9IChwYWdlKSA9PiBpdGVtcy5wdXNoKHtrZXk6IGBwYWdlLSR7cGFnZX1gLCB0eXBlOiBcInBhZ2VcIiwgdmFsdWU6IHBhZ2V9KVxuICAgIGNvbnN0IGFkZEVsbGlwc2lzID0gKGtleSkgPT4gaXRlbXMucHVzaCh7a2V5LCB0eXBlOiBcImVsbGlwc2lzXCJ9KVxuXG4gICAgaWYgKHRvdGFsUGFnZXMgPD0gNykge1xuICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gdG90YWxQYWdlczsgcGFnZSArPSAxKSB7XG4gICAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgfVxuXG4gICAgYWRkUGFnZSgxKVxuXG4gICAgY29uc3Qgd2luZG93U2l6ZSA9IDJcbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgyLCBjdXJyZW50UGFnZSAtIHdpbmRvd1NpemUpXG4gICAgbGV0IGVuZCA9IE1hdGgubWluKHRvdGFsUGFnZXMgLSAxLCBjdXJyZW50UGFnZSArIHdpbmRvd1NpemUpXG5cbiAgICBpZiAoY3VycmVudFBhZ2UgPD0gMykge1xuICAgICAgc3RhcnQgPSAyXG4gICAgICBlbmQgPSBNYXRoLm1pbih0b3RhbFBhZ2VzIC0gMSwgNSlcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMgLSAyKSB7XG4gICAgICBlbmQgPSB0b3RhbFBhZ2VzIC0gMVxuICAgICAgc3RhcnQgPSBNYXRoLm1heCgyLCB0b3RhbFBhZ2VzIC0gNClcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPiAyKSBhZGRFbGxpcHNpcyhcImVsbGlwc2lzLXN0YXJ0XCIpXG5cbiAgICBmb3IgKGxldCBwYWdlID0gc3RhcnQ7IHBhZ2UgPD0gZW5kOyBwYWdlICs9IDEpIHtcbiAgICAgIGFkZFBhZ2UocGFnZSlcbiAgICB9XG5cbiAgICBpZiAoZW5kIDwgdG90YWxQYWdlcyAtIDEpIGFkZEVsbGlwc2lzKFwiZWxsaXBzaXMtZW5kXCIpXG5cbiAgICBhZGRQYWdlKHRvdGFsUGFnZXMpXG5cbiAgICByZXR1cm4gaXRlbXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxQYWdlc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcGFnaW5hdGlvbkRpc3BsYXlWYWx1ZSh0b3RhbFBhZ2VzKSB7XG4gICAgY29uc3QgYWN0aXZlUGFnZSA9IHRoaXMuZ2V0QWN0aXZlUGFnZSgpXG4gICAgY29uc3QgZmFsbGJhY2tUZXh0ID0gYFBhZ2UgJHthY3RpdmVQYWdlfSBvZiAke3RvdGFsUGFnZXN9YFxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKFwiLnBhZ2luYXRpb25fcGFnZV9vZl9wYWdlc1wiLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZhbGxiYWNrVGV4dCxcbiAgICAgIHBhZ2U6IGFjdGl2ZVBhZ2UsXG4gICAgICB0b3RhbFBhZ2VzXG4gICAgfSkgfHwgZmFsbGJhY2tUZXh0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsUGFnZXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHBhZ2luYXRpb25JbnB1dFZhbHVlKHRvdGFsUGFnZXMpIHtcbiAgICBpZiAodGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQpIHJldHVybiB0aGlzLnMucGFnZUlucHV0VmFsdWVcblxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25EaXNwbGF5VmFsdWUodG90YWxQYWdlcylcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge251bWJlcn0gcGFnZSAqL1xuICBzZXRQYWdpbmF0aW9uUGFnZSA9IChwYWdlKSA9PiB7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJzZXRQYWdpbmF0aW9uUGFnZVwiLCB7cmVxdWVzdGVkUGFnZTogcGFnZSwgdG90YWxQYWdlc30pXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMpIHJldHVyblxuXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBNYXRoLm1pbihNYXRoLm1heChNYXRoLmZsb29yKHBhZ2UpLCAxKSwgdG90YWxQYWdlcylcblxuICAgIGlmIChuZXh0UGFnZSA9PSB0aGlzLmdldEFjdGl2ZVBhZ2UoKSkge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtwYWdlOiBuZXh0UGFnZSwgcGFnZUlucHV0VmFsdWU6IFN0cmluZyhuZXh0UGFnZSl9LFxuICAgICAgKCkgPT4gdGhpcy50dC5sb2FkT3B0aW9ucyh7cGFnZTogbmV4dFBhZ2V9KVxuICAgIClcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25QcmV2UHJlc3NlZCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UodGhpcy5nZXRBY3RpdmVQYWdlKCkgLSAxKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbk5leHRQcmVzc2VkID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgdGhpcy5zZXRQYWdpbmF0aW9uUGFnZSh0aGlzLmdldEFjdGl2ZVBhZ2UoKSArIDEpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIG9uUGFnaW5hdGlvbklucHV0Rm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSB0cnVlXG4gICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAqL1xuICBvblBhZ2luYXRpb25JbnB1dENoYW5nZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHRoaXMucy5wYWdlSW5wdXRWYWx1ZSA9IHZhbHVlXG4gIH1cblxuICAvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdFwiKS5TeW50aGV0aWNFdmVudH0gZXZlbnQgKi9cbiAgb25QYWdpbmF0aW9uSW5wdXRCbHVyID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQ/LigpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uPy4oKVxuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblRvdGFsUGFnZXMoKVxuICAgIGNvbnN0IHJhd1ZhbHVlID0gZXZlbnQ/LnRhcmdldD8udmFsdWUgPz8gdGhpcy5zLnBhZ2VJbnB1dFZhbHVlXG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSByYXdWYWx1ZSA/IE51bWJlcihTdHJpbmcocmF3VmFsdWUpLm1hdGNoKC9cXGQrLyk/LlswXSkgOiBOYU5cbiAgICBjb25zdCBuZXh0UGFnZSA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWRWYWx1ZSkgPyBwYXJzZWRWYWx1ZSA6IE51bWJlcih0aGlzLnMucGFnZUlucHV0VmFsdWUpXG5cbiAgICBpZiAodG90YWxQYWdlcyAmJiBOdW1iZXIuaXNGaW5pdGUobmV4dFBhZ2UpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZX0sICgpID0+IHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UobmV4dFBhZ2UpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHBhZ2VJbnB1dFZhbHVlOiBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0XCIpLlN5bnRoZXRpY0V2ZW50fSBldmVudCAqL1xuICBvblBhZ2luYXRpb25JbnB1dFN1Ym1pdCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKClcblxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSB0aGlzLnBhZ2luYXRpb25Ub3RhbFBhZ2VzKClcblxuICAgIGlmICghdG90YWxQYWdlcykge1xuICAgICAgdGhpcy5zLnBhZ2VJbnB1dEZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5zLnBhZ2VJbnB1dFZhbHVlID0gU3RyaW5nKHRoaXMuZ2V0QWN0aXZlUGFnZSgpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBOdW1iZXIodGhpcy5zLnBhZ2VJbnB1dFZhbHVlKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobmV4dFBhZ2UpKSB7XG4gICAgICB0aGlzLnMucGFnZUlucHV0Rm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnMucGFnZUlucHV0VmFsdWUgPSBTdHJpbmcodGhpcy5nZXRBY3RpdmVQYWdlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtwYWdlSW5wdXRGb2N1c2VkOiBmYWxzZX0sICgpID0+IHRoaXMuc2V0UGFnaW5hdGlvblBhZ2UobmV4dFBhZ2UpKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50ICovXG4gIG9uUGFnaW5hdGlvbklucHV0S2V5RG93biA9IChldmVudCkgPT4ge1xuICAgIGlmIChldmVudD8ua2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuXG4gICAgdGhpcy50dC5vblBhZ2luYXRpb25JbnB1dFN1Ym1pdChldmVudClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfG51bGx9ICovXG4gIHBhZ2luYXRpb25Db250cm9scygpIHtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uVG90YWxQYWdlcygpXG5cbiAgICBpZiAoIXRvdGFsUGFnZXMgfHwgdG90YWxQYWdlcyA8PSAxKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEFjdGl2ZVBhZ2UoKVxuICAgIGNvbnN0IHByZXZEaXNhYmxlZCA9IGN1cnJlbnRQYWdlIDw9IDFcbiAgICBjb25zdCBuZXh0RGlzYWJsZWQgPSBjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvbkNvbnRhaW5lciB8fD0ge2NsYXNzOiBcIm9wdGlvbnMtcGFnaW5hdGlvblwifX1cbiAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uQ29udGFpbmVyIHx8PSB7XG4gICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IFwiI2UyZThmMFwiLFxuICAgICAgICAgIGJvcmRlclRvcFdpZHRoOiAxLFxuICAgICAgICAgIHBhZGRpbmc6IDhcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFZpZXdcbiAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uSGVhZGVyIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1oZWFkZXJcIn19XG4gICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uSGVhZGVyIHx8PSB7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwifX1cbiAgICAgICAgPlxuICAgICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25QcmV2QnV0dG9uIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1wcmV2XCJ9fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3ByZXZEaXNhYmxlZH1cbiAgICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25QYWdpbmF0aW9uUHJldlByZXNzZWR9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzW2BwYWdpbmF0aW9uTmF2QnV0dG9uLSR7cHJldkRpc2FibGVkfWBdIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjhmYWZjXCIsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcIiNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IHByZXZEaXNhYmxlZCA/IDAuNCA6IDEsXG4gICAgICAgICAgICAgIHdpZHRoOiAzMFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICAgIG5hbWU9XCJjaGV2cm9uLWxlZnRcIlxuICAgICAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25OYXZJY29uIHx8PSB7Y29sb3I6IFwiIzMzNDE1NVwiLCBmb250U2l6ZTogMTJ9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInBhZ2luYXRpb25MYWJlbERhdGFTZXRcIiwge1xuICAgICAgICAgICAgICBjbGFzczogXCJwYWdpbmF0aW9uLWxhYmVsXCIsXG4gICAgICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlXG4gICAgICAgICAgICB9LCBbY3VycmVudFBhZ2VdKX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkxhYmVsQnV0dG9uIHx8PSB7XG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZjFmNWY5XCIsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcIiNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxNCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogMTQwLFxuICAgICAgICAgICAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTAsXG4gICAgICAgICAgICAgIHBhZGRpbmdWZXJ0aWNhbDogNlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLnBhZ2luYXRpb25JbnB1dCB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24taW5wdXRcIn19XG4gICAgICAgICAgICAgIGtleWJvYXJkVHlwZT1cIm51bWJlci1wYWRcIlxuICAgICAgICAgICAgICBvbkJsdXI9e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRCbHVyfVxuICAgICAgICAgICAgICBvbkNoYW5nZVRleHQ9e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgIG9uRm9jdXM9e3RoaXMudHQub25QYWdpbmF0aW9uSW5wdXRGb2N1c31cbiAgICAgICAgICAgICAgb25QcmVzc0luPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbklucHV0Rm9jdXN9XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dEtleURvd259XG4gICAgICAgICAgICAgIG9uU3VibWl0RWRpdGluZz17dGhpcy50dC5vblBhZ2luYXRpb25JbnB1dFN1Ym1pdH1cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnR0LnBhZ2VJbnB1dFJlZn1cbiAgICAgICAgICAgICAgc2VsZWN0VGV4dE9uRm9jdXNcbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy5wYWdpbmF0aW9uSW5wdXRTdHlsZSB8fD0ge1xuICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAwLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiMwZjE3MmFcIixcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgICAgICAgb3V0bGluZTogUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiA/IFwibm9uZVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAxMjBcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMucGFnaW5hdGlvbklucHV0VmFsdWUodG90YWxQYWdlcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0cy5wYWdpbmF0aW9uTmV4dEJ1dHRvbiB8fD0ge2NsYXNzOiBcInBhZ2luYXRpb24tbmV4dFwifX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtuZXh0RGlzYWJsZWR9XG4gICAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUGFnaW5hdGlvbk5leHRQcmVzc2VkfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlc1tgcGFnaW5hdGlvbk5hdkJ1dHRvbi0ke25leHREaXNhYmxlZH1gXSB8fD0ge1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2Y4ZmFmY1wiLFxuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogXCIjY2JkNWUxXCIsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBuZXh0RGlzYWJsZWQgPyAwLjQgOiAxLFxuICAgICAgICAgICAgICB3aWR0aDogMzBcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1yaWdodFwiXG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbk5hdkljb24gfHw9IHtjb2xvcjogXCIjMzM0MTU1XCIsIGZvbnRTaXplOiAxMn19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMucGFnaW5hdGlvblBhZ2VzIHx8PSB7Y2xhc3M6IFwicGFnaW5hdGlvbi1wYWdlc1wifX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnBhZ2luYXRpb25QYWdlcyB8fD0ge1xuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgICAgICAgIGZsZXhXcmFwOiBcIndyYXBcIixcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgbWFyZ2luVG9wOiA4XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnBhZ2luYXRpb25QYWdlSXRlbXModG90YWxQYWdlcykubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiZWxsaXBzaXNcIikge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgcGFnaW5hdGlvbkVsbGlwc2lzLSR7aXRlbS5rZXl9YF0gfHw9IHtjbGFzczogXCJwYWdpbmF0aW9uLWVsbGlwc2lzXCJ9fVxuICAgICAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkVsbGlwc2lzIHx8PSB7cGFkZGluZ0hvcml6b250YWw6IDZ9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMucGFnaW5hdGlvbkVsbGlwc2lzVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiM2NDc0OGJcIixcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8UGFnaW5hdGlvblBhZ2VCdXR0b25cbiAgICAgICAgICAgICAgICBhY3RpdmU9e2l0ZW0udmFsdWUgPT0gY3VycmVudFBhZ2V9XG4gICAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cbiAgICAgICAgICAgICAgICBvblBhZ2VTZWxlY3RlZD17dGhpcy50dC5zZXRQYWdpbmF0aW9uUGFnZX1cbiAgICAgICAgICAgICAgICBwYWdlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e2lkOiBzdHJpbmd8bnVtYmVyLCBvcHRpb25zQ29udGVudDogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfX0gYXJncyBNb2JpbGUgc2hlZXQgY29udGVudC5cbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIG1vYmlsZU9wdGlvbnNDb250YWluZXIoe2lkLCBvcHRpb25zQ29udGVudH0pIHtcbiAgICBjb25zdCBzaGVldEhlaWdodCA9IE1hdGgubWF4KE1hdGgucm91bmQoRGltZW5zaW9ucy5nZXQoXCJ3aW5kb3dcIikuaGVpZ2h0ICogMC44KSwgMjQwKVxuICAgIGNvbnN0IHNoZWV0U3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25zQ29udGFpbmVyXCIsIHtcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB6SW5kZXg6IDEwMDAwMCxcbiAgICAgIGVsZXZhdGlvbjogMTAwMDAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgaGVpZ2h0OiBzaGVldEhlaWdodCxcbiAgICAgIG1heEhlaWdodDogc2hlZXRIZWlnaHQsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiLFxuICAgICAgYm9yZGVyVG9wQ29sb3I6IFwiI2NiZDVlMVwiLFxuICAgICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMTgsXG4gICAgICBib3JkZXJUb3BSaWdodFJhZGl1czogMTgsXG4gICAgICBib3JkZXJUb3BXaWR0aDogMSxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgdmlzaWJpbGl0eTogdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5XG4gICAgfSwgW3NoZWV0SGVpZ2h0LCB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHldKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMubW9iaWxlT3B0aW9uc092ZXJsYXlEYXRhU2V0IHx8PSB7Y2xhc3M6IFwibW9iaWxlLW9wdGlvbnMtb3ZlcmxheVwifX1cbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNPdmVybGF5XCIsIHN0eWxlcy5tb2JpbGVPcHRpb25zT3ZlcmxheSB8fD0ge1xuICAgICAgICAgIHBvc2l0aW9uOiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICB6SW5kZXg6IDk5OTk5LFxuICAgICAgICAgIGVsZXZhdGlvbjogOTk5OTlcbiAgICAgICAgfSl9XG4gICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW1vYmlsZS1vcHRpb25zLW92ZXJsYXlcIlxuICAgICAgPlxuICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgZGF0YVNldD17dGhpcy5tb2JpbGVPcHRpb25zQmFja2Ryb3BEYXRhU2V0IHx8PSB7Y2xhc3M6IFwibW9iaWxlLW9wdGlvbnMtYmFja2Ryb3BcIn19XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vbk1vYmlsZU9wdGlvbnNCYWNrZHJvcFByZXNzfVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtb2JpbGVPcHRpb25zQmFja2Ryb3BcIiwgc3R5bGVzLm1vYmlsZU9wdGlvbnNCYWNrZHJvcCB8fD0ge1xuICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDE1LCAyMywgNDIsIDAuMzIpXCJcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB0ZXN0SUQ9XCJoYXlhLXNlbGVjdC1tb2JpbGUtb3B0aW9ucy1iYWNrZHJvcFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcbiAgICAgICAgICAgIFwibW9iaWxlT3B0aW9uc0NvbnRhaW5lckRhdGFTZXRcIixcbiAgICAgICAgICAgIHtjbGFzczogXCJvcHRpb25zLWNvbnRhaW5lclwiLCBpZCwgcm9sZTogXCJkaWFsb2dcIiwgb3B0aW9uc1BsYWNlbWVudDogXCJzaGVldFwiLCBvcHRpb25zVmlzaWJpbGl0eTogdGhpcy5zLm9wdGlvbnNWaXNpYmlsaXR5IHx8IFwiaGlkZGVuXCJ9LFxuICAgICAgICAgICAgW2lkLCB0aGlzLnMub3B0aW9uc1Zpc2liaWxpdHldXG4gICAgICAgICAgKX1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbk9wdGlvbnNDb250YWluZXJMYXlvdXR9XG4gICAgICAgICAgcmVmPXt0aGlzLnR0Lm9wdGlvbnNDb250YWluZXJSZWZ9XG4gICAgICAgICAgc3R5bGU9e3NoZWV0U3R5bGV9XG4gICAgICAgICAgdGVzdElEPVwiaGF5YS1zZWxlY3QtbW9iaWxlLW9wdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxTY3JvbGxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLm1vYmlsZU9wdGlvbnNTY3JvbGxWaWV3RGF0YVNldCB8fD0ge2NsYXNzOiBcIm1vYmlsZS1vcHRpb25zLXNjcm9sbC12aWV3XCJ9fVxuICAgICAgICAgICAga2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcz1cImhhbmRsZWRcIlxuICAgICAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZFxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm1vYmlsZU9wdGlvbnNTY3JvbGxWaWV3XCIsIHN0eWxlcy5tb2JpbGVPcHRpb25zU2Nyb2xsVmlldyB8fD0ge2ZsZXg6IDF9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW1vYmlsZS1vcHRpb25zLXNjcm9sbC12aWV3XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uc0NvbnRlbnR9XG4gICAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICBkYXRhU2V0PXt0aGlzLm1vYmlsZU9wdGlvbnNTZWFyY2hDb250YWluZXJEYXRhU2V0IHx8PSB7Y2xhc3M6IFwibW9iaWxlLW9wdGlvbnMtc2VhcmNoLWNvbnRhaW5lclwifX1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxpbmdGb3IoXCJtb2JpbGVPcHRpb25zU2VhcmNoQ29udGFpbmVyXCIsIHN0eWxlcy5tb2JpbGVPcHRpb25zU2VhcmNoQ29udGFpbmVyIHx8PSB7XG4gICAgICAgICAgICAgIGJvcmRlclRvcENvbG9yOiBcIiNjYmQ1ZTFcIixcbiAgICAgICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IDEsXG4gICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206IDE0LFxuICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogMTQsXG4gICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogMTQsXG4gICAgICAgICAgICAgIHBhZGRpbmdUb3A6IDEwXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIHRlc3RJRD1cImhheWEtc2VsZWN0LW1vYmlsZS1vcHRpb25zLXNlYXJjaC1jb250YWluZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnNlYXJjaFRleHRJbnB1dCgpfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfG51bGx9ICovXG4gIG9wdGlvbnNDb250YWluZXIoKSB7XG4gICAgY29uc3Qge3NlbGVjdENvbnRhaW5lckxheW91dCwgbG9hZGVkT3B0aW9ucywgZW5kT2ZTZWxlY3RMYXlvdXQsIG9wdGlvbnNDb250YWluZXJMYXlvdXQsIG9wdGlvbnNQbGFjZW1lbnQsIG9wdGlvbnNWaXNpYmlsaXR5fSA9IHRoaXMuc1xuICAgIGxldCBsZWZ0LCB0b3BcbiAgICBjb25zdCBpZCA9IGlkRm9yQ29tcG9uZW50KHRoaXMpXG4gICAgY29uc3QgZGVza3RvcE9wdGlvbnNQbGFjZW1lbnQgPSBvcHRpb25zUGxhY2VtZW50ID09IFwic2hlZXRcIiA/IFwiYmVsb3dcIiA6IG9wdGlvbnNQbGFjZW1lbnRcbiAgICBjb25zdCBvcHRpb25zQ29udGVudCA9IChcbiAgICAgIDw+XG4gICAgICAgIHtsb2FkZWRPcHRpb25zPy5tYXAoKGxvYWRlZE9wdGlvbikgPT5cbiAgICAgICAgICB0aGlzLmhheWFTZWxlY3RPcHRpb24oe1xuICAgICAgICAgICAga2V5OiBsb2FkZWRPcHRpb24ua2V5IHx8IGBsb2FkZWQtb3B0aW9uLSR7bG9hZGVkT3B0aW9uLnZhbHVlfWAsXG4gICAgICAgICAgICBsb2FkZWRPcHRpb25cbiAgICAgICAgICB9KVxuICAgICAgICApfVxuICAgICAgICB7bG9hZGVkT3B0aW9ucz8ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIGRhdGFTZXQ9e3RoaXMubm9PcHRpb25zQ29udGFpbmVyRGF0YVNldCB8fD0ge2NsYXNzOiBcIm5vLW9wdGlvbnMtY29udGFpbmVyXCJ9fVxuICAgICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGluZ0ZvcihcIm5vT3B0aW9uc0NvbnRhaW5lclwiLCB0aGlzLm5vT3B0aW9uc0NvbnRhaW5lclN0eWxlIHx8PSB7XG4gICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206IDEwLFxuICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogOCxcbiAgICAgICAgICAgICAgcGFkZGluZ1JpZ2h0OiA4LFxuICAgICAgICAgICAgICBwYWRkaW5nVG9wOiAxMFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIHt0aGlzLnAubm9PcHRpb25zVGV4dCA/IHRoaXMucC5ub09wdGlvbnNUZXh0KCkgOiB0aGlzLnRyYW5zbGF0ZShcIi5ub19vcHRpb25zX2ZvdW5kXCIpfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgfVxuICAgICAgICB7dGhpcy5wYWdpbmF0aW9uQ29udHJvbHMoKX1cbiAgICAgIDwvPlxuICAgIClcblxuICAgIGlmICh0aGlzLmlzTW9iaWxlT3B0aW9uc1NoZWV0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vYmlsZU9wdGlvbnNDb250YWluZXIoe2lkLCBvcHRpb25zQ29udGVudH0pXG4gICAgfVxuXG4gICAgbGV0IHN0eWxlID0ge1xuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIHpJbmRleDogOTk5OTksXG4gICAgICBlbGV2YXRpb246IDk5OTk5LFxuICAgICAgdmlzaWJpbGl0eTogb3B0aW9uc1Zpc2liaWxpdHksXG4gICAgICB3aWR0aDogdGhpcy5wLm9wdGlvbnNXaWR0aCB8fCB0aGlzLnMub3B0aW9uc1dpZHRoLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNmZmZcIixcbiAgICAgIGJvcmRlckNvbG9yOiBcIiM5OTlcIixcbiAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgbWF4SGVpZ2h0OiAzMDAsXG4gICAgICBvdmVyZmxvd1k6IFBsYXRmb3JtLk9TID09IFwid2ViXCIgPyBcImF1dG9cIiA6IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmICghdGhpcy5wLm9wdGlvbnNQb3J0YWwpIHtcbiAgICAgIHN0eWxlLnRvcCA9IDBcbiAgICAgIHN0eWxlLmxlZnQgPSAwXG4gICAgfSBlbHNlIGlmICghdGhpcy5wLm9wdGlvbnNBYnNvbHV0ZSkge1xuICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgIHN0eWxlLmJvdHRvbSA9IDBcbiAgICB9IGVsc2UgaWYgKGRlc2t0b3BPcHRpb25zUGxhY2VtZW50ID09IFwiYmVsb3dcIikge1xuICAgICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgICAgLy8gb25MYXlvdXQgdG9wIHZhbHVlIGlzIHNvbWV0aW1lcyBuZWdhdGl2ZSBzbyB1c2UgYnJvd3NlciBKUyB0byBnZXQgaXQgaW5zdGVhZFxuICAgICAgICB0b3AgPSBkaWdnKHRoaXMudHQuZW5kT2ZTZWxlY3RSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgMVxuXG4gICAgICAgIC8vIG9uTGF5b3V0IGxlZnQgdmFsdWVzIGRvZXNuJ3QgYWx3YXlzIHVwZGF0ZSB3aGVuIGNoYW5nZWRcbiAgICAgICAgbGVmdCA9IGRpZ2codGhpcy50dC5lbmRPZlNlbGVjdFJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IHNlbGVjdENvbnRhaW5lckxheW91dD8ubGVmdFxuICAgICAgICB0b3AgPSB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py50b3AgPT0gXCJudW1iZXJcIiAmJiB0eXBlb2Ygc2VsZWN0Q29udGFpbmVyTGF5b3V0Py5oZWlnaHQgPT0gXCJudW1iZXJcIlxuICAgICAgICAgID8gc2VsZWN0Q29udGFpbmVyTGF5b3V0LnRvcCArIHNlbGVjdENvbnRhaW5lckxheW91dC5oZWlnaHQgKyAxXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShsZWZ0KSAmJiBOdW1iZXIuaXNGaW5pdGUodG9wKSkge1xuICAgICAgICBzdHlsZS5sZWZ0ID0gbGVmdFxuICAgICAgICBzdHlsZS50b3AgPSBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiID8gdG9wIC0gMiA6IHRvcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGVza3RvcE9wdGlvbnNQbGFjZW1lbnQgPT0gXCJhYm92ZVwiKSB7XG4gICAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgICAvLyBvbkxheW91dCB0b3AgdmFsdWUgaXMgc29tZXRpbWVzIG5lZ2F0aXZlIHNvIHVzZSBicm93c2VyIEpTIHRvIGdldCBpdCBpbnN0ZWFkXG4gICAgICAgIHRvcCA9IGRpZ2codGhpcy50dC5zZWxlY3RDb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgXCJ0b3BcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICAgICAgLy8gb25MYXlvdXQgbGVmdCB2YWx1ZXMgZG9lc24ndCBhbHdheXMgdXBkYXRlIHdoZW4gY2hhbmdlZFxuICAgICAgICBsZWZ0ID0gZGlnZyh0aGlzLnR0LnNlbGVjdENvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBcImxlZnRcIikgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IHNlbGVjdENvbnRhaW5lckxheW91dD8ubGVmdFxuICAgICAgICB0b3AgPSBzZWxlY3RDb250YWluZXJMYXlvdXQ/LnRvcFxuICAgICAgfVxuXG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGxlZnQpICYmIE51bWJlci5pc0Zpbml0ZSh0b3ApKSB7XG4gICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0XG4gICAgICAgIHN0eWxlLnRvcCA9IHRvcCAtIG9wdGlvbnNDb250YWluZXJMYXlvdXQuaGVpZ2h0ICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUubGVmdCA9IDBcbiAgICAgICAgc3R5bGUudG9wID0gMFxuICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua29ud24gb3B0aW9ucyBwbGFjZW1lbnQ6ICR7ZGVza3RvcE9wdGlvbnNQbGFjZW1lbnR9YClcbiAgICB9XG5cbiAgICBpZiAoUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIikge1xuICAgICAgc3R5bGUub3BhY2l0eSA9IG9wdGlvbnNWaXNpYmlsaXR5ID09IFwiaGlkZGVuXCIgPyAwIDogMVxuICAgICAgc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiXG4gICAgfVxuXG4gICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJvcHRpb25zQ29udGFpbmVyXCIsIHN0eWxlLCBbbGVmdCwgdG9wLCBzdHlsZS52aXNpYmlsaXR5LCBzdHlsZS53aWR0aF0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcbiAgICAgICAgICBcIm9wdGlvbnNDb250YWluZXJEYXRhU2V0XCIsXG4gICAgICAgICAge2NsYXNzOiBcIm9wdGlvbnMtY29udGFpbmVyXCIsIGlkLCByb2xlOiBcImRpYWxvZ1wiLCBvcHRpb25zVmlzaWJpbGl0eTogb3B0aW9uc1Zpc2liaWxpdHkgfHwgXCJoaWRkZW5cIn0sXG4gICAgICAgICAgW2lkLCBvcHRpb25zVmlzaWJpbGl0eV1cbiAgICAgICAgKX1cbiAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25PcHRpb25zQ29udGFpbmVyTGF5b3V0fVxuICAgICAgICByZWY9e3RoaXMudHQub3B0aW9uc0NvbnRhaW5lclJlZn1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgPlxuICAgICAgICB7UGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIiAmJlxuICAgICAgICAgIG9wdGlvbnNDb250ZW50XG4gICAgICAgIH1cbiAgICAgICAge1BsYXRmb3JtLk9TICE9IFwid2ViXCIgJiZcbiAgICAgICAgICA8U2Nyb2xsVmlld1xuICAgICAgICAgICAga2V5Ym9hcmRTaG91bGRQZXJzaXN0VGFwcz1cImhhbmRsZWRcIlxuICAgICAgICAgICAgbmVzdGVkU2Nyb2xsRW5hYmxlZFxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlc1tgbmF0aXZlT3B0aW9uc1Njcm9sbFZpZXctJHtzdHlsZS5tYXhIZWlnaHQgfHwgMzAwfWBdIHx8PSB7XG4gICAgICAgICAgICAgIG1heEhlaWdodDogc3R5bGUubWF4SGVpZ2h0IHx8IDMwMFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uc0NvbnRlbnR9XG4gICAgICAgICAgPC9TY3JvbGxWaWV3PlxuICAgICAgICB9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3RcIikuU3ludGhldGljRXZlbnR9IGV2ZW50XG4gICAqIEBwYXJhbSB7SGF5YVNlbGVjdE9wdGlvbn0gbG9hZGVkT3B0aW9uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25PcHRpb25DbGlja2VkID0gKGV2ZW50LCBsb2FkZWRPcHRpb24pID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGNvbnN0IHtvbkNoYW5nZSwgdG9nZ2xlT3B0aW9uc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge211bHRpcGxlfSA9IHRoaXMucFxuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRDdXJyZW50T3B0aW9ucygpXG4gICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMuZ2V0VG9nZ2xlZCgpXG4gICAgY29uc3QgbmV3U3RhdGUgPSB7fVxuICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9uID0gY3VycmVudE9wdGlvbnMuZmluZCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSA9PSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgY29uc3QgbmV3VG9nZ2xlZCA9IHsuLi50b2dnbGVkfVxuICAgIGxldCBuZXdDdXJyZW50T3B0aW9uc1xuICAgIGxldCBhY3Rpb25cblxuICAgIGlmIChleGlzdGluZ09wdGlvbikge1xuICAgICAgaWYgKHRvZ2dsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRvZ2dsZSA9IHRvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0b2dnbGVPcHRpb25zLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSA9PSBjdXJyZW50VG9nZ2xlKVxuXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gKHRvZ2dsZU9wdGlvbnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAvLyBObyBuZXh0IHRvZ2dsZWQgLSByZW1vdmUgdG9nZ2xlZCBhbmQgb3B0aW9uXG4gICAgICAgICAgZGVsZXRlIG5ld1RvZ2dsZWRbbG9hZGVkT3B0aW9uLnZhbHVlXVxuICAgICAgICAgIGFjdGlvbiA9IFwicmVtb3ZlLW9wdGlvbi1hZnRlci1sYXN0LXRvZ2dsZVwiXG5cbiAgICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSB0b2dnbGVkIC0gc2V0IHRvIG5leHQgdG9nZ2xlXG4gICAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gZGlnZyh0b2dnbGVPcHRpb25zLCBjdXJyZW50SW5kZXggKyAxLCBcInZhbHVlXCIpXG4gICAgICAgICAgYWN0aW9uID0gXCJjeWNsZS10b2dnbGVcIlxuICAgICAgICB9XG5cbiAgICAgICAgbmV3U3RhdGUudG9nZ2xlZCA9IG5ld1RvZ2dsZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIGN1cnJlbnQgb3B0aW9uc1xuICAgICAgICBhY3Rpb24gPSBcInJlbW92ZS1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmZpbHRlcigoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSAhPSBsb2FkZWRPcHRpb24udmFsdWUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBjbGlja2VkIG9wdGlvbiBpcyBkaXNhYmxlZFxuICAgICAgaWYgKGxvYWRlZE9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5pc0RlYnVnRW5hYmxlZCgpKSB0aGlzLmRlYnVnTG9nKFwib25PcHRpb25DbGlja2VkXCIsIHtcbiAgICAgICAgICBhY3Rpb246IFwiaWdub3JlLWRpc2FibGVkLW9wdGlvblwiLFxuICAgICAgICAgIG9wdGlvblZhbHVlOiBsb2FkZWRPcHRpb24udmFsdWVcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0b2dnbGVPcHRpb25zKSB7XG4gICAgICAgIC8vIFNldCBmcmVzaCB0b2dnbGVcbiAgICAgICAgbmV3VG9nZ2xlZFtsb2FkZWRPcHRpb24udmFsdWVdID0gdG9nZ2xlT3B0aW9uc1swXS52YWx1ZVxuICAgICAgICBuZXdTdGF0ZS50b2dnbGVkID0gbmV3VG9nZ2xlZFxuICAgICAgfVxuXG4gICAgICBpZiAobXVsdGlwbGUgfHwgdG9nZ2xlT3B0aW9ucykge1xuICAgICAgICBhY3Rpb24gPSBcImFkZC1vcHRpb25cIlxuICAgICAgICBuZXdDdXJyZW50T3B0aW9ucyA9IGN1cnJlbnRPcHRpb25zLmNvbmNhdChbbG9hZGVkT3B0aW9uXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbiA9IFwicmVwbGFjZS1zaW5nbGUtb3B0aW9uXCJcbiAgICAgICAgbmV3Q3VycmVudE9wdGlvbnMgPSBbbG9hZGVkT3B0aW9uXVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcInZhbHVlc1wiIGluIHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy52YWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gY3VycmVudE9wdGlvbnMgYXJlIGNvbnRyb2xsZWQgYW5kIGEgdXNlTWVtbyBjYWxsYmFjayBpcyBoYW5kZWxpbmcgc2V0dGluZyBjdXJyZW50IG9wdGlvbnMuXG4gICAgfSBlbHNlIGlmIChuZXdDdXJyZW50T3B0aW9ucykge1xuICAgICAgbmV3U3RhdGUuY3VycmVudE9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSBuZXdDdXJyZW50T3B0aW9ucyB8fCBjdXJyZW50T3B0aW9uc1xuICAgIGlmICh0aGlzLmlzRGVidWdFbmFibGVkKCkpIHRoaXMuZGVidWdMb2coXCJvbk9wdGlvbkNsaWNrZWRcIiwge1xuICAgICAgYWN0aW9uOiBhY3Rpb24gfHwgXCJ0b2dnbGUtb25seVwiLFxuICAgICAgbXVsdGlwbGUsXG4gICAgICBvcHRpb25WYWx1ZTogbG9hZGVkT3B0aW9uLnZhbHVlLFxuICAgICAgb3B0aW9uc0NvdW50QmVmb3JlOiBjdXJyZW50T3B0aW9ucy5sZW5ndGgsXG4gICAgICBvcHRpb25zQ291bnRBZnRlcjogb3B0aW9ucy5sZW5ndGhcbiAgICB9KVxuXG4gICAgaWYgKCFtdWx0aXBsZSkgdGhpcy5jbG9zZU9wdGlvbnMoe29wdGlvbnN9KVxuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAvKiogQHR5cGUge0hheWFTZWxlY3RPbkNoYW5nZVBheWxvYWR9ICovXG4gICAgICBvbkNoYW5nZSh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0b2dnbGVzOiBuZXdUb2dnbGVkXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlVmFsdWUpIHtcbiAgICAgIGxldCBvcHRpb25WYWx1ZVxuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25WYWx1ZSA9IGRpZyhvcHRpb25zLCAwLCBcInZhbHVlXCIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMucC5vbkNoYW5nZVZhbHVlKG9wdGlvblZhbHVlKVxuICAgIH1cblxuICAgIGlmIChcInRvZ2dsZWRcIiBpbiBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5zLnRvZ2dsZWQgPSBuZXdTdGF0ZS50b2dnbGVkXG4gICAgfVxuXG4gICAgaWYgKFwiY3VycmVudE9wdGlvbnNcIiBpbiBuZXdTdGF0ZSkge1xuICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gbmV3U3RhdGUuY3VycmVudE9wdGlvbnNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxpbmdOYW1lXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3N0eWxlXVxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IFtjYWNoZXNdXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKi9cbiAgc3R5bGluZ0ZvcihzdHlsaW5nTmFtZSwgc3R5bGUgPSB7fSwgY2FjaGVzID0gW10pIHtcbiAgICBsZXQgY3VzdG9tU3R5bGluZyA9IGRpZyh0aGlzLCBcInByb3BzXCIsIFwic3R5bGVzXCIsIHN0eWxpbmdOYW1lKVxuICAgIGNvbnN0IGJhc2VTdHlsZSA9IHsuLi5zdHlsZX1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3R5bGluZyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGF5YVNlbGVjdFN0eWxpbmdDb250ZXh0fSAqL1xuICAgICAgY3VzdG9tU3R5bGluZyA9IGN1c3RvbVN0eWxpbmcoe1xuICAgICAgICBvcGVuZWQ6IHRoaXMucy5vcGVuZWQsXG4gICAgICAgIG9wdGlvbnNQbGFjZW1lbnQ6IHRoaXMucy5vcHRpb25zUGxhY2VtZW50LFxuICAgICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgICAgc3R5bGU6IGJhc2VTdHlsZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tU3R5bGluZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2VTdHlsZSwgY3VzdG9tU3R5bGluZylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZShgc3R5bGluZ0Zvci0ke3N0eWxpbmdOYW1lfWAsIHN0eWxlLCBjYWNoZXMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIYXlhU2VsZWN0T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gICAqL1xuICBpY29uRm9yT3B0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IHt0b2dnbGVPcHRpb25zfSA9IHRoaXMucHJvcHMgfHwge31cbiAgICBjb25zdCB0b2dnbGVkID0gdGhpcy5nZXRUb2dnbGVkKClcblxuICAgIGlmICh0b2dnbGVPcHRpb25zICYmIChvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkpIHtcbiAgICAgIGNvbnN0IHRvZ2dsZWRWYWx1ZSA9IHRvZ2dsZWRbb3B0aW9uLnZhbHVlXVxuICAgICAgY29uc3QgdG9nZ2xlZE9wdGlvbiA9IHRvZ2dsZU9wdGlvbnMuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSA9PSB0b2dnbGVkVmFsdWUpXG5cbiAgICAgIGlmICghdG9nZ2xlZE9wdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgYSB0b2dnbGUgb3B0aW9uIGZvciB2YWx1ZTogJHt0b2dnbGVkVmFsdWV9YClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRvZ2dsZWRPcHRpb24uaWNvblxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hheWFTZWxlY3RPcHRpb259IG9wdGlvblxuICAgKiBAcGFyYW0ge1wiY3VycmVudFwifFwib3B0aW9uXCJ9IG1vZGVcbiAgICogQHJldHVybnMge2ltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX1cbiAgICovXG4gIHByZXNlbnRPcHRpb24gPSAob3B0aW9uLCBtb2RlKSA9PiB7XG4gICAgY29uc3Qge29wdGlvbkNvbnRlbnQsIHRvZ2dsZU9wdGlvbnN9ID0gdGhpcy5wcm9wcyB8fCB7fVxuICAgIGNvbnN0IHRvZ2dsZWQgPSB0aGlzLmdldFRvZ2dsZWQoKVxuICAgIGNvbnN0IGljb24gPSB0aGlzLmljb25Gb3JPcHRpb24ob3B0aW9uKVxuICAgIGNvbnN0IHRvZ2dsZVZhbHVlID0gdG9nZ2xlZFtvcHRpb24udmFsdWVdXG4gICAgY29uc3QgdG9nZ2xlT3B0aW9uID0gdG9nZ2xlT3B0aW9ucz8uZmluZCgodG9nZ2xlT3B0aW9uSSkgPT4gdG9nZ2xlT3B0aW9uSS52YWx1ZSA9PSB0b2dnbGVWYWx1ZSlcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZ2V0Q3VycmVudE9wdGlvblZhbHVlcygpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PSBvcHRpb24udmFsdWUpXG4gICAgbGV0IHN0eWxlXG4gICAgbGV0IGNvbnRlbnROb2RlXG5cbiAgICBpZiAobW9kZSA9PSBcImN1cnJlbnRcIikge1xuICAgICAgc3R5bGUgPSB0aGlzLnN0eWxpbmdGb3IoXCJjdXJyZW50T3B0aW9uUHJlc2VudGF0aW9uVGV4dFwiLCB7ZmxleDogMSwgd2hpdGVTcGFjZTogXCJub3dyYXBcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlID0gdGhpcy5zdHlsaW5nRm9yKFwib3B0aW9uUHJlc2VudGF0aW9uVGV4dFwiLCB7ZmxleDogMSwgd2hpdGVTcGFjZTogXCJub3dyYXBcIn0pXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJwcmVzZW50T3B0aW9uVmlld0RhdGFTZXRcIiwge1xuICAgICAgICAgIHRleHQ6IG9wdGlvbi50ZXh0LFxuICAgICAgICAgIHRvZ2dsZUljb246IHRvZ2dsZU9wdGlvbj8uaWNvbixcbiAgICAgICAgICB0b2dnbGVWYWx1ZTogdG9nZ2xlT3B0aW9uPy52YWx1ZSxcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlXG4gICAgICAgIH0sIFtvcHRpb24udGV4dCwgb3B0aW9uLnZhbHVlLCB0b2dnbGVPcHRpb24/Lmljb24sIHRvZ2dsZU9wdGlvbj8udmFsdWVdKX1cbiAgICAgICAgc3R5bGU9e3RoaXMuY2FjaGUoXCJvcHRpb25QcmVzZW50YXRpb25TdHlsZVwiLCB7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIn0pfVxuICAgICAgICB0ZXN0SUQ9XCJvcHRpb24tcHJlc2VudGF0aW9uXCJcbiAgICAgID5cbiAgICAgICAge3RvZ2dsZU9wdGlvbnMgJiYgIShvcHRpb24udmFsdWUgaW4gdG9nZ2xlZCkgJiZcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3RoaXMuY2FjaGUoXCJ0b2dnbGVJY29uUGxhY2Vob2xkZXJTdHlsZVwiLCB7d2lkdGg6IDIwfSl9XG4gICAgICAgICAgICB0ZXN0SUQ9XCJ0b2dnbGUtaWNvbi1wbGFjZWhvbGRlclwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7dG9nZ2xlT3B0aW9ucyAmJiAob3B0aW9uLnZhbHVlIGluIHRvZ2dsZWQpICYmXG4gICAgICAgICAgPFZpZXcgc3R5bGU9e3RoaXMuY2FjaGUoXCJ0b2dnbGVJY29uQ29udGFpbmVyU3R5bGVcIiwge2FsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLCB3aWR0aDogMjB9KX0+XG4gICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICAgIG5hbWU9e2ljb259XG4gICAgICAgICAgICAgIHRlc3RJRD1cInRvZ2dsZS1pY29uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICB9XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25Db250ZW50KSB7XG4gICAgICAgICAgICAvKiogQHR5cGUge0hheWFTZWxlY3RPcHRpb25SZW5kZXJDb250ZXh0fSAqL1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb25Db250ZW50KHtpY29uLCBtb2RlLCBvcHRpb24sIHNlbGVjdGVkLCB0b2dnbGVPcHRpb24sIHRvZ2dsZVZhbHVlLCB0b2dnbGVkfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gXCJjdXJyZW50XCIgJiYgb3B0aW9uLmN1cnJlbnRDb250ZW50KSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IG9wdGlvbi5jdXJyZW50Q29udGVudCgpXG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb24uY29udGVudCkge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSBvcHRpb24uY29udGVudCgpXG4gICAgICAgICAgfSBlbHNlIGlmIChcImh0bWxcIiBpbiBvcHRpb24gJiYgUGxhdGZvcm0uT1MgIT0gXCJ3ZWJcIikge1xuICAgICAgICAgICAgY29udGVudE5vZGUgPSA8UmVuZGVySHRtbCBzb3VyY2U9e3todG1sOiBkaWdnKG9wdGlvbiwgXCJodG1sXCIpfX0gLz5cbiAgICAgICAgICB9IGVsc2UgaWYgKFwiaHRtbFwiIGluIG9wdGlvbiAmJiBQbGF0Zm9ybS5PUyA9PSBcIndlYlwiKSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGRpZ2cob3B0aW9uLCBcImh0bWxcIil9fSAvPlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZW50Tm9kZSA9IChcbiAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICAgICAgdGVzdElEPVwib3B0aW9uLXByZXNlbnRhdGlvbi10ZXh0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtvcHRpb24udGV4dH1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcIm9wdGlvblByZXNlbnRhdGlvbkNvbnRlbnRTdHlsZVwiLCB7ZmxleDogMX0pfT5cbiAgICAgICAgICAgICAgICB7Y29udGVudE5vZGV9XG4gICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAge29wdGlvbi5yaWdodCAmJlxuICAgICAgICAgICAgICAgIDxWaWV3IHN0eWxlPXt0aGlzLmNhY2hlKFwib3B0aW9uUHJlc2VudGF0aW9uUmlnaHRTdHlsZVwiLCB7YWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsIG1hcmdpbkxlZnQ6IDh9KX0+XG4gICAgICAgICAgICAgICAgICB7b3B0aW9uLnJpZ2h0fVxuICAgICAgICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KSgpfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgc2V0Q3VycmVudEZyb21HaXZlblZhbHVlcygpIHtcbiAgICBjb25zdCB7b3B0aW9ucywgdmFsdWVzfSA9IHRoaXMucFxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSAmJiB2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5zLmN1cnJlbnRPcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gW11cbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3B0aW9ucyh7cGFnZTogdGhpcy5nZXRBY3RpdmVQYWdlKCksIHZhbHVlc30pXG4gICAgY29uc3Qge29wdGlvbnM6IGN1cnJlbnRPcHRpb25zfSA9IHRoaXMucGFyc2VPcHRpb25zUmVzdWx0KHJlc3VsdClcbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gY3VycmVudE9wdGlvbnM/Lm1hcCgoY3VycmVudE9wdGlvbikgPT4gY3VycmVudE9wdGlvbi52YWx1ZSlcbiAgICBjb25zdCBzdGF0ZVZhbHVlcyA9IHRoaXMucy5jdXJyZW50T3B0aW9ucz8ubWFwKChjdXJyZW50T3B0aW9uKSA9PiBjdXJyZW50T3B0aW9uLnZhbHVlKVxuXG4gICAgaWYgKGFueXRoaW5nRGlmZmVyZW50KGN1cnJlbnRWYWx1ZXMsIHN0YXRlVmFsdWVzKSkge1xuICAgICAgdGhpcy5zLmN1cnJlbnRPcHRpb25zID0gY3VycmVudE9wdGlvbnNcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgSGF5YVNlbGVjdFNoYXBlQ29tcG9uZW50ID0gc2hhcGVDb21wb25lbnQoSGF5YVNlbGVjdClcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhIYXlhU2VsZWN0U2hhcGVDb21wb25lbnQpXG4iXX0=