@senior-gestao-pessoas/payroll-core 9.5.0-f5093372-3d3f-4b82-a958-d1cdf848ce4d → 9.5.0-feature-hcmgdp-11492-21838e72

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/bundles/senior-gestao-pessoas-payroll-core.umd.js +467 -902
  2. package/bundles/senior-gestao-pessoas-payroll-core.umd.js.map +1 -1
  3. package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js +1 -16
  4. package/bundles/senior-gestao-pessoas-payroll-core.umd.min.js.map +1 -1
  5. package/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.d.ts +43 -10
  6. package/components/historical-pix-account/historical-pix-account.component.d.ts +10 -39
  7. package/components/historical-pix-account/historical-pix-account.service.d.ts +0 -1
  8. package/components/historical-pix-account-list/historical-pix-account-list.component.d.ts +2 -9
  9. package/components/utils/format-utils/format-utils.service.d.ts +3 -30
  10. package/esm2015/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +202 -34
  11. package/esm2015/components/historical-pix-account/historical-pix-account.component.js +29 -259
  12. package/esm2015/components/historical-pix-account/historical-pix-account.module.js +1 -5
  13. package/esm2015/components/historical-pix-account/historical-pix-account.service.js +1 -8
  14. package/esm2015/components/historical-pix-account-list/historical-pix-account-list.component.js +8 -41
  15. package/esm2015/components/utils/format-utils/format-utils.service.js +5 -88
  16. package/esm2015/public_api.js +1 -2
  17. package/esm2015/senior-gestao-pessoas-payroll-core.js +2 -3
  18. package/esm5/components/historical-pix-account/historical-pix-account-form/historical-pix-account-form.component.js +217 -58
  19. package/esm5/components/historical-pix-account/historical-pix-account.component.js +58 -301
  20. package/esm5/components/historical-pix-account/historical-pix-account.module.js +1 -5
  21. package/esm5/components/historical-pix-account/historical-pix-account.service.js +1 -8
  22. package/esm5/components/historical-pix-account-list/historical-pix-account-list.component.js +8 -46
  23. package/esm5/components/utils/format-utils/format-utils.service.js +5 -88
  24. package/esm5/public_api.js +1 -2
  25. package/esm5/senior-gestao-pessoas-payroll-core.js +2 -3
  26. package/fesm2015/senior-gestao-pessoas-payroll-core.js +502 -897
  27. package/fesm2015/senior-gestao-pessoas-payroll-core.js.map +1 -1
  28. package/fesm5/senior-gestao-pessoas-payroll-core.js +464 -898
  29. package/fesm5/senior-gestao-pessoas-payroll-core.js.map +1 -1
  30. package/package.json +1 -1
  31. package/public_api.d.ts +0 -1
  32. package/senior-gestao-pessoas-payroll-core.d.ts +1 -2
  33. package/senior-gestao-pessoas-payroll-core.metadata.json +1 -1
  34. package/components/historical-pix-account/historical-pix-account-base.d.ts +0 -27
  35. package/components/shared/index.d.ts +0 -1
  36. package/components/shared/shared-state.service.d.ts +0 -20
  37. package/esm2015/components/historical-pix-account/historical-pix-account-base.js +0 -173
  38. package/esm2015/components/shared/index.js +0 -2
  39. package/esm2015/components/shared/shared-state.service.js +0 -46
  40. package/esm5/components/historical-pix-account/historical-pix-account-base.js +0 -186
  41. package/esm5/components/shared/index.js +0 -2
  42. package/esm5/components/shared/shared-state.service.js +0 -47
@@ -1,31 +1,42 @@
1
1
  import * as tslib_1 from "tslib";
2
- import { Component, OnInit, Input, Output, EventEmitter, ChangeDetectorRef, OnDestroy, AfterViewInit, ViewChild, } from "@angular/core";
3
- import { FormGroup, FormBuilder } from "@angular/forms";
2
+ import { Component, OnInit, Input, Output, EventEmitter, ChangeDetectorRef, OnDestroy, AfterViewInit, ViewChild, DoCheck, } from "@angular/core";
3
+ import { FormGroup, FormBuilder, Validators, ValidatorFn, AbstractControl } from "@angular/forms";
4
4
  import { CustomFieldsComponent } from "@seniorsistemas/angular-components";
5
5
  import { Subject } from "rxjs";
6
- import { configEnabledFields, mountCustomToShow, } from "../../utils/helpers";
6
+ import { verifyValidationsForm, configEnabledFields, mountCustomToShow, } from "../../utils/helpers";
7
+ import { GenericValidator } from "../../utils/generic-validators";
7
8
  import { FormatUtilsService } from "../../utils/format-utils/format-utils.service";
