@lowcodeunit/applications-flow-common 1.34.60-social-ui-bug-fixes → 1.34.61-lets-get-social-ish

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/esm2020/lcu.api.mjs +5 -4
  2. package/esm2020/lib/applications-flow.module.mjs +42 -26
  3. package/esm2020/lib/controls/devops-source-control-form/devops-source-control-form.component.mjs +3 -3
  4. package/esm2020/lib/controls/dfs-modifiers-form/dfs-modifiers-form.component.mjs +277 -0
  5. package/esm2020/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.mjs +10 -3
  6. package/esm2020/lib/dialogs/custom-domain-dialog/custom-domain-dialog.component.mjs +3 -3
  7. package/esm2020/lib/dialogs/dfs-modifiers-dialog/dfs-modifiers-dialog.component.mjs +109 -0
  8. package/esm2020/lib/dialogs/feed-header-dialog/feed-header-dialog.component.mjs +280 -0
  9. package/esm2020/lib/dialogs/source-control-dialog/source-control-dialog.component.mjs +10 -3
  10. package/esm2020/lib/elements/feed-card-sm/feed-card-sm.component.mjs +2 -2
  11. package/esm2020/lib/elements/feed-header/feed-header.component.mjs +131 -0
  12. package/esm2020/lib/elements/main-feed-card/main-feed-card.component.mjs +2 -2
  13. package/esm2020/lib/elements/projects/controls/git-auth/git-auth.component.mjs +3 -2
  14. package/esm2020/lib/elements/projects/controls/tabs/dfs-modifiers/dfs-modifiers.component.mjs +3 -3
  15. package/esm2020/lib/elements/projects/controls/tabs/domains/domains.component.mjs +2 -2
  16. package/esm2020/lib/elements/skeleton-feed-card/skeleton-feed-card.component.mjs +2 -2
  17. package/esm2020/lib/models/user-feed.model.mjs +3 -1
  18. package/esm2020/lib/services/applications-flow.service.mjs +16 -6
  19. package/esm2020/lib/services/eac.service.mjs +28 -5
  20. package/esm2020/lib/services/project.service.mjs +50 -3
  21. package/esm2020/lib/state/applications-flow.state.mjs +1 -1
  22. package/fesm2015/lowcodeunit-applications-flow-common.mjs +2405 -1698
  23. package/fesm2015/lowcodeunit-applications-flow-common.mjs.map +1 -1
  24. package/fesm2020/lowcodeunit-applications-flow-common.mjs +2415 -1729
  25. package/fesm2020/lowcodeunit-applications-flow-common.mjs.map +1 -1
  26. package/lcu.api.d.ts +4 -3
  27. package/lib/applications-flow.module.d.ts +21 -18
  28. package/lib/controls/dfs-modifiers-form/dfs-modifiers-form.component.d.ts +62 -0
  29. package/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.d.ts +2 -0
  30. package/lib/dialogs/dfs-modifiers-dialog/dfs-modifiers-dialog.component.d.ts +41 -0
  31. package/lib/dialogs/feed-header-dialog/feed-header-dialog.component.d.ts +71 -0
  32. package/lib/dialogs/source-control-dialog/source-control-dialog.component.d.ts +1 -0
  33. package/lib/elements/{gh-control/gh-control.component.d.ts → feed-header/feed-header.component.d.ts} +9 -7
  34. package/lib/models/user-feed.model.d.ts +17 -0
  35. package/lib/services/applications-flow.service.d.ts +4 -1
  36. package/lib/services/eac.service.d.ts +7 -4
  37. package/lib/services/project.service.d.ts +5 -3
  38. package/lib/state/applications-flow.state.d.ts +2 -1
  39. package/package.json +1 -1
  40. package/esm2020/lib/elements/flow-tool/flow-tool.component.mjs +0 -75
  41. package/esm2020/lib/elements/gh-control/gh-control.component.mjs +0 -107
  42. package/lib/elements/flow-tool/flow-tool.component.d.ts +0 -28
