qms-angular 1.1.41 → 1.1.43

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. package/bundles/qms-angular.umd.js +1569 -441
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/common/enum/data-type.enum.js +2 -1
  4. package/esm2015/lib/common/enum/process-classification.enum.js +6 -0
  5. package/esm2015/lib/common/qms-icon.const.js +116 -111
  6. package/esm2015/lib/common/themes.const.js +2 -2
  7. package/esm2015/lib/components/app-icon/icon-registry.service.js +5 -2
  8. package/esm2015/lib/components/related/common/video.const.js +3 -1
  9. package/esm2015/lib/components/related/content/related-content.component.js +2 -2
  10. package/esm2015/lib/components/related/list-other-related/list-related.component.js +5 -2
  11. package/esm2015/lib/components/related/model/popup-data.model.js +3 -1
  12. package/esm2015/lib/components/related/model/related-data.model.js +1 -1
  13. package/esm2015/lib/components/related/popup/related-popup.component.js +48 -32
  14. package/esm2015/lib/components/related/related.module.js +3 -2
  15. package/esm2015/lib/components/related/risk/analysis/analysis.component.js +2 -2
  16. package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +24 -4
  17. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +5 -4
  18. package/esm2015/lib/components/select-one/select-one.component.js +2 -2
  19. package/esm2015/lib/components/select-process-document/select-process-document.component.js +15 -11
  20. package/esm2015/lib/components/tree/model/tree-config.model.js +1 -1
  21. package/esm2015/lib/components/tree/tree.component.js +12 -4
  22. package/esm2015/lib/components/treeNew/model/tree-node.model.js +1 -1
  23. package/esm2015/lib/components/treeNew/model/tree.model.js +1 -1
  24. package/esm2015/lib/components/treeNew/tree.component.js +8 -4
  25. package/esm2015/lib/components/treeNew/tree.function.js +8 -4
  26. package/esm2015/lib/model/en.js +86 -2
  27. package/esm2015/lib/model/no.js +87 -3
  28. package/esm2015/lib/model/sv.js +437 -0
  29. package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +15 -14
  30. package/esm2015/lib/qms-ckeditor-components/common/functions/resource.function.js +207 -0
  31. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
  32. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-url.model.js +1 -1
  33. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +262 -29
  34. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +102 -36
  35. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.js +1 -1
  36. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-video.model.js +16 -0
  37. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +39 -118
  38. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +10 -3
  39. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +7 -3
  40. package/esm2015/lib/services/translation-registry.service.js +7 -5
  41. package/fesm2015/qms-angular.js +1603 -503
  42. package/fesm2015/qms-angular.js.map +1 -1
  43. package/lib/common/enum/data-type.enum.d.ts +2 -1
  44. package/lib/common/enum/process-classification.enum.d.ts +4 -0
  45. package/lib/common/qms-icon.const.d.ts +1 -0
  46. package/lib/components/app-icon/icon-registry.service.d.ts +1 -0
  47. package/lib/components/related/common/video.const.d.ts +2 -0
  48. package/lib/components/related/content/related-content.component.d.ts +1 -1
  49. package/lib/components/related/list-other-related/list-related.component.d.ts +2 -2
  50. package/lib/components/related/model/popup-data.model.d.ts +3 -0
  51. package/lib/components/related/model/related-data.model.d.ts +1 -0
  52. package/lib/components/related/popup/related-popup.component.d.ts +7 -3
  53. package/lib/components/select-access-dialog/select-access-dialog.component.d.ts +3 -2
  54. package/lib/components/select-one/select-one.component.d.ts +1 -1
  55. package/lib/components/select-process-document/select-process-document.component.d.ts +5 -6
  56. package/lib/components/tree/model/tree-config.model.d.ts +1 -1
  57. package/lib/components/tree/tree.component.d.ts +1 -1
  58. package/lib/components/treeNew/model/tree-node.model.d.ts +1 -0
  59. package/lib/components/treeNew/model/tree.model.d.ts +1 -0
  60. package/lib/components/treeNew/tree.component.d.ts +5 -2
  61. package/lib/model/en.d.ts +84 -0
  62. package/lib/model/no.d.ts +84 -0
  63. package/lib/model/sv.d.ts +436 -0
  64. package/lib/qms-ckeditor-components/common/functions/common.function.d.ts +29 -10
  65. package/lib/qms-ckeditor-components/common/functions/resource.function.d.ts +194 -0
  66. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +3 -0
  67. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-url.model.d.ts +2 -0
  68. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +13 -2
  69. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +1 -0
  70. package/lib/qms-ckeditor-components/models/qms-ckeditor-imagemap.model.d.ts +1 -0
  71. package/lib/qms-ckeditor-components/models/qms-ckeditor-video.model.d.ts +10 -0
  72. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +1 -2
  73. package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +2 -1
  74. package/lib/services/translation-registry.service.d.ts +1 -0
  75. package/package.json +1 -1
  76. package/qms-angular.metadata.json +1 -1
  77. package/src/assets/jointjs/scss/bpmn.scss +914 -906
  78. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  79. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  80. package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
  81. package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-find-and-replace/src/findandreplaceui.js +223 -223
  82. package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/translations/no.po +21 -0
  83. package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/qmsCKEditorFullscreenPlugin.js +52 -50
  84. package/src/assets/qms-ckeditor-plugin/src/plugins/heading/headingui.js +115 -115
  85. package/src/assets/qms-ckeditor-plugin/src/plugins/heading/utils.js +42 -42
  86. package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkcommand.js +1 -1
  87. package/src/assets/qms-ckeditor-plugin/src/plugins/media/mediaembedediting.js +281 -283
  88. package/src/assets/qms-ckeditor-plugin/src/plugins/media/theme/mediaembed.css +30 -30
  89. package/src/assets/qms-ckeditor-plugin/src/plugins/media/theme/mediaembedediting.css +57 -57
  90. package/src/assets/qms-ckeditor-plugin/src/plugins/table/theme/snippet.css +3877 -3876
  91. package/src/assets/qms-ckeditor-plugin/src/plugins/video/theme/video.css +17 -17
  92. package/src/assets/qms-ckeditor-plugin/src/plugins/video/theme/videoresize.css +33 -32
  93. package/src/assets/qms-ckeditor-plugin/src/plugins/video/video/videoediting.js +81 -75
  94. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoresize/resizevideocommand.js +35 -35
  95. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoresize/videoresizeediting.js +104 -92
  96. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/browsevideodialogcommand.js +69 -25
  97. package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/uploadvideocommand.js +21 -21
  98. package/src/lib/components/related/popup/related-popup.component.scss +374 -350
  99. package/esm2015/lib/components/related/common/data-type.enum.js +0 -14
  100. package/esm2015/lib/components/select-one/common/data-type.enum.js +0 -14
  101. package/lib/components/related/common/data-type.enum.d.ts +0 -12
  102. package/lib/components/select-one/common/data-type.enum.d.ts +0 -12
@@ -22,7 +22,6 @@ import { QMSCKEditorGlobalService } from './services/qms-ckeditor-global.service
22
22
  import { QMSCKEditorAboutComponent } from './components/qms-ckeditor-about/qms-ckeditor-about.component';
23
23
  // import { CKEditor5 } from '@ckeditor/ckeditor5-angular/ckeditor';
24
24
  import { QMSCKEditorBpmnData } from "./models/qms-ckeditor-bpmn-data.model";
25
- import { DataType } from "../components/related/common/data-type.enum";
26
25
  import { PopupData } from "../components/related/model/popup-data.model";
27
26
  import { RelatedPopupComponent } from "../components/related/popup/related-popup.component";
28
27
  import { QMSCKEditorTreeService } from "./services/qms-ckeditor-tree.service";
@@ -30,6 +29,9 @@ import { QMSCKEditorFlowchartComponent } from "./components/qms-ckeditor-flowcha
30
29
  import { QmsCkeditorLinkSimpleComponent } from "./components/qms-ckeditor-link-simple/qms-ckeditor-link-simple.component";
31
30
  import { CKEditorImageUploadTypeConst } from './common/constants/ckeditorImageUploadType.const';
32
31
  import { VideoUploadMode } from './common/enums/video-upload-mode.enum';
32
+ import { QMSCKEditorVideo } from './models/qms-ckeditor-video.model';
33
+ import { VideoConst } from '../components/related/common/video.const';
34
+ import { DataType } from '../common/enum/data-type.enum';
33
35
  export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
