@wavemaker/app-ng-runtime 12.0.0-next.45078 → 12.0.0-next.45081

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +8 -1
  2. app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +9 -2
  3. app-ng-runtime/build-task/fesm2022/index.mjs +8 -1
  4. app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
  5. app-ng-runtime/components/advanced/custom/bundles/index.umd.js +49 -12
  6. app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +11 -4
  7. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +51 -11
  8. app-ng-runtime/components/advanced/custom/fesm2022/index.mjs +50 -10
  9. app-ng-runtime/components/advanced/custom/fesm2022/index.mjs.map +1 -1
  10. app-ng-runtime/components/base/bundles/index.umd.js +13 -3
  11. app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +14 -4
  12. app-ng-runtime/components/base/esm2022/widgets/framework/property-change-handler.mjs +2 -2
  13. app-ng-runtime/components/base/fesm2022/index.mjs +14 -4
  14. app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
  15. app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +1 -0
  16. app-ng-runtime/components/basic/search/bundles/index.umd.js +36 -24
  17. app-ng-runtime/components/basic/search/esm2022/search.component.mjs +33 -24
  18. app-ng-runtime/components/basic/search/esm2022/search.props.mjs +5 -2
  19. app-ng-runtime/components/basic/search/fesm2022/index.mjs +36 -24
  20. app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
  21. app-ng-runtime/components/basic/search/search.component.d.ts +3 -0
  22. app-ng-runtime/components/data/form/bundles/index.umd.js +23 -11
  23. app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +24 -12
  24. app-ng-runtime/components/data/form/fesm2022/index.mjs +23 -11
  25. app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
  26. app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +1 -0
  27. app-ng-runtime/components/input/default/base-form-custom.component.d.ts +2 -1
  28. app-ng-runtime/components/input/default/bundles/index.umd.js +13 -4
  29. app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +2 -2
  30. app-ng-runtime/components/input/default/esm2022/base-form-custom.component.mjs +6 -1
  31. app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +3 -1
  32. app-ng-runtime/components/input/default/esm2022/dataset-aware-form.component.mjs +5 -5
  33. app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +3 -1
  34. app-ng-runtime/components/input/default/fesm2022/index.mjs +13 -4
  35. app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
  36. app-ng-runtime/core/bundles/index.umd.js +6 -6
  37. app-ng-runtime/core/enums/enums.d.ts +2 -2
  38. app-ng-runtime/core/esm2022/enums/enums.mjs +2 -2
  39. app-ng-runtime/core/esm2022/utils/build-utils.mjs +6 -6
  40. app-ng-runtime/core/fesm2022/index.mjs +6 -6
  41. app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
  42. app-ng-runtime/package.json +1 -1
  43. app-ng-runtime/runtime/base/bundles/index.umd.js +9 -0
  44. app-ng-runtime/runtime/base/components/base-custom-widget.component.d.ts +2 -0
  45. app-ng-runtime/runtime/base/esm2022/components/base-custom-widget.component.mjs +10 -1
  46. app-ng-runtime/runtime/base/fesm2022/index.mjs +9 -0
  47. app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
@@ -2057,17 +2057,14 @@
2057
2057
  this.fieldValidations = new i5.BaseFieldValidations(this, this.formWidget, this.widgettype, this._control, this.form);
2058
2058
  super.ngOnInit();
2059
2059
  }