@@ -0,0 +1,280 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../services/applications-flow.service";
6
+ import * as i2 from "../../services/eac.service";
7
+ import * as i3 from "@angular/forms";
8
+ import * as i4 from "@angular/material/dialog";
9
+ import * as i5 from "@angular/material/button";
10
+ import * as i6 from "@angular/material/icon";
11
+ import * as i7 from "@angular/material/form-field";
12
+ import * as i8 from "@angular/material/select";
13
+ import * as i9 from "@angular/material/core";
14
+ import * as i10 from "@kolkov/angular-editor";
15
+ import * as i11 from "@angular/flex-layout/flex";
16
+ import * as i12 from "@angular/common";
17
+ import * as i13 from "@angular/material/input";
18
+ export class FeedHeaderDialogComponent {
19
+ constructor(appsFlowSvc, eacSvc, formBldr, dialogRef, data) {
20
+ this.appsFlowSvc = appsFlowSvc;
21
+ this.eacSvc = eacSvc;
22
+ this.formBldr = formBldr;
23
+ this.dialogRef = dialogRef;
24
+ this.data = data;
25
+ this.EditorConfig = {
26
+ editable: true,
27
+ spellcheck: true,
28
+ height: '250px',
29
+ minHeight: '0',
30
+ maxHeight: 'auto',
31
+ width: 'auto',
32
+ minWidth: '0',
33
+ translate: 'yes',
34
+ enableToolbar: true,
35
+ showToolbar: true,
36
+ placeholder: 'Enter text here...',
37
+ defaultParagraphSeparator: '',
38
+ defaultFontName: '',
39
+ defaultFontSize: '',
40
+ fonts: [
41
+ { class: 'arial', name: 'Arial' },
42
+ { class: 'times-new-roman', name: 'Times New Roman' },
43
+ { class: 'calibri', name: 'Calibri' },
44
+ { class: 'comic-sans-ms', name: 'Comic Sans MS' }
45
+ ],
46
+ customClasses: [
47
+ {
48
+ name: 'quote',
49
+ class: 'quote',
50
+ },
51
+ {
52
+ name: 'redText',
53
+ class: 'redText'
54
+ },
55
+ {
56
+ name: 'titleText',
57
+ class: 'titleText',
58
+ tag: 'h1',
59
+ },
60
+ ],
61
+ sanitize: true,
62
+ toolbarPosition: 'top',
63
+ toolbarHiddenButtons: [
64
+ ['subscript', 'superscript'],
65
+ ['fontSize']
66
+ ]
67
+ };
68
+ this.SlicesCount = 5;
69
+ this.Slices = {
70
+ Sources: this.SlicesCount,
71
+ };
72
+ if (this.SourceControlLookups.length === 1) {
73
+ this.SourceControl = this.Environment?.Sources[this.SourceControlLookups[0]];
74
+ }
75
+ }
76
+ get ActionIconControl() {
77
+ return this.FeedHeaderFormGroup?.controls.actionIcon;
78
+ }
79
+ get ActionLinkControl() {
80
+ return this.FeedHeaderFormGroup?.controls.actionLink;
81
+ }
82
+ get ActionTextControl() {
83
+ return this.FeedHeaderFormGroup?.controls.actionText;
84
+ }
85
+ get EditorControl() {
86
+ return this.FeedHeaderFormGroup?.controls.editor;
87
+ }
88
+ get Environment() {
89
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
90
+ }
91
+ get TargetBranchFormControl() {
92
+ return this.FeedHeaderFormGroup.controls.targetBranch;
93
+ }
94
+ get OrganizationFormControl() {
95
+ return this.FeedHeaderFormGroup.controls.organization;
96
+ }
97
+ get SourceBranchFormControl() {
98
+ return this.FeedHeaderFormGroup.controls.sourceBranch;
99
+ }
100
+ get RepositoryFormControl() {
101
+ return this.FeedHeaderFormGroup.controls.repository;
102
+ }
103
+ get SourceControlFormControl() {
104
+ return this.FeedHeaderFormGroup.controls.sourceControl;
105
+ }
106
+ get SourceControlLookups() {
107
+ return this.State.FeedSourceControlLookups
108
+ ? this.State.FeedSourceControlLookups
109
+ : Object.keys(this.SourceControls || {});
110
+ }
111
+ get SourceControls() {
112
+ return this.Environment?.Sources || {};
113
+ }
114
+ get SubtitleFormControl() {
115
+ return this.FeedHeaderFormGroup.controls.subtitle;
116
+ }
117
+ get State() {
118
+ return this.eacSvc.State;
119
+ }
120
+ get TitleFormControl() {
121
+ return this.FeedHeaderFormGroup?.controls.title;
122
+ }
123
+ ngOnInit() {
124
+ this.setupFeedHeaderForm();
125
+ }
126
+ CloseDialog() {
127
+ this.dialogRef.close();
128
+ }
129
+ HandleAction() {
130
+ if (this.ActionLinkControl.value.startsWith('http')) {
131
+ window.open(this.ActionLinkControl.value, '_blank');
132
+ }
133
+ else {
134
+ window.location.href = this.ActionLinkControl.value;
135
+ }
136
+ }
137
+ PullRequestSourceControlChanged(event) {
138
+ this.SourceControl = this.SourceControls[this.SourceControlFormControl.value];
139
+ this.listBranches();
140
+ }
141
+ FeatureBranchSourceControlChanged(event) {
142
+ this.SourceControl = this.SourceControls[this.SourceControlFormControl.value];
143
+ this.listOrganizations();
144
+ }
145
+ IssueSourceControlChanged(event) {
146
+ this.SourceControl = this.SourceControls[this.SourceControlFormControl.value];
147
+ }
148
+ Submit() {
149
+ let returnObject = {
150
+ ActionIcon: this.ActionIconControl ? this.ActionIconControl.value : null,
151
+ ActionLink: this.ActionLinkControl ? this.ActionLinkControl.value : null,
152
+ ActionText: this.ActionTextControl ? this.ActionTextControl.value : null,
153
+ Avatar: null,
154
+ Content: this.EditorControl ? this.EditorControl.value : null,
155
+ ExpiresAt: null,
156
+ Organization: this.OrganizationFormControl ? this.OrganizationFormControl.value : null,
157
+ Repositroy: this.RepositoryFormControl ? this.RepositoryFormControl.value : null,
158
+ SourceBranch: this.SourceBranchFormControl ? this.SourceBranchFormControl.value : null,
159
+ SourceControlLookup: this.SourceControlFormControl ? this.SourceBranchFormControl.value : null,
160
+ Subtitle: this.SubtitleFormControl ? this.SubtitleFormControl.value : null,
161
+ TargetBranch: this.TargetBranchFormControl ? this.TargetBranchFormControl.value : null,
162
+ Type: this.data.type,
163
+ Title: this.TitleFormControl ? this.TitleFormControl.value : null,
164
+ };
165
+ console.log("Control: ", returnObject);
166
+ let status = this.eacSvc.SubmitFeedEntry(returnObject);
167
+ console.log("feed entry status: ", status);
168
+ // console.log("Editor: ", this.EditorControl.value )
169
+ }
170
+ OrganizationChanged(event) {
171
+ this.RepositoryFormControl.reset();
172
+ this.listRepositories();
173
+ }
174
+ RepositoryChanged(event) {
175
+ this.listBranches();
176
+ }
177
+ //HELPERS
178
+ listBranches() {
179
+ // this.Loading = true;
180
+ this.appsFlowSvc
181
+ .ListBranches(this.SourceControl?.Organization, this.SourceControl?.Repository)
182
+ .subscribe((response) => {
183
+ this.BranchOptions = response.Model;
184
+ });
185
+ }
186
+ listOrganizations() {
187
+ // this.Loading = true;
188
+ this.appsFlowSvc
189
+ .ListOrganizations()
190
+ .subscribe((response) => {
191
+ this.OrganizationOptions = response.Model;
192
+ console.log("Organization Options: ", this.OrganizationOptions);
193
+ // this.Loading = false;
194
+ if (this.SourceControl?.Organization) {
195
+ setTimeout(() => {
196
+ this.OrganizationFormControl.setValue(this.SourceControl.Organization);
197
+ this.listRepositories(this.SourceControl?.Repository);
198
+ }, 0);
199
+ }
200
+ });
201
+ }
202
+ listRepositories(activeRepo = null) {
203
+ // this.Loading = true;
204
+ this.appsFlowSvc
205
+ .ListRepositories(this.OrganizationFormControl.value)
206
+ .subscribe((response) => {
207
+ this.RepositoryOptions = response.Model;
208
+ // this.Loading = false;
209
+ if (activeRepo) {
210
+ setTimeout(() => {
211
+ this.RepositoryFormControl.setValue(activeRepo);
212
+ this.listBranches();
213
+ }, 0);
214
+ }
215
+ });
216
+ }
217
+ setupFeedHeaderForm() {
218
+ this.FeedHeaderFormGroup = this.formBldr.group({});
219
+ switch (this.data.type) {
220
+ case "Announcement":
221
+ this.setupAnnouncementForm();
222
+ break;
223
+ case "PullRequest":
224
+ this.setupPRForm();
225
+ break;
226
+ case "OpenIssue":
227
+ this.setupIssueForm();
228
+ break;
229
+ case "CreateBranch":
230
+ this.setupFeatureBranchForm();
231
+ break;
232
+ default:
233
+ //
234
+ break;
235
+ }
236
+ }
237
+ setupAnnouncementForm() {
238
+ this.setupBasicForm();
239
+ this.FeedHeaderFormGroup.addControl('subtitle', this.formBldr.control(''));
240
+ this.FeedHeaderFormGroup.addControl('actionText', this.formBldr.control(''));
241
+ this.FeedHeaderFormGroup.addControl('actionLink', this.formBldr.control(''));
242
+ this.FeedHeaderFormGroup.addControl('actionIcon', this.formBldr.control(''));
243
+ }
244
+ setupPRForm() {
245
+ this.listBranches();
246
+ this.setupIssueForm();
247
+ this.setupBranchesForm();
248
+ }
249
+ setupBasicForm() {
250
+ this.FeedHeaderFormGroup.addControl('title', this.formBldr.control('', [Validators.required]));
251
+ this.FeedHeaderFormGroup.addControl('editor', this.formBldr.control(''));
252
+ }
253
+ setupIssueForm() {
254
+ this.setupBasicForm();
255
+ this.setupSourceControlForm();
256
+ }
257
+ setupFeatureBranchForm() {
258
+ this.setupSourceControlForm();
259
+ this.FeedHeaderFormGroup.addControl('organization', this.formBldr.control(''));
260
+ this.FeedHeaderFormGroup.addControl('repository', this.formBldr.control(''));
261
+ this.setupBranchesForm();
262
+ }
263
+ setupSourceControlForm() {
264
+ this.FeedHeaderFormGroup.addControl('sourceControl', this.formBldr.control(''));
265
+ }
266
+ setupBranchesForm() {
267
+ this.FeedHeaderFormGroup.addControl('targetBranch', this.formBldr.control(''));
268
+ this.FeedHeaderFormGroup.addControl('sourceBranch', this.formBldr.control(''));
269
+ }
270
+ }
271
+ FeedHeaderDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderDialogComponent, deps: [{ token: i1.ApplicationsFlowService }, { token: i2.EaCService }, { token: i3.FormBuilder }, { token: i4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
272
+ FeedHeaderDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: FeedHeaderDialogComponent, selector: "lcu-feed-header-dialog", ngImport: i0, template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>{{data.dialogTitle}}</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <form [formGroup]=\"FeedHeaderFormGroup\" >\n\n <!-- ISSUE FORM -->\n <ng-container *ngIf=\"data.type === 'OpenIssue' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"IssueSourceControlChanged($event)\"\n\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n\n <angular-editor \n id=\"issue-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n </ng-container>\n\n <!-- ANNOUNCEMENT FORM -->\n\n <ng-container *ngIf=\"data.type === 'Announcement' \">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Subtitle\"\n formControlName=\"subtitle\"\n />\n </mat-form-field>\n\n <angular-editor \n id=\"announcement-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Text\"\n formControlName=\"actionText\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Link\"\n formControlName=\"actionLink\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Icon\"\n formControlName=\"actionIcon\"\n />\n </mat-form-field>\n\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <button \n *ngIf=\"ActionTextControl?.value || ActionIconControl?.value\"\n mat-button color=\"primary\" \n (click)=\"HandleAction(ActionLinkControl?.value)\"\n >\n <mat-icon *ngIf=\"ActionIconControl?.value\">{{ ActionIconControl?.value }}</mat-icon>\n \n {{ ActionTextControl?.value }}\n </button>\n\n <button \n *ngIf=\"!ActionTextControl?.value && !ActionIconControl?.value\"\n mat-button color=\"primary\" \n >\n <mat-icon>cruelty_free</mat-icon>\n \n Example Button\n </button>\n </div>\n\n </ng-container>\n\n <!-- PR FORM -->\n\n <ng-container *ngIf=\"data.type === 'PullRequest' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"PullRequestSourceControlChanged($event)\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" *ngIf=\"BranchOptions?.length > 0\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Base</mat-label>\n <mat-select formControlName=\"targetBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n \n <mat-icon>arrow_back</mat-icon>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Compare</mat-label>\n <mat-select formControlName=\"sourceBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n\n <angular-editor \n id=\"pr-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n\n </ng-container>\n\n <!-- Feature Branch form -->\n\n <ng-container *ngIf=\"data.type === 'CreateBranch' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field >\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"FeatureBranchSourceControlChanged($event)\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\" >\n\n <mat-form-field *ngIf=\"OrganizationOptions?.length > 0\">\n\n <mat-select \n formControlName=\"organization\" \n placeholder=\"Organization\"\n (selectionChange)=\"OrganizationChanged($event)\" \n required\n >\n <ng-container *ngFor=\"let orgOpt of OrganizationOptions\">\n <mat-option [value]=\"orgOpt.Name\">\n {{ orgOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n\n\n </mat-form-field>\n\n <mat-form-field *ngIf=\"RepositoryOptions?.length > 0\">\n\n <mat-select formControlName=\"repository\" \n placeholder=\"Repository\" \n (selectionChange)=\"RepositoryChanged($event)\" \n required\n >\n <ng-container *ngFor=\"let repoOpt of RepositoryOptions\">\n <mat-option [value]=\"repoOpt.Name\">\n {{ repoOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select> \n </mat-form-field>\n\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\" *ngIf=\"BranchOptions?.length > 0\">\n\n <mat-form-field >\n <mat-label>Base Branch</mat-label>\n <mat-select formControlName=\"sourceBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field >\n <input\n matInput\n placeholder=\"Create New Branch\"\n formControlName=\"targetBranch\"\n required\n />\n </mat-form-field>\n </div>\n\n </ng-container>\n\n </form>\n \n \n\n <!-- <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error> -->\n</mat-dialog-content>\n\n<mat-dialog-actions\n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\"\n >\n Cancel\n </button>\n\n <!-- -->\n <button \n mat-raised-button \n color=\"primary\"\n fxFlex=\"25%\"\n class=\"submit\" \n (click)=\"Submit()\"\n [disabled]=\"\n !FeedHeaderFormGroup?.valid \n\"\n \n >\n Submit\n </button>\n</mat-dialog-actions>\n\n\n", styles: [""], components: [{ type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10.AngularEditorComponent, selector: "angular-editor", inputs: ["id", "config", "placeholder", "tabIndex"], outputs: ["html", "viewMode", "blur", "focus"] }], directives: [{ type: i11.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i7.MatLabel, selector: "mat-label" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i11.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }], pipes: { "slice": i12.SlicePipe } });
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedHeaderDialogComponent, decorators: [{
274
+ type: Component,
275
+ args: [{ selector: 'lcu-feed-header-dialog', template: "<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>{{data.dialogTitle}}</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n <form [formGroup]=\"FeedHeaderFormGroup\" >\n\n <!-- ISSUE FORM -->\n <ng-container *ngIf=\"data.type === 'OpenIssue' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"IssueSourceControlChanged($event)\"\n\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n\n <angular-editor \n id=\"issue-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n </ng-container>\n\n <!-- ANNOUNCEMENT FORM -->\n\n <ng-container *ngIf=\"data.type === 'Announcement' \">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Subtitle\"\n formControlName=\"subtitle\"\n />\n </mat-form-field>\n\n <angular-editor \n id=\"announcement-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Text\"\n formControlName=\"actionText\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Link\"\n formControlName=\"actionLink\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Action Icon\"\n formControlName=\"actionIcon\"\n />\n </mat-form-field>\n\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <button \n *ngIf=\"ActionTextControl?.value || ActionIconControl?.value\"\n mat-button color=\"primary\" \n (click)=\"HandleAction(ActionLinkControl?.value)\"\n >\n <mat-icon *ngIf=\"ActionIconControl?.value\">{{ ActionIconControl?.value }}</mat-icon>\n \n {{ ActionTextControl?.value }}\n </button>\n\n <button \n *ngIf=\"!ActionTextControl?.value && !ActionIconControl?.value\"\n mat-button color=\"primary\" \n >\n <mat-icon>cruelty_free</mat-icon>\n \n Example Button\n </button>\n </div>\n\n </ng-container>\n\n <!-- PR FORM -->\n\n <ng-container *ngIf=\"data.type === 'PullRequest' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"PullRequestSourceControlChanged($event)\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" *ngIf=\"BranchOptions?.length > 0\">\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Base</mat-label>\n <mat-select formControlName=\"targetBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n \n <mat-icon>arrow_back</mat-icon>\n\n <mat-form-field appearance=\"fill\">\n <mat-label>Compare</mat-label>\n <mat-select formControlName=\"sourceBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n placeholder=\"Title\"\n formControlName=\"title\"\n required\n />\n </mat-form-field>\n\n\n <angular-editor \n id=\"pr-editor\"\n formControlName=\"editor\" \n [config]=\"EditorConfig\"\n ></angular-editor>\n\n </ng-container>\n\n <!-- Feature Branch form -->\n\n <ng-container *ngIf=\"data.type === 'CreateBranch' \">\n\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n\n <mat-form-field >\n <mat-label>Source Control</mat-label>\n <mat-select \n formControlName=\"sourceControl\"\n (selectionChange)=\"FeatureBranchSourceControlChanged($event)\"\n >\n <ng-container *ngFor=\"let scLookup of SourceControlLookups | slice: 0:Slices.Sources\">\n <mat-option *ngIf=\"SourceControls[scLookup]; let sc\" [value]=\"scLookup\">\n {{sc.Name}}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\" >\n\n <mat-form-field *ngIf=\"OrganizationOptions?.length > 0\">\n\n <mat-select \n formControlName=\"organization\" \n placeholder=\"Organization\"\n (selectionChange)=\"OrganizationChanged($event)\" \n required\n >\n <ng-container *ngFor=\"let orgOpt of OrganizationOptions\">\n <mat-option [value]=\"orgOpt.Name\">\n {{ orgOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n\n\n\n </mat-form-field>\n\n <mat-form-field *ngIf=\"RepositoryOptions?.length > 0\">\n\n <mat-select formControlName=\"repository\" \n placeholder=\"Repository\" \n (selectionChange)=\"RepositoryChanged($event)\" \n required\n >\n <ng-container *ngFor=\"let repoOpt of RepositoryOptions\">\n <mat-option [value]=\"repoOpt.Name\">\n {{ repoOpt.Name }}\n </mat-option>\n </ng-container>\n </mat-select> \n </mat-form-field>\n\n </div>\n\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around center\" *ngIf=\"BranchOptions?.length > 0\">\n\n <mat-form-field >\n <mat-label>Base Branch</mat-label>\n <mat-select formControlName=\"sourceBranch\" required\n >\n <mat-option *ngFor=\"let branchOpt of BranchOptions\" [value]=\"branchOpt.Name\">\n {{branchOpt.Name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field >\n <input\n matInput\n placeholder=\"Create New Branch\"\n formControlName=\"targetBranch\"\n required\n />\n </mat-form-field>\n </div>\n\n </ng-container>\n\n </form>\n \n \n\n <!-- <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error> -->\n</mat-dialog-content>\n\n<mat-dialog-actions\n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\"\n >\n Cancel\n </button>\n\n <!-- -->\n <button \n mat-raised-button \n color=\"primary\"\n fxFlex=\"25%\"\n class=\"submit\" \n (click)=\"Submit()\"\n [disabled]=\"\n !FeedHeaderFormGroup?.valid \n\"\n \n >\n Submit\n </button>\n</mat-dialog-actions>\n\n\n", styles: [""] }]
276
+ }], ctorParameters: function () { return [{ type: i1.ApplicationsFlowService }, { type: i2.EaCService }, { type: i3.FormBuilder }, { type: i4.MatDialogRef }, { type: undefined, decorators: [{
277
+ type: Inject,
278
+ args: [MAT_DIALOG_DATA]
279
+ }] }]; } });
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1oZWFkZXItZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi9zcmMvbGliL2RpYWxvZ3MvZmVlZC1oZWFkZXItZGlhbG9nL2ZlZWQtaGVhZGVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9kaWFsb2dzL2ZlZWQtaGVhZGVyLWRpYWxvZy9mZWVkLWhlYWRlci1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUEyQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFzQnpFLE1BQU0sT0FBTyx5QkFBeUI7SUFzRnBDLFlBQXNCLFdBQW9DLEVBQzlDLE1BQWtCLEVBQ2xCLFFBQXFCLEVBQ3hCLFNBQWtELEVBQ3pCLElBQTBCO1FBSnRDLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUM5QyxXQUFNLEdBQU4sTUFBTSxDQUFZO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBeUM7UUFDekIsU0FBSSxHQUFKLElBQUksQ0FBc0I7UUFFMUQsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsU0FBUyxFQUFFLEdBQUc7WUFDZCxTQUFTLEVBQUUsTUFBTTtZQUNqQixLQUFLLEVBQUUsTUFBTTtZQUNiLFFBQVEsRUFBRSxHQUFHO1lBQ2IsU0FBUyxFQUFFLEtBQUs7WUFDaEIsYUFBYSxFQUFFLElBQUk7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Q0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQ2pDLFlBQVksRUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDbkIsRUFBRSxDQUNILENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBRTNCLENBQUM7SUFFUyxzQkFBc0I7UUFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FDakMsZUFBZSxFQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUNuQixFQUFFLENBQ0gsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUNqQyxjQUFjLEVBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQ25CLEVBQUUsQ0FDSCxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUNqQyxjQUFjLEVBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQ25CLEVBQUUsQ0FDSCxDQUNGLENBQUM7SUFDSixDQUFDOztzSEE5WlUseUJBQXlCLDBJQTBGMUIsZUFBZTswR0ExRmQseUJBQXlCLDhEQ3hCdEMsMjRVQTBUQTsyRkRsU2EseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3Qjs7MEJBK0YvQixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvckNvbmZpZyB9IGZyb20gJ0Brb2xrb3YvYW5ndWxhci1lZGl0b3InO1xuaW1wb3J0IHsgQmFzZU1vZGVsZWRSZXNwb25zZSB9IGZyb20gJ0BsY3UvY29tbW9uJztcbmltcG9ydCB7IEVhQ0Vudmlyb25tZW50QXNDb2RlLCBFYUNTb3VyY2VDb250cm9sIH0gZnJvbSAnQHNlbWFudGljanMvY29tbW9uJztcbmltcG9ydCB7IEZlZWRFbnRyeSB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLWZlZWQubW9kZWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25zRmxvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbnMtZmxvdy5zZXJ2aWNlJztcbmltcG9ydCB7IEVhQ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lYWMuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbnNGbG93U3RhdGUsIEdpdEh1YkJyYW5jaCwgR2l0SHViT3JnYW5pemF0aW9uLCBHaXRIdWJSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLi4vc3RhdGUvYXBwbGljYXRpb25zLWZsb3cuc3RhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRIZWFkZXJEaWFsb2dEYXRhIHtcbiAgLy8gYWN0aW9uOiBGZWVkSXRlbUFjdGlvbixcbiAgZGlhbG9nVGl0bGU6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nLFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsY3UtZmVlZC1oZWFkZXItZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlZWQtaGVhZGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZlZWQtaGVhZGVyLWRpYWxvZy5jb21wb25lbnQuc2NzcyddXG59KVxuXG5leHBvcnQgY2xhc3MgRmVlZEhlYWRlckRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIGdldCBBY3Rpb25JY29uQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXA/LmNvbnRyb2xzLmFjdGlvbkljb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IEFjdGlvbkxpbmtDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRmVlZEhlYWRlckZvcm1Hcm91cD8uY29udHJvbHMuYWN0aW9uTGluaztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQWN0aW9uVGV4dENvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5GZWVkSGVhZGVyRm9ybUdyb3VwPy5jb250cm9scy5hY3Rpb25UZXh0O1xuICB9XG5cbiAgcHVibGljIGdldCBFZGl0b3JDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRmVlZEhlYWRlckZvcm1Hcm91cD8uY29udHJvbHMuZWRpdG9yO1xuICB9XG5cbiAgcHVibGljIGdldCBFbnZpcm9ubWVudCgpOiBFYUNFbnZpcm9ubWVudEFzQ29kZSB7XG4gICAgcmV0dXJuIHRoaXMuU3RhdGU/LkVhQz8uRW52aXJvbm1lbnRzW1xuICAgICAgdGhpcy5TdGF0ZT8uRWFDPy5FbnRlcnByaXNlPy5QcmltYXJ5RW52aXJvbm1lbnRcbiAgICBdO1xuICB9XG5cbiAgcHVibGljIGdldCBUYXJnZXRCcmFuY2hGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAuY29udHJvbHMudGFyZ2V0QnJhbmNoO1xuICB9XG5cbiAgcHVibGljIGdldCBPcmdhbml6YXRpb25Gb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAuY29udHJvbHMub3JnYW5pemF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBTb3VyY2VCcmFuY2hGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAuY29udHJvbHMuc291cmNlQnJhbmNoO1xuICB9XG5cbiAgcHVibGljIGdldCBSZXBvc2l0b3J5Rm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5GZWVkSGVhZGVyRm9ybUdyb3VwLmNvbnRyb2xzLnJlcG9zaXRvcnk7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXQgU291cmNlQ29udHJvbEZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRmVlZEhlYWRlckZvcm1Hcm91cC5jb250cm9scy5zb3VyY2VDb250cm9sO1xuICB9XG5cbiAgcHVibGljIGdldCBTb3VyY2VDb250cm9sTG9va3VwcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5TdGF0ZS5GZWVkU291cmNlQ29udHJvbExvb2t1cHMgXG4gICAgICA/IHRoaXMuU3RhdGUuRmVlZFNvdXJjZUNvbnRyb2xMb29rdXBzIFxuICAgICAgOiBPYmplY3Qua2V5cyh0aGlzLlNvdXJjZUNvbnRyb2xzIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU291cmNlQ29udHJvbHMoKTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNTb3VyY2VDb250cm9sIH0ge1xuICAgIHJldHVybiB0aGlzLkVudmlyb25tZW50Py5Tb3VyY2VzIHx8IHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBTdWJ0aXRsZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRmVlZEhlYWRlckZvcm1Hcm91cC5jb250cm9scy5zdWJ0aXRsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU3RhdGUoKTogQXBwbGljYXRpb25zRmxvd1N0YXRle1xuICAgIHJldHVybiB0aGlzLmVhY1N2Yy5TdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgVGl0bGVGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXA/LmNvbnRyb2xzLnRpdGxlO1xuICB9XG5cbiAgcHVibGljIEJyYW5jaE9wdGlvbnM6IEdpdEh1YkJyYW5jaFtdO1xuXG4gIHB1YmxpYyBFZGl0b3JDb25maWc6IEFuZ3VsYXJFZGl0b3JDb25maWc7XG5cbiAgcHVibGljIEZlZWRIZWFkZXJGb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICBwdWJsaWMgT3JnYW5pemF0aW9uT3B0aW9uczogR2l0SHViT3JnYW5pemF0aW9uW107XG5cbiAgcHVibGljIFJlcG9zaXRvcnlPcHRpb25zOiBHaXRIdWJSZXBvc2l0b3J5W107XG5cbiAgcHVibGljIFNvdXJjZUNvbnRyb2w6IEVhQ1NvdXJjZUNvbnRyb2w7XG5cbiAgcHVibGljIFNsaWNlczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfTtcblxuICBwdWJsaWMgU2xpY2VzQ291bnQ6IG51bWJlcjtcblxuXG5cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBwc0Zsb3dTdmM6IEFwcGxpY2F0aW9uc0Zsb3dTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBlYWNTdmM6IEVhQ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGZvcm1CbGRyOiBGb3JtQnVpbGRlcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RmVlZEhlYWRlckRpYWxvZ0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBGZWVkSGVhZGVyRGlhbG9nRGF0YSwpIHtcbiAgICAgIFxuICAgIHRoaXMuRWRpdG9yQ29uZmlnID0ge1xuICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICBzcGVsbGNoZWNrOiB0cnVlLFxuICAgICAgaGVpZ2h0OiAnMjUwcHgnLFxuICAgICAgbWluSGVpZ2h0OiAnMCcsXG4gICAgICBtYXhIZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHdpZHRoOiAnYXV0bycsXG4gICAgICBtaW5XaWR0aDogJzAnLFxuICAgICAgdHJhbnNsYXRlOiAneWVzJyxcbiAgICAgIGVuYWJsZVRvb2xiYXI6IHRydWUsXG4gICAgICBzaG93VG9vbGJhcjogdHJ1ZSxcbiAgICAgIHBsYWNlaG9sZGVyOiAnRW50ZXIgdGV4dCBoZXJlLi4uJyxcbiAgICAgIGRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3I6ICcnLFxuICAgICAgZGVmYXVsdEZvbnROYW1lOiAnJyxcbiAgICAgIGRlZmF1bHRGb250U2l6ZTogJycsXG4gICAgICBmb250czogW1xuICAgICAgICB7Y2xhc3M6ICdhcmlhbCcsIG5hbWU6ICdBcmlhbCd9LFxuICAgICAgICB7Y2xhc3M6ICd0aW1lcy1uZXctcm9tYW4nLCBuYW1lOiAnVGltZXMgTmV3IFJvbWFuJ30sXG4gICAgICAgIHtjbGFzczogJ2NhbGlicmknLCBuYW1lOiAnQ2FsaWJyaSd9LFxuICAgICAgICB7Y2xhc3M6ICdjb21pYy1zYW5zLW1zJywgbmFtZTogJ0NvbWljIFNhbnMgTVMnfVxuICAgICAgXSxcbiAgICAgIGN1c3RvbUNsYXNzZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3F1b3RlJyxcbiAgICAgICAgY2xhc3M6ICdxdW90ZScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncmVkVGV4dCcsXG4gICAgICAgIGNsYXNzOiAncmVkVGV4dCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0aXRsZVRleHQnLFxuICAgICAgICBjbGFzczogJ3RpdGxlVGV4dCcsXG4gICAgICAgIHRhZzogJ2gxJyxcbiAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc2FuaXRpemU6IHRydWUsXG4gICAgICB0b29sYmFyUG9zaXRpb246ICd0b3AnLFxuICAgICAgdG9vbGJhckhpZGRlbkJ1dHRvbnM6IFtcbiAgICAgICAgWydzdWJzY3JpcHQnLCAnc3VwZXJzY3JpcHQnXSxcbiAgICAgICAgWydmb250U2l6ZSddXG4gICAgICBdXG4gICAgfTtcblxuICAgIHRoaXMuU2xpY2VzQ291bnQgPSA1O1xuXG4gICAgdGhpcy5TbGljZXMgPSB7XG4gICAgICBTb3VyY2VzOiB0aGlzLlNsaWNlc0NvdW50LFxuICAgIH07XG5cbiAgICBpZih0aGlzLlNvdXJjZUNvbnRyb2xMb29rdXBzLmxlbmd0aCA9PT0gMSl7XG4gICAgICB0aGlzLlNvdXJjZUNvbnRyb2wgPSB0aGlzLkVudmlyb25tZW50Py5Tb3VyY2VzW3RoaXMuU291cmNlQ29udHJvbExvb2t1cHNbMF1dO1xuICAgIH1cbiAgIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cEZlZWRIZWFkZXJGb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgQ2xvc2VEaWFsb2coKXtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgcHVibGljIEhhbmRsZUFjdGlvbigpe1xuICAgIGlmICh0aGlzLkFjdGlvbkxpbmtDb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgd2luZG93Lm9wZW4odGhpcy5BY3Rpb25MaW5rQ29udHJvbC52YWx1ZSwgJ19ibGFuaycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuQWN0aW9uTGlua0NvbnRyb2wudmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIFB1bGxSZXF1ZXN0U291cmNlQ29udHJvbENoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSl7XG4gICAgdGhpcy5Tb3VyY2VDb250cm9sID0gdGhpcy5Tb3VyY2VDb250cm9sc1t0aGlzLlNvdXJjZUNvbnRyb2xGb3JtQ29udHJvbC52YWx1ZV07XG4gICAgdGhpcy5saXN0QnJhbmNoZXMoKTtcblxuICB9XG5cbiAgcHVibGljIEZlYXR1cmVCcmFuY2hTb3VyY2VDb250cm9sQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKXtcbiAgICB0aGlzLlNvdXJjZUNvbnRyb2wgPSB0aGlzLlNvdXJjZUNvbnRyb2xzW3RoaXMuU291cmNlQ29udHJvbEZvcm1Db250cm9sLnZhbHVlXTtcbiAgICB0aGlzLmxpc3RPcmdhbml6YXRpb25zKCk7XG5cbiAgfVxuXG4gIHB1YmxpYyBJc3N1ZVNvdXJjZUNvbnRyb2xDaGFuZ2VkKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2Upe1xuICAgIHRoaXMuU291cmNlQ29udHJvbCA9IHRoaXMuU291cmNlQ29udHJvbHNbdGhpcy5Tb3VyY2VDb250cm9sRm9ybUNvbnRyb2wudmFsdWVdO1xuXG4gIH1cblxuICBwdWJsaWMgU3VibWl0KCl7XG4gICAgbGV0IHJldHVybk9iamVjdDogRmVlZEVudHJ5ID0ge1xuICAgICAgQWN0aW9uSWNvbjogdGhpcy5BY3Rpb25JY29uQ29udHJvbCA/IHRoaXMuQWN0aW9uSWNvbkNvbnRyb2wudmFsdWUgOiBudWxsLFxuICAgICAgQWN0aW9uTGluazogdGhpcy5BY3Rpb25MaW5rQ29udHJvbCA/IHRoaXMuQWN0aW9uTGlua0NvbnRyb2wudmFsdWUgOiBudWxsLFxuICAgICAgQWN0aW9uVGV4dDogdGhpcy5BY3Rpb25UZXh0Q29udHJvbCA/IHRoaXMuQWN0aW9uVGV4dENvbnRyb2wudmFsdWUgOiBudWxsLFxuICAgICAgQXZhdGFyOiBudWxsLFxuICAgICAgQ29udGVudDogdGhpcy5FZGl0b3JDb250cm9sID8gdGhpcy5FZGl0b3JDb250cm9sLnZhbHVlIDogbnVsbCxcbiAgICAgIEV4cGlyZXNBdDogbnVsbCxcbiAgICAgIE9yZ2FuaXphdGlvbjogdGhpcy5Pcmdhbml6YXRpb25Gb3JtQ29udHJvbCA/IHRoaXMuT3JnYW5pemF0aW9uRm9ybUNvbnRyb2wudmFsdWUgOiBudWxsLFxuICAgICAgUmVwb3NpdHJveTogdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wgPyB0aGlzLlJlcG9zaXRvcnlGb3JtQ29udHJvbC52YWx1ZSA6IG51bGwsXG4gICAgICBTb3VyY2VCcmFuY2g6IHRoaXMuU291cmNlQnJhbmNoRm9ybUNvbnRyb2wgPyB0aGlzLlNvdXJjZUJyYW5jaEZvcm1Db250cm9sLnZhbHVlIDogbnVsbCxcbiAgICAgIFNvdXJjZUNvbnRyb2xMb29rdXA6IHRoaXMuU291cmNlQ29udHJvbEZvcm1Db250cm9sID8gdGhpcy5Tb3VyY2VCcmFuY2hGb3JtQ29udHJvbC52YWx1ZSA6IG51bGwsXG4gICAgICBTdWJ0aXRsZTogdGhpcy5TdWJ0aXRsZUZvcm1Db250cm9sID8gdGhpcy5TdWJ0aXRsZUZvcm1Db250cm9sLnZhbHVlIDogbnVsbCxcbiAgICAgIFRhcmdldEJyYW5jaDogdGhpcy5UYXJnZXRCcmFuY2hGb3JtQ29udHJvbCA/IHRoaXMuVGFyZ2V0QnJhbmNoRm9ybUNvbnRyb2wudmFsdWU6IG51bGwsXG4gICAgICBUeXBlOiB0aGlzLmRhdGEudHlwZSxcbiAgICAgIFRpdGxlOiB0aGlzLlRpdGxlRm9ybUNvbnRyb2wgPyB0aGlzLlRpdGxlRm9ybUNvbnRyb2wudmFsdWUgOiBudWxsLFxuXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFwiQ29udHJvbDogXCIsIHJldHVybk9iamVjdCApO1xuXG4gICAgbGV0IHN0YXR1cyA9IHRoaXMuZWFjU3ZjLlN1Ym1pdEZlZWRFbnRyeShyZXR1cm5PYmplY3QpO1xuICAgIGNvbnNvbGUubG9nKFwiZmVlZCBlbnRyeSBzdGF0dXM6IFwiLCBzdGF0dXMpO1xuXG4gICAgLy8gY29uc29sZS5sb2coXCJFZGl0b3I6IFwiLCB0aGlzLkVkaXRvckNvbnRyb2wudmFsdWUgKVxuICB9XG5cbiAgcHVibGljIE9yZ2FuaXphdGlvbkNoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSk6IHZvaWQge1xuXG4gICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wucmVzZXQoKTtcblxuXG4gICAgdGhpcy5saXN0UmVwb3NpdG9yaWVzKCk7XG4gIH1cblxuICBwdWJsaWMgUmVwb3NpdG9yeUNoYW5nZWQoZXZlbnQ6IE1hdFNlbGVjdENoYW5nZSl7XG4gICAgdGhpcy5saXN0QnJhbmNoZXMoKTtcbiAgfVxuXG4gIC8vSEVMUEVSU1xuXG4gIHByb3RlY3RlZCBsaXN0QnJhbmNoZXMoKTogdm9pZCB7XG4gICAgLy8gdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgdGhpcy5hcHBzRmxvd1N2Y1xuICAgICAgICAuTGlzdEJyYW5jaGVzKFxuICAgICAgICAgIHRoaXMuU291cmNlQ29udHJvbD8uT3JnYW5pemF0aW9uLFxuICAgICAgICAgIHRoaXMuU291cmNlQ29udHJvbD8uUmVwb3NpdG9yeVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBCYXNlTW9kZWxlZFJlc3BvbnNlPEdpdEh1YkJyYW5jaFtdPikgPT4ge1xuICAgICAgICAgIHRoaXMuQnJhbmNoT3B0aW9ucyA9IHJlc3BvbnNlLk1vZGVsOyAgICAgICAgICBcblxuICAgICAgICB9KTtcbiAgICBcbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0T3JnYW5pemF0aW9ucygpOiB2b2lkIHtcbiAgICAvLyB0aGlzLkxvYWRpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5hcHBzRmxvd1N2Y1xuICAgICAgLkxpc3RPcmdhbml6YXRpb25zKClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBCYXNlTW9kZWxlZFJlc3BvbnNlPEdpdEh1Yk9yZ2FuaXphdGlvbltdPikgPT4ge1xuICAgICAgICB0aGlzLk9yZ2FuaXphdGlvbk9wdGlvbnMgPSByZXNwb25zZS5Nb2RlbDtcbiAgICAgICAgY29uc29sZS5sb2coXCJPcmdhbml6YXRpb24gT3B0aW9uczogXCIsIHRoaXMuT3JnYW5pemF0aW9uT3B0aW9ucyk7XG5cbiAgICAgICAgLy8gdGhpcy5Mb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuU291cmNlQ29udHJvbD8uT3JnYW5pemF0aW9uKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLk9yZ2FuaXphdGlvbkZvcm1Db250cm9sLnNldFZhbHVlKFxuICAgICAgICAgICAgICB0aGlzLlNvdXJjZUNvbnRyb2wuT3JnYW5pemF0aW9uXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmxpc3RSZXBvc2l0b3JpZXModGhpcy5Tb3VyY2VDb250cm9sPy5SZXBvc2l0b3J5KTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGlzdFJlcG9zaXRvcmllcyhhY3RpdmVSZXBvOiBzdHJpbmcgPSBudWxsKTogdm9pZCB7XG4gICAgLy8gdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuYXBwc0Zsb3dTdmNcbiAgICAgIC5MaXN0UmVwb3NpdG9yaWVzKHRoaXMuT3JnYW5pemF0aW9uRm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogQmFzZU1vZGVsZWRSZXNwb25zZTxHaXRIdWJSZXBvc2l0b3J5W10+KSA9PiB7XG4gICAgICAgIHRoaXMuUmVwb3NpdG9yeU9wdGlvbnMgPSByZXNwb25zZS5Nb2RlbDtcblxuICAgICAgICAvLyB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoYWN0aXZlUmVwbykge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5SZXBvc2l0b3J5Rm9ybUNvbnRyb2wuc2V0VmFsdWUoYWN0aXZlUmVwbyk7XG5cbiAgICAgICAgICAgIHRoaXMubGlzdEJyYW5jaGVzKCk7XG5cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBcbiAgICAgIH0pO1xuICB9XG5cbiAgXG5cbiAgcHJvdGVjdGVkIHNldHVwRmVlZEhlYWRlckZvcm0oKXtcbiAgICB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAgPSB0aGlzLmZvcm1CbGRyLmdyb3VwKHt9KTtcblxuICAgIHN3aXRjaCAoIHRoaXMuZGF0YS50eXBlICkge1xuICAgICAgY2FzZSBcIkFubm91bmNlbWVudFwiOlxuICAgICAgICB0aGlzLnNldHVwQW5ub3VuY2VtZW50Rm9ybSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlB1bGxSZXF1ZXN0XCI6XG4gICAgICAgIHRoaXMuc2V0dXBQUkZvcm0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJPcGVuSXNzdWVcIjpcbiAgICAgICAgdGhpcy5zZXR1cElzc3VlRm9ybSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkNyZWF0ZUJyYW5jaFwiOlxuICAgICAgICB0aGlzLnNldHVwRmVhdHVyZUJyYW5jaEZvcm0oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IFxuICAgICAgICAgIC8vIFxuICAgICAgICAgIGJyZWFrO1xuICAgfVxuXG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBBbm5vdW5jZW1lbnRGb3JtKCl7XG4gICAgdGhpcy5zZXR1cEJhc2ljRm9ybSgpO1xuXG4gICAgdGhpcy5GZWVkSGVhZGVyRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnc3VidGl0bGUnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICAnJ1xuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdhY3Rpb25UZXh0JyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgJydcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5GZWVkSGVhZGVyRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAnYWN0aW9uTGluaycsXG4gICAgICB0aGlzLmZvcm1CbGRyLmNvbnRyb2woXG4gICAgICAgICcnXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdhY3Rpb25JY29uJyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgJydcbiAgICAgIClcbiAgICApO1xuXG5cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cFBSRm9ybSgpe1xuICAgIHRoaXMubGlzdEJyYW5jaGVzKCk7XG4gICAgdGhpcy5zZXR1cElzc3VlRm9ybSgpO1xuICAgIHRoaXMuc2V0dXBCcmFuY2hlc0Zvcm0oKTtcblxuXG4gIH1cblxucHJvdGVjdGVkIHNldHVwQmFzaWNGb3JtKCl7XG4gIHRoaXMuRmVlZEhlYWRlckZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICd0aXRsZScsXG4gICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgJycsW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgKVxuICApO1xuXG4gIHRoaXMuRmVlZEhlYWRlckZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICdlZGl0b3InLFxuICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICcnXG4gICAgKVxuICApO1xufVxuXG5cbiAgcHJvdGVjdGVkIHNldHVwSXNzdWVGb3JtKCl7XG4gICAgdGhpcy5zZXR1cEJhc2ljRm9ybSgpO1xuICAgIFxuICAgIHRoaXMuc2V0dXBTb3VyY2VDb250cm9sRm9ybSgpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBGZWF0dXJlQnJhbmNoRm9ybSgpe1xuXG4gICAgdGhpcy5zZXR1cFNvdXJjZUNvbnRyb2xGb3JtKCk7XG5cbiAgICB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdvcmdhbml6YXRpb24nLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICAnJ1xuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdyZXBvc2l0b3J5JyxcbiAgICAgIHRoaXMuZm9ybUJsZHIuY29udHJvbChcbiAgICAgICAgJydcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zZXR1cEJyYW5jaGVzRm9ybSgpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBTb3VyY2VDb250cm9sRm9ybSgpe1xuICAgIHRoaXMuRmVlZEhlYWRlckZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ3NvdXJjZUNvbnRyb2wnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICAnJ1xuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBCcmFuY2hlc0Zvcm0oKXtcbiAgICB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICd0YXJnZXRCcmFuY2gnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICAnJ1xuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLkZlZWRIZWFkZXJGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdzb3VyY2VCcmFuY2gnLFxuICAgICAgdGhpcy5mb3JtQmxkci5jb250cm9sKFxuICAgICAgICAnJ1xuICAgICAgKVxuICAgICk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImRpYWxvZy1oZWFkZXJcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cbiAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT57e2RhdGEuZGlhbG9nVGl0bGV9fTwvaDI+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIkNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJGZWVkSGVhZGVyRm9ybUdyb3VwXCIgPlxuXG4gICAgICAgIDwhLS0gSVNTVUUgRk9STSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEudHlwZSA9PT0gJ09wZW5Jc3N1ZScgXCI+XG5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+U291cmNlIENvbnRyb2w8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzb3VyY2VDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiSXNzdWVTb3VyY2VDb250cm9sQ2hhbmdlZCgkZXZlbnQpXCJcblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNjTG9va3VwIG9mIFNvdXJjZUNvbnRyb2xMb29rdXBzIHwgc2xpY2U6IDA6U2xpY2VzLlNvdXJjZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJTb3VyY2VDb250cm9sc1tzY0xvb2t1cF07IGxldCBzY1wiIFt2YWx1ZV09XCJzY0xvb2t1cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tzYy5OYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVGl0bGVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG5cbiAgICAgICAgICAgIDxhbmd1bGFyLWVkaXRvciBcbiAgICAgICAgICAgICAgICBpZD1cImlzc3VlLWVkaXRvclwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZWRpdG9yXCIgXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJFZGl0b3JDb25maWdcIlxuICAgICAgICAgICAgPjwvYW5ndWxhci1lZGl0b3I+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gQU5OT1VOQ0VNRU5UIEZPUk0gLS0+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGEudHlwZSA9PT0gJ0Fubm91bmNlbWVudCcgXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUaXRsZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdWJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxhbmd1bGFyLWVkaXRvciBcbiAgICAgICAgICAgICAgICBpZD1cImFubm91bmNlbWVudC1lZGl0b3JcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVkaXRvclwiIFxuICAgICAgICAgICAgICAgIFtjb25maWddPVwiRWRpdG9yQ29uZmlnXCJcbiAgICAgICAgICAgID48L2FuZ3VsYXItZWRpdG9yPlxuXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBY3Rpb24gVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFjdGlvblRleHRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBY3Rpb24gTGlua1wiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFjdGlvbkxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBY3Rpb24gSWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFjdGlvbkljb25cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiQWN0aW9uVGV4dENvbnRyb2w/LnZhbHVlIHx8IEFjdGlvbkljb25Db250cm9sPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJIYW5kbGVBY3Rpb24oQWN0aW9uTGlua0NvbnRyb2w/LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJBY3Rpb25JY29uQ29udHJvbD8udmFsdWVcIj57eyBBY3Rpb25JY29uQ29udHJvbD8udmFsdWUgfX08L21hdC1pY29uPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHt7IEFjdGlvblRleHRDb250cm9sPy52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIUFjdGlvblRleHRDb250cm9sPy52YWx1ZSAmJiAhQWN0aW9uSWNvbkNvbnRyb2w/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jcnVlbHR5X2ZyZWU8L21hdC1pY29uPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIEV4YW1wbGUgQnV0dG9uXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUFIgRk9STSAtLT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS50eXBlID09PSAnUHVsbFJlcXVlc3QnIFwiPlxuXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlNvdXJjZSBDb250cm9sPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic291cmNlQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIlB1bGxSZXF1ZXN0U291cmNlQ29udHJvbENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2NMb29rdXAgb2YgU291cmNlQ29udHJvbExvb2t1cHMgfCBzbGljZTogMDpTbGljZXMuU291cmNlc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIlNvdXJjZUNvbnRyb2xzW3NjTG9va3VwXTsgbGV0IHNjXCIgW3ZhbHVlXT1cInNjTG9va3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e3NjLk5hbWV9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiICpuZ0lmPVwiQnJhbmNoT3B0aW9ucz8ubGVuZ3RoID4gMFwiPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+QmFzZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJ0YXJnZXRCcmFuY2hcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBicmFuY2hPcHQgb2YgQnJhbmNoT3B0aW9uc1wiIFt2YWx1ZV09XCJicmFuY2hPcHQuTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3ticmFuY2hPcHQuTmFtZX19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q29tcGFyZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzb3VyY2VCcmFuY2hcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBicmFuY2hPcHQgb2YgQnJhbmNoT3B0aW9uc1wiIFt2YWx1ZV09XCJicmFuY2hPcHQuTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3ticmFuY2hPcHQuTmFtZX19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVGl0bGVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG5cbiAgICAgICAgICAgIDxhbmd1bGFyLWVkaXRvciBcbiAgICAgICAgICAgICAgICBpZD1cInByLWVkaXRvclwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZWRpdG9yXCIgXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJFZGl0b3JDb25maWdcIlxuICAgICAgICAgICAgPjwvYW5ndWxhci1lZGl0b3I+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBGZWF0dXJlIEJyYW5jaCBmb3JtIC0tPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLnR5cGUgPT09ICdDcmVhdGVCcmFuY2gnIFwiPlxuXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+U291cmNlIENvbnRyb2w8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzb3VyY2VDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiRmVhdHVyZUJyYW5jaFNvdXJjZUNvbnRyb2xDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNjTG9va3VwIG9mIFNvdXJjZUNvbnRyb2xMb29rdXBzIHwgc2xpY2U6IDA6U2xpY2VzLlNvdXJjZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJTb3VyY2VDb250cm9sc1tzY0xvb2t1cF07IGxldCBzY1wiIFt2YWx1ZV09XCJzY0xvb2t1cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tzYy5OYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1hcm91bmQgY2VudGVyXCIgPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiT3JnYW5pemF0aW9uT3B0aW9ucz8ubGVuZ3RoID4gMFwiPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib3JnYW5pemF0aW9uXCIgXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJPcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiT3JnYW5pemF0aW9uQ2hhbmdlZCgkZXZlbnQpXCIgXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3JnT3B0IG9mIE9yZ2FuaXphdGlvbk9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm9yZ09wdC5OYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG9yZ09wdC5OYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cblxuXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJSZXBvc2l0b3J5T3B0aW9ucz8ubGVuZ3RoID4gMFwiPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwicmVwb3NpdG9yeVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmVwb3NpdG9yeVwiICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIlJlcG9zaXRvcnlDaGFuZ2VkKCRldmVudClcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXBvT3B0IG9mIFJlcG9zaXRvcnlPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJyZXBvT3B0Lk5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgcmVwb09wdC5OYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+ICBcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWFyb3VuZCBjZW50ZXJcIiAqbmdJZj1cIkJyYW5jaE9wdGlvbnM/Lmxlbmd0aCA+IDBcIj5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkJhc2UgQnJhbmNoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic291cmNlQnJhbmNoXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGJyYW5jaE9wdCBvZiBCcmFuY2hPcHRpb25zXCIgW3ZhbHVlXT1cImJyYW5jaE9wdC5OYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7YnJhbmNoT3B0Lk5hbWV9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDcmVhdGUgTmV3IEJyYW5jaFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGFyZ2V0QnJhbmNoXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvZm9ybT5cbiAgICBcbiAgICBcblxuICAgIDwhLS0gPG1hdC1lcnJvciAqbmdJZj1cIkVycm9yTWVzc2FnZVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgPlxuICAgICAgICB7eyBFcnJvck1lc3NhZ2UgfX1cbiAgICA8L21hdC1lcnJvcj4gLS0+XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9uc1xuICAgIGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIiBcbiAgICBkaXYgZnhMYXlvdXQ9XCJyb3dcIiBcbiAgICBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiXG4+XG5cbiAgICA8YnV0dG9uIFxuICAgICAgICBjbGFzcz1cImFjdGlvbi1idXR0b25cIlxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICBmeEZsZXg9XCIyNSVcIlxuICAgICAgICAoY2xpY2spPVwiQ2xvc2VEaWFsb2coKVwiXG4gICAgPlxuICAgICAgICBDYW5jZWxcbiAgICA8L2J1dHRvbj5cblxuICAgIDwhLS0gIC0tPlxuICAgIDxidXR0b24gXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBmeEZsZXg9XCIyNSVcIlxuICAgICAgICBjbGFzcz1cInN1Ym1pdFwiIFxuICAgICAgICAoY2xpY2spPVwiU3VibWl0KClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgIUZlZWRIZWFkZXJGb3JtR3JvdXA/LnZhbGlkIFxuXCJcbiAgICAgICAgXG4gICAgPlxuICAgICAgICBTdWJtaXRcbiAgICA8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuXG5cbiJdfQ==
@@ -12,6 +12,7 @@ import * as i7 from "../../controls/devops-source-control-form/devops-source-con
12
12
  import * as i8 from "@angular/flex-layout/flex";
