@firestitch/form 18.0.35 → 18.0.38

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.
@@ -1,11 +1,11 @@
1
1
  import { OnDestroy, OnInit } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class FsFormDialogActionsComponent implements OnInit, OnDestroy {
4
- /** Leave unset inside an `fsFormContainer` to follow whether it has anything to save. */
4
+ /** Leave unset to follow whether the enclosing form or container has anything to save. */
5
5
  save: boolean;
6
6
  create: boolean;
7
7
  close: boolean;
8
- /** Leave unset inside an `fsFormContainer` to fill in whenever Save does not apply. */
8
+ /** Leave unset to fill in whenever Save does not apply. */
9
9
  done: boolean;
10
10
  closeData: any;
11
11
  name: string;
@@ -16,13 +16,32 @@ export declare class FsFormDialogActionsComponent implements OnInit, OnDestroy {
16
16
  private _form;
17
17
  private _cdRef;
18
18
  /**
19
- * Inside a container these default to whether anything mounted can actually
20
- * save, so a footer left as a bare `<fs-form-dialog-actions>` swaps Save for
21
- * Done as tabs change without the dialog listing which tabs are savable. An
22
- * explicit binding always wins, and outside a container Save stays on as it
23
- * always did.
19
+ * Whatever owns the form set these actions act on, or null when nothing does.
20
+ * A container answers for every form mounted under it; failing that the
21
+ * enclosing form's root answers for itself and anything linked into it.
22
+ */
23
+ private get _owner();
24
+ /**
25
+ * Save and Done are one decision - whether there is anything to save - rather
26
+ * than two independent switches, so a bare `<fs-form-dialog-actions>` resolves
27
+ * it off the form set it sits in and needs no bindings at all. A footer in a
28
+ * container swaps Save for Done as tabs change without the dialog listing
29
+ * which tabs are savable, and a dialog with no form at all - a read-only one
30
+ * of labelled facts - gets Done, because a submit button there has nothing to
31
+ * submit.
32
+ *
33
+ * An explicit binding always wins. `[done]="true"` on its own means Done and
34
+ * only Done: turning Done on while leaving a Save beside it is never what the
35
+ * caller meant, and the two-flag version of this let that happen silently.
24
36
  */
25
37
  get showSave(): boolean;
38
+ /**
39
+ * Done stands in for a Save that does not apply, so it fills in only where a
40
+ * Save would otherwise have gone. `[save]="false"` is the caller saying they
41
+ * are footing the dialog themselves - usually with buttons projected into the
42
+ * content slot, sometimes including their own submit - and dropping an
43
+ * unasked-for Done beside those would be this component overruling them.
44
+ */
26
45
  get showDone(): boolean;
27
46
  ngOnInit(): void;
28
47
  ngOnDestroy(): void;
@@ -45,6 +45,13 @@ export declare abstract class FsFormBaseDirective implements OnInit, AfterConten
45
45
  private _confirmTabGroups;
46
46
  private _destroy$;
47
47
  abstract submitting: boolean;
48
+ /**
49
+ * True when anything in the owned set has a submit handler - i.e. there is
50
+ * something for a Save button to do. Both a form and a container answer this
51
+ * over their linked set, so whichever one owns a footer can be asked the same
52
+ * question without knowing which it got.
53
+ */
54
+ abstract submits: boolean;
48
55
  /** True when anything in the owned set has unsaved changes. */
49
56
  abstract dirtyLinked: boolean;
50
57
  /** Every form in the owned set, at any depth. */
@@ -11,11 +11,11 @@ import { FsFormDirective } from '../../directives/form/form.directive';
11
11
  import { withinSameDialog } from '../../helpers/within-same-dialog';
12
12
  import * as i0 from "@angular/core";
13
13
  export class FsFormDialogActionsComponent {
14
- /** Leave unset inside an `fsFormContainer` to follow whether it has anything to save. */
14
+ /** Leave unset to follow whether the enclosing form or container has anything to save. */
15
15
  save;
16
16
  create = false;
17
17
  close = false;
18
- /** Leave unset inside an `fsFormContainer` to fill in whenever Save does not apply. */
18
+ /** Leave unset to fill in whenever Save does not apply. */
19
19
  done;
20
20
  closeData = null;
21
21
  name;
@@ -29,20 +29,44 @@ export class FsFormDialogActionsComponent {
29
29
  _form = this._ownDialogOnly(inject(FsFormDirective, { optional: true }));
30
30
  _cdRef = inject(ChangeDetectorRef);
31
31
  /**
32
- * Inside a container these default to whether anything mounted can actually
33
- * save, so a footer left as a bare `<fs-form-dialog-actions>` swaps Save for
34
- * Done as tabs change without the dialog listing which tabs are savable. An
35
- * explicit binding always wins, and outside a container Save stays on as it
36
- * always did.
32
+ * Whatever owns the form set these actions act on, or null when nothing does.
33
+ * A container answers for every form mounted under it; failing that the
34
+ * enclosing form's root answers for itself and anything linked into it.
35
+ */
36
+ get _owner() {
37
+ return this._container || this._form?.rootForm || null;
38
+ }
39
+ /**
40
+ * Save and Done are one decision - whether there is anything to save - rather
41
+ * than two independent switches, so a bare `<fs-form-dialog-actions>` resolves
42
+ * it off the form set it sits in and needs no bindings at all. A footer in a
43
+ * container swaps Save for Done as tabs change without the dialog listing
44
+ * which tabs are savable, and a dialog with no form at all - a read-only one
45
+ * of labelled facts - gets Done, because a submit button there has nothing to
46
+ * submit.
47
+ *
48
+ * An explicit binding always wins. `[done]="true"` on its own means Done and
49
+ * only Done: turning Done on while leaving a Save beside it is never what the
50
+ * caller meant, and the two-flag version of this let that happen silently.
37
51
  */
38
52
  get showSave() {
39
- return this.save ?? (this._container ? this._container.submits : true);
53
+ if (this.save !== undefined) {
54
+ return this.save;
55
+ }
56
+ return this.done === true ? false : this._owner?.submits ?? false;
40
57
  }
58
+ /**
59
+ * Done stands in for a Save that does not apply, so it fills in only where a
60
+ * Save would otherwise have gone. `[save]="false"` is the caller saying they
61
+ * are footing the dialog themselves - usually with buttons projected into the
62
+ * content slot, sometimes including their own submit - and dropping an
63
+ * unasked-for Done beside those would be this component overruling them.
64
+ */
41
65
  get showDone() {
42
- return this.done ?? (this._container ? !this._container.submits && !this.create : false);
66
+ return this.done ?? (this.save === undefined && !this.showSave && !this.create);
43
67
  }
44
68
  ngOnInit() {
45
- const owner = this._container || this._form?.rootForm;
69
+ const owner = this._owner;
46
70
  if (owner) {
47
71
  // Track the whole set, not one form's own controls: with a form scoped to a
48
72
  // tab's fields, the actions sit outside it in the dialog footer and that
@@ -106,4 +130,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
106
130
  }], name: [{
107
131
  type: Input
108
132
  }] } });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9mb3JtLWRpYWxvZy1hY3Rpb25zL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQXFCcEUsTUFBTSxPQUFPLDRCQUE0QjtJQUV2Qyx5RkFBeUY7SUFDekUsSUFBSSxDQUFVO0lBQ2QsTUFBTSxHQUFHLEtB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QVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwrRUFBK0U7SUFDdkUsY0FBYyxDQUFnQyxLQUFRO1FBQzVELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakUsQ0FBQzt1R0FyRlUsNEJBQTRCOzJGQUE1Qiw0QkFBNEIsdVNDbkN6Qyw2L0JBNkNjLDY3Q0RqQlYsU0FBUyxpTEFDVCxpQkFBaUIsdUtBQ2pCLGNBQWMscUxBQ2QsZ0JBQWdCLG9KQUNoQiwwQkFBMEI7OzJGQUdqQiw0QkFBNEI7a0JBbEJ4QyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFFBQ1Y7d0JBQ0osT0FBTyxFQUFFLGNBQWM7d0JBQ3ZCLHFCQUFxQixFQUFFLG9CQUFvQjtxQkFDNUMsV0FDUTt3QkFDUCxTQUFTO3dCQUNULGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLDBCQUEwQjtxQkFDM0I7OEJBS2UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBRVUsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZzQnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEZzRm9ybUJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tYmFzZSc7XG5pbXBvcnQgeyBGc0Zvcm1Db250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvcm0tY29udGFpbmVyJztcbmltcG9ydCB7IEZzRm9ybURpYWxvZ0Nsb3NlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWRpYWxvZy1jbG9zZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcbmltcG9ydCB7IHdpdGhpblNhbWVEaWFsb2cgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3dpdGhpbi1zYW1lLWRpYWxvZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZm9ybS1kaWFsb2ctYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdmb3JtLWJ1dHRvbnMnLFxuICAgICdbY2xhc3Muc2F2ZS1jcmVhdGVdJzogJ3Nob3dTYXZlIHx8IGNyZWF0ZScsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b24sXG4gICAgRnNCdXR0b25EaXJlY3RpdmUsXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBGc0Zvcm1EaWFsb2dDbG9zZURpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNGb3JtRGlhbG9nQWN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvKiogTGVhdmUgdW5zZXQgaW5zaWRlIGFuIGBmc0Zvcm1Db250YWluZXJgIHRvIGZvbGxvdyB3aGV0aGVyIGl0IGhhcyBhbnl0aGluZyB0byBzYXZlLiAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2F2ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGNyZWF0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2UgPSBmYWxzZTtcbiAgLyoqIExlYXZlIHVuc2V0IGluc2lkZSBhbiBgZnNGb3JtQ29udGFpbmVyYCB0byBmaWxsIGluIHdoZW5ldmVyIFNhdmUgZG9lcyBub3QgYXBwbHkuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkb25lOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgY2xvc2VEYXRhID0gbnVsbDtcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcblxuICBwdWJsaWMgZGlydHkgPSBmYWxzZTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8YW55Pj4oTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvLyBBIGRpYWxvZyBvcGVuZWQgd2l0aCBgdmlld0NvbnRhaW5lclJlZmAgcmVzb2x2ZXMgdGhyb3VnaCB0byB3aGF0ZXZlciBvcGVuZWRcbiAgLy8gaXQsIHNvIGFuIG93bmVyIGZyb20gYW5vdGhlciBkaWFsb2cgaXMgZGlzY2FyZGVkIC0gdGhlc2UgYWN0aW9ucyBiZWxvbmcgdG9cbiAgLy8gdGhlaXIgb3duIGRpYWxvZydzIGZvcm0gc2V0IGFuZCBubyBvbmUgZWxzZSdzLlxuICBwcml2YXRlIF9jb250YWluZXIgPSB0aGlzLl9vd25EaWFsb2dPbmx5KGluamVjdChGc0Zvcm1Db250YWluZXJEaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUgfSkpO1xuICBwcml2YXRlIF9mb3JtID0gdGhpcy5fb3duRGlhbG9nT25seShpbmplY3QoRnNGb3JtRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pKTtcbiAgcHJpdmF0ZSBfY2RSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBJbnNpZGUgYSBjb250YWluZXIgdGhlc2UgZGVmYXVsdCB0byB3aGV0aGVyIGFueXRoaW5nIG1vdW50ZWQgY2FuIGFjdHVhbGx5XG4gICAqIHNhdmUsIHNvIGEgZm9vdGVyIGxlZnQgYXMgYSBiYXJlIGA8ZnMtZm9ybS1kaWFsb2ctYWN0aW9ucz5gIHN3YXBzIFNhdmUgZm9yXG4gICAqIERvbmUgYXMgdGFicyBjaGFuZ2Ugd2l0aG91dCB0aGUgZGlhbG9nIGxpc3Rpbmcgd2hpY2ggdGFicyBhcmUgc2F2YWJsZS4gQW5cbiAgICogZXhwbGljaXQgYmluZGluZyBhbHdheXMgd2lucywgYW5kIG91dHNpZGUgYSBjb250YWluZXIgU2F2ZSBzdGF5cyBvbiBhcyBpdFxuICAgKiBhbHdheXMgZGlkLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93U2F2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zYXZlID8/ICh0aGlzLl9jb250YWluZXIgPyB0aGlzLl9jb250YWluZXIuc3VibWl0cyA6IHRydWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93RG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb25lID8/ICh0aGlzLl9jb250YWluZXIgPyAhdGhpcy5fY29udGFpbmVyLnN1Ym1pdHMgJiYgIXRoaXMuY3JlYXRlIDogZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG93bmVyID0gdGhpcy5fY29udGFpbmVyIHx8IHRoaXMuX2Zvcm0/LnJvb3RGb3JtO1xuXG4gICAgaWYob3duZXIpIHtcbiAgICAgIC8vIFRyYWNrIHRoZSB3aG9sZSBzZXQsIG5vdCBvbmUgZm9ybSdzIG93biBjb250cm9sczogd2l0aCBhIGZvcm0gc2NvcGVkIHRvIGFcbiAgICAgIC8vIHRhYidzIGZpZWxkcywgdGhlIGFjdGlvbnMgc2l0IG91dHNpZGUgaXQgaW4gdGhlIGRpYWxvZyBmb290ZXIgYW5kIHRoYXRcbiAgICAgIC8vIGZvcm0ncyBOZ0Zvcm0gaG9sZHMgbm90aGluZyBvZiBpdHMgb3duLiBSZWNvbXB1dGVkIG9uIGV2ZXJ5IGVtaXNzaW9uXG4gICAgICAvLyByYXRoZXIgdGhhbiBsYXRjaGVkLCBzbyBhIHN3aXRjaCB0byBhIHByaXN0aW5lIHRhYiBjbGVhcnMgaXQgdG9vLlxuICAgICAgb3duZXIuZGlydHlDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IG93bmVyLmRpcnR5TGlua2VkO1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgb3duZXIuc3VibWl0dGVkJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWxheSg1MCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuX2Zvcm0pIHtcbiAgICAgIHRoaXMuX2Zvcm0ucmVzZXRlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKiBLZWVwcyBhIERJLXJlc29sdmVkIG93bmVyIG9ubHkgd2hlbiBpdCBiZWxvbmdzIHRvIHRoZXNlIGFjdGlvbnMnIGRpYWxvZy4gKi9cbiAgcHJpdmF0ZSBfb3duRGlhbG9nT25seTxUIGV4dGVuZHMgRnNGb3JtQmFzZURpcmVjdGl2ZT4ob3duZXI6IFQpOiBUIHtcbiAgICByZXR1cm4gd2l0aGluU2FtZURpYWxvZyhvd25lciwgdGhpcy5fZGlhbG9nUmVmKSA/IG93bmVyIDogbnVsbDtcbiAgfVxufVxuIiwiQGlmIChzaG93U2F2ZSB8fCBjcmVhdGUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW25hbWVdPVwibmFtZVwiPlxuICAgIHt7IGNyZWF0ZSA/ICdDcmVhdGUnIDogJ1NhdmUnIH19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiY2xvc2UgJiYgIWRpcnR5ICYmICFjcmVhdGVcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIENhbmNlbFxuICA8L2J1dHRvbj5cbn1cbkBpZiAoc2hvd0RvbmUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIERvbmVcbiAgPC9idXR0b24+XG59XG5AaWYgKHNob3dTYXZlIHx8IGNyZWF0ZSkge1xuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG59XG5AaWYgKGNsb3NlKSB7XG4gIDxidXR0b25cbiAgICAgIG1hdC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJjbG9zZS1idXR0b25cIlxuICAgICAgZnNGb3JtRGlhbG9nQ2xvc2VcbiAgICAgIFtjbG9zZURhdGFdPVwiY2xvc2VEYXRhXCJcbiAgICAgIFtjb2xvcl09XCJkaXJ0eSA/ICdiYXNpYycgOiAncHJpbWFyeSdcIj5cbiAgICBDbG9zZVxuICA8L2J1dHRvbj5cbn1cbkBpZiAoIShzaG93U2F2ZSB8fCBjcmVhdGUpKSB7XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbn1cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9mb3JtLWRpYWxvZy1hY3Rpb25zL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQXFCcEUsTUFBTSxPQUFPLDRCQUE0QjtJQUV2QywwRkFBMEY7SUFDMUUsSUFBSSxDQUFVO0lBQ2QsTUFBTSxHQUFHLEtB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QUMsWUFBWSxFQUFFLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsK0VBQStFO0lBQ3ZFLGNBQWMsQ0FBZ0MsS0FBUTtRQUM1RCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pFLENBQUM7dUdBL0dVLDRCQUE0QjsyRkFBNUIsNEJBQTRCLHVTQ25DekMsNi9CQTZDYyw2N0NEakJWLFNBQVMsaUxBQ1QsaUJBQWlCLHVLQUNqQixjQUFjLHFMQUNkLGdCQUFnQixvSkFDaEIsMEJBQTBCOzsyRkFHakIsNEJBQTRCO2tCQWxCeEMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxRQUNWO3dCQUNKLE9BQU8sRUFBRSxjQUFjO3dCQUN2QixxQkFBcUIsRUFBRSxvQkFBb0I7cUJBQzVDLFdBQ1E7d0JBQ1AsU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQiwwQkFBMEI7cUJBQzNCOzhCQUtlLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUVVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGc0J1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGc0Zvcm1CYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWJhc2UnO1xuaW1wb3J0IHsgRnNGb3JtQ29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3JtLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBGc0Zvcm1EaWFsb2dDbG9zZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9ybS1kaWFsb2ctY2xvc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9ybS9mb3JtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB3aXRoaW5TYW1lRGlhbG9nIH0gZnJvbSAnLi4vLi4vaGVscGVycy93aXRoaW4tc2FtZS1kaWFsb2cnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLWZvcm0tZGlhbG9nLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZGlhbG9nLWFjdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnZm9ybS1idXR0b25zJyxcbiAgICAnW2NsYXNzLnNhdmUtY3JlYXRlXSc6ICdzaG93U2F2ZSB8fCBjcmVhdGUnLFxuICB9LFxuICBpbXBvcnRzOiBbXG4gICAgTWF0QnV0dG9uLFxuICAgIEZzQnV0dG9uRGlyZWN0aXZlLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgRnNGb3JtRGlhbG9nQ2xvc2VEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzRm9ybURpYWxvZ0FjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqIExlYXZlIHVuc2V0IHRvIGZvbGxvdyB3aGV0aGVyIHRoZSBlbmNsb3NpbmcgZm9ybSBvciBjb250YWluZXIgaGFzIGFueXRoaW5nIHRvIHNhdmUuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzYXZlOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgY3JlYXRlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBjbG9zZSA9IGZhbHNlO1xuICAvKiogTGVhdmUgdW5zZXQgdG8gZmlsbCBpbiB3aGVuZXZlciBTYXZlIGRvZXMgbm90IGFwcGx5LiAqL1xuICBASW5wdXQoKSBwdWJsaWMgZG9uZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGNsb3NlRGF0YSA9IG51bGw7XG4gIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIGRpcnR5ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kaWFsb2dSZWYgPSBpbmplY3Q8TWF0RGlhbG9nUmVmPGFueT4+KE1hdERpYWxvZ1JlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLy8gQSBkaWFsb2cgb3BlbmVkIHdpdGggYHZpZXdDb250YWluZXJSZWZgIHJlc29sdmVzIHRocm91Z2ggdG8gd2hhdGV2ZXIgb3BlbmVkXG4gIC8vIGl0LCBzbyBhbiBvd25lciBmcm9tIGFub3RoZXIgZGlhbG9nIGlzIGRpc2NhcmRlZCAtIHRoZXNlIGFjdGlvbnMgYmVsb25nIHRvXG4gIC8vIHRoZWlyIG93biBkaWFsb2cncyBmb3JtIHNldCBhbmQgbm8gb25lIGVsc2Uncy5cbiAgcHJpdmF0ZSBfY29udGFpbmVyID0gdGhpcy5fb3duRGlhbG9nT25seShpbmplY3QoRnNGb3JtQ29udGFpbmVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pKTtcbiAgcHJpdmF0ZSBfZm9ybSA9IHRoaXMuX293bkRpYWxvZ09ubHkoaW5qZWN0KEZzRm9ybURpcmVjdGl2ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KSk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAvKipcbiAgICogV2hhdGV2ZXIgb3ducyB0aGUgZm9ybSBzZXQgdGhlc2UgYWN0aW9ucyBhY3Qgb24sIG9yIG51bGwgd2hlbiBub3RoaW5nIGRvZXMuXG4gICAqIEEgY29udGFpbmVyIGFuc3dlcnMgZm9yIGV2ZXJ5IGZvcm0gbW91bnRlZCB1bmRlciBpdDsgZmFpbGluZyB0aGF0IHRoZVxuICAgKiBlbmNsb3NpbmcgZm9ybSdzIHJvb3QgYW5zd2VycyBmb3IgaXRzZWxmIGFuZCBhbnl0aGluZyBsaW5rZWQgaW50byBpdC5cbiAgICovXG4gIHByaXZhdGUgZ2V0IF9vd25lcigpOiBGc0Zvcm1CYXNlRGlyZWN0aXZlIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyIHx8IHRoaXMuX2Zvcm0/LnJvb3RGb3JtIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhbmQgRG9uZSBhcmUgb25lIGRlY2lzaW9uIC0gd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyB0byBzYXZlIC0gcmF0aGVyXG4gICAqIHRoYW4gdHdvIGluZGVwZW5kZW50IHN3aXRjaGVzLCBzbyBhIGJhcmUgYDxmcy1mb3JtLWRpYWxvZy1hY3Rpb25zPmAgcmVzb2x2ZXNcbiAgICogaXQgb2ZmIHRoZSBmb3JtIHNldCBpdCBzaXRzIGluIGFuZCBuZWVkcyBubyBiaW5kaW5ncyBhdCBhbGwuIEEgZm9vdGVyIGluIGFcbiAgICogY29udGFpbmVyIHN3YXBzIFNhdmUgZm9yIERvbmUgYXMgdGFicyBjaGFuZ2Ugd2l0aG91dCB0aGUgZGlhbG9nIGxpc3RpbmdcbiAgICogd2hpY2ggdGFicyBhcmUgc2F2YWJsZSwgYW5kIGEgZGlhbG9nIHdpdGggbm8gZm9ybSBhdCBhbGwgLSBhIHJlYWQtb25seSBvbmVcbiAgICogb2YgbGFiZWxsZWQgZmFjdHMgLSBnZXRzIERvbmUsIGJlY2F1c2UgYSBzdWJtaXQgYnV0dG9uIHRoZXJlIGhhcyBub3RoaW5nIHRvXG4gICAqIHN1Ym1pdC5cbiAgICpcbiAgICogQW4gZXhwbGljaXQgYmluZGluZyBhbHdheXMgd2lucy4gYFtkb25lXT1cInRydWVcImAgb24gaXRzIG93biBtZWFucyBEb25lIGFuZFxuICAgKiBvbmx5IERvbmU6IHR1cm5pbmcgRG9uZSBvbiB3aGlsZSBsZWF2aW5nIGEgU2F2ZSBiZXNpZGUgaXQgaXMgbmV2ZXIgd2hhdCB0aGVcbiAgICogY2FsbGVyIG1lYW50LCBhbmQgdGhlIHR3by1mbGFnIHZlcnNpb24gb2YgdGhpcyBsZXQgdGhhdCBoYXBwZW4gc2lsZW50bHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dTYXZlKCk6IGJvb2xlYW4ge1xuICAgIGlmKHRoaXMuc2F2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYXZlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRvbmUgPT09IHRydWUgPyBmYWxzZSA6IHRoaXMuX293bmVyPy5zdWJtaXRzID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERvbmUgc3RhbmRzIGluIGZvciBhIFNhdmUgdGhhdCBkb2VzIG5vdCBhcHBseSwgc28gaXQgZmlsbHMgaW4gb25seSB3aGVyZSBhXG4gICAqIFNhdmUgd291bGQgb3RoZXJ3aXNlIGhhdmUgZ29uZS4gYFtzYXZlXT1cImZhbHNlXCJgIGlzIHRoZSBjYWxsZXIgc2F5aW5nIHRoZXlcbiAgICogYXJlIGZvb3RpbmcgdGhlIGRpYWxvZyB0aGVtc2VsdmVzIC0gdXN1YWxseSB3aXRoIGJ1dHRvbnMgcHJvamVjdGVkIGludG8gdGhlXG4gICAqIGNvbnRlbnQgc2xvdCwgc29tZXRpbWVzIGluY2x1ZGluZyB0aGVpciBvd24gc3VibWl0IC0gYW5kIGRyb3BwaW5nIGFuXG4gICAqIHVuYXNrZWQtZm9yIERvbmUgYmVzaWRlIHRob3NlIHdvdWxkIGJlIHRoaXMgY29tcG9uZW50IG92ZXJydWxpbmcgdGhlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0RvbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZG9uZSA/PyAodGhpcy5zYXZlID09PSB1bmRlZmluZWQgJiYgIXRoaXMuc2hvd1NhdmUgJiYgIXRoaXMuY3JlYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBvd25lciA9IHRoaXMuX293bmVyO1xuXG4gICAgaWYob3duZXIpIHtcbiAgICAgIC8vIFRyYWNrIHRoZSB3aG9sZSBzZXQsIG5vdCBvbmUgZm9ybSdzIG93biBjb250cm9sczogd2l0aCBhIGZvcm0gc2NvcGVkIHRvIGFcbiAgICAgIC8vIHRhYidzIGZpZWxkcywgdGhlIGFjdGlvbnMgc2l0IG91dHNpZGUgaXQgaW4gdGhlIGRpYWxvZyBmb290ZXIgYW5kIHRoYXRcbiAgICAgIC8vIGZvcm0ncyBOZ0Zvcm0gaG9sZHMgbm90aGluZyBvZiBpdHMgb3duLiBSZWNvbXB1dGVkIG9uIGV2ZXJ5IGVtaXNzaW9uXG4gICAgICAvLyByYXRoZXIgdGhhbiBsYXRjaGVkLCBzbyBhIHN3aXRjaCB0byBhIHByaXN0aW5lIHRhYiBjbGVhcnMgaXQgdG9vLlxuICAgICAgb3duZXIuZGlydHlDaGFuZ2UkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IG93bmVyLmRpcnR5TGlua2VkO1xuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgb3duZXIuc3VibWl0dGVkJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWxheSg1MCksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmKHRoaXMuX2Zvcm0pIHtcbiAgICAgIHRoaXMuX2Zvcm0ucmVzZXRlZFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKiBLZWVwcyBhIERJLXJlc29sdmVkIG93bmVyIG9ubHkgd2hlbiBpdCBiZWxvbmdzIHRvIHRoZXNlIGFjdGlvbnMnIGRpYWxvZy4gKi9cbiAgcHJpdmF0ZSBfb3duRGlhbG9nT25seTxUIGV4dGVuZHMgRnNGb3JtQmFzZURpcmVjdGl2ZT4ob3duZXI6IFQpOiBUIHtcbiAgICByZXR1cm4gd2l0aGluU2FtZURpYWxvZyhvd25lciwgdGhpcy5fZGlhbG9nUmVmKSA/IG93bmVyIDogbnVsbDtcbiAgfVxufVxuIiwiQGlmIChzaG93U2F2ZSB8fCBjcmVhdGUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW25hbWVdPVwibmFtZVwiPlxuICAgIHt7IGNyZWF0ZSA/ICdDcmVhdGUnIDogJ1NhdmUnIH19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiY2xvc2UgJiYgIWRpcnR5ICYmICFjcmVhdGVcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIENhbmNlbFxuICA8L2J1dHRvbj5cbn1cbkBpZiAoc2hvd0RvbmUpIHtcbiAgPGJ1dHRvblxuICAgICAgbWF0LWJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgIERvbmVcbiAgPC9idXR0b24+XG59XG5AaWYgKHNob3dTYXZlIHx8IGNyZWF0ZSkge1xuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG59XG5AaWYgKGNsb3NlKSB7XG4gIDxidXR0b25cbiAgICAgIG1hdC1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJjbG9zZS1idXR0b25cIlxuICAgICAgZnNGb3JtRGlhbG9nQ2xvc2VcbiAgICAgIFtjbG9zZURhdGFdPVwiY2xvc2VEYXRhXCJcbiAgICAgIFtjb2xvcl09XCJkaXJ0eSA/ICdiYXNpYycgOiAncHJpbWFyeSdcIj5cbiAgICBDbG9zZVxuICA8L2J1dHRvbj5cbn1cbkBpZiAoIShzaG93U2F2ZSB8fCBjcmVhdGUpKSB7XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbn1cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -354,4 +354,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
354
354
  type: ContentChildren,
355
355
  args: [MatTabGroup, { descendants: true }]
356
356
  }] } });
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1iYXNlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9mb3JtLWJhc2UvZm9ybS1iYXNlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBVSxXQUFXLEVBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBS3ZEOzs7Ozs7Ozs7O0dBVUc7QUFFSCxN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akYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO3VHQTlhbUIsbUJBQW1COzJGQUFuQixtQkFBbUIsbVJBaUN0QixXQUFXOzsyRkFqQ1IsbUJBQW1CO2tCQUR4QyxTQUFTOzhCQUlELFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBY0UsVUFBVTtzQkFEakIsZUFBZTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAsIE1hdFRhYkhlYWRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuXG5pbXBvcnQgeyBkZWZlciwgZnJvbUV2ZW50LCBpaWYsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29uZmlybVJlc3VsdCB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEZvcm1TdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcy9mb3JtLXN0YXR1cyc7XG5pbXBvcnQgeyBGb3JtRGVhY3RpdmF0ZUd1YXJkIH0gZnJvbSAnLi4vLi4vZ3VhcmRzL2Zvcm0tZGVhY3RpdmF0ZS5ndWFyZCc7XG5pbXBvcnQgeyBjb25maXJtUmVzdWx0Q29udGludWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IGdldEFjdGl2ZVJvdXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9nZXQtYWN0aXZlLXJvdXRlJztcbmltcG9ydCB7IENvbmZpcm1Db25maWcsIENvbmZpcm1UYWJHcm91cCwgU3VibWl0RXZlbnQsIFN1Ym1pdHRlZEV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGc0Zvcm0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mc2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBGc0J1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHR5cGUgeyBGc0Zvcm1EaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcblxuXG4vKipcbiAqIFNoYXJlZCBieSB0aGUgdHdvIHRoaW5ncyB0aGF0IGNhbiBvd24gYSBzZXQgb2YgZm9ybXM6IGFuIGBmc0Zvcm1gIHNpdHRpbmcgYXRcbiAqIHRoZSByb290IG9mIGl0cyBsaW5rZWQgc2V0LCBhbmQgYW4gYGZzRm9ybUNvbnRhaW5lcmAgaG9sZGluZyBmb3JtcyB0aGF0IGFyZVxuICogc2libGluZ3MgcmF0aGVyIHRoYW4gbmVzdGVkLlxuICpcbiAqIEl0IGhvbGRzIHRoZSBzdWJtaXQtYnV0dG9uIHJlZ2lzdHJ5IGJvdGggb2YgdGhlbSBleHBvc2UgdG8gYnV0dG9ucywgYW5kIHRoZVxuICogbGlmZWN5Y2xlIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gdG8gYW55IG9uZSBmb3JtIC1cbiAqIHRoZSBkaWFsb2cgYmFja2Ryb3AgYW5kIEVzY2FwZSwgQ3RybCtTLCB0aGUgYnJvd3NlciBjbG9zZSBwcm9tcHQsIHRoZSBkcmF3ZXJcbiAqIGFuZCB0YWItc3dpdGNoIGNvbmZpcm1zLiBFeGFjdGx5IG9uZSBvd25lciByZWdpc3RlcnMgdGhhdCBsaWZlY3ljbGU7IHNlZVxuICogYF9yZWdpc3Rlck93bmVyTGlmZWN5Y2xlYC5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRnNGb3JtQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybVRhYnMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtOiBDb25maXJtQ29uZmlnIHwgYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpcm1EaWFsb2cgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtRHJhd2VyID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybUJyb3dzZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG9ydGN1dHMgPSB0cnVlOyAvLyBDdHJsICsgc1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWFjdGl2YXRpb25HdWFyZCA9IHRydWU7XG5cbiAgcHJvdGVjdGVkIF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJvdGVjdGVkIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByb3RlY3RlZCBfZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJvdGVjdGVkIF9mb3JtID0gaW5qZWN0KEZzRm9ybSk7XG4gIHByb3RlY3RlZCBfcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcm90ZWN0ZWQgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8YW55Pj4oTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX2RyYXdlclJlZiA9IGluamVjdDxEcmF3ZXJSZWY8YW55Pj4oRHJhd2VyUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX2RpYWxvZ0JhY2tkcm9wRXNjYXBlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGVDb25maWc6IFJvdXRlIHwgbnVsbDtcblxuICBAQ29udGVudENoaWxkcmVuKE1hdFRhYkdyb3VwLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHByaXZhdGUgX3RhYkdyb3VwczogUXVlcnlMaXN0PE1hdFRhYkdyb3VwPiA9IG5ldyBRdWVyeUxpc3QoKTtcblxuICBwcml2YXRlIF9idXR0b25zID0gbmV3IFF1ZXJ5TGlzdDxGc0J1dHRvbkRpcmVjdGl2ZT4oKTtcbiAgcHJpdmF0ZSBfYWN0aXZlU3VibWl0QnV0dG9uOiBGc0J1dHRvbkRpcmVjdGl2ZTtcbiAgcHJpdmF0ZSBfY29uZmlybVRhYkdyb3VwcyA9IG5ldyBXZWFrU2V0PE1hdFRhYkdyb3VwPigpO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGFic3RyYWN0IHN1Ym1pdHRpbmc6IGJvb2xlYW47XG5cbiAgLyoqIFRydWUgd2hlbiBhbnl0aGluZyBpbiB0aGUgb3duZWQgc2V0IGhhcyB1bnNhdmVkIGNoYW5nZXMuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBkaXJ0eUxpbmtlZDogYm9vbGVhbjtcblxuICAvKiogRXZlcnkgZm9ybSBpbiB0aGUgb3duZWQgc2V0LCBhdCBhbnkgZGVwdGguICovXG4gIHB1YmxpYyBhYnN0cmFjdCBsaW5rZWRGb3JtczogRnNGb3JtRGlyZWN0aXZlW107XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBvd25lZCBzZXQncyBkaXJ0eSBzdGF0ZSBtYXkgaGF2ZSBtb3ZlZC4gKi9cbiAgcHVibGljIGFic3RyYWN0IGRpcnR5Q2hhbmdlJDogT2JzZXJ2YWJsZTx2b2lkPjtcblxuICAvKiogRW1pdHMgb25jZSBhIHN1Ym1pdCBvdmVyIHRoZSBvd25lZCBzZXQgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBzdWJtaXR0ZWQkOiBPYnNlcnZhYmxlPFN1Ym1pdHRlZEV2ZW50PjtcblxuICAvKiogVHJhY2tzIHRoZSBvd25lZCBzZXQncyBzdWJtaXQgbGlmZWN5Y2xlLCBzbyB0aGUgZHJhd2VyIGNhbiB3YWl0IG9uZSBvdXQuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBzdGF0dXMkOiBPYnNlcnZhYmxlPEZvcm1TdGF0dXM+O1xuXG4gIC8qKlxuICAgKiBUaGUgZGlhbG9nIHRoaXMgb3duZXIgbGl2ZXMgaW4sIG9yIG51bGwgb3V0c2lkZSBvbmUuIFVzZWQgdG8ga2VlcCBhIGZvcm0gc2V0XG4gICAqIGZyb20gc3Bhbm5pbmcgYSBkaWFsb2cgYm91bmRhcnkgLSBzZWUgYHdpdGhpblNhbWVEaWFsb2dgLlxuICAgKi9cbiAgcHVibGljIGdldCBkaWFsb2dSZWYoKTogTWF0RGlhbG9nUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9kaWFsb2dSZWY7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJPd25lckxpZmVjeWNsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3Rlck93bmVyQ29udGVudExpZmVjeWNsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXN0cm95JCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGVzdHJveSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fY2xlYW51cENhbkRlYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJ1dHRvbnMoKTogUXVlcnlMaXN0PEZzQnV0dG9uRGlyZWN0aXZlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZVN1Ym1pdEJ1dHRvbigpOiBGc0J1dHRvbkRpcmVjdGl2ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVN1Ym1pdEJ1dHRvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYWN0aXZlU3VibWl0QnV0dG9uKGJ1dHRvbjogRnNCdXR0b25EaXJlY3RpdmUpIHtcbiAgICB0aGlzLl9hY3RpdmVTdWJtaXRCdXR0b24gPSBidXR0b247XG4gIH1cblxuICAvKipcbiAgICogQnJpbmcgYSB0YWIgZ3JvdXAgaW50byB0aGlzIG93bmVyJ3MgdW5zYXZlZC1jaGFuZ2VzIGNvbmZpcm0uXG4gICAqXG4gICAqIGBfdGFiR3JvdXBzYCBvbmx5IHJlYWNoZXMgZ3JvdXBzIGluIHRoaXMgb3duZXIncyBwcm9qZWN0ZWQgY29udGVudCwgc28gYSBncm91cFxuICAgKiBkZWNsYXJlZCBpbnNpZGUgYSBjaGlsZCBjb21wb25lbnQncyBvd24gdGVtcGxhdGUgaGFzIHRvIGFubm91bmNlIGl0c2VsZi5cbiAgICogYGZzRm9ybUNvbmZpcm1UYWJzYCBjYWxscyB0aGlzIC0gY29uc3VtZXJzIG5ldmVyIGNhbGwgaXQgZGlyZWN0bHkuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJUYWJHcm91cCh0YWJHcm91cDogTWF0VGFiR3JvdXApOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cCh0YWJHcm91cCk7XG4gIH1cblxuICBwdWJsaWMgYWRkQnV0dG9uKGJ1dHRvbjogRnNCdXR0b25EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICB0aGlzLl9idXR0b25zXG4gICAgICAucmVzZXQoXG4gICAgICAgIFtcbiAgICAgICAgICAuLi50aGlzLl9idXR0b25zLnRvQXJyYXkoKSxcbiAgICAgICAgICBidXR0b24sXG4gICAgICAgIF0pO1xuXG4gICAgLy8gUXVlcnlMaXN0LnJlc2V0KCkgZG9lcyBub3QgZW1pdCBgY2hhbmdlc2A7IG5vdGlmeSBzbyBzdWJzY3JpYmVycyAoZS5nLiB0aGVcbiAgICAvLyBmb3JtJ3MgZGlydHktc3VibWl0LWJ1dHRvbiB0cmFja2luZykgcmVhY3QgdG8gYnV0dG9ucyBiZWluZyByZWdpc3RlcmVkLlxuICAgIHRoaXMuX2J1dHRvbnMubm90aWZ5T25DaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQnV0dG9uKGJ1dHRvbjogRnNCdXR0b25EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZih0aGlzLl9hY3RpdmVTdWJtaXRCdXR0b24gPT09IGJ1dHRvbikge1xuICAgICAgdGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9idXR0b25zLnJlc2V0KFxuICAgICAgW1xuICAgICAgICAuLi50aGlzLl9idXR0b25zLnRvQXJyYXkoKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IChidXR0b24gIT09IGl0ZW0pKSxcbiAgICAgIF0pO1xuXG4gICAgdGhpcy5fYnV0dG9ucy5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVyeXRoaW5nIGhlcmUgYWN0cyBvbiB0aGUgZm9ybSBzZXQgYXMgYSB3aG9sZSwgc28gZXhhY3RseSBvbmUgdGhpbmcgbWF5XG4gICAqIHJlZ2lzdGVyIGl0LiBBIGZvcm0gbGlua2VkIGludG8gYSBwYXJlbnQgZGVmZXJzIHRvIHRoYXQgcGFyZW50OyBldmVyeSBmb3JtXG4gICAqIGluc2lkZSBhIGNvbnRhaW5lciBkZWZlcnMgdG8gdGhlIGNvbnRhaW5lci4gUmVnaXN0ZXJpbmcgdHdpY2Ugd291bGQgcHV0IHR3b1xuICAgKiBjb25maXJtcyBvbiB0aGUgc2FtZSBiYWNrZHJvcCBjbGljayBhbmQgdHdvIGhhbmRsZXJzIG9uIHRoZSBzYW1lIEN0cmwrUy5cbiAgICovXG4gIHByb3RlY3RlZCBfcmVnaXN0ZXJPd25lckxpZmVjeWNsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWFjdGl2YXRpb25HdWFyZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJDYW5EZWFjdGl2YXRlR3VhcmQoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1EaWFsb2dCYWNrZHJvcEVzY2FwZSgpO1xuICAgIHRoaXMuX2xpc3RlbkhvdEtleXMoKTtcbiAgICB0aGlzLl9saXN0ZW5XaW5kb3dDbG9zZSgpO1xuICB9XG5cbiAgLyoqIFRoZSBoYWxmIG9mIHRoZSBzYW1lIG93bmVyc2hpcCB0aGF0IG5lZWRzIHByb2plY3RlZCBjb250ZW50IHJlc29sdmVkLiAqL1xuICBwcm90ZWN0ZWQgX3JlZ2lzdGVyT3duZXJDb250ZW50TGlmZWN5Y2xlKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybVRhYnMoKTtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1EcmF3ZXJDbG9zZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyRHJhd2VyQ2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIGluc2lkZSB3aGF0IHRoaXMgb3duZXIgY292ZXJzLiBPdmVycmlkZGVuIGJ5IHRoZVxuICAgKiBjb250YWluZXIsIHdob3NlIG93biBlbGVtZW50IGlzIGEgcG9vciBwcm94eTogaXQgbWF5IGJlIGFuIGA8bmctY29udGFpbmVyPmAsXG4gICAqIHdoaWNoIGlzIGEgY29tbWVudCBub2RlIGFuZCBjb250YWlucyBub3RoaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9jb250YWluc0VsZW1lbnQoZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZUNvbnRhaW5zKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwgZWwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9ub2RlQ29udGFpbnMocm9vdDogTm9kZSwgZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIXJvb3QgfHwgIWVsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGVsID09PSByb290KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWwucGFyZW50RWxlbWVudCA/IHRoaXMuX25vZGVDb250YWlucyhyb290LCBlbC5wYXJlbnRFbGVtZW50KSA6IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9mb3JtQ2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1EaWFsb2cpIHtcbiAgICAgIHRoaXMudHJpZ2dlckNvbmZpcm0oKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJlc3VsdCkgPT4gY29uZmlybVJlc3VsdENvbnRpbnVlKHJlc3VsdCkpLFxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09PSBDb25maXJtUmVzdWx0Lk5vQ2hhbmdlcyB8fCByZXN1bHQgPT09IENvbmZpcm1SZXN1bHQuRGlzY2FyZFxuICAgICAgICAgICAgICA/IG9mKG51bGwpXG4gICAgICAgICAgICAgIDogdGhpcy5zdWJtaXR0ZWQkO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBTdWJtaXR0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShyZXN1bHQ/LnJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5XaW5kb3dDbG9zZSgpOiB2b2lkIHtcbiAgICBmcm9tRXZlbnQod2luZG93LCAnYmVmb3JldW5sb2FkJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm0gJiYgdGhpcy5jb25maXJtQnJvd3NlciAmJiB0aGlzLmRpcnR5TGlua2VkKSB7XG4gICAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmVEaWFsb2coZWw6IE5vZGUsIGRpYWxvZzogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZUNvbnRhaW5zKGRpYWxvZywgZWwgYXMgRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Ib3RLZXlzKCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSAmJiBldmVudC5jb2RlID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgY29uc3QgY2RrT3ZlcmxheVBhbmUgPSBBcnJheVxuICAgICAgICAgICAgICAuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmNkay1vdmVybGF5LXBhbmUnKSkucG9wKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZURpYWxvZyA9IHRoaXNcbiAgICAgICAgICAgICAgLl9hY3RpdmVEaWFsb2coZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fZGlhbG9nUmVmLmlkKSwgY2RrT3ZlcmxheVBhbmUpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aXZlRGlhbG9nKSB7XG4gICAgICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1DbG9zZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuY29kZSA9PT0gJ0tleVMnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG9ydGN1dHMpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5zRWxlbWVudChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtRGlhbG9nQmFja2Ryb3BFc2NhcGUoKTogdm9pZCB7XG4gICAgaWYodGhpcy5fZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSA9ICF0aGlzLl9kaWFsb2dSZWY/LmRpc2FibGVDbG9zZTtcblxuICAgICAgaWYgKHRoaXMuX2RpYWxvZ0JhY2tkcm9wRXNjYXBlKSB7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5iYWNrZHJvcENsaWNrKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZm9ybUNsb3NlKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZGVzdHJveSRcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kaXNhYmxlQ2xvc2UgPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckRyYXdlckNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kcmF3ZXJSZWYpIHtcbiAgICAgIHRoaXMuX2RyYXdlclJlZi5jbG9zZVN0YXJ0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdWJtaXR0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyRcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChzdGF0dXMpID0+IHN0YXR1cyA9PT0gRm9ybVN0YXR1cy5TdWNjZXNzIHx8IHN0YXR1cyA9PT0gRm9ybVN0YXR1cy5FcnJvciksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBGb3JtU3RhdHVzLlN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChudWxsKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybURyYXdlckNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kcmF3ZXJSZWYpIHtcbiAgICAgIHRoaXMuX2RyYXdlclJlZi5jbG9zZVN0YXJ0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpaWYoXG4gICAgICAgICAgICAgICgpID0+ICEhdGhpcy5jb25maXJtICYmIHRoaXMuY29uZmlybURyYXdlcixcbiAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyQ29uZmlybSgpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdCkgPT4gY29uZmlybVJlc3VsdENvbnRpbnVlKHJlc3VsdCkpLFxuICAgICAgICAgICAgICAgICAgdGFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtVGFicygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cHModGhpcy5fdGFiR3JvdXBzLnRvQXJyYXkoKSk7XG4gICAgdGhpcy5fdGFiR3JvdXBzLmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3Vwcyh0aGlzLl90YWJHcm91cHMudG9BcnJheSgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtVGFiR3JvdXBzKHRhYkdyb3VwczogTWF0VGFiR3JvdXBbXSk6IHZvaWQge1xuICAgIHRhYkdyb3Vwcy5mb3JFYWNoKCh0YWJHcm91cDogTWF0VGFiR3JvdXApID0+IHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3VwKHRhYkdyb3VwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3VwKHRhYkdyb3VwOiBNYXRUYWJHcm91cCk6IHZvaWQge1xuICAgIC8vIGBfdGFiR3JvdXBzLmNoYW5nZXNgIHJlLWVtaXRzIHRoZSB3aG9sZSBsaXN0LCBub3QganVzdCB3aGF0IGFycml2ZWQsIGFuZCBpdFxuICAgIC8vIGVtaXRzIGV2ZXJ5IHRpbWUgYSBsYXp5IHRhYiBib2R5IG1vdW50cyBhIG5lc3RlZCBncm91cC4gR3JvdXBzIGFscmVhZHlcbiAgICAvLyB3aXJlZCB0aGVyZWZvcmUgY29tZSBiYWNrIGFyb3VuZCAtIHNvIHdpdGhvdXQgdGhpcyB0aGUgb3V0ZXIgZ3JvdXBcbiAgICAvLyBhY2N1bXVsYXRlcyBvbmUgc3Vic2NyaXB0aW9uIHBlciBlbWlzc2lvbiwgYW5kIGEgc2luZ2xlIGNsaWNrIG9uIGl0IG9wZW5zXG4gICAgLy8gdGhhdCBtYW55IHN0YWNrZWQgY29uZmlybSBkaWFsb2dzLlxuICAgIGlmICh0aGlzLl9jb25maXJtVGFiR3JvdXBzLmhhcyh0YWJHcm91cCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maXJtVGFiR3JvdXBzLmFkZCh0YWJHcm91cCk7XG5cbiAgICBjb25zdCBjb25maXJtVGFiR3JvdXAgPSB0YWJHcm91cCBhcyBDb25maXJtVGFiR3JvdXA7XG4gICAgaWYgKCFjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2spIHtcbiAgICAgIGNvbmZpcm1UYWJHcm91cC5fb3JpZ2luYWxIYW5kbGVDbGljayA9IHRhYkdyb3VwLl9oYW5kbGVDbGljaztcbiAgICAgIGNvbmZpcm1UYWJHcm91cC5faGFuZGxDbGljayQgPSBuZXcgU3ViamVjdDx7XG4gICAgICAgICB0YWI6IE1hdFRhYjtcbiAgICAgICAgIHRhYkhlYWRlcjogTWF0VGFiSGVhZGVyO1xuICAgICAgICAgaWR4OiBudW1iZXJcbiAgICAgICAgfT4oKTtcblxuICAgICAgY29uZmlybVRhYkdyb3VwLl9oYW5kbGVDbGljayA9ICh0YWI6IE1hdFRhYiwgdGFiSGVhZGVyOiBNYXRUYWJIZWFkZXIsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChjb25maXJtVGFiR3JvdXAuX2hhbmRsQ2xpY2skLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25maXJtVGFiR3JvdXAuX2hhbmRsQ2xpY2skLm5leHQoeyB0YWIsIHRhYkhlYWRlciwgaWR4IH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbmZpcm1UYWJHcm91cC5fb3JpZ2luYWxIYW5kbGVDbGljayh0YWIsIHRhYkhlYWRlciwgaWR4KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25maXJtVGFiR3JvdXAuX2hhbmRsQ2xpY2skXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLnN1Ym1pdHRpbmcpLFxuICAgICAgICBzd2l0Y2hNYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYodGhpcy5jb25maXJtICYmIHRoaXMuY29uZmlybVRhYnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJDb25maXJtKClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChjb25maXJtUmVzdWx0Q29udGludWUocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25maXJtVGFiR3JvdXAuc2VsZWN0ZWRJbmRleCA9IGV2ZW50LmlkeDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2soZXZlbnQudGFiLCBldmVudC50YWJIZWFkZXIsIGV2ZW50LmlkeCk7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cblxuICBwcml2YXRlIF9yZWdpc3RlckNhbkRlYWN0aXZhdGVHdWFyZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZyA9IGdldEFjdGl2ZVJvdXRlKHRoaXMuX3JvdXRlKT8ucm91dGVDb25maWc7XG5cbiAgICBpZiAoIXRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybS5yZWdpc3RlckZvcm1EaXJlY3RpdmUodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY29tcG9uZW50LCB0aGlzKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlKSkge1xuICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLmluZGV4T2YoRm9ybURlYWN0aXZhdGVHdWFyZCkgPT09IC0xKSB7XG4gICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLnB1c2goRm9ybURlYWN0aXZhdGVHdWFyZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW51cENhbkRlYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGd1YXJkSW5kZXggPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLmluZGV4T2YoRm9ybURlYWN0aXZhdGVHdWFyZCk7XG4gICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5zcGxpY2UoZ3VhcmRJbmRleCwgMSk7XG5cbiAgICB0aGlzLl9mb3JtLnJlbW92ZUZvcm1EaXJlY3RpdmUodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY29tcG9uZW50KTtcbiAgfVxuXG5cbiAgcHVibGljIGFic3RyYWN0IHRyaWdnZXJTdWJtaXQoKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IHRyaWdnZXJDb25maXJtKCk6IE9ic2VydmFibGU8Q29uZmlybVJlc3VsdD47XG4gIHB1YmxpYyBhYnN0cmFjdCByZXNldCgpOiB2b2lkO1xuICBwdWJsaWMgYWJzdHJhY3Qgc3VibWl0JChldmVudD86IFN1Ym1pdEV2ZW50KTogT2JzZXJ2YWJsZTxTdWJtaXR0ZWRFdmVudD47XG59XG4iXX0=
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1iYXNlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9mb3JtLWJhc2UvZm9ybS1iYXNlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBVSxXQUFXLEVBQWdCLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBS3ZEOzs7Ozs7Ozs7O0dBVUc7QUFFSCxN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akYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO3VHQXRibUIsbUJBQW1COzJGQUFuQixtQkFBbUIsbVJBaUN0QixXQUFXOzsyRkFqQ1IsbUJBQW1CO2tCQUR4QyxTQUFTOzhCQUlELFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBY0UsVUFBVTtzQkFEakIsZUFBZTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAsIE1hdFRhYkhlYWRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuXG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuXG5pbXBvcnQgeyBkZWZlciwgZnJvbUV2ZW50LCBpaWYsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29uZmlybVJlc3VsdCB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IEZvcm1TdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcy9mb3JtLXN0YXR1cyc7XG5pbXBvcnQgeyBGb3JtRGVhY3RpdmF0ZUd1YXJkIH0gZnJvbSAnLi4vLi4vZ3VhcmRzL2Zvcm0tZGVhY3RpdmF0ZS5ndWFyZCc7XG5pbXBvcnQgeyBjb25maXJtUmVzdWx0Q29udGludWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IGdldEFjdGl2ZVJvdXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9nZXQtYWN0aXZlLXJvdXRlJztcbmltcG9ydCB7IENvbmZpcm1Db25maWcsIENvbmZpcm1UYWJHcm91cCwgU3VibWl0RXZlbnQsIFN1Ym1pdHRlZEV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGc0Zvcm0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mc2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBGc0J1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHR5cGUgeyBGc0Zvcm1EaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtL2Zvcm0uZGlyZWN0aXZlJztcblxuXG4vKipcbiAqIFNoYXJlZCBieSB0aGUgdHdvIHRoaW5ncyB0aGF0IGNhbiBvd24gYSBzZXQgb2YgZm9ybXM6IGFuIGBmc0Zvcm1gIHNpdHRpbmcgYXRcbiAqIHRoZSByb290IG9mIGl0cyBsaW5rZWQgc2V0LCBhbmQgYW4gYGZzRm9ybUNvbnRhaW5lcmAgaG9sZGluZyBmb3JtcyB0aGF0IGFyZVxuICogc2libGluZ3MgcmF0aGVyIHRoYW4gbmVzdGVkLlxuICpcbiAqIEl0IGhvbGRzIHRoZSBzdWJtaXQtYnV0dG9uIHJlZ2lzdHJ5IGJvdGggb2YgdGhlbSBleHBvc2UgdG8gYnV0dG9ucywgYW5kIHRoZVxuICogbGlmZWN5Y2xlIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IGFzIGEgd2hvbGUgcmF0aGVyIHRoYW4gdG8gYW55IG9uZSBmb3JtIC1cbiAqIHRoZSBkaWFsb2cgYmFja2Ryb3AgYW5kIEVzY2FwZSwgQ3RybCtTLCB0aGUgYnJvd3NlciBjbG9zZSBwcm9tcHQsIHRoZSBkcmF3ZXJcbiAqIGFuZCB0YWItc3dpdGNoIGNvbmZpcm1zLiBFeGFjdGx5IG9uZSBvd25lciByZWdpc3RlcnMgdGhhdCBsaWZlY3ljbGU7IHNlZVxuICogYF9yZWdpc3Rlck93bmVyTGlmZWN5Y2xlYC5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRnNGb3JtQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybVRhYnMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtOiBDb25maXJtQ29uZmlnIHwgYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpcm1EaWFsb2cgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtRHJhd2VyID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybUJyb3dzZXIgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG9ydGN1dHMgPSB0cnVlOyAvLyBDdHJsICsgc1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWFjdGl2YXRpb25HdWFyZCA9IHRydWU7XG5cbiAgcHJvdGVjdGVkIF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJvdGVjdGVkIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByb3RlY3RlZCBfZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJvdGVjdGVkIF9mb3JtID0gaW5qZWN0KEZzRm9ybSk7XG4gIHByb3RlY3RlZCBfcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcm90ZWN0ZWQgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8YW55Pj4oTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX2RyYXdlclJlZiA9IGluamVjdDxEcmF3ZXJSZWY8YW55Pj4oRHJhd2VyUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgX2RpYWxvZ0JhY2tkcm9wRXNjYXBlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGVDb25maWc6IFJvdXRlIHwgbnVsbDtcblxuICBAQ29udGVudENoaWxkcmVuKE1hdFRhYkdyb3VwLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHByaXZhdGUgX3RhYkdyb3VwczogUXVlcnlMaXN0PE1hdFRhYkdyb3VwPiA9IG5ldyBRdWVyeUxpc3QoKTtcblxuICBwcml2YXRlIF9idXR0b25zID0gbmV3IFF1ZXJ5TGlzdDxGc0J1dHRvbkRpcmVjdGl2ZT4oKTtcbiAgcHJpdmF0ZSBfYWN0aXZlU3VibWl0QnV0dG9uOiBGc0J1dHRvbkRpcmVjdGl2ZTtcbiAgcHJpdmF0ZSBfY29uZmlybVRhYkdyb3VwcyA9IG5ldyBXZWFrU2V0PE1hdFRhYkdyb3VwPigpO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGFic3RyYWN0IHN1Ym1pdHRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRydWUgd2hlbiBhbnl0aGluZyBpbiB0aGUgb3duZWQgc2V0IGhhcyBhIHN1Ym1pdCBoYW5kbGVyIC0gaS5lLiB0aGVyZSBpc1xuICAgKiBzb21ldGhpbmcgZm9yIGEgU2F2ZSBidXR0b24gdG8gZG8uIEJvdGggYSBmb3JtIGFuZCBhIGNvbnRhaW5lciBhbnN3ZXIgdGhpc1xuICAgKiBvdmVyIHRoZWlyIGxpbmtlZCBzZXQsIHNvIHdoaWNoZXZlciBvbmUgb3ducyBhIGZvb3RlciBjYW4gYmUgYXNrZWQgdGhlIHNhbWVcbiAgICogcXVlc3Rpb24gd2l0aG91dCBrbm93aW5nIHdoaWNoIGl0IGdvdC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBzdWJtaXRzOiBib29sZWFuO1xuXG4gIC8qKiBUcnVlIHdoZW4gYW55dGhpbmcgaW4gdGhlIG93bmVkIHNldCBoYXMgdW5zYXZlZCBjaGFuZ2VzLiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZGlydHlMaW5rZWQ6IGJvb2xlYW47XG5cbiAgLyoqIEV2ZXJ5IGZvcm0gaW4gdGhlIG93bmVkIHNldCwgYXQgYW55IGRlcHRoLiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgbGlua2VkRm9ybXM6IEZzRm9ybURpcmVjdGl2ZVtdO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgb3duZWQgc2V0J3MgZGlydHkgc3RhdGUgbWF5IGhhdmUgbW92ZWQuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBkaXJ0eUNoYW5nZSQ6IE9ic2VydmFibGU8dm9pZD47XG5cbiAgLyoqIEVtaXRzIG9uY2UgYSBzdWJtaXQgb3ZlciB0aGUgb3duZWQgc2V0IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiAqL1xuICBwdWJsaWMgYWJzdHJhY3Qgc3VibWl0dGVkJDogT2JzZXJ2YWJsZTxTdWJtaXR0ZWRFdmVudD47XG5cbiAgLyoqIFRyYWNrcyB0aGUgb3duZWQgc2V0J3Mgc3VibWl0IGxpZmVjeWNsZSwgc28gdGhlIGRyYXdlciBjYW4gd2FpdCBvbmUgb3V0LiAqL1xuICBwdWJsaWMgYWJzdHJhY3Qgc3RhdHVzJDogT2JzZXJ2YWJsZTxGb3JtU3RhdHVzPjtcblxuICAvKipcbiAgICogVGhlIGRpYWxvZyB0aGlzIG93bmVyIGxpdmVzIGluLCBvciBudWxsIG91dHNpZGUgb25lLiBVc2VkIHRvIGtlZXAgYSBmb3JtIHNldFxuICAgKiBmcm9tIHNwYW5uaW5nIGEgZGlhbG9nIGJvdW5kYXJ5IC0gc2VlIGB3aXRoaW5TYW1lRGlhbG9nYC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGlhbG9nUmVmKCk6IE1hdERpYWxvZ1JlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZGlhbG9nUmVmO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZ2lzdGVyT3duZXJMaWZlY3ljbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJPd25lckNvbnRlbnRMaWZlY3ljbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzdHJveSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3kkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2NsZWFudXBDYW5EZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBidXR0b25zKCk6IFF1ZXJ5TGlzdDxGc0J1dHRvbkRpcmVjdGl2ZT4ge1xuICAgIHJldHVybiB0aGlzLl9idXR0b25zO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmVTdWJtaXRCdXR0b24oKTogRnNCdXR0b25EaXJlY3RpdmUge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVTdWJtaXRCdXR0b247XG4gIH1cblxuICBwdWJsaWMgc2V0IGFjdGl2ZVN1Ym1pdEJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKSB7XG4gICAgdGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID0gYnV0dG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJyaW5nIGEgdGFiIGdyb3VwIGludG8gdGhpcyBvd25lcidzIHVuc2F2ZWQtY2hhbmdlcyBjb25maXJtLlxuICAgKlxuICAgKiBgX3RhYkdyb3Vwc2Agb25seSByZWFjaGVzIGdyb3VwcyBpbiB0aGlzIG93bmVyJ3MgcHJvamVjdGVkIGNvbnRlbnQsIHNvIGEgZ3JvdXBcbiAgICogZGVjbGFyZWQgaW5zaWRlIGEgY2hpbGQgY29tcG9uZW50J3Mgb3duIHRlbXBsYXRlIGhhcyB0byBhbm5vdW5jZSBpdHNlbGYuXG4gICAqIGBmc0Zvcm1Db25maXJtVGFic2AgY2FsbHMgdGhpcyAtIGNvbnN1bWVycyBuZXZlciBjYWxsIGl0IGRpcmVjdGx5LlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyVGFiR3JvdXAodGFiR3JvdXA6IE1hdFRhYkdyb3VwKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtVGFiR3JvdXAodGFiR3JvdXApO1xuICB9XG5cbiAgcHVibGljIGFkZEJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgdGhpcy5fYnV0dG9uc1xuICAgICAgLnJlc2V0KFxuICAgICAgICBbXG4gICAgICAgICAgLi4udGhpcy5fYnV0dG9ucy50b0FycmF5KCksXG4gICAgICAgICAgYnV0dG9uLFxuICAgICAgICBdKTtcblxuICAgIC8vIFF1ZXJ5TGlzdC5yZXNldCgpIGRvZXMgbm90IGVtaXQgYGNoYW5nZXNgOyBub3RpZnkgc28gc3Vic2NyaWJlcnMgKGUuZy4gdGhlXG4gICAgLy8gZm9ybSdzIGRpcnR5LXN1Ym1pdC1idXR0b24gdHJhY2tpbmcpIHJlYWN0IHRvIGJ1dHRvbnMgYmVpbmcgcmVnaXN0ZXJlZC5cbiAgICB0aGlzLl9idXR0b25zLm5vdGlmeU9uQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUJ1dHRvbihidXR0b246IEZzQnV0dG9uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYodGhpcy5fYWN0aXZlU3VibWl0QnV0dG9uID09PSBidXR0b24pIHtcbiAgICAgIHRoaXMuX2FjdGl2ZVN1Ym1pdEJ1dHRvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fYnV0dG9ucy5yZXNldChcbiAgICAgIFtcbiAgICAgICAgLi4udGhpcy5fYnV0dG9ucy50b0FycmF5KClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAoYnV0dG9uICE9PSBpdGVtKSksXG4gICAgICBdKTtcblxuICAgIHRoaXMuX2J1dHRvbnMubm90aWZ5T25DaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogRXZlcnl0aGluZyBoZXJlIGFjdHMgb24gdGhlIGZvcm0gc2V0IGFzIGEgd2hvbGUsIHNvIGV4YWN0bHkgb25lIHRoaW5nIG1heVxuICAgKiByZWdpc3RlciBpdC4gQSBmb3JtIGxpbmtlZCBpbnRvIGEgcGFyZW50IGRlZmVycyB0byB0aGF0IHBhcmVudDsgZXZlcnkgZm9ybVxuICAgKiBpbnNpZGUgYSBjb250YWluZXIgZGVmZXJzIHRvIHRoZSBjb250YWluZXIuIFJlZ2lzdGVyaW5nIHR3aWNlIHdvdWxkIHB1dCB0d29cbiAgICogY29uZmlybXMgb24gdGhlIHNhbWUgYmFja2Ryb3AgY2xpY2sgYW5kIHR3byBoYW5kbGVycyBvbiB0aGUgc2FtZSBDdHJsK1MuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3JlZ2lzdGVyT3duZXJMaWZlY3ljbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVhY3RpdmF0aW9uR3VhcmQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyQ2FuRGVhY3RpdmF0ZUd1YXJkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtRGlhbG9nQmFja2Ryb3BFc2NhcGUoKTtcbiAgICB0aGlzLl9saXN0ZW5Ib3RLZXlzKCk7XG4gICAgdGhpcy5fbGlzdGVuV2luZG93Q2xvc2UoKTtcbiAgfVxuXG4gIC8qKiBUaGUgaGFsZiBvZiB0aGUgc2FtZSBvd25lcnNoaXAgdGhhdCBuZWVkcyBwcm9qZWN0ZWQgY29udGVudCByZXNvbHZlZC4gKi9cbiAgcHJvdGVjdGVkIF9yZWdpc3Rlck93bmVyQ29udGVudExpZmVjeWNsZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJzKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtRHJhd2VyQ2xvc2UoKTtcbiAgICB0aGlzLl9yZWdpc3RlckRyYXdlckNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZWxlbWVudCBpcyBpbnNpZGUgd2hhdCB0aGlzIG93bmVyIGNvdmVycy4gT3ZlcnJpZGRlbiBieSB0aGVcbiAgICogY29udGFpbmVyLCB3aG9zZSBvd24gZWxlbWVudCBpcyBhIHBvb3IgcHJveHk6IGl0IG1heSBiZSBhbiBgPG5nLWNvbnRhaW5lcj5gLFxuICAgKiB3aGljaCBpcyBhIGNvbW1lbnQgbm9kZSBhbmQgY29udGFpbnMgbm90aGluZy5cbiAgICovXG4gIHByb3RlY3RlZCBfY29udGFpbnNFbGVtZW50KGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDb250YWlucyh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGVsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfbm9kZUNvbnRhaW5zKHJvb3Q6IE5vZGUsIGVsOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb290IHx8ICFlbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChlbCA9PT0gcm9vdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsLnBhcmVudEVsZW1lbnQgPyB0aGlzLl9ub2RlQ29udGFpbnMocm9vdCwgZWwucGFyZW50RWxlbWVudCkgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZm9ybUNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpcm0gJiYgdGhpcy5jb25maXJtRGlhbG9nKSB7XG4gICAgICB0aGlzLnRyaWdnZXJDb25maXJtKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKChyZXN1bHQpID0+IGNvbmZpcm1SZXN1bHRDb250aW51ZShyZXN1bHQpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gQ29uZmlybVJlc3VsdC5Ob0NoYW5nZXMgfHwgcmVzdWx0ID09PSBDb25maXJtUmVzdWx0LkRpc2NhcmRcbiAgICAgICAgICAgICAgPyBvZihudWxsKVxuICAgICAgICAgICAgICA6IHRoaXMuc3VibWl0dGVkJDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogU3VibWl0dGVkRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UocmVzdWx0Py5yZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93Q2xvc2UoKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ2JlZm9yZXVubG9hZCcpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb25maXJtICYmIHRoaXMuY29uZmlybUJyb3dzZXIgJiYgdGhpcy5kaXJ0eUxpbmtlZCkge1xuICAgICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRGlhbG9nKGVsOiBOb2RlLCBkaWFsb2c6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGVDb250YWlucyhkaWFsb2csIGVsIGFzIEVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuSG90S2V5cygpOiB2b2lkIHtcbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fZGlhbG9nQmFja2Ryb3BFc2NhcGUgJiYgZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGNka092ZXJsYXlQYW5lID0gQXJyYXlcbiAgICAgICAgICAgICAgLmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy5jZGstb3ZlcmxheS1wYW5lJykpLnBvcCgpO1xuXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVEaWFsb2cgPSB0aGlzXG4gICAgICAgICAgICAgIC5fYWN0aXZlRGlhbG9nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2RpYWxvZ1JlZi5pZCksIGNka092ZXJsYXlQYW5lKTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtQ2xvc2UoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmNvZGUgPT09ICdLZXlTJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvcnRjdXRzKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jb250YWluc0VsZW1lbnQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclN1Ym1pdCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybURpYWxvZ0JhY2tkcm9wRXNjYXBlKCk6IHZvaWQge1xuICAgIGlmKHRoaXMuX2RpYWxvZ1JlZikge1xuICAgICAgdGhpcy5fZGlhbG9nQmFja2Ryb3BFc2NhcGUgPSAhdGhpcy5fZGlhbG9nUmVmPy5kaXNhYmxlQ2xvc2U7XG5cbiAgICAgIGlmICh0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSkge1xuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuYmFja2Ryb3BDbGljaygpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1DbG9zZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJEcmF3ZXJDbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHJhd2VyUmVmKSB7XG4gICAgICB0aGlzLl9kcmF3ZXJSZWYuY2xvc2VTdGFydCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3VibWl0dGluZykge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMkXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdHVzKSA9PiBzdGF0dXMgPT09IEZvcm1TdGF0dXMuU3VjY2VzcyB8fCBzdGF0dXMgPT09IEZvcm1TdGF0dXMuRXJyb3IpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gRm9ybVN0YXR1cy5TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckNvbmZpcm1EcmF3ZXJDbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHJhd2VyUmVmKSB7XG4gICAgICB0aGlzLl9kcmF3ZXJSZWYuY2xvc2VTdGFydCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaWlmKFxuICAgICAgICAgICAgICAoKSA9PiAhIXRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1EcmF3ZXIsXG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckNvbmZpcm0oKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgbWFwKChyZXN1bHQpID0+IGNvbmZpcm1SZXN1bHRDb250aW51ZShyZXN1bHQpKSxcbiAgICAgICAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBkZWZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybVRhYnMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb25maXJtVGFiR3JvdXBzKHRoaXMuX3RhYkdyb3Vwcy50b0FycmF5KCkpO1xuICAgIHRoaXMuX3RhYkdyb3Vwcy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cHModGhpcy5fdGFiR3JvdXBzLnRvQXJyYXkoKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybVRhYkdyb3Vwcyh0YWJHcm91cHM6IE1hdFRhYkdyb3VwW10pOiB2b2lkIHtcbiAgICB0YWJHcm91cHMuZm9yRWFjaCgodGFiR3JvdXA6IE1hdFRhYkdyb3VwKSA9PiB7XG4gICAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1UYWJHcm91cCh0YWJHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckNvbmZpcm1UYWJHcm91cCh0YWJHcm91cDogTWF0VGFiR3JvdXApOiB2b2lkIHtcbiAgICAvLyBgX3RhYkdyb3Vwcy5jaGFuZ2VzYCByZS1lbWl0cyB0aGUgd2hvbGUgbGlzdCwgbm90IGp1c3Qgd2hhdCBhcnJpdmVkLCBhbmQgaXRcbiAgICAvLyBlbWl0cyBldmVyeSB0aW1lIGEgbGF6eSB0YWIgYm9keSBtb3VudHMgYSBuZXN0ZWQgZ3JvdXAuIEdyb3VwcyBhbHJlYWR5XG4gICAgLy8gd2lyZWQgdGhlcmVmb3JlIGNvbWUgYmFjayBhcm91bmQgLSBzbyB3aXRob3V0IHRoaXMgdGhlIG91dGVyIGdyb3VwXG4gICAgLy8gYWNjdW11bGF0ZXMgb25lIHN1YnNjcmlwdGlvbiBwZXIgZW1pc3Npb24sIGFuZCBhIHNpbmdsZSBjbGljayBvbiBpdCBvcGVuc1xuICAgIC8vIHRoYXQgbWFueSBzdGFja2VkIGNvbmZpcm0gZGlhbG9ncy5cbiAgICBpZiAodGhpcy5fY29uZmlybVRhYkdyb3Vwcy5oYXModGFiR3JvdXApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlybVRhYkdyb3Vwcy5hZGQodGFiR3JvdXApO1xuXG4gICAgY29uc3QgY29uZmlybVRhYkdyb3VwID0gdGFiR3JvdXAgYXMgQ29uZmlybVRhYkdyb3VwO1xuICAgIGlmICghY29uZmlybVRhYkdyb3VwLl9vcmlnaW5hbEhhbmRsZUNsaWNrKSB7XG4gICAgICBjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2sgPSB0YWJHcm91cC5faGFuZGxlQ2xpY2s7XG4gICAgICBjb25maXJtVGFiR3JvdXAuX2hhbmRsQ2xpY2skID0gbmV3IFN1YmplY3Q8e1xuICAgICAgICAgdGFiOiBNYXRUYWI7XG4gICAgICAgICB0YWJIZWFkZXI6IE1hdFRhYkhlYWRlcjtcbiAgICAgICAgIGlkeDogbnVtYmVyXG4gICAgICAgIH0+KCk7XG5cbiAgICAgIGNvbmZpcm1UYWJHcm91cC5faGFuZGxlQ2xpY2sgPSAodGFiOiBNYXRUYWIsIHRhYkhlYWRlcjogTWF0VGFiSGVhZGVyLCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJC5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJC5uZXh0KHsgdGFiLCB0YWJIZWFkZXIsIGlkeCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25maXJtVGFiR3JvdXAuX29yaWdpbmFsSGFuZGxlQ2xpY2sodGFiLCB0YWJIZWFkZXIsIGlkeCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uZmlybVRhYkdyb3VwLl9oYW5kbENsaWNrJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5zdWJtaXR0aW5nKSxcbiAgICAgICAgc3dpdGNoTWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmKHRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1UYWJzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQ29uZmlybSgpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29uZmlybVJlc3VsdENvbnRpbnVlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybVRhYkdyb3VwLnNlbGVjdGVkSW5kZXggPSBldmVudC5pZHg7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uZmlybVRhYkdyb3VwLl9vcmlnaW5hbEhhbmRsZUNsaWNrKGV2ZW50LnRhYiwgZXZlbnQudGFiSGVhZGVyLCBldmVudC5pZHgpO1xuXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDYW5EZWFjdGl2YXRlR3VhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcgPSBnZXRBY3RpdmVSb3V0ZSh0aGlzLl9yb3V0ZSk/LnJvdXRlQ29uZmlnO1xuXG4gICAgaWYgKCF0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Zvcm0ucmVnaXN0ZXJGb3JtRGlyZWN0aXZlKHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNvbXBvbmVudCwgdGhpcyk7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSkpIHtcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5pbmRleE9mKEZvcm1EZWFjdGl2YXRlR3VhcmQpID09PSAtMSkge1xuICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5wdXNoKEZvcm1EZWFjdGl2YXRlR3VhcmQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFudXBDYW5EZWFjdGl2YXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBndWFyZEluZGV4ID0gdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5pbmRleE9mKEZvcm1EZWFjdGl2YXRlR3VhcmQpO1xuICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUuc3BsaWNlKGd1YXJkSW5kZXgsIDEpO1xuXG4gICAgdGhpcy5fZm9ybS5yZW1vdmVGb3JtRGlyZWN0aXZlKHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNvbXBvbmVudCk7XG4gIH1cblxuXG4gIHB1YmxpYyBhYnN0cmFjdCB0cmlnZ2VyU3VibWl0KCk6IHZvaWQ7XG4gIHB1YmxpYyBhYnN0cmFjdCB0cmlnZ2VyQ29uZmlybSgpOiBPYnNlcnZhYmxlPENvbmZpcm1SZXN1bHQ+O1xuICBwdWJsaWMgYWJzdHJhY3QgcmVzZXQoKTogdm9pZDtcbiAgcHVibGljIGFic3RyYWN0IHN1Ym1pdCQoZXZlbnQ/OiBTdWJtaXRFdmVudCk6IE9ic2VydmFibGU8U3VibWl0dGVkRXZlbnQ+O1xufVxuIl19
@@ -1589,11 +1589,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1589
1589
  }] } });
