kwikid-forms 0.1.3 → 0.1.4

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 (49) hide show
  1. package/bundles/kwikid-forms.umd.js +308 -933
  2. package/bundles/kwikid-forms.umd.js.map +1 -1
  3. package/esm2015/lib/renderer/form-view/definitions/apis/form-view.apis.type.definitions.js +1 -1
  4. package/esm2015/lib/renderer/form-view/definitions/fields/form-view.fields.type.definitions.js +1 -1
  5. package/esm2015/lib/renderer/form-view/definitions/sources/form-view.sources.type.definitions.js +1 -1
  6. package/esm2015/lib/renderer/form-view/definitions/validations/form-view.validations.type.definitions.js +1 -1
  7. package/esm2015/lib/renderer/form-view/form-view.component.js +81 -55
  8. package/esm2015/lib/renderer/form-view/helpers/form-view.apis.helper.js +48 -16
  9. package/esm2015/lib/renderer/form-view/helpers/form-view.defaults.helper.js +20 -9
  10. package/esm2015/lib/renderer/form-view/helpers/form-view.fields.helper.js +7 -7
  11. package/esm2015/lib/renderer/form-view/helpers/form-view.validations.helper.js +33 -27
  12. package/esm2015/lib/renderer/forms-list/forms-list.component.js +4 -5
  13. package/esm2015/lib/renderer/renderer.component.js +13 -9
  14. package/esm2015/lib/renderer/renderer.config-converter.helper.js +60 -58
  15. package/esm2015/lib/renderer/renderer.service.js +4 -5
  16. package/fesm2015/kwikid-forms.js +271 -767
  17. package/fesm2015/kwikid-forms.js.map +1 -1
  18. package/lib/renderer/form-view/definitions/apis/form-view.apis.type.definitions.d.ts +1 -1
  19. package/lib/renderer/form-view/definitions/fields/form-view.fields.type.definitions.d.ts +1 -2
  20. package/lib/renderer/form-view/definitions/sources/form-view.sources.type.definitions.d.ts +2 -2
  21. package/lib/renderer/form-view/definitions/validations/form-view.validations.type.definitions.d.ts +1 -2
  22. package/lib/renderer/form-view/form-view.component.d.ts +2 -2
  23. package/package.json +3 -3
  24. package/esm2015/lib/renderer/form-view/definitions/rules/form-view.rules.enum.definitions.js +0 -7
  25. package/esm2015/lib/renderer/form-view/definitions/rules/form-view.rules.type.definitions.js +0 -2
  26. package/esm2015/lib/renderer/form-view/definitions/sources/form-view.sources.enum.definitions.js +0 -17
  27. package/esm2015/lib/renderer/form-view/helpers/form-view.actions.helper.js +0 -27
  28. package/esm2015/lib/renderer/form-view/helpers/form-view.condition.helper.js +0 -46
  29. package/esm2015/lib/renderer/form-view/helpers/form-view.rules.helper.js +0 -83
  30. package/esm2015/lib/renderer/form-view/helpers/form-view.sources.helper.js +0 -161
  31. package/esm2015/lib/renderer/forms-list/forms-list.helper.js +0 -4
  32. package/esm2015/lib/renderer/helpers/renderer.actions.helper.js +0 -21
  33. package/esm2015/lib/renderer/helpers/renderer.condition.helper.js +0 -41
  34. package/esm2015/lib/renderer/helpers/renderer.rules.helper.js +0 -64
  35. package/esm2015/lib/renderer/helpers/renderer.sources.helper.js +0 -117
  36. package/esm2015/lib/renderer/helpers/renderer.validations.helper.js +0 -40
  37. package/lib/renderer/form-view/definitions/rules/form-view.rules.enum.definitions.d.ts +0 -5
  38. package/lib/renderer/form-view/definitions/rules/form-view.rules.type.definitions.d.ts +0 -41
  39. package/lib/renderer/form-view/definitions/sources/form-view.sources.enum.definitions.d.ts +0 -14
  40. package/lib/renderer/form-view/helpers/form-view.actions.helper.d.ts +0 -13
  41. package/lib/renderer/form-view/helpers/form-view.condition.helper.d.ts +0 -8
  42. package/lib/renderer/form-view/helpers/form-view.rules.helper.d.ts +0 -12
  43. package/lib/renderer/form-view/helpers/form-view.sources.helper.d.ts +0 -29
  44. package/lib/renderer/forms-list/forms-list.helper.d.ts +0 -1
  45. package/lib/renderer/helpers/renderer.actions.helper.d.ts +0 -9
  46. package/lib/renderer/helpers/renderer.condition.helper.d.ts +0 -8
  47. package/lib/renderer/helpers/renderer.rules.helper.d.ts +0 -9
  48. package/lib/renderer/helpers/renderer.sources.helper.d.ts +0 -18
  49. package/lib/renderer/helpers/renderer.validations.helper.d.ts +0 -11
@@ -1,22 +1,18 @@
1
1
  import { __awaiter, __decorate } from "tslib";
2
2
  import { Component, EventEmitter, Inject, Input, Output } from "@angular/core";
3
3
  import { FormGroup } from "@angular/forms";
4
- import { logMethod } from "kwikid-toolkit";
5
4
  import { TuiAlertService } from "@taiga-ui/core";
6
5
  import { TuiPushService } from "@taiga-ui/kit";
6
+ import { Actions, checkObjectKeyExists, Condition, isEmptyValue, isNotEmptyValue, logMethod, Rules, Sources } from "kwikid-toolkit";
7
7
  import { pairwise } from "rxjs/operators";
8
8
  import { EActionKey } from "./definitions/actions/form-view.actions.enum.definitions";
9
9
  import { EApiStatusType } from "./definitions/apis/form-view.apis.enum.definitions";
10
10
  import { EMessageType } from "./definitions/common/form-view.common.enum.definitions";
11
11
  import { EFieldType } from "./definitions/fields/form-view.fields.enum.definitions";
12
12
  import { KwikIDFormViewService } from "./form-view.service";
13
- import { Actions } from "./helpers/form-view.actions.helper";
14
13
  import { Apis } from "./helpers/form-view.apis.helper";
15
- import { hasKey, isEmpty, isNotEmpty, setEmptyValue } from "./helpers/form-view.common.helper";
16
- import { Condition } from "./helpers/form-view.condition.helper";
14
+ import { setEmptyValue } from "./helpers/form-view.common.helper";
17
15
  import { addMessage, convertValueFromKwikUIFormatToBasicFormat, findFieldFromKey, findFieldIndexFromKey, getSearchTextOptionsFromFieldConfig, getSearchTextOptionsFromRemoteFile, highlightFieldError, removeMessage, setFieldError } from "./helpers/form-view.fields.helper";
18
- import { Rules } from "./helpers/form-view.rules.helper";
19
- import { Sources } from "./helpers/form-view.sources.helper";
20
16
  import { Validations } from "./helpers/form-view.validations.helper";
21
17
  import * as i0 from "@angular/core";
22
18
  import * as i1 from "./form-view.service";
