@unnilouis.org/vs-chipdropdown 16.3.6 → 17.0.1
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.
- package/README.md +1 -1
- package/esm2022/lib/vs-chipdd-cmp/vs-chipdd-cmp.component.mjs +271 -429
- package/esm2022/lib/vs-chipdropdown.component.mjs +12 -12
- package/esm2022/lib/vs-chipdropdown.module.mjs +58 -56
- package/esm2022/lib/vs-chipdropdown.service.mjs +45 -45
- package/esm2022/public-api.mjs +7 -7
- package/esm2022/unnilouis.org-vs-chipdropdown.mjs +4 -4
- package/fesm2022/unnilouis.org-vs-chipdropdown.mjs +349 -505
- package/fesm2022/unnilouis.org-vs-chipdropdown.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/vs-chipdd-cmp/vs-chipdd-cmp.component.d.ts +40 -47
- package/lib/vs-chipdropdown.component.d.ts +5 -5
- package/lib/vs-chipdropdown.module.d.ts +22 -22
- package/lib/vs-chipdropdown.service.d.ts +11 -11
- package/package.json +5 -9
- package/public-api.d.ts +4 -4
|
@@ -1,429 +1,271 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild
|
|
2
|
-
import {
|
|
3
|
-
import { debounceTime, distinctUntilChanged, switchMap, finalize, takeUntil, map, } from
|
|
4
|
-
import { fromEvent } from 'rxjs';
|
|
5
|
-
import {
|
|
6
|
-
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../vs-chipdropdown.service";
|
|
9
|
-
import * as i2 from "@angular/forms";
|
|
10
|
-
import * as i3 from "@angular/material/form-field";
|
|
11
|
-
import * as i4 from "@angular/material/core";
|
|
12
|
-
import * as i5 from "@angular/material/autocomplete";
|
|
13
|
-
import * as i6 from "@angular/common";
|
|
14
|
-
import * as i7 from "@angular/material/chips";
|
|
15
|
-
import * as i8 from "@angular/material/icon";
|
|
16
|
-
import * as i9 from "@ngx-translate/core";
|
|
17
|
-
export class VsChipddCmpComponent {
|
|
18
|
-
constructor(service, fb) {
|
|
19
|
-
this.service = service;
|
|
20
|
-
this.fb = fb;
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
// this.
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
this.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
this.
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
this.service
|
|
272
|
-
.GetApi(this.InputFields.url + '?page=' + this.currentpage, params)
|
|
273
|
-
.subscribe((results) => {
|
|
274
|
-
let datas = results['data'];
|
|
275
|
-
let datapagination = results['pagination'];
|
|
276
|
-
this.Dropdowndata = datas;
|
|
277
|
-
setTimeout(() => {
|
|
278
|
-
this.trigger.openPanel();
|
|
279
|
-
}, 0);
|
|
280
|
-
if (this.Dropdowndata.length >= 0) {
|
|
281
|
-
this.has_next = datapagination.has_next;
|
|
282
|
-
this.has_previous = datapagination.has_previous;
|
|
283
|
-
this.currentpage = datapagination.index;
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
dynamciformcontrolparent() {
|
|
289
|
-
return this.InputFields?.formcontrolname && this.formGroup
|
|
290
|
-
? this.InputFields?.formcontrolname
|
|
291
|
-
: 'chipvalue';
|
|
292
|
-
}
|
|
293
|
-
selected() {
|
|
294
|
-
this.Outputdata = this.chipSelectedObj;
|
|
295
|
-
if (this.InputFields?.Outputkey) {
|
|
296
|
-
this.Outputdata = this.chipSelectedId;
|
|
297
|
-
}
|
|
298
|
-
if (this.formGroup && this.InputFields?.formcontrolname) {
|
|
299
|
-
this.DropdownForm.get(this.dynamciformcontrolparent()).patchValue(this.formkeyarr);
|
|
300
|
-
}
|
|
301
|
-
console.log(this.formkeyarr);
|
|
302
|
-
console.log('this.DropdownForm.get', this.DropdownForm.value);
|
|
303
|
-
this.dataEvent.emit(this.Outputdata);
|
|
304
|
-
// let data = this.DropdownForm.value.value
|
|
305
|
-
// if (this.InputFields?.wholedata) {
|
|
306
|
-
// this.dataEvent.emit(this.chipSelectedObj);
|
|
307
|
-
// if (this.InputFields?.formgroup && this.InputFields?.formcontrolname) {
|
|
308
|
-
// this.InputFields?.formgroup
|
|
309
|
-
// .get(this.InputFields?.formcontrolname)
|
|
310
|
-
// .patchValue(this.chipSelectedObj);
|
|
311
|
-
// }
|
|
312
|
-
// }
|
|
313
|
-
// else {
|
|
314
|
-
// if (this.InputFields?.Outputkey) {
|
|
315
|
-
// this.dataEvent.emit(this.chipSelectedId);
|
|
316
|
-
// if (this.InputFields?.formgroup && this.InputFields?.formcontrolname) {
|
|
317
|
-
// this.InputFields?.formgroup
|
|
318
|
-
// .get(this.InputFields?.formcontrolname)
|
|
319
|
-
// .patchValue(this.chipSelectedId);
|
|
320
|
-
// }
|
|
321
|
-
// }
|
|
322
|
-
// else {
|
|
323
|
-
// this.dataEvent.emit(this.chipSelectedObj);
|
|
324
|
-
// if (this.InputFields?.formgroup && this.InputFields?.formcontrolname) {
|
|
325
|
-
// this.InputFields?.formgroup
|
|
326
|
-
// .get(this.InputFields?.formcontrolname)
|
|
327
|
-
// .patchValue(this.chipSelectedObj);
|
|
328
|
-
// }
|
|
329
|
-
// }
|
|
330
|
-
// }
|
|
331
|
-
}
|
|
332
|
-
searchparams(value) {
|
|
333
|
-
let params = '';
|
|
334
|
-
if (this.InputFields.params) {
|
|
335
|
-
params = this.InputFields.params;
|
|
336
|
-
}
|
|
337
|
-
let inpValue = value;
|
|
338
|
-
inpValue
|
|
339
|
-
? (params += '&' + this.InputFields.searchkey + '=' + inpValue)
|
|
340
|
-
: '';
|
|
341
|
-
return params;
|
|
342
|
-
}
|
|
343
|
-
removechip(obj) {
|
|
344
|
-
const index = this.chipSelectedObj.indexOf(obj);
|
|
345
|
-
if (index >= 0) {
|
|
346
|
-
this.chipSelectedObj.splice(index, 1);
|
|
347
|
-
console.log(this.chipSelectedObj);
|
|
348
|
-
this.chipSelectedId.splice(index, 1);
|
|
349
|
-
console.log(this.chipSelectedId);
|
|
350
|
-
this.formkeyarr.splice(index, 1);
|
|
351
|
-
console.log('this.formkeyarr', this.formkeyarr);
|
|
352
|
-
this.DropInput.nativeElement.value = '';
|
|
353
|
-
this.selected();
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
venSelected(datas) {
|
|
357
|
-
let data = !datas && datas === '' ? datas : datas.option.value;
|
|
358
|
-
this.isOptionSelected = true;
|
|
359
|
-
this.DropInput.nativeElement.value = '';
|
|
360
|
-
console.log('event.option.value', data);
|
|
361
|
-
this.selectvenByName(data[this.comparekey(data)]);
|
|
362
|
-
console.log('chipSelectedvenid', this.chipSelectedObj);
|
|
363
|
-
}
|
|
364
|
-
selectvenByName(ven) {
|
|
365
|
-
let foundemp1 = this.chipSelectedObj.filter((e) => e[this.comparekey(e)] == ven);
|
|
366
|
-
if (foundemp1.length) {
|
|
367
|
-
return;
|
|
368
|
-
}
|
|
369
|
-
let foundemp = this.Dropdowndata.filter((e) => e[this.comparekey(e)] == ven);
|
|
370
|
-
if (foundemp.length) {
|
|
371
|
-
this.chipSelectedObj.push(foundemp[0]);
|
|
372
|
-
if (this.InputFields?.Outputkey) {
|
|
373
|
-
this.chipSelectedId.push(foundemp[0][this.InputFields?.Outputkey]);
|
|
374
|
-
}
|
|
375
|
-
else {
|
|
376
|
-
this.chipSelectedId.push(foundemp[0].id);
|
|
377
|
-
}
|
|
378
|
-
if (this.InputFields?.formkey) {
|
|
379
|
-
this.formkeyarr.push(foundemp[0][this.InputFields?.formkey]);
|
|
380
|
-
}
|
|
381
|
-
this.selected();
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
comparekey(e) {
|
|
385
|
-
if (this.InputFields?.comparekey) {
|
|
386
|
-
return this.InputFields?.comparekey;
|
|
387
|
-
}
|
|
388
|
-
else {
|
|
389
|
-
if (e?.id) {
|
|
390
|
-
return 'id';
|
|
391
|
-
}
|
|
392
|
-
else {
|
|
393
|
-
return this.InputFields.displaykey;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VsChipddCmpComponent, deps: [{ token: i1.VsChipdropdownService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
398
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: VsChipddCmpComponent, selector: "lib-vs-chipdd-cmp", inputs: { InputFields: "InputFields", ResetForm: "ResetForm", Backendapi: "Backendapi", formGroup: "formGroup" }, outputs: { dataEvent: "dataEvent" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: ["autoCompleteInput"], descendants: true, read: MatAutocompleteTrigger }, { propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "matAutocompleteApp", first: true, predicate: ["scrolll"], descendants: true }, { propertyName: "DropInput", first: true, predicate: ["DropInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <form [formGroup]=\"DropdownForm\" id=\"matChip-size\">\r\n <!-- class=\"mat-chipScroll\" -->\r\n <mat-form-field\r\n appearance=\"outline\"\r\n (click)=\"!this.InputFields?.fronentdata ? this.getdropdown('') : ''\"\r\n >\r\n <mat-label>{{ InputFields?.label | translate }}</mat-label>\r\n <!-- class=\"chip-container\" -->\r\n <mat-chip-grid multiple #chipListvendor>\r\n <!-- class=\"mat-chipEx\" -->\r\n <mat-chip-row\r\n *ngFor=\"let obj of chipSelectedObj\"\r\n [removable]=\"true\"\r\n (removed)=\"removechip(obj)\"\r\n >\r\n {{ obj[InputFields?.displaykey] }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n <!-- class=\"matformfieldinputstyle\" -->\r\n <input\r\n #DropInput\r\n [matAutocomplete]=\"scrolll\"\r\n [matChipInputFor]=\"chipListvendor\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorsKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n #autoCompleteInput=\"matAutocompleteTrigger\"\r\n [formControlName]=\"this.dynamciformcontrolparent()\"\r\n />\r\n </mat-chip-grid>\r\n <mat-autocomplete\r\n #scrolll=\"matAutocomplete\"\r\n (opened)=\"autocompleteAppScroll()\"\r\n (optionSelected)=\"venSelected($event)\"\r\n >\r\n <ng-container>\r\n <mat-option\r\n *ngFor=\"let dropvalues of Dropdowndata\"\r\n [value]=\"\r\n this.InputFields?.formkey\r\n ? dropvalues[this.InputFields?.formkey]\r\n : dropvalues\r\n \"\r\n >\r\n {{ dropvalues[InputFields?.displaykey] }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </form>\r\n</div>\r\n<!-- (click)=\"selected()\"\r\n -->\r\n<!-- (optionSelected)=\"venSelected($event)\"\r\n -->\r\n<!-- (onSelectionChange)=\"venSelected(dropvalues)\"\r\n -->", styles: [""], dependencies: [{ kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["tabIndex", "disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "editable"], outputs: ["edited"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
|
|
399
|
-
}
|
|
400
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: VsChipddCmpComponent, decorators: [{
|
|
401
|
-
type: Component,
|
|
402
|
-
args: [{ selector: 'lib-vs-chipdd-cmp', template: "<div>\r\n <form [formGroup]=\"DropdownForm\" id=\"matChip-size\">\r\n <!-- class=\"mat-chipScroll\" -->\r\n <mat-form-field\r\n appearance=\"outline\"\r\n (click)=\"!this.InputFields?.fronentdata ? this.getdropdown('') : ''\"\r\n >\r\n <mat-label>{{ InputFields?.label | translate }}</mat-label>\r\n <!-- class=\"chip-container\" -->\r\n <mat-chip-grid multiple #chipListvendor>\r\n <!-- class=\"mat-chipEx\" -->\r\n <mat-chip-row\r\n *ngFor=\"let obj of chipSelectedObj\"\r\n [removable]=\"true\"\r\n (removed)=\"removechip(obj)\"\r\n >\r\n {{ obj[InputFields?.displaykey] }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n <!-- class=\"matformfieldinputstyle\" -->\r\n <input\r\n #DropInput\r\n [matAutocomplete]=\"scrolll\"\r\n [matChipInputFor]=\"chipListvendor\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorsKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n #autoCompleteInput=\"matAutocompleteTrigger\"\r\n [formControlName]=\"this.dynamciformcontrolparent()\"\r\n />\r\n </mat-chip-grid>\r\n <mat-autocomplete\r\n #scrolll=\"matAutocomplete\"\r\n (opened)=\"autocompleteAppScroll()\"\r\n (optionSelected)=\"venSelected($event)\"\r\n >\r\n <ng-container>\r\n <mat-option\r\n *ngFor=\"let dropvalues of Dropdowndata\"\r\n [value]=\"\r\n this.InputFields?.formkey\r\n ? dropvalues[this.InputFields?.formkey]\r\n : dropvalues\r\n \"\r\n >\r\n {{ dropvalues[InputFields?.displaykey] }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </form>\r\n</div>\r\n<!-- (click)=\"selected()\"\r\n -->\r\n<!-- (optionSelected)=\"venSelected($event)\"\r\n -->\r\n<!-- (onSelectionChange)=\"venSelected(dropvalues)\"\r\n -->" }]
|
|
403
|
-
}], ctorParameters: function () { return [{ type: i1.VsChipdropdownService }, { type: i2.FormBuilder }]; }, propDecorators: { InputFields: [{
|
|
404
|
-
type: Input
|
|
405
|
-
}], ResetForm: [{
|
|
406
|
-
type: Input
|
|
407
|
-
}], Backendapi: [{
|
|
408
|
-
type: Input
|
|
409
|
-
}], trigger: [{
|
|
410
|
-
type: ViewChild,
|
|
411
|
-
args: ['autoCompleteInput', {
|
|
412
|
-
static: false,
|
|
413
|
-
read: MatAutocompleteTrigger,
|
|
414
|
-
}]
|
|
415
|
-
}], autocompleteTrigger: [{
|
|
416
|
-
type: ViewChild,
|
|
417
|
-
args: [MatAutocompleteTrigger]
|
|
418
|
-
}], matAutocompleteApp: [{
|
|
419
|
-
type: ViewChild,
|
|
420
|
-
args: ['scrolll']
|
|
421
|
-
}], dataEvent: [{
|
|
422
|
-
type: Output
|
|
423
|
-
}], DropInput: [{
|
|
424
|
-
type: ViewChild,
|
|
425
|
-
args: ['DropInput']
|
|
426
|
-
}], formGroup: [{
|
|
427
|
-
type: Input
|
|
428
|
-
}] } });
|
|
429
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnMtY2hpcGRkLWNtcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92cy1jaGlwZHJvcGRvd24vc3JjL2xpYi92cy1jaGlwZGQtY21wL3ZzLWNoaXBkZC1jbXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdnMtY2hpcGRyb3Bkb3duL3NyYy9saWIvdnMtY2hpcGRkLWNtcC92cy1jaGlwZGQtY21wLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxzQkFBc0IsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsWUFBWSxFQUNaLG9CQUFvQixFQUdwQixTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCxHQUFHLEdBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQW9CLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQWUsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFNckQsTUFBTSxPQUFPLG9CQUFvQjtJQUUvQixZQUNVLE9BQThCLEVBQzlCLEVBQWU7UUFEZixZQUFPLEdBQVAsT0FBTyxDQUF1QjtRQUM5QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBSWhCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFXMUIsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXhELHdCQUFtQixHQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhELGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIs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b250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCxcclxuICBNYXRBdXRvY29tcGxldGUsXHJcbiAgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcixcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQge1xyXG4gIGRlYm91bmNlVGltZSxcclxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICB0YXAsXHJcbiAgZmlsdGVyLFxyXG4gIHN3aXRjaE1hcCxcclxuICBmaW5hbGl6ZSxcclxuICB0YWtlVW50aWwsXHJcbiAgbWFwLFxyXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFZzQ2hpcGRyb3Bkb3duU2VydmljZSB9IGZyb20gJy4uL3ZzLWNoaXBkcm9wZG93bi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENPTU1BLCBFTlRFUiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXZzLWNoaXBkZC1jbXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92cy1jaGlwZGQtY21wLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi92cy1jaGlwZGQtY21wLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWc0NoaXBkZENtcENvbXBvbmVudCB7XHJcbiAgRHJvZG93bkxvYWRpbmc6IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFZzQ2hpcGRyb3Bkb3duU2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyXHJcbiAgKSB7fVxyXG4gIEBJbnB1dCgpIElucHV0RmllbGRzOiBhbnk7XHJcbiAgQElucHV0KCkgUmVzZXRGb3JtOiBhbnk7XHJcbiAgQElucHV0KCkgQmFja2VuZGFwaTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2F1dG9Db21wbGV0ZUlucHV0Jywge1xyXG4gICAgc3RhdGljOiBmYWxzZSxcclxuICAgIHJlYWQ6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsXHJcbiAgfSlcclxuICB0cmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyO1xyXG5cclxuICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpXHJcbiAgYXV0b2NvbXBsZXRlVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcclxuICBAVmlld0NoaWxkKCdzY3JvbGxsJykgbWF0QXV0b2NvbXBsZXRlQXBwOiBNYXRBdXRvY29tcGxldGU7XHJcbiAgQE91dHB1dCgpIGRhdGFFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAVmlld0NoaWxkKCdEcm9wSW5wdXQnKSBEcm9wSW5wdXQ6IGFueTtcclxuICByZWFkb25seSBzZXBhcmF0b3JzS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUFdO1xyXG5cclxuICBoYXNfbmV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnRwYWdlOiBudW1iZXIgPSAxO1xyXG4gIERyb3Bkb3duZGF0YTogYW55ID0gW107XHJcbiAgaGFzX3ByZXZpb3VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRHJvcGRvd25Gb3JtOiBGb3JtR3JvdXA7XHJcbiAgY2hpcFNlbGVjdGVkSWQ6IGFueSA9IFtdO1xyXG4gIGNoaXBTZWxlY3RlZE9iajogYW55ID0gW107XHJcbiAgQElucHV0KCkgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gaWYgKHRoaXMuZm9ybUdyb3VwKSB7XHJcbiAgICAvLyAgIHRoaXMuRHJvcGRvd25Gb3JtID0gdGhpcy5mb3JtR3JvdXA7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLkRyb3Bkb3duRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgLy8gICAgIHZhbHVlOiAnJyxcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLmR1cG5nb25pdCgpO1xyXG5cclxuICAgIC8vIGlmICh0aGlzLklucHV0RmllbGRzPy5kZWZhdWx0dmFsdWUpIHtcclxuICAgIC8vICAgdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KFwidmFsdWVcIikucGF0Y2hWYWx1ZSh0aGlzLklucHV0RmllbGRzPy5kZWZhdWx0dmFsdWUpXHJcbiAgICAvLyAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqID0gdGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlXHJcbiAgICAvLyAgIGlmICh0aGlzLmNoaXBTZWxlY3RlZE9iai5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgZm9yIChsZXQgZm91bmRlbXAgb2YgdGhpcy5jaGlwU2VsZWN0ZWRPYmopIHtcclxuICAgIC8vICAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5wdXNoKGZvdW5kZW1wW3RoaXMuSW5wdXRGaWVsZHM/Lk91dHB1dGtleV0pXHJcblxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuY2hpcFNlbGVjdGVkSWQucHVzaChmb3VuZGVtcC5pZClcclxuXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYgKHRoaXMuSW5wdXRGaWVsZHM/LmZyb25lbnRkYXRhKSB7XHJcbiAgICAvLyAgIHRoaXMuRHJvcGRvd25kYXRhID0gdGhpcy5JbnB1dEZpZWxkcz8uZGF0YVxyXG5cclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLmdldGRyb3Bkb3duKCcnKVxyXG4gICAgLy8gfVxyXG4gIH1cclxuICBsb29vcCgpIHtcclxuICAgIGZvciAobGV0IGZvdW5kZW1wIG9mIHRoaXMuY2hpcFNlbGVjdGVkT2JqKSB7XHJcbiAgICAgIGlmKCEoZm91bmRlbXAgaW5zdGFuY2VvZiBOdW1iZXIpKXtcclxuICAgICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5KSB7XHJcbiAgICAgICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnB1c2goZm91bmRlbXBbdGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5wdXNoKGZvdW5kZW1wLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1rZXkpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybWtleWFyci5wdXNoKGZvdW5kZW1wW3RoaXMuSW5wdXRGaWVsZHM/LmZvcm1rZXldKTtcclxuICAgICAgICB9IFxyXG4gICAgICB9XHJcbiAgICAgIH1cclxuICAgICBcclxuICB9XHJcbiAgZHVwbmdvbml0KCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuRHJvcGRvd25Gb3JtID0gdGhpcy5mb3JtR3JvdXA7XHJcbiAgICAgIGlmICghdGhpcy5Ecm9wZG93bkZvcm0uY29udGFpbnModGhpcy5JbnB1dEZpZWxkcz8uZm9ybWNvbnRyb2xuYW1lKSkge1xyXG4gICAgICAgIHRoaXMuRHJvcGRvd25Gb3JtLmFkZENvbnRyb2woXHJcbiAgICAgICAgICB0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpLFxyXG4gICAgICAgICAgbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IFtdLCBkaXNhYmxlZDogdGhpcy5JbnB1dEZpZWxkcz8uZGlzYWJsZWQgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5JbnB1dEZpZWxkcz8uZGlzYWJsZWQgPyB0aGlzLkRyb3Bkb3duRm9ybS5nZXQoJ2NoaXB2YWx1ZScpLmRpc2FibGUoKSA6ICcnICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5Ecm9wZG93bkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICBjaGlwdmFsdWU6IFtdLGRpc2FibGVkOiB0aGlzLklucHV0RmllbGRzPy5kaXNhYmxlZFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5Ecm9wZG93bkZvcm0nLCB0aGlzLkRyb3Bkb3duRm9ybS52YWx1ZSk7XHJcbiAgICAvLyB0aGlzLmNoaXBTZWxlY3RlZE9iaiA9XHJcbiAgICAvLyAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldCh0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpKS52YWx1ZSAmJlxyXG4gICAgLy8gICB0aGlzLkRyb3Bkb3duRm9ybS5nZXQodGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKSkudmFsdWUubGVuZ3RoICE9PSAwXHJcbiAgICAvLyAgICAgPyB0aGlzLkRyb3Bkb3duRm9ybS5nZXQodGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKSkudmFsdWVcclxuICAgIC8vICAgICA6IFtdO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKCd0aGlzLmNoaXBTZWxlY3RlZE9iaicsIHRoaXMuY2hpcFNlbGVjdGVkT2JqKTtcclxuXHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlKSB7XHJcbiAgICAgIC8vIHRoaXMuRHJvcGRvd25Gb3JtLmdldCh0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpKS5wYXRjaFZhbHVlKFxyXG4gICAgICAvLyAgIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1rZXlcclxuICAgICAgLy8gICAgID8gdGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlW3RoaXMuSW5wdXRGaWVsZHM/LmZvcm1rZXldXHJcbiAgICAgIC8vICAgICA6IHRoaXMuSW5wdXRGaWVsZHM/LmRlZmF1bHR2YWx1ZVxyXG4gICAgICAvLyApO1xyXG4gICAgICAvLyB0aGlzLkRyb3Bkb3duRm9ybS5nZXQodGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKSkucGF0Y2hWYWx1ZSh0aGlzLklucHV0RmllbGRzPy5kZWZhdWx0dmFsdWUpO1xyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZE9iaiA9IHRoaXMuSW5wdXRGaWVsZHM/LmRlZmF1bHR2YWx1ZTtcclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZCA9IFtdO1xyXG4gICAgICB0aGlzLmZvcm1rZXlhcnIgPSBbXTtcclxuICAgICAgaWYgKHRoaXMuY2hpcFNlbGVjdGVkT2JqLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmxvb29wKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLkRyb3Bkb3duRm9ybS5nZXQodGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKSkudmFsdWUgJiZcclxuICAgICAgdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KHRoaXMuZHluYW1jaWZvcm1jb250cm9scGFyZW50KCkpLnZhbHVlLmxlbmd0aCAhPT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqID0gdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KFxyXG4gICAgICAgIHRoaXMuZHluYW1jaWZvcm1jb250cm9scGFyZW50KClcclxuICAgICAgKS52YWx1ZTtcclxuICAgICAgY29uc29sZS5sb2coJ3Rlc3QnLHRoaXMuY2hpcFNlbGVjdGVkT2JqID0gdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KFxyXG4gICAgICAgIHRoaXMuZHluYW1jaWZvcm1jb250cm9scGFyZW50KClcclxuICAgICAgKS52YWx1ZSlcclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZCA9IFtdO1xyXG4gICAgICB0aGlzLmZvcm1rZXlhcnIgPSBbXTtcclxuICAgICAgdGhpcy5sb29vcCgpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZnJvbmVudGRhdGEpIHtcclxuICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSB0aGlzLklucHV0RmllbGRzPy5kYXRhO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kcm9wZG93bnNlYXJjaCgpO1xyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMuZ2V0ZHJvcGRvd24oJycpXHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLklucHV0RmllbGRzICYmIGNoYW5nZXMuSW5wdXRGaWVsZHMuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdTdW1tYXJ5IExvZyBDaGFuZ2VzJyk7XHJcbiAgICAgIHRoaXMuY3VycmVudHBhZ2UgPSAxO1xyXG4gICAgICB0aGlzLmR1cG5nb25pdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXMuUmVzZXRGb3JtICYmIGNoYW5nZXMuUmVzZXRGb3JtLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnaGl0dGVkJyk7XHJcbiAgICAgIC8vIHRoaXMuRHJvcGRvd25Gb3JtLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuY3VycmVudHBhZ2UgPSAxO1xyXG4gICAgICB0aGlzLmR1cG5nb25pdCgpO1xyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZElkID0gW107XHJcbiAgICAgIHRoaXMuZm9ybWtleWFyciA9IFtdO1xyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZE9iaiA9IFtdO1xyXG4gICAgICB0aGlzLmRhdGFFdmVudC5lbWl0KFtdKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gcHVibGljIGRpc3BsYXlkZXZlbG9wY2xpZW50KGNsdDogYW55LCBrZXk6IHN0cmluZykge1xyXG4gIC8vICAgcmV0dXJuIGtleVtjbHRdO1xyXG4gIC8vIH1cclxuICBhdXRvY29tcGxldGVBcHBTY3JvbGwoKSB7XHJcbiAgICBpZiAoIXRoaXMuSW5wdXRGaWVsZHM/LmZyb25lbnRkYXRhKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMubWF0QXV0b2NvbXBsZXRlQXBwICYmXHJcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIgJiZcclxuICAgICAgICAgIHRoaXMubWF0QXV0b2NvbXBsZXRlQXBwLnBhbmVsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBmcm9tRXZlbnQodGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWwubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcCgoeCkgPT4gdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3ApLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbChcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5wYW5lbENsb3NpbmdBY3Rpb25zIGFzIE9ic2VydmFibGU8YW55PlxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID1cclxuICAgICAgICAgICAgICAgIHRoaXMubWF0QXV0b2NvbXBsZXRlQXBwLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNjcm9sbEhlaWdodCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdEF1dG9jb21wbGV0ZUFwcC5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50SGVpZ2h0ID1cclxuICAgICAgICAgICAgICAgIHRoaXMubWF0QXV0b2NvbXBsZXRlQXBwLnBhbmVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgIGNvbnN0IGF0Qm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gMSA8PSBzY3JvbGxUb3AgKyBlbGVtZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgIGlmIChhdEJvdHRvbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzX25leHQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5Ecm9wSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMuc2VhcmNocGFyYW1zKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IHRoaXMuY3VycmVudHBhZ2UgKyAxO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50cGFnZSA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgIC5HZXRBcGkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuSW5wdXRGaWVsZHMudXJsICsgJz9wYWdlPScgKyB0aGlzLmN1cnJlbnRwYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhcyA9IHJlc3VsdHNbJ2RhdGEnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFwYWdpbmF0aW9uID0gcmVzdWx0c1sncGFnaW5hdGlvbiddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkRyb3Bkb3duZGF0YSA9IHRoaXMuRHJvcGRvd25kYXRhLmNvbmNhdChkYXRhcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLkRyb3Bkb3duZGF0YScsIHRoaXMuRHJvcGRvd25kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuRHJvcGRvd25kYXRhLmxlbmd0aCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNfbmV4dCA9IGRhdGFwYWdpbmF0aW9uLmhhc19uZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzX3ByZXZpb3VzID0gZGF0YXBhZ2luYXRpb24uaGFzX3ByZXZpb3VzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudHBhZ2UgPSBkYXRhcGFnaW5hdGlvbi5pbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlzT3B0aW9uU2VsZWN0ZWQ6Ym9vbGVhbj1mYWxzZVxyXG4gIGRyb3Bkb3duc2VhcmNoKCkge1xyXG4gICAgY29uc3QgY29udHJvbE5hbWUgPSB0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpO1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuRHJvcGRvd25Gb3JtLmdldChjb250cm9sTmFtZSk7XHJcbiAgICBpZiAoY29udHJvbCBcclxuICAgIFxyXG4gICAgIFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICghdGhpcy5JbnB1dEZpZWxkcz8uZnJvbmVudGRhdGEpIHtcclxuICAgICAgICBpZiAoIXRoaXMuSW5wdXRGaWVsZHM/LnVybCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLkRyb3Bkb3duRm9ybS5nZXQodGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKSlcclxuICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIC8vIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5Ecm9kb3duTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2luc2lkZSB0YXAnKTtcclxuICAgICAgICAgICAgLy8gfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICBpZih0aGlzLmlzT3B0aW9uU2VsZWN0ZWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc09wdGlvblNlbGVjdGVkPWZhbHNlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW11cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMuc2VhcmNocGFyYW1zKHZhbHVlKTtcclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRwYWdlID0gMTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImhpdGVlZWVkZGRkZGRkZGRkZGRkZD4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PlwiKVxyXG5cclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuR2V0QXBpKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLklucHV0RmllbGRzLnVybCArICc/cGFnZT0nICsgdGhpcy5jdXJyZW50cGFnZSxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Ecm9kb3duTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFFdmVudC5lbWl0KCcnKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkYXRhcyA9IHJlc3VsdHNbJ2RhdGEnXTtcclxuICAgICAgICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSBkYXRhcztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSB0aGlzLklucHV0RmllbGRzPy5kYXRhXHJcblxyXG4gICAgICAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldCh0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuRHJvcGRvd25kYXRhID0gdGhpcy5JbnB1dEZpZWxkcz8uZGF0YS5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgICAgICAgaXRlbVt0aGlzLklucHV0RmllbGRzPy5kaXNwbGF5a2V5XVxyXG4gICAgICAgICAgICAgICAgPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXModmFsdWU/LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gaWYgKGNvbnRyb2wgJiYgIXRoaXMuSW5wdXRGaWVsZHM/LmZyb25lbnRkYXRhKSB7XHJcbiAgICAvLyAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldCh0aGlzLmR5bmFtY2lmb3JtY29udHJvbHBhcmVudCgpKVxyXG4gICAgLy8gICAgIC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgIC8vICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgLy8gICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgIC8vICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuRHJvZG93bkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICBjb25zb2xlLmxvZygnaW5zaWRlIHRhcCcpO1xyXG4gICAgLy8gICAgICAgfSksXHJcbiAgICAvLyAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnNlYXJjaHBhcmFtcyh2YWx1ZSk7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuY3VycmVudHBhZ2UgPSAxO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlXHJcbiAgICAvLyAgICAgICAgICAgLkdldEFwaShcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMuSW5wdXRGaWVsZHMudXJsICsgJz9wYWdlPScgKyB0aGlzLmN1cnJlbnRwYWdlLFxyXG4gICAgLy8gICAgICAgICAgICAgcGFyYW1zXHJcbiAgICAvLyAgICAgICAgICAgKVxyXG4gICAgLy8gICAgICAgICAgIC5waXBlKFxyXG4gICAgLy8gICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLkRyb2Rvd25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICB9KVxyXG4gICAgLy8gICAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICB9KVxyXG4gICAgLy8gICAgIClcclxuICAgIC8vICAgICAuc3Vic2NyaWJlKChyZXN1bHRzOiBhbnlbXSkgPT4ge1xyXG4gICAgLy8gICAgICAgbGV0IGRhdGFzID0gcmVzdWx0c1snZGF0YSddO1xyXG4gICAgLy8gICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSBkYXRhcztcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgZ2V0ZHJvcGRvd24odmFsdWUpIHtcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRwYWdlID0gMTtcclxuICAgIGlmICggdGhpcy5JbnB1dEZpZWxkcy51cmwpIHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHRoaXMuc2VhcmNocGFyYW1zKHZhbHVlKTtcclxuICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLkdldEFwaSh0aGlzLklucHV0RmllbGRzLnVybCArICc/cGFnZT0nICsgdGhpcy5jdXJyZW50cGFnZSwgcGFyYW1zKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZGF0YXMgPSByZXN1bHRzWydkYXRhJ107XHJcbiAgICAgICAgICBsZXQgZGF0YXBhZ2luYXRpb24gPSByZXN1bHRzWydwYWdpbmF0aW9uJ107XHJcbiAgICAgICAgICB0aGlzLkRyb3Bkb3duZGF0YSA9IGRhdGFzO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlci5vcGVuUGFuZWwoKTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgaWYgKHRoaXMuRHJvcGRvd25kYXRhLmxlbmd0aCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzX25leHQgPSBkYXRhcGFnaW5hdGlvbi5oYXNfbmV4dDtcclxuICAgICAgICAgICAgdGhpcy5oYXNfcHJldmlvdXMgPSBkYXRhcGFnaW5hdGlvbi5oYXNfcHJldmlvdXM7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudHBhZ2UgPSBkYXRhcGFnaW5hdGlvbi5pbmRleDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgT3V0cHV0ZGF0YTogYW55ID0gW107XHJcbiAgZHluYW1jaWZvcm1jb250cm9scGFyZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSAmJiB0aGlzLmZvcm1Hcm91cFxyXG4gICAgICA/IHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZVxyXG4gICAgICA6ICdjaGlwdmFsdWUnO1xyXG4gIH1cclxuICBzZWxlY3RlZCgpIHtcclxuICAgIHRoaXMuT3V0cHV0ZGF0YSA9IHRoaXMuY2hpcFNlbGVjdGVkT2JqO1xyXG4gICAgaWYgKHRoaXMuSW5wdXRGaWVsZHM/Lk91dHB1dGtleSkge1xyXG4gICAgICB0aGlzLk91dHB1dGRhdGEgPSB0aGlzLmNoaXBTZWxlY3RlZElkO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwICYmIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSkge1xyXG4gICAgICB0aGlzLkRyb3Bkb3duRm9ybS5nZXQodGhpcy5keW5hbWNpZm9ybWNvbnRyb2xwYXJlbnQoKSkucGF0Y2hWYWx1ZShcclxuICAgICAgICB0aGlzLmZvcm1rZXlhcnJcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHRoaXMuZm9ybWtleWFycik7XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5Ecm9wZG93bkZvcm0uZ2V0JywgdGhpcy5Ecm9wZG93bkZvcm0udmFsdWUpO1xyXG4gICAgdGhpcy5kYXRhRXZlbnQuZW1pdCh0aGlzLk91dHB1dGRhdGEpO1xyXG5cclxuICAgIC8vIGxldCBkYXRhID0gdGhpcy5Ecm9wZG93bkZvcm0udmFsdWUudmFsdWVcclxuICAgIC8vIGlmICh0aGlzLklucHV0RmllbGRzPy53aG9sZWRhdGEpIHtcclxuICAgIC8vICAgdGhpcy5kYXRhRXZlbnQuZW1pdCh0aGlzLmNoaXBTZWxlY3RlZE9iaik7XHJcbiAgICAvLyAgIGlmICh0aGlzLklucHV0RmllbGRzPy5mb3JtZ3JvdXAgJiYgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWNvbnRyb2xuYW1lKSB7XHJcbiAgICAvLyAgICAgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWdyb3VwXHJcbiAgICAvLyAgICAgICAuZ2V0KHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSlcclxuICAgIC8vICAgICAgIC5wYXRjaFZhbHVlKHRoaXMuY2hpcFNlbGVjdGVkT2JqKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgIC8vICAgICB0aGlzLmRhdGFFdmVudC5lbWl0KHRoaXMuY2hpcFNlbGVjdGVkSWQpO1xyXG4gICAgLy8gICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5mb3JtZ3JvdXAgJiYgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWNvbnRyb2xuYW1lKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLklucHV0RmllbGRzPy5mb3JtZ3JvdXBcclxuICAgIC8vICAgICAgICAgLmdldCh0aGlzLklucHV0RmllbGRzPy5mb3JtY29udHJvbG5hbWUpXHJcbiAgICAvLyAgICAgICAgIC5wYXRjaFZhbHVlKHRoaXMuY2hpcFNlbGVjdGVkSWQpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBlbHNlIHtcclxuICAgIC8vICAgICB0aGlzLmRhdGFFdmVudC5lbWl0KHRoaXMuY2hpcFNlbGVjdGVkT2JqKTtcclxuICAgIC8vICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZm9ybWdyb3VwICYmIHRoaXMuSW5wdXRGaWVsZHM/LmZvcm1jb250cm9sbmFtZSkge1xyXG4gICAgLy8gICAgICAgdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWdyb3VwXHJcbiAgICAvLyAgICAgICAgIC5nZXQodGhpcy5JbnB1dEZpZWxkcz8uZm9ybWNvbnRyb2xuYW1lKVxyXG4gICAgLy8gICAgICAgICAucGF0Y2hWYWx1ZSh0aGlzLmNoaXBTZWxlY3RlZE9iaik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gfVxyXG4gIH1cclxuICBzZWFyY2hwYXJhbXModmFsdWUpIHtcclxuICAgIGxldCBwYXJhbXMgPSAnJztcclxuICAgIGlmICh0aGlzLklucHV0RmllbGRzLnBhcmFtcykge1xyXG4gICAgICBwYXJhbXMgPSB0aGlzLklucHV0RmllbGRzLnBhcmFtcztcclxuICAgIH1cclxuICAgIGxldCBpbnBWYWx1ZSA9IHZhbHVlO1xyXG4gICAgaW5wVmFsdWVcclxuICAgICAgPyAocGFyYW1zICs9ICcmJyArIHRoaXMuSW5wdXRGaWVsZHMuc2VhcmNoa2V5ICsgJz0nICsgaW5wVmFsdWUpXHJcbiAgICAgIDogJyc7XHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG4gIH1cclxuICByZW1vdmVjaGlwKG9iaikge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNoaXBTZWxlY3RlZE9iai5pbmRleE9mKG9iaik7XHJcblxyXG4gICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRPYmouc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5jaGlwU2VsZWN0ZWRPYmopO1xyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpcFNlbGVjdGVkSWQpO1xyXG4gICAgICB0aGlzLmZvcm1rZXlhcnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgY29uc29sZS5sb2coJ3RoaXMuZm9ybWtleWFycicsIHRoaXMuZm9ybWtleWFycik7XHJcblxyXG4gICAgICB0aGlzLkRyb3BJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgZm9ybWtleWFycjphbnk9W11cclxuICBwdWJsaWMgdmVuU2VsZWN0ZWQoZGF0YXMpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhPSFkYXRhcyAmJiBkYXRhcz09PScnICA/IGRhdGFzIDpkYXRhcy5vcHRpb24udmFsdWVcclxuICAgIHRoaXMuaXNPcHRpb25TZWxlY3RlZD10cnVlXHJcbiAgICB0aGlzLkRyb3BJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICBjb25zb2xlLmxvZygnZXZlbnQub3B0aW9uLnZhbHVlJywgZGF0YSk7XHJcbiAgICB0aGlzLnNlbGVjdHZlbkJ5TmFtZShcclxuICAgICAgZGF0YVt0aGlzLmNvbXBhcmVrZXkoZGF0YSldXHJcbiAgICApO1xyXG4gICAgY29uc29sZS5sb2coJ2NoaXBTZWxlY3RlZHZlbmlkJywgdGhpcy5jaGlwU2VsZWN0ZWRPYmopO1xyXG4gIH1cclxuICBwcml2YXRlIHNlbGVjdHZlbkJ5TmFtZSh2ZW4pIHtcclxuICAgIGxldCBmb3VuZGVtcDEgPSB0aGlzLmNoaXBTZWxlY3RlZE9iai5maWx0ZXIoXHJcbiAgICAgIChlKSA9PiBlW3RoaXMuY29tcGFyZWtleShlKV0gPT0gdmVuXHJcbiAgICApO1xyXG4gICAgaWYgKGZvdW5kZW1wMS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvdW5kZW1wID0gdGhpcy5Ecm9wZG93bmRhdGEuZmlsdGVyKFxyXG4gICAgICAoZSkgPT4gZVt0aGlzLmNvbXBhcmVrZXkoZSldID09IHZlblxyXG4gICAgKTtcclxuICAgIGlmIChmb3VuZGVtcC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRPYmoucHVzaChmb3VuZGVtcFswXSk7XHJcbiAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnB1c2goZm91bmRlbXBbMF1bdGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5XSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5wdXNoKGZvdW5kZW1wWzBdLmlkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZm9ybWtleSkge1xyXG4gICAgICAgIHRoaXMuZm9ybWtleWFyci5wdXNoKGZvdW5kZW1wWzBdW3RoaXMuSW5wdXRGaWVsZHM/LmZvcm1rZXldKTtcclxuICAgICAgfSBcclxuICAgICAgdGhpcy5zZWxlY3RlZCgpXHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbXBhcmVrZXkoZSkge1xyXG4gICAgaWYgKHRoaXMuSW5wdXRGaWVsZHM/LmNvbXBhcmVrZXkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuSW5wdXRGaWVsZHM/LmNvbXBhcmVrZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZT8uaWQpIHtcclxuICAgICAgICByZXR1cm4gJ2lkJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5JbnB1dEZpZWxkcy5kaXNwbGF5a2V5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJEcm9wZG93bkZvcm1cIiBpZD1cIm1hdENoaXAtc2l6ZVwiPlxyXG4gICAgPCEtLSBjbGFzcz1cIm1hdC1jaGlwU2Nyb2xsXCIgLS0+XHJcbiAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAoY2xpY2spPVwiIXRoaXMuSW5wdXRGaWVsZHM/LmZyb25lbnRkYXRhID8gdGhpcy5nZXRkcm9wZG93bignJykgOiAnJ1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3sgSW5wdXRGaWVsZHM/LmxhYmVsIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDwhLS0gY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiIC0tPlxyXG4gICAgICA8bWF0LWNoaXAtZ3JpZCBtdWx0aXBsZSAjY2hpcExpc3R2ZW5kb3I+XHJcbiAgICAgICAgPCEtLSBjbGFzcz1cIm1hdC1jaGlwRXhcIiAtLT5cclxuICAgICAgICA8bWF0LWNoaXAtcm93XHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgb2JqIG9mIGNoaXBTZWxlY3RlZE9ialwiXHJcbiAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlY2hpcChvYmopXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBvYmpbSW5wdXRGaWVsZHM/LmRpc3BsYXlrZXldIH19XHJcbiAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbWF0LWNoaXAtcm93PlxyXG4gICAgICAgIDwhLS0gY2xhc3M9XCJtYXRmb3JtZmllbGRpbnB1dHN0eWxlXCIgLS0+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAjRHJvcElucHV0XHJcbiAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cInNjcm9sbGxcIlxyXG4gICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwTGlzdHZlbmRvclwiXHJcbiAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yc0tleXNDb2Rlc1wiXHJcbiAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIlxyXG4gICAgICAgICAgI2F1dG9Db21wbGV0ZUlucHV0PVwibWF0QXV0b2NvbXBsZXRlVHJpZ2dlclwiXHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInRoaXMuZHluYW1jaWZvcm1jb250cm9scGFyZW50KClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cclxuICAgICAgPG1hdC1hdXRvY29tcGxldGVcclxuICAgICAgICAjc2Nyb2xsbD1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgKG9wZW5lZCk9XCJhdXRvY29tcGxldGVBcHBTY3JvbGwoKVwiXHJcbiAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cInZlblNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkcm9wdmFsdWVzIG9mIERyb3Bkb3duZGF0YVwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJcclxuICAgICAgICAgICAgICB0aGlzLklucHV0RmllbGRzPy5mb3Jta2V5XHJcbiAgICAgICAgICAgICAgICA/IGRyb3B2YWx1ZXNbdGhpcy5JbnB1dEZpZWxkcz8uZm9ybWtleV1cclxuICAgICAgICAgICAgICAgIDogZHJvcHZhbHVlc1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBkcm9wdmFsdWVzW0lucHV0RmllbGRzPy5kaXNwbGF5a2V5XSB9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbjwhLS0gICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkKClcIlxyXG4gLS0+XHJcbjwhLS0gICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwidmVuU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAtLT5cclxuPCEtLSAgICAgICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2UpPVwidmVuU2VsZWN0ZWQoZHJvcHZhbHVlcylcIlxyXG4gLS0+Il19
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { MatAutocomplete, MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
|
3
|
+
import { debounceTime, distinctUntilChanged, tap, switchMap, finalize, takeUntil, map, } from "rxjs/operators";
|
|
4
|
+
import { fromEvent } from 'rxjs';
|
|
5
|
+
import { FormGroup } from '@angular/forms';
|
|
6
|
+
import { COMMA, ENTER } from '@angular/cdk/keycodes';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../vs-chipdropdown.service";
|
|
9
|
+
import * as i2 from "@angular/forms";
|
|
10
|
+
import * as i3 from "@angular/material/form-field";
|
|
11
|
+
import * as i4 from "@angular/material/core";
|
|
12
|
+
import * as i5 from "@angular/material/autocomplete";
|
|
13
|
+
import * as i6 from "@angular/common";
|
|
14
|
+
import * as i7 from "@angular/material/chips";
|
|
15
|
+
import * as i8 from "@angular/material/icon";
|
|
16
|
+
import * as i9 from "@ngx-translate/core";
|
|
17
|
+
export class VsChipddCmpComponent {
|
|
18
|
+
constructor(service, fb) {
|
|
19
|
+
this.service = service;
|
|
20
|
+
this.fb = fb;
|
|
21
|
+
this.DrodownLoading = false;
|
|
22
|
+
this.Backendapi = true;
|
|
23
|
+
this.autocompleteTrigger = MatAutocompleteTrigger;
|
|
24
|
+
this.matAutocompleteApp = MatAutocomplete;
|
|
25
|
+
this.dataEvent = new EventEmitter();
|
|
26
|
+
this.separatorsKeysCodes = [ENTER, COMMA];
|
|
27
|
+
this.has_next = false;
|
|
28
|
+
this.currentpage = 1;
|
|
29
|
+
this.Dropdowndata = [];
|
|
30
|
+
this.has_previous = false;
|
|
31
|
+
this.DropdownForm = FormGroup;
|
|
32
|
+
this.chipSelectedId = [];
|
|
33
|
+
this.chipSelectedObj = [];
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
this.DropdownForm = this.fb.group({
|
|
37
|
+
value: ''
|
|
38
|
+
});
|
|
39
|
+
// if (this.InputFields?.defaultvalue) {
|
|
40
|
+
// this.DropdownForm.get("value").patchValue(this.InputFields?.defaultvalue)
|
|
41
|
+
// this.chipSelectedObj = this.InputFields?.defaultvalue
|
|
42
|
+
// if (this.chipSelectedObj.length > 0) {
|
|
43
|
+
// for (let foundemp of this.chipSelectedObj) {
|
|
44
|
+
// if (this.InputFields?.Outputkey) {
|
|
45
|
+
// this.chipSelectedId.push(foundemp[this.InputFields?.Outputkey])
|
|
46
|
+
// }
|
|
47
|
+
// else {
|
|
48
|
+
// this.chipSelectedId.push(foundemp.id)
|
|
49
|
+
// }
|
|
50
|
+
// }
|
|
51
|
+
// this.selected()
|
|
52
|
+
// }
|
|
53
|
+
// }
|
|
54
|
+
// if (this.InputFields?.fronentdata) {
|
|
55
|
+
// this.Dropdowndata = this.InputFields?.data
|
|
56
|
+
// }
|
|
57
|
+
// else {
|
|
58
|
+
// this.getdropdown('')
|
|
59
|
+
// }
|
|
60
|
+
}
|
|
61
|
+
dupngonit() {
|
|
62
|
+
this.DropdownForm = this.fb.group({
|
|
63
|
+
value: ''
|
|
64
|
+
});
|
|
65
|
+
if (this.InputFields?.defaultvalue) {
|
|
66
|
+
this.DropdownForm.get("value").patchValue(this.InputFields?.defaultvalue);
|
|
67
|
+
this.chipSelectedObj = this.InputFields?.defaultvalue;
|
|
68
|
+
if (this.chipSelectedObj.length > 0) {
|
|
69
|
+
for (let foundemp of this.chipSelectedObj) {
|
|
70
|
+
if (this.InputFields?.Outputkey) {
|
|
71
|
+
this.chipSelectedId.push(foundemp[this.InputFields?.Outputkey]);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.chipSelectedId.push(foundemp.id);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
this.selected();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (this.InputFields?.fronentdata) {
|
|
81
|
+
this.Dropdowndata = this.InputFields?.data;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.getdropdown('');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
ngOnChanges(changes) {
|
|
88
|
+
if (changes['InputFields'] && changes['InputFields'].currentValue) {
|
|
89
|
+
console.log("Summary Log Changes");
|
|
90
|
+
this.currentpage = 1;
|
|
91
|
+
this.dupngonit();
|
|
92
|
+
}
|
|
93
|
+
if (changes['ResetForm'] && changes['ResetForm'].currentValue) {
|
|
94
|
+
console.log("hitted");
|
|
95
|
+
this.DropdownForm.reset();
|
|
96
|
+
this.currentpage = 1;
|
|
97
|
+
this.dupngonit();
|
|
98
|
+
this.chipSelectedId = [];
|
|
99
|
+
this.chipSelectedObj = [];
|
|
100
|
+
this.dataEvent.emit([]);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// public displaydevelopclient(clt: any, key: string) {
|
|
104
|
+
// return key[clt];
|
|
105
|
+
// }
|
|
106
|
+
autocompleteAppScroll() {
|
|
107
|
+
if (!(this.InputFields?.fronentdata)) {
|
|
108
|
+
setTimeout(() => {
|
|
109
|
+
if (this.matAutocompleteApp &&
|
|
110
|
+
this.autocompleteTrigger &&
|
|
111
|
+
this.matAutocompleteApp.panel) {
|
|
112
|
+
fromEvent(this.matAutocompleteApp.panel.nativeElement, 'scroll')
|
|
113
|
+
.pipe(map(x => this.matAutocompleteApp.panel.nativeElement.scrollTop), takeUntil(this.autocompleteTrigger.panelClosingActions))
|
|
114
|
+
.subscribe(x => {
|
|
115
|
+
const scrollTop = this.matAutocompleteApp.panel.nativeElement.scrollTop;
|
|
116
|
+
const scrollHeight = this.matAutocompleteApp.panel.nativeElement.scrollHeight;
|
|
117
|
+
const elementHeight = this.matAutocompleteApp.panel.nativeElement.clientHeight;
|
|
118
|
+
const atBottom = scrollHeight - 1 <= scrollTop + elementHeight;
|
|
119
|
+
if (atBottom) {
|
|
120
|
+
if (this.has_next === true) {
|
|
121
|
+
let value = this.DropInput.nativeElement.value;
|
|
122
|
+
let params = this.searchparams(value);
|
|
123
|
+
this.currentpage = this.currentpage + 1;
|
|
124
|
+
if (this.currentpage > 1) {
|
|
125
|
+
this.service.GetApi(this.InputFields.url + "?page=" + this.currentpage, params)
|
|
126
|
+
.subscribe((results) => {
|
|
127
|
+
let datas = results["data"];
|
|
128
|
+
let datapagination = results["pagination"];
|
|
129
|
+
this.Dropdowndata = this.Dropdowndata.concat(datas);
|
|
130
|
+
console.log("this.Dropdowndata", this.Dropdowndata);
|
|
131
|
+
if (this.Dropdowndata.length >= 0) {
|
|
132
|
+
this.has_next = datapagination.has_next;
|
|
133
|
+
this.has_previous = datapagination.has_previous;
|
|
134
|
+
this.currentpage = datapagination.index;
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
dropdownsearch() {
|
|
146
|
+
if (!(this.InputFields?.fronentdata)) {
|
|
147
|
+
this.DropdownForm.get("value").valueChanges.pipe(debounceTime(100), distinctUntilChanged(), tap(() => {
|
|
148
|
+
this.DrodownLoading = true;
|
|
149
|
+
console.log("inside tap");
|
|
150
|
+
}), switchMap((value) => {
|
|
151
|
+
let params = this.searchparams(value);
|
|
152
|
+
this.currentpage = 1;
|
|
153
|
+
return this.service.GetApi(this.InputFields.url + "?page=" + this.currentpage, params).pipe(finalize(() => {
|
|
154
|
+
this.DrodownLoading = false;
|
|
155
|
+
}));
|
|
156
|
+
})).subscribe((results) => {
|
|
157
|
+
let datas = results["data"];
|
|
158
|
+
this.Dropdowndata = datas;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
getdropdown(value) {
|
|
163
|
+
if (this.InputFields.url) {
|
|
164
|
+
let params = this.searchparams(value);
|
|
165
|
+
this.service.GetApi(this.InputFields.url + "?page=" + this.currentpage, params)
|
|
166
|
+
.subscribe((results) => {
|
|
167
|
+
let datas = results["data"];
|
|
168
|
+
let datapagination = results["pagination"];
|
|
169
|
+
this.Dropdowndata = datas;
|
|
170
|
+
if (this.Dropdowndata.length >= 0) {
|
|
171
|
+
this.has_next = datapagination.has_next;
|
|
172
|
+
this.has_previous = datapagination.has_previous;
|
|
173
|
+
this.currentpage = datapagination.index;
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
selected() {
|
|
179
|
+
// let data = this.DropdownForm.value.value
|
|
180
|
+
if (this.InputFields?.wholedata) {
|
|
181
|
+
this.dataEvent.emit(this.chipSelectedObj);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
if (this.InputFields?.Outputkey) {
|
|
185
|
+
this.dataEvent.emit(this.chipSelectedId);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
this.dataEvent.emit(this.chipSelectedObj);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
searchparams(value) {
|
|
193
|
+
let params = '';
|
|
194
|
+
if (this.InputFields.params) {
|
|
195
|
+
params = this.InputFields.params;
|
|
196
|
+
}
|
|
197
|
+
let inpValue = value;
|
|
198
|
+
inpValue ? params += '&' + this.InputFields.searchkey + '=' + inpValue : '';
|
|
199
|
+
return params;
|
|
200
|
+
}
|
|
201
|
+
removechip(obj) {
|
|
202
|
+
const index = this.chipSelectedObj.indexOf(obj);
|
|
203
|
+
if (index >= 0) {
|
|
204
|
+
this.chipSelectedObj.splice(index, 1);
|
|
205
|
+
console.log(this.chipSelectedObj);
|
|
206
|
+
this.chipSelectedId.splice(index, 1);
|
|
207
|
+
console.log(this.chipSelectedId);
|
|
208
|
+
this.DropInput.nativeElement.value = '';
|
|
209
|
+
this.selected();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
venSelected(event) {
|
|
213
|
+
this.DropInput.nativeElement.value = '';
|
|
214
|
+
console.log('event.option.value', event.option.value);
|
|
215
|
+
this.selectvenByName(event.option.value[this.comparekey(event.option.value)]);
|
|
216
|
+
console.log('chipSelectedvenid', this.chipSelectedObj);
|
|
217
|
+
}
|
|
218
|
+
selectvenByName(ven) {
|
|
219
|
+
let foundemp1 = this.chipSelectedObj.filter((e) => e[this.comparekey(e)] == ven);
|
|
220
|
+
if (foundemp1.length) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
let foundemp = this.Dropdowndata.filter((e) => e[this.comparekey(e)] == ven);
|
|
224
|
+
if (foundemp.length) {
|
|
225
|
+
this.chipSelectedObj.push(foundemp[0]);
|
|
226
|
+
if (this.InputFields?.Outputkey) {
|
|
227
|
+
this.chipSelectedId.push(foundemp[0][this.InputFields?.Outputkey]);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
this.chipSelectedId.push(foundemp[0].id);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
comparekey(e) {
|
|
235
|
+
if (this.InputFields?.comparekey) {
|
|
236
|
+
return this.InputFields?.comparekey;
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
if (e?.id) {
|
|
240
|
+
return "id";
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
return this.InputFields.displaykey;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: VsChipddCmpComponent, deps: [{ token: i1.VsChipdropdownService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
248
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: VsChipddCmpComponent, selector: "lib-vs-chipdd-cmp", inputs: { InputFields: "InputFields", ResetForm: "ResetForm", Backendapi: "Backendapi" }, outputs: { dataEvent: "dataEvent" }, viewQueries: [{ propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "matAutocompleteApp", first: true, predicate: ["scrolll"], descendants: true }, { propertyName: "DropInput", first: true, predicate: ["DropInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\r\n <form [formGroup]=\"DropdownForm\">\r\n <mat-form-field class=\"mat-chipScroll\"\r\n appearance=\"outline\">\r\n <mat-label>{{InputFields?.label | translate}}</mat-label>\r\n <mat-chip-grid multiple #chipListvendor class=\"chip-container\">\r\n <mat-chip-row *ngFor=\"let obj of chipSelectedObj\" [removable]=\"true\" (removed)=\"removechip(obj)\" class=\"mat-chipEx\">\r\n {{ obj[InputFields?.displaykey] }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n <input #DropInput [matAutocomplete]=\"scrolll\" class=\"matformfieldinputstyle\"\r\n (keydown)=\"dropdownsearch()\" [matChipInputFor]=\"chipListvendor\" [matChipInputSeparatorKeyCodes]=\"\r\n separatorsKeysCodes\r\n \" [matChipInputAddOnBlur]=\"true\" formControlName=\"value\" />\r\n </mat-chip-grid>\r\n <mat-autocomplete #scrolll=\"matAutocomplete\" (optionSelected)=\"venSelected($event)\"\r\n (opened)=\"autocompleteAppScroll()\">\r\n <ng-container>\r\n <mat-option *ngFor=\"let dropvalues of Dropdowndata\" [value]=\"dropvalues\" (click)=\"selected()\">\r\n {{dropvalues[InputFields?.displaykey]}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </form>\r\n</div>\r\n", styles: [".mat-chipScroll{width:420px!important}.mat-chipEx{text-align:left}.chip-container::-webkit-scrollbar{width:6px;height:6px}.chip-container::-webkit-scrollbar-track{background:transparent}.chip-container::-webkit-scrollbar-thumb{border-radius:20px;background:#c3c3c3}.chip-container::-webkit-scrollbar-thumb:hover{background:#a6a6a6}.mat-chipScroll .mat-chip-list-wrapper{height:80px;overflow-y:scroll}mat-form-field{width:250px;font-family:var(--base-font-family)}\n"], dependencies: [{ kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
|
|
249
|
+
}
|
|
250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: VsChipddCmpComponent, decorators: [{
|
|
251
|
+
type: Component,
|
|
252
|
+
args: [{ selector: 'lib-vs-chipdd-cmp', template: "<div>\r\n <form [formGroup]=\"DropdownForm\">\r\n <mat-form-field class=\"mat-chipScroll\"\r\n appearance=\"outline\">\r\n <mat-label>{{InputFields?.label | translate}}</mat-label>\r\n <mat-chip-grid multiple #chipListvendor class=\"chip-container\">\r\n <mat-chip-row *ngFor=\"let obj of chipSelectedObj\" [removable]=\"true\" (removed)=\"removechip(obj)\" class=\"mat-chipEx\">\r\n {{ obj[InputFields?.displaykey] }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n <input #DropInput [matAutocomplete]=\"scrolll\" class=\"matformfieldinputstyle\"\r\n (keydown)=\"dropdownsearch()\" [matChipInputFor]=\"chipListvendor\" [matChipInputSeparatorKeyCodes]=\"\r\n separatorsKeysCodes\r\n \" [matChipInputAddOnBlur]=\"true\" formControlName=\"value\" />\r\n </mat-chip-grid>\r\n <mat-autocomplete #scrolll=\"matAutocomplete\" (optionSelected)=\"venSelected($event)\"\r\n (opened)=\"autocompleteAppScroll()\">\r\n <ng-container>\r\n <mat-option *ngFor=\"let dropvalues of Dropdowndata\" [value]=\"dropvalues\" (click)=\"selected()\">\r\n {{dropvalues[InputFields?.displaykey]}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </form>\r\n</div>\r\n", styles: [".mat-chipScroll{width:420px!important}.mat-chipEx{text-align:left}.chip-container::-webkit-scrollbar{width:6px;height:6px}.chip-container::-webkit-scrollbar-track{background:transparent}.chip-container::-webkit-scrollbar-thumb{border-radius:20px;background:#c3c3c3}.chip-container::-webkit-scrollbar-thumb:hover{background:#a6a6a6}.mat-chipScroll .mat-chip-list-wrapper{height:80px;overflow-y:scroll}mat-form-field{width:250px;font-family:var(--base-font-family)}\n"] }]
|
|
253
|
+
}], ctorParameters: () => [{ type: i1.VsChipdropdownService }, { type: i2.FormBuilder }], propDecorators: { InputFields: [{
|
|
254
|
+
type: Input
|
|
255
|
+
}], ResetForm: [{
|
|
256
|
+
type: Input
|
|
257
|
+
}], Backendapi: [{
|
|
258
|
+
type: Input
|
|
259
|
+
}], autocompleteTrigger: [{
|
|
260
|
+
type: ViewChild,
|
|
261
|
+
args: [MatAutocompleteTrigger]
|
|
262
|
+
}], matAutocompleteApp: [{
|
|
263
|
+
type: ViewChild,
|
|
264
|
+
args: ['scrolll']
|
|
265
|
+
}], dataEvent: [{
|
|
266
|
+
type: Output
|
|
267
|
+
}], DropInput: [{
|
|
268
|
+
type: ViewChild,
|
|
269
|
+
args: ['DropInput']
|
|
270
|
+
}] } });
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnMtY2hpcGRkLWNtcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92cy1jaGlwZHJvcGRvd24vc3JjL2xpYi92cy1jaGlwZGQtY21wL3ZzLWNoaXBkZC1jbXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdnMtY2hpcGRyb3Bkb3duL3NyYy9saWIvdnMtY2hpcGRkLWNtcC92cy1jaGlwZGQtY21wLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQWdDLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZILE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEdBQUcsRUFFSCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCxHQUFHLEdBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQW9CLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRCxPQUFPLEVBQTRCLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7O0FBTXJELE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFBb0IsT0FBOEIsRUFBVSxFQUFlO1FBQXZELFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUQzRSxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUl0QixlQUFVLEdBQVksSUFBSSxDQUFBO1FBRUEsd0JBQW1CLEdBQU0sc0JBQXNCLENBQUM7UUFDN0QsdUJBQWtCLEdBQU0sZUFBZSxDQUFDO1FBQ3BELGNBQVMs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QUNWLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ2lCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCwgTWF0QXV0b2NvbXBsZXRlLCBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHtcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgdGFwLFxyXG4gIGZpbHRlcixcclxuICBzd2l0Y2hNYXAsXHJcbiAgZmluYWxpemUsXHJcbiAgdGFrZVVudGlsLFxyXG4gIG1hcCxcclxufSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFZzQ2hpcGRyb3Bkb3duU2VydmljZSB9IGZyb20gJy4uL3ZzLWNoaXBkcm9wZG93bi5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ09NTUEsIEVOVEVSIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdnMtY2hpcGRkLWNtcCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZzLWNoaXBkZC1jbXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ZzLWNoaXBkZC1jbXAuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVnNDaGlwZGRDbXBDb21wb25lbnQge1xyXG4gIERyb2Rvd25Mb2FkaW5nOiBib29sZWFuPSBmYWxzZTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IFZzQ2hpcGRyb3Bkb3duU2VydmljZSwgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHsgfVxyXG4gIEBJbnB1dCgpIElucHV0RmllbGRzOiBhbnlcclxuICBASW5wdXQoKSBSZXNldEZvcm06IGFueVxyXG4gIEBJbnB1dCgpIEJhY2tlbmRhcGk6IGJvb2xlYW4gPSB0cnVlXHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcikgYXV0b2NvbXBsZXRlVHJpZ2dlcjphbnk9IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsbCcpIG1hdEF1dG9jb21wbGV0ZUFwcDphbnk9IE1hdEF1dG9jb21wbGV0ZTtcclxuICBAT3V0cHV0KCkgZGF0YUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBWaWV3Q2hpbGQoJ0Ryb3BJbnB1dCcpIERyb3BJbnB1dDogYW55O1xyXG4gIHJlYWRvbmx5IHNlcGFyYXRvcnNLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSLCBDT01NQV07XHJcblxyXG4gIGhhc19uZXh0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgY3VycmVudHBhZ2U6IG51bWJlciA9IDE7XHJcbiAgRHJvcGRvd25kYXRhOiBhbnkgPSBbXTtcclxuICBoYXNfcHJldmlvdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBEcm9wZG93bkZvcm06YW55PSBGb3JtR3JvdXBcclxuICBjaGlwU2VsZWN0ZWRJZDogYW55ID0gW107XHJcbiAgY2hpcFNlbGVjdGVkT2JqOiBhbnkgPSBbXVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuRHJvcGRvd25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHZhbHVlOiAnJ1xyXG4gICAgfSlcclxuICAgIC8vIGlmICh0aGlzLklucHV0RmllbGRzPy5kZWZhdWx0dmFsdWUpIHtcclxuICAgIC8vICAgdGhpcy5Ecm9wZG93bkZvcm0uZ2V0KFwidmFsdWVcIikucGF0Y2hWYWx1ZSh0aGlzLklucHV0RmllbGRzPy5kZWZhdWx0dmFsdWUpXHJcbiAgICAvLyAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqID0gdGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlXHJcbiAgICAvLyAgIGlmICh0aGlzLmNoaXBTZWxlY3RlZE9iai5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgZm9yIChsZXQgZm91bmRlbXAgb2YgdGhpcy5jaGlwU2VsZWN0ZWRPYmopIHtcclxuICAgIC8vICAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5wdXNoKGZvdW5kZW1wW3RoaXMuSW5wdXRGaWVsZHM/Lk91dHB1dGtleV0pXHJcblxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuY2hpcFNlbGVjdGVkSWQucHVzaChmb3VuZGVtcC5pZClcclxuXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgLy8gICB9XHJcblxyXG5cclxuICAgIC8vIH1cclxuICAgIC8vIGlmICh0aGlzLklucHV0RmllbGRzPy5mcm9uZW50ZGF0YSkge1xyXG4gICAgLy8gICB0aGlzLkRyb3Bkb3duZGF0YSA9IHRoaXMuSW5wdXRGaWVsZHM/LmRhdGFcclxuXHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5nZXRkcm9wZG93bignJylcclxuICAgIC8vIH1cclxuICB9XHJcbiAgZHVwbmdvbml0KCl7XHJcbiAgICB0aGlzLkRyb3Bkb3duRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB2YWx1ZTogJydcclxuICAgIH0pXHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldChcInZhbHVlXCIpLnBhdGNoVmFsdWUodGhpcy5JbnB1dEZpZWxkcz8uZGVmYXVsdHZhbHVlKVxyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZE9iaiA9IHRoaXMuSW5wdXRGaWVsZHM/LmRlZmF1bHR2YWx1ZVxyXG4gICAgICBpZiAodGhpcy5jaGlwU2VsZWN0ZWRPYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGZvdW5kZW1wIG9mIHRoaXMuY2hpcFNlbGVjdGVkT2JqKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpcFNlbGVjdGVkSWQucHVzaChmb3VuZGVtcFt0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXldKVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnB1c2goZm91bmRlbXAuaWQpXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkKClcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uZnJvbmVudGRhdGEpIHtcclxuICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSB0aGlzLklucHV0RmllbGRzPy5kYXRhXHJcblxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0ZHJvcGRvd24oJycpXHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydJbnB1dEZpZWxkcyddICYmIGNoYW5nZXNbJ0lucHV0RmllbGRzJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiU3VtbWFyeSBMb2cgQ2hhbmdlc1wiKVxyXG4gICAgICB0aGlzLmN1cnJlbnRwYWdlID0gMVxyXG4gICAgICB0aGlzLmR1cG5nb25pdCgpXHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snUmVzZXRGb3JtJ10gJiYgY2hhbmdlc1snUmVzZXRGb3JtJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiaGl0dGVkXCIpXHJcbiAgICAgIHRoaXMuRHJvcGRvd25Gb3JtLnJlc2V0KClcclxuICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IDFcclxuICAgICAgdGhpcy5kdXBuZ29uaXQoKVxyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZElkID0gW107XHJcbiAgICAgIHRoaXMuY2hpcFNlbGVjdGVkT2JqID0gW11cclxuICAgICAgdGhpcy5kYXRhRXZlbnQuZW1pdChbXSk7XHJcblxyXG5cclxuICAgIH1cclxuICB9XHJcbiAgLy8gcHVibGljIGRpc3BsYXlkZXZlbG9wY2xpZW50KGNsdDogYW55LCBrZXk6IHN0cmluZykge1xyXG4gIC8vICAgcmV0dXJuIGtleVtjbHRdO1xyXG4gIC8vIH1cclxuICBhdXRvY29tcGxldGVBcHBTY3JvbGwoKSB7XHJcbiAgICBpZiAoISh0aGlzLklucHV0RmllbGRzPy5mcm9uZW50ZGF0YSkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5tYXRBdXRvY29tcGxldGVBcHAgJiZcclxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlciAmJlxyXG4gICAgICAgICAgdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGZyb21FdmVudCh0aGlzLm1hdEF1dG9jb21wbGV0ZUFwcC5wYW5lbC5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKHggPT4gdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3ApLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIucGFuZWxDbG9zaW5nQWN0aW9ucyBhcyBPYnNlcnZhYmxlPGFueT4pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLm1hdEF1dG9jb21wbGV0ZUFwcC5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0aGlzLm1hdEF1dG9jb21wbGV0ZUFwcC5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50SGVpZ2h0ID0gdGhpcy5tYXRBdXRvY29tcGxldGVBcHAucGFuZWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgYXRCb3R0b20gPSBzY3JvbGxIZWlnaHQgLSAxIDw9IHNjcm9sbFRvcCArIGVsZW1lbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgaWYgKGF0Qm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNfbmV4dCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLkRyb3BJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnNlYXJjaHBhcmFtcyh2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IHRoaXMuY3VycmVudHBhZ2UgKyAxXHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRwYWdlID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5HZXRBcGkodGhpcy5JbnB1dEZpZWxkcy51cmwgKyBcIj9wYWdlPVwiICsgdGhpcy5jdXJyZW50cGFnZSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhcyA9IHJlc3VsdHNbXCJkYXRhXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXBhZ2luYXRpb24gPSByZXN1bHRzW1wicGFnaW5hdGlvblwiXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSB0aGlzLkRyb3Bkb3duZGF0YS5jb25jYXQoZGF0YXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMuRHJvcGRvd25kYXRhXCIsIHRoaXMuRHJvcGRvd25kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5Ecm9wZG93bmRhdGEubGVuZ3RoID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc19uZXh0ID0gZGF0YXBhZ2luYXRpb24uaGFzX25leHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNfcHJldmlvdXMgPSBkYXRhcGFnaW5hdGlvbi5oYXNfcHJldmlvdXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IGRhdGFwYWdpbmF0aW9uLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGRyb3Bkb3duc2VhcmNoKCkge1xyXG4gICAgaWYgKCEodGhpcy5JbnB1dEZpZWxkcz8uZnJvbmVudGRhdGEpKSB7XHJcbiAgICAgIHRoaXMuRHJvcGRvd25Gb3JtLmdldChcInZhbHVlXCIpLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuRHJvZG93bkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJpbnNpZGUgdGFwXCIpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+IHtcclxuICAgICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLnNlYXJjaHBhcmFtcyh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRwYWdlID0gMVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5HZXRBcGkodGhpcy5JbnB1dEZpZWxkcy51cmwgKyBcIj9wYWdlPVwiICsgdGhpcy5jdXJyZW50cGFnZSwgcGFyYW1zKS5waXBlKFxyXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5Ecm9kb3duTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGRhdGFzID0gcmVzdWx0c1tcImRhdGFcIl07XHJcbiAgICAgICAgdGhpcy5Ecm9wZG93bmRhdGEgPSBkYXRhcztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBnZXRkcm9wZG93bih2YWx1ZTphbnkpIHtcclxuICAgIGlmKHRoaXMuSW5wdXRGaWVsZHMudXJsKXtcclxuICAgICAgbGV0IHBhcmFtcyA9IHRoaXMuc2VhcmNocGFyYW1zKHZhbHVlKVxyXG4gICAgdGhpcy5zZXJ2aWNlLkdldEFwaSh0aGlzLklucHV0RmllbGRzLnVybCArIFwiP3BhZ2U9XCIgKyB0aGlzLmN1cnJlbnRwYWdlLCBwYXJhbXMpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBkYXRhcyA9IHJlc3VsdHNbXCJkYXRhXCJdO1xyXG4gICAgICAgIGxldCBkYXRhcGFnaW5hdGlvbiA9IHJlc3VsdHNbXCJwYWdpbmF0aW9uXCJdO1xyXG4gICAgICAgIHRoaXMuRHJvcGRvd25kYXRhID0gZGF0YXNcclxuICAgICAgICBpZiAodGhpcy5Ecm9wZG93bmRhdGEubGVuZ3RoID49IDApIHtcclxuICAgICAgICAgIHRoaXMuaGFzX25leHQgPSBkYXRhcGFnaW5hdGlvbi5oYXNfbmV4dDtcclxuICAgICAgICAgIHRoaXMuaGFzX3ByZXZpb3VzID0gZGF0YXBhZ2luYXRpb24uaGFzX3ByZXZpb3VzO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50cGFnZSA9IGRhdGFwYWdpbmF0aW9uLmluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcbiAgXHJcbiAgc2VsZWN0ZWQoKSB7XHJcbiAgICAvLyBsZXQgZGF0YSA9IHRoaXMuRHJvcGRvd25Gb3JtLnZhbHVlLnZhbHVlXHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8ud2hvbGVkYXRhKSB7XHJcbiAgICAgIHRoaXMuZGF0YUV2ZW50LmVtaXQodGhpcy5jaGlwU2VsZWN0ZWRPYmopO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgICAgICB0aGlzLmRhdGFFdmVudC5lbWl0KHRoaXMuY2hpcFNlbGVjdGVkSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGF0YUV2ZW50LmVtaXQodGhpcy5jaGlwU2VsZWN0ZWRPYmopO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgc2VhcmNocGFyYW1zKHZhbHVlOmFueSkge1xyXG4gICAgbGV0IHBhcmFtcyA9ICcnXHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcy5wYXJhbXMpIHtcclxuICAgICAgcGFyYW1zID0gdGhpcy5JbnB1dEZpZWxkcy5wYXJhbXNcclxuICAgIH1cclxuICAgIGxldCBpbnBWYWx1ZSA9IHZhbHVlXHJcbiAgICBpbnBWYWx1ZSA/IHBhcmFtcyArPSAnJicgKyB0aGlzLklucHV0RmllbGRzLnNlYXJjaGtleSArICc9JyArIGlucFZhbHVlIDogJydcclxuICAgIHJldHVybiBwYXJhbXNcclxuICB9XHJcbiAgcmVtb3ZlY2hpcChvYmo6YW55KSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hpcFNlbGVjdGVkT2JqLmluZGV4T2Yob2JqKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPj0gMCkge1xyXG5cclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRPYmouc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5jaGlwU2VsZWN0ZWRPYmopO1xyXG4gICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpcFNlbGVjdGVkSWQpO1xyXG4gICAgICB0aGlzLkRyb3BJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQoKVxyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgcHVibGljIHZlblNlbGVjdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLkRyb3BJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICBjb25zb2xlLmxvZygnZXZlbnQub3B0aW9uLnZhbHVlJywgZXZlbnQub3B0aW9uLnZhbHVlKVxyXG4gICAgdGhpcy5zZWxlY3R2ZW5CeU5hbWUoZXZlbnQub3B0aW9uLnZhbHVlW3RoaXMuY29tcGFyZWtleShldmVudC5vcHRpb24udmFsdWUpXSk7XHJcbiAgICBjb25zb2xlLmxvZygnY2hpcFNlbGVjdGVkdmVuaWQnLCB0aGlzLmNoaXBTZWxlY3RlZE9iailcclxuICB9XHJcbiAgcHJpdmF0ZSBzZWxlY3R2ZW5CeU5hbWUodmVuOmFueSkge1xyXG4gICAgbGV0IGZvdW5kZW1wMSA9IHRoaXMuY2hpcFNlbGVjdGVkT2JqLmZpbHRlcigoZTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiBlW3RoaXMuY29tcGFyZWtleShlKV0gPT0gdmVuKTtcclxuICAgIGlmIChmb3VuZGVtcDEubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmb3VuZGVtcCA9IHRoaXMuRHJvcGRvd25kYXRhLmZpbHRlcigoZTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiBlW3RoaXMuY29tcGFyZWtleShlKV0gPT0gdmVuKTtcclxuICAgIGlmIChmb3VuZGVtcC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRPYmoucHVzaChmb3VuZGVtcFswXSk7XHJcbiAgICAgIGlmICh0aGlzLklucHV0RmllbGRzPy5PdXRwdXRrZXkpIHtcclxuICAgICAgICB0aGlzLmNoaXBTZWxlY3RlZElkLnB1c2goZm91bmRlbXBbMF1bdGhpcy5JbnB1dEZpZWxkcz8uT3V0cHV0a2V5XSlcclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jaGlwU2VsZWN0ZWRJZC5wdXNoKGZvdW5kZW1wWzBdLmlkKVxyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBjb21wYXJla2V5KGU6YW55KSB7XHJcbiAgICBpZiAodGhpcy5JbnB1dEZpZWxkcz8uY29tcGFyZWtleSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5JbnB1dEZpZWxkcz8uY29tcGFyZWtleVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChlPy5pZCkge1xyXG4gICAgICAgIHJldHVybiBcImlkXCJcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5JbnB1dEZpZWxkcy5kaXNwbGF5a2V5XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn0iLCI8ZGl2PlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiRHJvcGRvd25Gb3JtXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1jaGlwU2Nyb2xsXCJcclxuICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tJbnB1dEZpZWxkcz8ubGFiZWwgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1jaGlwLWdyaWQgbXVsdGlwbGUgI2NoaXBMaXN0dmVuZG9yIGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8bWF0LWNoaXAtcm93ICpuZ0Zvcj1cImxldCBvYmogb2YgY2hpcFNlbGVjdGVkT2JqXCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlY2hpcChvYmopXCIgY2xhc3M9XCJtYXQtY2hpcEV4XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IG9ialtJbnB1dEZpZWxkcz8uZGlzcGxheWtleV0gfX1cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cclxuICAgICAgICAgICAgICA8aW5wdXQgI0Ryb3BJbnB1dCBbbWF0QXV0b2NvbXBsZXRlXT1cInNjcm9sbGxcIiBjbGFzcz1cIm1hdGZvcm1maWVsZGlucHV0c3R5bGVcIlxyXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJkcm9wZG93bnNlYXJjaCgpXCIgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwTGlzdHZlbmRvclwiIFttYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2Rlc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcnNLZXlzQ29kZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiIC8+XHJcbiAgICAgICAgICA8L21hdC1jaGlwLWdyaWQ+XHJcbiAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjc2Nyb2xsbD1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJ2ZW5TZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAob3BlbmVkKT1cImF1dG9jb21wbGV0ZUFwcFNjcm9sbCgpXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGRyb3B2YWx1ZXMgb2YgRHJvcGRvd25kYXRhXCIgW3ZhbHVlXT1cImRyb3B2YWx1ZXNcIiAoY2xpY2spPVwic2VsZWN0ZWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tkcm9wdmFsdWVzW0lucHV0RmllbGRzPy5kaXNwbGF5a2V5XX19XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG4iXX0=
|