2060
- ngAfterContentInit() {
2061
- super.ngAfterContentInit();
2062
- if (this.formWidget) {
2063
- this._initPropsRes();
2064
- // setting displayExpressions on the formwidget explicitly as expr was evaluated to "".
2065
- this.setFormWidget('binddisplaylabel', this.binddisplaylabel);
2066
- this.setFormWidget('binddisplayexpression', this.binddisplayexpression);
2067
- this.setFormWidget('binddisplayimagesrc', this.binddisplayimagesrc);
2068
- this.setFormWidget('bindChipclass', this.bindChipclass);
2069
- this.setFormWidget('binddataset', this.binddataset);
2070
- }
2060
+ prepareFormWidget() {
2061
+ this._initPropsRes();
2062
+ // setting displayExpressions on the formwidget explicitly as expr was evaluated to "".
2063
+ this.setFormWidget('binddisplaylabel', this.binddisplaylabel);
2064
+ this.setFormWidget('binddisplayexpression', this.binddisplayexpression);
2065
+ this.setFormWidget('binddisplayimagesrc', this.binddisplayimagesrc);
2066
+ this.setFormWidget('bindChipclass', this.bindChipclass);
2067
+ this.setFormWidget('binddataset', this.binddataset);
2071
2068
  this.registerReadyStateListener(() => {
2072
2069
  this.key = this._fieldName || this.target || this.binding;
2073
2070
  this.viewmodewidget = this.viewmodewidget || i5.getDefaultViewModeWidget(this.widgettype);
@@ -2118,6 +2115,21 @@
2118
2115
  this.setReadOnlyState();
2119
2116
  });
2120
2117
  }
2118
+ ngAfterContentInit() {
2119
+ super.ngAfterContentInit();
2120
+ if (this.widgetSubType === "wm-form-field-custom-widget" && this.formWidget.nativeElement)
2121
+ this.formWidget = this.formWidget.nativeElement.widget;
2122
+ if (this.formWidget) {
2123
+ if (this.widgetSubType === "wm-form-field-custom-widget") {
2124
+ this.formWidget.configSubject.asObservable().subscribe(() => {
2125
+ this.prepareFormWidget();
2126
+ });
2127
+ }
2128
+ else {
2129
+ this.prepareFormWidget();
2130
+ }
2131
+ }
2132
+ }
2121
2133
  static { this.ɵfac = function FormFieldDirective_Factory(t) { return new (t || FormFieldDirective)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject(FormComponent), i0__namespace.ɵɵdirectiveInject(i1__namespace.FormBuilder), i0__namespace.ɵɵdirectiveInject(i1$1__namespace.Viewport), i0__namespace.ɵɵdirectiveInject(i1$1__namespace.App), i0__namespace.ɵɵdirectiveInject(i3__namespace.ListComponent, 8), i0__namespace.ɵɵinjectAttribute('chipclass.bind'), i0__namespace.ɵɵinjectAttribute('dataset.bind'), i0__namespace.ɵɵinjectAttribute('displayexpression.bind'), i0__namespace.ɵɵinjectAttribute('displaylabel.bind'), i0__namespace.ɵɵinjectAttribute('widgettype'), i0__namespace.ɵɵinjectAttribute('name'), i0__namespace.ɵɵinjectAttribute('displayimagesrc.bind'), i0__namespace.ɵɵinjectAttribute('key'), i0__namespace.ɵɵinjectAttribute('is-range'), i0__namespace.ɵɵinjectAttribute('pc-display'), i0__namespace.ɵɵinjectAttribute('mobile-display'), i0__namespace.ɵɵinjectAttribute('tablet-display'), i0__namespace.ɵɵdirectiveInject(i5.Context, 2), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
2122
2134
  static { this.ɵdir = /*@__PURE__*/ i0__namespace.ɵɵdefineDirective({ type: FormFieldDirective, selectors: [["", "wmFormField", ""]], contentQueries: function FormFieldDirective_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
2123
2135
  i0__namespace.ɵɵcontentQuery(dirIndex, _c0, 7);
@@ -421,17 +421,14 @@ export class FormFieldDirective extends StylableComponent {
421
421
  this.fieldValidations = new BaseFieldValidations(this, this.formWidget, this.widgettype, this._control, this.form);
422
422
  super.ngOnInit();
423
423
  }
424
- ngAfterContentInit() {
425
- super.ngAfterContentInit();
426
- if (this.formWidget) {
427
- this._initPropsRes();
428
- // setting displayExpressions on the formwidget explicitly as expr was evaluated to "".
429
- this.setFormWidget('binddisplaylabel', this.binddisplaylabel);
430
- this.setFormWidget('binddisplayexpression', this.binddisplayexpression);
431
- this.setFormWidget('binddisplayimagesrc', this.binddisplayimagesrc);
432
- this.setFormWidget('bindChipclass', this.bindChipclass);
433
- this.setFormWidget('binddataset', this.binddataset);
434
- }
424
+ prepareFormWidget() {
425
+ this._initPropsRes();
426
+ // setting displayExpressions on the formwidget explicitly as expr was evaluated to "".
427
+ this.setFormWidget('binddisplaylabel', this.binddisplaylabel);
428
+ this.setFormWidget('binddisplayexpression', this.binddisplayexpression);
429
+ this.setFormWidget('binddisplayimagesrc', this.binddisplayimagesrc);
430
+ this.setFormWidget('bindChipclass', this.bindChipclass);
431
+ this.setFormWidget('binddataset', this.binddataset);
435
432
  this.registerReadyStateListener(() => {
436
433
  this.key = this._fieldName || this.target || this.binding;
437
434
  this.viewmodewidget = this.viewmodewidget || getDefaultViewModeWidget(this.widgettype);
@@ -482,6 +479,21 @@ export class FormFieldDirective extends StylableComponent {
482
479
  this.setReadOnlyState();
483
480
  });
484
481
  }
482
+ ngAfterContentInit() {
483
+ super.ngAfterContentInit();
484
+ if (this.widgetSubType === "wm-form-field-custom-widget" && this.formWidget.nativeElement)
485
+ this.formWidget = this.formWidget.nativeElement.widget;
486
+ if (this.formWidget) {
487
+ if (this.widgetSubType === "wm-form-field-custom-widget") {
488
+ this.formWidget.configSubject.asObservable().subscribe(() => {
489
+ this.prepareFormWidget();
490
+ });
491
+ }
492
+ else {
493
+ this.prepareFormWidget();
494
+ }
495
+ }
496
+ }
485
497
  static { this.ɵfac = function FormFieldDirective_Factory(t) { return new (t || FormFieldDirective)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.FormComponent), i0.ɵɵdirectiveInject(i2.FormBuilder), i0.ɵɵdirectiveInject(i3.Viewport), i0.ɵɵdirectiveInject(i3.App), i0.ɵɵdirectiveInject(i4.ListComponent, 8), i0.ɵɵinjectAttribute('chipclass.bind'), i0.ɵɵinjectAttribute('dataset.bind'), i0.ɵɵinjectAttribute('displayexpression.bind'), i0.ɵɵinjectAttribute('displaylabel.bind'), i0.ɵɵinjectAttribute('widgettype'), i0.ɵɵinjectAttribute('name'), i0.ɵɵinjectAttribute('displayimagesrc.bind'), i0.ɵɵinjectAttribute('key'), i0.ɵɵinjectAttribute('is-range'), i0.ɵɵinjectAttribute('pc-display'), i0.ɵɵinjectAttribute('mobile-display'), i0.ɵɵinjectAttribute('tablet-display'), i0.ɵɵdirectiveInject(Context, 2), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
486
498
  static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: FormFieldDirective, selectors: [["", "wmFormField", ""]], contentQueries: function FormFieldDirective_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
487
499
  i0.ɵɵcontentQuery(dirIndex, _c0, 7);
@@ -570,4 +582,4 @@ export class FormFieldDirective extends StylableComponent {
570
582
  type: HostListener,
571
583
  args: ['click', ['$event']]
572
584
  }] }); })();
573
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9mb3JtL3NyYy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFFUixRQUFRLEVBQ1IsSUFBSSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQWEsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUNILGtCQUFrQixFQUNsQixHQUFHLEVBQ0gsUUFBUSxFQUNSLGNBQWMsRUFDZCxjQUFjLEVBQ2QsU0FBUyxFQUNULFFBQVEsRUFDUixJQUFJLEVBQ0osUUFBUSxFQUNYLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGtCQUFrQixFQUNsQixpQkFBaUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFJaEUsb0ZBQW9GO0FBQ3BGLE1BQU0saUJBQWlCLEdBQUcsR0FB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aXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBhZGRGb3JJZEF0dHJpYnV0ZXMsXG4gICAgQXBwLFxuICAgIGRlYm91bmNlLFxuICAgIEZvcm1XaWRnZXRUeXBlLFxuICAgIGlzRGF0ZVRpbWVUeXBlLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc01vYmlsZSxcbiAgICBub29wLFxuICAgIFZpZXdwb3J0XG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgQmFzZUZpZWxkVmFsaWRhdGlvbnMsXG4gICAgQ29udGV4dCxcbiAgICBnZXREZWZhdWx0Vmlld01vZGVXaWRnZXQsXG4gICAgZ2V0RXZhbHVhdGVkRGF0YSxcbiAgICBwcm92aWRlQXMsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50XG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtMaXN0Q29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL2xpc3QnO1xuXG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vZm9ybS1maWVsZC5wcm9wcyc7XG5pbXBvcnQge0Zvcm1Db21wb25lbnR9IGZyb20gJy4uL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7Zm9yRWFjaCwgZ2V0LCBpc0FycmF5LCBpc09iamVjdCwgam9pbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbi8vIEN1c3RvbSB2YWxpZGF0b3IgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9yLCBpZiBzZXRWYWxpZGF0aW9uTWVzc2FnZSBtZXRob2QgaXMgdXNlZFxuY29uc3QgY3VzdG9tVmFsaWRhdG9yRm4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIHsgY3VzdG9tOiB0cnVlIH07XG59O1xuXG5jb25zdCBGSUxFX1RZUEVTID0ge1xuICAgICdpbWFnZScgOiAnaW1hZ2UvKicsXG4gICAgJ3ZpZGVvJyA6ICd2aWRlby8qJyxcbiAgICAnYXVkaW8nIDogJ2F1ZGlvLyonXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t3bUZvcm1GaWVsZF0nLFxuICAgIGV4cG9ydEFzOiAnd21Gb3JtRmllbGQnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoRm9ybUZpZWxkRGlyZWN0aXZlKSxcbiAgICAgICAgcHJvdmlkZUFzKEZvcm1GaWVsZERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICB7cHJvdmlkZTogQ29udGV4dCwgdXNlRmFjdG9yeTogKCkgPT4geyByZXR1cm4ge30gfSwgbXVsdGk6IHRydWV9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGREaXJlY3RpdmUgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2Zvcm1XaWRnZXQnLCB7c3RhdGljOiB0cnVlfSkgZm9ybVdpZGdldDtcbiAgICBAQ29udGVudENoaWxkKCdmb3JtV2lkZ2V0TWF4JykgZm9ybVdpZGdldE1heDtcblxuICAgIHByaXZhdGUgZmI7XG4gICAgcHJpdmF0ZSB2aWV3cG9ydDtcblxuICAgIC8vIGV4Y2x1ZGVQcm9wcyBpcyB1c2VkIHRvIHN0b3JlIHRoZSBwcm9wcyB0aGF0IHNob3VsZCBub3QgYmUgYXBwbGllZCBvbiBpbm5lciB3aWRnZXRcbiAgICBwcml2YXRlIGV4Y2x1ZGVQcm9wcztcbiAgICBwcml2YXRlIF92YWxpZGF0b3JzO1xuICAgIHByaXZhdGUgX29sZFVwbG9hZFZhbDtcblxuICAgIG5nZm9ybTogRm9ybUdyb3VwO1xuICAgIGRlZmF1bHR2YWx1ZTtcbiAgICBkaXNwbGF5ZXhwcmVzc2lvbjtcbiAgICBkaXNwbGF5ZmllbGQ7XG4gICAgZGlzcGxheWxhYmVsO1xuICAgIGRpc3BsYXluYW1lO1xuICAgIGdlbmVyYXRvcjtcbiAgICBrZXk7XG4gICAgdGFyZ2V0O1xuICAgIGJpbmRpbmc7XG4gICAgd2lkZ2V0dHlwZTtcbiAgICBjbGFzcztcbiAgICByZWFkb25seTtcbiAgICBzaG93O1xuICAgIHR5cGU7XG4gICAgaXNEYXRhU2V0Qm91bmQ7XG4gICAgdmlld21vZGV3aWRnZXQ7XG4gICAgYmluZGRhdGFzZXQ7XG4gICAgYmluZGRpc3BsYXlleHByZXNzaW9uO1xuICAgIGJpbmRDaGlwY2xhc3M7XG4gICAgZGlzcGxheWltYWdlc3JjOiBzdHJpbmc7XG4gICAgYmluZGRpc3BsYXlpbWFnZXNyYztcbiAgICBiaW5kZGlzcGxheWxhYmVsO1xuICAgIGZvcm07XG4gICAgZmlsZXR5cGU7XG4gICAgZXh0ZW5zaW9ucztcbiAgICBwZXJtaXR0ZWQ7XG4gICAgcGVyaW9kO1xuICAgIGlzUmFuZ2U7XG4gICAgbmFtZTtcbiAgICAvLyBWYWxpZGF0aW9uIHByb3BlcnRpZXNcbiAgICByZXF1aXJlZDtcbiAgICBtYXhjaGFycztcbiAgICBtaW52YWx1ZTtcbiAgICBtYXh2YWx1ZTtcbiAgICByZWdleHA7XG4gICAgZmllbGREZWZDb25maWc7XG4gICAgcGxhY2Vob2xkZXI7XG4gICAgaW5wdXR0eXBlO1xuICAgIHZhbGlkYXRpb25tZXNzYWdlO1xuXG4gICAgcHVibGljIF9maWVsZE5hbWU7XG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZVNldFVwVmFsaWRhdG9ycztcbiAgICBwcml2YXRlIF9pbml0UHJvcHNSZXM7XG4gICAgcHJpdmF0ZSBwYXJlbnRMaXN0O1xuICAgIHByaXZhdGUgc2hvd1BlbmRpbmdTcGlubmVyOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2FjdGl2ZUZpZWxkOiBib29sZWFuO1xuICAgIHByaXZhdGUgbm90aWZ5Rm9yRmllbGRzOiBhbnk7XG4gICAgcHJpdmF0ZSBmaWVsZFZhbGlkYXRpb25zO1xuICAgIHByaXZhdGUgX3RyaWdnZXJlZEJ5VXNlcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9jbGlja3RyaWdnZXJlZEJ5VXNlcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIGFwcDogQXBwO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2NsaWNrdHJpZ2dlcmVkQnlVc2VyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRm9jdXNlZDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgZm9ybTogRm9ybUNvbXBvbmVudCxcbiAgICAgICAgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICB2aWV3cG9ydDogVmlld3BvcnQsXG4gICAgICAgIGFwcDogQXBwLFxuICAgICAgICBAT3B0aW9uYWwoKSBwYXJlbnRMaXN0OiBMaXN0Q29tcG9uZW50LFxuICAgICAgICBAQXR0cmlidXRlKCdjaGlwY2xhc3MuYmluZCcpIGJpbmRDaGlwY2xhc3M6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgYmluZGRhdGFzZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlleHByZXNzaW9uLmJpbmQnKSBiaW5kZGlzcGxheWV4cHJlc3Npb246IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWxhYmVsLmJpbmQnKSBiaW5kZGlzcGxheWxhYmVsOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3dpZGdldHR5cGUnKSBfd2lkZ2V0VHlwZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbmFtZScpIG5hbWUsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlpbWFnZXNyYy5iaW5kJykgYmluZGRpc3BsYXlpbWFnZXNyYzogU3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdrZXknKSBrZXksXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2lzLXJhbmdlJykgaXNSYW5nZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgncGMtZGlzcGxheScpIHBjRGlzcGxheSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbW9iaWxlLWRpc3BsYXknKSBtb2JpbGVEaXNwbGF5LFxuICAgICAgICBAQXR0cmlidXRlKCd0YWJsZXQtZGlzcGxheScpIHRhYmxldERpc3BsYXksXG4gICAgICAgIEBTZWxmKCkgQEluamVjdChDb250ZXh0KSBjb250ZXh0czogQXJyYXk8YW55PixcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IFdJREdFVF9DT05GSUcgPSB7XG4gICAgICAgICAgICB3aWRnZXRUeXBlOiAnd20tZm9ybS1maWVsZCcsXG4gICAgICAgICAgICBob3N0Q2xhc3M6ICcnLFxuICAgICAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ3dtLWZvcm0tZmllbGQtJyArIChfd2lkZ2V0VHlwZSB8fCBGb3JtV2lkZ2V0VHlwZS5URVhUKS50cmltKClcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlc29sdmVGbjogRnVuY3Rpb24gPSBub29wO1xuXG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0LCBuZXcgUHJvbWlzZShyZXMgPT4gcmVzb2x2ZUZuID0gcmVzKSk7XG4gICAgICAgIHRoaXMuX2luaXRQcm9wc1JlcyA9IHJlc29sdmVGbjtcbiAgICAgICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgICAgIHRoaXMuZmllbGREZWZDb25maWcgPSB7fTtcbiAgICAgICAgdGhpcy5jbGFzcyA9ICcnO1xuICAgICAgICB0aGlzLmJpbmRkYXRhc2V0ID0gYmluZGRhdGFzZXQ7XG4gICAgICAgIHRoaXMuYmluZGRpc3BsYXlpbWFnZXNyYyA9IGJpbmRkaXNwbGF5aW1hZ2VzcmM7XG4gICAgICAgIHRoaXMuYmluZGRpc3BsYXlleHByZXNzaW9uID0gYmluZGRpc3BsYXlleHByZXNzaW9uO1xuICAgICAgICB0aGlzLmJpbmRDaGlwY2xhc3MgPSBiaW5kQ2hpcGNsYXNzO1xuICAgICAgICB0aGlzLmJpbmRkaXNwbGF5bGFiZWwgPSBiaW5kZGlzcGxheWxhYmVsO1xuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgICAgICB0aGlzLmZiID0gZmI7XG4gICAgICAgIHRoaXMudmlld3BvcnQgPSB2aWV3cG9ydDtcbiAgICAgICAgdGhpcy5fZmllbGROYW1lID0ga2V5IHx8IG5hbWU7XG4gICAgICAgIHRoaXMuaXNSYW5nZSA9IGlzUmFuZ2U7XG4gICAgICAgIHRoaXMuZXhjbHVkZVByb3BzID0gbmV3IFNldChbJ3R5cGUnLCAnbmFtZSddKTtcbiAgICAgICAgdGhpcy53aWRnZXR0eXBlID0gX3dpZGdldFR5cGU7XG4gICAgICAgIHRoaXMucGFyZW50TGlzdCA9IHBhcmVudExpc3Q7XG4gICAgICAgIHRoaXMubm90aWZ5Rm9yRmllbGRzID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuYmluZGRhdGFzZXQgfHwgdGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhc2V0JykpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRhU2V0Qm91bmQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dHNbMF0uX29uRm9jdXNGaWVsZCA9IHRoaXMuX29uRm9jdXNGaWVsZC5iaW5kKHRoaXMpO1xuICAgICAgICBjb250ZXh0c1swXS5fb25CbHVyRmllbGQgPSB0aGlzLl9vbkJsdXJGaWVsZC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX2RlYm91bmNlU2V0VXBWYWxpZGF0b3JzID0gZGVib3VuY2UoKCkgPT4gdGhpcy5zZXRVcFZhbGlkYXRvcnMoKSwgNTAwKTtcbiAgICB9XG5cbiAgICBfb25Gb2N1c0ZpZWxkKCRldnQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlRmllbGQgPSB0cnVlO1xuICAgICAgICAkKCRldnQudGFyZ2V0KS5jbG9zZXN0KCcubGl2ZS1maWVsZCcpLmFkZENsYXNzKCdhY3RpdmUnKTtcblxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgYWN0aXZlIGVsZW1lbnQgbWFya3VwIGJhc2VkIG9uIHdpZGdldCB0eXBlXG4gICAgZ2V0QWN0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0VHlwZSA9IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3dpZGdldHR5cGUnKTtcbiAgICAgICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcignc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBcmlhQXR0cmlidXRlcygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgICAgICBpZiAodGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXS5pbnZhbGlkICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0udG91Y2hlZCAmJiB0aGlzLmZvcm0uaXNVcGRhdGVNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfX2Vycm9ybXNnJywgYCR7dGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnX192YWxpZGF0aW9uSWQnKX1gKTtcbiAgICAgICAgICAgIGVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgYCR7dGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXS5pbnZhbGlkfWApO1xuICAgICAgICAgICAgZWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgYCR7dGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnX192YWxpZGF0aW9uSWQnKX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ19fZXJyb3Jtc2cnKTtcbiAgICAgICAgICAgIGVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJyk7XG4gICAgICAgICAgICBlbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkJsdXJGaWVsZCgkZXZ0KSB7XG4gICAgICAgICQoJGV2dC50YXJnZXQpLmNsb3Nlc3QoJy5saXZlLWZpZWxkJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICBjb25zdCBlbGUgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigncC50ZXh0LWRhbmdlcicpO1xuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjM5NTldOiBBREEgaXNzdWUgLSBhZGRpbmcgYXJpYS1kZXNjcmliZWRieSwgYXJpYS1pbnZhbGlkLCBfX2Vycm9ybXNnIGF0dHJpYnV0ZXMgb25seSB3aGVuIHRoZSBmb3JtIGZpZWxkIGlzIGludmFsaWQgLCBlbHNlIHJlbW92aW5nIHRoZSBhdHRyaWJ1dGVzXG4gICAgICAgIHRoaXMuc2V0QXJpYUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlRmllbGQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NsaWNrdHJpZ2dlcmVkQnlVc2VyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgaW4gdmlldyBtb2RlIG9mIGZvcm0gZmllbGRcbiAgICBldmFsdWF0ZUV4cHIob2JqZWN0LCBkaXNwbGF5RmllbGQsIGRpc3BsYXlFeHByKSB7XG4gICAgICAgIGlmICghZGlzcGxheUV4cHIgfHwgIWRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gT2JqZWN0LmtleXMob2JqZWN0KVswXTtcbiAgICAgICAgICAgIC8vIElmIGRhdGFzZXQgaXMgbm90IHJlYWR5LCBkaXNwbGF5IGV4cHJlc3Npb24gd2lsbCBub3QgYmUgZGVmaW5lZFxuICAgICAgICAgICAgaWYgKCFkaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldEV2YWx1YXRlZERhdGEob2JqZWN0LCB7XG4gICAgICAgICAgICBmaWVsZDogZGlzcGxheUZpZWxkLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZGlzcGxheUV4cHJcbiAgICAgICAgfSwgdGhpcy52aWV3UGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBFeHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBpbiB2aWV3IG1vZGUgb2YgZm9ybSBmaWVsZFxuICAgIGdldERpc3BsYXlFeHByKCkge1xuICAgICAgICBjb25zdCBjYXB0aW9uID0gW107XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkID0gdGhpcy5kaXNwbGF5ZmllbGQgfHwgdGhpcy5kaXNwbGF5bGFiZWxcbiAgICAgICAgY29uc3QgZGlzcGxheUV4cHIgPSB0aGlzLmRpc3BsYXlleHByZXNzaW9uO1xuICAgICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKHZhbHVlLCBvYmogPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbi5wdXNoKHRoaXMuZXZhbHVhdGVFeHByKG9iaiwgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhcHRpb24ucHVzaCh0aGlzLmV2YWx1YXRlRXhwcih2YWx1ZSwgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGpvaW4oY2FwdGlvbiwgJywnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpID8gJycgOiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIGdldENhcHRpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWUgPT09IG51bGwpID8gKGdldCh0aGlzLmZvcm0uZGF0YW91dHB1dCwgdGhpcy5fZmllbGROYW1lKSB8fCAnJykgOiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIC8vIE5vdGlmaWVzIGNoYW5nZXMgdG8gb2JzZXJ2aW5nIHZhbGlkYXRpb24gZmllbGRzXG4gICAgbm90aWZ5Q2hhbmdlcygpIHtcbiAgICAgICAgZm9yRWFjaCh0aGlzLm5vdGlmeUZvckZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgZmllbGQuZmllbGRWYWxpZGF0aW9ucy52YWxpZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlcnMgb2JzZXJ2ZXIgb2YgdmFsaWRhdGlvbiBmaWVsZHNcbiAgICBvYnNlcnZlT24oZmllbGRzKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5vYnNlcnZlT24oZmllbGRzLCAnZm9ybWZpZWxkcycpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzZXR1cCB2YWxpZGF0b3JzIGZvciByZWFjdGl2ZSBmb3JtIGNvbnRyb2xcbiAgICBzZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yPykge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0VXBWYWxpZGF0b3JzKGN1c3RvbVZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgY3VzdG9tIGFzeW5jIHZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGRcbiAgICBzZXRBc3luY1ZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgYW5kIGN1c3RvbSBzeW5jIHZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGRcbiAgICBzZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIHNldCB0aGUgcHJvcGVydGllcyBvbiBpbm5lciBmb3JtIHdpZGdldFxuICAgIHNldEZvcm1XaWRnZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQud2lkZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQud2lkZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBib3VuZEZuKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzZXQgdGhlIHByb3BlcnRpZXMgb24gaW5uZXIgbWF4IGZvcm0gd2lkZ2V0ICh3aGVuIHJhbmdlIGlzIHNlbGVjdGVkKVxuICAgIHNldE1heEZvcm1XaWRnZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldE1heCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0TWF4LndpZGdldFtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgY29uc3QgaXNGb3JtRGlydHkgPSB0aGlzLmZvcm0uZGlydHk7XG5cbiAgICAgICAgaWYgKGtleSAhPT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5leGNsdWRlUHJvcHMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFzIHVwbG9hZCB3aWRnZXQgaXMgYW4gSFRNTCB3aWRnZXQsIG9ubHkgcmVxdWlyZWQgcHJvcGVydHkgaXMgc2V0dXBcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuVVBMT0FEKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KGtleSwgbnYpO1xuXG4gICAgICAgIC8vIFBsYWNlaG9sZGVyIHNob3VsZCBub3QgYmUgc2V0dXAgb24gbWF4IHdpZGdldFxuICAgICAgICBpZiAoa2V5ICE9PSAncGxhY2Vob2xkZXInKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoa2V5LCBudik7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdHZhbHVlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ub25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZSh0aGlzLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYXhkZWZhdWx0dmFsdWUnOlxuICAgICAgICAgICAgICAgIHRoaXMubWF4VmFsdWUgPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoJ2RhdGF2YWx1ZScsIG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ub25NYXhEZWZhdWx0VmFsdWVDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21heHBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoJ3BsYWNlaG9sZGVyJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxuICAgICAgICAgICAgICAgIC8vIFdNUy0xODkwNiA6IERvIG5vdCBtYWtlIGZvcm0gYXMgZGlydHkgZHVyaW5nIHJlcXVpcmVkIHByb3AgaW5pdGlhbGl6YXRpb25cbiAgICAgICAgICAgICAgICBpZiAoaXNGb3JtRGlydHkgIT09IHRoaXMuZm9ybS5kaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtYXhjaGFycyc6XG4gICAgICAgICAgICBjYXNlICdtaW52YWx1ZSc6XG4gICAgICAgICAgICBjYXNlICdtYXh2YWx1ZSc6XG4gICAgICAgICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ByaW1hcnkta2V5JzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNldFByaW1hcnlLZXkodGhpcy5fZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkaXNwbGF5LW5hbWUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheW5hbWUgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlYWRvbmx5JzpcbiAgICAgICAgICAgICAgIHRoaXMuc2V0UmVhZE9ubHlTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TdHlsZUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KGtleSwgbnYpO1xuICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoa2V5LCBudik7XG4gICAgICAgIHN1cGVyLm9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cblxuICAgIGdldCBkYXRhdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXZhbHVlKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fY29udHJvbCAmJiB0aGlzLndpZGdldHR5cGUgIT09IEZvcm1XaWRnZXRUeXBlLlVQTE9BRCkge1xuICAgICAgICAgICAgdGhpcy5fY29udHJvbC5zZXRWYWx1ZSh2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHZhbCkge1xuICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXRNYXggJiYgdGhpcy5mb3JtV2lkZ2V0TWF4LmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgbWF4VmFsdWUodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXhDb250cm9sLnNldFZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIHNldCBtaW5WYWx1ZSh2YWwpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIHJlYWN0aXZlIGZvcm0gY29udHJvbFxuICAgIGdldCBfY29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV07XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSByZWFjdGl2ZSBtYXggZm9ybSBjb250cm9sXG4gICAgZ2V0IF9tYXhDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0gJiYgdGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lICsgJ19tYXgnXTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGRpc3BsYXlWYWx1ZVxuICAgIGdldCBkaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LmRpc3BsYXlWYWx1ZTtcbiAgICB9XG5cbiAgICAvL0dldCB0aGUgdGltZXN0YW1wXG4gICAgZ2V0IHRpbWVzdGFtcCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC50aW1lc3RhbXA7XG4gICAgfVxuXG4gICAgLy9HZXQgdGhlIGNoYXJsZW5ndGhcbiAgICBnZXQgY2hhcmxlbmd0aCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5jaGFybGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVhY3RpdmUgZm9ybSBjb250cm9sXG4gICAgY3JlYXRlQ29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuY29udHJvbCh1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHRoaXMuX3ZhbGlkYXRvcnNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gT24gZmllbGQgdmFsdWUgY2hhbmdlLCBwcm9wYWdhdGUgZXZlbnQgdG8gcGFyZW50IGZvcm1cbiAgICBvblZhbHVlQ2hhbmdlKHZhbCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcHRpb25FbCA9ICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmNhcHRpb24tZmxvYXRpbmcnKTtcbiAgICAgICAgICAgIGlmIChjYXB0aW9uRWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGhhc1ZhbHVlIGNoZWNrIHdoZXRoZXIgZm9ybS1maWVsZCBoYXMgYSB2YWx1ZSBmcm9tIHBhc3NlZCB2YWwgYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgLy8gQWRkZWQgc2FuaXR5IGNoZWNrIG9uIHZhbCB0byBzdXBwb3J0IHZhbHVlcyBsaWtlZCAwLCBmYWxzZSBldGMgYXMgaW5wdXQgdmFsIC0gV01TLTIwMDg0XG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVja2luZyBmb3IgaW5wdXQgdmFsdWUgb3IgLXdlYmtpdC1hdXRvZmlsbCB0byBzZWUgd2hldGhlciB0aGVyZSBhcmUgYW55IGF1dG9maWxsZWQgZmllbGRzIC0gV01TLTIwMTQxXG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNWYWx1ZSA9ICgoaXNEZWZpbmVkKHZhbCkgJiYgdmFsICE9PSAnJyAmJiB2YWwgIT09IG51bGwpIHx8IGNhcHRpb25FbC5maW5kKCdpbnB1dCcpLnZhbCgpKSB8fCBjYXB0aW9uRWwuZmluZCgnaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCcpLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnY2FwdGlvblBvc2l0aW9uQW5pbWF0ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVZhbDogaGFzVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUVsOiBjYXB0aW9uRWwsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0TXVsdGlwbGU6IHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQubXVsdGlwbGUsXG4gICAgICAgICAgICAgICAgICAgIGlzRm9jdXNlZDogdGhpcy5fYWN0aXZlRmllbGRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTIzOTU5XTogQURBIGlzc3VlIC0gYWRkaW5nIGFyaWEtZGVzY3JpYmVkYnksIGFyaWEtaW52YWxpZCwgX19lcnJvcm1zZyBhdHRyaWJ1dGVzIG9ubHkgd2hlbiB0aGUgZm9ybSBmaWVsZCBpcyBpbnZhbGlkICwgZWxzZSByZW1vdmluZyB0aGUgYXR0cmlidXRlc1xuICAgICAgICAgICAgdGhpcy5zZXRBcmlhQXR0cmlidXRlcygpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLm9uRmllbGRWYWx1ZUNoYW5nZSh0aGlzLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgICAgICAvLyBEbyBtYXJrIGFzIHRvdWNoZWQsIG9ubHkgaW5jYXNlIHdoZW4gdXNlciBoYXMgZW50ZXJlZCBhbiBpbnB1dCBidXQgbm90IHRocm91Z2ggdGhlIHNjcmlwdC4gSGVuY2UgYWRkZWQgbW91c2Vkb3duIGV2ZW50IGNoZWNrXG4gICAgICAgICAgICAvLyBhY3RpdmUgY2xhc3MgY2hlY2tzIHdoZXRoZXIgdXNlciBpcyBvbiB0aGUgY3VycmVudCBmaWVsZCwgaWYgc28gbWFya2luZyB0aGUgZmllbGQgYXMgdG91Y2hlZC4gQW5kIGZvcm0gZmllbGQgdmFsaWRhdGlvbiBoYXBwZW5zIG9uY2UgYSBmaWVsZCBpcyB0b3VjaGVkXG4gICAgICAgICAgICAvLyBfdHJpZ2dlcmVkQnlVc2VyIGNoZWNrcyB3aGV0aGVyIHRoZSBmaWVsZCBpcyB0b3VjaGVkIGJ5IHRoZSB1c2VyIG9yIHRyaWdnZXJlZCBmcm9tIGV4dGVybmFsIHNjcmlwdFxuICAgICAgICAgICAgLy8gV01TLTIyNDU2OiBfY2xpY2t0cmlnZ2VyZWRCeVVzZXIgY2hlY2tzIHdoZW4gdXNlciBzZWxlY3RzIGRhdGV0aW1ldHlwZSBmcm9tIHBpY2tlciwgbWFyayB0aGUgZmllbGQgYXMgdG91Y2hlZCB0byBzaG93IHZhbGlkYXRpb24gZXJyb3JzIGluIG1vYmlsZVxuXG4gICAgICAgICAgICBpZiAodGhpcy4kZWxlbWVudC5maW5kKCcuYWN0aXZlJykubGVuZ3RoID4gMCB8fCB0aGlzLmZvcm0udG91Y2hlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmlnZ2VyZWRCeVVzZXIgfHwgKGlzTW9iaWxlKCkgJiYgdGhpcy5fY2xpY2t0cmlnZ2VyZWRCeVVzZXIgJiYgaXNEYXRlVGltZVR5cGUodGhpcy53aWRnZXR0eXBlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXS5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5zZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TdGF0dXNDaGFuZ2Uoc3RhdHVzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5zaG93UGVuZGluZ1NwaW5uZXIgPSAoc3RhdHVzID09PSAnUEVORElORycpO1xuICAgICAgICAgICAgLy8gd2hpbGUgcnVubmluZyB2YWxpZGF0aW9uLCB3aWRnZXQgaXMgZGlzYWJsZWQgYW5kIHNwaW5uZXIgaXMgc2hvd25cbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBmb3JtV2lkZ2V0IGRpc2FibGVkIHN0YXRlIGlzIHJlc2V0IHRvIHRoZSBzdGF0ZSBvZiB0aGUgZm9ybUZpZWxkLlxuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtV2lkZ2V0LmRpc2FibGVkICE9PSAodGhpcyBhcyBhbnkpLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0LmRpc2FibGVkID0gKHRoaXMgYXMgYW55KS5kaXNhYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBleHBvc2UgdmFsaWRhdGlvbiBtZXNzYWdlIGFuZCBzZXQgY29udHJvbCB0byBpbnZhbGlkXG4gICAgc2V0VmFsaWRhdGlvbk1lc3NhZ2UodmFsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9ubWVzc2FnZSA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBWYWxpZGF0b3JzKGN1c3RvbVZhbGlkYXRvckZuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0UmVhZE9ubHlTdGF0ZSgpIHtcbiAgICAgICAgbGV0IHJlYWRPbmx5O1xuICAgICAgICBpZiAodGhpcy5mb3JtLmlzVXBkYXRlTW9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXNbJ3ByaW1hcnkta2V5J10gJiYgIXRoaXNbJ2lzLXJlbGF0ZWQnXSAmJiAhdGhpcy5wZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvKklmIHRoZSBmaWVsZCBpcyBwcmltYXJ5IGJ1dCBpcyBhc3NpZ25lZCBzZXQgcmVhZG9ubHkgZmFsc2UuXG4gICAgICAgICAgICAgICAgICAgQXNzaWduZWQgaXMgd2hlcmUgdGhlIHVzZXIgaW5wdXRzIHRoZSB2YWx1ZSB3aGlsZSBhIG5ldyBlbnRyeS5cbiAgICAgICAgICAgICAgICAgICBUaGlzIGlzIG5vdCBlZGl0YWJsZShpbiB1cGRhdGUgbW9kZSkgb25jZSBlbnRyeSBpcyBzdWNjZXNzZnVsKi9cbiAgICAgICAgICAgICAgICByZWFkT25seSA9ICEodGhpcy5nZW5lcmF0b3IgPT09ICdhc3NpZ25lZCcgJiYgdGhpcy5mb3JtLm9wZXJhdGlvblR5cGUgIT09ICd1cGRhdGUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVhZE9ubHkgPSB0aGlzLnJlYWRvbmx5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSW4gdmlldyBtb2RlLCBzZXQgd2lkZ2V0IHN0YXRlIHRvIHJlYWRvbmx5IGFsd2F5c1xuICAgICAgICAgICAgcmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldCgncmVhZG9ubHknLCByZWFkT25seSk7XG4gICAgfVxuXG4gICAgcmVzZXREaXNwbGF5SW5wdXQoKSB7XG4gICAgICAgIGlmICgoIWlzRGVmaW5lZCh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQucmVzZXREaXNwbGF5SW5wdXQgJiYgdGhpcy5mb3JtV2lkZ2V0LnJlc2V0RGlzcGxheUlucHV0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmlnZ2VyVXBsb2FkRXZlbnQoJGV2ZW50LCBldmVudE5hbWUpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7ICRldmVudCB9O1xuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgcGFyYW1zLm5ld1ZhbCA9ICRldmVudC50YXJnZXQuZmlsZXM7XG4gICAgICAgICAgICBwYXJhbXMub2xkVmFsID0gdGhpcy5fb2xkVXBsb2FkVmFsO1xuICAgICAgICAgICAgdGhpcy5fb2xkVXBsb2FkVmFsID0gcGFyYW1zLm5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJGb3JtRmllbGQoKSB7XG5cbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5fZmllbGROYW1lO1xuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudExpc3QgJiYgISh0aGlzLmZvcm0ucGFyZW50TGlzdCA9PT0gdGhpcy5wYXJlbnRMaXN0KSkge1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgICAgICAgICAgbGV0IF9maWVsZE5hbWUgPSBmaWVsZE5hbWU7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5uZ2Zvcm0uY29udHJvbHMuaGFzT3duUHJvcGVydHkoX2ZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBfZmllbGROYW1lID0gYCR7ZmllbGROYW1lfV8ke2NvdW50ZXJ9YDtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5nZm9ybS5hZGRDb250cm9sKF9maWVsZE5hbWUsIHRoaXMuY3JlYXRlQ29udHJvbCgpKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IF9maWVsZE5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5nZm9ybS5hZGRDb250cm9sKGZpZWxkTmFtZSwgdGhpcy5jcmVhdGVDb250cm9sKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25WYWx1ZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGNvbnN0IG9uU3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5fY29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvblN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICBpZiAodGhpcy5pc1JhbmdlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIHRoaXMubmdmb3JtLmFkZENvbnRyb2woZmllbGROYW1lICsgJ19tYXgnLCB0aGlzLmNyZWF0ZUNvbnRyb2woKSk7XG4gICAgICAgICAgICAvLyByZWdpc3RlcmluZyBmb3IgdmFsdWVDaGFuZ2VzIG9uIE1heGZvcm1XaWRnZXRcbiAgICAgICAgICAgIGNvbnN0IG9uTWF4VmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9tYXhDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vblZhbHVlQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvbk1heFZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBnZXQodGhpcy5mb3JtLmZvcm1kYXRhLCB0aGlzLl9maWVsZE5hbWUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5nZm9ybSA9IHRoaXMuZm9ybS5uZ2Zvcm07XG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtRmllbGQoKTtcbiAgICAgICAgLy8gSW5zdGFudGlhdGUgY3VzdG9tIHZhbGlkYXRvcnMgY2xhc3MgZm9yIGZvcm0gZmllbGRcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zID0gbmV3IEJhc2VGaWVsZFZhbGlkYXRpb25zKHRoaXMsIHRoaXMuZm9ybVdpZGdldCwgdGhpcy53aWRnZXR0eXBlLCB0aGlzLl9jb250cm9sLCB0aGlzLmZvcm0pO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFByb3BzUmVzKCk7XG5cbiAgICAgICAgICAgIC8vIHNldHRpbmcgZGlzcGxheUV4cHJlc3Npb25zIG9uIHRoZSBmb3Jtd2lkZ2V0IGV4cGxpY2l0bHkgYXMgZXhwciB3YXMgZXZhbHVhdGVkIHRvIFwiXCIuXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkaXNwbGF5bGFiZWwnLCB0aGlzLmJpbmRkaXNwbGF5bGFiZWwpO1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kZGlzcGxheWV4cHJlc3Npb24nLCB0aGlzLmJpbmRkaXNwbGF5ZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkaXNwbGF5aW1hZ2VzcmMnLCB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMpO1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kQ2hpcGNsYXNzJywgdGhpcy5iaW5kQ2hpcGNsYXNzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldCgnYmluZGRhdGFzZXQnLCB0aGlzLmJpbmRkYXRhc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJSZWFkeVN0YXRlTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5rZXkgPSB0aGlzLl9maWVsZE5hbWUgfHwgdGhpcy50YXJnZXQgfHwgdGhpcy5iaW5kaW5nO1xuICAgICAgICAgICAgdGhpcy52aWV3bW9kZXdpZGdldCA9IHRoaXMudmlld21vZGV3aWRnZXQgfHwgZ2V0RGVmYXVsdFZpZXdNb2RlV2lkZ2V0KHRoaXMud2lkZ2V0dHlwZSk7XG5cbiAgICAgICAgICAgIC8vIEZvciB1cGxvYWQgd2lkZ2V0LCBnZW5lcmF0ZSB0aGUgcGVybWl0dGVkIGZpZWxkXG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5VUExPQUQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsZVR5cGU7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY2NlcHRzIHN0cmluZyBmcm9tIGZpbGUgdHlwZSBhbmQgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gdGhpcy5maWxldHlwZSA/IEZJTEVfVFlQRVNbdGhpcy5maWxldHlwZV0gOiAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pdHRlZCA9IGZpbGVUeXBlICsgKHRoaXMuZXh0ZW5zaW9ucyA/IChmaWxlVHlwZSA/ICcsJyA6ICcnKSArIHRoaXMuZXh0ZW5zaW9ucyA6ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc01vYmlsZSgpICYmIHRoaXMudmlld3BvcnQuaXNNb2JpbGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzWydtb2JpbGUtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzWyd0YWJsZXQtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1sncGMtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuZGlzcGxhbmFtZSA9IHRoaXMuZGlzcGxheW5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnNob3cgPSB0aGlzLnNob3c7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmlzUmVsYXRlZCA9IHRoaXNbJ2lzLXJlbGF0ZWQnXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuaW5wdXR0eXBlID0gdGhpcy5pbnB1dHR5cGU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnByaW1hcnlLZXkgPSB0aGlzWydwcmltYXJ5LWtleSddO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLl9yZWFkb25seSA9IHRoaXMucmVhZG9ubHk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnJlZ2V4cCA9IHRoaXMucmVnZXhwO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5rZXkgPSB0aGlzLmtleTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcubW9iaWxlRGlzcGxheSA9IHRoaXNbJ21vYmlsZS1kaXNwbGF5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnBjRGlzcGxheSA9IHRoaXNbJ3BjLWRpc3BsYXknXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudGFibGV0RGlzcGxheSA9IHRoaXNbJ3RhYmxldC1kaXNwbGF5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnZhbGlkYXRpb25tZXNzYWdlID0gdGhpcy52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudmlld21vZGV3aWRnZXQgPSB0aGlzLnZpZXdtb2Rld2lkZ2V0O1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy53aWRnZXQgPSB0aGlzLndpZGdldHR5cGU7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmb3JtIGZpZWxkIHdpdGggcGFyZW50IGZvcm1cbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZWdpc3RlckZvcm1GaWVsZHModGhpcy53aWRnZXQpO1xuXG4gICAgICAgICAgICBhZGRGb3JJZEF0dHJpYnV0ZXModGhpcy5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgdGhpcy5zZXRSZWFkT25seVN0YXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
585
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9mb3JtL3NyYy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFFUixRQUFRLEVBQ1IsSUFBSSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQWEsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUNILGtCQUFrQixFQUNsQixHQUFHLEVBQ0gsUUFBUSxFQUNSLGNBQWMsRUFDZCxjQUFjLEVBQ2QsU0FBUyxFQUNULFFBQVEsRUFDUixJQUFJLEVBQ0osUUFBUSxFQUNYLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGtCQUFrQixFQUNsQixpQkFBaUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFJaEUsb0ZBQW9GO0FBQ3BGLE1BQU0saUJBQWlCLEdBQUcsR0FB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QUFTO3VCQUFDLFlBQVk7O3NCQUN0QixTQUFTO3VCQUFDLGdCQUFnQjs7c0JBQzFCLFNBQVM7dUJBQUMsZ0JBQWdCOztzQkFDMUIsSUFBSTs7c0JBQUksTUFBTTt1QkFBQyxPQUFPOztzQkFDdEIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBOUZHLFVBQVU7a0JBQXJELFlBQVk7bUJBQUMsWUFBWSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztZQUNYLGFBQWE7a0JBQTNDLFlBQVk7bUJBQUMsZUFBZTtZQWdFUSxnQkFBZ0I7a0JBQXBELFlBQVk7bUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO1lBSUEsV0FBVztrQkFBN0MsWUFBWTttQkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBhZGRGb3JJZEF0dHJpYnV0ZXMsXG4gICAgQXBwLFxuICAgIGRlYm91bmNlLFxuICAgIEZvcm1XaWRnZXRUeXBlLFxuICAgIGlzRGF0ZVRpbWVUeXBlLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc01vYmlsZSxcbiAgICBub29wLFxuICAgIFZpZXdwb3J0XG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgQmFzZUZpZWxkVmFsaWRhdGlvbnMsXG4gICAgQ29udGV4dCxcbiAgICBnZXREZWZhdWx0Vmlld01vZGVXaWRnZXQsXG4gICAgZ2V0RXZhbHVhdGVkRGF0YSxcbiAgICBwcm92aWRlQXMsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50XG59IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHtMaXN0Q29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL2xpc3QnO1xuXG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vZm9ybS1maWVsZC5wcm9wcyc7XG5pbXBvcnQge0Zvcm1Db21wb25lbnR9IGZyb20gJy4uL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7Zm9yRWFjaCwgZ2V0LCBpc0FycmF5LCBpc09iamVjdCwgam9pbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbi8vIEN1c3RvbSB2YWxpZGF0b3IgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9yLCBpZiBzZXRWYWxpZGF0aW9uTWVzc2FnZSBtZXRob2QgaXMgdXNlZFxuY29uc3QgY3VzdG9tVmFsaWRhdG9yRm4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIHsgY3VzdG9tOiB0cnVlIH07XG59O1xuXG5jb25zdCBGSUxFX1RZUEVTID0ge1xuICAgICdpbWFnZScgOiAnaW1hZ2UvKicsXG4gICAgJ3ZpZGVvJyA6ICd2aWRlby8qJyxcbiAgICAnYXVkaW8nIDogJ2F1ZGlvLyonXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t3bUZvcm1GaWVsZF0nLFxuICAgIGV4cG9ydEFzOiAnd21Gb3JtRmllbGQnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoRm9ybUZpZWxkRGlyZWN0aXZlKSxcbiAgICAgICAgcHJvdmlkZUFzKEZvcm1GaWVsZERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICB7cHJvdmlkZTogQ29udGV4dCwgdXNlRmFjdG9yeTogKCkgPT4geyByZXR1cm4ge30gfSwgbXVsdGk6IHRydWV9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGREaXJlY3RpdmUgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2Zvcm1XaWRnZXQnLCB7c3RhdGljOiB0cnVlfSkgZm9ybVdpZGdldDtcbiAgICBAQ29udGVudENoaWxkKCdmb3JtV2lkZ2V0TWF4JykgZm9ybVdpZGdldE1heDtcblxuICAgIHByaXZhdGUgZmI7XG4gICAgcHJpdmF0ZSB2aWV3cG9ydDtcblxuICAgIC8vIGV4Y2x1ZGVQcm9wcyBpcyB1c2VkIHRvIHN0b3JlIHRoZSBwcm9wcyB0aGF0IHNob3VsZCBub3QgYmUgYXBwbGllZCBvbiBpbm5lciB3aWRnZXRcbiAgICBwcml2YXRlIGV4Y2x1ZGVQcm9wcztcbiAgICBwcml2YXRlIF92YWxpZGF0b3JzO1xuICAgIHByaXZhdGUgX29sZFVwbG9hZFZhbDtcblxuICAgIG5nZm9ybTogRm9ybUdyb3VwO1xuICAgIGRlZmF1bHR2YWx1ZTtcbiAgICBkaXNwbGF5ZXhwcmVzc2lvbjtcbiAgICBkaXNwbGF5ZmllbGQ7XG4gICAgZGlzcGxheWxhYmVsO1xuICAgIGRpc3BsYXluYW1lO1xuICAgIGdlbmVyYXRvcjtcbiAgICBrZXk7XG4gICAgdGFyZ2V0O1xuICAgIGJpbmRpbmc7XG4gICAgd2lkZ2V0dHlwZTtcbiAgICBjbGFzcztcbiAgICByZWFkb25seTtcbiAgICBzaG93O1xuICAgIHR5cGU7XG4gICAgaXNEYXRhU2V0Qm91bmQ7XG4gICAgdmlld21vZGV3aWRnZXQ7XG4gICAgYmluZGRhdGFzZXQ7XG4gICAgYmluZGRpc3BsYXlleHByZXNzaW9uO1xuICAgIGJpbmRDaGlwY2xhc3M7XG4gICAgZGlzcGxheWltYWdlc3JjOiBzdHJpbmc7XG4gICAgYmluZGRpc3BsYXlpbWFnZXNyYztcbiAgICBiaW5kZGlzcGxheWxhYmVsO1xuICAgIGZvcm07XG4gICAgZmlsZXR5cGU7XG4gICAgZXh0ZW5zaW9ucztcbiAgICBwZXJtaXR0ZWQ7XG4gICAgcGVyaW9kO1xuICAgIGlzUmFuZ2U7XG4gICAgbmFtZTtcbiAgICAvLyBWYWxpZGF0aW9uIHByb3BlcnRpZXNcbiAgICByZXF1aXJlZDtcbiAgICBtYXhjaGFycztcbiAgICBtaW52YWx1ZTtcbiAgICBtYXh2YWx1ZTtcbiAgICByZWdleHA7XG4gICAgZmllbGREZWZDb25maWc7XG4gICAgcGxhY2Vob2xkZXI7XG4gICAgaW5wdXR0eXBlO1xuICAgIHZhbGlkYXRpb25tZXNzYWdlO1xuXG4gICAgcHVibGljIF9maWVsZE5hbWU7XG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZVNldFVwVmFsaWRhdG9ycztcbiAgICBwcml2YXRlIF9pbml0UHJvcHNSZXM7XG4gICAgcHJpdmF0ZSBwYXJlbnRMaXN0O1xuICAgIHByaXZhdGUgc2hvd1BlbmRpbmdTcGlubmVyOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2FjdGl2ZUZpZWxkOiBib29sZWFuO1xuICAgIHByaXZhdGUgbm90aWZ5Rm9yRmllbGRzOiBhbnk7XG4gICAgcHJpdmF0ZSBmaWVsZFZhbGlkYXRpb25zO1xuICAgIHByaXZhdGUgX3RyaWdnZXJlZEJ5VXNlcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9jbGlja3RyaWdnZXJlZEJ5VXNlcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIGFwcDogQXBwO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2NsaWNrdHJpZ2dlcmVkQnlVc2VyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRm9jdXNlZDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgZm9ybTogRm9ybUNvbXBvbmVudCxcbiAgICAgICAgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICB2aWV3cG9ydDogVmlld3BvcnQsXG4gICAgICAgIGFwcDogQXBwLFxuICAgICAgICBAT3B0aW9uYWwoKSBwYXJlbnRMaXN0OiBMaXN0Q29tcG9uZW50LFxuICAgICAgICBAQXR0cmlidXRlKCdjaGlwY2xhc3MuYmluZCcpIGJpbmRDaGlwY2xhc3M6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgYmluZGRhdGFzZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlleHByZXNzaW9uLmJpbmQnKSBiaW5kZGlzcGxheWV4cHJlc3Npb246IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWxhYmVsLmJpbmQnKSBiaW5kZGlzcGxheWxhYmVsOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3dpZGdldHR5cGUnKSBfd2lkZ2V0VHlwZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbmFtZScpIG5hbWUsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlpbWFnZXNyYy5iaW5kJykgYmluZGRpc3BsYXlpbWFnZXNyYzogU3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdrZXknKSBrZXksXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2lzLXJhbmdlJykgaXNSYW5nZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgncGMtZGlzcGxheScpIHBjRGlzcGxheSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbW9iaWxlLWRpc3BsYXknKSBtb2JpbGVEaXNwbGF5LFxuICAgICAgICBAQXR0cmlidXRlKCd0YWJsZXQtZGlzcGxheScpIHRhYmxldERpc3BsYXksXG4gICAgICAgIEBTZWxmKCkgQEluamVjdChDb250ZXh0KSBjb250ZXh0czogQXJyYXk8YW55PixcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IFdJREdFVF9DT05GSUcgPSB7XG4gICAgICAgICAgICB3aWRnZXRUeXBlOiAnd20tZm9ybS1maWVsZCcsXG4gICAgICAgICAgICBob3N0Q2xhc3M6ICcnLFxuICAgICAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ3dtLWZvcm0tZmllbGQtJyArIChfd2lkZ2V0VHlwZSB8fCBGb3JtV2lkZ2V0VHlwZS5URVhUKS50cmltKClcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlc29sdmVGbjogRnVuY3Rpb24gPSBub29wO1xuXG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0LCBuZXcgUHJvbWlzZShyZXMgPT4gcmVzb2x2ZUZuID0gcmVzKSk7XG4gICAgICAgIHRoaXMuX2luaXRQcm9wc1JlcyA9IHJlc29sdmVGbjtcbiAgICAgICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgICAgIHRoaXMuZmllbGREZWZDb25maWcgPSB7fTtcbiAgICAgICAgdGhpcy5jbGFzcyA9ICcnO1xuICAgICAgICB0aGlzLmJpbmRkYXRhc2V0ID0gYmluZGRhdGFzZXQ7XG4gICAgICAgIHRoaXMuYmluZGRpc3BsYXlpbWFnZXNyYyA9IGJpbmRkaXNwbGF5aW1hZ2VzcmM7XG4gICAgICAgIHRoaXMuYmluZGRpc3BsYXlleHByZXNzaW9uID0gYmluZGRpc3BsYXlleHByZXNzaW9uO1xuICAgICAgICB0aGlzLmJpbmRDaGlwY2xhc3MgPSBiaW5kQ2hpcGNsYXNzO1xuICAgICAgICB0aGlzLmJpbmRkaXNwbGF5bGFiZWwgPSBiaW5kZGlzcGxheWxhYmVsO1xuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgICAgICB0aGlzLmZiID0gZmI7XG4gICAgICAgIHRoaXMudmlld3BvcnQgPSB2aWV3cG9ydDtcbiAgICAgICAgdGhpcy5fZmllbGROYW1lID0ga2V5IHx8IG5hbWU7XG4gICAgICAgIHRoaXMuaXNSYW5nZSA9IGlzUmFuZ2U7XG4gICAgICAgIHRoaXMuZXhjbHVkZVByb3BzID0gbmV3IFNldChbJ3R5cGUnLCAnbmFtZSddKTtcbiAgICAgICAgdGhpcy53aWRnZXR0eXBlID0gX3dpZGdldFR5cGU7XG4gICAgICAgIHRoaXMucGFyZW50TGlzdCA9IHBhcmVudExpc3Q7XG4gICAgICAgIHRoaXMubm90aWZ5Rm9yRmllbGRzID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuYmluZGRhdGFzZXQgfHwgdGhpcy4kZWxlbWVudC5hdHRyKCdkYXRhc2V0JykpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRhU2V0Qm91bmQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dHNbMF0uX29uRm9jdXNGaWVsZCA9IHRoaXMuX29uRm9jdXNGaWVsZC5iaW5kKHRoaXMpO1xuICAgICAgICBjb250ZXh0c1swXS5fb25CbHVyRmllbGQgPSB0aGlzLl9vbkJsdXJGaWVsZC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX2RlYm91bmNlU2V0VXBWYWxpZGF0b3JzID0gZGVib3VuY2UoKCkgPT4gdGhpcy5zZXRVcFZhbGlkYXRvcnMoKSwgNTAwKTtcbiAgICB9XG5cbiAgICBfb25Gb2N1c0ZpZWxkKCRldnQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlRmllbGQgPSB0cnVlO1xuICAgICAgICAkKCRldnQudGFyZ2V0KS5jbG9zZXN0KCcubGl2ZS1maWVsZCcpLmFkZENsYXNzKCdhY3RpdmUnKTtcblxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIGdldCB0aGUgYWN0aXZlIGVsZW1lbnQgbWFya3VwIGJhc2VkIG9uIHdpZGdldCB0eXBlXG4gICAgZ2V0QWN0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0VHlwZSA9IHRoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3dpZGdldHR5cGUnKTtcbiAgICAgICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcignc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBcmlhQXR0cmlidXRlcygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgICAgICBpZiAodGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXS5pbnZhbGlkICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0udG91Y2hlZCAmJiB0aGlzLmZvcm0uaXNVcGRhdGVNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfX2Vycm9ybXNnJywgYCR7dGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnX192YWxpZGF0aW9uSWQnKX1gKTtcbiAgICAgICAgICAgIGVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgYCR7dGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXS5pbnZhbGlkfWApO1xuICAgICAgICAgICAgZWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgYCR7dGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnX192YWxpZGF0aW9uSWQnKX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ19fZXJyb3Jtc2cnKTtcbiAgICAgICAgICAgIGVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJyk7XG4gICAgICAgICAgICBlbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkJsdXJGaWVsZCgkZXZ0KSB7XG4gICAgICAgICQoJGV2dC50YXJnZXQpLmNsb3Nlc3QoJy5saXZlLWZpZWxkJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICBjb25zdCBlbGUgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigncC50ZXh0LWRhbmdlcicpO1xuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjM5NTldOiBBREEgaXNzdWUgLSBhZGRpbmcgYXJpYS1kZXNjcmliZWRieSwgYXJpYS1pbnZhbGlkLCBfX2Vycm9ybXNnIGF0dHJpYnV0ZXMgb25seSB3aGVuIHRoZSBmb3JtIGZpZWxkIGlzIGludmFsaWQgLCBlbHNlIHJlbW92aW5nIHRoZSBhdHRyaWJ1dGVzXG4gICAgICAgIHRoaXMuc2V0QXJpYUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlRmllbGQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NsaWNrdHJpZ2dlcmVkQnlVc2VyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgaW4gdmlldyBtb2RlIG9mIGZvcm0gZmllbGRcbiAgICBldmFsdWF0ZUV4cHIob2JqZWN0LCBkaXNwbGF5RmllbGQsIGRpc3BsYXlFeHByKSB7XG4gICAgICAgIGlmICghZGlzcGxheUV4cHIgfHwgIWRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gT2JqZWN0LmtleXMob2JqZWN0KVswXTtcbiAgICAgICAgICAgIC8vIElmIGRhdGFzZXQgaXMgbm90IHJlYWR5LCBkaXNwbGF5IGV4cHJlc3Npb24gd2lsbCBub3QgYmUgZGVmaW5lZFxuICAgICAgICAgICAgaWYgKCFkaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldEV2YWx1YXRlZERhdGEob2JqZWN0LCB7XG4gICAgICAgICAgICBmaWVsZDogZGlzcGxheUZpZWxkLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZGlzcGxheUV4cHJcbiAgICAgICAgfSwgdGhpcy52aWV3UGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBFeHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBpbiB2aWV3IG1vZGUgb2YgZm9ybSBmaWVsZFxuICAgIGdldERpc3BsYXlFeHByKCkge1xuICAgICAgICBjb25zdCBjYXB0aW9uID0gW107XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkID0gdGhpcy5kaXNwbGF5ZmllbGQgfHwgdGhpcy5kaXNwbGF5bGFiZWxcbiAgICAgICAgY29uc3QgZGlzcGxheUV4cHIgPSB0aGlzLmRpc3BsYXlleHByZXNzaW9uO1xuICAgICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKHZhbHVlLCBvYmogPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3Qob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbi5wdXNoKHRoaXMuZXZhbHVhdGVFeHByKG9iaiwgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhcHRpb24ucHVzaCh0aGlzLmV2YWx1YXRlRXhwcih2YWx1ZSwgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGpvaW4oY2FwdGlvbiwgJywnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpID8gJycgOiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIGdldENhcHRpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWUgPT09IG51bGwpID8gKGdldCh0aGlzLmZvcm0uZGF0YW91dHB1dCwgdGhpcy5fZmllbGROYW1lKSB8fCAnJykgOiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIC8vIE5vdGlmaWVzIGNoYW5nZXMgdG8gb2JzZXJ2aW5nIHZhbGlkYXRpb24gZmllbGRzXG4gICAgbm90aWZ5Q2hhbmdlcygpIHtcbiAgICAgICAgZm9yRWFjaCh0aGlzLm5vdGlmeUZvckZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgZmllbGQuZmllbGRWYWxpZGF0aW9ucy52YWxpZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlcnMgb2JzZXJ2ZXIgb2YgdmFsaWRhdGlvbiBmaWVsZHNcbiAgICBvYnNlcnZlT24oZmllbGRzKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5vYnNlcnZlT24oZmllbGRzLCAnZm9ybWZpZWxkcycpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzZXR1cCB2YWxpZGF0b3JzIGZvciByZWFjdGl2ZSBmb3JtIGNvbnRyb2xcbiAgICBzZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yPykge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0VXBWYWxpZGF0b3JzKGN1c3RvbVZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgY3VzdG9tIGFzeW5jIHZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGRcbiAgICBzZXRBc3luY1ZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgYW5kIGN1c3RvbSBzeW5jIHZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGRcbiAgICBzZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIHNldCB0aGUgcHJvcGVydGllcyBvbiBpbm5lciBmb3JtIHdpZGdldFxuICAgIHNldEZvcm1XaWRnZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQud2lkZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQud2lkZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBib3VuZEZuKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzZXQgdGhlIHByb3BlcnRpZXMgb24gaW5uZXIgbWF4IGZvcm0gd2lkZ2V0ICh3aGVuIHJhbmdlIGlzIHNlbGVjdGVkKVxuICAgIHNldE1heEZvcm1XaWRnZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldE1heCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0TWF4LndpZGdldFtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgY29uc3QgaXNGb3JtRGlydHkgPSB0aGlzLmZvcm0uZGlydHk7XG5cbiAgICAgICAgaWYgKGtleSAhPT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5leGNsdWRlUHJvcHMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFzIHVwbG9hZCB3aWRnZXQgaXMgYW4gSFRNTCB3aWRnZXQsIG9ubHkgcmVxdWlyZWQgcHJvcGVydHkgaXMgc2V0dXBcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuVVBMT0FEKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KGtleSwgbnYpO1xuXG4gICAgICAgIC8vIFBsYWNlaG9sZGVyIHNob3VsZCBub3QgYmUgc2V0dXAgb24gbWF4IHdpZGdldFxuICAgICAgICBpZiAoa2V5ICE9PSAncGxhY2Vob2xkZXInKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoa2V5LCBudik7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdHZhbHVlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ub25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZSh0aGlzLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYXhkZWZhdWx0dmFsdWUnOlxuICAgICAgICAgICAgICAgIHRoaXMubWF4VmFsdWUgPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoJ2RhdGF2YWx1ZScsIG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ub25NYXhEZWZhdWx0VmFsdWVDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21heHBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoJ3BsYWNlaG9sZGVyJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxuICAgICAgICAgICAgICAgIC8vIFdNUy0xODkwNiA6IERvIG5vdCBtYWtlIGZvcm0gYXMgZGlydHkgZHVyaW5nIHJlcXVpcmVkIHByb3AgaW5pdGlhbGl6YXRpb25cbiAgICAgICAgICAgICAgICBpZiAoaXNGb3JtRGlydHkgIT09IHRoaXMuZm9ybS5kaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtYXhjaGFycyc6XG4gICAgICAgICAgICBjYXNlICdtaW52YWx1ZSc6XG4gICAgICAgICAgICBjYXNlICdtYXh2YWx1ZSc6XG4gICAgICAgICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ByaW1hcnkta2V5JzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNldFByaW1hcnlLZXkodGhpcy5fZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkaXNwbGF5LW5hbWUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheW5hbWUgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlYWRvbmx5JzpcbiAgICAgICAgICAgICAgIHRoaXMuc2V0UmVhZE9ubHlTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TdHlsZUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KGtleSwgbnYpO1xuICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoa2V5LCBudik7XG4gICAgICAgIHN1cGVyLm9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cblxuICAgIGdldCBkYXRhdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXZhbHVlKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fY29udHJvbCAmJiB0aGlzLndpZGdldHR5cGUgIT09IEZvcm1XaWRnZXRUeXBlLlVQTE9BRCkge1xuICAgICAgICAgICAgdGhpcy5fY29udHJvbC5zZXRWYWx1ZSh2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHZhbCkge1xuICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXRNYXggJiYgdGhpcy5mb3JtV2lkZ2V0TWF4LmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgbWF4VmFsdWUodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXhDb250cm9sLnNldFZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIHNldCBtaW5WYWx1ZSh2YWwpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIHJlYWN0aXZlIGZvcm0gY29udHJvbFxuICAgIGdldCBfY29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV07XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSByZWFjdGl2ZSBtYXggZm9ybSBjb250cm9sXG4gICAgZ2V0IF9tYXhDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0gJiYgdGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lICsgJ19tYXgnXTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGRpc3BsYXlWYWx1ZVxuICAgIGdldCBkaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LmRpc3BsYXlWYWx1ZTtcbiAgICB9XG5cbiAgICAvL0dldCB0aGUgdGltZXN0YW1wXG4gICAgZ2V0IHRpbWVzdGFtcCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC50aW1lc3RhbXA7XG4gICAgfVxuXG4gICAgLy9HZXQgdGhlIGNoYXJsZW5ndGhcbiAgICBnZXQgY2hhcmxlbmd0aCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5jaGFybGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVhY3RpdmUgZm9ybSBjb250cm9sXG4gICAgY3JlYXRlQ29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuY29udHJvbCh1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHRoaXMuX3ZhbGlkYXRvcnNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gT24gZmllbGQgdmFsdWUgY2hhbmdlLCBwcm9wYWdhdGUgZXZlbnQgdG8gcGFyZW50IGZvcm1cbiAgICBvblZhbHVlQ2hhbmdlKHZhbCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcHRpb25FbCA9ICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmNhcHRpb24tZmxvYXRpbmcnKTtcbiAgICAgICAgICAgIGlmIChjYXB0aW9uRWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGhhc1ZhbHVlIGNoZWNrIHdoZXRoZXIgZm9ybS1maWVsZCBoYXMgYSB2YWx1ZSBmcm9tIHBhc3NlZCB2YWwgYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgLy8gQWRkZWQgc2FuaXR5IGNoZWNrIG9uIHZhbCB0byBzdXBwb3J0IHZhbHVlcyBsaWtlZCAwLCBmYWxzZSBldGMgYXMgaW5wdXQgdmFsIC0gV01TLTIwMDg0XG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVja2luZyBmb3IgaW5wdXQgdmFsdWUgb3IgLXdlYmtpdC1hdXRvZmlsbCB0byBzZWUgd2hldGhlciB0aGVyZSBhcmUgYW55IGF1dG9maWxsZWQgZmllbGRzIC0gV01TLTIwMTQxXG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNWYWx1ZSA9ICgoaXNEZWZpbmVkKHZhbCkgJiYgdmFsICE9PSAnJyAmJiB2YWwgIT09IG51bGwpIHx8IGNhcHRpb25FbC5maW5kKCdpbnB1dCcpLnZhbCgpKSB8fCBjYXB0aW9uRWwuZmluZCgnaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCcpLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnY2FwdGlvblBvc2l0aW9uQW5pbWF0ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheVZhbDogaGFzVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUVsOiBjYXB0aW9uRWwsXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0TXVsdGlwbGU6IHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQubXVsdGlwbGUsXG4gICAgICAgICAgICAgICAgICAgIGlzRm9jdXNlZDogdGhpcy5fYWN0aXZlRmllbGRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTIzOTU5XTogQURBIGlzc3VlIC0gYWRkaW5nIGFyaWEtZGVzY3JpYmVkYnksIGFyaWEtaW52YWxpZCwgX19lcnJvcm1zZyBhdHRyaWJ1dGVzIG9ubHkgd2hlbiB0aGUgZm9ybSBmaWVsZCBpcyBpbnZhbGlkICwgZWxzZSByZW1vdmluZyB0aGUgYXR0cmlidXRlc1xuICAgICAgICAgICAgdGhpcy5zZXRBcmlhQXR0cmlidXRlcygpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLm9uRmllbGRWYWx1ZUNoYW5nZSh0aGlzLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgICAgICAvLyBEbyBtYXJrIGFzIHRvdWNoZWQsIG9ubHkgaW5jYXNlIHdoZW4gdXNlciBoYXMgZW50ZXJlZCBhbiBpbnB1dCBidXQgbm90IHRocm91Z2ggdGhlIHNjcmlwdC4gSGVuY2UgYWRkZWQgbW91c2Vkb3duIGV2ZW50IGNoZWNrXG4gICAgICAgICAgICAvLyBhY3RpdmUgY2xhc3MgY2hlY2tzIHdoZXRoZXIgdXNlciBpcyBvbiB0aGUgY3VycmVudCBmaWVsZCwgaWYgc28gbWFya2luZyB0aGUgZmllbGQgYXMgdG91Y2hlZC4gQW5kIGZvcm0gZmllbGQgdmFsaWRhdGlvbiBoYXBwZW5zIG9uY2UgYSBmaWVsZCBpcyB0b3VjaGVkXG4gICAgICAgICAgICAvLyBfdHJpZ2dlcmVkQnlVc2VyIGNoZWNrcyB3aGV0aGVyIHRoZSBmaWVsZCBpcyB0b3VjaGVkIGJ5IHRoZSB1c2VyIG9yIHRyaWdnZXJlZCBmcm9tIGV4dGVybmFsIHNjcmlwdFxuICAgICAgICAgICAgLy8gV01TLTIyNDU2OiBfY2xpY2t0cmlnZ2VyZWRCeVVzZXIgY2hlY2tzIHdoZW4gdXNlciBzZWxlY3RzIGRhdGV0aW1ldHlwZSBmcm9tIHBpY2tlciwgbWFyayB0aGUgZmllbGQgYXMgdG91Y2hlZCB0byBzaG93IHZhbGlkYXRpb24gZXJyb3JzIGluIG1vYmlsZVxuXG4gICAgICAgICAgICBpZiAodGhpcy4kZWxlbWVudC5maW5kKCcuYWN0aXZlJykubGVuZ3RoID4gMCB8fCB0aGlzLmZvcm0udG91Y2hlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmlnZ2VyZWRCeVVzZXIgfHwgKGlzTW9iaWxlKCkgJiYgdGhpcy5fY2xpY2t0cmlnZ2VyZWRCeVVzZXIgJiYgaXNEYXRlVGltZVR5cGUodGhpcy53aWRnZXR0eXBlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXS5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5zZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TdGF0dXNDaGFuZ2Uoc3RhdHVzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5zaG93UGVuZGluZ1NwaW5uZXIgPSAoc3RhdHVzID09PSAnUEVORElORycpO1xuICAgICAgICAgICAgLy8gd2hpbGUgcnVubmluZyB2YWxpZGF0aW9uLCB3aWRnZXQgaXMgZGlzYWJsZWQgYW5kIHNwaW5uZXIgaXMgc2hvd25cbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBmb3JtV2lkZ2V0IGRpc2FibGVkIHN0YXRlIGlzIHJlc2V0IHRvIHRoZSBzdGF0ZSBvZiB0aGUgZm9ybUZpZWxkLlxuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtV2lkZ2V0LmRpc2FibGVkICE9PSAodGhpcyBhcyBhbnkpLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0LmRpc2FibGVkID0gKHRoaXMgYXMgYW55KS5kaXNhYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBleHBvc2UgdmFsaWRhdGlvbiBtZXNzYWdlIGFuZCBzZXQgY29udHJvbCB0byBpbnZhbGlkXG4gICAgc2V0VmFsaWRhdGlvbk1lc3NhZ2UodmFsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9ubWVzc2FnZSA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBWYWxpZGF0b3JzKGN1c3RvbVZhbGlkYXRvckZuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0UmVhZE9ubHlTdGF0ZSgpIHtcbiAgICAgICAgbGV0IHJlYWRPbmx5O1xuICAgICAgICBpZiAodGhpcy5mb3JtLmlzVXBkYXRlTW9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXNbJ3ByaW1hcnkta2V5J10gJiYgIXRoaXNbJ2lzLXJlbGF0ZWQnXSAmJiAhdGhpcy5wZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvKklmIHRoZSBmaWVsZCBpcyBwcmltYXJ5IGJ1dCBpcyBhc3NpZ25lZCBzZXQgcmVhZG9ubHkgZmFsc2UuXG4gICAgICAgICAgICAgICAgICAgQXNzaWduZWQgaXMgd2hlcmUgdGhlIHVzZXIgaW5wdXRzIHRoZSB2YWx1ZSB3aGlsZSBhIG5ldyBlbnRyeS5cbiAgICAgICAgICAgICAgICAgICBUaGlzIGlzIG5vdCBlZGl0YWJsZShpbiB1cGRhdGUgbW9kZSkgb25jZSBlbnRyeSBpcyBzdWNjZXNzZnVsKi9cbiAgICAgICAgICAgICAgICByZWFkT25seSA9ICEodGhpcy5nZW5lcmF0b3IgPT09ICdhc3NpZ25lZCcgJiYgdGhpcy5mb3JtLm9wZXJhdGlvblR5cGUgIT09ICd1cGRhdGUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVhZE9ubHkgPSB0aGlzLnJlYWRvbmx5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSW4gdmlldyBtb2RlLCBzZXQgd2lkZ2V0IHN0YXRlIHRvIHJlYWRvbmx5IGFsd2F5c1xuICAgICAgICAgICAgcmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldCgncmVhZG9ubHknLCByZWFkT25seSk7XG4gICAgfVxuXG4gICAgcmVzZXREaXNwbGF5SW5wdXQoKSB7XG4gICAgICAgIGlmICgoIWlzRGVmaW5lZCh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQucmVzZXREaXNwbGF5SW5wdXQgJiYgdGhpcy5mb3JtV2lkZ2V0LnJlc2V0RGlzcGxheUlucHV0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmlnZ2VyVXBsb2FkRXZlbnQoJGV2ZW50LCBldmVudE5hbWUpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7ICRldmVudCB9O1xuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgcGFyYW1zLm5ld1ZhbCA9ICRldmVudC50YXJnZXQuZmlsZXM7XG4gICAgICAgICAgICBwYXJhbXMub2xkVmFsID0gdGhpcy5fb2xkVXBsb2FkVmFsO1xuICAgICAgICAgICAgdGhpcy5fb2xkVXBsb2FkVmFsID0gcGFyYW1zLm5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJGb3JtRmllbGQoKSB7XG5cbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5fZmllbGROYW1lO1xuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudExpc3QgJiYgISh0aGlzLmZvcm0ucGFyZW50TGlzdCA9PT0gdGhpcy5wYXJlbnRMaXN0KSkge1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgICAgICAgICAgbGV0IF9maWVsZE5hbWUgPSBmaWVsZE5hbWU7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5uZ2Zvcm0uY29udHJvbHMuaGFzT3duUHJvcGVydHkoX2ZpZWxkTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBfZmllbGROYW1lID0gYCR7ZmllbGROYW1lfV8ke2NvdW50ZXJ9YDtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5nZm9ybS5hZGRDb250cm9sKF9maWVsZE5hbWUsIHRoaXMuY3JlYXRlQ29udHJvbCgpKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IF9maWVsZE5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5nZm9ybS5hZGRDb250cm9sKGZpZWxkTmFtZSwgdGhpcy5jcmVhdGVDb250cm9sKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25WYWx1ZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGNvbnN0IG9uU3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5fY29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvblN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICBpZiAodGhpcy5pc1JhbmdlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIHRoaXMubmdmb3JtLmFkZENvbnRyb2woZmllbGROYW1lICsgJ19tYXgnLCB0aGlzLmNyZWF0ZUNvbnRyb2woKSk7XG4gICAgICAgICAgICAvLyByZWdpc3RlcmluZyBmb3IgdmFsdWVDaGFuZ2VzIG9uIE1heGZvcm1XaWRnZXRcbiAgICAgICAgICAgIGNvbnN0IG9uTWF4VmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9tYXhDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vblZhbHVlQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBvbk1heFZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBnZXQodGhpcy5mb3JtLmZvcm1kYXRhLCB0aGlzLl9maWVsZE5hbWUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5nZm9ybSA9IHRoaXMuZm9ybS5uZ2Zvcm07XG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtRmllbGQoKTtcbiAgICAgICAgLy8gSW5zdGFudGlhdGUgY3VzdG9tIHZhbGlkYXRvcnMgY2xhc3MgZm9yIGZvcm0gZmllbGRcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zID0gbmV3IEJhc2VGaWVsZFZhbGlkYXRpb25zKHRoaXMsIHRoaXMuZm9ybVdpZGdldCwgdGhpcy53aWRnZXR0eXBlLCB0aGlzLl9jb250cm9sLCB0aGlzLmZvcm0pO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHByZXBhcmVGb3JtV2lkZ2V0KCkge1xuICAgICAgICB0aGlzLl9pbml0UHJvcHNSZXMoKTtcblxuICAgICAgICAvLyBzZXR0aW5nIGRpc3BsYXlFeHByZXNzaW9ucyBvbiB0aGUgZm9ybXdpZGdldCBleHBsaWNpdGx5IGFzIGV4cHIgd2FzIGV2YWx1YXRlZCB0byBcIlwiLlxuICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkaXNwbGF5bGFiZWwnLCB0aGlzLmJpbmRkaXNwbGF5bGFiZWwpO1xuICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkaXNwbGF5ZXhwcmVzc2lvbicsIHRoaXMuYmluZGRpc3BsYXlleHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kZGlzcGxheWltYWdlc3JjJywgdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjKTtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kQ2hpcGNsYXNzJywgdGhpcy5iaW5kQ2hpcGNsYXNzKTtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kZGF0YXNldCcsIHRoaXMuYmluZGRhdGFzZXQpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJSZWFkeVN0YXRlTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5rZXkgPSB0aGlzLl9maWVsZE5hbWUgfHwgdGhpcy50YXJnZXQgfHwgdGhpcy5iaW5kaW5nO1xuICAgICAgICAgICAgdGhpcy52aWV3bW9kZXdpZGdldCA9IHRoaXMudmlld21vZGV3aWRnZXQgfHwgZ2V0RGVmYXVsdFZpZXdNb2RlV2lkZ2V0KHRoaXMud2lkZ2V0dHlwZSk7XG5cbiAgICAgICAgICAgIC8vIEZvciB1cGxvYWQgd2lkZ2V0LCBnZW5lcmF0ZSB0aGUgcGVybWl0dGVkIGZpZWxkXG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5VUExPQUQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsZVR5cGU7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY2NlcHRzIHN0cmluZyBmcm9tIGZpbGUgdHlwZSBhbmQgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gdGhpcy5maWxldHlwZSA/IEZJTEVfVFlQRVNbdGhpcy5maWxldHlwZV0gOiAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pdHRlZCA9IGZpbGVUeXBlICsgKHRoaXMuZXh0ZW5zaW9ucyA/IChmaWxlVHlwZSA/ICcsJyA6ICcnKSArIHRoaXMuZXh0ZW5zaW9ucyA6ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc01vYmlsZSgpICYmIHRoaXMudmlld3BvcnQuaXNNb2JpbGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzWydtb2JpbGUtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzWyd0YWJsZXQtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1sncGMtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuZGlzcGxhbmFtZSA9IHRoaXMuZGlzcGxheW5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnNob3cgPSB0aGlzLnNob3c7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmlzUmVsYXRlZCA9IHRoaXNbJ2lzLXJlbGF0ZWQnXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuaW5wdXR0eXBlID0gdGhpcy5pbnB1dHR5cGU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnByaW1hcnlLZXkgPSB0aGlzWydwcmltYXJ5LWtleSddO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLl9yZWFkb25seSA9IHRoaXMucmVhZG9ubHk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnJlZ2V4cCA9IHRoaXMucmVnZXhwO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5rZXkgPSB0aGlzLmtleTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcubW9iaWxlRGlzcGxheSA9IHRoaXNbJ21vYmlsZS1kaXNwbGF5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnBjRGlzcGxheSA9IHRoaXNbJ3BjLWRpc3BsYXknXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudGFibGV0RGlzcGxheSA9IHRoaXNbJ3RhYmxldC1kaXNwbGF5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnZhbGlkYXRpb25tZXNzYWdlID0gdGhpcy52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudmlld21vZGV3aWRnZXQgPSB0aGlzLnZpZXdtb2Rld2lkZ2V0O1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy53aWRnZXQgPSB0aGlzLndpZGdldHR5cGU7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmb3JtIGZpZWxkIHdpdGggcGFyZW50IGZvcm1cbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZWdpc3RlckZvcm1GaWVsZHModGhpcy53aWRnZXQpO1xuXG4gICAgICAgICAgICBhZGRGb3JJZEF0dHJpYnV0ZXModGhpcy5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgdGhpcy5zZXRSZWFkT25seVN0YXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG4gICAgICAgIGlmKHRoaXMud2lkZ2V0U3ViVHlwZSA9PT0gXCJ3bS1mb3JtLWZpZWxkLWN1c3RvbS13aWRnZXRcIiAmJiB0aGlzLmZvcm1XaWRnZXQubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldCA9IHRoaXMuZm9ybVdpZGdldC5uYXRpdmVFbGVtZW50LndpZGdldDtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldCkge1xuICAgICAgICAgICAgaWYodGhpcy53aWRnZXRTdWJUeXBlID09PSBcIndtLWZvcm0tZmllbGQtY3VzdG9tLXdpZGdldFwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0LmNvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlRm9ybVdpZGdldCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVGb3JtV2lkZ2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -2051,17 +2051,14 @@ class FormFieldDirective extends StylableComponent {
2051
2051
  this.fieldValidations = new BaseFieldValidations(this, this.formWidget, this.widgettype, this._control, this.form);
2052
2052
  super.ngOnInit();
2053
2053
  }
2054
- ngAfterContentInit() {
2055
- super.ngAfterContentInit();
2056
- if (this.formWidget) {
2057
- this._initPropsRes();
2058
- // setting displayExpressions on the formwidget explicitly as expr was evaluated to "".
2059
- this.setFormWidget('binddisplaylabel', this.binddisplaylabel);
2060
- this.setFormWidget('binddisplayexpression', this.binddisplayexpression);
2061
- this.setFormWidget('binddisplayimagesrc', this.binddisplayimagesrc);
2062
- this.setFormWidget('bindChipclass', this.bindChipclass);
2063
- this.setFormWidget('binddataset', this.binddataset);
2064
- }
2054
+ prepareFormWidget() {
2055
+ this._initPropsRes();
2056
+ // setting displayExpressions on the formwidget explicitly as expr was evaluated to "".
2057
+ this.setFormWidget('binddisplaylabel', this.binddisplaylabel);
2058
+ this.setFormWidget('binddisplayexpression', this.binddisplayexpression);
2059
+ this.setFormWidget('binddisplayimagesrc', this.binddisplayimagesrc);
2060
+ this.setFormWidget('bindChipclass', this.bindChipclass);
2061
+ this.setFormWidget('binddataset', this.binddataset);
2065
2062
  this.registerReadyStateListener(() => {
2066
2063
  this.key = this._fieldName || this.target || this.binding;
2067
2064
  this.viewmodewidget = this.viewmodewidget || getDefaultViewModeWidget(this.widgettype);
@@ -2112,6 +2109,21 @@ class FormFieldDirective extends StylableComponent {
2112
2109
  this.setReadOnlyState();
2113
2110
  });
2114
2111
  }
2112
+ ngAfterContentInit() {
2113
+ super.ngAfterContentInit();
2114
+ if (this.widgetSubType === "wm-form-field-custom-widget" && this.formWidget.nativeElement)
2115
+ this.formWidget = this.formWidget.nativeElement.widget;
2116
+ if (this.formWidget) {
2117
+ if (this.widgetSubType === "wm-form-field-custom-widget") {
2118
+ this.formWidget.configSubject.asObservable().subscribe(() => {
2119
+ this.prepareFormWidget();
2120
+ });
2121
+ }
2122
+ else {
2123
+ this.prepareFormWidget();
2124
+ }
2125
+ }
2126
+ }
2115
2127
  static { this.ɵfac = function FormFieldDirective_Factory(t) { return new (t || FormFieldDirective)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(FormComponent), i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i1$1.Viewport), i0.ɵɵdirectiveInject(i1$1.App), i0.ɵɵdirectiveInject(i3.ListComponent, 8), i0.ɵɵinjectAttribute('chipclass.bind'), i0.ɵɵinjectAttribute('dataset.bind'), i0.ɵɵinjectAttribute('displayexpression.bind'), i0.ɵɵinjectAttribute('displaylabel.bind'), i0.ɵɵinjectAttribute('widgettype'), i0.ɵɵinjectAttribute('name'), i0.ɵɵinjectAttribute('displayimagesrc.bind'), i0.ɵɵinjectAttribute('key'), i0.ɵɵinjectAttribute('is-range'), i0.ɵɵinjectAttribute('pc-display'), i0.ɵɵinjectAttribute('mobile-display'), i0.ɵɵinjectAttribute('tablet-display'), i0.ɵɵdirectiveInject(Context, 2), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
2116
2128
  static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: FormFieldDirective, selectors: [["", "wmFormField", ""]], contentQueries: function FormFieldDirective_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
2117
2129
  i0.ɵɵcontentQuery(dirIndex, _c0, 7);