@@ -60,7 +56,7 @@ export class KwikIDFormViewComponent {
60
56
  ngAfterViewInit() { }
61
57
  ngOnChanges(changes) {
62
58
  const verifyChange = (key) => {
63
- return hasKey(changes, key) && !changes[key].firstChange;
59
+ return checkObjectKeyExists(changes, key) && !changes[key].firstChange;
64
60
  };
65
61
  if (verifyChange("formData")) {
66
62
  this.formData = Object.assign(Object.assign({}, this.formData), changes.formData.currentValue);
@@ -123,11 +119,11 @@ export class KwikIDFormViewComponent {
123
119
  });
124
120
  }
125
121
  setFormFieldsFromFormConfig(formConfig) {
126
- if (hasKey(formConfig, "fields")) {
122
+ if (checkObjectKeyExists(formConfig, "fields")) {
127
123
  this.formFields = formConfig.fields;
128
124
  }
129
- else if (hasKey(formConfig, "multiForm") &&
130
- hasKey(formConfig.multiForm, "fields")) {
125
+ else if (checkObjectKeyExists(formConfig, "multiForm") &&
126
+ checkObjectKeyExists(formConfig.multiForm, "fields")) {
131
127
  this.formFields = formConfig.multiForm.fields;
132
128
  }
133
129
  }
@@ -135,7 +131,7 @@ export class KwikIDFormViewComponent {
135
131
  this.fieldGroups = formConfig.fieldGroups;
136
132
  }
137
133
  setFormDataFromAllFormsData() {
138
- if (hasKey(this.allFormsData, this.formConfig.key)) {
134
+ if (checkObjectKeyExists(this.allFormsData, this.formConfig.key)) {
139
135
  this.formData = this.allFormsData[this.formConfig.key];
140
136
  }
141
137
  else {
@@ -144,12 +140,22 @@ export class KwikIDFormViewComponent {
144
140
  }
145
141
  handleConnectedElementFieldGroupActions(childFieldGroupConfig, parentField) {
146
142
  return __awaiter(this, void 0, void 0, function* () {
147
- if (hasKey(childFieldGroupConfig, "rules")) {
148
- const rulesMapping = new Rules(childFieldGroupConfig.rules, parentField, this.formData, this.previousFormData, this.allFormsData).mapping();
143
+ if (checkObjectKeyExists(childFieldGroupConfig, "rules")) {
144
+ const rulesMapping = new Rules(childFieldGroupConfig.rules, {
145
+ FIELD_CONFIG: parentField,
146
+ FORM_DATA: this.formData,
147
+ PREVIOUS_FORM_DATA: this.previousFormData,
148
+ ALL_FORMS_DATA: this.allFormsData
149
+ }).mapping();
149
150
  for (let action of childFieldGroupConfig.actions) {
150
151
  const conditionSuccess = new Condition(action.condition, rulesMapping).evaluate();
151
152
  if (conditionSuccess) {
152
- const actions = new Actions(action, parentField, rulesMapping, this.allFormsData, this.formData, this.previousFormData, this.takeActionOnFieldGroup.bind(this));
153
+ const actions = new Actions(action, rulesMapping, {
154
+ FIELD_CONFIG: parentField,
155
+ FORM_DATA: this.formData,
156
+ PREVIOUS_FORM_DATA: this.previousFormData,
157
+ ALL_FORMS_DATA: this.allFormsData
158
+ }, this.takeActionOnFieldGroup.bind(this));
153
159
  yield actions.execute();
154
160
  }
155
161
  }
@@ -160,24 +166,24 @@ export class KwikIDFormViewComponent {
160
166
  return __awaiter(this, void 0, void 0, function* () {
161
167
  switch (eventType) {
162
168
  case "INIT":
163
- if (hasKey(connectedFieldGroupConfig, "triggers") &&
169
+ if (checkObjectKeyExists(connectedFieldGroupConfig, "triggers") &&
164
170
  connectedFieldGroupConfig.triggers.includes("INIT")) {
165
171
  yield this.handleConnectedElementFieldGroupActions(connectedFieldGroupConfig, currentField);
166
172
  }
167
173
  break;
168
174
  case "VALUE_CHANGE":
169
- if (hasKey(connectedFieldGroupConfig, "triggers") &&
175
+ if (checkObjectKeyExists(connectedFieldGroupConfig, "triggers") &&
170
176
  connectedFieldGroupConfig.triggers.includes("VALUE_CHANGE")) {
171
177
  yield this.handleConnectedElementFieldGroupActions(connectedFieldGroupConfig, currentField);
172
178
  }
173
179
  break;
174
180
  case "NESTED_LINK":
175
- if (hasKey(connectedFieldGroupConfig, "triggers") &&
181
+ if (checkObjectKeyExists(connectedFieldGroupConfig, "triggers") &&
176
182
  connectedFieldGroupConfig.triggers.includes("NESTED_LINK")) {
177
183
  yield this.handleConnectedElementFieldGroupActions(connectedFieldGroupConfig, currentField);
178
184
  }
179
185
  default:
180
- if (hasKey(connectedFieldGroupConfig, "triggers")) {
186
+ if (checkObjectKeyExists(connectedFieldGroupConfig, "triggers")) {
181
187
  yield this.handleConnectedElementFieldGroupActions(connectedFieldGroupConfig, currentField);
182
188
  }
183
189
  break;
@@ -186,12 +192,22 @@ export class KwikIDFormViewComponent {
186
192
  }
187
193
  handleConnectedElementFieldActions(connectedFieldConfig, connectedField) {
188
194
  return __awaiter(this, void 0, void 0, function* () {
189
- if (hasKey(connectedFieldConfig, "rules")) {
190
- const rulesMapping = new Rules(connectedFieldConfig.rules, connectedField, this.formData, this.previousFormData, this.allFormsData).mapping();
195
+ if (checkObjectKeyExists(connectedFieldConfig, "rules")) {
196
+ const rulesMapping = new Rules(connectedFieldConfig.rules, {
197
+ FIELD_CONFIG: connectedField,
198
+ FORM_DATA: this.formData,
199
+ PREVIOUS_FORM_DATA: this.previousFormData,
200
+ ALL_FORMS_DATA: this.allFormsData
201
+ }).mapping();
191
202
  for (let action of connectedFieldConfig.actions) {
192
203
  const conditionSuccess = new Condition(action.condition, rulesMapping).evaluate();
193
204
  if (conditionSuccess) {
194
- const actions = new Actions(action, connectedField, rulesMapping, this.allFormsData, this.formData, this.previousFormData, this.takeAction.bind(this));
205
+ const actions = new Actions(action, rulesMapping, {
206
+ FIELD_CONFIG: connectedField,
207
+ FORM_DATA: this.formData,
208
+ PREVIOUS_FORM_DATA: this.previousFormData,
209
+ ALL_FORMS_DATA: this.allFormsData
210
+ }, this.takeAction.bind(this));
195
211
  yield actions.execute();
196
212
  }
197
213
  }
@@ -204,10 +220,10 @@ export class KwikIDFormViewComponent {
204
220
  let connectedField = findFieldFromKey(this.formFields, connectedFieldConfig["key"]);
205
221
  switch (eventType) {
206
222
  case "INIT":
207
- if (hasKey(connectedField, "triggers") &&
223
+ if (checkObjectKeyExists(connectedField, "triggers") &&
208
224
  connectedField.triggers.includes("INIT")) {
209
225
  if (this.isFieldEnabled(connectedField.key)) {
210
- if (hasKey(connectedFieldConfig, "connectedParentFields")) {
226
+ if (checkObjectKeyExists(connectedFieldConfig, "connectedParentFields")) {
211
227
  switch (connectedFieldConfig.type) {
212
228
  case "dropdown-with-search":
213
229
  connectedField = yield this.handleFieldTypeSearchText(currentField, connectedField);
@@ -221,7 +237,7 @@ export class KwikIDFormViewComponent {
221
237
  }
222
238
  break;
223
239
  case "VALUE_CHANGE":
224
- if (hasKey(connectedFieldConfig, "triggers") &&
240
+ if (checkObjectKeyExists(connectedFieldConfig, "triggers") &&
225
241
  connectedFieldConfig.triggers.includes("VALUE_CHANGE")) {
226
242
  switch (connectedField.type) {
227
243
  case "dropdown-with-search":
@@ -234,18 +250,18 @@ export class KwikIDFormViewComponent {
234
250
  }
235
251
  break;
236
252
  case "NESTED_LINK":
237
- if (hasKey(connectedFieldConfig, "triggers") &&
253
+ if (checkObjectKeyExists(connectedFieldConfig, "triggers") &&
238
254
  connectedFieldConfig.triggers.includes("NESTED_LINK")) {
239
255
  connectedField = yield this.handleConnectedElementFieldActions(connectedFieldConfig, connectedField);
240
256
  }
241
257
  default:
242
- if (hasKey(connectedFieldConfig, "triggers")) {
258
+ if (checkObjectKeyExists(connectedFieldConfig, "triggers")) {
243
259
  connectedField = yield this.handleConnectedElementFieldActions(connectedFieldConfig, connectedField);
244
260
  }
245
261
  break;
246
262
  }
247
- if (hasKey(connectedField, "connectedElements")) {
248
- if (hasKey(connectedField.connectedElements, "connectedFields")) {
263
+ if (checkObjectKeyExists(connectedField, "connectedElements")) {
264
+ if (checkObjectKeyExists(connectedField.connectedElements, "connectedFields")) {
249
265
  for (const connectedFieldConfig of connectedField.connectedElements
250
266
  .connectedFields) {
251
267
  connectedField = this.handleConnectedElementFields(connectedField, connectedFieldConfig, "NESTED_LINK");
@@ -258,20 +274,25 @@ export class KwikIDFormViewComponent {
258
274
  handleConnectedElements(e, eventType) {
259
275
  return __awaiter(this, void 0, void 0, function* () {
260
276
  let currentField = findFieldFromKey(this.formFields, e.key);
261
- if (hasKey(currentField, "connectedElements")) {
262
- if (hasKey(currentField.connectedElements, "connectedFieldGroups")) {
263
- let connectedFieldGroups = currentField.connectedElements.connectedFieldGroups;
264
- for (let connectedFieldGroupConfig of connectedFieldGroups) {
265
- yield this.handleConnectedElementFieldGroup(currentField, connectedFieldGroupConfig, eventType);
277
+ if (currentField !== undefined) {
278
+ if (checkObjectKeyExists(currentField, "connectedElements")) {
279
+ if (checkObjectKeyExists(currentField.connectedElements, "connectedFieldGroups")) {
280
+ let connectedFieldGroups = currentField.connectedElements.connectedFieldGroups;
281
+ for (let connectedFieldGroupConfig of connectedFieldGroups) {
282
+ yield this.handleConnectedElementFieldGroup(currentField, connectedFieldGroupConfig, eventType);
283
+ }
266
284
  }
267
- }
268
- if (hasKey(currentField.connectedElements, "connectedFields")) {
269
- let connectedFields = currentField.connectedElements.connectedFields;
270
- for (let connectedFieldConfig of connectedFields) {
271
- currentField = yield this.handleConnectedElementFields(currentField, connectedFieldConfig, eventType);
285
+ if (checkObjectKeyExists(currentField.connectedElements, "connectedFields")) {
286
+ let connectedFields = currentField.connectedElements.connectedFields;
287
+ for (let connectedFieldConfig of connectedFields) {
288
+ currentField = yield this.handleConnectedElementFields(currentField, connectedFieldConfig, eventType);
289
+ }
272
290
  }
273
291
  }
274
292
  }
293
+ else {
294
+ throw new Error(`Field for the given key ['${e.key}'] is not found with eventType: '${eventType}'.`);
295
+ }
275
296
  });
276
297
  }
277
298
  // DOM Event Handlers
@@ -296,9 +317,14 @@ export class KwikIDFormViewComponent {
296
317
  handleOnClickResetFormFields(e, field) {
297
318
  return __awaiter(this, void 0, void 0, function* () {
298
319
  for (let f of field.reset.fields) {
299
- for (let a of f.actions) {
300
- const resetField = findFieldFromKey(this.formFields, a.props.fieldKey);
301
- const actions = new Actions(a, resetField, {}, this.allFormsData, this.formData, this.previousFormData, this.takeAction.bind(this));
320
+ for (let action of f.actions) {
321
+ const resetField = findFieldFromKey(this.formFields, action.props.fieldKey);
322
+ const actions = new Actions(action, {}, {
323
+ FIELD_CONFIG: resetField,
324
+ FORM_DATA: this.formData,
325
+ PREVIOUS_FORM_DATA: this.previousFormData,
326
+ ALL_FORMS_DATA: this.allFormsData
327
+ }, this.takeAction.bind(this));
302
328
  yield actions.execute();
303
329
  }
304
330
  }
@@ -376,7 +402,7 @@ export class KwikIDFormViewComponent {
376
402
  const controls = new Validations(undefined, formData, this.previousFormData, this.allFormsData, this.takeAction.bind(this)).findInvalidControlsRecursive(this.formGroup);
377
403
  let firstFieldWithError = "";
378
404
  for (let control of controls) {
379
- if (control.invalid && isEmpty(firstFieldWithError)) {
405
+ if (control.invalid && isEmptyValue(firstFieldWithError)) {
380
406
  firstFieldWithError = control.key;
381
407
  }
382
408
  this.formFields = setFieldError(this.formFields, this.formGroup.controls[control.key].errors, control.key, control.invalid);
@@ -388,7 +414,7 @@ export class KwikIDFormViewComponent {
388
414
  return;
389
415
  }
390
416
  Object.keys(formData).map((key) => {
391
- if (isEmpty(formData[key])) {
417
+ if (isEmptyValue(formData[key])) {
392
418
  formData[key] = "";
393
419
  }
394
420
  });
@@ -431,7 +457,7 @@ export class KwikIDFormViewComponent {
431
457
  });
432
458
  if (field.type !== EFieldType.TITLE) {
433
459
  this.formFields[fieldIndex]["disabled"] = true;
434
- if (isNotEmpty(this.formGroup.controls)) {
460
+ if (isNotEmptyValue(this.formGroup.controls)) {
435
461
  this.formGroup.controls[field.key].disable({
436
462
  emitEvent: false
437
463
  });
@@ -451,7 +477,7 @@ export class KwikIDFormViewComponent {
451
477
  });
452
478
  if (field.type !== EFieldType.TITLE) {
453
479
  this.formFields[fieldIndex]["disabled"] = false;
454
- if (isNotEmpty(this.formGroup.controls)) {
480
+ if (isNotEmptyValue(this.formGroup.controls)) {
455
481
  this.formGroup.controls[field.key].enable({
456
482
  emitEvent: false
457
483
  });
@@ -552,10 +578,10 @@ export class KwikIDFormViewComponent {
552
578
  }
553
579
  handleFieldTypeSearchText(field, childField) {
554
580
  return __awaiter(this, void 0, void 0, function* () {
555
- if (hasKey(childField, "json")) {
581
+ if (checkObjectKeyExists(childField, "json")) {
556
582
  childField.options = getSearchTextOptionsFromFieldConfig(field, childField, this.formGroup);
557
583
  }
558
- if (hasKey(childField, "fetchJsonFromRemote")) {
584
+ if (checkObjectKeyExists(childField, "fetchJsonFromRemote")) {
559
585
  childField.options = yield getSearchTextOptionsFromRemoteFile(field, childField, this.formGroup);
560
586
  }
561
587
  return childField;
@@ -581,7 +607,7 @@ export class KwikIDFormViewComponent {
581
607
  }
582
608
  });
583
609
  }
584
- takeAction(action, field, allFormsData, formData, previousFormData) {
610
+ takeAction(action, object) {
585
611
  return __awaiter(this, void 0, void 0, function* () {
586
612
  switch (action.key) {
587
613
  case EActionKey.FIELD_HIDE:
@@ -612,16 +638,16 @@ export class KwikIDFormViewComponent {
612
638
  this.fieldMessageHide(action.props.fieldKey, action.props.message);
613
639
  break;
614
640
  case EActionKey.SET_VALUE:
615
- const sources = new Sources(field, this.formData, this.previousFormData, this.allFormsData);
641
+ const sources = new Sources(object);
616
642
  const sourceValue = yield sources.getValueFromSource(action.props.value.source);
617
643
  sources.setValueToSource(action.props.value.destination, sourceValue);
618
- field = sources.field;
619
- this.formData = sources.formData;
620
- this.allFormsData = sources.allFormsData;
621
- this.previousFormData = sources.previousFormData;
644
+ object.FIELD_CONFIG = sources.object.FIELD_CONFIG;
645
+ this.formData = sources.object.FORM_DATA;
646
+ this.allFormsData = sources.object.ALL_FORMS_DATA;
647
+ this.previousFormData = sources.object.PREVIOUS_FORM_DATA;
622
648
  break;
623
649
  case EActionKey.HANDLE_CONNECTED_ELEMENTS:
624
- this.handleConnectedElements({ key: field.key }, "ACTION");
650
+ this.handleConnectedElements({ key: action.props.fieldKey }, "ACTION");
625
651
  break;
626
652
  case EActionKey.CUSTOM:
627
653
  break;
@@ -785,4 +811,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
785
811
  }], getActiveFormData: [{
786
812
  type: Output
787
813
  }], ngOnInit: [], ngAfterViewInit: [], ngOnChanges: [], initFormConfig: [], setFormFieldsFromFormConfig: [], setFormFieldGroupsFromFormConfig: [], setFormDataFromAllFormsData: [], handleConnectedElementFieldGroupActions: [], handleConnectedElementFieldGroup: [], handleConnectedElementFieldActions: [], handleConnectedElementFields: [], handleConnectedElements: [], handleGetKeyValue: [], handleOnClickResetFormFields: [], handleOnClickApiCall: [], handleOnClickViewForms: [], handleOnClickSaveForm: [], toggleErrorNotification: [], fieldHide: [], fieldGroupHide: [], fieldShow: [], fieldGroupShow: [], fieldDisable: [], fieldGroupDisable: [], fieldEnable: [], fieldGroupEnable: [], fieldReset: [], fieldErrorShow: [], fieldErrorHide: [], fieldMessageShow: [], fieldMessageHide: [], setObjectValue: [], patchFieldControlValue: [], isFieldValid: [], isFieldEnabled: [], getFormGroupRawValues: [], handleFieldTypeSearchText: [], takeActionOnFieldGroup: [], takeAction: [] } });
788
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBRXRGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBTXBGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkQsT0FBTyxFQUNMLE1BQU0s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O3NCQURYLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU07Z0JBSVAsaUJBQWlCO3NCQURoQixNQUFNO2dCQTBCUCxRQUFRLE1BU1IsZUFBZSxNQUdmLFdBQVcsTUE2REwsY0FBYyxNQXFEcEIsMkJBQTJCLE1BWTNCLGdDQUFnQyxNQUtoQywyQkFBMkIsTUFTckIsdUNBQXVDLE1BcUN2QyxnQ0FBZ0MsTUFrRGhDLGtDQUFrQyxNQXVDbEMsNEJBQTRCLE1BOEY1Qix1QkFBdUIsTUE4QjdCLGlCQUFpQixNQXNDWCw0QkFBNEIsTUFtQjVCLG9CQUFvQixNQXFEMUIsc0JBQXNCLE1BT3RCLHFCQUFxQixNQTZFckIsdUJBQXVCLE1BTXZCLFNBQVMsTUFXVCxjQUFjLE1BT2QsU0FBUyxNQVdULGNBQWMsTUFPZCxZQUFZLE1BbUJaLGlCQUFpQixNQU9qQixXQUFXLE1BbUJYLGdCQUFnQixNQU9oQixVQUFVLE1BMkNWLGNBQWMsTUFhZCxjQUFjLE1BYWQsZ0JBQWdCLE1BWWhCLGdCQUFnQixNQVloQixjQUFjLE1BR2Qsc0JBQXNCLE1BVXRCLFlBQVksTUFLWixjQUFjLE1BS2QscUJBQXFCLE1BS2YseUJBQXlCLE1Bb0J6QixzQkFBc0IsTUEwQnRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IGxvZ01ldGhvZCB9IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xyXG5pbXBvcnQgeyBUdWlBbGVydFNlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2NvcmVcIjtcclxuaW1wb3J0IHsgVHVpUHVzaFNlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2tpdFwiO1xyXG5pbXBvcnQgeyBwYWlyd2lzZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBFQWN0aW9uS2V5IH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvYWN0aW9ucy9mb3JtLXZpZXcuYWN0aW9ucy5lbnVtLmRlZmluaXRpb25zXCI7XHJcbmltcG9ydCB7IFRBY3Rpb24gfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9hY3Rpb25zL2Zvcm0tdmlldy5hY3Rpb25zLnR5cGUuZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgRUFwaVN0YXR1c1R5cGUgfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9hcGlzL2Zvcm0tdmlldy5hcGlzLmVudW0uZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgRU1lc3NhZ2VUeXBlIH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvY29tbW9uL2Zvcm0tdmlldy5jb21tb24uZW51bS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBUTWVzc2FnZSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2NvbW1vbi9mb3JtLXZpZXcuY29tbW9uLnR5cGUuZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgRUZpZWxkVHlwZSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2ZpZWxkcy9mb3JtLXZpZXcuZmllbGRzLmVudW0uZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHtcclxuICBURmllbGQsXHJcbiAgVEZpZWxkQXBpQ2FsbCxcclxuICBURmllbGRUaXRsZVxyXG59IGZyb20gXCIuL2RlZmluaXRpb25zL2ZpZWxkcy9mb3JtLXZpZXcuZmllbGRzLnR5cGUuZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgS3dpa0lERm9ybVZpZXdTZXJ2aWNlIH0gZnJvbSBcIi4vZm9ybS12aWV3LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQWN0aW9ucyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmFjdGlvbnMuaGVscGVyXCI7XHJcbmltcG9ydCB7IEFwaXMgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5hcGlzLmhlbHBlclwiO1xyXG5pbXBvcnQge1xyXG4gIGhhc0tleSxcclxuICBpc0VtcHR5LFxyXG4gIGlzTm90RW1wdHksXHJcbiAgc2V0RW1wdHlWYWx1ZVxyXG59IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmNvbW1vbi5oZWxwZXJcIjtcclxuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuY29uZGl0aW9uLmhlbHBlclwiO1xyXG5pbXBvcnQge1xyXG4gIGFkZE1lc3NhZ2UsXHJcbiAgY29udmVydFZhbHVlRnJvbUt3aWtVSUZvcm1hdFRvQmFzaWNGb3JtYXQsXHJcbiAgZmluZEZpZWxkRnJvbUtleSxcclxuICBmaW5kRmllbGRJbmRleEZyb21LZXksXHJcbiAgZ2V0U2VhcmNoVGV4dE9wdGlvbnNGcm9tRmllbGRDb25maWcsXHJcbiAgZ2V0U2VhcmNoVGV4dE9wdGlvbnNGcm9tUmVtb3RlRmlsZSxcclxuICBoaWdobGlnaHRGaWVsZEVycm9yLFxyXG4gIHJlbW92ZU1lc3NhZ2UsXHJcbiAgc2V0RmllbGRFcnJvclxyXG59IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmZpZWxkcy5oZWxwZXJcIjtcclxuaW1wb3J0IHsgUnVsZXMgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5ydWxlcy5oZWxwZXJcIjtcclxuaW1wb3J0IHsgU291cmNlcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LnNvdXJjZXMuaGVscGVyXCI7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25zIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcudmFsaWRhdGlvbnMuaGVscGVyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJrd2lraWQtZm9ybS12aWV3XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9mb3JtLXZpZXcuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vZm9ybS12aWV3LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIHByb3ZpZGVyczogW0t3aWtJREZvcm1WaWV3U2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEt3aWtJREZvcm1WaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKVxyXG4gIGZvcm1Db25maWc6IGFueTtcclxuXHJcbiAgQElucHV0KClcclxuICBmb3JtRGF0YTogYW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGFwaUNhbGxSZXNwb25zZTogYW55ID0ge307XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYWxsRm9ybXNEYXRhOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZm9ybXNMaXN0OiBhbnlbXTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgb25DbGlja1ZpZXdGb3JtczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgb25DbGlja1NhdmVGb3JtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBvbkNsaWNrQXBpQ2FsbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgZ2V0QWN0aXZlRm9ybURhdGE6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGZpZWxkR3JvdXBzOiBhbnkgPSB7fTtcclxuICBmb3JtRmllbGRzOiBhbnlbXSA9IFtdO1xyXG4gIHByZXZpb3VzRm9ybURhdGE6IGFueSA9IHt9O1xyXG5cclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICB2aWV3Rm9ybXNCdXR0b24gPSB7XHJcbiAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxyXG4gIH07XHJcbiAgc2F2ZUZvcm1CdXR0b24gPSB7XHJcbiAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxyXG4gIH07XHJcblxyXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChUdWlQdXNoU2VydmljZSkgcHJvdGVjdGVkIHJlYWRvbmx5IHB1c2g6IFR1aVB1c2hTZXJ2aWNlLFxyXG4gICAgQEluamVjdChUdWlBbGVydFNlcnZpY2UpIHByb3RlY3RlZCByZWFkb25seSBhbGVydDogVHVpQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtVmlld1NlcnZpY2U6IEt3aWtJREZvcm1WaWV3U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgYXdhaXQgdGhpcy5pbml0Rm9ybUNvbmZpZyh0aGlzLmZvcm1Db25maWcpO1xyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KSgpO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB2ZXJpZnlDaGFuZ2UgPSAoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgcmV0dXJuIGhhc0tleShjaGFuZ2VzLCBrZXkpICYmICFjaGFuZ2VzW2tleV0uZmlyc3RDaGFuZ2U7XHJcbiAgICB9O1xyXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1EYXRhXCIpKSB7XHJcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7XHJcbiAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcclxuICAgICAgICAuLi5jaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFwaUNhbGxSZXNwb25zZVwiKSkge1xyXG4gICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZSA9IGNoYW5nZXMuYXBpQ2FsbFJlc3BvbnNlLmN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7XHJcbiAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcclxuICAgICAgICBbdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XTogdGhpcy5hcGlDYWxsUmVzcG9uc2UucmVzcG9uc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3RoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleV06IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLnJlc3BvbnNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGV0IGZpZWxkOiBURmllbGRBcGlDYWxsID0gZmluZEZpZWxkRnJvbUtleShcclxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXHJcbiAgICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXHJcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgKTtcclxuXHJcbiAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgZmllbGQgPSBhd2FpdCBhcGlzLnZhbGlkYXRlQXBpQ2FsbFJlc3BvbnNlKCk7XHJcbiAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiaXNNb2JpbGVWaWV3XCIpKSB7XHJcbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gY2hhbmdlcy5pc01vYmlsZVZpZXcuY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFsbEZvcm1zRGF0YVwiKSkge1xyXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IGNoYW5nZXMuYWxsRm9ybXNEYXRhLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJmb3Jtc0xpc3RcIikpIHtcclxuICAgICAgdGhpcy5mb3Jtc0xpc3QgPSBjaGFuZ2VzLmZvcm1zTGlzdC5jdXJyZW50VmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybUNvbmZpZ1wiKSkge1xyXG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBjaGFuZ2VzLmZvcm1Db25maWcuY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmluaXRGb3JtQ29uZmlnKHRoaXMuZm9ybUNvbmZpZyk7XHJcbiAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgYXN5bmMgaW5pdEZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3Vwc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWcpO1xyXG5cclxuICAgIHRoaXMuc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBhd2FpdCB0aGlzLmZvcm1WaWV3U2VydmljZS5jcmVhdGVGb3JtR3JvdXAoXHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyxcclxuICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICk7XHJcblxyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC50eXBlICE9PSBcInRpdGxlXCIpIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSB7XHJcbiAgICAgICAgICAuLi50aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICBbZmllbGQua2V5XTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAucGlwZShwYWlyd2lzZSgpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoW3ByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICAgICAgICBbZmllbGQua2V5XTogcHJldmlvdXNWYWx1ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjdXJyZW50VmFsdWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgIT09IFwidGl0bGVcIikge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBmaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcclxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIk9OX0lOSVRcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWc6IGFueSkge1xyXG4gICAgaWYgKGhhc0tleShmb3JtQ29uZmlnLCBcImZpZWxkc1wiKSkge1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmb3JtQ29uZmlnLmZpZWxkcztcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGhhc0tleShmb3JtQ29uZmlnLCBcIm11bHRpRm9ybVwiKSAmJlxyXG4gICAgICBoYXNLZXkoZm9ybUNvbmZpZy5tdWx0aUZvcm0sIFwiZmllbGRzXCIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZm9ybUNvbmZpZy5tdWx0aUZvcm0uZmllbGRzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIHNldEZvcm1GaWVsZEdyb3Vwc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWc6IGFueSkge1xyXG4gICAgdGhpcy5maWVsZEdyb3VwcyA9IGZvcm1Db25maWcuZmllbGRHcm91cHM7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCkge1xyXG4gICAgaWYgKGhhc0tleSh0aGlzLmFsbEZvcm1zRGF0YSwgdGhpcy5mb3JtQ29uZmlnLmtleSkpIHtcclxuICAgICAgdGhpcy5mb3JtRGF0YSA9IHRoaXMuYWxsRm9ybXNEYXRhW3RoaXMuZm9ybUNvbmZpZy5rZXldO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcclxuICAgIGNoaWxkRmllbGRHcm91cENvbmZpZzogYW55LFxyXG4gICAgcGFyZW50RmllbGQ6IGFueVxyXG4gICkge1xyXG4gICAgaWYgKGhhc0tleShjaGlsZEZpZWxkR3JvdXBDb25maWcsIFwicnVsZXNcIikpIHtcclxuICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGVzKFxyXG4gICAgICAgIGNoaWxkRmllbGRHcm91cENvbmZpZy5ydWxlcyxcclxuICAgICAgICBwYXJlbnRGaWVsZCxcclxuICAgICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YVxyXG4gICAgICApLm1hcHBpbmcoKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBjaGlsZEZpZWxkR3JvdXBDb25maWcuYWN0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxyXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcclxuICAgICAgICAgIHJ1bGVzTWFwcGluZ1xyXG4gICAgICAgICkuZXZhbHVhdGUoKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9ucyhcclxuICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICBwYXJlbnRGaWVsZCxcclxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxyXG4gICAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb25PbkZpZWxkR3JvdXAuYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cChcclxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxyXG4gICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZzogYW55LFxyXG4gICAgZXZlbnRUeXBlOiBzdHJpbmdcclxuICApIHtcclxuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJJTklUXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaGFzS2V5KGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikgJiZcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoXCJJTklUXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcclxuICAgICAgICAgICAgY3VycmVudEZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlZBTFVFX0NIQU5HRVwiOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGhhc0tleShjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLCBcInRyaWdnZXJzXCIpICYmXHJcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLnRyaWdnZXJzLmluY2x1ZGVzKFwiVkFMVUVfQ0hBTkdFXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcclxuICAgICAgICAgICAgY3VycmVudEZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIk5FU1RFRF9MSU5LXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaGFzS2V5KGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikgJiZcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoXCJORVNURURfTElOS1wiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLCBcInRyaWdnZXJzXCIpKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcclxuICAgICAgICAgICAgY3VycmVudEZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxyXG4gICAgY29ubmVjdGVkRmllbGRDb25maWc6IGFueSxcclxuICAgIGNvbm5lY3RlZEZpZWxkOiBhbnlcclxuICApIHtcclxuICAgIGlmIChoYXNLZXkoY29ubmVjdGVkRmllbGRDb25maWcsIFwicnVsZXNcIikpIHtcclxuICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGVzKFxyXG4gICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLnJ1bGVzLFxyXG4gICAgICAgIGNvbm5lY3RlZEZpZWxkLFxyXG4gICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhXHJcbiAgICAgICkubWFwcGluZygpO1xyXG5cclxuICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGNvbm5lY3RlZEZpZWxkQ29uZmlnLmFjdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBjb25kaXRpb25TdWNjZXNzID0gbmV3IENvbmRpdGlvbihcclxuICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXHJcbiAgICAgICAgICBydWxlc01hcHBpbmdcclxuICAgICAgICApLmV2YWx1YXRlKCk7XHJcblxyXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGQsXHJcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcclxuICAgICAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbm5lY3RlZEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXHJcbiAgICBjdXJyZW50RmllbGQ6IGFueSxcclxuICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnOiBhbnksXHJcbiAgICBldmVudFR5cGU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgbGV0IGNvbm5lY3RlZEZpZWxkID0gZmluZEZpZWxkRnJvbUtleShcclxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxyXG4gICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZ1tcImtleVwiXVxyXG4gICAgKTtcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xyXG4gICAgICBjYXNlIFwiSU5JVFwiOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGhhc0tleShjb25uZWN0ZWRGaWVsZCwgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGQudHJpZ2dlcnMuaW5jbHVkZXMoXCJJTklUXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc0ZpZWxkRW5hYmxlZChjb25uZWN0ZWRGaWVsZC5rZXkpKSB7XHJcbiAgICAgICAgICAgIGlmIChoYXNLZXkoY29ubmVjdGVkRmllbGRDb25maWcsIFwiY29ubmVjdGVkUGFyZW50RmllbGRzXCIpKSB7XHJcbiAgICAgICAgICAgICAgc3dpdGNoIChjb25uZWN0ZWRGaWVsZENvbmZpZy50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZHJvcGRvd24td2l0aC1zZWFyY2hcIjpcclxuICAgICAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkVHlwZVNlYXJjaFRleHQoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkQWN0aW9ucyhcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlZBTFVFX0NIQU5HRVwiOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGhhc0tleShjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoXCJWQUxVRV9DSEFOR0VcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHN3aXRjaCAoY29ubmVjdGVkRmllbGQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZHJvcGRvd24td2l0aC1zZWFyY2hcIjpcclxuICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlRmllbGRUeXBlU2VhcmNoVGV4dChcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiTkVTVEVEX0xJTktcIjpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBoYXNLZXkoY29ubmVjdGVkRmllbGRDb25maWcsIFwidHJpZ2dlcnNcIikgJiZcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLnRyaWdnZXJzLmluY2x1ZGVzKFwiTkVTVEVEX0xJTktcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGlmIChoYXNLZXkoY29ubmVjdGVkRmllbGRDb25maWcsIFwidHJpZ2dlcnNcIikpIHtcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNLZXkoY29ubmVjdGVkRmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIikpIHtcclxuICAgICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cywgXCJjb25uZWN0ZWRGaWVsZHNcIikpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbm5lY3RlZEZpZWxkQ29uZmlnIG9mIGNvbm5lY3RlZEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzXHJcbiAgICAgICAgICAuY29ubmVjdGVkRmllbGRzKSB7XHJcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGQsXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgICBcIk5FU1RFRF9MSU5LXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRGaWVsZDtcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhlOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgY3VycmVudEZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcclxuXHJcbiAgICBpZiAoaGFzS2V5KGN1cnJlbnRGaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xyXG4gICAgICBpZiAoaGFzS2V5KGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cywgXCJjb25uZWN0ZWRGaWVsZEdyb3Vwc1wiKSkge1xyXG4gICAgICAgIGxldCBjb25uZWN0ZWRGaWVsZEdyb3VwcyA9XHJcbiAgICAgICAgICBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMuY29ubmVjdGVkRmllbGRHcm91cHM7XHJcbiAgICAgICAgZm9yIChsZXQgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyBvZiBjb25uZWN0ZWRGaWVsZEdyb3Vwcykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cChcclxuICAgICAgICAgICAgY3VycmVudEZpZWxkLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxyXG4gICAgICAgICAgICBldmVudFR5cGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChoYXNLZXkoY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLCBcImNvbm5lY3RlZEZpZWxkc1wiKSkge1xyXG4gICAgICAgIGxldCBjb25uZWN0ZWRGaWVsZHMgPSBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMuY29ubmVjdGVkRmllbGRzO1xyXG4gICAgICAgIGZvciAobGV0IGNvbm5lY3RlZEZpZWxkQ29uZmlnIG9mIGNvbm5lY3RlZEZpZWxkcykge1xyXG4gICAgICAgICAgY3VycmVudEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRzKFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGQsXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgICBldmVudFR5cGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBET00gRXZlbnQgSGFuZGxlcnNcclxuICBAbG9nTWV0aG9kXHJcbiAgaGFuZGxlR2V0S2V5VmFsdWUoZTogYW55KSB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxyXG4gICAgICB7XHJcbiAgICAgICAgW2Uua2V5XTogZS52YWx1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBDdXJyZW50bHkgc2V0IG9ubHkgZm9yIGRyb3Bkb3duLXdpdGgtc2VhcmNoIGNvbm5lY3RlZCBmaWVsZHNcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBmaWVsZC50eXBlICE9PSBcInRpdGxlXCIgJiZcclxuICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0NIQU5HRVwiKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb25zKFxyXG4gICAgICAgIGZpZWxkLFxyXG4gICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlRmllbGQoKTtcclxuICAgICAgfSkoKTtcclxuXHJcbiAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAga2V5OiBmaWVsZC5rZXksXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJPTl9DSEFOR0VcIlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tSZXNldEZvcm1GaWVsZHMoZTogYW55LCBmaWVsZDogVEZpZWxkVGl0bGUpIHtcclxuICAgIGZvciAobGV0IGYgb2YgZmllbGQucmVzZXQuZmllbGRzKSB7XHJcbiAgICAgIGZvciAobGV0IGEgb2YgZi5hY3Rpb25zKSB7XHJcbiAgICAgICAgY29uc3QgcmVzZXRGaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBhLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbnMoXHJcbiAgICAgICAgICBhLFxyXG4gICAgICAgICAgcmVzZXRGaWVsZCxcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXHJcbiAgICAgICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgICApO1xyXG4gICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgYXN5bmMgaGFuZGxlT25DbGlja0FwaUNhbGwoZTogYW55KSB7XHJcbiAgICBsZXQgZmllbGQ6IFRGaWVsZEFwaUNhbGwgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xyXG5cclxuICAgIGlmIChmaWVsZC50eXBlID09PSBcImFwaS1jYWxsXCIpIHtcclxuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gbG9hZGluZ1xyXG4gICAgICBmaWVsZFtcImFwaVwiXVtcInN0YXR1c1wiXVtcInZhbHVlXCJdID0gRUFwaVN0YXR1c1R5cGUuTE9BRElORztcclxuICAgICAgZmllbGRbXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcclxuICAgICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJkaXNhYmxlZFwiXSA9IHRydWU7XHJcbiAgICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uW1wic2hvd0xvYWRlclwiXSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2F2ZUZvcm1CdXR0b25bXCJkaXNhYmxlZFwiXSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2F2ZUZvcm1CdXR0b25bXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcclxuXHJcbiAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcclxuICAgICAgICBmaWVsZCxcclxuICAgICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgZmllbGQgPSBhd2FpdCBhcGlzLnNldFJlcXVlc3RCb2R5UGFyYW1zKCk7XHJcblxyXG4gICAgICBmaWVsZCA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXF1ZXN0Qm9keSgpO1xyXG5cclxuICAgICAgaWYgKGZpZWxkLmFwaS5yZXF1ZXN0LmJvZHkudmFsaWRhdGlvbi5pc192YWxpZCkge1xyXG4gICAgICAgIC8vIENhbGwgQVBJIEhlcmVcclxuICAgICAgICB0aGlzLm9uQ2xpY2tBcGlDYWxsLmVtaXQoe1xyXG4gICAgICAgICAga2V5OiBlLmtleSxcclxuICAgICAgICAgIHJlcXVlc3Q6IHtcclxuICAgICAgICAgICAgbW9kZTogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgIGJvZHk6IGZpZWxkLmFwaS5yZXF1ZXN0LmJvZHkudmFsdWUsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxyXG4gICAgICAgICAgICB1cmw6IGZpZWxkLmFwaS5yZXF1ZXN0LnVybFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFJlcXVlc3QgQm9keSBWYWxpZGF0aW9uIEZhaWxlZFxyXG4gICAgICAgIC8vIEhpZ2hsaWdodCBFcnJvciBpbiBVSSB0byBVc2VyIHRvIFJldHJ5IEFmdGVyIFNvbWV0aW1lLlxyXG4gICAgICAgIC8vIFRha2UgQWN0aW9ucyBiYXNlZCBvbiBWYWxpZGF0aW9uXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBmaWVsZFtcImFwaVwiXVtcInN0YXR1c1wiXVtcInZhbHVlXCJdID0gRUFwaVN0YXR1c1R5cGUuRkFJTEVEO1xyXG4gICAgICAgICAgZmllbGRbXCJzaG93TG9hZGVyXCJdID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJkaXNhYmxlZFwiXSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcclxuICAgICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcImRpc2FibGVkXCJdID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2F2ZUZvcm1CdXR0b25bXCJzaG93TG9hZGVyXCJdID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgaGFuZGxlT25DbGlja1ZpZXdGb3JtcyhlOiBhbnkpIHtcclxuICAgIHRoaXMub25DbGlja1ZpZXdGb3Jtcy5lbWl0KHtcclxuICAgICAgY2xpY2tlZDogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgaGFuZGxlT25DbGlja1NhdmVGb3JtKGU6IGFueSkge1xyXG4gICAgbGV0IGZvcm1EYXRhID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcclxuXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgIT09IEVGaWVsZFR5cGUuVElUTEUpIHtcclxuICAgICAgICBpZiAoZmllbGQuaGlkZGVuKSB7XHJcbiAgICAgICAgICBkZWxldGUgZm9ybURhdGFbZmllbGQua2V5XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9ybURhdGFbZmllbGQua2V5XSA9IGNvbnZlcnRWYWx1ZUZyb21Ld2lrVUlGb3JtYXRUb0Jhc2ljRm9ybWF0KFxyXG4gICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgZm9ybURhdGFbZmllbGQua2V5XVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZpZWxkLnR5cGUgIT09IEVGaWVsZFR5cGUuVElUTEUgJiZcclxuICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fU0FWRVwiKVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IG5ldyBWYWxpZGF0aW9ucyhcclxuICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgZm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlRmllbGQoKTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgY29uc3QgY29udHJvbHMgPSBuZXcgVmFsaWRhdGlvbnMoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIGZvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICApLmZpbmRJbnZhbGlkQ29udHJvbHNSZWN1cnNpdmUodGhpcy5mb3JtR3JvdXApO1xyXG5cclxuICAgICAgbGV0IGZpcnN0RmllbGRXaXRoRXJyb3I6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgICBmb3IgKGxldCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuaW52YWxpZCAmJiBpc0VtcHR5KGZpcnN0RmllbGRXaXRoRXJyb3IpKSB7XHJcbiAgICAgICAgICBmaXJzdEZpZWxkV2l0aEVycm9yID0gY29udHJvbC5rZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IHNldEZpZWxkRXJyb3IoXHJcbiAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sLmtleV0uZXJyb3JzLFxyXG4gICAgICAgICAgY29udHJvbC5rZXksXHJcbiAgICAgICAgICBjb250cm9sLmludmFsaWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcclxuICAgICAgfSwgMzAwMCk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmtleXMoZm9ybURhdGEpLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmIChpc0VtcHR5KGZvcm1EYXRhW2tleV0pKSB7XHJcbiAgICAgICAgZm9ybURhdGFba2V5XSA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub25DbGlja1NhdmVGb3JtLmVtaXQoeyBmb3JtQ29uZmlnOiB0aGlzLmZvcm1Db25maWcsIGRhdGE6IGZvcm1EYXRhIH0pO1xyXG4gIH1cclxuXHJcbiAgc2hvd0Vycm9yTm90aWZpY2F0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQGxvZ01ldGhvZFxyXG4gIHRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHNob3cpIHtcclxuICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uID0gc2hvdztcclxuICB9XHJcblxyXG4gIC8vIENvbXBvbmVudCBIZWxwZXJzXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGZpZWxkSGlkZShmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xyXG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJoaWRkZW5cIl0gPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGZpZWxkR3JvdXBIaWRlKGZpZWxkR3JvdXA6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xyXG4gICAgICB0aGlzLmZpZWxkSGlkZShmaWVsZEtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRTaG93KGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImhpZGRlblwiXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGZpZWxkR3JvdXBTaG93KGZpZWxkR3JvdXA6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xyXG4gICAgICB0aGlzLmZpZWxkU2hvdyhmaWVsZEtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGREaXNhYmxlKGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChmaWVsZC50eXBlICE9PSBFRmllbGRUeXBlLlRJVExFKSB7XHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmIChpc05vdEVtcHR5KHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0uZGlzYWJsZSh7XHJcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGZpZWxkR3JvdXBEaXNhYmxlKGZpZWxkR3JvdXA6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xyXG4gICAgICB0aGlzLmZpZWxkRGlzYWJsZShmaWVsZEtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRFbmFibGUoZmllbGRLZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGZpZWxkLnR5cGUgIT09IEVGaWVsZFR5cGUuVElUTEUpIHtcclxuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmIChpc05vdEVtcHR5KHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0uZW5hYmxlKHtcclxuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRHcm91cEVuYWJsZShmaWVsZEdyb3VwOiBzdHJpbmcpIHtcclxuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcclxuICAgICAgdGhpcy5maWVsZEVuYWJsZShmaWVsZEtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRSZXNldChmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICAvLyBGaW5kIHRoZSBmaWVsZCBhbmQgaXRzIGluZGV4IGluIHRoZSBmb3JtRmllbGRzIGFycmF5XHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xyXG4gICAgbGV0IGZpZWxkSW5kZXggPSBmaW5kRmllbGRJbmRleEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcblxyXG4gICAgLy8gRGVsZXRlIHRoZSBmaWVsZCBmcm9tIHRoZSBmb3JtRGF0YSBvYmplY3RcclxuICAgIGRlbGV0ZSB0aGlzLmZvcm1EYXRhW2ZpZWxkS2V5XTtcclxuXHJcbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtR3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucmVzZXQoc2V0RW1wdHlWYWx1ZShmaWVsZCksIHtcclxuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIG1lc3NhZ2VzIGFuZCBlcnJvcnMgZm9yIHRoZSBmaWVsZFxyXG4gICAgZmllbGQgPSByZW1vdmVNZXNzYWdlKGZpZWxkLCB7XHJcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5XQVJOSU5HLFxyXG4gICAgICBtZXNzYWdlOiBcIlwiXHJcbiAgICB9KTtcclxuICAgIGZpZWxkID0gcmVtb3ZlTWVzc2FnZShmaWVsZCwge1xyXG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuU1VDQ0VTUyxcclxuICAgICAgbWVzc2FnZTogXCJcIlxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGZpZWxkS2V5LCB7XHJcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5FUlJPUixcclxuICAgICAgbWVzc2FnZTogXCJcIlxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxyXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJhcGktY2FsbFwiOlxyXG4gICAgICAgIGNvbnN0IGZpZWxkQXBpQ2FsbCA9IGZpZWxkIGFzIFRGaWVsZEFwaUNhbGw7XHJcbiAgICAgICAgZmllbGRBcGlDYWxsLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5ERUZBVUxUO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkQXBpQ2FsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBmaWVsZC5mb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgIGZpZWxkLmludmFsaWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBmaWVsZEVycm9yU2hvdyhmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgZmllbGQgPSBoaWdobGlnaHRGaWVsZEVycm9yKGZpZWxkLCB0cnVlKTtcclxuICAgIGZpZWxkID0gYWRkTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRFcnJvckhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZpZWxkID0gaGlnaGxpZ2h0RmllbGRFcnJvcihmaWVsZCwgZmFsc2UpO1xyXG4gICAgZmllbGQgPSByZW1vdmVNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBmaWVsZE1lc3NhZ2VTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xyXG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmaWVsZCA9IGFkZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGZpZWxkTWVzc2FnZUhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZpZWxkID0gcmVtb3ZlTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgc2V0T2JqZWN0VmFsdWUoZmllbGQ6IGFueSwgcGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7fVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgcGF0Y2hGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcclxuICAgICAge1xyXG4gICAgICAgIFtrZXldOiB2YWx1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBpc0ZpZWxkVmFsaWQoZmllbGRLZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkS2V5XS52YWxpZDtcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBpc0ZpZWxkRW5hYmxlZChmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGRLZXldLmVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZ2V0Rm9ybUdyb3VwUmF3VmFsdWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgYXN5bmMgaGFuZGxlRmllbGRUeXBlU2VhcmNoVGV4dChmaWVsZDogYW55LCBjaGlsZEZpZWxkOiBhbnkpIHtcclxuICAgIGlmIChoYXNLZXkoY2hpbGRGaWVsZCwgXCJqc29uXCIpKSB7XHJcbiAgICAgIGNoaWxkRmllbGQub3B0aW9ucyA9IGdldFNlYXJjaFRleHRPcHRpb25zRnJvbUZpZWxkQ29uZmlnKFxyXG4gICAgICAgIGZpZWxkLFxyXG4gICAgICAgIGNoaWxkRmllbGQsXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChoYXNLZXkoY2hpbGRGaWVsZCwgXCJmZXRjaEpzb25Gcm9tUmVtb3RlXCIpKSB7XHJcbiAgICAgIGNoaWxkRmllbGQub3B0aW9ucyA9IGF3YWl0IGdldFNlYXJjaFRleHRPcHRpb25zRnJvbVJlbW90ZUZpbGUoXHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgY2hpbGRGaWVsZCxcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjaGlsZEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGFzeW5jIHRha2VBY3Rpb25PbkZpZWxkR3JvdXAoXHJcbiAgICBhY3Rpb246IFRBY3Rpb24sXHJcbiAgICBmaWVsZDogVEZpZWxkLFxyXG4gICAgYWxsRm9ybXNEYXRhOiBhbnksXHJcbiAgICBmb3JtRGF0YTogYW55LFxyXG4gICAgcHJldmlvdXNGb3JtRGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0hJREU6XHJcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwSGlkZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfU0hPVzpcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBTaG93KGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9FTkFCTEU6XHJcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRW5hYmxlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9ESVNBQkxFOlxyXG4gICAgICAgIHRoaXMuZmllbGRHcm91cERpc2FibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBhc3luYyB0YWtlQWN0aW9uKFxyXG4gICAgYWN0aW9uOiBUQWN0aW9uLFxyXG4gICAgZmllbGQ6IFRGaWVsZCxcclxuICAgIGFsbEZvcm1zRGF0YTogYW55LFxyXG4gICAgZm9ybURhdGE6IGFueSxcclxuICAgIHByZXZpb3VzRm9ybURhdGE6IGFueVxyXG4gICkge1xyXG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9ISURFOlxyXG4gICAgICAgIHRoaXMuZmllbGRIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9TSE9XOlxyXG4gICAgICAgIHRoaXMuZmllbGRTaG93KGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9ESVNBQkxFOlxyXG4gICAgICAgIHRoaXMuZmllbGREaXNhYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9FTkFCTEU6XHJcbiAgICAgICAgdGhpcy5maWVsZEVuYWJsZShhY3Rpb24ucHJvcHMuZmllbGRLZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfUkVTRVQ6XHJcbiAgICAgICAgdGhpcy5maWVsZFJlc2V0KGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9FUlJPUl9TSE9XOlxyXG4gICAgICAgIHRoaXMuZmllbGRFcnJvclNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9FUlJPUl9ISURFOlxyXG4gICAgICAgIHRoaXMuZmllbGRFcnJvckhpZGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFX1NIT1c6XHJcbiAgICAgICAgdGhpcy5maWVsZE1lc3NhZ2VTaG93KGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfTUVTU0FHRVNfSElERTpcclxuICAgICAgICB0aGlzLmZpZWxkTWVzc2FnZUhpZGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfVkFMVUU6XHJcbiAgICAgICAgY29uc3Qgc291cmNlcyA9IG5ldyBTb3VyY2VzKFxyXG4gICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZXMuZ2V0VmFsdWVGcm9tU291cmNlKFxyXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgc291cmNlcy5zZXRWYWx1ZVRvU291cmNlKGFjdGlvbi5wcm9wcy52YWx1ZS5kZXN0aW5hdGlvbiwgc291cmNlVmFsdWUpO1xyXG5cclxuICAgICAgICBmaWVsZCA9IHNvdXJjZXMuZmllbGQ7XHJcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHNvdXJjZXMuZm9ybURhdGE7XHJcbiAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBzb3VyY2VzLmFsbEZvcm1zRGF0YTtcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2VzLnByZXZpb3VzRm9ybURhdGE7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVBY3Rpb25LZXkuSEFORExFX0NPTk5FQ1RFRF9FTEVNRU5UUzpcclxuICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKHsga2V5OiBmaWVsZC5rZXkgfSwgXCJBQ1RJT05cIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5DVVNUT006XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cImt3aWtpZC1mb3JtLWNvbnRhaW5lclwiXHJcbiAgKm5nSWY9XCIhdGhpcy5sb2FkaW5nXCJcclxuPlxyXG4gIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtdGl0bGVcIj5cclxuICAgICAge3sgdGhpcy5mb3JtQ29uZmlnLnRpdGxlIH19XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1zdGVwc1wiPlxyXG4gICAgICBTdGVwIHt7IHRoaXMuZm9ybUNvbmZpZy5zZXF1ZW5jZU5vIH19IG9mIHt7IHRoaXMuZm9ybXNMaXN0Lmxlbmd0aCB9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8aHIgLz5cclxuICA8L2Rpdj5cclxuICA8Zm9ybVxyXG4gICAgY2xhc3M9XCJrd2lraWQtZm9ybSBzaG93XCJcclxuICAgIFtmb3JtR3JvdXBdPVwidGhpcy5mb3JtR3JvdXBcIlxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZC50eXBlXCI+XHJcbiAgICAgICAgPCEtLSBGb3JtIFRpdGxlIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aXRsZSdcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJ0aXRsZVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cclxuICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkPy5yZXNldFwiXHJcbiAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcclxuICAgICAgICAgICAgICBsYWJlbD1cIlJlc2V0XCJcclxuICAgICAgICAgICAgICAob25DbGljayk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tSZXNldEZvcm1GaWVsZHMoJGV2ZW50LCBmaWVsZClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBJbnB1dCBUZXh0IC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXRcclxuICAgICAgICAgICAgICBbY2FzZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY2FzZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcclxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQ+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIENoZWNrYm94IC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWNoZWNrYm94LWJsb2NrXHJcbiAgICAgICAgICAgICAgW2NvbnRlbnRBbGlnbl09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGVudEFsaWduID8/ICdsZWZ0J1wiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZSA/PyAnbCdcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1jaGVja2JveC1ibG9ja1xyXG4gICAgICAgICAgICA+PGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gSW5wdXQgTnVtYmVyIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1udW1iZXJcclxuICAgICAgICAgICAgICBbZGVjaW1hbF09XCJmaWVsZD8ucHJvcGVydGllcz8uZGVjaW1hbFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxyXG4gICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXHJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcG9zdGZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucG9zdGZpeCA/PyAnJ1wiXHJcbiAgICAgICAgICAgICAgW3ByZWNpc2lvbl09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlY2lzaW9uXCJcclxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXggPz8gJydcIlxyXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtbnVtYmVyXHJcbiAgICAgICAgICAgID48a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBJbnB1dCBEYXRlIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtZGF0ZVxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQubGFiZWxcIlxyXG4gICAgICAgICAgICAgIFttYXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1heFwiXHJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWRhdGU+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIElucHV0IFBob25lIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwaG9uZSdcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXBob25lXHJcbiAgICAgICAgICAgICAgW2NvdW50cnlDb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb3VudHJ5Q29kZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxyXG4gICAgICAgICAgICAgIFtwaG9uZU1hc2tBZnRlckNvdW50cnlDb2RlXT1cIlxyXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/LnBob25lTWFza0FmdGVyQ291bnRyeUNvZGVcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1waG9uZT5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gSW5wdXQgUmFkaW8gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG9cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGt3aWt1aS1yYWRpby1saXN0XHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkPy5vcHRpb25zXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgW29yaWVudGF0aW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5vcmllbnRhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcclxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+PC9rd2lrdWktcmFkaW8tbGlzdD5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInR1aS1zcGFjZV9ib3R0b20tMlwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpZWxkLnZhbGlkYXRvcnM/LnJlcXVpcmVkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9iPlxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duLXdpdGgtc2VhcmNoJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktc2VsZWN0LWNvbWJvYm94XHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1zZWxlY3QtY29tYm9ib3g+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIEFQSSBDYWxsIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhcGktY2FsbCdcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvbi1hcGktY2FsbFxyXG4gICAgICAgICAgICAgIFthcGlTdGF0dXNdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5hcGk/LnN0YXR1cz8ubGFiZWxzW2ZpZWxkPy5hcGk/LnN0YXR1cz8udmFsdWVdXCJcclxuICAgICAgICAgICAgICBbc2hvd0xvYWRlcl09XCJmaWVsZD8uZGlzYWJsZWQgPT09ICdsb2FkaW5nJ1wiXHJcbiAgICAgICAgICAgICAgc2hhcGU9XCJudWxsXCJcclxuICAgICAgICAgICAgICBzaXplPVwibVwiXHJcbiAgICAgICAgICAgICAgc3R5bGVzPVwid2lkdGg6IGZpdC1jb250ZW50XCJcclxuICAgICAgICAgICAgICAob25DbGljayk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tBcGlDYWxsKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uLWFwaS1jYWxsPlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBNb2JpbGUgT1RQIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidvdHAnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1vdHBcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW21hc2tdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1hc2tcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtb3RwPlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBBYWRoYWFyIE51bWJlciAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWFkaGFhci1udW1iZXInXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1hYWRoYWFyXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtYWFkaGFhcj5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZm9ybT5cclxuICA8ZGl2IGNsYXNzPVwia3dpa2lkLWZvcm0tYnV0dG9uc1wiPlxyXG4gICAgPGt3aWt1aS1idXR0b25cclxuICAgICAgKm5nSWY9XCJ0aGlzLmlzTW9iaWxlVmlld1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJ2aWV3Rm9ybXNCdXR0b24uZGlzYWJsZWRcIlxyXG4gICAgICBpZD1cIlwiXHJcbiAgICAgIGxhYmVsPVwiVmlldyBGb3Jtc1wiXHJcbiAgICAgIFtzaG93TG9hZGVyXT1cInZpZXdGb3Jtc0J1dHRvbi5zaG93TG9hZGVyXCJcclxuICAgICAgc3R5bGVzPVwiXCJcclxuICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXHJcbiAgICAgIGljb249XCJcIlxyXG4gICAgICBpY29uUmlnaHQ9XCJcIlxyXG4gICAgICBbc2hhcGVdPVwibnVsbFwiXHJcbiAgICAgIHNpemU9XCJtXCJcclxuICAgICAgc3R5bGVzPVwid2lkdGg6IDEwMCVcIlxyXG4gICAgICAob25DbGljayk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoJGV2ZW50KVwiXHJcbiAgICA+PC9rd2lrdWktYnV0dG9uPlxyXG4gICAgPGt3aWt1aS1idXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cInNhdmVGb3JtQnV0dG9uLmRpc2FibGVkXCJcclxuICAgICAgaWQ9XCJcIlxyXG4gICAgICBsYWJlbD1cIlNhdmVcIlxyXG4gICAgICBbc2hvd0xvYWRlcl09XCJzYXZlRm9ybUJ1dHRvbi5zaG93TG9hZGVyXCJcclxuICAgICAgc3R5bGVzPVwiXCJcclxuICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgYXBwZWFyYW5jZT1cInByaW1hcnlcIlxyXG4gICAgICBpY29uPVwiXCJcclxuICAgICAgaWNvblJpZ2h0PVwiXCJcclxuICAgICAgW3NoYXBlXT1cIm51bGxcIlxyXG4gICAgICBzaXplPVwibVwiXHJcbiAgICAgIHN0eWxlcz1cIndpZHRoOiAxMDAlXCJcclxuICAgICAgKG9uQ2xpY2spPVwidGhpcy5oYW5kbGVPbkNsaWNrU2F2ZUZvcm0oJGV2ZW50KVwiXHJcbiAgICA+PC9rd2lrdWktYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdlxyXG4gIGNsYXNzPVwia3dpa2lkLWZvcm0tY29udGFpbmVyLWxvYWRpbmdcIlxyXG4gICpuZ0lmPVwidGhpcy5sb2FkaW5nXCJcclxuPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlclwiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uX3JvdW5kZWRdPVwidGhpcy5sb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25dPVwidGhpcy5sb2FkaW5nXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25fcm91bmRlZF09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gID48L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlclwiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uX3JvdW5kZWRdPVwidGhpcy5sb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25dPVwidGhpcy5sb2FkaW5nXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25fcm91bmRlZF09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gID48L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlclwiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uX3JvdW5kZWRdPVwidGhpcy5sb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG48dHVpLXB1c2hcclxuICBpZD1cImZpZWxkLWVycm9yLW5vdGlmaWNhdGlvblwiXHJcbiAgKnR1aVB1c2g9XCJzaG93RXJyb3JOb3RpZmljYXRpb25cIlxyXG4gIGhlYWRpbmc9XCJNaXNzaW5nL0luY29ycmVjdCBGaWVsZHMhXCJcclxuICB0eXBlPVwiRXJyb3JcIlxyXG4gIChjbG9zZSk9XCJ0b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSlcIlxyXG4+XHJcbiAgPHR1aS1zdmdcclxuICAgIHNyYz1cInR1aUljb25DYW5jZWxcIlxyXG4gICAgc3R5bGU9XCJjb2xvcjogI2ZmZiAhaW1wb3J0YW50XCJcclxuICA+XHJcbiAgPC90dWktc3ZnPlxyXG48L3R1aS1wdXNoPlxyXG4iXX0=
814
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFDTCxPQUFPLEVBQ1Asb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFDVCxLQUFLLEVBQ0wsT0FBTyxFQUVSLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRXRGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQU1wRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUNB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LFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFR1aUFsZXJ0U2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkvY29yZVwiO1xyXG5pbXBvcnQgeyBUdWlQdXNoU2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkva2l0XCI7XHJcbmltcG9ydCB7XHJcbiAgQWN0aW9ucyxcclxuICBjaGVja09iamVjdEtleUV4aXN0cyxcclxuICBDb25kaXRpb24sXHJcbiAgaXNFbXB0eVZhbHVlLFxyXG4gIGlzTm90RW1wdHlWYWx1ZSxcclxuICBsb2dNZXRob2QsXHJcbiAgUnVsZXMsXHJcbiAgU291cmNlcyxcclxuICBUQWN0aW9uXHJcbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XHJcbmltcG9ydCB7IHBhaXJ3aXNlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEVBY3Rpb25LZXkgfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9hY3Rpb25zL2Zvcm0tdmlldy5hY3Rpb25zLmVudW0uZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgRUFwaVN0YXR1c1R5cGUgfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9hcGlzL2Zvcm0tdmlldy5hcGlzLmVudW0uZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgRU1lc3NhZ2VUeXBlIH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvY29tbW9uL2Zvcm0tdmlldy5jb21tb24uZW51bS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBUTWVzc2FnZSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2NvbW1vbi9mb3JtLXZpZXcuY29tbW9uLnR5cGUuZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgRUZpZWxkVHlwZSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2ZpZWxkcy9mb3JtLXZpZXcuZmllbGRzLmVudW0uZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHtcclxuICBURmllbGQsXHJcbiAgVEZpZWxkQXBpQ2FsbCxcclxuICBURmllbGRUaXRsZVxyXG59IGZyb20gXCIuL2RlZmluaXRpb25zL2ZpZWxkcy9mb3JtLXZpZXcuZmllbGRzLnR5cGUuZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgS3dpa0lERm9ybVZpZXdTZXJ2aWNlIH0gZnJvbSBcIi4vZm9ybS12aWV3LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXBpcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyXCI7XHJcbmltcG9ydCB7IHNldEVtcHR5VmFsdWUgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5jb21tb24uaGVscGVyXCI7XHJcbmltcG9ydCB7XHJcbiAgYWRkTWVzc2FnZSxcclxuICBjb252ZXJ0VmFsdWVGcm9tS3dpa1VJRm9ybWF0VG9CYXNpY0Zvcm1hdCxcclxuICBmaW5kRmllbGRGcm9tS2V5LFxyXG4gIGZpbmRGaWVsZEluZGV4RnJvbUtleSxcclxuICBnZXRTZWFyY2hUZXh0T3B0aW9uc0Zyb21GaWVsZENvbmZpZyxcclxuICBnZXRTZWFyY2hUZXh0T3B0aW9uc0Zyb21SZW1vdGVGaWxlLFxyXG4gIGhpZ2hsaWdodEZpZWxkRXJyb3IsXHJcbiAgcmVtb3ZlTWVzc2FnZSxcclxuICBzZXRGaWVsZEVycm9yXHJcbn0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuZmllbGRzLmhlbHBlclwiO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9ucyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LnZhbGlkYXRpb25zLmhlbHBlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWZvcm0tdmlld1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZm9ybS12aWV3LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuc2Nzc1wiXSxcclxuICBwcm92aWRlcnM6IFtLd2lrSURGb3JtVmlld1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLd2lrSURGb3JtVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KClcclxuICBmb3JtQ29uZmlnOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZm9ybURhdGE6IGFueTtcclxuXHJcbiAgQElucHV0KClcclxuICBhcGlDYWxsUmVzcG9uc2U6IGFueSA9IHt9O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGlzTW9iaWxlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGFsbEZvcm1zRGF0YTogYW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGZvcm1zTGlzdDogYW55W107XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ2xpY2tWaWV3Rm9ybXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ2xpY2tTYXZlRm9ybTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgb25DbGlja0FwaUNhbGw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGdldEFjdGl2ZUZvcm1EYXRhOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBmaWVsZEdyb3VwczogYW55ID0ge307XHJcbiAgZm9ybUZpZWxkczogYW55W10gPSBbXTtcclxuICBwcmV2aW91c0Zvcm1EYXRhOiBhbnkgPSB7fTtcclxuXHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgdmlld0Zvcm1zQnV0dG9uID0ge1xyXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcclxuICB9O1xyXG4gIHNhdmVGb3JtQnV0dG9uID0ge1xyXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcclxuICB9O1xyXG5cclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoVHVpUHVzaFNlcnZpY2UpIHByb3RlY3RlZCByZWFkb25seSBwdXNoOiBUdWlQdXNoU2VydmljZSxcclxuICAgIEBJbmplY3QoVHVpQWxlcnRTZXJ2aWNlKSBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxlcnQ6IFR1aUFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybVZpZXdTZXJ2aWNlOiBLd2lrSURGb3JtVmlld1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGF3YWl0IHRoaXMuaW5pdEZvcm1Db25maWcodGhpcy5mb3JtQ29uZmlnKTtcclxuXHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSkoKTtcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7fVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHJldHVybiBjaGVja09iamVjdEtleUV4aXN0cyhjaGFuZ2VzLCBrZXkpICYmICFjaGFuZ2VzW2tleV0uZmlyc3RDaGFuZ2U7XHJcbiAgICB9O1xyXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1EYXRhXCIpKSB7XHJcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7XHJcbiAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcclxuICAgICAgICAuLi5jaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFwaUNhbGxSZXNwb25zZVwiKSkge1xyXG4gICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZSA9IGNoYW5nZXMuYXBpQ2FsbFJlc3BvbnNlLmN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7XHJcbiAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcclxuICAgICAgICBbdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XTogdGhpcy5hcGlDYWxsUmVzcG9uc2UucmVzcG9uc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3RoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleV06IHRoaXMuYXBpQ2FsbFJlc3BvbnNlLnJlc3BvbnNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGV0IGZpZWxkOiBURmllbGRBcGlDYWxsID0gZmluZEZpZWxkRnJvbUtleShcclxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXHJcbiAgICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXHJcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgKTtcclxuXHJcbiAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgZmllbGQgPSBhd2FpdCBhcGlzLnZhbGlkYXRlQXBpQ2FsbFJlc3BvbnNlKCk7XHJcbiAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiaXNNb2JpbGVWaWV3XCIpKSB7XHJcbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gY2hhbmdlcy5pc01vYmlsZVZpZXcuY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFsbEZvcm1zRGF0YVwiKSkge1xyXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IGNoYW5nZXMuYWxsRm9ybXNEYXRhLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJmb3Jtc0xpc3RcIikpIHtcclxuICAgICAgdGhpcy5mb3Jtc0xpc3QgPSBjaGFuZ2VzLmZvcm1zTGlzdC5jdXJyZW50VmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybUNvbmZpZ1wiKSkge1xyXG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBjaGFuZ2VzLmZvcm1Db25maWcuY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmluaXRGb3JtQ29uZmlnKHRoaXMuZm9ybUNvbmZpZyk7XHJcbiAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgYXN5bmMgaW5pdEZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3Vwc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWcpO1xyXG5cclxuICAgIHRoaXMuc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBhd2FpdCB0aGlzLmZvcm1WaWV3U2VydmljZS5jcmVhdGVGb3JtR3JvdXAoXHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyxcclxuICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICk7XHJcblxyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC50eXBlICE9PSBcInRpdGxlXCIpIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSB7XHJcbiAgICAgICAgICAuLi50aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICBbZmllbGQua2V5XTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAucGlwZShwYWlyd2lzZSgpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoW3ByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZV0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICAgICAgICBbZmllbGQua2V5XTogcHJldmlvdXNWYWx1ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjdXJyZW50VmFsdWVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgIT09IFwidGl0bGVcIikge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBmaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcclxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIk9OX0lOSVRcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWc6IGFueSkge1xyXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcsIFwiZmllbGRzXCIpKSB7XHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IGZvcm1Db25maWcuZmllbGRzO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZywgXCJtdWx0aUZvcm1cIikgJiZcclxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZy5tdWx0aUZvcm0sIFwiZmllbGRzXCIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZm9ybUNvbmZpZy5tdWx0aUZvcm0uZmllbGRzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIHNldEZvcm1GaWVsZEdyb3Vwc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWc6IGFueSkge1xyXG4gICAgdGhpcy5maWVsZEdyb3VwcyA9IGZvcm1Db25maWcuZmllbGRHcm91cHM7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCkge1xyXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYWxsRm9ybXNEYXRhLCB0aGlzLmZvcm1Db25maWcua2V5KSkge1xyXG4gICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy5hbGxGb3Jtc0RhdGFbdGhpcy5mb3JtQ29uZmlnLmtleV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgY2hpbGRGaWVsZEdyb3VwQ29uZmlnOiBhbnksXHJcbiAgICBwYXJlbnRGaWVsZDogYW55XHJcbiAgKSB7XHJcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hpbGRGaWVsZEdyb3VwQ29uZmlnLCBcInJ1bGVzXCIpKSB7XHJcbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlcyhjaGlsZEZpZWxkR3JvdXBDb25maWcucnVsZXMsIHtcclxuICAgICAgICBGSUVMRF9DT05GSUc6IHBhcmVudEZpZWxkLFxyXG4gICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcclxuICAgICAgfSkubWFwcGluZygpO1xyXG5cclxuICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGNoaWxkRmllbGRHcm91cENvbmZpZy5hY3Rpb25zKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXHJcbiAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxyXG4gICAgICAgICAgcnVsZXNNYXBwaW5nXHJcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb25zKFxyXG4gICAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcGFyZW50RmllbGQsXHJcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb25PbkZpZWxkR3JvdXAuYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cChcclxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxyXG4gICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZzogYW55LFxyXG4gICAgZXZlbnRUeXBlOiBzdHJpbmdcclxuICApIHtcclxuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJJTklUXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhcIklOSVRcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVkFMVUVfQ0hBTkdFXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhcIlZBTFVFX0NIQU5HRVwiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJORVNURURfTElOS1wiOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikgJiZcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoXCJORVNURURfTElOS1wiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxyXG4gICAgY29ubmVjdGVkRmllbGQ6IGFueVxyXG4gICkge1xyXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInJ1bGVzXCIpKSB7XHJcbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlcyhjb25uZWN0ZWRGaWVsZENvbmZpZy5ydWxlcywge1xyXG4gICAgICAgIEZJRUxEX0NPTkZJRzogY29ubmVjdGVkRmllbGQsXHJcbiAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxyXG4gICAgICB9KS5tYXBwaW5nKCk7XHJcblxyXG4gICAgICBmb3IgKGxldCBhY3Rpb24gb2YgY29ubmVjdGVkRmllbGRDb25maWcuYWN0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxyXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcclxuICAgICAgICAgIHJ1bGVzTWFwcGluZ1xyXG4gICAgICAgICkuZXZhbHVhdGUoKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9ucyhcclxuICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGNvbm5lY3RlZEZpZWxkLFxyXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbm5lY3RlZEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXHJcbiAgICBjdXJyZW50RmllbGQ6IGFueSxcclxuICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnOiBhbnksXHJcbiAgICBldmVudFR5cGU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgbGV0IGNvbm5lY3RlZEZpZWxkID0gZmluZEZpZWxkRnJvbUtleShcclxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxyXG4gICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZ1tcImtleVwiXVxyXG4gICAgKTtcclxuXHJcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xyXG4gICAgICBjYXNlIFwiSU5JVFwiOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkLCBcInRyaWdnZXJzXCIpICYmXHJcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZC50cmlnZ2Vycy5pbmNsdWRlcyhcIklOSVRcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmlzRmllbGRFbmFibGVkKGNvbm5lY3RlZEZpZWxkLmtleSkpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXHJcbiAgICAgICAgICAgICAgICBcImNvbm5lY3RlZFBhcmVudEZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBzd2l0Y2ggKGNvbm5lY3RlZEZpZWxkQ29uZmlnLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkcm9wZG93bi13aXRoLXNlYXJjaFwiOlxyXG4gICAgICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlRmllbGRUeXBlU2VhcmNoVGV4dChcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVkFMVUVfQ0hBTkdFXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwidHJpZ2dlcnNcIikgJiZcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLnRyaWdnZXJzLmluY2x1ZGVzKFwiVkFMVUVfQ0hBTkdFXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBzd2l0Y2ggKGNvbm5lY3RlZEZpZWxkLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImRyb3Bkb3duLXdpdGgtc2VhcmNoXCI6XHJcbiAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkVHlwZVNlYXJjaFRleHQoXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkQWN0aW9ucyhcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIk5FU1RFRF9MSU5LXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwidHJpZ2dlcnNcIikgJiZcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLnRyaWdnZXJzLmluY2x1ZGVzKFwiTkVTVEVEX0xJTktcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSkge1xyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLFxyXG4gICAgICAgICAgXCJjb25uZWN0ZWRGaWVsZHNcIlxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb25uZWN0ZWRGaWVsZENvbmZpZyBvZiBjb25uZWN0ZWRGaWVsZC5jb25uZWN0ZWRFbGVtZW50c1xyXG4gICAgICAgICAgLmNvbm5lY3RlZEZpZWxkcykge1xyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGQgPSB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcclxuICAgICAgICAgICAgXCJORVNURURfTElOS1wiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50RmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoZTogYW55LCBldmVudFR5cGU6IHN0cmluZykge1xyXG4gICAgbGV0IGN1cnJlbnRGaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRGaWVsZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjdXJyZW50RmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIikpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcclxuICAgICAgICAgICAgY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLFxyXG4gICAgICAgICAgICBcImNvbm5lY3RlZEZpZWxkR3JvdXBzXCJcclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGxldCBjb25uZWN0ZWRGaWVsZEdyb3VwcyA9XHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZEdyb3VwcztcclxuICAgICAgICAgIGZvciAobGV0IGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcgb2YgY29ubmVjdGVkRmllbGRHcm91cHMpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRHcm91cChcclxuICAgICAgICAgICAgICBjdXJyZW50RmllbGQsXHJcbiAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcclxuICAgICAgICAgICAgICBldmVudFR5cGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cyxcclxuICAgICAgICAgICAgXCJjb25uZWN0ZWRGaWVsZHNcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGV0IGNvbm5lY3RlZEZpZWxkcyA9IGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZHM7XHJcbiAgICAgICAgICBmb3IgKGxldCBjb25uZWN0ZWRGaWVsZENvbmZpZyBvZiBjb25uZWN0ZWRGaWVsZHMpIHtcclxuICAgICAgICAgICAgY3VycmVudEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRzKFxyXG4gICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcclxuICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcclxuICAgICAgICAgICAgICBldmVudFR5cGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgRmllbGQgZm9yIHRoZSBnaXZlbiBrZXkgWycke2Uua2V5fSddIGlzIG5vdCBmb3VuZCB3aXRoIGV2ZW50VHlwZTogJyR7ZXZlbnRUeXBlfScuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRE9NIEV2ZW50IEhhbmRsZXJzXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGhhbmRsZUdldEtleVZhbHVlKGU6IGFueSkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcclxuICAgICAge1xyXG4gICAgICAgIFtlLmtleV06IGUudmFsdWVcclxuICAgICAgfSxcclxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cclxuICAgICk7XHJcblxyXG4gICAgLy8gQ3VycmVudGx5IHNldCBvbmx5IGZvciBkcm9wZG93bi13aXRoLXNlYXJjaCBjb25uZWN0ZWQgZmllbGRzXHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgZmllbGQudHlwZSAhPT0gXCJ0aXRsZVwiICYmXHJcbiAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcclxuICAgICkge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IG5ldyBWYWxpZGF0aW9ucyhcclxuICAgICAgICBmaWVsZCxcclxuICAgICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICBhd2FpdCB2YWxpZGF0aW9ucy52YWxpZGF0ZUZpZWxkKCk7XHJcbiAgICAgIH0pKCk7XHJcblxyXG4gICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGtleTogZmllbGQua2V5LFxyXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiT05fQ0hBTkdFXCJcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBhc3luYyBoYW5kbGVPbkNsaWNrUmVzZXRGb3JtRmllbGRzKGU6IGFueSwgZmllbGQ6IFRGaWVsZFRpdGxlKSB7XHJcbiAgICBmb3IgKGxldCBmIG9mIGZpZWxkLnJlc2V0LmZpZWxkcykge1xyXG4gICAgICBmb3IgKGxldCBhY3Rpb24gb2YgZi5hY3Rpb25zKSB7XHJcbiAgICAgICAgY29uc3QgcmVzZXRGaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkoXHJcbiAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXHJcbiAgICAgICAgICBhY3Rpb24ucHJvcHMuZmllbGRLZXlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9ucyhcclxuICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IHJlc2V0RmllbGQsXHJcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tBcGlDYWxsKGU6IGFueSkge1xyXG4gICAgbGV0IGZpZWxkOiBURmllbGRBcGlDYWxsID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcclxuXHJcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gXCJhcGktY2FsbFwiKSB7XHJcbiAgICAgIC8vIHNldCBidXR0b24gc3RhdHVzIHRvIGxvYWRpbmdcclxuICAgICAgZmllbGRbXCJhcGlcIl1bXCJzdGF0dXNcIl1bXCJ2YWx1ZVwiXSA9IEVBcGlTdGF0dXNUeXBlLkxPQURJTkc7XHJcbiAgICAgIGZpZWxkW1wic2hvd0xvYWRlclwiXSA9IHRydWU7XHJcbiAgICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSB0cnVlO1xyXG4gICAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xyXG4gICAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSB0cnVlO1xyXG4gICAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wic2hvd0xvYWRlclwiXSA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXHJcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGZpZWxkID0gYXdhaXQgYXBpcy5zZXRSZXF1ZXN0Qm9keVBhcmFtcygpO1xyXG5cclxuICAgICAgZmllbGQgPSBhd2FpdCBhcGlzLnZhbGlkYXRlUmVxdWVzdEJvZHkoKTtcclxuXHJcbiAgICAgIGlmIChmaWVsZC5hcGkucmVxdWVzdC5ib2R5LnZhbGlkYXRpb24uaXNfdmFsaWQpIHtcclxuICAgICAgICAvLyBDYWxsIEFQSSBIZXJlXHJcbiAgICAgICAgdGhpcy5vbkNsaWNrQXBpQ2FsbC5lbWl0KHtcclxuICAgICAgICAgIGtleTogZS5rZXksXHJcbiAgICAgICAgICByZXF1ZXN0OiB7XHJcbiAgICAgICAgICAgIG1vZGU6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgICBib2R5OiBmaWVsZC5hcGkucmVxdWVzdC5ib2R5LnZhbHVlLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7fSxcclxuICAgICAgICAgICAgdXJsOiBmaWVsZC5hcGkucmVxdWVzdC51cmxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBSZXF1ZXN0IEJvZHkgVmFsaWRhdGlvbiBGYWlsZWRcclxuICAgICAgICAvLyBIaWdobGlnaHQgRXJyb3IgaW4gVUkgdG8gVXNlciB0byBSZXRyeSBBZnRlciBTb21ldGltZS5cclxuICAgICAgICAvLyBUYWtlIEFjdGlvbnMgYmFzZWQgb24gVmFsaWRhdGlvblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgZmllbGRbXCJhcGlcIl1bXCJzdGF0dXNcIl1bXCJ2YWx1ZVwiXSA9IEVBcGlTdGF0dXNUeXBlLkZBSUxFRDtcclxuICAgICAgICAgIGZpZWxkW1wic2hvd0xvYWRlclwiXSA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcclxuICAgICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJzaG93TG9hZGVyXCJdID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2F2ZUZvcm1CdXR0b25bXCJkaXNhYmxlZFwiXSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wic2hvd0xvYWRlclwiXSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoZTogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2xpY2tWaWV3Rm9ybXMuZW1pdCh7XHJcbiAgICAgIGNsaWNrZWQ6IHRydWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGhhbmRsZU9uQ2xpY2tTYXZlRm9ybShlOiBhbnkpIHtcclxuICAgIGxldCBmb3JtRGF0YSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcblxyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC50eXBlICE9PSBFRmllbGRUeXBlLlRJVExFKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xyXG4gICAgICAgICAgZGVsZXRlIGZvcm1EYXRhW2ZpZWxkLmtleV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0VmFsdWVGcm9tS3dpa1VJRm9ybWF0VG9CYXNpY0Zvcm1hdChcclxuICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmaWVsZC50eXBlICE9PSBFRmllbGRUeXBlLlRJVExFICYmXHJcbiAgICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX1NBVkVcIilcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSBuZXcgVmFsaWRhdGlvbnMoXHJcbiAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgIGZvcm1EYXRhLFxyXG4gICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXHJcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBhd2FpdCB2YWxpZGF0aW9ucy52YWxpZGF0ZUZpZWxkKCk7XHJcbiAgICAgICAgfSkoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cC5pbnZhbGlkKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xzID0gbmV3IFZhbGlkYXRpb25zKFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICBmb3JtRGF0YSxcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXHJcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgKS5maW5kSW52YWxpZENvbnRyb2xzUmVjdXJzaXZlKHRoaXMuZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgIGxldCBmaXJzdEZpZWxkV2l0aEVycm9yOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgICAgZm9yIChsZXQgY29udHJvbCBvZiBjb250cm9scykge1xyXG4gICAgICAgIGlmIChjb250cm9sLmludmFsaWQgJiYgaXNFbXB0eVZhbHVlKGZpcnN0RmllbGRXaXRoRXJyb3IpKSB7XHJcbiAgICAgICAgICBmaXJzdEZpZWxkV2l0aEVycm9yID0gY29udHJvbC5rZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IHNldEZpZWxkRXJyb3IoXHJcbiAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sLmtleV0uZXJyb3JzLFxyXG4gICAgICAgICAgY29udHJvbC5rZXksXHJcbiAgICAgICAgICBjb250cm9sLmludmFsaWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcclxuICAgICAgfSwgMzAwMCk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmtleXMoZm9ybURhdGEpLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmIChpc0VtcHR5VmFsdWUoZm9ybURhdGFba2V5XSkpIHtcclxuICAgICAgICBmb3JtRGF0YVtrZXldID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vbkNsaWNrU2F2ZUZvcm0uZW1pdCh7IGZvcm1Db25maWc6IHRoaXMuZm9ybUNvbmZpZywgZGF0YTogZm9ybURhdGEgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93RXJyb3JOb3RpZmljYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAbG9nTWV0aG9kXHJcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdykge1xyXG4gICAgdGhpcy5zaG93RXJyb3JOb3RpZmljYXRpb24gPSBzaG93O1xyXG4gIH1cclxuXHJcbiAgLy8gQ29tcG9uZW50IEhlbHBlcnNcclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRIaWRlKGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImhpZGRlblwiXSA9IHRydWU7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRHcm91cEhpZGUoZmllbGRHcm91cDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XHJcbiAgICAgIHRoaXMuZmllbGRIaWRlKGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBmaWVsZFNob3coZmllbGRLZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiaGlkZGVuXCJdID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRHcm91cFNob3coZmllbGRHcm91cDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XHJcbiAgICAgIHRoaXMuZmllbGRTaG93KGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBmaWVsZERpc2FibGUoZmllbGRLZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGZpZWxkLnR5cGUgIT09IEVGaWVsZFR5cGUuVElUTEUpIHtcclxuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiZGlzYWJsZWRcIl0gPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scykpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLmRpc2FibGUoe1xyXG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBmaWVsZEdyb3VwRGlzYWJsZShmaWVsZEdyb3VwOiBzdHJpbmcpIHtcclxuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcclxuICAgICAgdGhpcy5maWVsZERpc2FibGUoZmllbGRLZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGZpZWxkRW5hYmxlKGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChmaWVsZC50eXBlICE9PSBFRmllbGRUeXBlLlRJVExFKSB7XHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0uZW5hYmxlKHtcclxuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRHcm91cEVuYWJsZShmaWVsZEdyb3VwOiBzdHJpbmcpIHtcclxuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcclxuICAgICAgdGhpcy5maWVsZEVuYWJsZShmaWVsZEtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRSZXNldChmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICAvLyBGaW5kIHRoZSBmaWVsZCBhbmQgaXRzIGluZGV4IGluIHRoZSBmb3JtRmllbGRzIGFycmF5XHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xyXG4gICAgbGV0IGZpZWxkSW5kZXggPSBmaW5kRmllbGRJbmRleEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcblxyXG4gICAgLy8gRGVsZXRlIHRoZSBmaWVsZCBmcm9tIHRoZSBmb3JtRGF0YSBvYmplY3RcclxuICAgIGRlbGV0ZSB0aGlzLmZvcm1EYXRhW2ZpZWxkS2V5XTtcclxuXHJcbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtR3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucmVzZXQoc2V0RW1wdHlWYWx1ZShmaWVsZCksIHtcclxuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIG1lc3NhZ2VzIGFuZCBlcnJvcnMgZm9yIHRoZSBmaWVsZFxyXG4gICAgZmllbGQgPSByZW1vdmVNZXNzYWdlKGZpZWxkLCB7XHJcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5XQVJOSU5HLFxyXG4gICAgICBtZXNzYWdlOiBcIlwiXHJcbiAgICB9KTtcclxuICAgIGZpZWxkID0gcmVtb3ZlTWVzc2FnZShmaWVsZCwge1xyXG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuU1VDQ0VTUyxcclxuICAgICAgbWVzc2FnZTogXCJcIlxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGZpZWxkS2V5LCB7XHJcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5FUlJPUixcclxuICAgICAgbWVzc2FnZTogXCJcIlxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxyXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJhcGktY2FsbFwiOlxyXG4gICAgICAgIGNvbnN0IGZpZWxkQXBpQ2FsbCA9IGZpZWxkIGFzIFRGaWVsZEFwaUNhbGw7XHJcbiAgICAgICAgZmllbGRBcGlDYWxsLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5ERUZBVUxUO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkQXBpQ2FsbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBmaWVsZC5mb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgIGZpZWxkLmludmFsaWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBmaWVsZEVycm9yU2hvdyhmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgZmllbGQgPSBoaWdobGlnaHRGaWVsZEVycm9yKGZpZWxkLCB0cnVlKTtcclxuICAgIGZpZWxkID0gYWRkTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZmllbGRFcnJvckhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZpZWxkID0gaGlnaGxpZ2h0RmllbGRFcnJvcihmaWVsZCwgZmFsc2UpO1xyXG4gICAgZmllbGQgPSByZW1vdmVNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBmaWVsZE1lc3NhZ2VTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xyXG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmaWVsZCA9IGFkZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ01ldGhvZFxyXG4gIGZpZWxkTWVzc2FnZUhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZpZWxkID0gcmVtb3ZlTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgc2V0T2JqZWN0VmFsdWUoZmllbGQ6IGFueSwgcGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7fVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgcGF0Y2hGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcclxuICAgICAge1xyXG4gICAgICAgIFtrZXldOiB2YWx1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBpc0ZpZWxkVmFsaWQoZmllbGRLZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkS2V5XS52YWxpZDtcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBpc0ZpZWxkRW5hYmxlZChmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGRLZXldLmVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgZ2V0Rm9ybUdyb3VwUmF3VmFsdWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgYXN5bmMgaGFuZGxlRmllbGRUeXBlU2VhcmNoVGV4dChmaWVsZDogYW55LCBjaGlsZEZpZWxkOiBhbnkpIHtcclxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjaGlsZEZpZWxkLCBcImpzb25cIikpIHtcclxuICAgICAgY2hpbGRGaWVsZC5vcHRpb25zID0gZ2V0U2VhcmNoVGV4dE9wdGlvbnNGcm9tRmllbGRDb25maWcoXHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgY2hpbGRGaWVsZCxcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoaWxkRmllbGQsIFwiZmV0Y2hKc29uRnJvbVJlbW90ZVwiKSkge1xyXG4gICAgICBjaGlsZEZpZWxkLm9wdGlvbnMgPSBhd2FpdCBnZXRTZWFyY2hUZXh0T3B0aW9uc0Zyb21SZW1vdGVGaWxlKFxyXG4gICAgICAgIGZpZWxkLFxyXG4gICAgICAgIGNoaWxkRmllbGQsXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2hpbGRGaWVsZDtcclxuICB9XHJcblxyXG4gIEBsb2dNZXRob2RcclxuICBhc3luYyB0YWtlQWN0aW9uT25GaWVsZEdyb3VwKFxyXG4gICAgYWN0aW9uOiBUQWN0aW9uLFxyXG4gICAgZmllbGQ6IFRGaWVsZCxcclxuICAgIGFsbEZvcm1zRGF0YTogYW55LFxyXG4gICAgZm9ybURhdGE6IGFueSxcclxuICAgIHByZXZpb3VzRm9ybURhdGE6IGFueVxyXG4gICkge1xyXG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9ISURFOlxyXG4gICAgICAgIHRoaXMuZmllbGRHcm91cEhpZGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX1NIT1c6XHJcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwU2hvdyhhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRU5BQkxFOlxyXG4gICAgICAgIHRoaXMuZmllbGRHcm91cEVuYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRElTQUJMRTpcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBEaXNhYmxlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nTWV0aG9kXHJcbiAgYXN5bmMgdGFrZUFjdGlvbihhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KSB7XHJcbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0hJREU6XHJcbiAgICAgICAgdGhpcy5maWVsZEhpZGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX1NIT1c6XHJcbiAgICAgICAgdGhpcy5maWVsZFNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0RJU0FCTEU6XHJcbiAgICAgICAgdGhpcy5maWVsZERpc2FibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VOQUJMRTpcclxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9SRVNFVDpcclxuICAgICAgICB0aGlzLmZpZWxkUmVzZXQoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX1NIT1c6XHJcbiAgICAgICAgdGhpcy5maWVsZEVycm9yU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX0hJREU6XHJcbiAgICAgICAgdGhpcy5maWVsZEVycm9ySGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX01FU1NBR0VfU0hPVzpcclxuICAgICAgICB0aGlzLmZpZWxkTWVzc2FnZVNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFU19ISURFOlxyXG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlSGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcclxuICAgICAgICBjb25zdCBzb3VyY2VzID0gbmV3IFNvdXJjZXMob2JqZWN0KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2VzLmdldFZhbHVlRnJvbVNvdXJjZShcclxuICAgICAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHNvdXJjZXMuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcclxuXHJcbiAgICAgICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZXMub2JqZWN0LkZJRUxEX0NPTkZJRztcclxuICAgICAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlcy5vYmplY3QuRk9STV9EQVRBO1xyXG4gICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlcy5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlcy5vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkhBTkRMRV9DT05ORUNURURfRUxFTUVOVFM6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyh7IGtleTogYWN0aW9uLnByb3BzLmZpZWxkS2V5IH0sIFwiQUNUSU9OXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVBY3Rpb25LZXkuQ1VTVE9NOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJrd2lraWQtZm9ybS1jb250YWluZXJcIlxyXG4gICpuZ0lmPVwiIXRoaXMubG9hZGluZ1wiXHJcbj5cclxuICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLXRpdGxlXCI+XHJcbiAgICAgIHt7IHRoaXMuZm9ybUNvbmZpZy50aXRsZSB9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtc3RlcHNcIj5cclxuICAgICAgU3RlcCB7eyB0aGlzLmZvcm1Db25maWcuc2VxdWVuY2VObyB9fSBvZiB7eyB0aGlzLmZvcm1zTGlzdC5sZW5ndGggfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGhyIC8+XHJcbiAgPC9kaXY+XHJcbiAgPGZvcm1cclxuICAgIGNsYXNzPVwia3dpa2lkLWZvcm0gc2hvd1wiXHJcbiAgICBbZm9ybUdyb3VwXT1cInRoaXMuZm9ybUdyb3VwXCJcclxuICA+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmllbGQudHlwZVwiPlxyXG4gICAgICAgIDwhLS0gRm9ybSBUaXRsZSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGl0bGUnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwidGl0bGVcIlxyXG4gICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ucmVzZXRcIlxyXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcclxuICAgICAgICAgICAgICBzaXplPVwic1wiXHJcbiAgICAgICAgICAgICAgbGFiZWw9XCJSZXNldFwiXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidGhpcy5oYW5kbGVPbkNsaWNrUmVzZXRGb3JtRmllbGRzKCRldmVudCwgZmllbGQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gSW5wdXQgVGV4dCAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0XHJcbiAgICAgICAgICAgICAgW2Nhc2VdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNhc2VcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQubGFiZWxcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0PlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBDaGVja2JveCAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1jaGVja2JveC1ibG9ja1xyXG4gICAgICAgICAgICAgIFtjb250ZW50QWxpZ25dPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRlbnRBbGlnbiA/PyAnbGVmdCdcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemUgPz8gJ2wnXCJcclxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktY2hlY2tib3gtYmxvY2tcclxuICAgICAgICAgICAgPjxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIElucHV0IE51bWJlciAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbnVtYmVyXHJcbiAgICAgICAgICAgICAgW2RlY2ltYWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmRlY2ltYWxcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcclxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxyXG4gICAgICAgICAgICAgIFttaW5dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1pblwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXggPz8gJydcIlxyXG4gICAgICAgICAgICAgIFtwcmVjaXNpb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWNpc2lvblwiXHJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4ID8/ICcnXCJcclxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW51bWJlclxyXG4gICAgICAgICAgICA+PGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gSW5wdXQgRGF0ZSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWRhdGVcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCJcclxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxyXG4gICAgICAgICAgICAgIFttaW5dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm1pblwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1kYXRlPlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBJbnB1dCBQaG9uZSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGhvbmUnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1waG9uZVxyXG4gICAgICAgICAgICAgIFtjb3VudHJ5Q29kZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY291bnRyeUNvZGVcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcclxuICAgICAgICAgICAgICBbcGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZV09XCJcclxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy5waG9uZU1hc2tBZnRlckNvdW50cnlDb2RlXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcGhvbmU+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIElucHV0IFJhZGlvIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICBbdHVpTGFiZWxdPVwibGFiZWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxrd2lrdWktcmFkaW8tbGlzdFxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZD8ub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcclxuICAgICAgICAgICAgICAgIFtvcmllbnRhdGlvbl09XCJmaWVsZD8ucHJvcGVydGllcz8ub3JpZW50YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLXJhZGlvLWxpc3Q+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0dWktc3BhY2VfYm90dG9tLTJcIlxyXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Yj5cclxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYj5cclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bi13aXRoLXNlYXJjaCdcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLXNlbGVjdC1jb21ib2JveFxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQubGFiZWxcIlxyXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktc2VsZWN0LWNvbWJvYm94PlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBBUEkgQ2FsbCAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYXBpLWNhbGwnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b24tYXBpLWNhbGxcclxuICAgICAgICAgICAgICBbYXBpU3RhdHVzXT1cImZpZWxkPy5hcGk/LnN0YXR1cz8udmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8uY2xhc3NcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8uYXBpPy5zdGF0dXM/LmxhYmVsc1tmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXVwiXHJcbiAgICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiZmllbGQ/LmRpc2FibGVkID09PSAnbG9hZGluZydcIlxyXG4gICAgICAgICAgICAgIHNoYXBlPVwibnVsbFwiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxyXG4gICAgICAgICAgICAgIHN0eWxlcz1cIndpZHRoOiBmaXQtY29udGVudFwiXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidGhpcy5oYW5kbGVPbkNsaWNrQXBpQ2FsbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbi1hcGktY2FsbD5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gTW9iaWxlIE9UUCAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInb3RwJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtb3RwXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxyXG4gICAgICAgICAgICAgIFttYXNrXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXNrXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW90cD5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gQWFkaGFhciBOdW1iZXIgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FhZGhhYXItbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtYWFkaGFhclxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWFhZGhhYXI+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Zvcm0+XHJcbiAgPGRpdiBjbGFzcz1cImt3aWtpZC1mb3JtLWJ1dHRvbnNcIj5cclxuICAgIDxrd2lrdWktYnV0dG9uXHJcbiAgICAgICpuZ0lmPVwidGhpcy5pc01vYmlsZVZpZXdcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwidmlld0Zvcm1zQnV0dG9uLmRpc2FibGVkXCJcclxuICAgICAgaWQ9XCJcIlxyXG4gICAgICBsYWJlbD1cIlZpZXcgRm9ybXNcIlxyXG4gICAgICBbc2hvd0xvYWRlcl09XCJ2aWV3Rm9ybXNCdXR0b24uc2hvd0xvYWRlclwiXHJcbiAgICAgIHN0eWxlcz1cIlwiXHJcbiAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxyXG4gICAgICBpY29uPVwiXCJcclxuICAgICAgaWNvblJpZ2h0PVwiXCJcclxuICAgICAgW3NoYXBlXT1cIm51bGxcIlxyXG4gICAgICBzaXplPVwibVwiXHJcbiAgICAgIHN0eWxlcz1cIndpZHRoOiAxMDAlXCJcclxuICAgICAgKG9uQ2xpY2spPVwidGhpcy5oYW5kbGVPbkNsaWNrVmlld0Zvcm1zKCRldmVudClcIlxyXG4gICAgPjwva3dpa3VpLWJ1dHRvbj5cclxuICAgIDxrd2lrdWktYnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJzYXZlRm9ybUJ1dHRvbi5kaXNhYmxlZFwiXHJcbiAgICAgIGlkPVwiXCJcclxuICAgICAgbGFiZWw9XCJTYXZlXCJcclxuICAgICAgW3Nob3dMb2FkZXJdPVwic2F2ZUZvcm1CdXR0b24uc2hvd0xvYWRlclwiXHJcbiAgICAgIHN0eWxlcz1cIlwiXHJcbiAgICAgIGNsYXNzPVwiXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGFwcGVhcmFuY2U9XCJwcmltYXJ5XCJcclxuICAgICAgaWNvbj1cIlwiXHJcbiAgICAgIGljb25SaWdodD1cIlwiXHJcbiAgICAgIFtzaGFwZV09XCJudWxsXCJcclxuICAgICAgc2l6ZT1cIm1cIlxyXG4gICAgICBzdHlsZXM9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgIChvbkNsaWNrKT1cInRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudClcIlxyXG4gICAgPjwva3dpa3VpLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXZcclxuICBjbGFzcz1cImt3aWtpZC1mb3JtLWNvbnRhaW5lci1sb2FkaW5nXCJcclxuICAqbmdJZj1cInRoaXMubG9hZGluZ1wiXHJcbj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlclwiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uX3JvdW5kZWRdPVwidGhpcy5sb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25dPVwidGhpcy5sb2FkaW5nXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25fcm91bmRlZF09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gID48L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlclwiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uX3JvdW5kZWRdPVwidGhpcy5sb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25dPVwidGhpcy5sb2FkaW5nXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25fcm91bmRlZF09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gID48L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG48L2Rpdj5cclxuPHR1aS1wdXNoXHJcbiAgaWQ9XCJmaWVsZC1lcnJvci1ub3RpZmljYXRpb25cIlxyXG4gICp0dWlQdXNoPVwic2hvd0Vycm9yTm90aWZpY2F0aW9uXCJcclxuICBoZWFkaW5nPVwiTWlzc2luZy9JbmNvcnJlY3QgRmllbGRzIVwiXHJcbiAgdHlwZT1cIkVycm9yXCJcclxuICAoY2xvc2UpPVwidG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpXCJcclxuPlxyXG4gIDx0dWktc3ZnXHJcbiAgICBzcmM9XCJ0dWlJY29uQ2FuY2VsXCJcclxuICAgIHN0eWxlPVwiY29sb3I6ICNmZmYgIWltcG9ydGFudFwiXHJcbiAgPlxyXG4gIDwvdHVpLXN2Zz5cclxuPC90dWktcHVzaD5cclxuIl19