1590
1590
 
1591
1591
  class FsFormDialogActionsComponent {
1592
- /** Leave unset inside an `fsFormContainer` to follow whether it has anything to save. */
1592
+ /** Leave unset to follow whether the enclosing form or container has anything to save. */
1593
1593
  save;
1594
1594
  create = false;
1595
1595
  close = false;
1596
- /** Leave unset inside an `fsFormContainer` to fill in whenever Save does not apply. */
1596
+ /** Leave unset to fill in whenever Save does not apply. */
1597
1597
  done;
1598
1598
  closeData = null;
1599
1599
  name;
@@ -1607,20 +1607,44 @@ class FsFormDialogActionsComponent {
1607
1607
  _form = this._ownDialogOnly(inject(FsFormDirective, { optional: true }));
1608
1608
  _cdRef = inject(ChangeDetectorRef);
1609
1609
  /**
1610
- * Inside a container these default to whether anything mounted can actually
1611
- * save, so a footer left as a bare `<fs-form-dialog-actions>` swaps Save for
1612
- * Done as tabs change without the dialog listing which tabs are savable. An
1613
- * explicit binding always wins, and outside a container Save stays on as it
1614
- * always did.
1610
+ * Whatever owns the form set these actions act on, or null when nothing does.
1611
+ * A container answers for every form mounted under it; failing that the
1612
+ * enclosing form's root answers for itself and anything linked into it.
1613
+ */
1614
+ get _owner() {
1615
+ return this._container || this._form?.rootForm || null;
1616
+ }
1617
+ /**
1618
+ * Save and Done are one decision - whether there is anything to save - rather
1619
+ * than two independent switches, so a bare `<fs-form-dialog-actions>` resolves
1620
+ * it off the form set it sits in and needs no bindings at all. A footer in a
1621
+ * container swaps Save for Done as tabs change without the dialog listing
1622
+ * which tabs are savable, and a dialog with no form at all - a read-only one
1623
+ * of labelled facts - gets Done, because a submit button there has nothing to
1624
+ * submit.
1625
+ *
1626
+ * An explicit binding always wins. `[done]="true"` on its own means Done and
1627
+ * only Done: turning Done on while leaving a Save beside it is never what the
1628
+ * caller meant, and the two-flag version of this let that happen silently.
1615
1629
  */
1616
1630
  get showSave() {
1617
- return this.save ?? (this._container ? this._container.submits : true);
1631
+ if (this.save !== undefined) {
1632
+ return this.save;
1633
+ }
1634
+ return this.done === true ? false : this._owner?.submits ?? false;
1618
1635
  }
1636
+ /**
1637
+ * Done stands in for a Save that does not apply, so it fills in only where a
1638
+ * Save would otherwise have gone. `[save]="false"` is the caller saying they
1639
+ * are footing the dialog themselves - usually with buttons projected into the
1640
+ * content slot, sometimes including their own submit - and dropping an
1641
+ * unasked-for Done beside those would be this component overruling them.
1642
+ */
1619
1643
  get showDone() {
1620
- return this.done ?? (this._container ? !this._container.submits && !this.create : false);
1644
+ return this.done ?? (this.save === undefined && !this.showSave && !this.create);
1621
1645
  }
1622
1646
  ngOnInit() {
1623
- const owner = this._container || this._form?.rootForm;
1647
+ const owner = this._owner;
1624
1648
  if (owner) {
1625
1649
  // Track the whole set, not one form's own controls: with a form scoped to a
1626
1650
  // tab's fields, the actions sit outside it in the dialog footer and that