@fundamental-ngx/platform 0.43.16 → 0.43.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/esm2020/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +1 -1
  2. package/esm2020/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +1 -1
  3. package/esm2020/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +1 -1
  4. package/esm2020/form/combobox/combobox/combobox.component.mjs +7 -7
  5. package/esm2020/form/combobox/commons/base-combobox.mjs +33 -6
  6. package/esm2020/form/multi-combobox/commons/base-multi-combobox.mjs +5 -2
  7. package/esm2020/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +33 -34
  8. package/esm2020/form/multi-combobox/multi-combobox.module.mjs +3 -2
  9. package/esm2020/form/multi-input/base-multi-input.mjs +5 -1
  10. package/esm2020/form/multi-input/multi-input.component.mjs +9 -8
  11. package/esm2020/form/multi-input/multi-input.module.mjs +3 -2
  12. package/esm2020/form/select/commons/base-select.mjs +16 -7
  13. package/esm2020/form/select/select/select.component.mjs +3 -3
  14. package/esm2020/list/list.component.mjs +11 -3
  15. package/esm2020/search-field/search-field.component.mjs +3 -3
  16. package/esm2020/shared/domain/data-source.mjs +3 -2
  17. package/esm2020/shared/form/base.input.mjs +13 -9
  18. package/esm2020/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
  19. package/esm2020/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +1 -1
  20. package/esm2020/table/components/table-header-cell-content/table-header-cell-content.component.mjs +3 -3
  21. package/esm2020/table/components/table-header-row/table-header-row.component.mjs +7 -4
  22. package/esm2020/table/components/table-p13-dialog/columns/columns.component.mjs +3 -3
  23. package/esm2020/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +1 -1
  24. package/esm2020/table/components/table-p13-dialog/grouping/grouping.component.mjs +1 -1
  25. package/esm2020/table/components/table-p13-dialog/sorting/sorting.component.mjs +2 -2
  26. package/esm2020/table/components/table-row/table-row.component.mjs +13 -21
  27. package/esm2020/table/table.component.mjs +36 -13
  28. package/esm2020/table-helpers/pipes/column-sorting-direction.pipe.mjs +27 -0
  29. package/esm2020/table-helpers/pipes/index.mjs +2 -1
  30. package/esm2020/table-helpers/table-helpers.module.mjs +9 -6
  31. package/esm2020/upload-collection/upload-collection/upload-collection.component.mjs +1 -1
  32. package/esm2020/value-help-dialog/components/define-tab/define-tab.component.mjs +1 -1
  33. package/esm2020/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
  34. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs +3 -3
  35. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  36. package/fesm2015/fundamental-ngx-platform-form.mjs +172 -131
  37. package/fesm2015/fundamental-ngx-platform-form.mjs.map +1 -1
  38. package/fesm2015/fundamental-ngx-platform-list.mjs +9 -2
  39. package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
  40. package/fesm2015/fundamental-ngx-platform-search-field.mjs +2 -2
  41. package/fesm2015/fundamental-ngx-platform-search-field.mjs.map +1 -1
  42. package/fesm2015/fundamental-ngx-platform-shared.mjs +12 -7
  43. package/fesm2015/fundamental-ngx-platform-shared.mjs.map +1 -1
  44. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
  45. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  46. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +32 -4
  47. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  48. package/fesm2015/fundamental-ngx-platform-table.mjs +59 -41
  49. package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
  50. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs +1 -1
  51. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  52. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
  53. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  54. package/fesm2015/fundamental-ngx-platform-variant-management.mjs +1 -1
  55. package/fesm2015/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  56. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs +3 -3
  57. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  58. package/fesm2020/fundamental-ngx-platform-form.mjs +177 -134
  59. package/fesm2020/fundamental-ngx-platform-form.mjs.map +1 -1
  60. package/fesm2020/fundamental-ngx-platform-list.mjs +10 -2
  61. package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
  62. package/fesm2020/fundamental-ngx-platform-search-field.mjs +2 -2
  63. package/fesm2020/fundamental-ngx-platform-search-field.mjs.map +1 -1
  64. package/fesm2020/fundamental-ngx-platform-shared.mjs +12 -7
  65. package/fesm2020/fundamental-ngx-platform-shared.mjs.map +1 -1
  66. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
  67. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  68. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +32 -4
  69. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  70. package/fesm2020/fundamental-ngx-platform-table.mjs +59 -41
  71. package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
  72. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs +1 -1
  73. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  74. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
  75. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  76. package/fesm2020/fundamental-ngx-platform-variant-management.mjs +1 -1
  77. package/fesm2020/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  78. package/form/combobox/combobox/combobox.component.d.ts +2 -2
  79. package/form/combobox/commons/base-combobox.d.ts +12 -3
  80. package/form/multi-combobox/multi-combobox/multi-combobox.component.d.ts +7 -7
  81. package/form/multi-combobox/multi-combobox.module.d.ts +2 -1
  82. package/form/multi-input/multi-input.module.d.ts +2 -1
  83. package/form/select/commons/base-select.d.ts +14 -7
  84. package/fundamental-ngx-platform-v0.43.18.tgz +0 -0
  85. package/list/list.component.d.ts +3 -1
  86. package/package.json +4 -4
  87. package/schematics/ng-add/index.js +1 -1
  88. package/shared/form/base.input.d.ts +5 -4
  89. package/table/components/table-header-row/table-header-row.component.d.ts +3 -1
  90. package/table/components/table-row/table-row.component.d.ts +2 -2
  91. package/table/table.component.d.ts +11 -4
  92. package/table-helpers/pipes/column-sorting-direction.pipe.d.ts +12 -0
  93. package/table-helpers/pipes/index.d.ts +1 -0
  94. package/table-helpers/table-helpers.module.d.ts +2 -1
  95. package/fundamental-ngx-platform-v0.43.16.tgz +0 -0
@@ -1,6 +1,7 @@
1
+ /* eslint-disable @typescript-eslint/member-ordering */
1
2
  import { FocusKeyManager, LiveAnnouncer } from '@angular/cdk/a11y';
2
3
  import { SelectionModel } from '@angular/cdk/collections';
3
- import { DOWN_ARROW, ENTER, SPACE, UP_ARROW } from '@angular/cdk/keycodes';
4
+ import { DOWN_ARROW, ENTER, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';
4
5
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, Host, HostListener, Inject, Input, Optional, Output, QueryList, Self, SkipSelf, ViewChild, ViewEncapsulation, forwardRef } from '@angular/core';
5
6
  import { ControlContainer, NgControl, NgForm } from '@angular/forms';
6
7
  import { FD_FORM_FIELD, FD_FORM_FIELD_CONTROL } from '@fundamental-ngx/cdk/forms';