8
- import { SharedStateService } from "../../shared/shared-state.service";
9
- import { HistoricakPixAccountBase } from "../historical-pix-account-base";
10
- let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent extends HistoricakPixAccountBase {
11
- constructor(formBuilder, cd, sharedStateService) {
12
- super(formBuilder);
9
+ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent {
10
+ constructor(formBuilder, cd) {
11
+ this.formBuilder = formBuilder;
13
12
  this.cd = cd;
14
- this.sharedStateService = sharedStateService;
15
13
  this.withSideBar = true;
16
14
  this.isEditMode = false;
17
- this.showField = false;
15
+ this.paramsForm = new FormGroup({});
16
+ this.defaultCpfNumber = null;
17
+ this.permitsEditBankAccountForm = false;
18
18
  this.visibleChange = new EventEmitter();
19
19
  this.pixAccountItemToList = new EventEmitter();
20
20
  this.ngUnsubscribe = new Subject();
21
+ this.initialValidatorOfPercentage = [Validators.required, Validators.min(0.01)];
21
22
  this.labelBtnAdd = "hcm.payroll.employees_add";
23
+ this.maxValuePercentage = 100.00;
22
24
  this.visibleBtnSave = true;
23
25
  this.isView = false;
24
26
  this.isShowPixKeyFieldValidatorMessage = false;
25
- this.hideFields = this.sharedStateService.hideField$;
27
+ this.createFormGroup();
26
28
  this.registerSubjects();
27
29
  }
28
- ngOnInit() { }
30
+ ngOnInit() {
31
+ }
32
+ ngDoCheck() {
33
+ if (this.pixAccountFormGroup && this.pixKeyType === "BANK_ACCOUNT") {
34
+ const pixKeyControl = this.pixAccountFormGroup.get("pixKey");
35
+ if (pixKeyControl && !pixKeyControl.disabled) {
36
+ pixKeyControl.disable();
37
+ }
38
+ }
39
+ }
29
40
  ngAfterViewInit() {
30
41
  this.cd.detectChanges();
31
42
  }
@@ -33,7 +44,39 @@ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent
33
44
  this.ngUnsubscribe.next(true);
34
45
  this.ngUnsubscribe.unsubscribe();
35
46
  }
36
- registerSubjects() { }
47
+ registerSubjects() {
48
+ }
49
+ createFormGroup() {
50
+ this.pixAccountFormGroup = this.formBuilder.group({
51
+ id: this.formBuilder.control(null),
52
+ index: this.formBuilder.control(null),
53
+ employee: this.formBuilder.control({ value: { tableId: null }, disabled: true }),
54
+ dateChange: this.formBuilder.control(null),
55
+ pixKeyType: this.formBuilder.control(null, Validators.required),
56
+ pixKey: this.formBuilder.control(null),
57
+ percentage: this.formBuilder.control(null, Validators.compose([
58
+ ...this.initialValidatorOfPercentage,
59
+ Validators.max(this.maxValuePercentage),
60
+ ])),
61
+ externalId: this.formBuilder.control(null),
62
+ customFields: this.formBuilder.control(null),
63
+ });
64
+ }
65
+ onChangePixKeyType(item) {
66
+ if (item.key) {
67
+ this.pixKeyType = item.key;
68
+ this.isShowPixKeyFieldValidatorMessage = true;
69
+ this.pixAccountFormGroup.get("pixKey").reset();
70
+ this.setPixKeyValidators(true);
71
+ if (item.key === "CPF") {
72
+ this.setDefaultCpfPixKey();
73
+ }
74
+ }
75
+ }
76
+ onClearPixKeyType() {
77
+ this.isShowPixKeyFieldValidatorMessage = false;
78
+ this.pixAccountFormGroup.get("pixKey").reset();
79
+ }
37
80
  get visible() {
38
81
  return this._visible;
39
82
  }
@@ -64,8 +107,7 @@ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent
64
107
  }
65
108
  formatPixKeyTelephoneNumber() {
66
109
  if (this.pixKeyType === "TELEPHONE") {
67
- const pixKeyCtrl = this.pixAccountFormGroup.get("pixKey");
68
- pixKeyCtrl.setValue(FormatUtilsService.getFormattedTelephoneNumber(pixKeyCtrl.value));
110
+ this.pixAccountFormGroup.get("pixKey").setValue(FormatUtilsService.getFormattedTelephoneNumber(this.pixAccountFormGroup.get("pixKey").value));
69
111
  }
70
112
  }
71
113
  convertDTOToShowWithCustomFields(data) {
@@ -77,14 +119,14 @@ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent
77
119
  this.visibleBtnSave = isEditMode;
78
120
  if (this.pixAccountFormGroup.get("pixKeyType").value) {
79
121
  this.pixKeyType = this.pixAccountFormGroup.get("pixKeyType").value.key;
80
- this.setPixKeyValidators(isEditMode, this.pixAccountFormGroup);
122
+ this.setPixKeyValidators(isEditMode);
81
123
  this.formatPixKeyTelephoneNumber();
82
124
  }
83
125
  configEnabledFields(this.pixAccountFormGroup, isEditMode, [
84
126
  "pixKeyType",
85
127
  "pixKey",
86
128
  "percentage",
87
- "customFields"
129
+ "customFields",
88
130
  ], []);
89
131
  }
90
132
  close() {
@@ -92,11 +134,13 @@ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent
92
134
  this.visible = false;
93
135
  }
94
136
  addItem() {
137
+ this.pixAccountFormGroup.updateValueAndValidity();
138
+ verifyValidationsForm.call(this.pixAccountFormGroup);
95
139
  if (this.pixAccountFormGroup.valid) {
96
140
  if (this.employeeId) {
97
141
  this.pixAccountFormGroup.get("employee").setValue({
98
142
  tableId: this.employeeId,
99
- name: ""
143
+ name: "",
100
144
  });
101
145
  }
102
146
  this.pixAccountItemToList.emit(this.pixAccountFormGroup.getRawValue());
@@ -120,9 +164,13 @@ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent
120
164
  return {
121
165
  prefix: "",
122
166
  thousands: this.currency.thousandsSeparator,
123
- decimal: this.currency.decimalSeparator
167
+ decimal: this.currency.decimalSeparator,
124
168
  };
125
169
  }
170
+ /**
171
+ * O Input que recebe a lista do component pai e chama o método de validação passando a lista recebida.
172
+ * @param pixAccountList
173
+ */
126
174
  set getListPixAccount(pixAccountList) {
127
175
  if (pixAccountList) {
128
176
  this.setValidatorsAccordingList(pixAccountList, null, false);
@@ -131,23 +179,143 @@ let HistoricalPixAccountFormComponent = class HistoricalPixAccountFormComponent
131
179
  this.resetForm();
132
180
  }
133
181
  }
182
+ /**
183
+ * Recebe a lista de registros já inseridos na tabela adiciona em uma variável os valores que serão usados para
184
+ * a validação dos campos "percentage" e "pixAccount".
185
+ * Quando tem index significa que está em uma edição, os valores na posição do registro da edição (index) não serão adicionados
186
+ * no array de comparação dos validators.
187
+ * @param pixAccountList
188
+ * @param index
189
+ */
190
+ setValidatorsAccordingList(pixAccountList, index = null, isEditMode = true) {
191
+ this.pixAccountList = pixAccountList && pixAccountList.length ? [...pixAccountList] : [];
192
+ const percentageIncluded = [];
193
+ if (this.pixAccountList && this.pixAccountList.length) {
194
+ this.pixAccountList.filter((field, key) => {
195
+ if (field["percentage"] && key != index) {
196
+ percentageIncluded.push(field["percentage"]);
197
+ }
198
+ });
199
+ }
200
+ this.beforeSetPixKeyTypeValidator();
201
+ this.setPixKeyValidators(isEditMode);
202
+ this.validatePercentageValid(percentageIncluded);
203
+ }
204
+ /**
205
+ * Antes de setar o validator prepara as variáveis necessária para que seja feita a validação do campo.
206
+ */
207
+ setPixKeyValidators(isEditMode) {
208
+ const genericPixKey = this.pixAccountFormGroup.get("pixKey");
209
+ if (this.pixKeyType) {
210
+ switch (this.pixKeyType) {
211
+ case "TELEPHONE":
212
+ genericPixKey.setValidators(Validators.compose([
213
+ Validators.required, GenericValidator.isValidPhoneNumber,
214
+ ]));
215
+ break;
216
+ case "EMAIL":
217
+ genericPixKey.setValidators(Validators.compose([
218
+ Validators.required, GenericValidator.isValidEmail,
219
+ ]));
220
+ break;
221
+ case "CPF":
222
+ genericPixKey.setValidators(Validators.compose([
223
+ Validators.required, GenericValidator.isValidCpf,
224
+ ]));
225
+ break;
226
+ case "CNPJ":
227
+ genericPixKey.setValidators(Validators.compose([
228
+ Validators.required, GenericValidator.isValidCnpj,
229
+ ]));
230
+ break;
231
+ case "RANDOM_KEY":
232
+ genericPixKey.setValidators(Validators.required);
233
+ break;
234
+ default:
235
+ genericPixKey.setValidators(null);
236
+ break;
237
+ }
238
+ if (isEditMode) {
239
+ genericPixKey.enable();
240
+ }
241
+ genericPixKey.updateValueAndValidity();
242
+ }
243
+ }
244
+ /**
245
+ * Este método calcula as parcentagens que já foram inseridas, e seta a diferença para chegar em
246
+ * 100% na validação do campo "percentage" como um novo maxValue;
247
+ * @param listValue
248
+ */
249
+ validatePercentageValid(listValue) {
250
+ const percentage = this.pixAccountFormGroup.get("percentage");
251
+ this.maxValuePercentage = listValue
252
+ .reduce((currentValue, total) => currentValue - total, 100.00);
253
+ percentage
254
+ .setValidators(Validators.compose([
255
+ ...this.initialValidatorOfPercentage,
256
+ Validators.max(this.maxValuePercentage),
257
+ ]));
258
+ percentage.updateValueAndValidity();
259
+ }
134
260
  set isViewMode(condition) {
135
261
  this.isView = !!(condition && !this.withSideBar);
136
262
  this.configEnableFields(!this.isView);
137
263
  if (!this.isView)
138
264
  this.resetForm();
139
265
  }
140
- set paramsForm(value) {
141
- this._paramsForm = value;
266
+ phoneMask(event) {
267
+ FormatUtilsService.formatTelephoneInputEvent(event);
268
+ }
269
+ setDefaultCpfPixKey() {
270
+ if (this.defaultCpfNumber) {
271
+ this.pixAccountFormGroup.get("pixKey").setValue(this.defaultCpfNumber);
272
+ }
273
+ else {
274
+ const sheetDocument = this.paramsForm.get("sheetDocument");
275
+ if (sheetDocument) {
276
+ const cpf = sheetDocument.get("cpfNumber").value;
277
+ if (cpf) {
278
+ this.pixAccountFormGroup.get("pixKey").setValue(cpf);
279
+ }
280
+ }
281
+ }
282
+ }
283
+ beforeSetPixKeyTypeValidator() {
284
+ const pixKeyType = this.pixAccountFormGroup.get("pixKeyType");
285
+ if (this.pixAccountList && this.pixAccountList.length && pixKeyType) {
286
+ pixKeyType
287
+ .setValidators(Validators.compose([
288
+ Validators.required,
289
+ this.validateDuplicatePixKeyTypeBankAccount(this.pixAccountList),
290
+ ]));
291
+ }
292
+ else {
293
+ pixKeyType.setValidators(Validators.required);
294
+ }
142
295
  }
143
- set defaultCpfNumber(value) {
144
- this._defaultCpfNumber = value;
296
+ validateDuplicatePixKeyTypeBankAccount(listCompare) {
297
+ return (control) => {
298
+ const value = control && control.value;
299
+ let condition = false;
300
+ listCompare.filter((field) => {
301
+ if (value) {
302
+ if (field["pixKeyType"].key === 'BANK_ACCOUNT' && value.key === field["pixKeyType"].key) {
303
+ return condition = true;
304
+ }
305
+ }
306
+ });
307
+ if (condition && !this.permitsEditBankAccountForm) {
308
+ return { pixKeyTypeBankAccountDuplicate: true };
309
+ }
310
+ else {
311
+ return null;
312
+ }
313
+ };
145
314
  }
146
315
  };
147
316
  HistoricalPixAccountFormComponent.ctorParameters = () => [
148
317
  { type: FormBuilder },
149
- { type: ChangeDetectorRef },
150
- { type: SharedStateService }
318
+ { type: ChangeDetectorRef }
151
319
  ];
152
320
  tslib_1.__decorate([
153
321
  ViewChild(CustomFieldsComponent, { static: true })
@@ -169,7 +337,13 @@ tslib_1.__decorate([
169
337
  ], HistoricalPixAccountFormComponent.prototype, "isEditMode", void 0);
170
338
  tslib_1.__decorate([
171
339
  Input()
172
- ], HistoricalPixAccountFormComponent.prototype, "showField", void 0);
340
+ ], HistoricalPixAccountFormComponent.prototype, "paramsForm", void 0);
341
+ tslib_1.__decorate([
342
+ Input()
343
+ ], HistoricalPixAccountFormComponent.prototype, "defaultCpfNumber", void 0);
344
+ tslib_1.__decorate([
345
+ Input()
346
+ ], HistoricalPixAccountFormComponent.prototype, "permitsEditBankAccountForm", void 0);
173
347
  tslib_1.__decorate([
174
348
  Output()
175
349
  ], HistoricalPixAccountFormComponent.prototype, "visibleChange", void 0);
@@ -188,18 +362,12 @@ tslib_1.__decorate([
188
362
  tslib_1.__decorate([
189
363
  Input()
190
364
  ], HistoricalPixAccountFormComponent.prototype, "isViewMode", null);
191
- tslib_1.__decorate([
192
- Input()
193
- ], HistoricalPixAccountFormComponent.prototype, "paramsForm", null);
194
- tslib_1.__decorate([
195
- Input()
196
- ], HistoricalPixAccountFormComponent.prototype, "defaultCpfNumber", null);
197
365
  HistoricalPixAccountFormComponent = tslib_1.__decorate([
198
366
  Component({
199
367
  selector: "pix-account",
200
- template: "<div id=\"main\">\n <form *ngIf=\"showField || !(hideFields | async)\" [formGroup]=\"pixAccountFormGroup\" autocomplete=\"off\">\n <div class=\"ui-fluid\">\n <div class=\"ui-g\">\n <!-- Tipo de chave -->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label>{{'hcm.payroll.employees_addition_pix_key_type'|translate}}</label>\n <input-rest-auto-complete-enum [dropdown]=\"true\" server=\"payroll\"\n enumeration=\"PixKeyType\"\n placeholder=\"{{'hcm.payroll.select' | translate}}\"\n name=\"pixKeyType\" [form]=\"pixAccountFormGroup\"\n (onSelect)=\"onChangePixKeyType($event)\"\n (onClear)=\"onClearPixKeyType()\"\n id=\"ta-pixKeyType\"></input-rest-auto-complete-enum>\n <s-control-errors [control]=\"pixAccountFormGroup.get('pixKeyType')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n pixKeyTypeBankAccountDuplicate: 'hcm.payroll.historical_pix_key_type_bank_account_duplicate' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Chave Pix-->\n <div class=\"ui-md-6 ui-sm-12\" [ngClass]=\"{'required': pixKeyType !== 'BANK_ACCOUNT'}\">\n <label>{{'hcm.payroll.employees_addition_pix_key' | translate}}</label>\n <ng-container [ngSwitch]=\"pixKeyType\">\n <input *ngSwitchCase=\"'TELEPHONE'\" only-number\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n (keyup)=\"phoneMask($event)\" maxlength=\"15\"\n placeholder=\"(__) ____-____\">\n <p-inputMask *ngSwitchCase=\"'CPF'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"___.___.___-__\"\n mask=\"999.999.999-99\" [unmask]=\"true\"></p-inputMask>\n <p-inputMask *ngSwitchCase=\"'CNPJ'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"__.___.___/____-__\"\n mask=\"99.999.999/9999-99\" [unmask]=\"true\"></p-inputMask>\n <input *ngSwitchCase=\"'EMAIL'\"\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"{{'hcm.payroll.employees_addition_email'|translate}}\"/>\n <input *ngSwitchCase=\"'BANK_ACCOUNT'\" disabled\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"/>\n <input *ngSwitchDefault\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\" maxlength=\"100\" />\n </ng-container>\n <s-control-errors *ngIf=\"isShowPixKeyFieldValidatorMessage\" id=\"er-pix-key\"\n [control]=\"pixAccountFormGroup.get('pixKey')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n invalidPhoneNumber: 'hcm.payroll.employees_addition_invalid_phone_number' | translate: { value: pixAccountFormGroup.get('pixKey').value },\n invalidEmail: 'hcm.payroll.employees_addition_email_invalid' | translate,\n cpfNotValid: 'hcm.payroll.employees_addition_cpf_error' | translate,\n cnpjNotValid: 'hcm.payroll.employees_addition_cnpj_error' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Percentual-->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label id=\"lb-percentage\"\n for=\"ff-percentage\">{{ 'hcm.payroll.historical_bank_account_label_percentage' | translate }}</label>\n <div class=\"ui-inputgroup\">\n <span class=\"ui-inputgroup-addon\">%</span>\n <input pInputText id=\"ff-percentage\" name=\"percentage\"\n formControlName=\"percentage\"\n currencyMask\n [options]=\"optionsPercentage\"\n [placeholder]=\"percentagePlaceholder\"/>\n </div>\n <s-control-errors [control]=\"pixAccountFormGroup.get('percentage')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n maxlength: 'hcm.payroll.error_max_length' | translate: { value: '6' },\n max: 'hcm.payroll.error_max_value_number' | translate: { value: maxValuePercentage },\n min: 'hcm.payroll.error_min_value_number' | translate: { value: '0,01' }\n }\">\n </s-control-errors>\n </div>\n <div class=\"ui-g-12\">\n <p-fieldset\n legend=\"{{ 'hcm.payroll.custom_fields' | translate }}\"\n [attr.data-hidden]=\"!customFields || !customFields.fields.length\"\n >\n <s-custom-fields\n domain=\"hcm\"\n service=\"{{customService}}\"\n entity=\"{{customEntity}}\"\n formControlName=\"customFields\"\n [invalidErrorLabel]=\"'hcm.payroll.employees_invalid_field' | translate\"\n >\n </s-custom-fields>\n </p-fieldset>\n </div>\n </div>\n </div>\n </form>\n\n <div [ngClass]=\"withSideBar ? 'footer' : 'footer-s-border'\">\n <div class=\"form-group\">\n <s-button id=\"btn-save\" label=\"{{ labelBtnAdd | translate}}\" priority=\"primary\"\n (onClick)=\"addItem()\" *ngIf=\"visibleBtnSave && !this.isView\"></s-button>\n <s-button *ngIf=\"withSideBar\" id=\"btn-close\" label=\"{{'hcm.payroll.cancel'|translate}}\" priority=\"secondary\"\n priority=\"link\" (onClick)=\"close()\"></s-button>\n </div>\n </div>\n</div>\n",
368
+ template: "<div id=\"main\">\n <form [formGroup]=\"pixAccountFormGroup\" autocomplete=\"off\">\n <div class=\"ui-fluid\">\n <div class=\"ui-g\">\n <!-- Tipo de chave -->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label>{{'hcm.payroll.employees_addition_pix_key_type'|translate}}</label>\n <input-rest-auto-complete-enum [dropdown]=\"true\" server=\"payroll\"\n enumeration=\"PixKeyType\"\n placeholder=\"{{'hcm.payroll.select' | translate}}\"\n name=\"pixKeyType\" [form]=\"pixAccountFormGroup\"\n (onSelect)=\"onChangePixKeyType($event)\"\n (onClear)=\"onClearPixKeyType()\"\n id=\"ta-pixKeyType\"></input-rest-auto-complete-enum>\n <s-control-errors [control]=\"pixAccountFormGroup.get('pixKeyType')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n pixKeyTypeBankAccountDuplicate: 'hcm.payroll.historical_pix_key_type_bank_account_duplicate' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Chave Pix-->\n <div class=\"ui-md-6 ui-sm-12\" [ngClass]=\"{'required': pixKeyType !== 'BANK_ACCOUNT'}\">\n <label>{{'hcm.payroll.employees_addition_pix_key' | translate}}</label>\n <ng-container [ngSwitch]=\"pixKeyType\">\n <input *ngSwitchCase=\"'TELEPHONE'\" only-number\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n (keyup)=\"phoneMask($event)\" maxlength=\"15\"\n placeholder=\"(__) ____-____\">\n <p-inputMask *ngSwitchCase=\"'CPF'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"___.___.___-__\"\n mask=\"999.999.999-99\" [unmask]=\"true\"></p-inputMask>\n <p-inputMask *ngSwitchCase=\"'CNPJ'\"\n id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"__.___.___/____-__\"\n mask=\"99.999.999/9999-99\" [unmask]=\"true\"></p-inputMask>\n <input *ngSwitchCase=\"'EMAIL'\"\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"\n placeholder=\"{{'hcm.payroll.employees_addition_email'|translate}}\"/>\n <input *ngSwitchCase=\"'BANK_ACCOUNT'\" disabled\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\"/>\n <input *ngSwitchDefault\n pInputText id=\"ta-pixKey\" name=\"pixKey\" formControlName=\"pixKey\" maxlength=\"100\" />\n </ng-container>\n <s-control-errors *ngIf=\"isShowPixKeyFieldValidatorMessage\" id=\"er-pix-key\"\n [control]=\"pixAccountFormGroup.get('pixKey')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n invalidPhoneNumber: 'hcm.payroll.employees_addition_invalid_phone_number' | translate: { value: pixAccountFormGroup.get('pixKey').value },\n invalidEmail: 'hcm.payroll.employees_addition_email_invalid' | translate,\n cpfNotValid: 'hcm.payroll.employees_addition_cpf_error' | translate,\n cnpjNotValid: 'hcm.payroll.employees_addition_cnpj_error' | translate\n }\">\n </s-control-errors>\n </div>\n <!--Percentual-->\n <div class=\"ui-md-6 ui-sm-12 required\">\n <label id=\"lb-percentage\"\n for=\"ff-percentage\">{{ 'hcm.payroll.historical_bank_account_label_percentage' | translate }}</label>\n <div class=\"ui-inputgroup\">\n <span class=\"ui-inputgroup-addon\">%</span>\n <input pInputText id=\"ff-percentage\" name=\"percentage\"\n formControlName=\"percentage\"\n currencyMask\n [options]=\"optionsPercentage\"\n [placeholder]=\"percentagePlaceholder\"/>\n </div>\n <s-control-errors [control]=\"pixAccountFormGroup.get('percentage')\"\n [errorMessages]=\"{\n required: 'hcm.payroll.required' | translate,\n maxlength: 'hcm.payroll.error_max_length' | translate: { value: '6' },\n max: 'hcm.payroll.error_max_value_number' | translate: { value: maxValuePercentage },\n min: 'hcm.payroll.error_min_value_number' | translate: { value: '0,01' }\n }\">\n </s-control-errors>\n </div>\n <div class=\"ui-g-12\">\n <p-fieldset\n legend=\"{{ 'hcm.payroll.custom_fields' | translate }}\"\n [attr.data-hidden]=\"!customFields || !customFields.fields.length\"\n >\n <s-custom-fields\n domain=\"hcm\"\n service=\"{{customService}}\"\n entity=\"{{customEntity}}\"\n formControlName=\"customFields\"\n [invalidErrorLabel]=\"'hcm.payroll.employees_invalid_field' | translate\"\n >\n </s-custom-fields>\n </p-fieldset>\n </div>\n </div>\n </div>\n </form>\n\n <div [ngClass]=\"withSideBar ? 'footer' : 'footer-s-border'\">\n <div class=\"form-group\">\n <s-button id=\"btn-save\" label=\"{{ labelBtnAdd | translate}}\" priority=\"primary\"\n (onClick)=\"addItem()\" *ngIf=\"visibleBtnSave && !this.isView\"></s-button>\n <s-button *ngIf=\"withSideBar\" id=\"btn-close\" label=\"{{'hcm.payroll.cancel'|translate}}\" priority=\"secondary\"\n priority=\"link\" (onClick)=\"close()\"></s-button>\n </div>\n </div>\n</div>\n",
201
369
  styles: [".refresh{width:100%!important}#table-annuity .col-default-s{width:10%}#table-annuity .col-default-m{width:12%}#table-annuity .col-default-l{width:16%}#table-annuity .col-action{width:10%}#table-annuity .icon-warning{text-align:center!important;color:#ff6d00c7!important}@media screen and (max-width:612px){#table-annuity .col-default-1,#table-annuity .col-default-2{width:16%}#table-annuity .col-default-3{width:26%}#table-annuity .col-icon{width:10%}#table-annuity .col-action{width:27%}}#main{display:-webkit-box;display:flex;height:100%;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}#main form{height:100%}#main .footer{border-top:1px solid #ccc;padding-top:15px;margin-top:15px;flex-shrink:0;margin-bottom:-18px}#main .footer-s-border{padding-left:7px;flex-shrink:0;margin-bottom:-18px}"]
202
370
  })
203
371
  ], HistoricalPixAccountFormComponent);
204
372
  export { HistoricalPixAccountFormComponent };
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yaWNhbC1waXgtYWNjb3VudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItZ2VzdGFvLXBlc3NvYXMvcGF5cm9sbC1jb3JlLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9oaXN0b3JpY2FsLXBpeC1hY2NvdW50L2hpc3RvcmljYWwtcGl4LWFjY291bnQtZm9ybS9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGFBQWEsRUFDYixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQXVCLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLGlCQUFpQixHQUNwQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTzFFLElBQWEsaUNBQWlDLEdBQTlDLE1BQWEsaUNBQWtDLFNBQVEsd0JBQXdCO0lBd0IzRSxZQUNJLFdBQXdCLEVBQ2hCLEVBQXFCLEVBQ3JCLGtCQUFzQztRQUU5QyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFIWCxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FB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QUFHRDtJQURDLEtBQUssRUFBRTt5RUFHUDtBQTVLUSxpQ0FBaUM7SUFMN0MsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGFBQWE7UUFDdkIsazhOQUEyRDs7S0FFOUQsQ0FBQztHQUNXLGlDQUFpQyxDQTZLN0M7U0E3S1ksaUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTnVtYmVyTG9jYWxlT3B0aW9ucywgQ3VzdG9tRmllbGRzQ29tcG9uZW50IH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtcbiAgICBjb25maWdFbmFibGVkRmllbGRzLFxuICAgIG1vdW50Q3VzdG9tVG9TaG93LFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvaGVscGVyc1wiO1xuaW1wb3J0IHsgRm9ybWF0VXRpbHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2Zvcm1hdC11dGlscy9mb3JtYXQtdXRpbHMuc2VydmljZVwiO1xuaW1wb3J0IHsgU2hhcmVkU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9zaGFyZWQtc3RhdGUuc2VydmljZVwiO1xuaW1wb3J0IHsgSGlzdG9yaWNha1BpeEFjY291bnRCYXNlIH0gZnJvbSBcIi4uL2hpc3RvcmljYWwtcGl4LWFjY291bnQtYmFzZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJwaXgtYWNjb3VudFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vaGlzdG9yaWNhbC1waXgtYWNjb3VudC1mb3JtLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuLi9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIEhpc3RvcmljYWxQaXhBY2NvdW50Rm9ybUNvbXBvbmVudCBleHRlbmRzIEhpc3RvcmljYWtQaXhBY2NvdW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBAVmlld0NoaWxkKEN1c3RvbUZpZWxkc0NvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkc0NvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpIHB1YmxpYyBjdXJyZW5jeTogTnVtYmVyTG9jYWxlT3B0aW9ucztcbiAgICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tRW50aXR5OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGN1c3RvbVNlcnZpY2U6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgd2l0aFNpZGVCYXI6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIHNob3dGaWVsZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyB2aXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBwaXhBY2NvdW50SXRlbVRvTGlzdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHByaXZhdGUgX3Zpc2libGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIGVtcGxveWVlSWQ6IHN0cmluZztcblxuICAgIHB1YmxpYyBsYWJlbEJ0bkFkZDogc3RyaW5nID0gXCJoY20ucGF5cm9sbC5lbXBsb3llZXNfYWRkXCI7XG4gICAgcHVibGljIHZpc2libGVCdG5TYXZlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBwdWJsaWMgaXNWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGlzU2hvd1BpeEtleUZpZWxkVmFsaWRhdG9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlRmllbGRzID0gdGhpcy5zaGFyZWRTdGF0ZVNlcnZpY2UuaGlkZUZpZWxkJDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHNoYXJlZFN0YXRlU2VydmljZTogU2hhcmVkU3RhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGZvcm1CdWlsZGVyKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN1YmplY3RzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJTdWJqZWN0cygpOiB2b2lkIHt9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodGhpcy52aXNpYmxlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgaXNFZGl0QW5kVmlld1ZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgICAgdGhpcy52aXNpYmxlQnRuU2F2ZSA9IHRydWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5jdXJyZW50SXRlbSAmJiBPYmplY3Qua2V5cyh2YWx1ZS5jdXJyZW50SXRlbSkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmNvbnZlcnREVE9Ub1Nob3dXaXRoQ3VzdG9tRmllbGRzKHsgLi4udmFsdWUuY3VycmVudEl0ZW0gfSkpO1xuICAgICAgICAgICAgdGhpcy5sYWJlbEJ0bkFkZCA9IFwiaGNtLnBheXJvbGwuZW1wbG95ZWVzX3VwZGF0ZVwiO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzQWNjb3JkaW5nTGlzdCh2YWx1ZS5saXN0RGF0YSwgdmFsdWUuY3VycmVudEl0ZW1bXCJpbmRleFwiXSwgdmFsdWUgJiYgdmFsdWVbXCJpc0VkaXRNb2RlXCJdKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1ZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0VuYWJsZUZpZWxkcyh2YWx1ZSAmJiB2YWx1ZVtcImlzRWRpdE1vZGVcIl0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIikudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIikudmFsdWUua2V5O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdFBpeEtleVRlbGVwaG9uZU51bWJlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxCdG5BZGQgPSBcImhjbS5wYXlyb2xsLmVtcGxveWVlc19hZGRcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0UGl4S2V5VGVsZXBob25lTnVtYmVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5waXhLZXlUeXBlID09PSBcIlRFTEVQSE9ORVwiKSB7XG4gICAgICAgICAgICBjb25zdCBwaXhLZXlDdHJsID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKTtcbiAgICAgICAgICAgIHBpeEtleUN0cmwuc2V0VmFsdWUoRm9ybWF0VXRpbHNTZXJ2aWNlLmdldEZvcm1hdHRlZFRlbGVwaG9uZU51bWJlcihwaXhLZXlDdHJsLnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29udmVydERUT1RvU2hvd1dpdGhDdXN0b21GaWVsZHMoZGF0YTogb2JqZWN0KTogb2JqZWN0IHtcbiAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7IC4uLmRhdGEgfTtcbiAgICAgICAgb2JqW1wiY3VzdG9tRmllbGRzXCJdID0gbW91bnRDdXN0b21Ub1Nob3cob2JqW1wiY3VzdG9tRmllbGRzXCJdKTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZ0VuYWJsZUZpZWxkcyhpc0VkaXRNb2RlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlzaWJsZUJ0blNhdmUgPSBpc0VkaXRNb2RlO1xuXG4gICAgICAgIGlmICh0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5VHlwZVwiKS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5waXhLZXlUeXBlID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIikudmFsdWUua2V5O1xuICAgICAgICAgICAgdGhpcy5zZXRQaXhLZXlWYWxpZGF0b3JzKGlzRWRpdE1vZGUsIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdFBpeEtleVRlbGVwaG9uZU51bWJlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRW5hYmxlZEZpZWxkcyh0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAsIGlzRWRpdE1vZGUsIFtcbiAgICAgICAgICAgIFwicGl4S2V5VHlwZVwiLFxuICAgICAgICAgICAgXCJwaXhLZXlcIixcbiAgICAgICAgICAgIFwicGVyY2VudGFnZVwiLFxuICAgICAgICAgICAgXCJjdXN0b21GaWVsZHNcIlxuICAgICAgICBdLCBbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSXRlbSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW1wbG95ZWVJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJlbXBsb3llZVwiKS5zZXRWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlSWQ6IHRoaXMuZW1wbG95ZWVJZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50SXRlbVRvTGlzdC5lbWl0KHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5yZXNldCgpO1xuICAgICAgICB0aGlzLmxhYmVsQnRuQWRkID0gXCJoY20ucGF5cm9sbC5lbXBsb3llZXNfYWRkXCI7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcyAmJiB0aGlzLmN1c3RvbUZpZWxkcy5mb3JtR3JvdXApIHRoaXMuY3VzdG9tRmllbGRzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGVyY2VudGFnZVBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgMCR7dGhpcy5jdXJyZW5jeSAmJiB0aGlzLmN1cnJlbmN5LmRlY2ltYWxTZXBhcmF0b3J9MDBgO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb3B0aW9uc1BlcmNlbnRhZ2UoKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5nZXRPcHRpb25zKCksIHByZWNpc2lvbjogMiB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9ucygpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICAgICAgdGhvdXNhbmRzOiB0aGlzLmN1cnJlbmN5LnRob3VzYW5kc1NlcGFyYXRvcixcbiAgICAgICAgICAgIGRlY2ltYWw6IHRoaXMuY3VycmVuY3kuZGVjaW1hbFNlcGFyYXRvclxuICAgICAgICB9O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBnZXRMaXN0UGl4QWNjb3VudChwaXhBY2NvdW50TGlzdDogb2JqZWN0W10pIHtcbiAgICAgICAgaWYgKHBpeEFjY291bnRMaXN0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRvcnNBY2NvcmRpbmdMaXN0KHBpeEFjY291bnRMaXN0LCBudWxsLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGlzVmlld01vZGUoY29uZGl0aW9uOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNWaWV3ID0gISEoY29uZGl0aW9uICYmICF0aGlzLndpdGhTaWRlQmFyKTtcbiAgICAgICAgdGhpcy5jb25maWdFbmFibGVGaWVsZHMoIXRoaXMuaXNWaWV3KTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlldykgdGhpcy5yZXNldEZvcm0oKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcGFyYW1zRm9ybSh2YWx1ZTogRm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLl9wYXJhbXNGb3JtID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRlZmF1bHRDcGZOdW1iZXIodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kZWZhdWx0Q3BmTnVtYmVyID0gdmFsdWU7XG4gICAgfVxufVxuIl19
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yaWNhbC1waXgtYWNjb3VudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItZ2VzdGFvLXBlc3NvYXMvcGF5cm9sbC1jb3JlLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9oaXN0b3JpY2FsLXBpeC1hY2NvdW50L2hpc3RvcmljYWwtcGl4LWFjY291bnQtZm9ybS9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGFBQWEsRUFDYixTQUFTLEVBQ1QsT0FBTyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUF1QixxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsaUJBQWlCLEdBQ3BCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFPbkYsSUFBYSxpQ0FBaUMsR0FBOUMsTUFBYSxpQ0FBaUM7SUF5QzFDLFlBQ1ksV0FBd0IsRUFDeEIsRUFBcUI7UUFEckIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFoQzFCLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBRTVCLGVBQVUsR0FBWSxLQUFLLENBQUM7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QUE7O1lBaFY0QixXQUFXO1lBQ3BCLGlCQUFpQjs7QUF6Q2pDO0lBREMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO3VFQUNmO0FBR3BDO0lBREMsS0FBSyxFQUFFO21FQUM2QjtBQUVyQztJQURDLEtBQUssRUFBRTt1RUFDb0I7QUFFNUI7SUFEQyxLQUFLLEVBQUU7d0VBQ3FCO0FBRTdCO0lBREMsS0FBSyxFQUFFO3NFQUMyQjtBQUVuQztJQURDLEtBQUssRUFBRTtxRUFDMkI7QUFFbkM7SUFEQyxLQUFLLEVBQUU7cUVBQ3lDO0FBRWpEO0lBREMsS0FBSyxFQUFFOzJFQUMrQjtBQUV2QztJQURDLEtBQUssRUFBRTtxRkFDMkM7QUFHbkQ7SUFEQyxNQUFNLEVBQUU7d0VBQ2lFO0FBRTFFO0lBREMsTUFBTSxFQUFFOytFQUNnRTtBQXFGekU7SUFEQyxLQUFLLEVBQUU7Z0VBR1A7QUFRRDtJQURDLEtBQUssRUFBRTsyRUFxQlA7QUFpRkQ7SUFEQyxLQUFLLEVBQUU7MEVBT1A7QUE2RkQ7SUFEQyxLQUFLLEVBQUU7bUVBS1A7QUFuVVEsaUNBQWlDO0lBTDdDLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxhQUFhO1FBQ3ZCLG81TkFBMkQ7O0tBRTlELENBQUM7R0FDVyxpQ0FBaUMsQ0EwWDdDO1NBMVhZLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBEb0NoZWNrLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgVmFsaWRhdG9yRm4sIEFic3RyYWN0Q29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTnVtYmVyTG9jYWxlT3B0aW9ucywgQ3VzdG9tRmllbGRzQ29tcG9uZW50IH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtcbiAgICB2ZXJpZnlWYWxpZGF0aW9uc0Zvcm0sXG4gICAgY29uZmlnRW5hYmxlZEZpZWxkcyxcbiAgICBtb3VudEN1c3RvbVRvU2hvdyxcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL2hlbHBlcnNcIjtcbmltcG9ydCB7IEdlbmVyaWNWYWxpZGF0b3IgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZ2VuZXJpYy12YWxpZGF0b3JzXCI7XG5pbXBvcnQgeyBGb3JtYXRVdGlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZm9ybWF0LXV0aWxzL2Zvcm1hdC11dGlscy5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcInBpeC1hY2NvdW50XCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9oaXN0b3JpY2FsLXBpeC1hY2NvdW50LWZvcm0uY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcIi4uL2hpc3RvcmljYWwtcGl4LWFjY291bnQuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgSGlzdG9yaWNhbFBpeEFjY291bnRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIERvQ2hlY2sge1xuICAgIEBWaWV3Q2hpbGQoQ3VzdG9tRmllbGRzQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRzQ29tcG9uZW50O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VycmVuY3k6IE51bWJlckxvY2FsZU9wdGlvbnM7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VzdG9tRW50aXR5OiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VzdG9tU2VydmljZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHdpdGhTaWRlQmFyOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGFyYW1zRm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVmYXVsdENwZk51bWJlcjogc3RyaW5nID0gbnVsbDtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwZXJtaXRzRWRpdEJhbmtBY2NvdW50Rm9ybTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGl4QWNjb3VudEl0ZW1Ub0xpc3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwcml2YXRlIF92aXNpYmxlOiBib29sZWFuO1xuICAgIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSBlbXBsb3llZUlkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwaXhBY2NvdW50TGlzdDogb2JqZWN0W107XG4gICAgcHJpdmF0ZSBpbml0aWFsVmFsaWRhdG9yT2ZQZXJjZW50YWdlOiBWYWxpZGF0b3JGbltdID0gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDAuMDEpXTtcblxuXG4gICAgcHVibGljIGxhYmVsQnRuQWRkOiBzdHJpbmcgPSBcImhjbS5wYXlyb2xsLmVtcGxveWVlc19hZGRcIjtcbiAgICBwdWJsaWMgcGl4QWNjb3VudEZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBtYXhWYWx1ZVBlcmNlbnRhZ2U6IG51bWJlciA9IDEwMC4wMDtcbiAgICBwdWJsaWMgdmlzaWJsZUJ0blNhdmU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHB1YmxpYyBpc1ZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgcGl4S2V5VHlwZTogc3RyaW5nO1xuICAgIHB1YmxpYyBpc1Nob3dQaXhLZXlGaWVsZFZhbGlkYXRvck1lc3NhZ2UgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdWJqZWN0cygpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cCAmJiB0aGlzLnBpeEtleVR5cGUgPT09IFwiQkFOS19BQ0NPVU5UXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBpeEtleUNvbnRyb2wgPSB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5XCIpO1xuICAgICAgICAgICAgaWYgKHBpeEtleUNvbnRyb2wgJiYgIXBpeEtleUNvbnRyb2wuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBwaXhLZXlDb250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlclN1YmplY3RzKCk6IHZvaWQge1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICBpbmRleDogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpLFxuICAgICAgICAgICAgZW1wbG95ZWU6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh7IHZhbHVlOiB7IHRhYmxlSWQ6IG51bGwgfSwgZGlzYWJsZWQ6IHRydWUgfSksXG4gICAgICAgICAgICBkYXRlQ2hhbmdlOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICBwaXhLZXlUeXBlOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICBwaXhLZXk6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgICAgIHBlcmNlbnRhZ2U6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuaW5pdGlhbFZhbGlkYXRvck9mUGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heCh0aGlzLm1heFZhbHVlUGVyY2VudGFnZSksXG4gICAgICAgICAgICBdKSksXG4gICAgICAgICAgICBleHRlcm5hbElkOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCksXG4gICAgICAgICAgICBjdXN0b21GaWVsZHM6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hhbmdlUGl4S2V5VHlwZShpdGVtOiBhbnkpIHtcbiAgICAgICAgaWYgKGl0ZW0ua2V5KSB7XG4gICAgICAgICAgICB0aGlzLnBpeEtleVR5cGUgPSBpdGVtLmtleTtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93UGl4S2V5RmllbGRWYWxpZGF0b3JNZXNzYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlcIikucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGl4S2V5VmFsaWRhdG9ycyh0cnVlKTtcblxuICAgICAgICAgICAgaWYoaXRlbS5rZXkgPT09IFwiQ1BGXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRDcGZQaXhLZXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyUGl4S2V5VHlwZSgpIHtcbiAgICAgICAgdGhpcy5pc1Nob3dQaXhLZXlGaWVsZFZhbGlkYXRvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKS5yZXNldCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0aGlzLnZpc2libGUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBpc0VkaXRBbmRWaWV3VmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICB0aGlzLnZpc2libGVCdG5TYXZlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmN1cnJlbnRJdGVtICYmIE9iamVjdC5rZXlzKHZhbHVlLmN1cnJlbnRJdGVtKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuY29udmVydERUT1RvU2hvd1dpdGhDdXN0b21GaWVsZHMoey4uLnZhbHVlLmN1cnJlbnRJdGVtfSkpO1xuICAgICAgICAgICAgdGhpcy5sYWJlbEJ0bkFkZCA9IFwiaGNtLnBheXJvbGwuZW1wbG95ZWVzX3VwZGF0ZVwiO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzQWNjb3JkaW5nTGlzdCh2YWx1ZS5saXN0RGF0YSwgdmFsdWUuY3VycmVudEl0ZW1bXCJpbmRleFwiXSwgdmFsdWUgJiYgdmFsdWVbXCJpc0VkaXRNb2RlXCJdKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1ZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0VuYWJsZUZpZWxkcyh2YWx1ZSAmJiB2YWx1ZVtcImlzRWRpdE1vZGVcIl0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5VHlwZVwiKS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpeEtleVR5cGUgPSB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5VHlwZVwiKS52YWx1ZS5rZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXRQaXhLZXlUZWxlcGhvbmVOdW1iZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsQnRuQWRkID0gXCJoY20ucGF5cm9sbC5lbXBsb3llZXNfYWRkXCI7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0UGl4S2V5VGVsZXBob25lTnVtYmVyKCkge1xuICAgICAgICBpZiAodGhpcy5waXhLZXlUeXBlID09PSBcIlRFTEVQSE9ORVwiKSB7XG4gICAgICAgICAgICB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5XCIpLnNldFZhbHVlKEZvcm1hdFV0aWxzU2VydmljZS5nZXRGb3JtYXR0ZWRUZWxlcGhvbmVOdW1iZXIodGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKS52YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnZlcnREVE9Ub1Nob3dXaXRoQ3VzdG9tRmllbGRzKGRhdGE6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IG9iajogYW55ID0gey4uLiBkYXRhfTtcbiAgICAgICAgb2JqW1wiY3VzdG9tRmllbGRzXCJdID0gbW91bnRDdXN0b21Ub1Nob3cob2JqW1wiY3VzdG9tRmllbGRzXCJdKTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbmZpZ0VuYWJsZUZpZWxkcyhpc0VkaXRNb2RlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudmlzaWJsZUJ0blNhdmUgPSBpc0VkaXRNb2RlO1xuXG4gICAgICAgIGlmKHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlUeXBlXCIpLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnBpeEtleVR5cGUgPSB0aGlzLnBpeEFjY291bnRGb3JtR3JvdXAuZ2V0KFwicGl4S2V5VHlwZVwiKS52YWx1ZS5rZXk7XG4gICAgICAgICAgICB0aGlzLnNldFBpeEtleVZhbGlkYXRvcnMoaXNFZGl0TW9kZSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybWF0UGl4S2V5VGVsZXBob25lTnVtYmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdFbmFibGVkRmllbGRzKHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cCwgaXNFZGl0TW9kZSwgW1xuICAgICAgICAgICAgXCJwaXhLZXlUeXBlXCIsXG4gICAgICAgICAgICBcInBpeEtleVwiLFxuICAgICAgICAgICAgXCJwZXJjZW50YWdlXCIsXG4gICAgICAgICAgICBcImN1c3RvbUZpZWxkc1wiLFxuICAgICAgICBdLCBbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSXRlbSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdmVyaWZ5VmFsaWRhdGlvbnNGb3JtLmNhbGwodGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwKTtcblxuICAgICAgICBpZiAodGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbXBsb3llZUlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcImVtcGxveWVlXCIpLnNldFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGVJZDogdGhpcy5lbXBsb3llZUlkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50SXRlbVRvTGlzdC5lbWl0KHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5yZXNldCgpO1xuICAgICAgICB0aGlzLmxhYmVsQnRuQWRkID0gXCJoY20ucGF5cm9sbC5lbXBsb3llZXNfYWRkXCI7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcyAmJiB0aGlzLmN1c3RvbUZpZWxkcy5mb3JtR3JvdXApIHRoaXMuY3VzdG9tRmllbGRzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGVyY2VudGFnZVBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgMCR7IHRoaXMuY3VycmVuY3kgJiYgdGhpcy5jdXJyZW5jeS5kZWNpbWFsU2VwYXJhdG9yIH0wMGA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvcHRpb25zUGVyY2VudGFnZSgpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4geyAuLi50aGlzLmdldE9wdGlvbnMoKSwgcHJlY2lzaW9uOiAyIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgICAgICB0aG91c2FuZHM6IHRoaXMuY3VycmVuY3kudGhvdXNhbmRzU2VwYXJhdG9yLFxuICAgICAgICAgICAgZGVjaW1hbDogdGhpcy5jdXJyZW5jeS5kZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE8gSW5wdXQgcXVlIHJlY2ViZSBhIGxpc3RhIGRvIGNvbXBvbmVudCBwYWkgZSBjaGFtYSBvIG3DqXRvZG8gZGUgdmFsaWRhw6fDo28gcGFzc2FuZG8gYSBsaXN0YSByZWNlYmlkYS5cbiAgICAgKiBAcGFyYW0gcGl4QWNjb3VudExpc3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZ2V0TGlzdFBpeEFjY291bnQocGl4QWNjb3VudExpc3Q6IG9iamVjdFtdKSB7XG4gICAgICAgIGlmIChwaXhBY2NvdW50TGlzdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzQWNjb3JkaW5nTGlzdChwaXhBY2NvdW50TGlzdCwgbnVsbCwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlY2ViZSBhIGxpc3RhIGRlIHJlZ2lzdHJvcyBqw6EgaW5zZXJpZG9zIG5hIHRhYmVsYSBhZGljaW9uYSBlbSB1bWEgdmFyacOhdmVsIG9zIHZhbG9yZXMgcXVlIHNlcsOjbyB1c2Fkb3MgcGFyYVxuICAgICAqIGEgdmFsaWRhw6fDo28gZG9zIGNhbXBvcyBcInBlcmNlbnRhZ2VcIiBlIFwicGl4QWNjb3VudFwiLlxuICAgICAqIFF1YW5kbyB0ZW0gaW5kZXggc2lnbmlmaWNhIHF1ZSBlc3TDoSBlbSB1bWEgZWRpw6fDo28sIG9zIHZhbG9yZXMgbmEgcG9zacOnw6NvIGRvIHJlZ2lzdHJvIGRhIGVkacOnw6NvIChpbmRleCkgbsOjbyBzZXLDo28gYWRpY2lvbmFkb3NcbiAgICAgKiBubyBhcnJheSBkZSBjb21wYXJhw6fDo28gZG9zIHZhbGlkYXRvcnMuXG4gICAgICogQHBhcmFtIHBpeEFjY291bnRMaXN0XG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRWYWxpZGF0b3JzQWNjb3JkaW5nTGlzdChwaXhBY2NvdW50TGlzdDogb2JqZWN0W10sIGluZGV4OiBudW1iZXIgPSBudWxsLCBpc0VkaXRNb2RlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnBpeEFjY291bnRMaXN0ID0gcGl4QWNjb3VudExpc3QgJiYgcGl4QWNjb3VudExpc3QubGVuZ3RoID8gWy4uLnBpeEFjY291bnRMaXN0XSA6IFtdO1xuXG4gICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VJbmNsdWRlZDogYW55ID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMucGl4QWNjb3VudExpc3QgJiYgdGhpcy5waXhBY2NvdW50TGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudExpc3QuZmlsdGVyKChmaWVsZDogYW55LCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRbXCJwZXJjZW50YWdlXCJdICYmIGtleSAhPSBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlSW5jbHVkZWQucHVzaChmaWVsZFtcInBlcmNlbnRhZ2VcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iZWZvcmVTZXRQaXhLZXlUeXBlVmFsaWRhdG9yKCk7XG4gICAgICAgIHRoaXMuc2V0UGl4S2V5VmFsaWRhdG9ycyhpc0VkaXRNb2RlKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVBlcmNlbnRhZ2VWYWxpZChwZXJjZW50YWdlSW5jbHVkZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFudGVzIGRlIHNldGFyIG8gdmFsaWRhdG9yIHByZXBhcmEgYXMgdmFyacOhdmVpcyBuZWNlc3PDoXJpYSBwYXJhIHF1ZSBzZWphIGZlaXRhIGEgdmFsaWRhw6fDo28gZG8gY2FtcG8uXG4gICAgICovXG4gICAgcHVibGljIHNldFBpeEtleVZhbGlkYXRvcnMoaXNFZGl0TW9kZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBnZW5lcmljUGl4S2V5ID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKTtcbiAgICAgICAgaWYgKHRoaXMucGl4S2V5VHlwZSkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBpeEtleVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiVEVMRVBIT05FXCI6XG4gICAgICAgICAgICAgICAgICAgIGdlbmVyaWNQaXhLZXkuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCwgR2VuZXJpY1ZhbGlkYXRvci5pc1ZhbGlkUGhvbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIF0pKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkVNQUlMXCI6XG4gICAgICAgICAgICAgICAgICAgIGdlbmVyaWNQaXhLZXkuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCwgR2VuZXJpY1ZhbGlkYXRvci5pc1ZhbGlkRW1haWwsXG4gICAgICAgICAgICAgICAgICAgIF0pKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkNQRlwiOlxuICAgICAgICAgICAgICAgICAgICBnZW5lcmljUGl4S2V5LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsIEdlbmVyaWNWYWxpZGF0b3IuaXNWYWxpZENwZixcbiAgICAgICAgICAgICAgICAgICAgXSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiQ05QSlwiOlxuICAgICAgICAgICAgICAgICAgICBnZW5lcmljUGl4S2V5LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsIEdlbmVyaWNWYWxpZGF0b3IuaXNWYWxpZENucGosXG4gICAgICAgICAgICAgICAgICAgIF0pKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlJBTkRPTV9LRVlcIjpcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBnZW5lcmljUGl4S2V5LnNldFZhbGlkYXRvcnMobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihpc0VkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS5lbmFibGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2VuZXJpY1BpeEtleS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzdGUgbcOpdG9kbyBjYWxjdWxhIGFzIHBhcmNlbnRhZ2VucyBxdWUgasOhIGZvcmFtIGluc2VyaWRhcywgZSBzZXRhIGEgZGlmZXJlbsOnYSBwYXJhIGNoZWdhciBlbVxuICAgICAqIDEwMCUgbmEgdmFsaWRhw6fDo28gZG8gY2FtcG8gXCJwZXJjZW50YWdlXCIgY29tbyB1bSBub3ZvIG1heFZhbHVlO1xuICAgICAqIEBwYXJhbSBsaXN0VmFsdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbGlkYXRlUGVyY2VudGFnZVZhbGlkKGxpc3RWYWx1ZTogbnVtYmVyW10pIHtcbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwZXJjZW50YWdlXCIpO1xuICAgICAgICB0aGlzLm1heFZhbHVlUGVyY2VudGFnZSA9IGxpc3RWYWx1ZVxuICAgICAgICAgICAgLnJlZHVjZSgoY3VycmVudFZhbHVlLCB0b3RhbCkgPT4gY3VycmVudFZhbHVlIC0gdG90YWwsXG4gICAgICAgICAgICAgICAgMTAwLjAwLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICBwZXJjZW50YWdlXG4gICAgICAgICAgICAuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuaW5pdGlhbFZhbGlkYXRvck9mUGVyY2VudGFnZSxcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heCh0aGlzLm1heFZhbHVlUGVyY2VudGFnZSksXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgIHBlcmNlbnRhZ2UudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBpc1ZpZXdNb2RlKGNvbmRpdGlvbjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzVmlldyA9ICEhKGNvbmRpdGlvbiAmJiAhdGhpcy53aXRoU2lkZUJhcik7XG4gICAgICAgIHRoaXMuY29uZmlnRW5hYmxlRmllbGRzKCF0aGlzLmlzVmlldyk7XG4gICAgICAgIGlmICghdGhpcy5pc1ZpZXcpIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBob25lTWFzayhldmVudDogYW55KSB7XG4gICAgICAgIEZvcm1hdFV0aWxzU2VydmljZS5mb3JtYXRUZWxlcGhvbmVJbnB1dEV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBzZXREZWZhdWx0Q3BmUGl4S2V5KCkge1xuICAgICAgICBpZih0aGlzLmRlZmF1bHRDcGZOdW1iZXIpIHtcbiAgICAgICAgICAgIHRoaXMucGl4QWNjb3VudEZvcm1Hcm91cC5nZXQoXCJwaXhLZXlcIikuc2V0VmFsdWUodGhpcy5kZWZhdWx0Q3BmTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNoZWV0RG9jdW1lbnQgPSB0aGlzLnBhcmFtc0Zvcm0uZ2V0KFwic2hlZXREb2N1bWVudFwiKTtcbiAgICAgICAgICAgIGlmKHNoZWV0RG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjcGYgPSBzaGVldERvY3VtZW50LmdldChcImNwZk51bWJlclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZihjcGYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVwiKS5zZXRWYWx1ZShjcGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBiZWZvcmVTZXRQaXhLZXlUeXBlVmFsaWRhdG9yKCkge1xuICAgICAgICBjb25zdCBwaXhLZXlUeXBlID0gdGhpcy5waXhBY2NvdW50Rm9ybUdyb3VwLmdldChcInBpeEtleVR5cGVcIik7XG5cbiAgICAgICAgaWYgKHRoaXMucGl4QWNjb3VudExpc3QgJiYgdGhpcy5waXhBY2NvdW50TGlzdC5sZW5ndGggJiYgcGl4S2V5VHlwZSkge1xuICAgICAgICAgICAgcGl4S2V5VHlwZVxuICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVEdXBsaWNhdGVQaXhLZXlUeXBlQmFua0FjY291bnQodGhpcy5waXhBY2NvdW50TGlzdCksXG4gICAgICAgICAgICAgICAgXSkpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwaXhLZXlUeXBlLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlRHVwbGljYXRlUGl4S2V5VHlwZUJhbmtBY2NvdW50KGxpc3RDb21wYXJlOiBvYmplY3RbXSkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvcnMgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sICYmIGNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICBsZXQgY29uZGl0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICBsaXN0Q29tcGFyZS5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRbXCJwaXhLZXlUeXBlXCJdLmtleSA9PT0gJ0JBTktfQUNDT1VOVCcgJiYgdmFsdWUua2V5ID09PSBmaWVsZFtcInBpeEtleVR5cGVcIl0ua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uICYmICF0aGlzLnBlcm1pdHNFZGl0QmFua0FjY291bnRGb3JtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcGl4S2V5VHlwZUJhbmtBY2NvdW50RHVwbGljYXRlOiB0cnVlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==