13
13
  import * as i9 from "@angular/common";
14
14
  import * as i10 from "@angular/material/form-field";
15
+ import * as i11 from "@angular/material/tooltip";
15
16
  export class SourceControlDialogComponent {
16
17
  constructor(dialogRef, eacSvc, data, snackBar) {
17
18
  this.dialogRef = dialogRef;
@@ -33,6 +34,12 @@ export class SourceControlDialogComponent {
33
34
  CloseDialog() {
34
35
  this.dialogRef.close();
35
36
  }
37
+ DeleteSourceControl(scLookup) {
38
+ if (confirm(`Are you sure you want to delete source control '${scLookup}'?`)) {
39
+ this.eacSvc.DeleteSourceControl(scLookup);
40
+ this.CloseDialog();
41
+ }
42
+ }
36
43
  HandleSaveStatusEvent(event) {
37
44
  console.log("event to save: ", event);
38
45
  if (event.Code === 0) {
@@ -50,10 +57,10 @@ export class SourceControlDialogComponent {
50
57
  }
51
58
  }
52
59
  SourceControlDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SourceControlDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.EaCService }, { token: MAT_DIALOG_DATA }, { token: i3.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
53
- SourceControlDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: SourceControlDialogComponent, selector: "lcu-source-control-dialog", viewQueries: [{ propertyName: "DevopsSourceControl", first: true, predicate: DevopsSourceControlFormComponent, descendants: true }], ngImport: i0, template: "\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Source Control</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n </ng-container>\n\n <ng-conatiner *ngIf=\"HasConnection\" fxLayout=\"column\">\n\n <div fxLayoutAlign=\"center center\">\n <lcu-devops-source-control-form\n [environment]=\"data.environment\"\n [environment-lookup]=\"data.environmentLookup\"\n [editing-source-control-lookup]=\"data.scLookup\"\n (save-status-event)=\"HandleSaveStatusEvent($event)\">\n </lcu-devops-source-control-form>\n </div>\n \n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n\n </ng-conatiner>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n class=\"action-button\"\n mat-raised-button \n *ngIf=\"!State?.Loading\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveSourceControl()\"\n [disabled]=\"!DevOpsSourceControlFormGroup?.valid || !DevOpsSourceControlFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n\n\n", styles: [".dialog-header{width:100%}.action-button{margin:0 10px}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.GitAuthComponent, selector: "lcu-git-auth" }, { type: i7.DevopsSourceControlFormComponent, selector: "lcu-devops-source-control-form", inputs: ["editing-source-control-lookup", "environment", "environment-lookup"], outputs: ["save-status-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
60
+ SourceControlDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: SourceControlDialogComponent, selector: "lcu-source-control-dialog", viewQueries: [{ propertyName: "DevopsSourceControl", first: true, predicate: DevopsSourceControlFormComponent, descendants: true }], ngImport: i0, template: "\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Source Control</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n </ng-container>\n\n <ng-conatiner *ngIf=\"HasConnection\" fxLayout=\"column\">\n\n <div fxLayoutAlign=\"center center\">\n <lcu-devops-source-control-form\n [environment]=\"data.environment\"\n [environment-lookup]=\"data.environmentLookup\"\n [editing-source-control-lookup]=\"data.scLookup\"\n (save-status-event)=\"HandleSaveStatusEvent($event)\">\n </lcu-devops-source-control-form>\n </div>\n \n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n\n </ng-conatiner>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"space-between center\"\n \n>\n <div fxLayoutAlign=\"start center\">\n <button\n mat-raised-button\n color=\"warn\"\n (click)=\"DeleteSourceControl(data.scLookup)\"\n matTooltip=\"Delete {{ data.scLookup }}\"\n >\n Delete\n </button>\n </div>\n\n <div fxLayoutAlign=\"end center\">\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"43%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n class=\"action-button\"\n mat-raised-button \n *ngIf=\"!State?.Loading\" \n fxFlex=\"30%\" \n color=\"primary\" \n (click)=\"SaveSourceControl()\"\n [disabled]=\"!DevOpsSourceControlFormGroup?.valid || !DevOpsSourceControlFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n </div>\n\n</mat-dialog-actions>\n\n\n\n", styles: [".dialog-header{width:100%}.action-button{margin:0 10px}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.GitAuthComponent, selector: "lcu-git-auth" }, { type: i7.DevopsSourceControlFormComponent, selector: "lcu-devops-source-control-form", inputs: ["editing-source-control-lookup", "environment", "environment-lookup"], outputs: ["save-status-event"] }], directives: [{ type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
54
61
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: SourceControlDialogComponent, decorators: [{
55
62
  type: Component,
56
- args: [{ selector: 'lcu-source-control-dialog', template: "\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Source Control</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n </ng-container>\n\n <ng-conatiner *ngIf=\"HasConnection\" fxLayout=\"column\">\n\n <div fxLayoutAlign=\"center center\">\n <lcu-devops-source-control-form\n [environment]=\"data.environment\"\n [environment-lookup]=\"data.environmentLookup\"\n [editing-source-control-lookup]=\"data.scLookup\"\n (save-status-event)=\"HandleSaveStatusEvent($event)\">\n </lcu-devops-source-control-form>\n </div>\n \n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n\n </ng-conatiner>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"end center\"\n>\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"25%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n class=\"action-button\"\n mat-raised-button \n *ngIf=\"!State?.Loading\" \n fxFlex=\"25%\" \n color=\"primary\" \n (click)=\"SaveSourceControl()\"\n [disabled]=\"!DevOpsSourceControlFormGroup?.valid || !DevOpsSourceControlFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n\n</mat-dialog-actions>\n\n\n\n", styles: [".dialog-header{width:100%}.action-button{margin:0 10px}\n"] }]
63
+ args: [{ selector: 'lcu-source-control-dialog', template: "\n<div class=\"dialog-header\" fxLayoutAlign=\"space-between center\">\n <h2 mat-dialog-title>Source Control</h2>\n <button mat-icon-button (click)=\"CloseDialog()\">\n <mat-icon>cancel</mat-icon>\n </button>\n</div>\n\n<mat-dialog-content>\n\n <ng-container *ngIf=\"!HasConnection\">\n \n <lcu-git-auth></lcu-git-auth>\n\n </ng-container>\n\n <ng-conatiner *ngIf=\"HasConnection\" fxLayout=\"column\">\n\n <div fxLayoutAlign=\"center center\">\n <lcu-devops-source-control-form\n [environment]=\"data.environment\"\n [environment-lookup]=\"data.environmentLookup\"\n [editing-source-control-lookup]=\"data.scLookup\"\n (save-status-event)=\"HandleSaveStatusEvent($event)\">\n </lcu-devops-source-control-form>\n </div>\n \n <mat-error *ngIf=\"ErrorMessage\" fxLayoutAlign=\"center center\" >\n {{ ErrorMessage }}\n </mat-error>\n\n </ng-conatiner>\n\n</mat-dialog-content>\n\n<mat-dialog-actions \n class=\"actions-container\" \n div fxLayout=\"row\" \n fxLayoutAlign=\"space-between center\"\n \n>\n <div fxLayoutAlign=\"start center\">\n <button\n mat-raised-button\n color=\"warn\"\n (click)=\"DeleteSourceControl(data.scLookup)\"\n matTooltip=\"Delete {{ data.scLookup }}\"\n >\n Delete\n </button>\n </div>\n\n <div fxLayoutAlign=\"end center\">\n <button \n class=\"action-button\"\n mat-raised-button\n fxFlex=\"43%\"\n (click)=\"CloseDialog()\">\n Cancel\n\n </button>\n\n\n\n <button \n class=\"action-button\"\n mat-raised-button \n *ngIf=\"!State?.Loading\" \n fxFlex=\"30%\" \n color=\"primary\" \n (click)=\"SaveSourceControl()\"\n [disabled]=\"!DevOpsSourceControlFormGroup?.valid || !DevOpsSourceControlFormGroup?.dirty\">\n <!-- <mat-icon>save</mat-icon> -->\n Save\n </button>\n </div>\n\n</mat-dialog-actions>\n\n\n\n", styles: [".dialog-header{width:100%}.action-button{margin:0 10px}\n"] }]
57
64
  }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i2.EaCService }, { type: undefined, decorators: [{
58
65
  type: Inject,
59
66
  args: [MAT_DIALOG_DATA]
@@ -61,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
61
68
  type: ViewChild,
62
69
  args: [DevopsSourceControlFormComponent]
63
70
  }] } });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWNvbnRyb2wtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi9zcmMvbGliL2RpYWxvZ3Mvc291cmNlLWNvbnRyb2wtZGlhbG9nL3NvdXJjZS1jb250cm9sLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9kaWFsb2dzL3NvdXJjZS1jb250cm9sLWRpYWxvZy9zb3VyY2UtY29udHJvbC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJekUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7Ozs7Ozs7Ozs7OztBQWVsSSxNQUFNLE9BQU8sNEJBQTRCO0lBb0J2QyxZQUFvQixTQUFxRCxFQUM3RCxNQUFrQixFQUNJLElBQWtCLEVBQ3hDLFFBQXFCO1FBSGIsY0FBUyxHQUFULFNBQVMsQ0FBNEM7UUFDN0QsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNJLFNBQUksR0FBSixJQUFJLENBQWM7UUFDeEMsYUFBUSxHQUFSLFFBQVEsQ0FBYTtJQUFJLENBQUM7SUFsQnRDLElBQVcsNEJBQTRCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLDRCQUE0QixDQUFDO0lBQ2hFLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQVVNLFFBQVE7SUFFZixDQUFDO0lBR00sV0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxLQUFhO1FBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBQztZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxTQUFTLEVBQUM7Z0JBQy9ELFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO2FBQ0c7WUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9DLENBQUM7O3lIQWpEVSw0QkFBNEIsd0VBc0I3QixlQUFlOzZHQXRCZCw0QkFBNEIsc0hBRTVCLGdDQUFnQyxnREN2QjdDLDI5REFtRUE7MkZEOUNhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSwyQkFBMkI7OzBCQTBCbEMsTUFBTTsyQkFBQyxlQUFlO3NFQW5CbEIsbUJBQW1CO3NCQUR6QixTQUFTO3VCQUFDLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnQGxjdS9jb21tb24nO1xuaW1wb3J0IHsgRWFDRW52aXJvbm1lbnRBc0NvZGUgfSBmcm9tICdAc2VtYW50aWNqcy9jb21tb24nO1xuaW1wb3J0IHsgRGV2b3BzU291cmNlQ29udHJvbEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb250cm9scy9kZXZvcHMtc291cmNlLWNvbnRyb2wtZm9ybS9kZXZvcHMtc291cmNlLWNvbnRyb2wtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWFDU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VhYy5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uc0Zsb3dTdGF0ZSB9IGZyb20gJy4uLy4uL3N0YXRlL2FwcGxpY2F0aW9ucy1mbG93LnN0YXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBTQ0RpYWxvZ0RhdGEge1xuICBlbnZpcm9ubWVudDogRWFDRW52aXJvbm1lbnRBc0NvZGU7XG4gIGVudmlyb25tZW50TG9va3VwOiBzdHJpbmc7XG4gIHNjTG9va3VwOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xjdS1zb3VyY2UtY29udHJvbC1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vc291cmNlLWNvbnRyb2wtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc291cmNlLWNvbnRyb2wtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU291cmNlQ29udHJvbERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQFZpZXdDaGlsZChEZXZvcHNTb3VyY2VDb250cm9sRm9ybUNvbXBvbmVudClcbiAgcHVibGljIERldm9wc1NvdXJjZUNvbnRyb2w6IERldm9wc1NvdXJjZUNvbnRyb2xGb3JtQ29tcG9uZW50O1xuXG4gIHB1YmxpYyBnZXQgRGV2T3BzU291cmNlQ29udHJvbEZvcm1Hcm91cCgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLkRldm9wc1NvdXJjZUNvbnRyb2w/LkRldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEhhc0Nvbm5lY3Rpb24oKTogYm9vbGVhbntcbiAgICByZXR1cm4gdGhpcy5TdGF0ZS5HaXRIdWIuSGFzQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU3RhdGUoKTogQXBwbGljYXRpb25zRmxvd1N0YXRle1xuICAgIHJldHVybiB0aGlzLmVhY1N2Yy5TdGF0ZTtcbiAgfVxuXG5cbiAgcHVibGljIEVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U291cmNlQ29udHJvbERpYWxvZ0NvbXBvbmVudD4sXG4gICAgcHJvdGVjdGVkIGVhY1N2YzogRWFDU2VydmljZSxcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IFNDRGlhbG9nRGF0YSxcbiAgICBwcm90ZWN0ZWQgc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgXG4gIH1cblxuXG4gIHB1YmxpYyBDbG9zZURpYWxvZygpe1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgSGFuZGxlU2F2ZVN0YXR1c0V2ZW50KGV2ZW50OiBTdGF0dXMpe1xuICAgIGNvbnNvbGUubG9nKFwiZXZlbnQgdG8gc2F2ZTogXCIsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQuQ29kZSA9PT0gMCl7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXCJTb3VyY2UgQ29udHJvbCBTdWNjZXNmdWxseSBTYXZlZFwiLCBcIkRpc21pc3NcIix7XG4gICAgICAgIGR1cmF0aW9uOiA1MDAwXG4gICAgICB9KTtcbiAgICAgIHRoaXMuQ2xvc2VEaWFsb2coKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMuRXJyb3JNZXNzYWdlID0gZXZlbnQuTWVzc2FnZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgU2F2ZVNvdXJjZUNvbnRyb2woKXtcbiAgICB0aGlzLkRldm9wc1NvdXJjZUNvbnRyb2wuU2F2ZVNvdXJjZUNvbnRyb2woKTtcbiAgfVxuXG59XG4iLCJcbjxkaXYgY2xhc3M9XCJkaWFsb2ctaGVhZGVyXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPlNvdXJjZSBDb250cm9sPC9oMj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIkNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG48L2Rpdj5cblxuPG1hdC1kaWFsb2ctY29udGVudD5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIUhhc0Nvbm5lY3Rpb25cIj5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8bGN1LWdpdC1hdXRoPjwvbGN1LWdpdC1hdXRoPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb25hdGluZXIgKm5nSWY9XCJIYXNDb25uZWN0aW9uXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsY3UtZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Vudmlyb25tZW50XT1cImRhdGEuZW52aXJvbm1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW52aXJvbm1lbnQtbG9va3VwXT1cImRhdGEuZW52aXJvbm1lbnRMb29rdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdGluZy1zb3VyY2UtY29udHJvbC1sb29rdXBdPVwiZGF0YS5zY0xvb2t1cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlLXN0YXR1cy1ldmVudCk9XCJIYW5kbGVTYXZlU3RhdHVzRXZlbnQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sY3UtZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cIkVycm9yTWVzc2FnZVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgRXJyb3JNZXNzYWdlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG5cbiAgICAgICAgPC9uZy1jb25hdGluZXI+XG5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuXG48bWF0LWRpYWxvZy1hY3Rpb25zIFxuICAgICAgICBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCIgXG4gICAgICAgIGRpdiBmeExheW91dD1cInJvd1wiIFxuICAgICAgICBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiXG4+XG4gICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZ4RmxleD1cIjI1JVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIkNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICBDYW5jZWxcblxuICAgICAgICA8L2J1dHRvbj5cblxuXG5cbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXG4gICAgICAgICpuZ0lmPVwiIVN0YXRlPy5Mb2FkaW5nXCIgXG4gICAgICAgIGZ4RmxleD1cIjI1JVwiIFxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgKGNsaWNrKT1cIlNhdmVTb3VyY2VDb250cm9sKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIURldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LnZhbGlkIHx8ICFEZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5kaXJ0eVwiPlxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj4gLS0+XG4gICAgICAgIFNhdmVcbiAgICAgIDwvYnV0dG9uPlxuXG48L21hdC1kaWFsb2ctYWN0aW9ucz5cblxuXG5cbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWNvbnRyb2wtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi9zcmMvbGliL2RpYWxvZ3Mvc291cmNlLWNvbnRyb2wtZGlhbG9nL3NvdXJjZS1jb250cm9sLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9kaWFsb2dzL3NvdXJjZS1jb250cm9sLWRpYWxvZy9zb3VyY2UtY29udHJvbC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJekUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFlbEksTUFBTSxPQUFPLDRCQUE0QjtJQW9CdkMsWUFBb0IsU0FBcUQsRUFDN0QsTUFBa0IsRUFDSSxJQUFrQixFQUN4QyxRQUFxQjtRQUhiLGNBQVMsR0FBVCxTQUFTLENBQTRDO1FBQzdELFdBQU0sR0FBTixNQUFNLENBQVk7UUFDSSxTQUFJLEdBQUosSUFBSSxDQUFjO1FBQ3hDLGFBQVEsR0FBUixRQUFRLENBQWE7SUFBSSxDQUFDO0lBbEJ0QyxJQUFXLDRCQUE0QjtRQUNyQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBRSw0QkFBNEIsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFVTSxRQUFRO0lBRWYsQ0FBQztJQUdNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sbUJBQW1CLENBQUMsUUFBZ0I7UUFDekMsSUFDRSxPQUFPLENBQUMsbURBQW1ELFFBQVEsSUFBSSxDQUFDLEVBQ3hFO1lBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRU0scUJBQXFCLENBQUMsS0FBYTtRQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsU0FBUyxFQUFDO2dCQUMvRCxRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjthQUNHO1lBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMvQyxDQUFDOzt5SEExRFUsNEJBQTRCLHdFQXNCN0IsZUFBZTs2R0F0QmQsNEJBQTRCLHNIQUU1QixnQ0FBZ0MsZ0RDdkI3Qywwb0ZBaUZBOzJGRDVEYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsMkJBQTJCOzswQkEwQmxDLE1BQU07MkJBQUMsZUFBZTtzRUFuQmxCLG1CQUFtQjtzQkFEekIsU0FBUzt1QkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IFN0YXR1cyB9IGZyb20gJ0BsY3UvY29tbW9uJztcbmltcG9ydCB7IEVhQ0Vudmlyb25tZW50QXNDb2RlIH0gZnJvbSAnQHNlbWFudGljanMvY29tbW9uJztcbmltcG9ydCB7IERldm9wc1NvdXJjZUNvbnRyb2xGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29udHJvbHMvZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0vZGV2b3BzLXNvdXJjZS1jb250cm9sLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEVhQ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lYWMuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbnNGbG93U3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9hcHBsaWNhdGlvbnMtZmxvdy5zdGF0ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU0NEaWFsb2dEYXRhIHtcbiAgZW52aXJvbm1lbnQ6IEVhQ0Vudmlyb25tZW50QXNDb2RlO1xuICBlbnZpcm9ubWVudExvb2t1cDogc3RyaW5nO1xuICBzY0xvb2t1cDogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsY3Utc291cmNlLWNvbnRyb2wtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NvdXJjZS1jb250cm9sLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NvdXJjZS1jb250cm9sLWRpYWxvZy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNvdXJjZUNvbnRyb2xEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBWaWV3Q2hpbGQoRGV2b3BzU291cmNlQ29udHJvbEZvcm1Db21wb25lbnQpXG4gIHB1YmxpYyBEZXZvcHNTb3VyY2VDb250cm9sOiBEZXZvcHNTb3VyY2VDb250cm9sRm9ybUNvbXBvbmVudDtcblxuICBwdWJsaWMgZ2V0IERldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5EZXZvcHNTb3VyY2VDb250cm9sPy5EZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwO1xuICB9XG5cbiAgcHVibGljIGdldCBIYXNDb25uZWN0aW9uKCk6IGJvb2xlYW57XG4gICAgcmV0dXJuIHRoaXMuU3RhdGUuR2l0SHViLkhhc0Nvbm5lY3Rpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IFN0YXRlKCk6IEFwcGxpY2F0aW9uc0Zsb3dTdGF0ZXtcbiAgICByZXR1cm4gdGhpcy5lYWNTdmMuU3RhdGU7XG4gIH1cblxuXG4gIHB1YmxpYyBFcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvciggcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNvdXJjZUNvbnRyb2xEaWFsb2dDb21wb25lbnQ+LFxuICAgIHByb3RlY3RlZCBlYWNTdmM6IEVhQ1NlcnZpY2UsXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBTQ0RpYWxvZ0RhdGEsXG4gICAgcHJvdGVjdGVkIHNuYWNrQmFyOiBNYXRTbmFja0JhcikgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIFxuICB9XG5cblxuICBwdWJsaWMgQ2xvc2VEaWFsb2coKXtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgcHVibGljIERlbGV0ZVNvdXJjZUNvbnRyb2woc2NMb29rdXA6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGNvbmZpcm0oYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgc291cmNlIGNvbnRyb2wgJyR7c2NMb29rdXB9Jz9gKVxuICAgICkge1xuICAgICAgdGhpcy5lYWNTdmMuRGVsZXRlU291cmNlQ29udHJvbChzY0xvb2t1cCk7XG4gICAgICB0aGlzLkNsb3NlRGlhbG9nKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIEhhbmRsZVNhdmVTdGF0dXNFdmVudChldmVudDogU3RhdHVzKXtcbiAgICBjb25zb2xlLmxvZyhcImV2ZW50IHRvIHNhdmU6IFwiLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LkNvZGUgPT09IDApe1xuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFwiU291cmNlIENvbnRyb2wgU3VjY2VzZnVsbHkgU2F2ZWRcIiwgXCJEaXNtaXNzXCIse1xuICAgICAgICBkdXJhdGlvbjogNTAwMFxuICAgICAgfSk7XG4gICAgICB0aGlzLkNsb3NlRGlhbG9nKCk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLkVycm9yTWVzc2FnZSA9IGV2ZW50Lk1lc3NhZ2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIFNhdmVTb3VyY2VDb250cm9sKCl7XG4gICAgdGhpcy5EZXZvcHNTb3VyY2VDb250cm9sLlNhdmVTb3VyY2VDb250cm9sKCk7XG4gIH1cblxufVxuIiwiXG48ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlclwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxuICAgICAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT5Tb3VyY2UgQ29udHJvbDwvaDI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJDbG9zZURpYWxvZygpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFIYXNDb25uZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPGxjdS1naXQtYXV0aD48L2xjdS1naXQtYXV0aD5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29uYXRpbmVyICpuZ0lmPVwiSGFzQ29ubmVjdGlvblwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGN1LWRldm9wcy1zb3VyY2UtY29udHJvbC1mb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbnZpcm9ubWVudF09XCJkYXRhLmVudmlyb25tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Vudmlyb25tZW50LWxvb2t1cF09XCJkYXRhLmVudmlyb25tZW50TG9va3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRpbmctc291cmNlLWNvbnRyb2wtbG9va3VwXT1cImRhdGEuc2NMb29rdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1zdGF0dXMtZXZlbnQpPVwiSGFuZGxlU2F2ZVN0YXR1c0V2ZW50KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGN1LWRldm9wcy1zb3VyY2UtY29udHJvbC1mb3JtPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJFcnJvck1lc3NhZ2VcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IEVycm9yTWVzc2FnZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuXG4gICAgICAgIDwvbmctY29uYXRpbmVyPlxuXG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucyBcbiAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiIFxuICAgICAgICBkaXYgZnhMYXlvdXQ9XCJyb3dcIiBcbiAgICAgICAgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCJcbiAgICAgICAgXG4+XG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIkRlbGV0ZVNvdXJjZUNvbnRyb2woZGF0YS5zY0xvb2t1cClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSB7eyBkYXRhLnNjTG9va3VwIH19XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWxldGVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ4RmxleD1cIjQzJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiQ2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXG5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuXG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhU3RhdGU/LkxvYWRpbmdcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ4RmxleD1cIjMwJVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiU2F2ZVNvdXJjZUNvbnRyb2woKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIURldk9wc1NvdXJjZUNvbnRyb2xGb3JtR3JvdXA/LnZhbGlkIHx8ICFEZXZPcHNTb3VyY2VDb250cm9sRm9ybUdyb3VwPy5kaXJ0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24+c2F2ZTwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG5cblxuXG4iXX0=