@@ -136,6 +137,8 @@ export class ListComponent extends CollectionBaseInput {
136
137
  this.selectionMode = 'none';
137
138
  /** Whether to display unread notification indicator. */
138
139
  this.unreadIndicator = false;
140
+ /** Whether to intercept tab key navigation. */
141
+ this.interceptTabKey = true;
139
142
  /** Event thrown, when selected item is changed */
140
143
  this.selectedItemChange = new EventEmitter();
141
144
  /**
@@ -258,6 +261,9 @@ export class ListComponent extends CollectionBaseInput {
258
261
  if (!this._keyManager) {
259
262
  return;
260
263
  }
264
+ if (KeyUtil.isKeyCode(event, TAB) && !this.interceptTabKey) {
265
+ return;
266
+ }
261
267
  event.stopImmediatePropagation();
262
268
  const activeItemIndex = this._keyManager.activeItemIndex;
263
269
  if (activeItemIndex) {
@@ -592,7 +598,7 @@ export class ListComponent extends CollectionBaseInput {
592
598
  }
593
599
  }
594
600
  ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.LiveAnnouncer }, { token: FD_LANGUAGE }, { token: i2.NgControl, optional: true, self: true }, { token: i2.ControlContainer, optional: true, self: true }, { token: i2.NgForm, optional: true, self: true }, { token: FD_FORM_FIELD, host: true, optional: true, skipSelf: true }, { token: FD_FORM_FIELD_CONTROL, host: true, optional: true, skipSelf: true }, { token: i3.ListConfig }], target: i0.ɵɵFactoryTarget.Component });
595
- ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ListComponent, selector: "fdp-list", inputs: { selectedItems: "selectedItems", ariaSetsize: "ariaSetsize", ariaMultiselectable: "ariaMultiselectable", loadTitle: "loadTitle", loadingLabel: "loadingLabel", delayTime: "delayTime", itemSize: "itemSize", loadMore: "loadMore", loadOnScroll: "loadOnScroll", role: "role", listType: "listType", maxHeight: "maxHeight", noBorder: "noBorder", scrollOffsetPercentage: "scrollOffsetPercentage", selection: "selection", selectionMode: "selectionMode", value: "value", rowSelection: "rowSelection", dataSource: "dataSource", navigated: "navigated", navigationIndicator: "navigationIndicator", hasByLine: "hasByLine", hasObject: "hasObject", unreadIndicator: "unreadIndicator" }, outputs: { selectedItemChange: "selectedItemChange" }, host: { listeners: { "click": "_updateNavigation($event)" }, properties: { "attr.tabindex": "-1" } }, providers: [
601
+ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ListComponent, selector: "fdp-list", inputs: { selectedItems: "selectedItems", ariaSetsize: "ariaSetsize", ariaMultiselectable: "ariaMultiselectable", loadTitle: "loadTitle", loadingLabel: "loadingLabel", delayTime: "delayTime", itemSize: "itemSize", loadMore: "loadMore", loadOnScroll: "loadOnScroll", role: "role", listType: "listType", maxHeight: "maxHeight", noBorder: "noBorder", scrollOffsetPercentage: "scrollOffsetPercentage", selection: "selection", selectionMode: "selectionMode", value: "value", rowSelection: "rowSelection", dataSource: "dataSource", navigated: "navigated", navigationIndicator: "navigationIndicator", hasByLine: "hasByLine", hasObject: "hasObject", unreadIndicator: "unreadIndicator", interceptTabKey: "interceptTabKey" }, outputs: { selectedItemChange: "selectedItemChange" }, host: { listeners: { "click": "_updateNavigation($event)" }, properties: { "attr.tabindex": "-1" } }, providers: [
596
602
  { provide: FD_FORM_FIELD_CONTROL, useExisting: ListComponent, multi: true },
597
603
  { provide: FdpListComponent, useExisting: ListComponent },
598
604
  {
@@ -693,6 +699,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
693
699
  type: Input
694
700
  }], unreadIndicator: [{
695
701
  type: Input
702
+ }], interceptTabKey: [{
703
+ type: Input
696
704
  }], selectedItemChange: [{
697
705
  type: Output
698
706
  }], anchor: [{
@@ -711,4 +719,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
711
719
  type: HostListener,
712
720
  args: ['click', ['$event']]
713
721
  }] } });
714
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osSUFBSSxFQUNKLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBQ1IsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUNILGVBQWUsRUFDZixVQUFVLEVBQ1YsT0FBTyxFQUVQLGNBQWMsRUFDZCxNQUFNLEVBQ04sY0FBYyxFQUNkLFlBQVksRUFDWixHQUFHLEVBQ0gsU0FBUyxFQUNULEVBQUUsRUFDRixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFF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ZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQXNVdEUsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciwgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IERPV05fQVJST1csIEVOVEVSLCBTUEFDRSwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBhc3luY1NjaGVkdWxlcixcbiAgICBmaWx0ZXIsXG4gICAgZmlyc3RWYWx1ZUZyb20sXG4gICAgaXNPYnNlcnZhYmxlLFxuICAgIG1hcCxcbiAgICBvYnNlcnZlT24sXG4gICAgb2YsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsIExpc3RVbnJlYWRJbmRpY2F0b3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSwgRmRMYW5ndWFnZSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFycmF5TGlzdERhdGFTb3VyY2UsXG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBMaXN0RGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2UsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIGlzQmxhbmssXG4gICAgaXNEYXRhU291cmNlLFxuICAgIGlzUHJlc2VudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBCYXNlTGlzdEl0ZW0sIExpc3RJdGVtRGVmIH0gZnJvbSAnLi9iYXNlLWxpc3QtaXRlbSc7XG5pbXBvcnQgeyBGZHBMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9mZHBMaXN0Q29tcG9uZW50LnRva2VuJztcbmltcG9ydCB7IExpc3RDb25maWcgfSBmcm9tICcuL2xpc3QuY29uZmlnJztcbmltcG9ydCB7IExvYWRNb3JlQ29udGVudENvbnRleHQsIExvYWRNb3JlQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4vbG9hZC1tb3JlLWNvbnRlbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZkcExpc3QsIEZkcExpc3REYXRhU291cmNlLCBMaXN0VHlwZSwgU2VsZWN0aW9uVHlwZSB9IGZyb20gJy4vbW9kZWxzL2xpc3QnO1xuXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uQ2hhbmdlRXZlbnQge1xuICAgIC8qKiBTZWxlY3RlZCBpdGVtcyAqL1xuICAgIHNlbGVjdGVkSXRlbXM6IEJhc2VMaXN0SXRlbVtdO1xuICAgIC8qKiBJbmRleCAqL1xuICAgIGluZGV4OiBudW1iZXI7XG59XG5cbmxldCBuZXh0TGlzdElkID0gMDtcblxuLyoqXG4gKiBUaGUgTGlzdCBjb21wb25lbnQgcmVwcmVzZW50cyBhIGNvbnRhaW5lciBmb3IgbGlzdCBpdGVtIHR5cGVzLlxuICogSXQgaXMgdXNlZCB0byBkaXNwbGF5IGEgbGlzdCBmZWF0dXJlcy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEZEX0ZPUk1fRklFTERfQ09OVFJPTCwgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRmRwTGlzdENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnQgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJy0xJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudDxUPlxuICAgIGV4dGVuZHMgQ29sbGVjdGlvbkJhc2VJbnB1dFxuICAgIGltcGxlbWVudHMgTGlzdFVucmVhZEluZGljYXRvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEZkcExpc3Q8QmFzZUxpc3RJdGVtPlxue1xuICAgIC8qKiAgQW4gYXJyYXkgdGhhdCBob2xkcyBhIGxpc3Qgb2YgYWxsIHNlbGVjdGVkIGl0ZW1zLiAqKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkSXRlbXM6IEJhc2VMaXN0SXRlbVtdO1xuXG4gICAgLyoqIGRlZmluZSBzaXplIG9mIGl0ZW1zIGZvciBzY3JlZW4gcmVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVNldHNpemU6IG51bWJlcjtcblxuICAgIC8qKiBEZWZpbmVzIHdoZXRoZXIgaXRlbXMgYXJlIG11bHRpc2VsZWN0YWJsZSBmb3Igc2NyZWVuIHJlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFNdWx0aXNlbGVjdGFibGU6IGJvb2xlYW47XG5cbiAgICAvKiogVGl0bGUgdXNlZCBvbiBidXR0b24gd2hlbiBkYXRhIGxvYWRzIG9uIGJ1dHRvbiBjbGljay4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIExhYmVsIHVzZWQgb24gYW5ub3VuY2UgbWVzc2FnZSBvZiBkYXRhIHdhcyBsb2FkZWQgZm9yIHNjcmVlbiByZWFkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZ0xhYmVsID0gJyc7XG5cbiAgICAvKiogV2FpdCB0aW1lIGZvciBuZXcgaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBkZWxheVRpbWU6IG51bWJlcjtcblxuICAgIC8qKiBJdGVtcyB0byBiZSBsb2FkZWQgYXQgb25jZS4gSW50aW5pdHkgKG5vIGxpbWl0KSBieSBkZWZhdWx0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbVNpemUgPSBJbmZpbml0eTtcblxuICAgIC8qKiBFbmFibGVzIGxhenkgbG9hZE1vcmUgb2YgZGF0YS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRNb3JlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBkYXRhIGxvYWQgb24gc2Nyb2xsIGZvciB0cnVlXG4gICAgICogZmFsc2U6IGVuYWJsZXMgZGF0YSBsb2FkaW5nIG9uIGJ1dHRvbiBjbGljay5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRPblNjcm9sbDogYm9vbGVhbjtcblxuICAgIC8qKiBkZWZpbmUgdGhlIHJvbGUgdG8gY3VzdG9tIHJlcXVpcmVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm9sZSA9ICdsaXN0JztcblxuICAgIC8qKiBMaXN0VHlwZSAnaW5hY3RpdmUnIHwgJ2FjdGl2ZScgfCAnbmF2aWdhdGlvbicgfCAnZGV0YWlsJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGlzdFR5cGU6IExpc3RUeXBlID0gJ2FjdGl2ZSc7XG5cbiAgICAvKiogTWF4IGhlaWdodCBmb3Igdmlld3BvcnQgdG8gZGlzcGxheSBzY3JvbGwuICovXG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgY29tcG9uZW50IGhhcyByZW1vdmVkIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlciA9IGZhbHNlO1xuXG4gICAgLyoqIFNjcm9sbCBvZmZzZXQgcGVyY2VudGFnZSB0byB0cmlnZ2VyIHNjcm9sbCBldmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNjcm9sbE9mZnNldFBlcmNlbnRhZ2U6IG51bWJlcjtcblxuICAgIC8qKiBFZW5hYmxlcyBzZWxlY3Rpb24gc3R5bGVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0aW9uLiBUeXBlcyBpbmNsdWRlOlxuICAgICAqICdub25lJ3wgJ211bHRpJyB8ICdzaW5nbGUnfCdkZWxldGUnLlxuICAgICAqIExlYXZlIGVtcHR5IGZvciBkZWZhdWx0ICgpLidcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIHNldCB0byAnbm9uZScuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25UeXBlID0gJ25vbmUnO1xuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciByYWRpbyBidXR0b24gYW5kIGNoZWNrYm94LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIHJvdyBsZXZlbCBTZWxlY3Rpb24uICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcm93U2VsZWN0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Jvd1NlbGVjdGlvbiA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fcm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLXNlbGVjdGlvbi1yb3cnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRlZCAmJiB0aGlzLmhhc09iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnZmQtbGlzdC0tc2VsZWN0aW9uLXJvdycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHJvd1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEZkcExpc3REYXRhU291cmNlPFQ+KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBkYXRhU291cmNlKCk6IEZkcExpc3REYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5hdmlnYXRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0ZWQgPSB2YWx1ZTtcblxuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSBbJ2ZkLWxpc3QtLW5hdmlnYXRpb24nXTtcbiAgICAgICAgaWYgKHRoaXMuaGFzT2JqZWN0KSB7XG4gICAgICAgICAgICBjbGFzc0xpc3QucHVzaCgnZmQtbGlzdC0tbmF2aWdhdGlvbi1vYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCguLi5jbGFzc0xpc3QpO1xuICAgIH1cblxuICAgIGdldCBuYXZpZ2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGlvbkluZGljYXRvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0aW9uSW5kaWNhdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1uYXZpZ2F0aW9uLWluZGljYXRpb24nKTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGlvbkluZGljYXRvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3I7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNCeUxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzQnlMaW5lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc0J5TGluZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLWJ5bGluZScpO1xuICAgIH1cblxuICAgIGdldCBoYXNCeUxpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNCeUxpbmU7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNPYmplY3QuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzT2JqZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc09iamVjdCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLW9iamVjdC1saXN0Jyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc09iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc09iamVjdDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHVucmVhZCBub3RpZmljYXRpb24gaW5kaWNhdG9yLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5yZWFkSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHNlbGVjdGVkIGl0ZW0gaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkSXRlbUNoYW5nZTogRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQWNjZXNzIGNoaWxkIGVsZW1lbnQsIGZvciBjaGVja2luZyBsaW5rIGNvbnRlbnQgKi9cbiAgICBAVmlld0NoaWxkKCdsaW5rJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgYW5jaG9yOiBFbGVtZW50UmVmPEhUTUxMaW5rRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBMaXN0SXRlbURlZikpXG4gICAgbGlzdEl0ZW1EZWY6IExpc3RJdGVtRGVmO1xuXG4gICAgLyoqIExvYWQgTW9yZSBMaXN0IGl0ZW0gY29udGVudCAqL1xuICAgIEBDb250ZW50Q2hpbGQoTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlKVxuICAgIGxvYWRNb3JlQ29udGVudDogTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlO1xuXG4gICAgLyoqIENoaWxkIGl0ZW1zIG9mIHRoZSBMaXN0LiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBCYXNlTGlzdEl0ZW0pLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8QmFzZUxpc3RJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF91bEVsZW1lbnQoKTogTnVsbGFibGU8SFRNTFVMaXN0RWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG8gZGlzcGxheSBsb2FkaW5nIHN5bWJvbFxuICAgICAqL1xuICAgIF9sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGtleU1hbmdlciB0byBoYW5kbGUga2V5Ym9yZCBldmVudHMgdXNlZCBpbiB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIF9rZXlNYW5hZ2VyOiBOdWxsYWJsZTxGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pdGVtczogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IEZkcExpc3REYXRhU291cmNlPFQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmFuc2xhdGlvblJlc29sdmVyID0gbmV3IFRyYW5zbGF0aW9uUmVzb2x2ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIE5hdmlnYXRpb24gbW9kZSBpcyBpbmNsdWRlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBhbGwgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbmF2aWdhdGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgQnkgbGluZSBpcyBwcmVzZW50IGluIGxpc3QgaXRlbVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhc0J5TGluZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIE5hdmlnYXRpb24gbW9kZSBpcyBpbmNsdWRlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGxpc3QgaXRlbXMgYXJlIG5hdmlnYWJsZVxuICAgICAqIHlvdSBzaG91bGQgaW5kaWNhdGUgdGhvc2UgYnkgZGlzcGxheWluZyBhIG5hdmlnYXRpb24gYXJyb3dcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uYXZpZ2F0aW9uSW5kaWNhdG9yOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgb2JqZWN0IHByZXNlbnQgaW4gbGlzdCBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFzT2JqZWN0OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZlcmZpZXMgcGFydGlhbCBuYXZpZ2F0aW9uIGVuYWJsZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3BhcnRpYWxOYXZpZ2F0aW9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhlIG1vZGVsIGJhY2tpbmcgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8QmFzZUxpc3RJdGVtPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIGxpc3QgY29tcG9uZW50IGhhcyBtdWx0aXNlbGVjdGlvblxuICAgICAqIGJpbmRpbmcgaW4gdGVtcGF0ZSB0byBhcHBlbmQgY2xhc3NcbiAgICAgKi9cbiAgICBwcml2YXRlIF9tdWx0aVNlbGVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZHZhbHVlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgcm93IGxldmVsIHNlbGVjdGlvbiBtb2RlIGlzIGVuYWJsZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBmb3IgYWxsIHRoZSBpdGVtc1xuICAgICAqL1xuICAgIHByaXZhdGUgX3Jvd1NlbGVjdGlvbjogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuIFRvIHN0b3JlICovXG4gICAgcHJpdmF0ZSBfdGVtcEl0ZW1zOiBUW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RhcnRJbmRleCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3RJbmRleCA9IHRoaXMuaXRlbVNpemU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RzSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGZvciBkYXRhIHNvdXJjZSBoYW5kbGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgX2RzU3Vic2NyaXB0aW9uOiBOdWxsYWJsZTxTdWJzY3JpcHRpb24+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYW5ndWFnZTogRmRMYW5ndWFnZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWZ0ZXJWaWV3SW5pdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9saXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICAgICAgICBASW5qZWN0KEZEX0xBTkdVQUdFKSBwcml2YXRlIHJlYWRvbmx5IF9sYW5ndWFnZSQ6IE9ic2VydmFibGU8RmRMYW5ndWFnZT4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0Zvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIHByb3RlY3RlZCBfbGlzdENvbmZpZz86IExpc3RDb25maWdcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2NoYW5nZURldGVjdG9yUmVmLCBlbGVtZW50UmVmLCBuZ0NvbnRyb2wsIGNvbnRyb2xDb250YWluZXIsIG5nRm9ybSwgZm9ybUZpZWxkLCBmb3JtQ29udHJvbCk7XG4gICAgICAgIHRoaXMuX2luaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbGFuZ3VhZ2UkKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGNvbnRleHQgZm9yIGxvYWQgbW9yZSBidXR0b24gKi9cbiAgICBnZXRMb2FkTW9yZUNvbnRlbnRDb250ZXh0KCk6IExvYWRNb3JlQ29udGVudENvbnRleHQge1xuICAgICAgICBjb25zdCAkaW1wbGljaXQgPSB7XG4gICAgICAgICAgICBsb2FkVGl0bGU6IHRoaXMubG9hZFRpdGxlLFxuICAgICAgICAgICAgbG9hZGluZzogdGhpcy5fbG9hZGluZyxcbiAgICAgICAgICAgIGxvYWRpbmdMYWJlbDogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGxhbmd1YWdlKSA9PiB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUobGFuZ3VhZ2UsICdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5sb2FkaW5nTGFiZWwpO1xuICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgICAgIGxhc3RDaHVuazoge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fbGFzdEluZGV4XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG90YWw6IHRoaXMuX2RzSXRlbXMubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQsXG4gICAgICAgICAgICAuLi4kaW1wbGljaXRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIGxpcyBjb21wb25lbnQgd2l0aCBzZWxlY3Rpb24gbW9kZVxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICB0aGlzLmlkID0gYGZkcC1saXN0LSR7bmV4dExpc3RJZCsrfWA7XG5cbiAgICAgICAgLy8gdXNpbmcgc2VsZWN0aW9uIE1vZGVsIGZvciBtdWx0aXNlbGVjdFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLl9tdWx0aVNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFyaWFNdWx0aXNlbGVjdGFibGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlTZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPEJhc2VMaXN0SXRlbT4odGhpcy5fbXVsdGlTZWxlY3QsIHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VFdmVudCgpO1xuICAgICAgICAgICAgZXZlbnQuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBLZXlib2FyZCBtYW5hZ2VyIG9uIGxpc3QgaXRlbXMsIHNldCB2YWx1ZXMgd2hlbiBwYXNzZWQgdmlhIGFycmF5XG4gICAgICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZnRlclZpZXdJbml0JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcjxCYXNlTGlzdEl0ZW0+KHRoaXMubGlzdEl0ZW1zKS53aXRoV3JhcCgpO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuY2hhbmdlc1xuICAgICAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aCh0aGlzLmxpc3RJdGVtcyksIG9ic2VydmVPbihhc3luY1NjaGVkdWxlcikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVMaXN0SXRlbXMoKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdmZC1idXN5LWluZGljYXRvcicpO1xuICAgICAgICBpbmRpY2F0b3I/LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICcnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGhhbmRsaW5lIGtleWJvYXJkIG9wZXJhdGlvbnNcbiAgICAgKiBpbiB0ZW1wbGF0ZSBvbiBsaXN0IGFuZCBsaXN0IGl0ZW1zXG4gICAgICovXG4gICAgX2hhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBOdWxsYWJsZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghdGhpcy5fa2V5TWFuYWdlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlSXRlbUluZGV4OiBOdWxsYWJsZTxudW1iZXI+ID0gdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg7XG5cbiAgICAgICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q3VycmVudEFjdGl2ZUl0ZW1JbmRleChhY3RpdmVJdGVtSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVOYXZpZ2F0aW9uKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldEN1cnJlbnRBY3RpdmVJdGVtSW5kZXgoYWN0aXZlSXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uc2V0QWN0aXZlSXRlbShhY3RpdmVJdGVtSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBiaW5kZWQgaW4gdGVtcGxhdGUgb24gc2Nyb2xsXG4gICAgICovXG4gICAgX3Njcm9sbEhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGluZyAmJiB0aGlzLmxvYWRPblNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5fZ2V0TW9yZURhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBsb2FkIG1vcmUgb24gZW50ZXIgb3Igc3BhY2UgcHJlc3NcbiAgICAgKi9cbiAgICBfbG9hZE9uS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyBsYXp5IGxvYWRpbmcgZGF0YVxuICAgICAqIHVzZWQgaW4gdGVtcGxhdGVcbiAgICAgKiBvbnNjcm9sbCBhbmQgb24gbW9yZSBidXR0b24gY2xpY2tcbiAgICAgKi9cbiAgICBfZ2V0TW9yZURhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB0cnVlO1xuICAgICAgICBvZih0aGlzLl9sb2FkTmV3SXRlbXMoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcChhc3luYyAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCbGFuayhkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignPT09SW52YWxpZCBSZXNwb25zZSByZWNlaXZlZD09PScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0xhYmVsID0gdGhpcy5fdHJhbnNsYXRpb25SZXNvbHZlci5yZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UodGhpcy5sb2FkaW5nTGFiZWwsICdhc3NlcnRpdmUnKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBkZWxheSh0aGlzLmRlbGF5VGltZSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc1ByZXNlbnQocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5faXRlbXMubGVuZ3RoLCBqID0gMDsgaiA8IHJlc3VsdC5sZW5ndGg7ICsraSwgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtc1tpXSA9IHJlc3VsdFtqXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogdXNlZCBpbiB0ZW1wYXRlIHRvIGdldCBTZWxlY3RlZCBpdGVtcyBmcm9tIGEgbGlzdFxuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgX29uU2VsZWN0aW9uQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlTmF2aWdhdGlvbihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIG9uIFVwZGF0ZSBuYXZnaWF0aW9uIHN0eWxlcyBmb3Igbm9uIG5hdmlnYXRlZCBpdGVtc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICogc2VwcmF0ZSBQUiBmb3IgY3VzdG9tIGV2ZW50XG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIF91cGRhdGVOYXZpZ2F0aW9uKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4gPSAnMCc7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQ6IE51bGxhYmxlPEhUTUxFbGVtZW50PiA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gZXZlbnQudGFyZ2V0IDogbnVsbDtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudD8uY2xvc2VzdCgnLmZkLWxpc3RfX2l0ZW0nKTtcbiAgICAgICAgaWYgKGlzUHJlc2VudChwYXJlbnQpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9IHBhcmVudD8uZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uYW5jaG9yPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLW5hdmlnYXRlZCcpO1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5fZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnVwZGF0ZUFjdGl2ZUl0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBlbCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKCFlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlua0VsZW1lbnQgPSBlbC5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgIGlmIChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJykge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnaXMtbmF2aWdhdGVkJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnbGknICYmICEhbGlua0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGxpbmtFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lzLW5hdmlnYXRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogc2VsZWN0aW9uIG1hbmFnZW1lbnQgc2hvdWxkIGJlIGNvbXBsZXRlbHkgY2hhbmdlZCBodHRwczovL2dpdGh1Yi5jb20vU0FQL2Z1bmRhbWVudGFsLW5neC9pc3N1ZXMvODAwOFxuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJvd1NlbGVjdChzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50LCBzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNdWx0aVNlbGVjdChzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RJdGVtKGl0ZW06IEJhc2VMaXN0SXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RzSXRlbXMubGVuZ3RoICE9PSBudWxsICYmIHRoaXMuaXRlbVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9kc0l0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRFMoZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RzSXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgTGlzdERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBUW10gYXMgRGF0YVNvdXJjZVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiBMaXN0RGF0YVNvdXJjZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxMaXN0RGF0YVNvdXJjZTxUPj5zb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIHdvcmsgb24gdG9wIG9mIGFycmF5c1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG4gICAgICAgIGlmIChpbml0RGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gaW5pdERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIFNldCBuZXcgaXRlbXMgd2hlbiBjb21wb25lbnQgaXMgZnVsbHkgaW5pdGlhdGVkIGFuZCBhbGwgY2hpbGQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRGb3JWaWV3SW5pdCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNJdGVtcyA9IGRhdGEgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9kc0l0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVxdWVzdGVkKCkuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9sb2FkaW5nID0gdHJ1ZSkpKTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBpbml0RGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0TG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBtYXRjaFBhcmFtcyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBtYXRjaFBhcmFtcy5zZXQoJ3F1ZXJ5JywgJyonKTtcbiAgICAgICAgbWF0Y2hQYXJhbXMuc2V0KCdsaW1pdCcsIHRoaXMuaXRlbVNpemUpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXRjaFBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbG9hZE5ld0l0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSB0aGlzLl9zdGFydEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5fbGFzdEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fdGVtcEl0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3QgaXRlbSB3aXRoIHJhZGlvIGJ1dHRvbiBzdHlsZXMsIGNoZWNrLCB1bmNoZWNrdXBkYXRlc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCwgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGNvbnN0IHJhZGlvID0gcGFyZW50ID8gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykgOiBudWxsO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZHZhbHVlID0gcmFkaW8gPyAoPEhUTUxJbnB1dEVsZW1lbnQ+cmFkaW8pLnZhbHVlIDogbnVsbDtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGl0ZW0ucmFkaW9CdXR0b25Db21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGlvblZhbHVlID0gdGhpcy5fc2VsZWN0ZWR2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUm93U2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIC8vIGhhbmRsZXMgbXV0bGkgc2VsZWN0IG9uIHJvdyBsZXZlbCB3aXRob3V0IGNoZWNrYm94XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZXMgc2luZ2xlIHNlbGVjdCBvbiByb3cgbGV2ZWwgd2l0aG91dCByYWRpb2J1dHRvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS5hbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgaXRlbS5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgIT09IHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1zZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9ICcwJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IGl0ZW0gd2l0aCBjaGVja2JveCBzdHlsZXMsY2hlY2ssdW5jaGVja3VwZGF0ZXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU11bHRpU2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCBgJHshc2VsZWN0fWApO1xuICAgICAgICAgICAgaWYgKGl0ZW0uX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0dXBMaXN0SXRlbShpdGVtOiBCYXNlTGlzdEl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaXRlbS5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3Rpb25Nb2RlO1xuICAgICAgICBpdGVtLnJvd1NlbGVjdGlvbiA9IHRoaXMucm93U2VsZWN0aW9uO1xuICAgICAgICBpdGVtLl9oYXNCeUxpbmUgPSB0aGlzLmhhc0J5TGluZTtcbiAgICAgICAgaXRlbS5pdGVtU2VsZWN0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0odGhpcy5saXN0SXRlbXMudG9BcnJheSgpLmluZGV4T2YoaXRlbSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZXR0aW5nIHZhbHVlcyBmcm9tIGxpc3QgdG8gbGlzdCBpdGVtc1xuICAgICAqIGV4YW1wbGU6XG4gICAgICogRG9lcyBsaXN0IGl0ZW0gaGFzIG5hdmlnYXRpb24sXG4gICAgICogc2hvdWxkIHNob3cgYXJyb3dzLFxuICAgICAqIHdpbGwgaXQgYmUgY29tcGFjdCBtb2RlLFxuICAgICAqIHNob3VsZCBiZSBpbiB3aGljaCBzZWxlY3Rpb24gbW9kZVxuICAgICAqIHNldCB2YWx1ZXMgd2hlbiBwYXNzZWQgdmlhIGRhdGFzb3VyY2VcbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVMaXN0SXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxpc3RJdGVtcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZpcnN0Lmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYXJpYUxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmFyaWFTZXRzaXplID0gdGhpcy5saXN0SXRlbXMubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGFydGlhbE5hdmlnYXRpb24gPSB0aGlzLmxpc3RJdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLm5hdmlnYXRpb25JbmRpY2F0b3IgfHwgaXRlbS5saXN0VHlwZSA9PT0gJ2RldGFpbCcpO1xuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3BhcnRpYWxOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5uYXZpZ2F0ZWQgPSB0aGlzLm5hdmlnYXRlZDtcbiAgICAgICAgICAgICAgICBpdGVtLm5hdmlnYXRpb25JbmRpY2F0b3IgPSB0aGlzLm5hdmlnYXRpb25JbmRpY2F0b3I7XG4gICAgICAgICAgICAgICAgaXRlbS5saXN0VHlwZSA9IHRoaXMubGlzdFR5cGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0uYXJpYVBvc2luZXQgPSBpbmRleDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF93YWl0Rm9yVmlld0luaXQ8U291cmNlRGF0YVR5cGU+KCkge1xuICAgICAgICByZXR1cm4gKHNvdXJjZTogT2JzZXJ2YWJsZTxTb3VyY2VEYXRhVHlwZT4pOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPiA9PlxuICAgICAgICAgICAgc291cmNlLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzcmMpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FmdGVyVmlld0luaXQkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGFmdGVyVmlld0luaXQpID0+IGFmdGVyVmlld0luaXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHNyYylcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmQtdG9vbGJhclwiPjwvbmctY29udGVudD5cbjx1bFxuICAgIGZkLWxpc3RcbiAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgW25vQm9yZGVyXT1cIm5vQm9yZGVyXCJcbiAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXG4gICAgW2J5bGluZV09XCJoYXNCeUxpbmVcIlxuICAgIFtjbGFzcy5mZC1saXN0LS1uYXZpZ2F0aW9uXT1cIm5hdmlnYXRlZCB8fCBuYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICBbbmF2aWdhdGlvbkluZGljYXRvcl09XCJuYXZpZ2F0aW9uSW5kaWNhdG9yXCJcbiAgICBzdHlsZT1cIm91dGxpbmU6IG5vbmVcIlxuICAgIChrZXlkb3duKT1cIl9rZXlNYW5hZ2VyPy5vbktleWRvd24oJGV2ZW50KTsgX2hhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgKGNoYW5nZSk9XCJfb25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJhcmlhU2V0c2l6ZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXT1cImFyaWFNdWx0aXNlbGVjdGFibGVcIlxuICAgIFtyb2xlXT1cInJvbGVcIlxuICAgIFt1bnJlYWRJbmRpY2F0b3JdPVwidW5yZWFkSW5kaWNhdG9yXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZE1vcmUgJiYgbG9hZE9uU2Nyb2xsXCI+XG4gICAgICAgIDxmZC1idXN5LWluZGljYXRvclxuICAgICAgICAgICAgc2l6ZT1cImxcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1idXN5LWluZGljYXRvci1jdXN0b20gZmQtbGlzdF9faXRlbS0tZ3Jvd2luZ1wiXG4gICAgICAgICAgICBbYmxvY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJfbG9hZGluZyAmJiBfZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1idXN5XT1cIl9sb2FkaW5nXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiX2xvYWRpbmcgPyAoJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgZmQtbGlzdFxuICAgICAgICAgICAgICAgIGZkSW5maW5pdGVTY3JvbGxcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWxpc3RfX2luZmluaXRlLXNjcm9sbFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAob25TY3JvbGxBY3Rpb24pPVwiX3Njcm9sbEhhbmRsZXIoKVwiXG4gICAgICAgICAgICAgICAgW3Njcm9sbFBlcmNlbnRdPVwic2Nyb2xsT2Zmc2V0UGVyY2VudGFnZVwiXG4gICAgICAgICAgICAgICAgW3JvbGVdPVwicm9sZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9pdGVtcy5sZW5ndGggIT09IDA7IHRoZW4gdGhlbkJsb2NrOyBlbHNlIGVsc2VCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkT25TY3JvbGxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiX2l0ZW1zLmxlbmd0aCAhPT0gMDsgdGhlbiB0aGVuQmxvY2s7IGVsc2UgZWxzZUJsb2NrXCI+IDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxsaVxuICAgICAgICAgICAgI2xpc3RJdGVtXG4gICAgICAgICAgICAqbmdJZj1cImxvYWRNb3JlICYmICFsb2FkT25TY3JvbGwgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIl9nZXRNb3JlRGF0YSgpXCJcbiAgICAgICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICAgICAgKGtleWRvd24pPVwiX2xvYWRPbktleVByZXNzKCRldmVudClcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLWxpc3RfX2l0ZW0tLWN1c3RvbS1jb250ZW50XT1cImxvYWRNb3JlQ29udGVudFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWxpc3RfX2l0ZW0gZmQtbGlzdF9faXRlbS0tZ3Jvd2luZyBmZC1saXN0X19pdGVtLS1hY3Rpb25cIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsb2FkTW9yZUVsZW1lbnRDb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9saT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2xvYWRNb3JlRWxlbWVudENvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkTW9yZUNvbnRlbnQ7IGVsc2UgZGVmYXVsdENvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1saXN0X190aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJsb2FkTW9yZUNvbnRlbnQudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0TG9hZE1vcmVDb250ZW50Q29udGV4dCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29udGVudD5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmZC1saXN0X190aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxmZC1idXN5LWluZGljYXRvclxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtYnVzeS1pbmRpY2F0b3ItY3VzdG9tXCJcbiAgICAgICAgICAgICAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiX2xvYWRpbmcgPyAoJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlKSA6IGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgICAgICAgICAge3sgbG9hZFRpdGxlIH19XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiI2xvYWRcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC91bD5cblxuPG5nLXRlbXBsYXRlICN0aGVuQmxvY2s+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfaXRlbXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RJdGVtRGVmLnRlbXBsYXRlUmVmOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+IDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGlzdEl0ZW1zLmxlbmd0aCAmJiAhX2ZpcnN0TG9hZGluZ0RvbmVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoYXNCeUxpbmU7IGVsc2UgYnlsaW5lTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiBzdHlsZT1cIm1hcmdpbjogYXV0byAwXCIgdHlwZT1cInRleHRcIiB0ZXh0TGluZXM9XCIxXCIgd2lkdGg9XCI0MCVcIj48L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjYnlsaW5lTG9hZGluZz5cbiAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiNDhweFwiIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjBcIiB3aWR0aD1cIjQwJVwiIGhlaWdodD1cIjEyXCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZzpyZWN0IHg9XCI2MFwiIHk9XCIyMFwiIHdpZHRoPVwiMzAlXCIgaGVpZ2h0PVwiOFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgPC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
722
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBRVAsY0FBYyxFQUNkLE1BQU0sRUFDTixjQUFjLEVBQ2QsWUFBWSxFQUNaLEdBQUcsRUFDSCxTQUFTLEVBQ1QsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxN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S1AsTUFBTTtzQkFETCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS3ZDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUszQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUt0QyxTQUFTO3NCQURSLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkEwVXRFLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIsIExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UsIFRBQiwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBhc3luY1NjaGVkdWxlcixcbiAgICBmaWx0ZXIsXG4gICAgZmlyc3RWYWx1ZUZyb20sXG4gICAgaXNPYnNlcnZhYmxlLFxuICAgIG1hcCxcbiAgICBvYnNlcnZlT24sXG4gICAgb2YsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsIExpc3RVbnJlYWRJbmRpY2F0b3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSwgRmRMYW5ndWFnZSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFycmF5TGlzdERhdGFTb3VyY2UsXG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBMaXN0RGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2UsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIGlzQmxhbmssXG4gICAgaXNEYXRhU291cmNlLFxuICAgIGlzUHJlc2VudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBCYXNlTGlzdEl0ZW0sIExpc3RJdGVtRGVmIH0gZnJvbSAnLi9iYXNlLWxpc3QtaXRlbSc7XG5pbXBvcnQgeyBGZHBMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9mZHBMaXN0Q29tcG9uZW50LnRva2VuJztcbmltcG9ydCB7IExpc3RDb25maWcgfSBmcm9tICcuL2xpc3QuY29uZmlnJztcbmltcG9ydCB7IExvYWRNb3JlQ29udGVudENvbnRleHQsIExvYWRNb3JlQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4vbG9hZC1tb3JlLWNvbnRlbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZkcExpc3QsIEZkcExpc3REYXRhU291cmNlLCBMaXN0VHlwZSwgU2VsZWN0aW9uVHlwZSB9IGZyb20gJy4vbW9kZWxzL2xpc3QnO1xuXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uQ2hhbmdlRXZlbnQge1xuICAgIC8qKiBTZWxlY3RlZCBpdGVtcyAqL1xuICAgIHNlbGVjdGVkSXRlbXM6IEJhc2VMaXN0SXRlbVtdO1xuICAgIC8qKiBJbmRleCAqL1xuICAgIGluZGV4OiBudW1iZXI7XG59XG5cbmxldCBuZXh0TGlzdElkID0gMDtcblxuLyoqXG4gKiBUaGUgTGlzdCBjb21wb25lbnQgcmVwcmVzZW50cyBhIGNvbnRhaW5lciBmb3IgbGlzdCBpdGVtIHR5cGVzLlxuICogSXQgaXMgdXNlZCB0byBkaXNwbGF5IGEgbGlzdCBmZWF0dXJlcy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEZEX0ZPUk1fRklFTERfQ09OVFJPTCwgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRmRwTGlzdENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnQgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJy0xJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudDxUPlxuICAgIGV4dGVuZHMgQ29sbGVjdGlvbkJhc2VJbnB1dFxuICAgIGltcGxlbWVudHMgTGlzdFVucmVhZEluZGljYXRvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEZkcExpc3Q8QmFzZUxpc3RJdGVtPlxue1xuICAgIC8qKiAgQW4gYXJyYXkgdGhhdCBob2xkcyBhIGxpc3Qgb2YgYWxsIHNlbGVjdGVkIGl0ZW1zLiAqKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkSXRlbXM6IEJhc2VMaXN0SXRlbVtdO1xuXG4gICAgLyoqIGRlZmluZSBzaXplIG9mIGl0ZW1zIGZvciBzY3JlZW4gcmVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVNldHNpemU6IG51bWJlcjtcblxuICAgIC8qKiBEZWZpbmVzIHdoZXRoZXIgaXRlbXMgYXJlIG11bHRpc2VsZWN0YWJsZSBmb3Igc2NyZWVuIHJlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFNdWx0aXNlbGVjdGFibGU6IGJvb2xlYW47XG5cbiAgICAvKiogVGl0bGUgdXNlZCBvbiBidXR0b24gd2hlbiBkYXRhIGxvYWRzIG9uIGJ1dHRvbiBjbGljay4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIExhYmVsIHVzZWQgb24gYW5ub3VuY2UgbWVzc2FnZSBvZiBkYXRhIHdhcyBsb2FkZWQgZm9yIHNjcmVlbiByZWFkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZ0xhYmVsID0gJyc7XG5cbiAgICAvKiogV2FpdCB0aW1lIGZvciBuZXcgaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBkZWxheVRpbWU6IG51bWJlcjtcblxuICAgIC8qKiBJdGVtcyB0byBiZSBsb2FkZWQgYXQgb25jZS4gSW50aW5pdHkgKG5vIGxpbWl0KSBieSBkZWZhdWx0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbVNpemUgPSBJbmZpbml0eTtcblxuICAgIC8qKiBFbmFibGVzIGxhenkgbG9hZE1vcmUgb2YgZGF0YS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRNb3JlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBkYXRhIGxvYWQgb24gc2Nyb2xsIGZvciB0cnVlXG4gICAgICogZmFsc2U6IGVuYWJsZXMgZGF0YSBsb2FkaW5nIG9uIGJ1dHRvbiBjbGljay5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRPblNjcm9sbDogYm9vbGVhbjtcblxuICAgIC8qKiBkZWZpbmUgdGhlIHJvbGUgdG8gY3VzdG9tIHJlcXVpcmVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm9sZSA9ICdsaXN0JztcblxuICAgIC8qKiBMaXN0VHlwZSAnaW5hY3RpdmUnIHwgJ2FjdGl2ZScgfCAnbmF2aWdhdGlvbicgfCAnZGV0YWlsJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGlzdFR5cGU6IExpc3RUeXBlID0gJ2FjdGl2ZSc7XG5cbiAgICAvKiogTWF4IGhlaWdodCBmb3Igdmlld3BvcnQgdG8gZGlzcGxheSBzY3JvbGwuICovXG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgY29tcG9uZW50IGhhcyByZW1vdmVkIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlciA9IGZhbHNlO1xuXG4gICAgLyoqIFNjcm9sbCBvZmZzZXQgcGVyY2VudGFnZSB0byB0cmlnZ2VyIHNjcm9sbCBldmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNjcm9sbE9mZnNldFBlcmNlbnRhZ2U6IG51bWJlcjtcblxuICAgIC8qKiBFZW5hYmxlcyBzZWxlY3Rpb24gc3R5bGVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0aW9uLiBUeXBlcyBpbmNsdWRlOlxuICAgICAqICdub25lJ3wgJ211bHRpJyB8ICdzaW5nbGUnfCdkZWxldGUnLlxuICAgICAqIExlYXZlIGVtcHR5IGZvciBkZWZhdWx0ICgpLidcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIHNldCB0byAnbm9uZScuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25UeXBlID0gJ25vbmUnO1xuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciByYWRpbyBidXR0b24gYW5kIGNoZWNrYm94LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIHJvdyBsZXZlbCBTZWxlY3Rpb24uICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcm93U2VsZWN0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Jvd1NlbGVjdGlvbiA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fcm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLXNlbGVjdGlvbi1yb3cnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRlZCAmJiB0aGlzLmhhc09iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnZmQtbGlzdC0tc2VsZWN0aW9uLXJvdycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHJvd1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEZkcExpc3REYXRhU291cmNlPFQ+KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBkYXRhU291cmNlKCk6IEZkcExpc3REYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5hdmlnYXRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0ZWQgPSB2YWx1ZTtcblxuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSBbJ2ZkLWxpc3QtLW5hdmlnYXRpb24nXTtcbiAgICAgICAgaWYgKHRoaXMuaGFzT2JqZWN0KSB7XG4gICAgICAgICAgICBjbGFzc0xpc3QucHVzaCgnZmQtbGlzdC0tbmF2aWdhdGlvbi1vYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCguLi5jbGFzc0xpc3QpO1xuICAgIH1cblxuICAgIGdldCBuYXZpZ2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGlvbkluZGljYXRvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0aW9uSW5kaWNhdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1uYXZpZ2F0aW9uLWluZGljYXRpb24nKTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGlvbkluZGljYXRvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3I7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNCeUxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzQnlMaW5lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc0J5TGluZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLWJ5bGluZScpO1xuICAgIH1cblxuICAgIGdldCBoYXNCeUxpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNCeUxpbmU7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNPYmplY3QuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzT2JqZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc09iamVjdCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLW9iamVjdC1saXN0Jyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc09iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc09iamVjdDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHVucmVhZCBub3RpZmljYXRpb24gaW5kaWNhdG9yLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5yZWFkSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byBpbnRlcmNlcHQgdGFiIGtleSBuYXZpZ2F0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW50ZXJjZXB0VGFiS2V5ID0gdHJ1ZTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gc2VsZWN0ZWQgaXRlbSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICAgIC8qKiBBY2Nlc3MgY2hpbGQgZWxlbWVudCwgZm9yIGNoZWNraW5nIGxpbmsgY29udGVudCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpbmsnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBhbmNob3I6IEVsZW1lbnRSZWY8SFRNTExpbmtFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IExpc3RJdGVtRGVmKSlcbiAgICBsaXN0SXRlbURlZjogTGlzdEl0ZW1EZWY7XG5cbiAgICAvKiogTG9hZCBNb3JlIExpc3QgaXRlbSBjb250ZW50ICovXG4gICAgQENvbnRlbnRDaGlsZChMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUpXG4gICAgbG9hZE1vcmVDb250ZW50OiBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmU7XG5cbiAgICAvKiogQ2hpbGQgaXRlbXMgb2YgdGhlIExpc3QuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IEJhc2VMaXN0SXRlbSksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxCYXNlTGlzdEl0ZW0+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3VsRWxlbWVudCgpOiBOdWxsYWJsZTxIVE1MVUxpc3RFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd1bCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUbyBkaXNwbGF5IGxvYWRpbmcgc3ltYm9sXG4gICAgICovXG4gICAgX2xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGZpcnN0IGxvYWRpbmcgd2hlbiBza2VsZXRvbnMgYmUgc2hvd24gYW5kIHN1YnNlcXVlbnQgbG9hZGluZ3Mgd2hlbiBidXN5IGluZGljYXRvciBiZSBzaG93blxuICAgICAqL1xuICAgIF9maXJzdExvYWRpbmdEb25lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICoga2V5TWFuZ2VyIHRvIGhhbmRsZSBrZXlib3JkIGV2ZW50cyB1c2VkIGluIHRlbXBsYXRlXG4gICAgICovXG4gICAgX2tleU1hbmFnZXI6IE51bGxhYmxlPEZvY3VzS2V5TWFuYWdlcjxCYXNlTGlzdEl0ZW0+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1zOiBUW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZTogRmRwTGlzdERhdGFTb3VyY2U8VD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogZm9yIGFsbCB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uYXZpZ2F0ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBCeSBsaW5lIGlzIHByZXNlbnQgaW4gbGlzdCBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFzQnlMaW5lOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogb25seSBhIHN1YnNldCBvZiB0aGUgbGlzdCBpdGVtcyBhcmUgbmF2aWdhYmxlXG4gICAgICogeW91IHNob3VsZCBpbmRpY2F0ZSB0aG9zZSBieSBkaXNwbGF5aW5nIGEgbmF2aWdhdGlvbiBhcnJvd1xuICAgICAqL1xuICAgIHByaXZhdGUgX25hdmlnYXRpb25JbmRpY2F0b3I6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBvYmplY3QgcHJlc2VudCBpbiBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYXNPYmplY3Q6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVmVyZmllcyBwYXJ0aWFsIG5hdmlnYXRpb24gZW5hYmxlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfcGFydGlhbE5hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGUgbW9kZWwgYmFja2luZyBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxCYXNlTGlzdEl0ZW0+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIG11bHRpc2VsZWN0aW9uXG4gICAgICogYmluZGluZyBpbiB0ZW1wYXRlIHRvIGFwcGVuZCBjbGFzc1xuICAgICAqL1xuICAgIHByaXZhdGUgX211bHRpU2VsZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkdmFsdWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciByb3cgbGV2ZWwgc2VsZWN0aW9uIG1vZGUgaXMgZW5hYmxlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBhbGwgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcm93U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gVG8gc3RvcmUgKi9cbiAgICBwcml2YXRlIF90ZW1wSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGFydEluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHNJdGVtczogVFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogZm9yIGRhdGEgc291cmNlIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb246IE51bGxhYmxlPFN1YnNjcmlwdGlvbj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhbmd1YWdlOiBGZExhbmd1YWdlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZnRlclZpZXdJbml0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBJbmplY3QoRkRfTEFOR1VBR0UpIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlJDogT2JzZXJ2YWJsZTxGZExhbmd1YWdlPixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTERfQ09OVFJPTCkgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgcHJvdGVjdGVkIF9saXN0Q29uZmlnPzogTGlzdENvbmZpZ1xuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICAgICAgdGhpcy5faW5pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl9sYW5ndWFnZSQpO1xuICAgIH1cblxuICAgIC8qKiBHZXQgY29udGV4dCBmb3IgbG9hZCBtb3JlIGJ1dHRvbiAqL1xuICAgIGdldExvYWRNb3JlQ29udGVudENvbnRleHQoKTogTG9hZE1vcmVDb250ZW50Q29udGV4dCB7XG4gICAgICAgIGNvbnN0ICRpbXBsaWNpdCA9IHtcbiAgICAgICAgICAgIGxvYWRUaXRsZTogdGhpcy5sb2FkVGl0bGUsXG4gICAgICAgICAgICBsb2FkaW5nOiB0aGlzLl9sb2FkaW5nLFxuICAgICAgICAgICAgbG9hZGluZ0xhYmVsOiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgobGFuZ3VhZ2UpID0+IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShsYW5ndWFnZSwgJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJykpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmxvYWRpbmdMYWJlbCk7XG4gICAgICAgICAgICB9KSgpLFxuICAgICAgICAgICAgbGFzdENodW5rOiB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuX3N0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgZW5kOiB0aGlzLl9sYXN0SW5kZXhcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b3RhbDogdGhpcy5fZHNJdGVtcy5sZW5ndGhcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdCxcbiAgICAgICAgICAgIC4uLiRpbXBsaWNpdFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgbGlzIGNvbXBvbmVudCB3aXRoIHNlbGVjdGlvbiBtb2RlXG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldEl0ZW1zKCk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgICAgIHRoaXMuaWQgPSBgZmRwLWxpc3QtJHtuZXh0TGlzdElkKyt9YDtcblxuICAgICAgICAvLyB1c2luZyBzZWxlY3Rpb24gTW9kZWwgZm9yIG11bHRpc2VsZWN0XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMuX211bHRpU2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYXJpYU11bHRpc2VsZWN0YWJsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tdWx0aVNlbGVjdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8QmFzZUxpc3RJdGVtPih0aGlzLl9tdWx0aVNlbGVjdCwgdGhpcy5zZWxlY3RlZEl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZUV2ZW50KCk7XG4gICAgICAgICAgICBldmVudC5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChldmVudCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEtleWJvYXJkIG1hbmFnZXIgb24gbGlzdCBpdGVtcywgc2V0IHZhbHVlcyB3aGVuIHBhc3NlZCB2aWEgYXJyYXlcbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FmdGVyVmlld0luaXQkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyPEJhc2VMaXN0SXRlbT4odGhpcy5saXN0SXRlbXMpLndpdGhXcmFwKCk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5jaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHRoaXMubGlzdEl0ZW1zKSwgb2JzZXJ2ZU9uKGFzeW5jU2NoZWR1bGVyKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3VwZGF0ZUxpc3RJdGVtcygpKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGluZGljYXRvciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZkLWJ1c3ktaW5kaWNhdG9yJyk7XG4gICAgICAgIGluZGljYXRvcj8uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJycpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogaGFuZGxpbmUga2V5Ym9hcmQgb3BlcmF0aW9uc1xuICAgICAqIGluIHRlbXBsYXRlIG9uIGxpc3QgYW5kIGxpc3QgaXRlbXNcbiAgICAgKi9cbiAgICBfaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IE51bGxhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9rZXlNYW5hZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFRBQikgJiYgIXRoaXMuaW50ZXJjZXB0VGFiS2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtSW5kZXg6IE51bGxhYmxlPG51bWJlcj4gPSB0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtcblxuICAgICAgICBpZiAoYWN0aXZlSXRlbUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KGFjdGl2ZUl0ZW1JbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0Q3VycmVudEFjdGl2ZUl0ZW1JbmRleChhY3RpdmVJdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKGFjdGl2ZUl0ZW1JbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGJpbmRlZCBpbiB0ZW1wbGF0ZSBvbiBzY3JvbGxcbiAgICAgKi9cbiAgICBfc2Nyb2xsSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkaW5nICYmIHRoaXMubG9hZE9uU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGxvYWQgbW9yZSBvbiBlbnRlciBvciBzcGFjZSBwcmVzc1xuICAgICAqL1xuICAgIF9sb2FkT25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5fZ2V0TW9yZURhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIGxhenkgbG9hZGluZyBkYXRhXG4gICAgICogdXNlZCBpbiB0ZW1wbGF0ZVxuICAgICAqIG9uc2Nyb2xsIGFuZCBvbiBtb3JlIGJ1dHRvbiBjbGlja1xuICAgICAqL1xuICAgIF9nZXRNb3JlRGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IHRydWU7XG4gICAgICAgIG9mKHRoaXMuX2xvYWROZXdJdGVtcygpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKGFzeW5jIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0JsYW5rKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCc9PT1JbnZhbGlkIFJlc3BvbnNlIHJlY2VpdmVkPT09Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nTGFiZWwgPSB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbGl2ZUFubm91bmNlci5hbm5vdW5jZSh0aGlzLmxvYWRpbmdMYWJlbCwgJ2Fzc2VydGl2ZScpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlbGF5KHRoaXMuZGVsYXlUaW1lKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJlc2VudChyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9pdGVtcy5sZW5ndGgsIGogPSAwOyBqIDwgcmVzdWx0Lmxlbmd0aDsgKytpLCArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zW2ldID0gcmVzdWx0W2pdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiB1c2VkIGluIHRlbXBhdGUgdG8gZ2V0IFNlbGVjdGVkIGl0ZW1zIGZyb20gYSBsaXN0XG4gICAgICogZXZlbnQ6YW55IHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb25cbiAgICAgKi9cbiAgICBfb25TZWxlY3Rpb25DaGFuZ2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGRhdGVOYXZpZ2F0aW9uKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogb24gVXBkYXRlIG5hdmdpYXRpb24gc3R5bGVzIGZvciBub24gbmF2aWdhdGVkIGl0ZW1zXG4gICAgICogZXZlbnQ6YW55IHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb25cbiAgICAgKiBzZXByYXRlIFBSIGZvciBjdXN0b20gZXZlbnRcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGxldCBzZWxlY3RlZEl0ZW1JZDogTnVsbGFibGU8c3RyaW5nPiA9ICcwJztcbiAgICAgICAgY29uc3QgZWxlbWVudDogTnVsbGFibGU8SFRNTEVsZW1lbnQ+ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBldmVudC50YXJnZXQgOiBudWxsO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50Py5jbG9zZXN0KCcuZmQtbGlzdF9faXRlbScpO1xuICAgICAgICBpZiAoaXNQcmVzZW50KHBhcmVudCkpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbUlkID0gcGFyZW50Py5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hbmNob3I/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtbmF2aWdhdGVkJyk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLl9mb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8udXBkYXRlQWN0aXZlSXRlbShpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZiAoIWVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5rRWxlbWVudCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcbiAgICAgICAgaWYgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnKSB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdpcy1uYXZpZ2F0ZWQnKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdsaScgJiYgISFsaW5rRWxlbWVudCkge1xuICAgICAgICAgICAgbGlua0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaXMtbmF2aWdhdGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBzZWxlY3Rpb24gbWFuYWdlbWVudCBzaG91bGQgYmUgY29tcGxldGVseSBjaGFuZ2VkIGh0dHBzOi8vZ2l0aHViLmNvbS9TQVAvZnVuZGFtZW50YWwtbmd4L2lzc3Vlcy84MDA4XG4gICAgICAgIGlmICh0aGlzLnJvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUm93U2VsZWN0KHNlbGVjdGVkSXRlbUlkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTaW5nbGVTZWxlY3QoZXZlbnQsIHNlbGVjdGVkSXRlbUlkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU11bHRpU2VsZWN0KHNlbGVjdGVkSXRlbUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdEl0ZW0oaXRlbTogQmFzZUxpc3RJdGVtKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEl0ZW1zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZHNJdGVtcy5sZW5ndGggIT09IG51bGwgJiYgdGhpcy5pdGVtU2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRJbmRleCA9IDA7XG4gICAgICAgICAgICB0aGlzLl9sYXN0SW5kZXggPSB0aGlzLml0ZW1TaXplO1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9kc0l0ZW1zLnNsaWNlKHRoaXMuX3N0YXJ0SW5kZXgsIHRoaXMuX2xhc3RJbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtcyA9IHRoaXMuX2RzSXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVEUyhkczogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZHNJdGVtcyA9IFtdO1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29udmVydCBMaXN0RGF0YVNvdXJjZTxUPiB8IE9ic2VydmFibGU8VFtdPiB8IFRbXSBhcyBEYXRhU291cmNlXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB0aGlzLl9vcGVuRGF0YVN0cmVhbShkcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b0RhdGFTdHJlYW0oc291cmNlOiBGZHBMaXN0RGF0YVNvdXJjZTxUPik6IExpc3REYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gPExpc3REYXRhU291cmNlPFQ+PnNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdG8gd29yayBvbiB0b3Agb2YgYXJyYXlzXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdERhdGFTb3VyY2U8VD4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09ic2VydmFibGUoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2U8VD4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuRGF0YVN0cmVhbShkczogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiBMaXN0RGF0YVNvdXJjZTxUPiB7XG4gICAgICAgIGNvbnN0IGluaXREYXRhU291cmNlID0gdGhpcy5fdG9EYXRhU3RyZWFtKGRzKTtcbiAgICAgICAgaWYgKGluaXREYXRhU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBpcyBzaW5nbGUgcG9pbnQgb2YgZGF0YSBlbnRyeSB0byB0aGUgY29tcG9uZW50LiBXZSBkb250IHdhbnQgdG8gc2V0IGRhdGEgb24gZGlmZmVyZW50XG4gICAgICAgICAqIHBsYWNlcy4gSWYgYW55IG5ldyBkYXRhIGNvbWVzIGluIGVpdGhlciB5b3UgZG8gYSBzZWFyY2ggYW5kIHlvdSB3YW50IHRvIHBhc3MgaW5pdGlhbCBkYXRhXG4gICAgICAgICAqIGl0cyBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBpbml0RGF0YVNvdXJjZVxuICAgICAgICAgICAgLm9wZW4oKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gU2V0IG5ldyBpdGVtcyB3aGVuIGNvbXBvbmVudCBpcyBmdWxseSBpbml0aWF0ZWQgYW5kIGFsbCBjaGlsZCBjb21wb25lbnRzIGFyZSBhdmFpbGFibGUuXG4gICAgICAgICAgICAgICAgdGhpcy5fd2FpdEZvclZpZXdJbml0KCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc0l0ZW1zID0gZGF0YSB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2RzSXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gcXVldWUgaXMgZW1wdHkuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChpbml0RGF0YVNvdXJjZS5vbkRhdGFSZXF1ZXN0ZWQoKS5zdWJzY3JpYmUoKCkgPT4gKHRoaXMuX2xvYWRpbmcgPSB0cnVlKSkpO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIGluaXREYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoUGFyYW1zID0gbmV3IE1hcCgpO1xuXG4gICAgICAgIG1hdGNoUGFyYW1zLnNldCgncXVlcnknLCAnKicpO1xuICAgICAgICBtYXRjaFBhcmFtcy5zZXQoJ2xpbWl0JywgdGhpcy5pdGVtU2l6ZSk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBkYXRhIGZldGNoXG4gICAgICAgIGluaXREYXRhU291cmNlLm1hdGNoKG1hdGNoUGFyYW1zKTtcblxuICAgICAgICByZXR1cm4gaW5pdERhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sb2FkTmV3SXRlbXMoKTogVFtdIHtcbiAgICAgICAgdGhpcy5fc3RhcnRJbmRleCA9IHRoaXMuX3N0YXJ0SW5kZXggKyB0aGlzLml0ZW1TaXplO1xuICAgICAgICB0aGlzLl9sYXN0SW5kZXggPSB0aGlzLl9sYXN0SW5kZXggKyB0aGlzLml0ZW1TaXplO1xuICAgICAgICB0aGlzLl90ZW1wSXRlbXMgPSB0aGlzLl9kc0l0ZW1zLnNsaWNlKHRoaXMuX3N0YXJ0SW5kZXgsIHRoaXMuX2xhc3RJbmRleCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdCBpdGVtIHdpdGggcmFkaW8gYnV0dG9uIHN0eWxlcywgY2hlY2ssIHVuY2hlY2t1cGRhdGVzXG4gICAgICogZXZlbnQ6YW55IHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYW5kbGVTaW5nbGVTZWxlY3QoZXZlbnQ6IEV2ZW50LCBzZWxlY3RlZEl0ZW1JZDogTnVsbGFibGU8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC50YXJnZXQuY2xvc2VzdCgnLmZkLWxpc3RfX2l0ZW0nKTtcbiAgICAgICAgY29uc3QgcmFkaW8gPSBwYXJlbnQgPyBwYXJlbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKSA6IG51bGw7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkdmFsdWUgPSByYWRpbyA/ICg8SFRNTElucHV0RWxlbWVudD5yYWRpbykudmFsdWUgOiBudWxsO1xuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQoaXRlbS5yYWRpb0J1dHRvbkNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICBpdGVtLl9zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGl0ZW0ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY2hlY2tlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0aW9uVmFsdWUgPSB0aGlzLl9zZWxlY3RlZHZhbHVlO1xuICAgICAgICAgICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpdGVtLmxpc3RJdGVtO1xuICAgICAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpID09PSBzZWxlY3RlZEl0ZW1JZCkge1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAndHJ1ZScpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVSb3dTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgLy8gaGFuZGxlcyBtdXRsaSBzZWxlY3Qgb24gcm93IGxldmVsIHdpdGhvdXQgY2hlY2tib3hcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLl9zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlcyBzaW5nbGUgc2VsZWN0IG9uIHJvdyBsZXZlbCB3aXRob3V0IHJhZGlvYnV0dG9uXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLmFuY2hvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpdGVtLmxpc3RJdGVtO1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICBpdGVtLmFuY2hvci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuXG4gICAgICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpdGVtLmxpc3RJdGVtO1xuICAgICAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIGl0ZW0uYW5jaG9yPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lzLXNlbGVjdGVkJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbUlkID0gJzAnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3QgaXRlbSB3aXRoIGNoZWNrYm94IHN0eWxlcyxjaGVjayx1bmNoZWNrdXBkYXRlc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlTXVsdGlTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSBpdGVtLmxpc3RJdGVtO1xuICAgICAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpICE9PSBzZWxlY3RlZEl0ZW1JZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gbmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ19zZWxlY3RlZCcpO1xuICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ19zZWxlY3RlZCcsIGAkeyFzZWxlY3R9YCk7XG4gICAgICAgICAgICBpZiAoaXRlbS5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXR1cExpc3RJdGVtKGl0ZW06IEJhc2VMaXN0SXRlbSk6IHZvaWQge1xuICAgICAgICBpdGVtLnNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG4gICAgICAgIGl0ZW0ucm93U2VsZWN0aW9uID0gdGhpcy5yb3dTZWxlY3Rpb247XG4gICAgICAgIGl0ZW0uX2hhc0J5TGluZSA9IHRoaXMuaGFzQnlMaW5lO1xuICAgICAgICBpdGVtLml0ZW1TZWxlY3RlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uc2V0QWN0aXZlSXRlbSh0aGlzLmxpc3RJdGVtcy50b0FycmF5KCkuaW5kZXhPZihpdGVtKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNldHRpbmcgdmFsdWVzIGZyb20gbGlzdCB0byBsaXN0IGl0ZW1zXG4gICAgICogZXhhbXBsZTpcbiAgICAgKiBEb2VzIGxpc3QgaXRlbSBoYXMgbmF2aWdhdGlvbixcbiAgICAgKiBzaG91bGQgc2hvdyBhcnJvd3MsXG4gICAgICogd2lsbCBpdCBiZSBjb21wYWN0IG1vZGUsXG4gICAgICogc2hvdWxkIGJlIGluIHdoaWNoIHNlbGVjdGlvbiBtb2RlXG4gICAgICogc2V0IHZhbHVlcyB3aGVuIHBhc3NlZCB2aWEgZGF0YXNvdXJjZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUxpc3RJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZmlyc3QubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hcmlhTGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuYXJpYVNldHNpemUgPSB0aGlzLmxpc3RJdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wYXJ0aWFsTmF2aWdhdGlvbiA9IHRoaXMubGlzdEl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0ubmF2aWdhdGlvbkluZGljYXRvciB8fCBpdGVtLmxpc3RUeXBlID09PSAnZGV0YWlsJyk7XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fcGFydGlhbE5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5hdmlnYXRlZCA9IHRoaXMubmF2aWdhdGVkO1xuICAgICAgICAgICAgICAgIGl0ZW0ubmF2aWdhdGlvbkluZGljYXRvciA9IHRoaXMubmF2aWdhdGlvbkluZGljYXRvcjtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RUeXBlID0gdGhpcy5saXN0VHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5hcmlhUG9zaW5ldCA9IGluZGV4O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3dhaXRGb3JWaWV3SW5pdDxTb3VyY2VEYXRhVHlwZT4oKSB7XG4gICAgICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPik6IE9ic2VydmFibGU8U291cmNlRGF0YVR5cGU+ID0+XG4gICAgICAgICAgICBzb3VyY2UucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHNyYykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoYWZ0ZXJWaWV3SW5pdCkgPT4gYWZ0ZXJWaWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gc3JjKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJmZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPHVsXG4gICAgZmQtbGlzdFxuICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICBbbm9Cb3JkZXJdPVwibm9Cb3JkZXJcIlxuICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICBbYnlsaW5lXT1cImhhc0J5TGluZVwiXG4gICAgW2NsYXNzLmZkLWxpc3QtLW5hdmlnYXRpb25dPVwibmF2aWdhdGVkIHx8IG5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIFtuYXZpZ2F0aW9uSW5kaWNhdG9yXT1cIm5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIHN0eWxlPVwib3V0bGluZTogbm9uZVwiXG4gICAgKGtleWRvd24pPVwiX2tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpOyBfaGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIl9vblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cImFyaWFTZXRzaXplXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwiYXJpYU11bHRpc2VsZWN0YWJsZVwiXG4gICAgW3JvbGVdPVwicm9sZVwiXG4gICAgW3VucmVhZEluZGljYXRvcl09XCJ1bnJlYWRJbmRpY2F0b3JcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkTW9yZSAmJiBsb2FkT25TY3JvbGxcIj5cbiAgICAgICAgPGZkLWJ1c3ktaW5kaWNhdG9yXG4gICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWJ1c3ktaW5kaWNhdG9yLWN1c3RvbSBmZC1saXN0X19pdGVtLS1ncm93aW5nXCJcbiAgICAgICAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cIl9sb2FkaW5nICYmIF9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWJ1c3ldPVwiX2xvYWRpbmdcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJfbG9hZGluZyA/ICgncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpIDogbnVsbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBmZC1saXN0XG4gICAgICAgICAgICAgICAgZmRJbmZpbml0ZVNjcm9sbFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtbGlzdF9faW5maW5pdGUtc2Nyb2xsXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodF09XCJtYXhIZWlnaHRcIlxuICAgICAgICAgICAgICAgIChvblNjcm9sbEFjdGlvbik9XCJfc2Nyb2xsSGFuZGxlcigpXCJcbiAgICAgICAgICAgICAgICBbc2Nyb2xsUGVyY2VudF09XCJzY3JvbGxPZmZzZXRQZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICBbcm9sZV09XCJyb2xlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2l0ZW1zLmxlbmd0aCAhPT0gMDsgdGhlbiB0aGVuQmxvY2s7IGVsc2UgZWxzZUJsb2NrXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mZC1idXN5LWluZGljYXRvcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRPblNjcm9sbFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJfaXRlbXMubGVuZ3RoICE9PSAwOyB0aGVuIHRoZW5CbG9jazsgZWxzZSBlbHNlQmxvY2tcIj4gPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPGxpXG4gICAgICAgICAgICAjbGlzdEl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwibG9hZE1vcmUgJiYgIWxvYWRPblNjcm9sbCAmJiBfZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiX2dldE1vcmVEYXRhKClcIlxuICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJfbG9hZE9uS2V5UHJlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtbGlzdF9faXRlbS0tY3VzdG9tLWNvbnRlbnRdPVwibG9hZE1vcmVDb250ZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtbGlzdF9faXRlbSBmZC1saXN0X19pdGVtLS1ncm93aW5nIGZkLWxpc3RfX2l0ZW0tLWFjdGlvblwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRNb3JlRWxlbWVudENvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2xpPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjbG9hZE1vcmVFbGVtZW50Q29udGVudD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRNb3JlQ29udGVudDsgZWxzZSBkZWZhdWx0Q29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWxpc3RfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRNb3JlQ29udGVudC50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRMb2FkTW9yZUNvbnRlbnRDb250ZXh0KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDb250ZW50PlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZkLWxpc3RfX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgPGZkLWJ1c3ktaW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1idXN5LWluZGljYXRvci1jdXN0b21cIlxuICAgICAgICAgICAgICAgICAgICBbYmxvY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIl9sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJfbG9hZGluZyA/ICgncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpIDogbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9mZC1idXN5LWluZGljYXRvcj5cbiAgICAgICAgICAgICAgICB7eyBsb2FkVGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIjbG9hZFwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L3VsPlxuXG48bmctdGVtcGxhdGUgI3RoZW5CbG9jaz5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9pdGVtczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdEl0ZW1EZWYudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj4gPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNlbHNlQmxvY2s+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsaXN0SXRlbXMubGVuZ3RoICYmICFfZmlyc3RMb2FkaW5nRG9uZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0J5TGluZTsgZWxzZSBieWxpbmVMb2FkaW5nXCI+XG4gICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIiB0eXBlPVwidGV4dFwiIHRleHRMaW5lcz1cIjFcIiB3aWR0aD1cIjQwJVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNieWxpbmVMb2FkaW5nPlxuICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI0OHB4XCIgc3R5bGU9XCJtYXJnaW46IGF1dG8gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMFwiIHdpZHRoPVwiNDAlXCIgaGVpZ2h0PVwiMTJcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjIwXCIgd2lkdGg9XCIzMCVcIiBoZWlnaHQ9XCI4XCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICA8L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19