34
36
  /**
35
37
  * Constructor
@@ -48,6 +50,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
48
50
  this.qmsckContentOutput = new EventEmitter();
49
51
  this.ckEditorEventConst = CKEditorEventConst;
50
52
  this.isToolbarItemsIdSet = false;
53
+ this.language = 'en';
51
54
  this.ckTagname = "div";
52
55
  }
53
56
  onMessage(event) {
@@ -92,6 +95,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
92
95
  this.ckEditor = this.qmsckPlugin.pluginObject;
93
96
  this.translate.getLanguageSubject$.pipe(takeUntil(this.ngUnsubcribe)).subscribe((res) => {
94
97
  if (res) {
98
+ this.language = res;
95
99
  this.LANG = this.translate.getObjectLang(res);
96
100
  }
97
101
  });
@@ -106,7 +110,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
106
110
  }
107
111
  toolbarItems += ',' + strToolbars; // disable qmsFlowchart until NK-440 done
108
112
  }
109
- this.ckeditorConfig = CKEditorCommonFunctions.getCKEditorConfiguration(toolbarItems, this.LANG);
113
+ this.ckeditorConfig = CKEditorCommonFunctions.getCKEditorConfiguration(toolbarItems, this.LANG, this.language);
110
114
  if (this.ckeditorConfig)
111
115
  this.ckeditorConfig.containerId = this.editorId;
112
116
  if (this.qmsckData.hideImgOptions) {
@@ -241,7 +245,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
241
245
  this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, mathTypeConfig);
242
246
  }
243
247
  onChanged({ editor }) {
244
- //this.qmsckContentInput = editor.getData();
248
+ // this.qmsckContentInput = editor.getData();
245
249
  this.qmsckContentOutput.emit(this.qmsckContentInput);
246
250
  }
247
251
  onBlur({ editor }) {
@@ -301,8 +305,10 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
301
305
  wordsBox.textContent = `${this.LANG.QMSCKEDITOR.WORDS}: ${stats.words} / ${this.LANG.QMSCKEDITOR.CHARACTERS}: ${stats.characters}`;
302
306
  }
303
307
  });
308
+ if (this.qmsckData.isReadOnly) {
309
+ editor.isReadOnly = true;
310
+ }
304
311
  this._setEditorInstanceObserver(this.editorId);
305
- this.setLabelTranslateForNonDropdownToolbarItems(editor);
306
312
  }
307
313
  /**
308
314
  * Add template - Load template
@@ -366,6 +372,8 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
366
372
  data.qmsckContentFields = qmsckContentFields;
367
373
  data.qmsckIsGetAnchorMoreContent = qmsckIsGetAnchorMoreContent;
368
374
  }
375
+ data.defaultTargetNewWindow = this.qmsckData.defaultTargetNewWindow;
376
+ data.enabledInterconnected = this.qmsckData.enabledInterconnected;
369
377
  let dialogTemplate;
370
378
  if (!this.qmsckPlugin.simpleMode) {
371
379
  dialogTemplate = this.dialog.open(QMSCKEditorLinkComponent, {
@@ -436,6 +444,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
436
444
  data.entityId = this.qmsckData.entityId;
437
445
  data.editorContent = this.qmsckContentInput;
438
446
  data.linkJavaScriptLinksAllowed = this.qmsckData.linkJavaScriptLinksAllowed;
447
+ data.enabledInterconnected = this.qmsckData.enabledInterconnected;
439
448
  const dialogTemplate = this.dialog.open(QMSCKEditorImageMapComponent, {
440
449
  data,
441
450
  disableClose: true,
@@ -577,6 +586,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
577
586
  .getUploadVideoList()
578
587
  .pipe(takeUntil(this.ngUnsubcribe))
579
588
  .subscribe((response) => {
589
+ var _a, _b, _c, _d, _e, _f, _g, _h;
580
590
  const videos = response || [];
581
591
  const config = {
582
592
  allowSelectFolder: false,
@@ -600,10 +610,12 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
600
610
  data.moduleName = this.LANG.QMSCKEDITOR.SELECT_VIDEO_FROM_ARCHIVE;
601
611
  data.moduleUploadImageName = this.LANG.QMSCKEDITOR.SELECT_VIDEO_IMAGE;
602
612
  data.moduleUploadFileName = this.LANG.QMSCKEDITOR.ADD_A_FILE;
613
+ data.videoData = new QMSCKEditorVideo(value.id, value.src, true, value.poster, ((_b = (_a = value.width) === null || _a === void 0 ? void 0 : _a.toString()) === null || _b === void 0 ? void 0 : _b.indexOf('%')) < 0 ? (_e = (_d = (_c = value.width) === null || _c === void 0 ? void 0 : _c.toString()) === null || _d === void 0 ? void 0 : _d.match(/\d/g)) === null || _e === void 0 ? void 0 : _e.join('') : null, (_h = (_g = (_f = value.height) === null || _f === void 0 ? void 0 : _f.toString()) === null || _g === void 0 ? void 0 : _g.match(/\d/g)) === null || _h === void 0 ? void 0 : _h.join(''));
614
+ data.canUpdateVideoProperties = true;
603
615
  data.treeData1 = videos.map((item) => {
604
616
  return {
605
- rootId: item.rootId,
606
- parentId: item.parentId,
617
+ rootId: `root-${item.rootId}`,
618
+ parentId: (item.parentId !== null && item.parentId !== "") ? `root-${item.parentId}` : item.parentId,
607
619
  rootName: item.rootName,
608
620
  subName: item.subName,
609
621
  childId: item.childId,
@@ -620,10 +632,20 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
620
632
  data.canUploadVideo = this.qmsckData.videoUploadMode === VideoUploadMode.AllowUpload;
621
633
  data.maxVideoThumbnailSizeKB = this.qmsckData.maxVideoThumbnailSizeKB;
622
634
  data.entityId = this.qmsckData.entityId;
635
+ if (value.selectedId) {
636
+ const disabledList = [data.treeData1.find(x => x.childId === value.selectedId)] || [];
637
+ data.disabledList = disabledList.map(x => {
638
+ return {
639
+ id: x.childId,
640
+ itemName: x.childName,
641
+ displayId: x.displayId,
642
+ parentId: null,
643
+ };
644
+ });
645
+ }
623
646
  const dialogRef = this.dialog.open(RelatedPopupComponent, {
624
- minWidth: "450px",
625
- maxWidth: "800px",
626
- minHeight: "620px",
647
+ width: "800px",
648
+ minHeight: "630px",
627
649
  data,
628
650
  panelClass: "qmsckeditor-browse-video-popup",
629
651
  });
@@ -634,21 +656,16 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
634
656
  }
635
657
  }, 100);
636
658
  dialogRef.afterClosed().subscribe((result) => {
637
- if (result) {
659
+ if (result && result.src) {
638
660
  let urls = [];
639
- if (result.requestUploadVideoUrl) {
640
- urls.push(result.requestUploadVideoUrl);
661
+ urls = [result.src];
662
+ if (!result.width || result.width <= 0) {
663
+ result.width = VideoConst.DEFAULT_VIDEO_WIDTH;
641
664
  }
642
- else {
643
- const ids = result.checkedNodeList.reduce((result, item) => {
644
- result[item.id.toString()] = item.id;
645
- return result;
646
- }, {});
647
- urls = videos
648
- .filter((i) => i.childId && !!ids[i.childId.toString()])
649
- .map((i) => i.url);
665
+ if (!result.height || result.height <= 0) {
666
+ result.height = VideoConst.DEFAULT_VIDEO_HEIGHT;
650
667
  }
651
- const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_BROWSE_VIDEO_RESP, { detail: { urls: urls, thumbnailUrl: result.imageRelativeUrl } });
668
+ const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_BROWSE_VIDEO_RESP, { detail: { urls: urls, thumbnailUrl: result.poster, id: result.id, width: result.width, height: result.height } });
652
669
  window.dispatchEvent(evt);
653
670
  }
654
671
  });
@@ -673,102 +690,6 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
673
690
  });
674
691
  this.toggleToolbarEventHandling();
675
692
  }
676
- setLabelTranslateForNonDropdownToolbarItems(editor) {
677
- var _a, _b;
678
- let allItemOnToolbar = (_b = (_a = editor.ui.view.toolbar) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b._items;
679
- allItemOnToolbar.forEach((el) => {
680
- if (el.label) {
681
- el.label = this.translateCKEditor(el.label);
682
- return;
683
- }
684
- if (el.buttonView && el.buttonView.label) {
685
- el.buttonView.label = this.translateCKEditor(el.buttonView.label);
686
- return;
687
- }
688
- });
689
- }
690
- translateCKEditor(label) {
691
- switch (label.toLowerCase()) {
692
- case ('font size'):
693
- return this.LANG.QMSCKEDITOR.FONT_SIZE;
694
- case ('font family'):
695
- return this.LANG.QMSCKEDITOR.FONT_FAMILY;
696
- case ('font color'):
697
- return this.LANG.QMSCKEDITOR.FONT_COLOR;
698
- case ('font background color'):
699
- return this.LANG.QMSCKEDITOR.FONT_BACKGROUND_COLOR;
700
- case ('bold'):
701
- return this.LANG.QMSCKEDITOR.BOLD;
702
- case ('italic'):
703
- return this.LANG.QMSCKEDITOR.ITALIC;
704
- case ('underline'):
705
- return this.LANG.QMSCKEDITOR.UNDERLINE;
706
- case ('strikethrough'):
707
- return this.LANG.QMSCKEDITOR.STRIKETHROUGH;
708
- case ('horizontal line'):
709
- return this.LANG.QMSCKEDITOR.HORIZONTAL_LINE;
710
- case ('page break'):
711
- return this.LANG.QMSCKEDITOR.PAGE_BREAK;
712
- case ('text alignment'):
713
- return this.LANG.QMSCKEDITOR.TEXT_ALIGNMENT;
714
- case ('bulleted list'):
715
- return this.LANG.QMSCKEDITOR.BULLETED_LIST;
716
- case ('numbered list'):
717
- return this.LANG.QMSCKEDITOR.NUMBERED_LIST;
718
- case ('decrease indent'):
719
- return this.LANG.QMSCKEDITOR.DECREASE_INDENT;
720
- case ('increase indent'):
721
- return this.LANG.QMSCKEDITOR.INCREASE_INDENT;
722
- case ('subscript'):
723
- return this.LANG.QMSCKEDITOR.SUBSCRIPT;
724
- case ('superscript'):
725
- return this.LANG.QMSCKEDITOR.SUPERSCRIPT;
726
- case ('undo'):
727
- return this.LANG.QMSCKEDITOR.UNDO;
728
- case ('redo'):
729
- return this.LANG.QMSCKEDITOR.REDO;
730
- case ('special characters'):
731
- return this.LANG.QMSCKEDITOR.SPECIAL_CHARACTERS;
732
- case ('block quote'):
733
- return this.LANG.QMSCKEDITOR.BLOCKQUOTE;
734
- case ('insert image'):
735
- return this.LANG.QMSCKEDITOR.INSERT_IMAGE;
736
- case ('insert media'):
737
- return this.LANG.QMSCKEDITOR.INSERT_MEDIA;
738
- case ('browse video'):
739
- return this.LANG.QMSCKEDITOR.BROWSE_VIDEO;
740
- case ('insert table'):
741
- return this.LANG.QMSCKEDITOR.INSERT_TABLE;
742
- case ('anchor'):
743
- return this.LANG.QMSCKEDITOR.ANCHOR;
744
- case ('tooltip'):
745
- return this.LANG.QMSCKEDITOR.TOOLTIP;
746
- case ('timestamp'):
747
- return this.LANG.QMSCKEDITOR.TIMESTAMP;
748
- case ('add template'):
749
- return this.LANG.QMSCKEDITOR.ADD_TEMPLATE;
750
- case ('templates'):
751
- return this.LANG.QMSCKEDITOR.TEMPLATES;
752
- case ('remove format'):
753
- return this.LANG.QMSCKEDITOR.REMOVE_FORMAT;
754
- case ('link'):
755
- return this.LANG.QMSCKEDITOR.LINK;
756
- case ('flowchart'):
757
- return this.LANG.QMSCKEDITOR.FLOWCHART;
758
- case ('business process model and notation'):
759
- return this.LANG.QMSCKEDITOR.BPMN;
760
- case ('about ckeditor'):
761
- return this.LANG.QMSCKEDITOR.ABOUT_CKEDITOR;
762
- case ('create table of contents'):
763
- return this.LANG.QMSCKEDITOR.CREATE_TABLE_OF_CONTENTS;
764
- case ('source'):
765
- return this.LANG.QMSCKEDITOR.SOURCE;
766
- case ('toggle toolbar'):
767
- return this.LANG.QMSCKEDITOR.TOGGLE_TOOLBAR;
768
- default:
769
- return label;
770
- }
771
- }
772
693
  }
773
694
  QMSCKEditorComponent.decorators = [
774
695
  { type: Component, args: [{
@@ -813,4 +734,4 @@ QMSCKEditorComponent.propDecorators = {
813
734
  qmsckContentOutput: [{ type: Output }],
814
735
  onMessage: [{ type: HostListener, args: ["window:message", ["$event"],] }]
815
736
  };
816
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvcW1zLWNrZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxTQUFTLEVBQTJCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9OLE9BQU8sRUFBZSxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sbUNBQW1DLENBQUM7QUFDN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyx1QkFBdUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUd6RSxPQUFPLGVBQWUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw4RUFBOEUsQ0FB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T3hCLHNCQUFzQjtZQWpCdEIsOEJBQThCO1lBWjJHLFNBQVM7WUFBL0YsVUFBVTs7O3dCQXlEakUsS0FBSzswQkFDTCxLQUFLO2dDQUNMLEtBQUs7aUNBQ0wsS0FBSzswQ0FDTCxLQUFLO3lCQUNMLEtBQUssU0FBQyxVQUFVO3VCQUNoQixLQUFLLFNBQUMsVUFBVTt1QkFDaEIsS0FBSztpQ0FDTCxNQUFNO3dCQWNOLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRbXNVcGxvYWRBZGFwdGVyLCBRbXNVcGxvYWRBZGFwdGVyQ29uZmlnIH0gZnJvbSAnLi9jb21tb24vY2xhc3Nlcy9xbXNVcGxvYWRBZGFwdGVyJztcclxuaW1wb3J0IHsgQ0tFZGl0b3JFdmVudENvbnN0IH0gZnJvbSAnLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRXZlbnQuY29uc3RhbnQnO1xyXG5pbXBvcnQgQ0tFZGl0b3JDb21tb25GdW5jdGlvbnMgZnJvbSAnLi9jb21tb24vZnVuY3Rpb25zL2NvbW1vbi5mdW5jdGlvbic7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRGF0YSB9IGZyb20gJy4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yUGx1Z2luIH0gZnJvbSAnLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1wbHVnaW4ubW9kZWwnO1xyXG5pbXBvcnQgUU1TQ0tFZGl0b3JMaW5rIGZyb20gJy4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItdXJsLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItZnVsbHNjcmVlbi9xbXMtY2tlZGl0b3ItZnVsbHNjcmVlbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckltYWdlTWFwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC9xbXMtY2tlZGl0b3ItaW1hZ2VtYXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1saW5rL3Ftcy1ja2VkaXRvci1saW5rLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yTG9hZFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1sb2FkLXRlbXBsYXRlL3Ftcy1ja2VkaXRvci1sb2FkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLXRlbXBsYXRlL3Ftcy1ja2VkaXRvci10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclRvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLXRvb2x0aXAvcW1zLWNrZWRpdG9yLXRvb2x0aXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JJbWFnZU1hcCB9IGZyb20gJy4vbW9kZWxzL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVGVtcGxhdGUgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItdGVtcGxhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclRvb2x0aXAgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItdG9vbHRpcC5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcW1zLWNrZWRpdG9yLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckFib3V0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1hYm91dC9xbXMtY2tlZGl0b3ItYWJvdXQuY29tcG9uZW50JztcclxuLy8gaW1wb3J0IHsgQ0tFZGl0b3I1IH0gZnJvbSAnQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyL2NrZWRpdG9yJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uRGF0YSB9IGZyb20gXCIuL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi1kYXRhLm1vZGVsXCI7XHJcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmVsYXRlZC9jb21tb24vZGF0YS10eXBlLmVudW1cIjtcclxuaW1wb3J0IHsgUG9wdXBEYXRhIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmVsYXRlZC9tb2RlbC9wb3B1cC1kYXRhLm1vZGVsXCI7XHJcbmltcG9ydCB7IFJlbGF0ZWRQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL3JlbGF0ZWQvcG9wdXAvcmVsYXRlZC1wb3B1cC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUcmVlU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci10cmVlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGbG93Y2hhcnRDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1mbG93Y2hhcnQvcW1zLWNrZWRpdG9yLWZsb3djaGFydC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUW1zQ2tlZGl0b3JMaW5rU2ltcGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbGluay1zaW1wbGUvcW1zLWNrZWRpdG9yLWxpbmstc2ltcGxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvckltYWdlVXBsb2FkVHlwZUNvbnN0IH0gZnJvbSAnLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9ySW1hZ2VVcGxvYWRUeXBlLmNvbnN0JztcclxuaW1wb3J0IHsgVmlkZW9VcGxvYWRNb2RlIH0gZnJvbSAnLi9jb21tb24vZW51bXMvdmlkZW8tdXBsb2FkLW1vZGUuZW51bSc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwicW1zLWNrZWRpdG9yXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3Ftcy1ja2VkaXRvci5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL3Ftcy1ja2VkaXRvci5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBRTVNDS0VkaXRvckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBRTVNDS0VkaXRvckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUU1TQ0tFZGl0b3JDb21wb25lbnRcclxuICAgIGV4dGVuZHMgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgVmFsaWRhdG9yIHtcclxuICAgIEBJbnB1dCgpIHFtc2NrRGF0YTogUU1TQ0tFZGl0b3JEYXRhO1xyXG4gICAgQElucHV0KCkgcW1zY2tQbHVnaW46IFFNU0NLRWRpdG9yUGx1Z2luO1xyXG4gICAgQElucHV0KCkgcW1zY2tDb250ZW50SW5wdXQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHFtc2NrQ29udGVudEZpZWxkcz86IFtdO1xyXG4gICAgQElucHV0KCkgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50PzogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgnZGlzYWJsZWQnKSBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCdyZXF1aXJlZCcpIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBlZGl0b3JJZCA9ICdxbXNja2VkaXRvcic7XHJcbiAgICBAT3V0cHV0KCkgcW1zY2tDb250ZW50T3V0cHV0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBMQU5HOiBhbnk7XHJcbiAgICBja0VkaXRvcjogYW55O1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgY2tlZGl0b3JDb25maWc6IGFueTtcclxuICAgIGNrRWRpdG9yRXZlbnRDb25zdCA9IENLRWRpdG9yRXZlbnRDb25zdDtcclxuICAgIGNvdW50V29yZDogbnVtYmVyO1xyXG4gICAgY291bnRDaGFyOiBudW1iZXI7XHJcbiAgICBlZGl0b3JJbnN0YW5jZTogYW55O1xyXG4gICAgY2tUYWduYW1lOiBzdHJpbmc7XHJcbiAgICB0b29sYmFySXRlbVByZWZpeElkOiBzdHJpbmc7XHJcbiAgICBpc1Rvb2xiYXJJdGVtc0lkU2V0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzptZXNzYWdlXCIsIFtcIiRldmVudFwiXSlcclxuICAgIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuZGF0YS5ldmVudE5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19URU1QTEFURV9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVFdmVudEhhbmRsaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MT0FEX1RFTVBMQVRFX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVGVtcGxhdGVFdmVudEhhbmRsaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MSU5LX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5saW5rRXZlbnRIYW5kbGluZyhcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5kYXRhLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zY2tDb250ZW50RmllbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfVE9PTFRJUF9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19JTUFHRU1BUF9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VNYXBFdmVudEhhbmRsaW5nKGV2ZW50LmRhdGEudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTl9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYnBtbkV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19BQk9VVF9DS0VESVRPUl9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWJvdXRDS0VkaXRvckV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19GTE9XQ0hBUlRfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3djaGFydEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19UT0dHTEVfVE9PTEJBUl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVUb29sYmFyRXZlbnRIYW5kbGluZygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlJPV1NFX1ZJREVPX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZVZpZGVvRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZ2xvYmFsU2VydmljZTogUU1TQ0tFZGl0b3JHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdHJlZVNlcnZpY2U6IFFNU0NLRWRpdG9yVHJlZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBxbXNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQ6IFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCxcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZlxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNrVGFnbmFtZSA9IFwiZGl2XCI7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50b29sYmFySXRlbVByZWZpeElkID0gYCR7dGhpcy5lZGl0b3JJZH1fdG9vbGJhcl9pdGVtX2A7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ0NLRWRpdG9yIGN1c3RvbSBidWlsZCc7XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvciA9IHRoaXMucW1zY2tQbHVnaW4ucGx1Z2luT2JqZWN0O1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgdG9vbGJhckl0ZW1zID0gdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhcjtcclxuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWRUb2dnbGVUb29sYmFyKCkgJiYgdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtcykge1xyXG4gICAgICAgICAgICBsZXQgc3RyVG9vbGJhcnMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zLnJlcGxhY2UoL3Ftc0Zsb3djaGFydCwvZywgXCJcIik7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5xbXNja0RhdGEuZW5hYmxlVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHN0clRvb2xiYXJzID0gc3RyVG9vbGJhcnMucmVwbGFjZSgvcW1zVGVtcGxhdGUsL2csIFwiXCIpOyAvLyBkaXNhYmxlIHFtc1RlbXBsYXRlIGlmIHVzZXIgZG9uJ3QgaGF2ZSBoYW5kYm9va0FkbWluIFJvbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMucW1zY2tEYXRhLnZpZGVvVXBsb2FkTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgc3RyVG9vbGJhcnMgPSBzdHJUb29sYmFycy5yZXBsYWNlKC92aWRlb1VwbG9hZCwvZywgXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9vbGJhckl0ZW1zICs9ICcsJyArIHN0clRvb2xiYXJzOyAvLyBkaXNhYmxlIHFtc0Zsb3djaGFydCB1bnRpbCBOSy00NDAgZG9uZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnID0gQ0tFZGl0b3JDb21tb25GdW5jdGlvbnMuZ2V0Q0tFZGl0b3JDb25maWd1cmF0aW9uKHRvb2xiYXJJdGVtcywgdGhpcy5MQU5HKTtcclxuICAgICAgICBpZiAodGhpcy5ja2VkaXRvckNvbmZpZylcclxuICAgICAgICAgICAgdGhpcy5ja2VkaXRvckNvbmZpZy5jb250YWluZXJJZCA9IHRoaXMuZWRpdG9ySWQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnFtc2NrRGF0YS5oaWRlSW1nT3B0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnID0gdGhpcy5oaWRlSW1hZ2VPcHRpb25zKHRoaXMuY2tlZGl0b3JDb25maWcsIHRoaXMucW1zY2tEYXRhLmhpZGVJbWdPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldEFwaVVybCh0aGlzLnFtc2NrRGF0YS5hcGlVcmwpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZE1hdGh0eXBlQ29uZmlnKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRNYXRoVHlwZUNvbmZpZygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkVGltZXN0YW1wQ29uZmlnKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRUaW1lc3RhbXBDb25maWcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFdQcm9vZnJlYWRlcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkV1Byb29mcmVhZGVyQ29uZmlnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFRPQ1Rvb2xiYXIoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFRvZ2dsZVRPQ0NvbmZpZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWRGdWxsU2NyZWVuQ29uZmlnKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRGdWxsU2NyZWVuQ29uZmlnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRvckluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZTogKGNvbnRlbnQ6IGFueSkgPT4gdm9pZDtcclxuICAgIG9uVG91Y2hlZDogKCkgPT4gdm9pZDtcclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgXCJjay1kaXNhYmxlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkV1Byb29mcmVhZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHdwcm9vZnJlYWRlcikvZ2ltO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyICYmXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNyY1VybCAmJlxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIgJiZcclxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkV1Byb29mcmVhZGVyQ29uZmlnKCkge1xyXG4gICAgICAgIGNvbnN0IHdwcm9vZnJlYWRlckNvbmZpZyA9IHtcclxuICAgICAgICAgICAgd3Byb29mcmVhZGVyOiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIuc2VydmljZUlkIHx8XHJcbiAgICAgICAgICAgIHRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zZXJ2aWNlSWQubGVuZ3RoID09IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy9GYWxsYmFjayB2YWx1ZSBvZiBzZXJ2aWNlSWQgcHJvcGVydHkgdG8gZGVtbyBzZXJ2aWNlSWRcclxuICAgICAgICAgICAgdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNlcnZpY2VJZCA9XHJcbiAgICAgICAgICAgICAgICBcIjE6S3BrdlEyLTZLTlVqLUwxVzN1Mi1DOWowSzEtWnYydFkxLUNmRE94LVdmR1JnMi1xWHRjaS1ZeXlFMzQtajA5SDQyLWIwYUN0My1kOWFcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICAgICAgICB3cHJvb2ZyZWFkZXJDb25maWdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZFRvZ2dsZVRvb2xiYXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8odG9nZ2xlVG9vbGJhcikvZ21pO1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMucW1zY2tEYXRhLnRvZ2dsZWRUb29sYmFySXRlbXNcclxuICAgICAgICAgICAgJiYgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXHJcbiAgICAgICAgICAgICYmIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9nZ2xlVG9vbGJhckNvbmZpZygpIHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMucW1zY2tEYXRhLnRvZ2dsZWRUb29sYmFySXRlbXMuc3BsaXQoJywnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG9nZ2xlVG9vbGJhckNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdG9nZ2xlVG9vbGJhckNvbmZpZzoge1xyXG4gICAgICAgICAgICAgICAgdG9vbGJhcjogaXRlbXMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXHJcbiAgICAgICAgICAgIHRvZ2dsZVRvb2xiYXJDb25maWdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZEZ1bGxTY3JlZW5Db25maWcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8ocW1zRnVsbHNjcmVlbikvZ2ltO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLmZ1bGxTY3JlZW5DbGFzcyAmJlxyXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRGdWxsU2NyZWVuQ29uZmlnKCkge1xyXG4gICAgICAgIGNvbnN0IGZ1bGxTY3JlZW5Db25maWcgPSB7XHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW5Db25maWc6IHtcclxuICAgICAgICAgICAgICAgIGNsYXNzOiB0aGlzLnFtc2NrRGF0YS5mdWxsU2NyZWVuQ2xhc3MsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW5Db25maWdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZFRPQ1Rvb2xiYXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8odGFibGVPZkNvbnRlbnRzKS9naW07XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS50YWJsZU9mQ29udGVudEhlYWRpbmdzICYmXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxyXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb2dnbGVUT0NDb25maWcoKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnFtc2NrRGF0YS50YWJsZU9mQ29udGVudEhlYWRpbmdzLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICBjb25zdCB0YWJsZU9mQ29udGVudHMgPSB7XHJcbiAgICAgICAgICAgIHRhYmxlT2ZDb250ZW50czoge1xyXG4gICAgICAgICAgICAgICAgc3VwcG9ydGVkSGVhZGluZ3M6IGl0ZW1zLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICAgICAgICB0YWJsZU9mQ29udGVudHNcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZFRpbWVzdGFtcENvbmZpZygpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gLyh0aW1lc3RhbXApL2dpbTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLnRpbWVzdGFtcEZvcm1hdCAmJlxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIgJiZcclxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGltZXN0YW1wQ29uZmlnKCkge1xyXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcENvbmZpZyA9IHtcclxuICAgICAgICAgICAgdGltZXN0YW1wQ29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICBkYXRldGltZUZvcm1hdDogdGhpcy5xbXNja0RhdGEudGltZXN0YW1wRm9ybWF0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICAgICAgICB0aW1lc3RhbXBDb25maWdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZE1hdGh0eXBlQ29uZmlnKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKE1hdGhUeXBlKXwoQ2hlbVR5cGUpL2dpbTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLm1hdGh0eXBlU2VydmljZVVybCAmJlxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIgJiZcclxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkTWF0aFR5cGVDb25maWcoKSB7XHJcbiAgICAgICAgY29uc3QgbWF0aFR5cGVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIG1hdGhUeXBlUGFyYW1ldGVyczoge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZVByb3ZpZGVyUHJvcGVydGllczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFVSSTogdGhpcy5xbXNja0RhdGEubWF0aHR5cGVTZXJ2aWNlVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcjogXCJhc3B4XCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICAgICAgICBtYXRoVHlwZUNvbmZpZ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hhbmdlZCh7IGVkaXRvciB9KSB7XHJcbiAgICAgICAgLy90aGlzLnFtc2NrQ29udGVudElucHV0ID0gZWRpdG9yLmdldERhdGEoKTtcclxuICAgICAgICB0aGlzLnFtc2NrQ29udGVudE91dHB1dC5lbWl0KHRoaXMucW1zY2tDb250ZW50SW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJsdXIoeyBlZGl0b3IgfSkge1xyXG4gICAgICAgIHRoaXMucW1zY2tDb250ZW50SW5wdXQgPSBlZGl0b3IuZ2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMucW1zY2tDb250ZW50T3V0cHV0LmVtaXQodGhpcy5xbXNja0NvbnRlbnRJbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnFtc2NrQ29udGVudElucHV0ICYmICF0aGlzLnJlcXVpcmVkXHJcbiAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBjLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlSW1hZ2VPcHRpb25zKGNvbmZpZywgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1BcnJheSA9IG9wdGlvbnMuc3BsaXQoJywnKTtcclxuICAgICAgICBpdGVtQXJyYXkuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgY29uZmlnLmltYWdlLnRvb2xiYXIgPSBjb25maWcuaW1hZ2UudG9vbGJhci5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtICE9PSBlbGVtZW50O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIG9uUmVhZHlcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uUmVhZHkoZWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JJbnN0YW5jZSA9IGVkaXRvcjtcclxuICAgICAgICBpZiAodGhpcy5xbXNja0NvbnRlbnRJbnB1dCkge1xyXG4gICAgICAgICAgICBlZGl0b3Iuc2V0RGF0YSh0aGlzLnFtc2NrQ29udGVudElucHV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbml0RWRpdG9yKGVkaXRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yKGVkaXRvcikge1xyXG4gICAgICAgIGNvbnN0IGltYWdlVXBsb2FkVHlwZXMgPSBDS0VkaXRvckltYWdlVXBsb2FkVHlwZUNvbnN0LlFNU0NLX0lNQUdFX1RZUEVTX1NVUFBPUlRfREVGQVVMVDtcclxuICAgICAgICBjb25zdCBjb25maWc6IFFtc1VwbG9hZEFkYXB0ZXJDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGFwaVVybDogdGhpcy5xbXNja0RhdGEuYXBpVXJsLFxyXG4gICAgICAgICAgICBMQU5HOiB0aGlzLkxBTkcsXHJcbiAgICAgICAgICAgIGltYWdlVXBsb2FkVHlwZXNcclxuICAgICAgICB9O1xyXG4gICAgICAgIGVkaXRvci5wbHVnaW5zLmdldChcIkZpbGVSZXBvc2l0b3J5XCIpLmNyZWF0ZVVwbG9hZEFkYXB0ZXIgPSAobG9hZGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUW1zVXBsb2FkQWRhcHRlcihsb2FkZXIsIGNvbmZpZyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWRpdG9yLnVpXHJcbiAgICAgICAgICAgIC5nZXRFZGl0YWJsZUVsZW1lbnQoKVxyXG4gICAgICAgICAgICAucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoXHJcbiAgICAgICAgICAgICAgICBlZGl0b3IudWkudmlldy50b29sYmFyLmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBlZGl0b3IudWkuZ2V0RWRpdGFibGVFbGVtZW50KClcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gQXBwZWQgV29yZGNvdW50IHRvIENLZWRpdG9yXHJcbiAgICAgICAgZWRpdG9yLnBsdWdpbnMuZ2V0KFwiV29yZENvdW50XCIpLm9uKFwidXBkYXRlXCIsIChldnQsIHN0YXRzKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIFByaW50cyB0aGUgY3VycmVudCBjb250ZW50IHN0YXRpc3RpY3MuXHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzQm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNcIiArIHRoaXMuZWRpdG9ySWQgKyBcIiAud29yZGNvdW50LWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIGlmICghIXdvcmRzQm94KSB7XHJcbiAgICAgICAgICAgICAgICB3b3Jkc0JveC50ZXh0Q29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5XT1JEU306ICR7c3RhdHMud29yZHN9IC8gJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQ0hBUkFDVEVSU306ICR7c3RhdHMuY2hhcmFjdGVyc31gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NldEVkaXRvckluc3RhbmNlT2JzZXJ2ZXIodGhpcy5lZGl0b3JJZCk7XHJcbiAgICAgICAgdGhpcy5zZXRMYWJlbFRyYW5zbGF0ZUZvck5vbkRyb3Bkb3duVG9vbGJhckl0ZW1zKGVkaXRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgdGVtcGxhdGUgLSBMb2FkIHRlbXBsYXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0ZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JUZW1wbGF0ZSA9IG5ldyBRTVNDS0VkaXRvclRlbXBsYXRlKCk7XHJcbiAgICAgICAgZGF0YS5pZCA9IDA7XHJcbiAgICAgICAgZGF0YS5odG1sID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcclxuICAgICAgICBkYXRhLmVkaXQgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IFwiNTQwcHhcIixcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRET1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCB0ZW1wbGF0ZSAtIExvYWQgdGVtcGxhdGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGxvYWRUZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yTG9hZFRlbXBsYXRlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXHJcbiAgICAgICAgICAgIGhlaWdodDogXCI3MDBweFwiLFxyXG4gICAgICAgICAgICBkYXRhOiB7IGVuYWJsZUVkaXRUZW1wbGF0ZTogdGhpcy5xbXNja0RhdGEuZW5hYmxlVGVtcGxhdGUgfSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0xPQURfVEVNUExBVEVfUExVR0lOX1JFU1AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuY2hvciAtIExpbmsgLSBJbWFnZSBtYXBwaW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsaW5rRXZlbnRIYW5kbGluZyhcclxuICAgICAgICBsaW5rLFxyXG4gICAgICAgIHFtc2NrQ29udGVudEZpZWxkcz8sXHJcbiAgICAgICAgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50P1xyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGxpbmsuY2tlZGl0b3JJZCAhPSB0aGlzLmVkaXRvckluc3RhbmNlLmlkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yTGluaygpO1xyXG4gICAgICAgIGRhdGEgPSBsaW5rO1xyXG4gICAgICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5tb2R1bGU7XHJcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xyXG4gICAgICAgIGlmIChxbXNja0NvbnRlbnRGaWVsZHMgJiYgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGRhdGEucW1zY2tDb250ZW50RmllbGRzID0gcW1zY2tDb250ZW50RmllbGRzO1xyXG4gICAgICAgICAgICBkYXRhLnFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudCA9IHFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkaWFsb2dUZW1wbGF0ZTtcclxuICAgICAgICBpZiAoIXRoaXMucW1zY2tQbHVnaW4uc2ltcGxlTW9kZSkge1xyXG4gICAgICAgICAgICBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JMaW5rQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjY2MHB4XCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUW1zQ2tlZGl0b3JMaW5rU2ltcGxlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIwMHB4XCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudCh0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MSU5LX1BMVUdJTl9SRVNQLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUb29sdGlwIG1hcHBpbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvb2x0aXBFdmVudEhhbmRsaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JUb29sdGlwKCk7XHJcbiAgICAgICAgZGF0YS50ZXh0ID0gdmFsdWUudGV4dDtcclxuICAgICAgICBkYXRhLmNvbnRlbnQgPSB2YWx1ZS5jb250ZW50O1xyXG4gICAgICAgIGRhdGEuY2tFZGl0b3IgPSB0aGlzLnFtc2NrUGx1Z2luLnBsdWdpbk9iamVjdDtcclxuXHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yVG9vbHRpcENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IFwiNTU1cHhcIixcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPT0xUSVBfUExVR0lOX1JFU1AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltYWdlTWFwIG1hcHBpbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIGltYWdlTWFwRXZlbnRIYW5kbGluZyh2YWx1ZSkge1xyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9ySW1hZ2VNYXAoKTtcclxuICAgICAgICBkYXRhLm5hbWUgPSB2YWx1ZS5uYW1lO1xyXG4gICAgICAgIGRhdGEuYXJlYXMgPSB2YWx1ZS5hcmVhcztcclxuICAgICAgICBkYXRhLmltYWdlVXJsID0gdmFsdWUuaW1hZ2VVcmw7XHJcbiAgICAgICAgZGF0YS5pbWFnZVdpZHRoID0gdmFsdWUuaW1hZ2VXaWR0aDtcclxuICAgICAgICBkYXRhLmltYWdlSGVpZ2h0ID0gdmFsdWUuaW1hZ2VIZWlnaHQ7XHJcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5tb2R1bGU7XHJcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xyXG4gICAgICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICAgICAgZGF0YS5saW5rSmF2YVNjcmlwdExpbmtzQWxsb3dlZCA9IHRoaXMucW1zY2tEYXRhLmxpbmtKYXZhU2NyaXB0TGlua3NBbGxvd2VkO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckltYWdlTWFwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19JTUFHRU1BUF9QTFVHSU5fUkVTUCxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgIEJ1c2luZXNzIFByb2Nlc3MgTW9kZWwgYW5kIE5vdGF0aW9uXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGJwbW5FdmVudEhhbmRsaW5nKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvckJwbW5EYXRhKCk7XHJcbiAgICAgICAgZGF0YS5pZCA9IGlkO1xyXG4gICAgICAgIGRhdGEubW9kdWxlID0gdGhpcy5xbXNja0RhdGEubW9kdWxlO1xyXG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcclxuICAgICAgICBkYXRhLmVkaXRvckNvbnRlbnQgPSB0aGlzLnFtc2NrQ29udGVudElucHV0O1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckJwbW5Db21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogXCIxMDB2d1wiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxyXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IFwiMTAwdndcIixcclxuICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU5fUExVR0lOX1JFU1AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICAgQWJvdXQgQ0tFZGl0b3JcclxuICAgKi9cclxuICAgIHB1YmxpYyBhYm91dENLRWRpdG9yRXZlbnRIYW5kbGluZyh2ZXJzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JBYm91dENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogXCI1MDBweFwiLFxyXG4gICAgICAgICAgICBkYXRhOiB2ZXJzaW9uLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4geyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICBUb29sYmFyIHRvZ2dsZVxyXG4gIFxyXG4gICAgICBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuXHJcbiAgICAgIFRyYWNraW5nIHN0YXR1cyBhbmQgcHJvZ3Jlc3Mgb2YgdGhlIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ja2VkaXRvci9ja2VkaXRvcjUvaXNzdWVzLzczODNcclxuICBcclxuICAgICAgLSBSZW5kZXIgYm90aCBkZWZhdWx0IHRvb2xiYXIgYW5kIHRvZ2dsZSB0b29sYmFyIGF0IGluaXQgdGltZVxyXG4gICAgICAtIFNldCBJRCBmb3IgdG9vbGJhciBpdGVtcyB1c2luZyBpbmRleDpcclxuICAgICAgICArIEZyb20gaW5kZXggMCB0byB0b29sYmFyTGVuZ3RoIC0gMSBpcyB0aGUgZGVmYXVsdCB0b29sYmFyXHJcbiAgICAgICAgKyBGcm9tIGluZGV4IHRvb2xiYXJMZW5ndGggb24gaXMgdGhlIHRvZ2dsZSB0b29sYmFyXHJcbiAgICAgIC0gU2hvdy9oaWRlIGRlZmF1bHQgYW5kIHRvZ2dsZSB0b29sYmFyIGJ5IHNldCBkaXNwbGF5IG5vbmUgdG8gY29ycmVzcG9uZGluZyB0b29sYmFyIGl0ZW1zIGJhc2VkIG9uIElEXHJcbiAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCkge1xyXG4gICAgICAgIGNvbnN0IHFtc2NrZWRpdG9yID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xyXG4gICAgICAgIGNvbnN0IHRvZ2dsZUF0dHJpYnV0ZSA9ICdpc1RvZ2dsZVRvb2xiYXInO1xyXG4gICAgICAgIGNvbnN0IGNrZWRpdG9yVGFnID0gJ2NrZWRpdG9yJztcclxuXHJcbiAgICAgICAgaWYgKHFtc2NrZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVG9nZ2xlVG9vbGJhciA9XHJcbiAgICAgICAgICAgICAgICBxbXNja2VkaXRvci5nZXRBdHRyaWJ1dGUodG9nZ2xlQXR0cmlidXRlKSA9PSBcInRydWVcIjtcclxuICAgICAgICAgICAgaWYgKGlzVG9nZ2xlVG9vbGJhcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VG9vbGJhclZpZXdNb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcW1zY2tlZGl0b3Iuc2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSwgJ2ZhbHNlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUb29sYmFyVmlld01vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcW1zY2tlZGl0b3Iuc2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSwgJ3RydWUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldFRvb2xiYXJWaWV3TW9kZShzaG93VG9nZ2xlVG9vbGJhcjogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IHRvb2xiYXJMZW5ndGggPSB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyPy5zcGxpdCgnLCcpLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICBJdGVtcyBpbiB0b29sYmFyIGFyZSBpbmRleGVkOlxyXG4gICAgICAgICAgLSBGcm9tIGluZGV4IDAgdG8gdG9vbGJhckxlbmd0aCAtIDEgaXMgdGhlIGRlZmF1bHQgdG9vbGJhclxyXG4gICAgICAgICAgLSBGcm9tIGluZGV4IHRvb2xiYXJMZW5ndGggb24gaXMgdGhlIHRvZ2dsZSB0b29sYmFyXHJcbiAgICAgICAgKi9cclxuICAgICAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8ucHJldkFsbCgpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHNob3dUb2dnbGVUb29sYmFyID8gJ25vbmUnIDogJyc7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgJChgIyR7dGhpcy50b29sYmFySXRlbVByZWZpeElkfSR7dG9vbGJhckxlbmd0aCAtIDF9YCk/LmNzcygnZGlzcGxheScsIHNob3dUb2dnbGVUb29sYmFyID8gJ25vbmUnIDogJycpO1xyXG5cclxuICAgICAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8ubmV4dEFsbCgpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHNob3dUb2dnbGVUb29sYmFyID8gJycgOiAnbm9uZSc7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZsb3djaGFydFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmxvd2NoYXJ0RXZlbnRIYW5kbGluZyhpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yRmxvd2NoYXJ0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcIjg5dndcIixcclxuICAgICAgICAgICAgbWF4V2lkdGg6IFwiMTAwdndcIixcclxuICAgICAgICAgICAgaGVpZ2h0OiBcIjcyNXB4XCIsXHJcbiAgICAgICAgICAgIG1heEhlaWdodDogXCIxMDB2d1wiLFxyXG4gICAgICAgICAgICBkYXRhOiBpZCxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0ZMT1dDSEFSVF9QTFVHSU5fUkVTUCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnJvd3NlIFZpZGVvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBicm93c2VWaWRlb0V2ZW50SGFuZGxpbmcodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRVcGxvYWRWaWRlb0xpc3QoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW9zID0gcmVzcG9uc2UgfHwgW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyZWFPZkN1cnJlbnRQcm9jZXNzOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDaGVja0JveDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IHRoaXMucW1zY2tEYXRhLnVwbG9hZFZpZGVvQWxsb3dNdWx0aXBsZUNoZWNrLFxyXG4gICAgICAgICAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZUlkOiBEYXRhVHlwZS5kb2N1bWVudCxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuSWNvbjogXCJmb2xkZXJfb3BlblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6IFwiIzE5NTRBOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlSWNvbjogXCJmb2xkZXJfZmlsbGVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6IFwiIzRhY2FmZlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JY29uOiBcImluc2VydF9kcml2ZV9maWxlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUljb25QYXRoOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JY29uQmFzZTY0OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRBbGw6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YTogUG9wdXBEYXRhID0gbmV3IFBvcHVwRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5tb2R1bGVJZCA9IDI7XHJcbiAgICAgICAgICAgICAgICBkYXRhLm1vZHVsZU5hbWUgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU0VMRUNUX1ZJREVPX0ZST01fQVJDSElWRTtcclxuICAgICAgICAgICAgICAgIGRhdGEubW9kdWxlVXBsb2FkSW1hZ2VOYW1lID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlNFTEVDVF9WSURFT19JTUFHRTtcclxuICAgICAgICAgICAgICAgIGRhdGEubW9kdWxlVXBsb2FkRmlsZU5hbWUgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQUREX0FfRklMRTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRhLnRyZWVEYXRhMSA9IHZpZGVvcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290SWQ6IGl0ZW0ucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE5hbWU6IGl0ZW0ucm9vdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk5hbWU6IGl0ZW0uc3ViTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJZDogaXRlbS5jaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5hbWU6IGl0ZW0uY2hpbGROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogaXRlbS5zdGF0dXNJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiBpdGVtLmRpc3BsYXlJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6IGl0ZW0uY29udGVudFR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXRlbS51cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZGF0YS50cmVlRGF0YTIgPSBbXTtcclxuICAgICAgICAgICAgICAgIGRhdGEudHJlZUNvbmZpZzEgPSBjb25maWc7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmNhblVwbG9hZEltYWdlID0gdmlkZW9zLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGRhdGEuY2FuVXBsb2FkVmlkZW8gPSB0aGlzLnFtc2NrRGF0YS52aWRlb1VwbG9hZE1vZGUgPT09IFZpZGVvVXBsb2FkTW9kZS5BbGxvd1VwbG9hZDtcclxuICAgICAgICAgICAgICAgIGRhdGEubWF4VmlkZW9UaHVtYm5haWxTaXplS0IgPSB0aGlzLnFtc2NrRGF0YS5tYXhWaWRlb1RodW1ibmFpbFNpemVLQjtcclxuICAgICAgICAgICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUmVsYXRlZFBvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IFwiNDUwcHhcIixcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogXCI4MDBweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogXCI2MjBweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogXCJxbXNja2VkaXRvci1icm93c2UtdmlkZW8tcG9wdXBcIixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEJveCA9IHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi5xbXNja2VkaXRvci1icm93c2UtdmlkZW8tcG9wdXAgI3Ftc2xpYl9yZWxhdGVkX3BvcHVwX3NlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEJveC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXF1ZXN0VXBsb2FkVmlkZW9VcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHMucHVzaChyZXN1bHQucmVxdWVzdFVwbG9hZFZpZGVvVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkcyA9IHJlc3VsdC5jaGVja2VkTm9kZUxpc3QucmVkdWNlKChyZXN1bHQsIGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaXRlbS5pZC50b1N0cmluZygpXSA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHMgPSB2aWRlb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChpKSA9PiBpLmNoaWxkSWQgJiYgISFpZHNbaS5jaGlsZElkLnRvU3RyaW5nKCldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGkpID0+IGkudXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlJPV1NFX1ZJREVPX1JFU1AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRldGFpbDogeyB1cmxzOiB1cmxzLCB0aHVtYm5haWxVcmw6IHJlc3VsdC5pbWFnZVJlbGF0aXZlVXJsIH0gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZXRFZGl0b3JJbnN0YW5jZU9ic2VydmVyKGVkaXRvcklkOiBzdHJpbmcpIHtcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ0RPTU5vZGVJbnNlcnRlZCcpLm9uKCdET01Ob2RlSW5zZXJ0ZWQnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNUb29sYmFySXRlbXNJZFNldCAmJiAkKGUudGFyZ2V0KS5oYXMoJyMnICsgZWRpdG9ySWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJZEZvclRvb2xiYXJJdGVtcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0SWRGb3JUb29sYmFySXRlbXMoKSB7XHJcbiAgICAgICAgY29uc3QgdG9vbGJhckl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgJHt0aGlzLmVkaXRvcklkID8gJyMnICsgdGhpcy5lZGl0b3JJZCA6ICcnfSAuY2stdG9vbGJhcl9faXRlbXNgKT8uY2hpbGRyZW4gfHwgW107XHJcbiAgICAgICAgaWYgKCF0b29sYmFySXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1Rvb2xiYXJJdGVtc0lkU2V0ID0gdHJ1ZTtcclxuICAgICAgICAoQXJyYXkuZnJvbSh0b29sYmFySXRlbXMpIGFzIEhUTUxFbGVtZW50W10pLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uaWQgPSBgJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHtpbmRleH1gO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRMYWJlbFRyYW5zbGF0ZUZvck5vbkRyb3Bkb3duVG9vbGJhckl0ZW1zKGVkaXRvcikge1xyXG4gICAgICAgIGxldCBhbGxJdGVtT25Ub29sYmFyID0gZWRpdG9yLnVpLnZpZXcudG9vbGJhcj8uaXRlbXM/Ll9pdGVtcztcclxuICAgICAgICBhbGxJdGVtT25Ub29sYmFyLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbC5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgZWwubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZUNLRWRpdG9yKGVsLmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWwuYnV0dG9uVmlldyAmJiBlbC5idXR0b25WaWV3LmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5idXR0b25WaWV3LmxhYmVsID0gdGhpcy50cmFuc2xhdGVDS0VkaXRvcihlbC5idXR0b25WaWV3LmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIHByaXZhdGUgdHJhbnNsYXRlQ0tFZGl0b3IobGFiZWw6IHN0cmluZykge1xyXG4gICAgICAgIHN3aXRjaCAobGFiZWwudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjYXNlICgnZm9udCBzaXplJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkZPTlRfU0laRTtcclxuICAgICAgICAgICAgY2FzZSAoJ2ZvbnQgZmFtaWx5Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkZPTlRfRkFNSUxZO1xyXG4gICAgICAgICAgICBjYXNlICgnZm9udCBjb2xvcicpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5GT05UX0NPTE9SO1xyXG4gICAgICAgICAgICBjYXNlICgnZm9udCBiYWNrZ3JvdW5kIGNvbG9yJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkZPTlRfQkFDS0dST1VORF9DT0xPUjtcclxuICAgICAgICAgICAgY2FzZSAoJ2JvbGQnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQk9MRDtcclxuICAgICAgICAgICAgY2FzZSAoJ2l0YWxpYycpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5JVEFMSUM7XHJcbiAgICAgICAgICAgIGNhc2UgKCd1bmRlcmxpbmUnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVU5ERVJMSU5FO1xyXG4gICAgICAgICAgICBjYXNlICgnc3RyaWtldGhyb3VnaCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5TVFJJS0VUSFJPVUdIO1xyXG4gICAgICAgICAgICBjYXNlICgnaG9yaXpvbnRhbCBsaW5lJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkhPUklaT05UQUxfTElORTtcclxuICAgICAgICAgICAgY2FzZSAoJ3BhZ2UgYnJlYWsnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuUEFHRV9CUkVBSztcclxuICAgICAgICAgICAgY2FzZSAoJ3RleHQgYWxpZ25tZW50Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRFWFRfQUxJR05NRU5UO1xyXG4gICAgICAgICAgICBjYXNlICgnYnVsbGV0ZWQgbGlzdCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5CVUxMRVRFRF9MSVNUO1xyXG4gICAgICAgICAgICBjYXNlICgnbnVtYmVyZWQgbGlzdCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5OVU1CRVJFRF9MSVNUO1xyXG4gICAgICAgICAgICBjYXNlICgnZGVjcmVhc2UgaW5kZW50Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkRFQ1JFQVNFX0lOREVOVDtcclxuICAgICAgICAgICAgY2FzZSAoJ2luY3JlYXNlIGluZGVudCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5JTkNSRUFTRV9JTkRFTlQ7XHJcbiAgICAgICAgICAgIGNhc2UgKCdzdWJzY3JpcHQnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU1VCU0NSSVBUO1xyXG4gICAgICAgICAgICBjYXNlICgnc3VwZXJzY3JpcHQnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU1VQRVJTQ1JJUFQ7XHJcbiAgICAgICAgICAgIGNhc2UgKCd1bmRvJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlVORE87XHJcbiAgICAgICAgICAgIGNhc2UgKCdyZWRvJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlJFRE87XHJcbiAgICAgICAgICAgIGNhc2UgKCdzcGVjaWFsIGNoYXJhY3RlcnMnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU1BFQ0lBTF9DSEFSQUNURVJTO1xyXG4gICAgICAgICAgICBjYXNlICgnYmxvY2sgcXVvdGUnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQkxPQ0tRVU9URTtcclxuICAgICAgICAgICAgY2FzZSAoJ2luc2VydCBpbWFnZScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5JTlNFUlRfSU1BR0U7XHJcbiAgICAgICAgICAgIGNhc2UgKCdpbnNlcnQgbWVkaWEnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSU5TRVJUX01FRElBO1xyXG4gICAgICAgICAgICBjYXNlICgnYnJvd3NlIHZpZGVvJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkJST1dTRV9WSURFTztcclxuICAgICAgICAgICAgY2FzZSAoJ2luc2VydCB0YWJsZScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5JTlNFUlRfVEFCTEU7XHJcbiAgICAgICAgICAgIGNhc2UgKCdhbmNob3InKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQU5DSE9SO1xyXG4gICAgICAgICAgICBjYXNlICgndG9vbHRpcCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5UT09MVElQO1xyXG4gICAgICAgICAgICBjYXNlICgndGltZXN0YW1wJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRJTUVTVEFNUDtcclxuICAgICAgICAgICAgY2FzZSAoJ2FkZCB0ZW1wbGF0ZScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5BRERfVEVNUExBVEU7XHJcbiAgICAgICAgICAgIGNhc2UgKCd0ZW1wbGF0ZXMnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVEVNUExBVEVTO1xyXG4gICAgICAgICAgICBjYXNlICgncmVtb3ZlIGZvcm1hdCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5SRU1PVkVfRk9STUFUO1xyXG4gICAgICAgICAgICBjYXNlICgnbGluaycpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5MSU5LO1xyXG4gICAgICAgICAgICBjYXNlICgnZmxvd2NoYXJ0Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkZMT1dDSEFSVDtcclxuICAgICAgICAgICAgY2FzZSAoJ2J1c2luZXNzIHByb2Nlc3MgbW9kZWwgYW5kIG5vdGF0aW9uJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkJQTU47XHJcbiAgICAgICAgICAgIGNhc2UgKCdhYm91dCBja2VkaXRvcicpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5BQk9VVF9DS0VESVRPUjtcclxuICAgICAgICAgICAgY2FzZSAoJ2NyZWF0ZSB0YWJsZSBvZiBjb250ZW50cycpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5DUkVBVEVfVEFCTEVfT0ZfQ09OVEVOVFM7XHJcbiAgICAgICAgICAgIGNhc2UgKCdzb3VyY2UnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU09VUkNFO1xyXG4gICAgICAgICAgICBjYXNlICgndG9nZ2xlIHRvb2xiYXInKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVE9HR0xFX1RPT0xCQVI7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
737
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvcW1zLWNrZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0wsT0FBTyxFQUFlLGFBQWEsRUFBRSxpQkFBaUIsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGdCQUFnQixFQUEwQixNQUFNLG1DQUFtQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQy9FLE9BQU8sdUJBQXVCLE1BQU0sb0NBQW9DLENBQUM7QUFHekUsT0FBTyxlQUFlLE1BQU0sd0NBQXdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDdEcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDeEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDdEcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOEVBQThFLENBQUM7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LDhpQkFBNEM7Z0JBRTVDLFNBQVMsRUFBRTtvQkFDUCw4QkFBOEI7b0JBQzlCO3dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7d0JBQ25ELEtBQUssRUFBRSxJQUFJO3FCQUNkO29CQUNEO3dCQUNJLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO3dCQUNuRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtpQkFDSjtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2xEOzs7WUF0RFEsU0FBUztZQUVULHVCQUF1QjtZQWtCdkIsd0JBQXdCO1lBTXhCLHNCQUFzQjtZQWhCdEIsOEJBQThCO1lBWmdHLFNBQVM7WUFBcEYsVUFBVTs7O3dCQTREakUsS0FBSzswQkFDTCxLQUFLO2dDQUNMLEtBQUs7aUNBQ0wsS0FBSzswQ0FDTCxLQUFLO3lCQUNMLEtBQUssU0FBQyxVQUFVO3VCQUNoQixLQUFLLFNBQUMsVUFBVTt1QkFDaEIsS0FBSztpQ0FDTCxNQUFNO3dCQWNOLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBRbXNVcGxvYWRBZGFwdGVyLCBRbXNVcGxvYWRBZGFwdGVyQ29uZmlnIH0gZnJvbSAnLi9jb21tb24vY2xhc3Nlcy9xbXNVcGxvYWRBZGFwdGVyJztcbmltcG9ydCB7IENLRWRpdG9yRXZlbnRDb25zdCB9IGZyb20gJy4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckV2ZW50LmNvbnN0YW50JztcbmltcG9ydCBDS0VkaXRvckNvbW1vbkZ1bmN0aW9ucyBmcm9tICcuL2NvbW1vbi9mdW5jdGlvbnMvY29tbW9uLmZ1bmN0aW9uJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yRGF0YSB9IGZyb20gJy4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclBsdWdpbiB9IGZyb20gJy4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItcGx1Z2luLm1vZGVsJztcbmltcG9ydCBRTVNDS0VkaXRvckxpbmsgZnJvbSAnLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci11cmwubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWZ1bGxzY3JlZW4vcW1zLWNrZWRpdG9yLWZ1bGxzY3JlZW4uY29tcG9uZW50JztcbmltcG9ydCB7IFFNU0NLRWRpdG9ySW1hZ2VNYXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWltYWdlbWFwL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1saW5rL3Ftcy1ja2VkaXRvci1saW5rLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckxvYWRUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbG9hZC10ZW1wbGF0ZS9xbXMtY2tlZGl0b3ItbG9hZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItdGVtcGxhdGUvcW1zLWNrZWRpdG9yLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclRvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLXRvb2x0aXAvcW1zLWNrZWRpdG9yLXRvb2x0aXAuY29tcG9uZW50JztcbmltcG9ydCB7IFFNU0NLRWRpdG9ySW1hZ2VNYXAgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItaW1hZ2VtYXAubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUZW1wbGF0ZSB9IGZyb20gJy4vbW9kZWxzL3Ftcy1ja2VkaXRvci10ZW1wbGF0ZS5tb2RlbCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclRvb2x0aXAgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItdG9vbHRpcC5tb2RlbCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJhc2VDb21wb25lbnQgfSBmcm9tICcuL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1nbG9iYWwuc2VydmljZSc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckFib3V0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1hYm91dC9xbXMtY2tlZGl0b3ItYWJvdXQuY29tcG9uZW50Jztcbi8vIGltcG9ydCB7IENLRWRpdG9yNSB9IGZyb20gJ0Bja2VkaXRvci9ja2VkaXRvcjUtYW5ndWxhci9ja2VkaXRvcic7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5EYXRhIH0gZnJvbSBcIi4vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLWRhdGEubW9kZWxcIjtcbmltcG9ydCB7IFBvcHVwRGF0YSB9IGZyb20gXCIuLi9jb21wb25lbnRzL3JlbGF0ZWQvbW9kZWwvcG9wdXAtZGF0YS5tb2RlbFwiO1xuaW1wb3J0IHsgUmVsYXRlZFBvcHVwQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmVsYXRlZC9wb3B1cC9yZWxhdGVkLXBvcHVwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUcmVlU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci10cmVlLnNlcnZpY2VcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yRmxvd2NoYXJ0Q29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0L3Ftcy1ja2VkaXRvci1mbG93Y2hhcnQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBRbXNDa2VkaXRvckxpbmtTaW1wbGVDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1saW5rLXNpbXBsZS9xbXMtY2tlZGl0b3ItbGluay1zaW1wbGUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDS0VkaXRvckltYWdlVXBsb2FkVHlwZUNvbnN0IH0gZnJvbSAnLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9ySW1hZ2VVcGxvYWRUeXBlLmNvbnN0JztcbmltcG9ydCB7IFZpZGVvVXBsb2FkTW9kZSB9IGZyb20gJy4vY29tbW9uL2VudW1zL3ZpZGVvLXVwbG9hZC1tb2RlLmVudW0nO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JWaWRlbyB9IGZyb20gJy4vbW9kZWxzL3Ftcy1ja2VkaXRvci12aWRlby5tb2RlbCc7XG5pbXBvcnQgeyBWaWRlb0NvbnN0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9yZWxhdGVkL2NvbW1vbi92aWRlby5jb25zdCc7XG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtL2RhdGEtdHlwZS5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwicW1zLWNrZWRpdG9yXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9xbXMtY2tlZGl0b3IuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcIi4vcW1zLWNrZWRpdG9yLmNvbXBvbmVudC5zY3NzXCJdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBRTVNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUU1TQ0tFZGl0b3JDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBRTVNDS0VkaXRvckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFFNU0NLRWRpdG9yQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBRTVNDS0VkaXRvckJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgVmFsaWRhdG9yIHtcbiAgICBASW5wdXQoKSBxbXNja0RhdGE6IFFNU0NLRWRpdG9yRGF0YTtcbiAgICBASW5wdXQoKSBxbXNja1BsdWdpbjogUU1TQ0tFZGl0b3JQbHVnaW47XG4gICAgQElucHV0KCkgcW1zY2tDb250ZW50SW5wdXQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBxbXNja0NvbnRlbnRGaWVsZHM/OiBbXTtcbiAgICBASW5wdXQoKSBxbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQ/OiBib29sZWFuO1xuICAgIEBJbnB1dCgnZGlzYWJsZWQnKSBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgncmVxdWlyZWQnKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGVkaXRvcklkID0gJ3Ftc2NrZWRpdG9yJztcbiAgICBAT3V0cHV0KCkgcW1zY2tDb250ZW50T3V0cHV0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIExBTkc6IGFueTtcbiAgICBja0VkaXRvcjogYW55O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBja2VkaXRvckNvbmZpZzogYW55O1xuICAgIGNrRWRpdG9yRXZlbnRDb25zdCA9IENLRWRpdG9yRXZlbnRDb25zdDtcbiAgICBjb3VudFdvcmQ6IG51bWJlcjtcbiAgICBjb3VudENoYXI6IG51bWJlcjtcbiAgICBlZGl0b3JJbnN0YW5jZTogYW55O1xuICAgIGNrVGFnbmFtZTogc3RyaW5nO1xuICAgIHRvb2xiYXJJdGVtUHJlZml4SWQ6IHN0cmluZztcbiAgICBpc1Rvb2xiYXJJdGVtc0lkU2V0OiBib29sZWFuID0gZmFsc2U7XG4gICAgbGFuZ3VhZ2U6IHN0cmluZyA9ICdlbic7XG4gICAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzptZXNzYWdlXCIsIFtcIiRldmVudFwiXSlcbiAgICBvbk1lc3NhZ2UoZXZlbnQpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5kYXRhLmV2ZW50TmFtZSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19URU1QTEFURV9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlRXZlbnRIYW5kbGluZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MT0FEX1RFTVBMQVRFX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRlbXBsYXRlRXZlbnRIYW5kbGluZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MSU5LX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMubGlua0V2ZW50SGFuZGxpbmcoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zY2tDb250ZW50RmllbGRzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPT0xUSVBfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfSU1BR0VNQVBfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZU1hcEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU5fUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5icG1uRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQUJPVVRfQ0tFRElUT1JfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5hYm91dENLRWRpdG9yRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfRkxPV0NIQVJUX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMuZmxvd2NoYXJ0RXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfVE9HR0xFX1RPT0xCQVJfTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JST1dTRV9WSURFT19NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlVmlkZW9FdmVudEhhbmRsaW5nKGV2ZW50LmRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGdsb2JhbFNlcnZpY2U6IFFNU0NLRWRpdG9yR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogUU1TQ0tFZGl0b3JUcmVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBxbXNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQ6IFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2tUYWduYW1lID0gXCJkaXZcIjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b29sYmFySXRlbVByZWZpeElkID0gYCR7dGhpcy5lZGl0b3JJZH1fdG9vbGJhcl9pdGVtX2A7XG4gICAgICAgIHRoaXMubmFtZSA9ICdDS0VkaXRvciBjdXN0b20gYnVpbGQnO1xuICAgICAgICB0aGlzLmNrRWRpdG9yID0gdGhpcy5xbXNja1BsdWdpbi5wbHVnaW5PYmplY3Q7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRvb2xiYXJJdGVtcyA9IHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXI7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFRvZ2dsZVRvb2xiYXIoKSAmJiB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zKSB7XG4gICAgICAgICAgICBsZXQgc3RyVG9vbGJhcnMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zLnJlcGxhY2UoL3Ftc0Zsb3djaGFydCwvZywgXCJcIik7XG4gICAgICAgICAgICBpZiAoIXRoaXMucW1zY2tEYXRhLmVuYWJsZVRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgc3RyVG9vbGJhcnMgPSBzdHJUb29sYmFycy5yZXBsYWNlKC9xbXNUZW1wbGF0ZSwvZywgXCJcIik7IC8vIGRpc2FibGUgcW1zVGVtcGxhdGUgaWYgdXNlciBkb24ndCBoYXZlIGhhbmRib29rQWRtaW4gUm9sZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnFtc2NrRGF0YS52aWRlb1VwbG9hZE1vZGUpIHtcbiAgICAgICAgICAgICAgICBzdHJUb29sYmFycyA9IHN0clRvb2xiYXJzLnJlcGxhY2UoL3ZpZGVvVXBsb2FkLC9nLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvb2xiYXJJdGVtcyArPSAnLCcgKyBzdHJUb29sYmFyczsgLy8gZGlzYWJsZSBxbXNGbG93Y2hhcnQgdW50aWwgTkstNDQwIGRvbmVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnID0gQ0tFZGl0b3JDb21tb25GdW5jdGlvbnMuZ2V0Q0tFZGl0b3JDb25maWd1cmF0aW9uKHRvb2xiYXJJdGVtcywgdGhpcy5MQU5HLCB0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgaWYgKHRoaXMuY2tlZGl0b3JDb25maWcpXG4gICAgICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnLmNvbnRhaW5lcklkID0gdGhpcy5lZGl0b3JJZDtcblxuICAgICAgICBpZiAodGhpcy5xbXNja0RhdGEuaGlkZUltZ09wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY2tlZGl0b3JDb25maWcgPSB0aGlzLmhpZGVJbWFnZU9wdGlvbnModGhpcy5ja2VkaXRvckNvbmZpZywgdGhpcy5xbXNja0RhdGEuaGlkZUltZ09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZXRBcGlVcmwodGhpcy5xbXNja0RhdGEuYXBpVXJsKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkTWF0aHR5cGVDb25maWcoKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRNYXRoVHlwZUNvbmZpZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkVGltZXN0YW1wQ29uZmlnKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVGltZXN0YW1wQ29uZmlnKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWRXUHJvb2ZyZWFkZXIoKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRXUHJvb2ZyZWFkZXJDb25maWcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWRUT0NUb29sYmFyKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVG9nZ2xlVE9DQ29uZmlnKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkRnVsbFNjcmVlbkNvbmZpZygpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEZ1bGxTY3JlZW5Db25maWcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5lZGl0b3JJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgJChkb2N1bWVudCkub2ZmKCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2U6IChjb250ZW50OiBhbnkpID0+IHZvaWQ7XG4gICAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIFwiY2stZGlzYWJsZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VuYWJsZWRXUHJvb2ZyZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHdwcm9vZnJlYWRlcikvZ2ltO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIgJiZcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNyY1VybCAmJlxuICAgICAgICAgICAgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyICYmXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYWRkV1Byb29mcmVhZGVyQ29uZmlnKCkge1xuICAgICAgICBjb25zdCB3cHJvb2ZyZWFkZXJDb25maWcgPSB7XG4gICAgICAgICAgICB3cHJvb2ZyZWFkZXI6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNlcnZpY2VJZCB8fFxuICAgICAgICAgICAgdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNlcnZpY2VJZC5sZW5ndGggPT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vRmFsbGJhY2sgdmFsdWUgb2Ygc2VydmljZUlkIHByb3BlcnR5IHRvIGRlbW8gc2VydmljZUlkXG4gICAgICAgICAgICB0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIuc2VydmljZUlkID1cbiAgICAgICAgICAgICAgICBcIjE6S3BrdlEyLTZLTlVqLUwxVzN1Mi1DOWowSzEtWnYydFkxLUNmRE94LVdmR1JnMi1xWHRjaS1ZeXlFMzQtajA5SDQyLWIwYUN0My1kOWFcIjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxuICAgICAgICAgICAgd3Byb29mcmVhZGVyQ29uZmlnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaXNFbmFibGVkVG9nZ2xlVG9vbGJhcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8odG9nZ2xlVG9vbGJhcikvZ21pO1xuICAgICAgICByZXR1cm4gISF0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zXG4gICAgICAgICAgICAmJiAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXJcbiAgICAgICAgICAgICYmIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTE7XG4gICAgfVxuXG4gICAgYWRkVG9nZ2xlVG9vbGJhckNvbmZpZygpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgY29uc3QgdG9nZ2xlVG9vbGJhckNvbmZpZyA9IHtcbiAgICAgICAgICAgIHRvZ2dsZVRvb2xiYXJDb25maWc6IHtcbiAgICAgICAgICAgICAgICB0b29sYmFyOiBpdGVtcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXG4gICAgICAgICAgICB0b2dnbGVUb29sYmFyQ29uZmlnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaXNFbmFibGVkRnVsbFNjcmVlbkNvbmZpZygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8ocW1zRnVsbHNjcmVlbikvZ2ltO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyICYmXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLmZ1bGxTY3JlZW5DbGFzcyAmJlxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZEZ1bGxTY3JlZW5Db25maWcoKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxTY3JlZW5Db25maWcgPSB7XG4gICAgICAgICAgICBmdWxsU2NyZWVuQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IHRoaXMucW1zY2tEYXRhLmZ1bGxTY3JlZW5DbGFzcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXG4gICAgICAgICAgICBmdWxsU2NyZWVuQ29uZmlnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaXNFbmFibGVkVE9DVG9vbGJhcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8odGFibGVPZkNvbnRlbnRzKS9naW07XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLnRhYmxlT2ZDb250ZW50SGVhZGluZ3MgJiZcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZFRvZ2dsZVRPQ0NvbmZpZygpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnFtc2NrRGF0YS50YWJsZU9mQ29udGVudEhlYWRpbmdzLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgY29uc3QgdGFibGVPZkNvbnRlbnRzID0ge1xuICAgICAgICAgICAgdGFibGVPZkNvbnRlbnRzOiB7XG4gICAgICAgICAgICAgICAgc3VwcG9ydGVkSGVhZGluZ3M6IGl0ZW1zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyB8fCB7fSxcbiAgICAgICAgICAgIHRhYmxlT2ZDb250ZW50c1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZFRpbWVzdGFtcENvbmZpZygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8odGltZXN0YW1wKS9naW07XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLnRpbWVzdGFtcEZvcm1hdCAmJlxuICAgICAgICAgICAgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyICYmXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYWRkVGltZXN0YW1wQ29uZmlnKCkge1xuICAgICAgICBjb25zdCB0aW1lc3RhbXBDb25maWcgPSB7XG4gICAgICAgICAgICB0aW1lc3RhbXBDb25maWc6IHtcbiAgICAgICAgICAgICAgICBkYXRldGltZUZvcm1hdDogdGhpcy5xbXNja0RhdGEudGltZXN0YW1wRm9ybWF0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyB8fCB7fSxcbiAgICAgICAgICAgIHRpbWVzdGFtcENvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZE1hdGh0eXBlQ29uZmlnKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gLyhNYXRoVHlwZSl8KENoZW1UeXBlKS9naW07XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLm1hdGh0eXBlU2VydmljZVVybCAmJlxuICAgICAgICAgICAgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyICYmXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYWRkTWF0aFR5cGVDb25maWcoKSB7XG4gICAgICAgIGNvbnN0IG1hdGhUeXBlQ29uZmlnID0ge1xuICAgICAgICAgICAgbWF0aFR5cGVQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgc2VydmljZVByb3ZpZGVyUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICBVUkk6IHRoaXMucW1zY2tEYXRhLm1hdGh0eXBlU2VydmljZVVybCxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyOiBcImFzcHhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyB8fCB7fSxcbiAgICAgICAgICAgIG1hdGhUeXBlQ29uZmlnXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hhbmdlZCh7IGVkaXRvciB9KSB7XG4gICAgICAgIC8vIHRoaXMucW1zY2tDb250ZW50SW5wdXQgPSBlZGl0b3IuZ2V0RGF0YSgpO1xuICAgICAgICB0aGlzLnFtc2NrQ29udGVudE91dHB1dC5lbWl0KHRoaXMucW1zY2tDb250ZW50SW5wdXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXIoeyBlZGl0b3IgfSkge1xuICAgICAgICB0aGlzLnFtc2NrQ29udGVudElucHV0ID0gZWRpdG9yLmdldERhdGEoKTtcbiAgICAgICAgdGhpcy5xbXNja0NvbnRlbnRPdXRwdXQuZW1pdCh0aGlzLnFtc2NrQ29udGVudElucHV0KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCkge1xuICAgICAgICBpZiAoIXRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnFtc2NrQ29udGVudElucHV0ICYmICF0aGlzLnJlcXVpcmVkXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGMudmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgaGlkZUltYWdlT3B0aW9ucyhjb25maWcsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgaXRlbUFycmF5ID0gb3B0aW9ucy5zcGxpdCgnLCcpO1xuICAgICAgICBpdGVtQXJyYXkuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbmZpZy5pbWFnZS50b29sYmFyID0gY29uZmlnLmltYWdlLnRvb2xiYXIuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gIT09IGVsZW1lbnQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogb25SZWFkeVxuICAgICAqL1xuICAgIHB1YmxpYyBvblJlYWR5KGVkaXRvcikge1xuICAgICAgICB0aGlzLmVkaXRvckluc3RhbmNlID0gZWRpdG9yO1xuICAgICAgICBpZiAodGhpcy5xbXNja0NvbnRlbnRJbnB1dCkge1xuICAgICAgICAgICAgZWRpdG9yLnNldERhdGEodGhpcy5xbXNja0NvbnRlbnRJbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0RWRpdG9yKGVkaXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yKGVkaXRvcikge1xuICAgICAgICBjb25zdCBpbWFnZVVwbG9hZFR5cGVzID0gQ0tFZGl0b3JJbWFnZVVwbG9hZFR5cGVDb25zdC5RTVNDS19JTUFHRV9UWVBFU19TVVBQT1JUX0RFRkFVTFQ7XG4gICAgICAgIGNvbnN0IGNvbmZpZzogUW1zVXBsb2FkQWRhcHRlckNvbmZpZyA9IHtcbiAgICAgICAgICAgIGFwaVVybDogdGhpcy5xbXNja0RhdGEuYXBpVXJsLFxuICAgICAgICAgICAgTEFORzogdGhpcy5MQU5HLFxuICAgICAgICAgICAgaW1hZ2VVcGxvYWRUeXBlc1xuICAgICAgICB9O1xuICAgICAgICBlZGl0b3IucGx1Z2lucy5nZXQoXCJGaWxlUmVwb3NpdG9yeVwiKS5jcmVhdGVVcGxvYWRBZGFwdGVyID0gKGxvYWRlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBRbXNVcGxvYWRBZGFwdGVyKGxvYWRlciwgY29uZmlnKTtcbiAgICAgICAgfTtcblxuICAgICAgICBlZGl0b3IudWlcbiAgICAgICAgICAgIC5nZXRFZGl0YWJsZUVsZW1lbnQoKVxuICAgICAgICAgICAgLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKFxuICAgICAgICAgICAgICAgIGVkaXRvci51aS52aWV3LnRvb2xiYXIuZWxlbWVudCxcbiAgICAgICAgICAgICAgICBlZGl0b3IudWkuZ2V0RWRpdGFibGVFbGVtZW50KClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgLy8gQXBwZWQgV29yZGNvdW50IHRvIENLZWRpdG9yXG4gICAgICAgIGVkaXRvci5wbHVnaW5zLmdldChcIldvcmRDb3VudFwiKS5vbihcInVwZGF0ZVwiLCAoZXZ0LCBzdGF0cykgPT4ge1xuICAgICAgICAgICAgLy8gUHJpbnRzIHRoZSBjdXJyZW50IGNvbnRlbnQgc3RhdGlzdGljcy5cbiAgICAgICAgICAgIGNvbnN0IHdvcmRzQm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNcIiArIHRoaXMuZWRpdG9ySWQgKyBcIiAud29yZGNvdW50LWNvbnRlbnRcIik7XG4gICAgICAgICAgICBpZiAoISF3b3Jkc0JveCkge1xuICAgICAgICAgICAgICAgIHdvcmRzQm94LnRleHRDb250ZW50ID0gYCR7dGhpcy5MQU5HLlFNU0NLRURJVE9SLldPUkRTfTogJHtzdGF0cy53b3Jkc30gLyAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5DSEFSQUNURVJTfTogJHtzdGF0cy5jaGFyYWN0ZXJzfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnFtc2NrRGF0YS5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICBlZGl0b3IuaXNSZWFkT25seSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRFZGl0b3JJbnN0YW5jZU9ic2VydmVyKHRoaXMuZWRpdG9ySWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0ZW1wbGF0ZSAtIExvYWQgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgdGVtcGxhdGVFdmVudEhhbmRsaW5nKCkge1xuICAgICAgICBjb25zdCBkYXRhOiBRTVNDS0VkaXRvclRlbXBsYXRlID0gbmV3IFFNU0NLRWRpdG9yVGVtcGxhdGUoKTtcbiAgICAgICAgZGF0YS5pZCA9IDA7XG4gICAgICAgIGRhdGEuaHRtbCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XG4gICAgICAgIGRhdGEuZWRpdCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JUZW1wbGF0ZUNvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6IFwiNjUwcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCI1NDBweFwiLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRET1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0ZW1wbGF0ZSAtIExvYWQgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZFRlbXBsYXRlRXZlbnRIYW5kbGluZygpIHtcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yTG9hZFRlbXBsYXRlQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgICAgICBkYXRhOiB7IGVuYWJsZUVkaXRUZW1wbGF0ZTogdGhpcy5xbXNja0RhdGEuZW5hYmxlVGVtcGxhdGUgfSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MT0FEX1RFTVBMQVRFX1BMVUdJTl9SRVNQLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuY2hvciAtIExpbmsgLSBJbWFnZSBtYXBwaW5nXG4gICAgICovXG4gICAgcHVibGljIGxpbmtFdmVudEhhbmRsaW5nKFxuICAgICAgICBsaW5rLFxuICAgICAgICBxbXNja0NvbnRlbnRGaWVsZHM/LFxuICAgICAgICBxbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQ/XG4gICAgKSB7XG4gICAgICAgIGlmIChsaW5rLmNrZWRpdG9ySWQgIT0gdGhpcy5lZGl0b3JJbnN0YW5jZS5pZClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvckxpbmsoKTtcbiAgICAgICAgZGF0YSA9IGxpbms7XG4gICAgICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XG4gICAgICAgIGRhdGEubW9kdWxlID0gdGhpcy5xbXNja0RhdGEubW9kdWxlO1xuICAgICAgICBkYXRhLmVudGl0eUlkID0gdGhpcy5xbXNja0RhdGEuZW50aXR5SWQ7XG4gICAgICAgIGlmIChxbXNja0NvbnRlbnRGaWVsZHMgJiYgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50KSB7XG4gICAgICAgICAgICBkYXRhLnFtc2NrQ29udGVudEZpZWxkcyA9IHFtc2NrQ29udGVudEZpZWxkcztcbiAgICAgICAgICAgIGRhdGEucW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50ID0gcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuZGVmYXVsdFRhcmdldE5ld1dpbmRvdyA9IHRoaXMucW1zY2tEYXRhLmRlZmF1bHRUYXJnZXROZXdXaW5kb3c7XG4gICAgICAgIGRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkID0gdGhpcy5xbXNja0RhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkO1xuXG4gICAgICAgIGxldCBkaWFsb2dUZW1wbGF0ZTtcbiAgICAgICAgaWYgKCF0aGlzLnFtc2NrUGx1Z2luLnNpbXBsZU1vZGUpIHtcbiAgICAgICAgICAgIGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckxpbmtDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogXCI2NjBweFwiLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUW1zQ2tlZGl0b3JMaW5rU2ltcGxlQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiNjUwcHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMjAwcHhcIixcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQodGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfTElOS19QTFVHSU5fUkVTUCwge1xuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb29sdGlwIG1hcHBpbmdcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9vbHRpcEV2ZW50SGFuZGxpbmcodmFsdWUpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JUb29sdGlwKCk7XG4gICAgICAgIGRhdGEudGV4dCA9IHZhbHVlLnRleHQ7XG4gICAgICAgIGRhdGEuY29udGVudCA9IHZhbHVlLmNvbnRlbnQ7XG4gICAgICAgIGRhdGEuY2tFZGl0b3IgPSB0aGlzLnFtc2NrUGx1Z2luLnBsdWdpbk9iamVjdDtcblxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JUb29sdGlwQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjU1NXB4XCIsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPT0xUSVBfUExVR0lOX1JFU1AsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1hZ2VNYXAgbWFwcGluZ1xuICAgICAqL1xuICAgIHB1YmxpYyBpbWFnZU1hcEV2ZW50SGFuZGxpbmcodmFsdWUpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JJbWFnZU1hcCgpO1xuICAgICAgICBkYXRhLm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICBkYXRhLmFyZWFzID0gdmFsdWUuYXJlYXM7XG4gICAgICAgIGRhdGEuaW1hZ2VVcmwgPSB2YWx1ZS5pbWFnZVVybDtcbiAgICAgICAgZGF0YS5pbWFnZVdpZHRoID0gdmFsdWUuaW1hZ2VXaWR0aDtcbiAgICAgICAgZGF0YS5pbWFnZUhlaWdodCA9IHZhbHVlLmltYWdlSGVpZ2h0O1xuICAgICAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xuICAgICAgICBkYXRhLmVkaXRvckNvbnRlbnQgPSB0aGlzLnFtc2NrQ29udGVudElucHV0O1xuICAgICAgICBkYXRhLmxpbmtKYXZhU2NyaXB0TGlua3NBbGxvd2VkID0gdGhpcy5xbXNja0RhdGEubGlua0phdmFTY3JpcHRMaW5rc0FsbG93ZWQ7XG4gICAgICAgIGRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkID0gdGhpcy5xbXNja0RhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkO1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JJbWFnZU1hcENvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19JTUFHRU1BUF9QTFVHSU5fUkVTUCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAgQnVzaW5lc3MgUHJvY2VzcyBNb2RlbCBhbmQgTm90YXRpb25cbiAgICAqL1xuICAgIHB1YmxpYyBicG1uRXZlbnRIYW5kbGluZyhpZDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yQnBtbkRhdGEoKTtcbiAgICAgICAgZGF0YS5pZCA9IGlkO1xuICAgICAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xuICAgICAgICBkYXRhLmVkaXRvckNvbnRlbnQgPSB0aGlzLnFtc2NrQ29udGVudElucHV0O1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICBtYXhXaWR0aDogXCIxMDB2d1wiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgIG1heEhlaWdodDogXCIxMDB2d1wiLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OX1BMVUdJTl9SRVNQLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICAvKlxuICAgICBBYm91dCBDS0VkaXRvclxuICAgKi9cbiAgICBwdWJsaWMgYWJvdXRDS0VkaXRvckV2ZW50SGFuZGxpbmcodmVyc2lvbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckFib3V0Q29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogXCI1MDBweFwiLFxuICAgICAgICAgICAgZGF0YTogdmVyc2lvbixcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7IH0pO1xuICAgIH1cblxuICAgIC8qXG4gICAgICBUb29sYmFyIHRvZ2dsZVxuICBcbiAgICAgIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC5cbiAgICAgIFRyYWNraW5nIHN0YXR1cyBhbmQgcHJvZ3Jlc3Mgb2YgdGhlIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ja2VkaXRvci9ja2VkaXRvcjUvaXNzdWVzLzczODNcbiAgXG4gICAgICAtIFJlbmRlciBib3RoIGRlZmF1bHQgdG9vbGJhciBhbmQgdG9nZ2xlIHRvb2xiYXIgYXQgaW5pdCB0aW1lXG4gICAgICAtIFNldCBJRCBmb3IgdG9vbGJhciBpdGVtcyB1c2luZyBpbmRleDpcbiAgICAgICAgKyBGcm9tIGluZGV4IDAgdG8gdG9vbGJhckxlbmd0aCAtIDEgaXMgdGhlIGRlZmF1bHQgdG9vbGJhclxuICAgICAgICArIEZyb20gaW5kZXggdG9vbGJhckxlbmd0aCBvbiBpcyB0aGUgdG9nZ2xlIHRvb2xiYXJcbiAgICAgIC0gU2hvdy9oaWRlIGRlZmF1bHQgYW5kIHRvZ2dsZSB0b29sYmFyIGJ5IHNldCBkaXNwbGF5IG5vbmUgdG8gY29ycmVzcG9uZGluZyB0b29sYmFyIGl0ZW1zIGJhc2VkIG9uIElEXG4gICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlVG9vbGJhckV2ZW50SGFuZGxpbmcoKSB7XG4gICAgICAgIGNvbnN0IHFtc2NrZWRpdG9yID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICAgICAgICBjb25zdCB0b2dnbGVBdHRyaWJ1dGUgPSAnaXNUb2dnbGVUb29sYmFyJztcbiAgICAgICAgY29uc3QgY2tlZGl0b3JUYWcgPSAnY2tlZGl0b3InO1xuXG4gICAgICAgIGlmIChxbXNja2VkaXRvcikge1xuICAgICAgICAgICAgY29uc3QgaXNUb2dnbGVUb29sYmFyID1cbiAgICAgICAgICAgICAgICBxbXNja2VkaXRvci5nZXRBdHRyaWJ1dGUodG9nZ2xlQXR0cmlidXRlKSA9PSBcInRydWVcIjtcbiAgICAgICAgICAgIGlmIChpc1RvZ2dsZVRvb2xiYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUb29sYmFyVmlld01vZGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgcW1zY2tlZGl0b3Iuc2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSwgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUb29sYmFyVmlld01vZGUoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHFtc2NrZWRpdG9yLnNldEF0dHJpYnV0ZSh0b2dnbGVBdHRyaWJ1dGUsICd0cnVlJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NldFRvb2xiYXJWaWV3TW9kZShzaG93VG9nZ2xlVG9vbGJhcjogYm9vbGVhbikge1xuICAgICAgICBjb25zdCB0b29sYmFyTGVuZ3RoID0gdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhcj8uc3BsaXQoJywnKS5sZW5ndGggfHwgMDtcbiAgICAgICAgLypcbiAgICAgICAgICBJdGVtcyBpbiB0b29sYmFyIGFyZSBpbmRleGVkOlxuICAgICAgICAgIC0gRnJvbSBpbmRleCAwIHRvIHRvb2xiYXJMZW5ndGggLSAxIGlzIHRoZSBkZWZhdWx0IHRvb2xiYXJcbiAgICAgICAgICAtIEZyb20gaW5kZXggdG9vbGJhckxlbmd0aCBvbiBpcyB0aGUgdG9nZ2xlIHRvb2xiYXJcbiAgICAgICAgKi9cbiAgICAgICAgJChgIyR7dGhpcy50b29sYmFySXRlbVByZWZpeElkfSR7dG9vbGJhckxlbmd0aCAtIDF9YCk/LnByZXZBbGwoKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gc2hvd1RvZ2dsZVRvb2xiYXIgPyAnbm9uZScgOiAnJztcbiAgICAgICAgfSlcblxuICAgICAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8uY3NzKCdkaXNwbGF5Jywgc2hvd1RvZ2dsZVRvb2xiYXIgPyAnbm9uZScgOiAnJyk7XG5cbiAgICAgICAgJChgIyR7dGhpcy50b29sYmFySXRlbVByZWZpeElkfSR7dG9vbGJhckxlbmd0aCAtIDF9YCk/Lm5leHRBbGwoKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gc2hvd1RvZ2dsZVRvb2xiYXIgPyAnJyA6ICdub25lJztcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbG93Y2hhcnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZmxvd2NoYXJ0RXZlbnRIYW5kbGluZyhpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckZsb3djaGFydENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6IFwiODl2d1wiLFxuICAgICAgICAgICAgbWF4V2lkdGg6IFwiMTAwdndcIixcbiAgICAgICAgICAgIGhlaWdodDogXCI3MjVweFwiLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBcIjEwMHZ3XCIsXG4gICAgICAgICAgICBkYXRhOiBpZCxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfRkxPV0NIQVJUX1BMVUdJTl9SRVNQLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCcm93c2UgVmlkZW9cbiAgICAgKi9cbiAgICBwdWJsaWMgYnJvd3NlVmlkZW9FdmVudEhhbmRsaW5nKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRVcGxvYWRWaWRlb0xpc3QoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW9zID0gcmVzcG9uc2UgfHwgW107XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFyZWFPZkN1cnJlbnRQcm9jZXNzOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogdGhpcy5xbXNja0RhdGEudXBsb2FkVmlkZW9BbGxvd011bHRpcGxlQ2hlY2ssXG4gICAgICAgICAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5JY29uOiBcImZvbGRlcl9vcGVuXCIsXG4gICAgICAgICAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6IFwiIzE5NTRBOVwiLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUljb246IFwiZm9sZGVyX2ZpbGxlZFwiLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUljb25Db2xvcjogXCIjNGFjYWZmXCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JY29uOiBcImluc2VydF9kcml2ZV9maWxlXCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JY29uUGF0aDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbUljb25CYXNlNjQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kQWxsOiB0cnVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YTogUG9wdXBEYXRhID0gbmV3IFBvcHVwRGF0YSgpO1xuICAgICAgICAgICAgICAgIGRhdGEubW9kdWxlSWQgPSAyO1xuICAgICAgICAgICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5RTVNDS0VESVRPUi5TRUxFQ1RfVklERU9fRlJPTV9BUkNISVZFO1xuICAgICAgICAgICAgICAgIGRhdGEubW9kdWxlVXBsb2FkSW1hZ2VOYW1lID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlNFTEVDVF9WSURFT19JTUFHRTtcbiAgICAgICAgICAgICAgICBkYXRhLm1vZHVsZVVwbG9hZEZpbGVOYW1lID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFERF9BX0ZJTEU7XG5cbiAgICAgICAgICAgICAgICBkYXRhLnZpZGVvRGF0YSA9IG5ldyBRTVNDS0VkaXRvclZpZGVvKHZhbHVlLmlkLCB2YWx1ZS5zcmMsIHRydWUsIHZhbHVlLnBvc3RlclxuICAgICAgICAgICAgICAgICAgICAsIHZhbHVlLndpZHRoPy50b1N0cmluZygpPy5pbmRleE9mKCclJykgPCAwID8gdmFsdWUud2lkdGg/LnRvU3RyaW5nKCk/Lm1hdGNoKC9cXGQvZyk/LmpvaW4oJycpIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAsIHZhbHVlLmhlaWdodD8udG9TdHJpbmcoKT8ubWF0Y2goL1xcZC9nKT8uam9pbignJykpO1xuICAgICAgICAgICAgICAgIGRhdGEuY2FuVXBkYXRlVmlkZW9Qcm9wZXJ0aWVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkYXRhLnRyZWVEYXRhMSA9IHZpZGVvcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RJZDogYHJvb3QtJHtpdGVtLnJvb3RJZH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IChpdGVtLnBhcmVudElkICE9PSBudWxsICYmIGl0ZW0ucGFyZW50SWQgIT09IFwiXCIpID8gYHJvb3QtJHtpdGVtLnBhcmVudElkfWAgOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE5hbWU6IGl0ZW0ucm9vdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJOYW1lOiBpdGVtLnN1Yk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZElkOiBpdGVtLmNoaWxkSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5hbWU6IGl0ZW0uY2hpbGROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IGl0ZW0uc3RhdHVzSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IGl0ZW0uZGlzcGxheUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6IGl0ZW0uY29udGVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0ZW0udXJsLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZGF0YS50cmVlRGF0YTIgPSBbXTtcbiAgICAgICAgICAgICAgICBkYXRhLnRyZWVDb25maWcxID0gY29uZmlnO1xuICAgICAgICAgICAgICAgIGRhdGEuY2FuVXBsb2FkSW1hZ2UgPSB2aWRlb3MubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIGRhdGEuY2FuVXBsb2FkVmlkZW8gPSB0aGlzLnFtc2NrRGF0YS52aWRlb1VwbG9hZE1vZGUgPT09IFZpZGVvVXBsb2FkTW9kZS5BbGxvd1VwbG9hZDtcbiAgICAgICAgICAgICAgICBkYXRhLm1heFZpZGVvVGh1bWJuYWlsU2l6ZUtCID0gdGhpcy5xbXNja0RhdGEubWF4VmlkZW9UaHVtYm5haWxTaXplS0I7XG4gICAgICAgICAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnNlbGVjdGVkSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzYWJsZWRMaXN0ID0gW2RhdGEudHJlZURhdGExLmZpbmQoeCA9PiB4LmNoaWxkSWQgPT09IHZhbHVlLnNlbGVjdGVkSWQpXSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5kaXNhYmxlZExpc3QgPSBkaXNhYmxlZExpc3QubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC5jaGlsZElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiB4LmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IHguZGlzcGxheUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFJlbGF0ZWRQb3B1cENvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCI4MDBweFwiLFxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IFwiNjMwcHhcIixcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogXCJxbXNja2VkaXRvci1icm93c2UtdmlkZW8tcG9wdXBcIixcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hCb3ggPSB3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLnFtc2NrZWRpdG9yLWJyb3dzZS12aWRlby1wb3B1cCAjcW1zbGliX3JlbGF0ZWRfcG9wdXBfc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQm94LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5zcmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmxzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxzID0gW3Jlc3VsdC5zcmNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQud2lkdGggfHwgcmVzdWx0LndpZHRoIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQud2lkdGggPSBWaWRlb0NvbnN0LkRFRkFVTFRfVklERU9fV0lEVEg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oZWlnaHQgfHwgcmVzdWx0LmhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmhlaWdodCA9IFZpZGVvQ29uc3QuREVGQVVMVF9WSURFT19IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlJPV1NFX1ZJREVPX1JFU1AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBkZXRhaWw6IHsgdXJsczogdXJscywgdGh1bWJuYWlsVXJsOiByZXN1bHQucG9zdGVyLCBpZDogcmVzdWx0LmlkLCB3aWR0aDogcmVzdWx0LndpZHRoLCBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQgfSB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0RWRpdG9ySW5zdGFuY2VPYnNlcnZlcihlZGl0b3JJZDogc3RyaW5nKSB7XG4gICAgICAgICQoZG9jdW1lbnQpLm9mZignRE9NTm9kZUluc2VydGVkJykub24oJ0RPTU5vZGVJbnNlcnRlZCcsIChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNUb29sYmFySXRlbXNJZFNldCAmJiAkKGUudGFyZ2V0KS5oYXMoJyMnICsgZWRpdG9ySWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0SWRGb3JUb29sYmFySXRlbXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0SWRGb3JUb29sYmFySXRlbXMoKSB7XG4gICAgICAgIGNvbnN0IHRvb2xiYXJJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCR7dGhpcy5lZGl0b3JJZCA/ICcjJyArIHRoaXMuZWRpdG9ySWQgOiAnJ30gLmNrLXRvb2xiYXJfX2l0ZW1zYCk/LmNoaWxkcmVuIHx8IFtdO1xuICAgICAgICBpZiAoIXRvb2xiYXJJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzVG9vbGJhckl0ZW1zSWRTZXQgPSB0cnVlO1xuICAgICAgICAoQXJyYXkuZnJvbSh0b29sYmFySXRlbXMpIGFzIEhUTUxFbGVtZW50W10pLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLmlkID0gYCR7dGhpcy50b29sYmFySXRlbVByZWZpeElkfSR7aW5kZXh9YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50b2dnbGVUb29sYmFyRXZlbnRIYW5kbGluZygpO1xuICAgIH1cbn1cbiJdfQ==