@rangertechnologies/ngnxt 2.1.117 → 2.1.119
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/environments/version.mjs +5 -5
- package/esm2022/lib/components/datatable/datatable.component.mjs +68 -20
- package/esm2022/lib/pages/builder/element/element.component.mjs +45 -4
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +170 -54
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +3 -3
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +3 -3
- package/esm2022/lib/services/form-builder.service.mjs +27 -15
- package/fesm2022/rangertechnologies-ngnxt.mjs +361 -145
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/datatable/datatable.component.d.ts +1 -1
- package/lib/pages/builder/properties/properties.component.d.ts +29 -8
- package/lib/services/form-builder.service.d.ts +4 -0
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.119.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.117.tgz +0 -0
|
@@ -19,49 +19,7 @@ export class PropertiesComponent {
|
|
|
19
19
|
bookId;
|
|
20
20
|
book;
|
|
21
21
|
activeTab = 'attributes';
|
|
22
|
-
|
|
23
|
-
setActiveTab(tab) {
|
|
24
|
-
this.activeTab = tab;
|
|
25
|
-
}
|
|
26
|
-
// SKS13MAR25 table property save
|
|
27
|
-
onSave() {
|
|
28
|
-
console.log('Saving data:');
|
|
29
|
-
}
|
|
30
|
-
// SKS13MAR25 table property reset
|
|
31
|
-
onCancel() {
|
|
32
|
-
console.log('Operation cancelled');
|
|
33
|
-
}
|
|
34
|
-
onToggleChange(key, event) {
|
|
35
|
-
const checked = event.target.checked;
|
|
36
|
-
this.selectedElement = { ...this.selectedElement, [key]: checked };
|
|
37
|
-
this.updateProperty(key, checked); //AP-06MAR25 Bug Fixed
|
|
38
|
-
}
|
|
39
|
-
updateProperties(elementType) {
|
|
40
|
-
// Reset alignment and styles if switching elements
|
|
41
|
-
this.selectedAlign = 'align-left';
|
|
42
|
-
this.selectedStyles = [];
|
|
43
|
-
// Fetch the properties of the selected element type
|
|
44
|
-
const properties = this.getProperties();
|
|
45
|
-
if (properties) {
|
|
46
|
-
// Make sure the properties are dynamically updated
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
onAlignSelect(value) {
|
|
50
|
-
if (this.selectedElement) {
|
|
51
|
-
this.selectedElement.textAlign = value;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
onStyleSelect(value) {
|
|
55
|
-
if (!this.selectedElement)
|
|
56
|
-
return;
|
|
57
|
-
// Initialize styles array if it doesn't exist
|
|
58
|
-
this.selectedElement.styles = this.selectedElement.styles || [];
|
|
59
|
-
// Ensure only one style is selected at a time
|
|
60
|
-
this.selectedElement.styles = [value];
|
|
61
|
-
}
|
|
62
|
-
isStyleActive(value) {
|
|
63
|
-
return this.selectedElement?.styles?.includes(value) || false;
|
|
64
|
-
}
|
|
22
|
+
selectColumn;
|
|
65
23
|
elementProperties = {
|
|
66
24
|
// AP-10MAR25 - Defines the Header element with a text input field
|
|
67
25
|
'Header': {
|
|
@@ -185,9 +143,17 @@ export class PropertiesComponent {
|
|
|
185
143
|
},
|
|
186
144
|
"Table": {
|
|
187
145
|
"elementProps": [
|
|
188
|
-
{ "label": "tableName", "placeholder": "Employee Details", "type": "text", "key": "
|
|
146
|
+
{ "label": "tableName", "placeholder": "Employee Details", "type": "text", "key": "questionText" },
|
|
189
147
|
{ "label": "inputTextAlignment", "placeholder": "Left", "type": "text", "key": "inputTextAlignment" },
|
|
190
148
|
{ "label": "tableScaleSize", "placeholder": "06 - Full Scale", "type": "text", "key": "tableScaleSize" },
|
|
149
|
+
{ "label": "isNosIndicator", "placeholder": "06 - Full Scale", "type": "checkbox", "key": "fieldsMeta.0.tableConfig.isNosIndicator" },
|
|
150
|
+
{ "label": "isPagination", "placeholder": "06 - Full Scale", "type": "checkbox", "key": "fieldsMeta.0.tableConfig.isPagination" },
|
|
151
|
+
{ "label": "addInlineRecord", "placeholder": "06 - Full Scale", "type": "checkbox", "key": "fieldsMeta.0.tableConfig.addInlineRecord" },
|
|
152
|
+
{ "label": "actionButton", "placeholder": "06 - Full Scale", "type": "checkbox", "key": "fieldsMeta.0.tableConfig.actionButton" },
|
|
153
|
+
{ "label": "searchBar", "placeholder": "06 - Full Scale", "type": "checkbox", "key": "fieldsMeta.0.tableConfig.searchBar" },
|
|
154
|
+
{ "label": "isDeleteRow", "placeholder": "06 - Full Scale", "type": "checkbox", "key": "fieldsMeta.0.tableConfig.isDeleteRow" },
|
|
155
|
+
{ "label": "isEditRow", "placeholder": "06 - Full Scale", "type": "checkbox", "key": "fieldsMeta.0.tableConfig.isEditRow" },
|
|
156
|
+
{ "label": "isButtons", "placeholder": "06 - Full Scale", "type": "checkbox", "key": "fieldsMeta.0.tableConfig.isButtons" },
|
|
191
157
|
{ "label": "rowChoice", "placeholder": "", "type": "text", "key": "rowChoice" },
|
|
192
158
|
{
|
|
193
159
|
"label": "quickActionTools",
|
|
@@ -199,6 +165,8 @@ export class PropertiesComponent {
|
|
|
199
165
|
{ "label": "delete", "type": "toggle", "key": "delete" }
|
|
200
166
|
]
|
|
201
167
|
},
|
|
168
|
+
{ label: 'Order', type: 'number', key: 'questionNumber' },
|
|
169
|
+
{ label: 'Field Size', type: 'fieldSize', key: 'size' },
|
|
202
170
|
{ "label": "addRecordEvent", "type": "toggle", "key": "addRecordEvent" },
|
|
203
171
|
{
|
|
204
172
|
"label": "tableScrollEventChoice",
|
|
@@ -221,7 +189,8 @@ export class PropertiesComponent {
|
|
|
221
189
|
{ "label": "masking", "type": "toggle", "key": "masking" },
|
|
222
190
|
{ "label": "helpText", "placeholder": "Enter help message here", "type": "text", "key": "helpText" },
|
|
223
191
|
{ "label": "defaultValue", "placeholder": "Default Value", "type": "text", "key": "defaultValue" },
|
|
224
|
-
{
|
|
192
|
+
{ label: 'Sub Text', placeholder: 'Enter Text', type: 'text', key: 'subText' },
|
|
193
|
+
{ label: 'Reference', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },
|
|
225
194
|
{ "label": "controllingElements", "type": "toggle", "key": "controllingElements" },
|
|
226
195
|
{ "label": "isDependence", "type": "toggle", "key": "isDependence" },
|
|
227
196
|
{ "label": "newLine", "type": "toggle", "key": "newLine" }
|
|
@@ -240,7 +209,8 @@ export class PropertiesComponent {
|
|
|
240
209
|
},
|
|
241
210
|
"TableColumn": {
|
|
242
211
|
"elementProps": [
|
|
243
|
-
{ "label": "
|
|
212
|
+
{ "label": "headerLabels", "placeholder": "Employee Details", "type": "text", "targetArray": "fieldsMeta", "targetArrayKey": "apiName", "key": "label" },
|
|
213
|
+
{ "label": "apiName", "placeholder": "Employee Details", "type": "text", "targetArray": "fieldsMeta", "targetArrayKey": "apiName", "key": "apiName" },
|
|
244
214
|
{ "label": "inputTextAlignment", "placeholder": "Left", "type": "text", "key": "inputTextAlignment" },
|
|
245
215
|
{ "label": "tableScaleSize", "placeholder": "06 - Full Scale", "type": "text", "key": "tableScaleSize" },
|
|
246
216
|
{ "label": "rowChoice", "placeholder": "", "type": "text", "key": "rowChoice" },
|
|
@@ -504,6 +474,15 @@ export class PropertiesComponent {
|
|
|
504
474
|
const elements = this.formBuilderService.getElements();
|
|
505
475
|
this.selectedElement = elements[index];
|
|
506
476
|
}
|
|
477
|
+
if (this.selectedElement?.type === 'Table') {
|
|
478
|
+
this.selectedElement['fieldsMeta'] = typeof this.selectedElement.fieldsMeta === 'object' ? this.selectedElement.fieldsMeta : JSON.parse(this.selectedElement['fieldsMeta'] || [{}]);
|
|
479
|
+
this.selectColumn = this.formBuilderService.getSelectTableColumn();
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
this.selectColumn = null;
|
|
483
|
+
}
|
|
484
|
+
this.activeTab = 'attributes';
|
|
485
|
+
this.getProperties();
|
|
507
486
|
});
|
|
508
487
|
}
|
|
509
488
|
//AP-10MAR25 Updates the title using the form builder service
|
|
@@ -523,18 +502,21 @@ export class PropertiesComponent {
|
|
|
523
502
|
}
|
|
524
503
|
updateProperty(key, value) {
|
|
525
504
|
if (this.selectedElementIndex >= 0) {
|
|
505
|
+
if (this.selectedElement.type === 'Table') {
|
|
506
|
+
this.setValueByPath(key, value);
|
|
507
|
+
}
|
|
526
508
|
if (key === 'questionText' || key === 'question') {
|
|
527
509
|
if (!this.validateInput(value, key)) {
|
|
528
510
|
return;
|
|
529
511
|
}
|
|
530
512
|
}
|
|
531
|
-
if (key === '
|
|
513
|
+
if (key === 'questionNumber') {
|
|
532
514
|
//AP-10MAR25 Convert the value to an integer
|
|
533
515
|
const newOrder = parseInt(value, 10);
|
|
534
516
|
if (isNaN(newOrder))
|
|
535
517
|
return;
|
|
536
518
|
//AP-10MAR25 Update the element's order in the form builder service
|
|
537
|
-
this.formBuilderService.updateElement(this.selectedElementIndex, {
|
|
519
|
+
this.formBuilderService.updateElement(this.selectedElementIndex, { questionNumber: newOrder });
|
|
538
520
|
//AP-10MAR25 Sort elements based on the updated order
|
|
539
521
|
this.formBuilderService.sortElementsByOrder();
|
|
540
522
|
}
|
|
@@ -586,6 +568,11 @@ export class PropertiesComponent {
|
|
|
586
568
|
if (this.selectedElement?.type === 'Header') {
|
|
587
569
|
return this.elementProperties['Header'];
|
|
588
570
|
}
|
|
571
|
+
if (this.selectedElement?.type === 'Table') {
|
|
572
|
+
if (this.selectColumn !== undefined && this.selectColumn !== null) {
|
|
573
|
+
return this.elementProperties['TableColumn'];
|
|
574
|
+
}
|
|
575
|
+
}
|
|
589
576
|
return this.elementProperties[this.selectedElement?.type];
|
|
590
577
|
}
|
|
591
578
|
addOption(options) {
|
|
@@ -594,21 +581,150 @@ export class PropertiesComponent {
|
|
|
594
581
|
removeOption(options, index) {
|
|
595
582
|
options.splice(index, 1);
|
|
596
583
|
}
|
|
597
|
-
// download() {
|
|
598
|
-
// console.log('Question Book:', this.formBuilderService.downloadElement());
|
|
599
|
-
// }
|
|
600
584
|
handleButtonClick() {
|
|
601
585
|
this.formButtonHandler.emit(this.formBuilderService.downloadElement());
|
|
602
586
|
}
|
|
587
|
+
// SKS13MAR25 active tab select
|
|
588
|
+
setActiveTab(tab) {
|
|
589
|
+
this.activeTab = tab;
|
|
590
|
+
}
|
|
591
|
+
// SKS13MAR25 table property save
|
|
592
|
+
onSave() {
|
|
593
|
+
console.log('Saving data:');
|
|
594
|
+
}
|
|
595
|
+
// SKS13MAR25 table property reset
|
|
596
|
+
onCancel() {
|
|
597
|
+
console.log('Operation cancelled');
|
|
598
|
+
}
|
|
599
|
+
// onToggleChange(key: string, event: Event) {
|
|
600
|
+
// const checked = (event.target as HTMLInputElement).checked;
|
|
601
|
+
// this.selectedElement = { ...this.selectedElement, [key]: checked };
|
|
602
|
+
// this.updateProperty(key, checked); //AP-06MAR25 Bug Fixed
|
|
603
|
+
// }
|
|
604
|
+
updateProperties(elementType) {
|
|
605
|
+
// Reset alignment and styles if switching elements
|
|
606
|
+
this.selectedAlign = 'align-left';
|
|
607
|
+
this.selectedStyles = [];
|
|
608
|
+
// Fetch the properties of the selected element type
|
|
609
|
+
const properties = this.getProperties();
|
|
610
|
+
if (properties) {
|
|
611
|
+
// Make sure the properties are dynamically updated
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
onAlignSelect(value) {
|
|
615
|
+
if (this.selectedElement) {
|
|
616
|
+
this.selectedElement.textAlign = value;
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
onStyleSelect(value) {
|
|
620
|
+
if (!this.selectedElement)
|
|
621
|
+
return;
|
|
622
|
+
// Initialize styles array if it doesn't exist
|
|
623
|
+
this.selectedElement.styles = this.selectedElement.styles || [];
|
|
624
|
+
// Ensure only one style is selected at a time
|
|
625
|
+
this.selectedElement.styles = [value];
|
|
626
|
+
}
|
|
627
|
+
isStyleActive(value) {
|
|
628
|
+
return this.selectedElement?.styles?.includes(value) || false;
|
|
629
|
+
}
|
|
630
|
+
getValueByPath(path) {
|
|
631
|
+
if (this.selectedElement?.type === 'Table') {
|
|
632
|
+
this.selectedElement['fieldsMeta'] = typeof this.selectedElement?.fieldsMeta === 'object' ? this.selectedElement?.fieldsMeta : JSON.parse(this.selectedElement['fieldsMeta'] || [{}]);
|
|
633
|
+
}
|
|
634
|
+
return path.split('.').reduce((obj, key) => obj?.[key] ?? true, this.selectedElement);
|
|
635
|
+
}
|
|
636
|
+
onToggleChange(path, event) {
|
|
637
|
+
const checked = event.target.checked;
|
|
638
|
+
this.setValueByPath(path, checked);
|
|
639
|
+
console.log("data change");
|
|
640
|
+
this.updateElement(this.selectedElement);
|
|
641
|
+
}
|
|
642
|
+
setValueByPath(path, value) {
|
|
643
|
+
const keys = path.split('.');
|
|
644
|
+
let obj = this.selectedElement;
|
|
645
|
+
if (this.selectedElement?.type === 'Table') {
|
|
646
|
+
this.selectedElement['fieldsMeta'] = typeof this.selectedElement?.fieldsMeta === 'object' ? this.selectedElement?.fieldsMeta : JSON.parse(this.selectedElement['fieldsMeta'] || [{}]);
|
|
647
|
+
}
|
|
648
|
+
keys.forEach((key, index) => {
|
|
649
|
+
if (!obj[key]) {
|
|
650
|
+
// Check if the next key is a number (array index)
|
|
651
|
+
const nextKey = keys[index + 1];
|
|
652
|
+
obj[key] = isNaN(Number(nextKey)) ? {} : [];
|
|
653
|
+
}
|
|
654
|
+
if (index === keys.length - 1) {
|
|
655
|
+
obj[key] = value; // Assign value to last key
|
|
656
|
+
}
|
|
657
|
+
else {
|
|
658
|
+
obj = obj[key]; // Move deeper
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
// SKS19MAR25 update element in servies
|
|
663
|
+
updateElement(element) {
|
|
664
|
+
this.formBuilderService.elementUpdate(this.selectedElementIndex, element);
|
|
665
|
+
this.formBuilderService.setSelectedTableElement(this.selectedElementIndex, { column: this.selectColumn });
|
|
666
|
+
}
|
|
667
|
+
// SKS19MAR25 get value from array
|
|
668
|
+
getValueByArrayPath(targetArrayPath, targetArrayKey, selectColumn, keyPath) {
|
|
669
|
+
if (this.selectedElement?.type === 'Table') {
|
|
670
|
+
this.selectedElement['fieldsMeta'] = typeof this.selectedElement?.fieldsMeta === 'object' ? this.selectedElement?.fieldsMeta : JSON.parse(this.selectedElement['fieldsMeta'] || [{}]);
|
|
671
|
+
}
|
|
672
|
+
const targetArray = this.getDataByPath(targetArrayPath);
|
|
673
|
+
if (!Array.isArray(targetArray))
|
|
674
|
+
return undefined;
|
|
675
|
+
const foundItem = targetArray.find(item => item[targetArrayKey] === selectColumn);
|
|
676
|
+
return foundItem ? keyPath.split('.').reduce((obj, key) => obj?.[key], foundItem) : undefined;
|
|
677
|
+
}
|
|
678
|
+
//SKS19MAR25 Function to update a value in an array dynamically
|
|
679
|
+
updateValueByArrayPath(targetArrayPath, targetArrayKey, selectColumn, keyPath, event) {
|
|
680
|
+
if (this.selectedElement?.type === 'Table') {
|
|
681
|
+
this.selectedElement['fieldsMeta'] = typeof this.selectedElement?.fieldsMeta === 'object' ? this.selectedElement?.fieldsMeta : JSON.parse(this.selectedElement['fieldsMeta'] || [{}]);
|
|
682
|
+
}
|
|
683
|
+
const targetArray = this.getDataByPath(targetArrayPath);
|
|
684
|
+
console.log("targetArray", targetArray, "targetArrayKey", targetArrayKey, "selectColumn", selectColumn, "keyPath", keyPath, "event", event);
|
|
685
|
+
if (!Array.isArray(targetArray))
|
|
686
|
+
return;
|
|
687
|
+
// Find the object that matches selectColumn
|
|
688
|
+
let foundItem = targetArray.find(item => item[targetArrayKey] === selectColumn);
|
|
689
|
+
// If the item does not exist, create and add it
|
|
690
|
+
if (!foundItem) {
|
|
691
|
+
foundItem = { [targetArrayKey]: selectColumn }; // Ensure the key exists
|
|
692
|
+
targetArray.push(foundItem);
|
|
693
|
+
}
|
|
694
|
+
// Traverse and set the value
|
|
695
|
+
const keys = keyPath.split('.');
|
|
696
|
+
let obj = foundItem;
|
|
697
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
698
|
+
const key = keys[i];
|
|
699
|
+
if (!obj[key])
|
|
700
|
+
obj[key] = {}; // Initialize missing objects
|
|
701
|
+
obj = obj[key];
|
|
702
|
+
}
|
|
703
|
+
// Assign the value based on input type
|
|
704
|
+
const lastKey = keys[keys.length - 1];
|
|
705
|
+
const inputElement = event.target;
|
|
706
|
+
obj[lastKey] = inputElement.type === 'checkbox' ? inputElement.checked : inputElement.value;
|
|
707
|
+
if (keyPath === 'apiName') {
|
|
708
|
+
this.selectColumn = inputElement.value;
|
|
709
|
+
}
|
|
710
|
+
console.log("break 1");
|
|
711
|
+
this.updateElement(this.selectedElement);
|
|
712
|
+
}
|
|
713
|
+
getDataByPath(path) {
|
|
714
|
+
if (this.selectedElement?.type === 'Table') {
|
|
715
|
+
this.selectedElement['fieldsMeta'] = typeof this.selectedElement?.fieldsMeta === 'object' ? this.selectedElement?.fieldsMeta : JSON.parse(this.selectedElement['fieldsMeta'] || [{}]);
|
|
716
|
+
}
|
|
717
|
+
return path.split('.').reduce((obj, key) => obj?.[key], this.selectedElement);
|
|
718
|
+
}
|
|
603
719
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PropertiesComponent, deps: [{ token: i1.HttpClient }, { token: i2.FormBuilderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
604
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PropertiesComponent, selector: "app-properties", inputs: { selectedElementType: "selectedElementType" }, outputs: { formButtonHandler: "formButtonHandler" }, ngImport: i0, template: "<!-- AP 22JAN25 - Field and Element Properties -->\n<div class=\"container\">\n <div class=\"tabs\">\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'attributes'}\" (click)=\"setActiveTab('attributes')\">\n Attributes\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'property'}\" (click)=\"setActiveTab('property')\">\n Property\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'appearance'}\" (click)=\"setActiveTab('appearance')\">\n Appearance\n </div>\n </div>\n <!-- <div *ngIf=\"errorMessage\" class=\"error-message\">{{ errorMessage }}</div> -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'attributes'\">\n <!-- Element Properrties -->\n <!-- AP-06MAR25 Select element type show -->\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Text Input -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"headerSelect ? book.records[0].title : selectedElement[prop.key]\"\n (input)=\"headerSelect ? updateTitle($event.target.value) : updateProperty(prop.key, $event.target.value)\"\n [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n <!-- help text -->\n <div *ngIf=\"prop.key === 'helpText' && selectedElement.helpText\">{{\n selectedElement.helpText }}</div>\n\n <!-- Font Selection -->\n <div *ngIf=\"prop.key === 'font'\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'font'\" class=\"select-container\"\n [value]=\"selectedElement?.font\" (change)=\"updateProperty('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\"> {{ option }} </option>\n </select>\n </div>\n <!-- order -->\n <input *ngIf=\"prop.key === 'order'\" type=\"number\" [value]=\"selectedElement.order\"\n (input)=\"updateProperty('order', $event.target.value)\" />\n\n <!-- file -->\n <!-- Add this inside the elementProps loop where other inputs are rendered -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\" [value]=\"selectedElement[prop.key]\"\n (change)=\"updateProperty(prop.key, $event.target.value)\">\n <option value=\"\">Select file category</option>\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n\n <!-- Font Weight Selection -->\n <div *ngIf=\"prop.key === 'fontWeight'\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'fontWeight'\" [value]=\"selectedElement?.fontWeight\"\n (change)=\"updateProperty('fontWeight', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n </div>\n\n <!-- Toggle Group -->\n <div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n <div class=\"toggle-item\">\n <span class=\"toggle-label\">Read Only</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isReadOnly\"\n (change)=\"onToggleChange('isReadOnly', $event)\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n\n <div class=\"toggle-item\">\n <span class=\"toggle-label\">Is Hide</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isHidden\"\n (change)=\"onToggleChange('isHidden', $event)\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n </div>\n\n <!-- Text Align Buttons -->\n <div *ngIf=\"prop.type === 'align'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\"\n [class.active]=\"selectedElement?.textAlign === option.value\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <div *ngIf=\"prop.type === 'style'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <!-- Field Size Controls -->\n <!-- AP 25FEB25 - Change key size -->\n <div *ngIf=\"prop.key === 'size'\">\n <label class=\"size-label\">Width</label>\n <input type=\"number\" [value]=\"selectedElement?.size\" (input)=\"updateProperty('size', $event.target.value)\"\n class=\"size-input\" />\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'property'\">\n <!-- Field Elements Properties -->\n <!-- AP-06MAR25 Show elements ID -->\n <div *ngIf=\"getProperties()\">\n <div style=\"font-size: 13px; padding:5px;border-radius:3px;background-color:#eff8ff;\"> id : {{ headerSelect ?\n bookId : selectedElement.id}}</div>\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"updateProperty(prop.key, $event.target.value)\" />\n\n <!-- Radio Group -->\n <div *ngIf=\"prop.type === 'radio'\">\n <div class=\"sizes\">\n <div class=\"flex-gap\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement?.isRequired\" (change)=\"onRequiredChange(true)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement?.isRequired\" (change)=\"onRequiredChange(false)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AP 25FEB25 - handled options -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].value\" placeholder=\"Option {{ i + 1 }}\"\n class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'appearance'\">\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().appearance\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"updateProperty(prop.key, $event.target.value)\" />\n\n <!-- Radio Group -->\n <div *ngIf=\"prop.type === 'radio'\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement?.isRequired\" (change)=\"onRequiredChange(true)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement?.isRequired\" (change)=\"onRequiredChange(false)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n\n <!-- AP 25FEB25 - handled options -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].value\" placeholder=\"Option {{ i + 1 }}\"\n class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-container\">\n <button class=\"cancel-btn\" (click)=\"onCancel()\">Cancel</button>\n <button class=\"save-btn\" (click)=\"onSave()\">Save</button>\n </div>\n</div>", styles: ["@import\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\";*{margin:0;padding:0;box-sizing:border-box;font-family:Roboto,sans-serif}.properties{height:100vh;overflow-y:auto}.design-header{display:flex;justify-content:center;align-items:center;padding:15px 20px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a;margin-bottom:20px}.header-title{font-size:20px;font-weight:400;color:#222}.all-properties details{background:#fff;border:1px solid #ddd;border-radius:8px;margin-bottom:12px;padding:12px;box-shadow:0 2px 8px #0000000d}.all-properties summary{font-size:15px;font-weight:400;cursor:pointer;padding:6px;transition:color .3s}.all-properties summary:hover{color:#007bff}.inner-content{padding:12px 0}label{font-size:14px;font-weight:500;color:#444;margin-bottom:5px;display:block}input[type=text],input[type=number],select{width:100%;height:40px;padding:10px;font-size:14px;border:1px solid #ccc;border-radius:6px;outline:none;transition:.3s;background:#f8f8f8}input:focus,select:focus{border-color:#007bff;background:#fff;box-shadow:0 0 5px #007bff4d}button{padding:10px 15px;border:none;border-radius:6px;background:#007bff;color:#fff;font-size:15px;cursor:pointer;transition:.3s}button:hover{background:#0056b3;transform:translateY(-2px)}.toggle-group{display:flex;align-items:center;gap:20px}.toggle-item{display:flex;align-items:center;gap:10px}.switch{position:relative;width:42px;height:22px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:20px;width:20px;left:1px;bottom:1px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(18px)}.radio-item{display:flex;align-items:center;gap:20px}.radio-item input{accent-color:#007bff}.options-container{display:flex;flex-direction:column;gap:12px}.options{width:100%}.field-size-controls{display:flex;align-items:center;gap:12px}.size-input{width:110px;text-align:center}.design-footer{display:flex;justify-content:space-between;margin-top:20px}.design-footer .btn{background:#007bff;color:#fff;padding:10px 18px;border-radius:6px;font-size:15px;transition:.3s}.design-footer .btn:hover{background:#0056b3}.input-container{display:flex;flex-direction:column;align-items:flex-start;gap:10px;width:100%}.subtext-textarea{width:100%;margin-left:auto}@media (max-width: 768px){.properties{max-width:100%;padding:12px}.design-header{flex-direction:column;align-items:flex-start;padding:15px}.toggle-group{flex-direction:column;gap:12px}.field-size-controls{flex-direction:column}.design-footer{flex-direction:column;gap:12px;align-items:center}}.container{width:100%;max-width:500px;margin:0 auto;background-color:#fff;box-shadow:0 2px 10px #0000001a;overflow:hidden;font-family:Arial,sans-serif}.tabs{display:flex;background-color:#f0f2f5;border-bottom:2px solid #0052cc}.tab{flex:1;padding:15px 10px;text-align:center;cursor:pointer}.tab.active{background-color:#0052cc;color:#fff;font-weight:700}.tab-content{padding:20px;max-height:80vh;overflow-y:auto;overflow-x:hidden}.form-group{margin-bottom:15px}label{display:block;margin-bottom:8px;color:#666;font-size:14px}.required:before{content:\"*\";color:red;margin-right:3px}input[type=text],select{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box;font-size:14px}.select-container{position:relative;width:100%}.dropdown-arrow{position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none;color:#666;font-size:12px}.checkbox-row{display:flex;margin-bottom:10px}.checkbox-group{display:flex;align-items:center;margin-right:20px;min-width:120px}.checkbox-group input[type=checkbox]{margin-right:5px}.icon{display:inline-block;width:18px;height:18px;border-radius:50%;text-align:center;line-height:18px;color:#fff;font-size:12px;margin-left:5px}.edit-icon{background-color:#4caf50}.view-icon{background-color:#2196f3}.delete-icon{background-color:#f44336}.color-picker-row{display:flex;align-items:center}.color-picker-container{display:flex;align-items:center;border:1px solid #ddd;border-radius:4px;margin-right:10px}.color-box{width:30px;border:none;height:30px}.hex-label{color:#999;margin-right:5px}.hex-input{width:100px}.divider{border-top:1px dashed #ddd;margin:20px 0}.button-container{display:flex;padding:15px;background-color:#f9f9f9;border-top:1px solid #eee}.cancel-btn,.save-btn{padding:12px;border:none;border-radius:4px;cursor:pointer;font-weight:700}.cancel-btn{flex:1;background-color:#fff;color:#666;border:1px solid #ddd;margin-right:10px}.save-btn{flex:1;background-color:#0052cc;color:#fff}input[type=checkbox],input[type=radio]{width:unset!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
720
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PropertiesComponent, selector: "app-properties", inputs: { selectedElementType: "selectedElementType" }, outputs: { formButtonHandler: "formButtonHandler" }, ngImport: i0, template: "<!-- AP 22JAN25 - Field and Element Properties -->\n<div class=\"container\">\n <div class=\"tabs\">\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'attributes'}\" (click)=\"setActiveTab('attributes')\">\n Attributes\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'property'}\" (click)=\"setActiveTab('property')\">\n Property\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'appearance'}\" (click)=\"setActiveTab('appearance')\">\n Appearance\n </div>\n </div>\n <!-- <div *ngIf=\"errorMessage\" class=\"error-message\">{{ errorMessage }}</div> -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'attributes'\">\n <!-- Element Properrties -->\n <!-- AP-06MAR25 Select element type show -->\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"form-group\">\n <label *ngIf=\"prop.type !== 'checkbox'\" class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Text Input -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"headerSelect ? book.records[0].title : (selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : selectedElement[prop.key])\"\n (input)=\"headerSelect ? updateTitle($event.target.value) : (selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : getValueByPath(prop.key) ) : updateProperty(prop.key, $event.target.value))\"\n [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n <!-- help text -->\n <div *ngIf=\"prop.key === 'helpText' && selectedElement.helpText\">{{\n selectedElement.helpText }}</div>\n\n <!-- Font Selection -->\n <div *ngIf=\"prop.key === 'font'\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'font'\" class=\"select-container\"\n [value]=\"selectedElement?.font\" (change)=\"updateProperty('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\"> {{ option }} </option>\n </select>\n </div>\n <!-- questionNumber -->\n <input *ngIf=\"prop.key === 'questionNumber'\" type=\"number\" [value]=\"selectedElement.questionNumber\"\n (input)=\"updateProperty('questionNumber', $event.target.value)\" />\n\n <!-- file -->\n <!-- Add this inside the elementProps loop where other inputs are rendered -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\" [value]=\"selectedElement[prop.key]\"\n (change)=\"updateProperty(prop.key, $event.target.value)\">\n <option value=\"\">Select file category</option>\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n\n <!-- Font Weight Selection -->\n <div *ngIf=\"prop.key === 'fontWeight'\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'fontWeight'\" [value]=\"selectedElement?.fontWeight\"\n (change)=\"updateProperty('fontWeight', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n </div>\n\n <div *ngIf=\"prop.type === 'checkbox'\">\n <span class=\"toggle-label\" style=\"padding-right: 10px;\">{{ prop.label }}</span>\n <input \n type=\"checkbox\" \n [checked]=\"getValueByPath(prop.key)\" \n (change)=\"onToggleChange(prop.key, $event)\" />\n </div>\n\n <!-- Toggle Group -->\n <div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n <div class=\"toggle-item\">\n <span class=\"toggle-label\">Read Only</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isReadOnly\"\n (change)=\"onToggleChange('isReadOnly', $event)\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n\n <div class=\"toggle-item\">\n <span class=\"toggle-label\">Is Hide</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isHidden\"\n (change)=\"onToggleChange('isHidden', $event)\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n </div>\n\n <!-- Text Align Buttons -->\n <div *ngIf=\"prop.type === 'align'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\"\n [class.active]=\"selectedElement?.textAlign === option.value\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <div *ngIf=\"prop.type === 'style'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <!-- Field Size Controls -->\n <!-- AP 25FEB25 - Change key size -->\n <div *ngIf=\"prop.key === 'size'\">\n <label class=\"size-label\">Width</label>\n <input type=\"number\" [value]=\"selectedElement?.size\" (input)=\"updateProperty('size', $event.target.value)\"\n class=\"size-input\" />\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'property'\">\n <!-- Field Elements Properties -->\n <!-- AP-06MAR25 Show elements ID -->\n <div *ngIf=\"getProperties()\">\n <div style=\"font-size: 13px; padding:5px;border-radius:3px;background-color:#eff8ff;\"> id : {{ headerSelect ?\n bookId : selectedElement.id}}</div>\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"updateProperty(prop.key, $event.target.value)\" />\n\n <!-- Radio Group -->\n <div *ngIf=\"prop.type === 'radio'\">\n <div class=\"sizes\">\n <div class=\"flex-gap\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement?.isRequired\" (change)=\"onRequiredChange(true)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement?.isRequired\" (change)=\"onRequiredChange(false)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AP 25FEB25 - handled options -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].value\" placeholder=\"Option {{ i + 1 }}\"\n class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'appearance'\">\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().appearance\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"updateProperty(prop.key, $event.target.value)\" />\n\n <!-- Radio Group -->\n <div *ngIf=\"prop.type === 'radio'\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement?.isRequired\" (change)=\"onRequiredChange(true)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement?.isRequired\" (change)=\"onRequiredChange(false)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n\n <!-- AP 25FEB25 - handled options -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].value\" placeholder=\"Option {{ i + 1 }}\"\n class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-container\">\n <button class=\"cancel-btn\" (click)=\"onCancel()\">Cancel</button>\n <button class=\"save-btn\" (click)=\"handleButtonClick()\">Save</button>\n </div>\n</div>", styles: ["@import\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\";*{margin:0;padding:0;box-sizing:border-box;font-family:Roboto,sans-serif}.properties{height:100vh;overflow-y:auto}.design-header{display:flex;justify-content:center;align-items:center;padding:15px 20px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a;margin-bottom:20px}.header-title{font-size:20px;font-weight:400;color:#222}.all-properties details{background:#fff;border:1px solid #ddd;border-radius:8px;margin-bottom:12px;padding:12px;box-shadow:0 2px 8px #0000000d}.all-properties summary{font-size:15px;font-weight:400;cursor:pointer;padding:6px;transition:color .3s}.all-properties summary:hover{color:#007bff}.inner-content{padding:12px 0}label{font-size:14px;font-weight:500;color:#444;margin-bottom:5px;display:block}input[type=text],input[type=number],select{width:100%;height:40px;padding:10px;font-size:14px;border:1px solid #ccc;border-radius:6px;outline:none;transition:.3s;background:#f8f8f8}input:focus,select:focus{border-color:#007bff;background:#fff;box-shadow:0 0 5px #007bff4d}button{padding:10px 15px;border:none;border-radius:6px;background:#007bff;color:#fff;font-size:15px;cursor:pointer;transition:.3s}button:hover{background:#0056b3;transform:translateY(-2px)}.toggle-group{display:flex;align-items:center;gap:20px}.toggle-item{display:flex;align-items:center;gap:10px}.switch{position:relative;width:42px;height:22px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:20px;width:20px;left:1px;bottom:1px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(18px)}.radio-item{display:flex;align-items:center;gap:20px}.radio-item input{accent-color:#007bff}.options-container{display:flex;flex-direction:column;gap:12px}.options{width:100%}.field-size-controls{display:flex;align-items:center;gap:12px}.size-input{width:110px;text-align:center}.design-footer{display:flex;justify-content:space-between;margin-top:20px}.design-footer .btn{background:#007bff;color:#fff;padding:10px 18px;border-radius:6px;font-size:15px;transition:.3s}.design-footer .btn:hover{background:#0056b3}.input-container{display:flex;flex-direction:column;align-items:flex-start;gap:10px;width:100%}.subtext-textarea{width:100%;margin-left:auto}@media (max-width: 768px){.properties{max-width:100%;padding:12px}.design-header{flex-direction:column;align-items:flex-start;padding:15px}.toggle-group{flex-direction:column;gap:12px}.field-size-controls{flex-direction:column}.design-footer{flex-direction:column;gap:12px;align-items:center}}.container{width:100%;max-width:500px;margin:0 auto;background-color:#fff;box-shadow:0 2px 10px #0000001a;overflow:hidden;font-family:Arial,sans-serif}.tabs{display:flex;background-color:#f0f2f5;border-bottom:2px solid #0052cc}.tab{flex:1;padding:15px 10px;text-align:center;cursor:pointer}.tab.active{background-color:#0052cc;color:#fff;font-weight:700}.tab-content{padding:20px;max-height:80vh;overflow-y:auto;overflow-x:hidden}.form-group{margin-bottom:15px}label{display:block;margin-bottom:8px;color:#666;font-size:14px}.required:before{content:\"*\";color:red;margin-right:3px}input[type=text],select{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box;font-size:14px}.select-container{position:relative;width:100%}.dropdown-arrow{position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none;color:#666;font-size:12px}.checkbox-row{display:flex;margin-bottom:10px}.checkbox-group{display:flex;align-items:center;margin-right:20px;min-width:120px}.checkbox-group input[type=checkbox]{margin-right:5px}.icon{display:inline-block;width:18px;height:18px;border-radius:50%;text-align:center;line-height:18px;color:#fff;font-size:12px;margin-left:5px}.edit-icon{background-color:#4caf50}.view-icon{background-color:#2196f3}.delete-icon{background-color:#f44336}.color-picker-row{display:flex;align-items:center}.color-picker-container{display:flex;align-items:center;border:1px solid #ddd;border-radius:4px;margin-right:10px}.color-box{width:30px;border:none;height:30px}.hex-label{color:#999;margin-right:5px}.hex-input{width:100px}.divider{border-top:1px dashed #ddd;margin:20px 0}.button-container{display:flex;padding:15px;background-color:#f9f9f9;border-top:1px solid #eee}.cancel-btn,.save-btn{padding:12px;border:none;border-radius:4px;cursor:pointer;font-weight:700}.cancel-btn{flex:1;background-color:#fff;color:#666;border:1px solid #ddd;margin-right:10px}.save-btn{flex:1;background-color:#0052cc;color:#fff}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
605
721
|
}
|
|
606
722
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PropertiesComponent, decorators: [{
|
|
607
723
|
type: Component,
|
|
608
|
-
args: [{ selector: 'app-properties', template: "<!-- AP 22JAN25 - Field and Element Properties -->\n<div class=\"container\">\n <div class=\"tabs\">\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'attributes'}\" (click)=\"setActiveTab('attributes')\">\n Attributes\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'property'}\" (click)=\"setActiveTab('property')\">\n Property\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'appearance'}\" (click)=\"setActiveTab('appearance')\">\n Appearance\n </div>\n </div>\n <!-- <div *ngIf=\"errorMessage\" class=\"error-message\">{{ errorMessage }}</div> -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'attributes'\">\n <!-- Element Properrties -->\n <!-- AP-06MAR25 Select element type show -->\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Text Input -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"headerSelect ? book.records[0].title : selectedElement[prop.key]\"\n (input)=\"headerSelect ? updateTitle($event.target.value) : updateProperty(prop.key, $event.target.value)\"\n [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n <!-- help text -->\n <div *ngIf=\"prop.key === 'helpText' && selectedElement.helpText\">{{\n selectedElement.helpText }}</div>\n\n <!-- Font Selection -->\n <div *ngIf=\"prop.key === 'font'\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'font'\" class=\"select-container\"\n [value]=\"selectedElement?.font\" (change)=\"updateProperty('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\"> {{ option }} </option>\n </select>\n </div>\n <!-- order -->\n <input *ngIf=\"prop.key === 'order'\" type=\"number\" [value]=\"selectedElement.order\"\n (input)=\"updateProperty('order', $event.target.value)\" />\n\n <!-- file -->\n <!-- Add this inside the elementProps loop where other inputs are rendered -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\" [value]=\"selectedElement[prop.key]\"\n (change)=\"updateProperty(prop.key, $event.target.value)\">\n <option value=\"\">Select file category</option>\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n\n <!-- Font Weight Selection -->\n <div *ngIf=\"prop.key === 'fontWeight'\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'fontWeight'\" [value]=\"selectedElement?.fontWeight\"\n (change)=\"updateProperty('fontWeight', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n </div>\n\n <!-- Toggle Group -->\n <div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n <div class=\"toggle-item\">\n <span class=\"toggle-label\">Read Only</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isReadOnly\"\n (change)=\"onToggleChange('isReadOnly', $event)\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n\n <div class=\"toggle-item\">\n <span class=\"toggle-label\">Is Hide</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isHidden\"\n (change)=\"onToggleChange('isHidden', $event)\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n </div>\n\n <!-- Text Align Buttons -->\n <div *ngIf=\"prop.type === 'align'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\"\n [class.active]=\"selectedElement?.textAlign === option.value\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <div *ngIf=\"prop.type === 'style'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <!-- Field Size Controls -->\n <!-- AP 25FEB25 - Change key size -->\n <div *ngIf=\"prop.key === 'size'\">\n <label class=\"size-label\">Width</label>\n <input type=\"number\" [value]=\"selectedElement?.size\" (input)=\"updateProperty('size', $event.target.value)\"\n class=\"size-input\" />\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'property'\">\n <!-- Field Elements Properties -->\n <!-- AP-06MAR25 Show elements ID -->\n <div *ngIf=\"getProperties()\">\n <div style=\"font-size: 13px; padding:5px;border-radius:3px;background-color:#eff8ff;\"> id : {{ headerSelect ?\n bookId : selectedElement.id}}</div>\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"updateProperty(prop.key, $event.target.value)\" />\n\n <!-- Radio Group -->\n <div *ngIf=\"prop.type === 'radio'\">\n <div class=\"sizes\">\n <div class=\"flex-gap\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement?.isRequired\" (change)=\"onRequiredChange(true)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement?.isRequired\" (change)=\"onRequiredChange(false)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AP 25FEB25 - handled options -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].value\" placeholder=\"Option {{ i + 1 }}\"\n class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'appearance'\">\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().appearance\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"updateProperty(prop.key, $event.target.value)\" />\n\n <!-- Radio Group -->\n <div *ngIf=\"prop.type === 'radio'\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement?.isRequired\" (change)=\"onRequiredChange(true)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement?.isRequired\" (change)=\"onRequiredChange(false)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n\n <!-- AP 25FEB25 - handled options -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].value\" placeholder=\"Option {{ i + 1 }}\"\n class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-container\">\n <button class=\"cancel-btn\" (click)=\"onCancel()\">Cancel</button>\n <button class=\"save-btn\" (click)=\"onSave()\">Save</button>\n </div>\n</div>", styles: ["@import\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\";*{margin:0;padding:0;box-sizing:border-box;font-family:Roboto,sans-serif}.properties{height:100vh;overflow-y:auto}.design-header{display:flex;justify-content:center;align-items:center;padding:15px 20px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a;margin-bottom:20px}.header-title{font-size:20px;font-weight:400;color:#222}.all-properties details{background:#fff;border:1px solid #ddd;border-radius:8px;margin-bottom:12px;padding:12px;box-shadow:0 2px 8px #0000000d}.all-properties summary{font-size:15px;font-weight:400;cursor:pointer;padding:6px;transition:color .3s}.all-properties summary:hover{color:#007bff}.inner-content{padding:12px 0}label{font-size:14px;font-weight:500;color:#444;margin-bottom:5px;display:block}input[type=text],input[type=number],select{width:100%;height:40px;padding:10px;font-size:14px;border:1px solid #ccc;border-radius:6px;outline:none;transition:.3s;background:#f8f8f8}input:focus,select:focus{border-color:#007bff;background:#fff;box-shadow:0 0 5px #007bff4d}button{padding:10px 15px;border:none;border-radius:6px;background:#007bff;color:#fff;font-size:15px;cursor:pointer;transition:.3s}button:hover{background:#0056b3;transform:translateY(-2px)}.toggle-group{display:flex;align-items:center;gap:20px}.toggle-item{display:flex;align-items:center;gap:10px}.switch{position:relative;width:42px;height:22px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:20px;width:20px;left:1px;bottom:1px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(18px)}.radio-item{display:flex;align-items:center;gap:20px}.radio-item input{accent-color:#007bff}.options-container{display:flex;flex-direction:column;gap:12px}.options{width:100%}.field-size-controls{display:flex;align-items:center;gap:12px}.size-input{width:110px;text-align:center}.design-footer{display:flex;justify-content:space-between;margin-top:20px}.design-footer .btn{background:#007bff;color:#fff;padding:10px 18px;border-radius:6px;font-size:15px;transition:.3s}.design-footer .btn:hover{background:#0056b3}.input-container{display:flex;flex-direction:column;align-items:flex-start;gap:10px;width:100%}.subtext-textarea{width:100%;margin-left:auto}@media (max-width: 768px){.properties{max-width:100%;padding:12px}.design-header{flex-direction:column;align-items:flex-start;padding:15px}.toggle-group{flex-direction:column;gap:12px}.field-size-controls{flex-direction:column}.design-footer{flex-direction:column;gap:12px;align-items:center}}.container{width:100%;max-width:500px;margin:0 auto;background-color:#fff;box-shadow:0 2px 10px #0000001a;overflow:hidden;font-family:Arial,sans-serif}.tabs{display:flex;background-color:#f0f2f5;border-bottom:2px solid #0052cc}.tab{flex:1;padding:15px 10px;text-align:center;cursor:pointer}.tab.active{background-color:#0052cc;color:#fff;font-weight:700}.tab-content{padding:20px;max-height:80vh;overflow-y:auto;overflow-x:hidden}.form-group{margin-bottom:15px}label{display:block;margin-bottom:8px;color:#666;font-size:14px}.required:before{content:\"*\";color:red;margin-right:3px}input[type=text],select{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box;font-size:14px}.select-container{position:relative;width:100%}.dropdown-arrow{position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none;color:#666;font-size:12px}.checkbox-row{display:flex;margin-bottom:10px}.checkbox-group{display:flex;align-items:center;margin-right:20px;min-width:120px}.checkbox-group input[type=checkbox]{margin-right:5px}.icon{display:inline-block;width:18px;height:18px;border-radius:50%;text-align:center;line-height:18px;color:#fff;font-size:12px;margin-left:5px}.edit-icon{background-color:#4caf50}.view-icon{background-color:#2196f3}.delete-icon{background-color:#f44336}.color-picker-row{display:flex;align-items:center}.color-picker-container{display:flex;align-items:center;border:1px solid #ddd;border-radius:4px;margin-right:10px}.color-box{width:30px;border:none;height:30px}.hex-label{color:#999;margin-right:5px}.hex-input{width:100px}.divider{border-top:1px dashed #ddd;margin:20px 0}.button-container{display:flex;padding:15px;background-color:#f9f9f9;border-top:1px solid #eee}.cancel-btn,.save-btn{padding:12px;border:none;border-radius:4px;cursor:pointer;font-weight:700}.cancel-btn{flex:1;background-color:#fff;color:#666;border:1px solid #ddd;margin-right:10px}.save-btn{flex:1;background-color:#0052cc;color:#fff}input[type=checkbox],input[type=radio]{width:unset!important}\n"] }]
|
|
724
|
+
args: [{ selector: 'app-properties', template: "<!-- AP 22JAN25 - Field and Element Properties -->\n<div class=\"container\">\n <div class=\"tabs\">\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'attributes'}\" (click)=\"setActiveTab('attributes')\">\n Attributes\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'property'}\" (click)=\"setActiveTab('property')\">\n Property\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'appearance'}\" (click)=\"setActiveTab('appearance')\">\n Appearance\n </div>\n </div>\n <!-- <div *ngIf=\"errorMessage\" class=\"error-message\">{{ errorMessage }}</div> -->\n <div class=\"tab-content\" *ngIf=\"activeTab === 'attributes'\">\n <!-- Element Properrties -->\n <!-- AP-06MAR25 Select element type show -->\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"form-group\">\n <label *ngIf=\"prop.type !== 'checkbox'\" class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Text Input -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"headerSelect ? book.records[0].title : (selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : selectedElement[prop.key])\"\n (input)=\"headerSelect ? updateTitle($event.target.value) : (selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : getValueByPath(prop.key) ) : updateProperty(prop.key, $event.target.value))\"\n [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n <!-- help text -->\n <div *ngIf=\"prop.key === 'helpText' && selectedElement.helpText\">{{\n selectedElement.helpText }}</div>\n\n <!-- Font Selection -->\n <div *ngIf=\"prop.key === 'font'\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'font'\" class=\"select-container\"\n [value]=\"selectedElement?.font\" (change)=\"updateProperty('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\"> {{ option }} </option>\n </select>\n </div>\n <!-- questionNumber -->\n <input *ngIf=\"prop.key === 'questionNumber'\" type=\"number\" [value]=\"selectedElement.questionNumber\"\n (input)=\"updateProperty('questionNumber', $event.target.value)\" />\n\n <!-- file -->\n <!-- Add this inside the elementProps loop where other inputs are rendered -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\" [value]=\"selectedElement[prop.key]\"\n (change)=\"updateProperty(prop.key, $event.target.value)\">\n <option value=\"\">Select file category</option>\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n\n <!-- Font Weight Selection -->\n <div *ngIf=\"prop.key === 'fontWeight'\">\n <!-- <label>{{ prop.label }}</label> -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'fontWeight'\" [value]=\"selectedElement?.fontWeight\"\n (change)=\"updateProperty('fontWeight', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n </div>\n\n <div *ngIf=\"prop.type === 'checkbox'\">\n <span class=\"toggle-label\" style=\"padding-right: 10px;\">{{ prop.label }}</span>\n <input \n type=\"checkbox\" \n [checked]=\"getValueByPath(prop.key)\" \n (change)=\"onToggleChange(prop.key, $event)\" />\n </div>\n\n <!-- Toggle Group -->\n <div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n <div class=\"toggle-item\">\n <span class=\"toggle-label\">Read Only</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isReadOnly\"\n (change)=\"onToggleChange('isReadOnly', $event)\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n\n <div class=\"toggle-item\">\n <span class=\"toggle-label\">Is Hide</span>\n <label class=\"switch\">\n <input type=\"checkbox\" [checked]=\"selectedElement?.isHidden\"\n (change)=\"onToggleChange('isHidden', $event)\" />\n <span class=\"slider\"></span>\n </label>\n </div>\n </div>\n\n <!-- Text Align Buttons -->\n <div *ngIf=\"prop.type === 'align'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\"\n [class.active]=\"selectedElement?.textAlign === option.value\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <div *ngIf=\"prop.type === 'style'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <!-- Field Size Controls -->\n <!-- AP 25FEB25 - Change key size -->\n <div *ngIf=\"prop.key === 'size'\">\n <label class=\"size-label\">Width</label>\n <input type=\"number\" [value]=\"selectedElement?.size\" (input)=\"updateProperty('size', $event.target.value)\"\n class=\"size-input\" />\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'property'\">\n <!-- Field Elements Properties -->\n <!-- AP-06MAR25 Show elements ID -->\n <div *ngIf=\"getProperties()\">\n <div style=\"font-size: 13px; padding:5px;border-radius:3px;background-color:#eff8ff;\"> id : {{ headerSelect ?\n bookId : selectedElement.id}}</div>\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"updateProperty(prop.key, $event.target.value)\" />\n\n <!-- Radio Group -->\n <div *ngIf=\"prop.type === 'radio'\">\n <div class=\"sizes\">\n <div class=\"flex-gap\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement?.isRequired\" (change)=\"onRequiredChange(true)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement?.isRequired\" (change)=\"onRequiredChange(false)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- AP 25FEB25 - handled options -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].value\" placeholder=\"Option {{ i + 1 }}\"\n class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'appearance'\">\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().appearance\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"updateProperty(prop.key, $event.target.value)\" />\n\n <!-- Radio Group -->\n <div *ngIf=\"prop.type === 'radio'\">\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"selectedElement?.isRequired\" (change)=\"onRequiredChange(true)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-label\"> Required </label>\n </div>\n <div class=\"flex-items\">\n <input type=\"radio\" [checked]=\"!selectedElement?.isRequired\" (change)=\"onRequiredChange(false)\"\n name=\"required\" class=\"radio-input\" />\n <label class=\"text-sm text-gray-400\"> Not Required </label>\n </div>\n </div>\n\n <!-- AP 25FEB25 - handled options -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n <div *ngFor=\"let option of selectedElement[prop.key]; let i = index\" class=\"option-items\">\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key][i].value\" placeholder=\"Option {{ i + 1 }}\"\n class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], i)\">\n </div>\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n\n <div class=\"button-container\">\n <button class=\"cancel-btn\" (click)=\"onCancel()\">Cancel</button>\n <button class=\"save-btn\" (click)=\"handleButtonClick()\">Save</button>\n </div>\n</div>", styles: ["@import\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\";*{margin:0;padding:0;box-sizing:border-box;font-family:Roboto,sans-serif}.properties{height:100vh;overflow-y:auto}.design-header{display:flex;justify-content:center;align-items:center;padding:15px 20px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a;margin-bottom:20px}.header-title{font-size:20px;font-weight:400;color:#222}.all-properties details{background:#fff;border:1px solid #ddd;border-radius:8px;margin-bottom:12px;padding:12px;box-shadow:0 2px 8px #0000000d}.all-properties summary{font-size:15px;font-weight:400;cursor:pointer;padding:6px;transition:color .3s}.all-properties summary:hover{color:#007bff}.inner-content{padding:12px 0}label{font-size:14px;font-weight:500;color:#444;margin-bottom:5px;display:block}input[type=text],input[type=number],select{width:100%;height:40px;padding:10px;font-size:14px;border:1px solid #ccc;border-radius:6px;outline:none;transition:.3s;background:#f8f8f8}input:focus,select:focus{border-color:#007bff;background:#fff;box-shadow:0 0 5px #007bff4d}button{padding:10px 15px;border:none;border-radius:6px;background:#007bff;color:#fff;font-size:15px;cursor:pointer;transition:.3s}button:hover{background:#0056b3;transform:translateY(-2px)}.toggle-group{display:flex;align-items:center;gap:20px}.toggle-item{display:flex;align-items:center;gap:10px}.switch{position:relative;width:42px;height:22px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:20px;width:20px;left:1px;bottom:1px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(18px)}.radio-item{display:flex;align-items:center;gap:20px}.radio-item input{accent-color:#007bff}.options-container{display:flex;flex-direction:column;gap:12px}.options{width:100%}.field-size-controls{display:flex;align-items:center;gap:12px}.size-input{width:110px;text-align:center}.design-footer{display:flex;justify-content:space-between;margin-top:20px}.design-footer .btn{background:#007bff;color:#fff;padding:10px 18px;border-radius:6px;font-size:15px;transition:.3s}.design-footer .btn:hover{background:#0056b3}.input-container{display:flex;flex-direction:column;align-items:flex-start;gap:10px;width:100%}.subtext-textarea{width:100%;margin-left:auto}@media (max-width: 768px){.properties{max-width:100%;padding:12px}.design-header{flex-direction:column;align-items:flex-start;padding:15px}.toggle-group{flex-direction:column;gap:12px}.field-size-controls{flex-direction:column}.design-footer{flex-direction:column;gap:12px;align-items:center}}.container{width:100%;max-width:500px;margin:0 auto;background-color:#fff;box-shadow:0 2px 10px #0000001a;overflow:hidden;font-family:Arial,sans-serif}.tabs{display:flex;background-color:#f0f2f5;border-bottom:2px solid #0052cc}.tab{flex:1;padding:15px 10px;text-align:center;cursor:pointer}.tab.active{background-color:#0052cc;color:#fff;font-weight:700}.tab-content{padding:20px;max-height:80vh;overflow-y:auto;overflow-x:hidden}.form-group{margin-bottom:15px}label{display:block;margin-bottom:8px;color:#666;font-size:14px}.required:before{content:\"*\";color:red;margin-right:3px}input[type=text],select{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box;font-size:14px}.select-container{position:relative;width:100%}.dropdown-arrow{position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none;color:#666;font-size:12px}.checkbox-row{display:flex;margin-bottom:10px}.checkbox-group{display:flex;align-items:center;margin-right:20px;min-width:120px}.checkbox-group input[type=checkbox]{margin-right:5px}.icon{display:inline-block;width:18px;height:18px;border-radius:50%;text-align:center;line-height:18px;color:#fff;font-size:12px;margin-left:5px}.edit-icon{background-color:#4caf50}.view-icon{background-color:#2196f3}.delete-icon{background-color:#f44336}.color-picker-row{display:flex;align-items:center}.color-picker-container{display:flex;align-items:center;border:1px solid #ddd;border-radius:4px;margin-right:10px}.color-box{width:30px;border:none;height:30px}.hex-label{color:#999;margin-right:5px}.hex-input{width:100px}.divider{border-top:1px dashed #ddd;margin:20px 0}.button-container{display:flex;padding:15px;background-color:#f9f9f9;border-top:1px solid #eee}.cancel-btn,.save-btn{padding:12px;border:none;border-radius:4px;cursor:pointer;font-weight:700}.cancel-btn{flex:1;background-color:#fff;color:#666;border:1px solid #ddd;margin-right:10px}.save-btn{flex:1;background-color:#0052cc;color:#fff}\n"] }]
|
|
609
725
|
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.FormBuilderService }], propDecorators: { formButtonHandler: [{
|
|
610
726
|
type: Output
|
|
611
727
|
}], selectedElementType: [{
|
|
612
728
|
type: Input
|
|
613
729
|
}] } });
|
|
614
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYnVpbGRlci9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvcHJvcGVydGllcy9wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRMUcsTUFBTSxPQUFPLG1CQUFtQjtJQXlmVjtJQUEwQjtJQXZmcEMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN0RCxjQUFjLEdBQVcsRUFBRSxDQUFDO0lBQzVCLG9CQUFvQixHQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLG1CQUFtQixHQUFXLEVBQUUsQ0FBQztJQUMxQyxhQUFhLEdBQVcsWUFBWSxDQUFDLENBQUUsb0JBQW9CO0lBQzNELGNBQWMsR0FBYSxFQUFFLENBQUMsQ0FBRSxvREFBb0Q7SUFDcEYsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixlQUFlLEdBQVEsSUFBSSxDQUFDLENBQUUsK0JBQStCO0lBQzdELFlBQVksR0FBWSxLQUFLLENBQUM7SUFDOUIsTUFBTSxDQUFNO0lBQ1osSUFBSSxDQUFNO0lBQ1YsU0FBUyxHQUFXLFlBQVksQ0FBQztJQUVqQywrQkFBK0I7SUFDL0IsWUFBWSxDQUFDLEdBQVc7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUNELGlDQUFpQztJQUNqQyxNQUFNO1FBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5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aUJBQWlCO3NCQUExQixNQUFNO2dCQUdFLG1CQUFtQjtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFQIDIySkFOMjVcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLWJ1aWxkZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1wcm9wZXJ0aWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9wZXJ0aWVzLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0aWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBAT3V0cHV0KCkgZm9ybUJ1dHRvbkhhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZEVsZW1lbnRJbmRleDogbnVtYmVyID0gLTE7XG4gIEBJbnB1dCgpIHNlbGVjdGVkRWxlbWVudFR5cGU6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZEFsaWduOiBzdHJpbmcgPSAnYWxpZ24tbGVmdCc7ICAvLyBBZGQgdGhpcyBwcm9wZXJ0eVxuICBzZWxlY3RlZFN0eWxlczogc3RyaW5nW10gPSBbXTsgIC8vIFVzaW5nIGFycmF5IHNpbmNlIG11bHRpcGxlIHN0eWxlcyBjYW4gYmUgc2VsZWN0ZWRcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRFbGVtZW50OiBhbnkgPSBudWxsOyAgLy8gUmVjZWl2ZSB0aGUgc2VsZWN0ZWQgZWxlbWVudFxuICBoZWFkZXJTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYm9va0lkOiBhbnk7XG4gIGJvb2s6IGFueTtcbiAgYWN0aXZlVGFiOiBzdHJpbmcgPSAnYXR0cmlidXRlcyc7XG5cbiAgLy8gU0tTMTNNQVIyNSBhY3RpdmUgdGFiIHNlbGVjdFxuICBzZXRBY3RpdmVUYWIodGFiOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgfVxuICAvLyBTS1MxM01BUjI1IHRhYmxlIHByb3BlcnR5IHNhdmVcbiAgb25TYXZlKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdTYXZpbmcgZGF0YTonKTtcbiAgfVxuICAvLyBTS1MxM01BUjI1IHRhYmxlIHByb3BlcnR5IHJlc2V0XG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdPcGVyYXRpb24gY2FuY2VsbGVkJyk7XG4gIH1cblxuICBvblRvZ2dsZUNoYW5nZShrZXk6IHN0cmluZywgZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IHsgLi4udGhpcy5zZWxlY3RlZEVsZW1lbnQsIFtrZXldOiBjaGVja2VkIH07XG4gICAgdGhpcy51cGRhdGVQcm9wZXJ0eShrZXksIGNoZWNrZWQpOyAvL0FQLTA2TUFSMjUgQnVnIEZpeGVkXG4gIH1cblxuICB1cGRhdGVQcm9wZXJ0aWVzKGVsZW1lbnRUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBSZXNldCBhbGlnbm1lbnQgYW5kIHN0eWxlcyBpZiBzd2l0Y2hpbmcgZWxlbWVudHNcbiAgICB0aGlzLnNlbGVjdGVkQWxpZ24gPSAnYWxpZ24tbGVmdCc7XG4gICAgdGhpcy5zZWxlY3RlZFN0eWxlcyA9IFtdO1xuXG4gICAgLy8gRmV0Y2ggdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgdHlwZVxuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcygpO1xuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIHByb3BlcnRpZXMgYXJlIGR5bmFtaWNhbGx5IHVwZGF0ZWRcbiAgICB9XG4gIH1cblxuICBvbkFsaWduU2VsZWN0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnRleHRBbGlnbiA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG9uU3R5bGVTZWxlY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEVsZW1lbnQpIHJldHVybjtcblxuICAgIC8vIEluaXRpYWxpemUgc3R5bGVzIGFycmF5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5zdHlsZXMgPSB0aGlzLnNlbGVjdGVkRWxlbWVudC5zdHlsZXMgfHwgW107XG5cbiAgICAvLyBFbnN1cmUgb25seSBvbmUgc3R5bGUgaXMgc2VsZWN0ZWQgYXQgYSB0aW1lXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGVzID0gW3ZhbHVlXTtcblxuICB9XG5cbiAgaXNTdHlsZUFjdGl2ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRFbGVtZW50Py5zdHlsZXM/LmluY2x1ZGVzKHZhbHVlKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGVsZW1lbnRQcm9wZXJ0aWVzID0ge1xuICAgIC8vIEFQLTEwTUFSMjUgLSBEZWZpbmVzIHRoZSBIZWFkZXIgZWxlbWVudCB3aXRoIGEgdGV4dCBpbnB1dCBmaWVsZCAgIFxuICAgICdIZWFkZXInOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICd0aXRsZScgfV1cbiAgICB9LFxuXG4gICAgJ1RleHQnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcblxuICAgICAgICAvLyBxdWVzdGlvblRleHQgLSBMYWJlbC1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG5cbiAgICAgICAgLy8gcXVlc3Rpb24gLSBQbGFjZWhvbGRlci1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuXG4gICAgICAgIC8vIGVycm9yTWVzc2FnZSAtIEVycm9yIE1zZy1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250JywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnQnLFxuICAgICAgICAgIG9wdGlvbnM6IFsnSGVsdmV0aWNhIE5ldWUnLCAnQXJpYWwnLCAnVGltZXMgTmV3IFJvbWFuJywgJ1JvYm90byddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ1dlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IHZhbHVlOiAnNDAwJywgbGFiZWw6ICc0MDAtTm9ybWFsJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzUwMCcsIGxhYmVsOiAnNTAwLU1lZGl1bScgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc2MDAnLCBsYWJlbDogJzYwMC1TZW1pIEJvbGQnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNzAwJywgbGFiZWw6ICc3MDAtQm9sZCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfVxuXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nLCBrZXk6ICdpc1JlcXVpcmVkJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ2RlZmF1bHRWYWx1ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YlRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3N1YlRleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgJ0NoZWNrYm94Jzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnT3B0aW9ucycsXG4gICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICBrZXk6ICdvcHRpb25zJyxcbiAgICAgICAgICBhZGRPcHRpb25MYWJlbDogJ0FkZCBPcHRpb24nLFxuICAgICAgICAgIGljb246ICdwbHVzJ1xuICAgICAgICB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcsIGtleTogJ3N0eWxlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3N1YlRleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgJ0NhbGVuZGFyJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcbiAgICAvLyBBUC0xMk1BUjI1IC0gQWRkZWQgRGF0ZSBlbGVtZW50IFByb3BlcnRpZXNcbiAgICAnRGF0ZSc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdzaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdlcnJvck1lc3NhZ2UnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnRW1haWwnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ09yZGVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ29yZGVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcsIGtleTogJ3N0eWxlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3N1YlRleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwiVGFibGVcIjoge1xuICAgICAgXCJlbGVtZW50UHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJsZU5hbWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmxlTmFtZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaW5wdXRUZXh0QWxpZ25tZW50XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwidGFibGVTY2FsZVNpemVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIjA2IC0gRnVsbCBTY2FsZVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwidGFibGVTY2FsZVNpemVcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJyb3dDaG9pY2VcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwicm93Q2hvaWNlXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJxdWlja0FjdGlvblRvb2xzXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInF1aWNrQWN0aW9uVG9vbHNcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImVkaXRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiZWRpdFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2aWV3XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcInZpZXdcIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwiZGVsZXRlXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImRlbGV0ZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFkZFJlY29yZEV2ZW50XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImFkZFJlY29yZEV2ZW50XCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJ0YWJsZVNjcm9sbEV2ZW50Q2hvaWNlXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInRhYmxlU2Nyb2xsRXZlbnRDaG9pY2VcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImhvcml6b250YWxcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaG9yaXpvbnRhbFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2ZXJ0aWNhbFwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJ2ZXJ0aWNhbFwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImZpZWxkUHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJlbElkXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBfVGFiZWxfMDFcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmVsSWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJpbnB1dFRleHRBbGlnbm1lbnRcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkxlZnRcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlcXVpcmVkRmllbGRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwicmVxdWlyZWRGaWVsZFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlYWRPbmx5XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcInJlYWRPbmx5XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGlkZUxhYmVsXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImhpZGVMYWJlbFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImRpc2FibGVkXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImRpc2FibGVkXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGlkZUVsZW1lbnRzXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImhpZGVFbGVtZW50c1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcIm1hc2tpbmdcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwibWFza2luZ1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImhlbHBUZXh0XCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbnRlciBoZWxwIG1lc3NhZ2UgaGVyZVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaGVscFRleHRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJkZWZhdWx0VmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkRlZmF1bHQgVmFsdWVcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImRlZmF1bHRWYWx1ZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImNvbnRyb2xsaW5nRWxlbWVudHNcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiY29udHJvbGxpbmdFbGVtZW50c1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlzRGVwZW5kZW5jZVwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJpc0RlcGVuZGVuY2VcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJuZXdMaW5lXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcIm5ld0xpbmVcIiB9XG4gICAgICBdLFxuICAgICAgXCJhcHBlYXJhbmNlXCI6IFtcbiAgICAgICAgeyBcImxhYmVsXCI6IFwic2VsZWN0Rm9udFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwic2VsZWN0Rm9udFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRDb2xvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiZm9udENvbG9yXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGV4Q29kZVwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRTaXplXCIsIFwicGxhY2Vob2xkZXJcIjogXCIzMDAgLSBNZWRpdW1cIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImZvbnRTaXplXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiZm9udFdpZHRoXCIsIFwicGxhY2Vob2xkZXJcIjogXCJMZWZ0XCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJmb250V2lkdGhcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCJwbGFjZWhvbGRlclwiOiBcIiNFMkUyRTJcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImJhY2tncm91bmRDb2xvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJhY2tncm91bmRIZXhDb2RlXCIsIFwicGxhY2Vob2xkZXJcIjogXCIjRTJFMkUyXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJiYWNrZ3JvdW5kSGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJsYW5rU3BhY2VcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiYmxhbmtTcGFjZVwiIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwiVGFibGVDb2x1bW5cIjoge1xuICAgICAgXCJlbGVtZW50UHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJsZU5hbWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmxlTmFtZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaW5wdXRUZXh0QWxpZ25tZW50XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwidGFibGVTY2FsZVNpemVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIjA2IC0gRnVsbCBTY2FsZVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwidGFibGVTY2FsZVNpemVcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJyb3dDaG9pY2VcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwicm93Q2hvaWNlXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJxdWlja0FjdGlvblRvb2xzXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInF1aWNrQWN0aW9uVG9vbHNcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImVkaXRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiZWRpdFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2aWV3XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcInZpZXdcIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwiZGVsZXRlXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImRlbGV0ZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFkZFJlY29yZEV2ZW50XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImFkZFJlY29yZEV2ZW50XCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJ0YWJsZVNjcm9sbEV2ZW50Q2hvaWNlXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInRhYmxlU2Nyb2xsRXZlbnRDaG9pY2VcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImhvcml6b250YWxcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaG9yaXpvbnRhbFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2ZXJ0aWNhbFwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJ2ZXJ0aWNhbFwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImZpZWxkUHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJlbElkXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBfVGFiZWxfMDFcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmVsSWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJpbnB1dFRleHRBbGlnbm1lbnRcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkxlZnRcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlcXVpcmVkRmllbGRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwicmVxdWlyZWRGaWVsZFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlYWRPbmx5XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcInJlYWRPbmx5XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGlkZUxhYmVsXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImhpZGVMYWJlbFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImRpc2FibGVkXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImRpc2FibGVkXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGlkZUVsZW1lbnRzXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImhpZGVFbGVtZW50c1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcIm1hc2tpbmdcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwibWFza2luZ1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImhlbHBUZXh0XCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbnRlciBoZWxwIG1lc3NhZ2UgaGVyZVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaGVscFRleHRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJkZWZhdWx0VmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkRlZmF1bHQgVmFsdWVcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImRlZmF1bHRWYWx1ZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImNvbnRyb2xsaW5nRWxlbWVudHNcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiY29udHJvbGxpbmdFbGVtZW50c1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlzRGVwZW5kZW5jZVwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJpc0RlcGVuZGVuY2VcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJuZXdMaW5lXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcIm5ld0xpbmVcIiB9XG4gICAgICBdLFxuICAgICAgXCJhcHBlYXJhbmNlXCI6IFtcbiAgICAgICAgeyBcImxhYmVsXCI6IFwic2VsZWN0Rm9udFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwic2VsZWN0Rm9udFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRDb2xvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiZm9udENvbG9yXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGV4Q29kZVwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRTaXplXCIsIFwicGxhY2Vob2xkZXJcIjogXCIzMDAgLSBNZWRpdW1cIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImZvbnRTaXplXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiZm9udFdpZHRoXCIsIFwicGxhY2Vob2xkZXJcIjogXCJMZWZ0XCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJmb250V2lkdGhcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCJwbGFjZWhvbGRlclwiOiBcIiNFMkUyRTJcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImJhY2tncm91bmRDb2xvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJhY2tncm91bmRIZXhDb2RlXCIsIFwicGxhY2Vob2xkZXJcIjogXCIjRTJFMkUyXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJiYWNrZ3JvdW5kSGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJsYW5rU3BhY2VcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiYmxhbmtTcGFjZVwiIH1cbiAgICAgIF1cbiAgICB9LFxuICAgICdGaWxlJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTdXBwb3J0IFR5cGUnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnc3VwcG9ydFR5cGUnLCBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnSW1hZ2VzIChKUEVHLCBQTkcsIEdJRiknLCB2YWx1ZTogJ2ltYWdlLyonLCBleHRlbnNpb25zOiBbJy5qcGcnLCAnLmpwZWcnLCAnLnBuZycsICcuZ2lmJ10gfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdBdWRpbyAoTVAzLCBXQVYsIEFJRkYpJywgdmFsdWU6ICdhdWRpby8qJywgZXh0ZW5zaW9uczogWycubXAzJywgJy53YXYnLCAnLmFpZmYnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1ZpZGVvIChNUDQsIEFWSSwgSEVWQyknLCB2YWx1ZTogJ3ZpZGVvLyonLCBleHRlbnNpb25zOiBbJy5tcDQnLCAnLmF2aScsICcuaGV2YyddIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnRG9jdW1lbnRzIChET0MsIERPQ1gsIFBQVCwgUERGKScsIHZhbHVlOiAnYXBwbGljYXRpb24vcGRmLGFwcGxpY2F0aW9uL21zd29yZCxhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCxhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsIGV4dGVuc2lvbnM6IFsnLmRvYycsICcuZG9jeCcsICcucHB0JywgJy5wZGYnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0V4ZWN1dGFibGVzIChFWEUsIEJBRCwgU0gpJywgdmFsdWU6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQsYXBwbGljYXRpb24veC1zaCcsIGV4dGVuc2lvbnM6IFsnLmV4ZScsICcuYmFkJywgJy5zaCddIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQXJjaGl2ZXMgKFpJUCwgUkFSLCBHaXQtaHViKScsIHZhbHVlOiAnYXBwbGljYXRpb24vemlwLGFwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQsYXBwbGljYXRpb24veC1naXQnLCBleHRlbnNpb25zOiBbJy56aXAnLCAnLnJhcicsICcuZ2l0J10gfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcblxuICAgICdMaXN0Jzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcblxuICAgICdUZXh0QXJlYSc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdzaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdlcnJvck1lc3NhZ2UnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nLCBrZXk6ICdyZXF1aXJlZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2RlZmF1bHRWYWx1ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcblxuICAgICdSaWNoVGV4dEFyZWEnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ09yZGVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ29yZGVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJywga2V5OiAncmVxdWlyZWQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdkZWZhdWx0VmFsdWUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnTnVtYmVyJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcblxuICAgICdEcm9wZG93bic6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdzaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdlcnJvck1lc3NhZ2UnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ09wdGlvbnMnLFxuICAgICAgICAgIHR5cGU6ICdkcm9wZG93bicsXG4gICAgICAgICAga2V5OiAnb3B0aW9ucycsXG4gICAgICAgICAgYWRkT3B0aW9uTGFiZWw6ICdBZGQgVmFyaWFudCcsXG4gICAgICAgICAgaWNvbjogJ3BsdXMnXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuXG4gICAgICBdXG4gICAgfSxcblxuICAgICdJbWFnZSc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdzaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdlcnJvck1lc3NhZ2UnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnUmFkaW8nOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ09yZGVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ29yZGVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdPcHRpb25zJyxcbiAgICAgICAgICB0eXBlOiAncmFkaW8nLFxuICAgICAgICAgIGtleTogJ29wdGlvbnMnLFxuICAgICAgICAgIGFkZE9wdGlvbkxhYmVsOiAnQWRkIE9wdGlvbicsXG4gICAgICAgICAgaWNvbjogJ3BsdXMnXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnTGFiZWwnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ09yZGVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ29yZGVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcsIGtleTogJ3N0eWxlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3N1YlRleHQnIH1cbiAgICAgIF1cbiAgICB9XG5cbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgZm9ybUJ1aWxkZXJTZXJ2aWNlOiBGb3JtQnVpbGRlclNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vQVAtMTBNQVIyNSBTdWJzY3JpYmVzIHRvIGhlYWRlciBzZWxlY3Rpb24gY2hhbmdlcyBhbmQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudCAgXG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2Uuc2VsZWN0SGVhZGVyU3ViamVjdCQuc3Vic2NyaWJlKGhlYWRlciA9PiB7XG4gICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50Wyd0eXBlJ10gPSBoZWFkZXI7XG4gICAgICAgIHRoaXMuaGVhZGVyU2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ib29rID0gdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZ2V0Qm9vaygpO1xuICAgICAgICB0aGlzLmJvb2tJZCA9IHRoaXMuYm9vay5yZWNvcmRzWzBdLmlkO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2Uuc2VsZWN0ZWRFbGVtZW50JC5zdWJzY3JpYmUoaW5kZXggPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCA9IGluZGV4O1xuICAgICAgdGhpcy5oZWFkZXJTZWxlY3QgPSBmYWxzZTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZ2V0RWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQgPSBlbGVtZW50c1tpbmRleF07XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuICAvL0FQLTEwTUFSMjUgVXBkYXRlcyB0aGUgdGl0bGUgdXNpbmcgdGhlIGZvcm0gYnVpbGRlciBzZXJ2aWNlICBcbiAgdXBkYXRlVGl0bGUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZVRpdGxlKGV2ZW50KTtcbiAgfVxuICB2YWxpZGF0ZUlucHV0KHZhbHVlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlID09PSAnbGFiZWwnIHx8IHR5cGUgPT09ICdwbGFjZWhvbGRlcicpIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gL15bYS16QS1aMC05XFxzXSokLztcbiAgICAgIGlmICghcmVnZXgudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnT25seSBsZXR0ZXJzIGFuZCBudW1iZXJzIGFyZSBhbGxvd2VkJztcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cblxuICB1cGRhdGVQcm9wZXJ0eShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudEluZGV4ID49IDApIHtcbiAgICAgIGlmIChrZXkgPT09ICdxdWVzdGlvblRleHQnIHx8IGtleSA9PT0gJ3F1ZXN0aW9uJykge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVJbnB1dCh2YWx1ZSwga2V5KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ29yZGVyJykge1xuICAgICAgICAvL0FQLTEwTUFSMjUgQ29udmVydCB0aGUgdmFsdWUgdG8gYW4gaW50ZWdlciAgXG4gICAgICAgIGNvbnN0IG5ld09yZGVyID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICAgICAgaWYgKGlzTmFOKG5ld09yZGVyKSkgcmV0dXJuO1xuXG4gICAgICAgIC8vQVAtMTBNQVIyNSBVcGRhdGUgdGhlIGVsZW1lbnQncyBvcmRlciBpbiB0aGUgZm9ybSBidWlsZGVyIHNlcnZpY2UgIFxuICAgICAgICB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS51cGRhdGVFbGVtZW50KHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXgsIHsgb3JkZXI6IG5ld09yZGVyIH0pO1xuXG4gICAgICAgIC8vQVAtMTBNQVIyNSBTb3J0IGVsZW1lbnRzIGJhc2VkIG9uIHRoZSB1cGRhdGVkIG9yZGVyICBcbiAgICAgICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2Uuc29ydEVsZW1lbnRzQnlPcmRlcigpO1xuICAgICAgfVxuXG5cbiAgICAgIGlmIChrZXkgPT09ICdmb250V2VpZ2h0Jykge1xuICAgICAgICAvLyBFeHRyYWN0IGp1c3QgdGhlIG51bWJlciB2YWx1ZSBmcm9tIHRoZSBvcHRpb25cbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLScpWzBdO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09PSAnc3R5bGVzJykge1xuICAgICAgICBjb25zdCBjdXJyZW50U3R5bGVzID0gdGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGVzIHx8IFtdO1xuICAgICAgICBpZiAodmFsdWUgPT09ICdjYXBpdGFsaXplJyB8fCB2YWx1ZSA9PT0gJ2xvd2VyY2FzZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9wcG9zaXRlIGNhc2UgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgY29uc3Qgb3Bwb3NpdGVTdHlsZSA9IHZhbHVlID09PSAnY2FwaXRhbGl6ZScgPyAnbG93ZXJjYXNlJyA6ICdjYXBpdGFsaXplJztcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFN0eWxlcyA9IGN1cnJlbnRTdHlsZXMuZmlsdGVyKHMgPT4gcyAhPT0gb3Bwb3NpdGVTdHlsZSk7XG4gICAgICAgICAgdmFsdWUgPSBjdXJyZW50U3R5bGVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICAgICAgPyBmaWx0ZXJlZFN0eWxlcy5maWx0ZXIocyA9PiBzICE9PSB2YWx1ZSlcbiAgICAgICAgICAgIDogWy4uLmZpbHRlcmVkU3R5bGVzLCB2YWx1ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVG9nZ2xlIG90aGVyIHN0eWxlc1xuICAgICAgICAgIHZhbHVlID0gY3VycmVudFN0eWxlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICAgID8gY3VycmVudFN0eWxlcy5maWx0ZXIocyA9PiBzICE9PSB2YWx1ZSlcbiAgICAgICAgICAgIDogWy4uLmN1cnJlbnRTdHlsZXMsIHZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB1cGRhdGUgPSB7IFtrZXldOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UudXBkYXRlRWxlbWVudCh0aGlzLnNlbGVjdGVkRWxlbWVudEluZGV4LCB1cGRhdGUpO1xuXG4gICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBmb250IGFuZCBmb250IHdlaWdodFxuICAgICAgaWYgKGtleSA9PT0gJ2ZvbnQnKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LmZvbnQgPSB2YWx1ZTsgLy8gRGlyZWN0bHkgdXBkYXRlIHRoZSBzZWxlY3RlZCBlbGVtZW50J3MgZm9udCBwcm9wZXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWlyZWRDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgIGxldCBsYWJlbCA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50LmxhYmVsID8gdGhpcy5zZWxlY3RlZEVsZW1lbnQubGFiZWwucmVwbGFjZSgvXFxzKlxcKiskLywgJycpIDogJ0xhYmVsJztcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGxhYmVsID0gYCR7bGFiZWx9ICpgO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVByb3BlcnR5KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgIHRoaXMudXBkYXRlUHJvcGVydHkoJ2lzUmVxdWlyZWQnLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJvcGVydGllcygpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRFbGVtZW50KSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEFQLTEwTUFSMjUgUmV0cmlldmUgdGhlIGxhdGVzdCBib29rIGRhdGFcbiAgICB0aGlzLmJvb2sgPSB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5nZXRCb29rKCk7XG5cbiAgICAvLyBBUC0xME1BUjI1IElmIHRoZSBzZWxlY3RlZCBlbGVtZW50IGlzIGEgJ0hlYWRlcicsIHJldHVybiBpdHMgcHJvcGVydGllc1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ0hlYWRlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzWydIZWFkZXInXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXNbdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnR5cGVdO1xuICB9XG5cbiAgYWRkT3B0aW9uKG9wdGlvbnM6IGFueVtdKSB7XG4gICAgb3B0aW9ucy5wdXNoKHsgbGFiZWw6ICcnLCB2YWx1ZTogJycgfSk7XG4gIH1cblxuICByZW1vdmVPcHRpb24ob3B0aW9uczogYW55W10sIGluZGV4OiBudW1iZXIpIHtcbiAgICBvcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gIH1cblxuICAvLyBkb3dubG9hZCgpIHtcbiAgLy8gICBjb25zb2xlLmxvZygnUXVlc3Rpb24gQm9vazonLCB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5kb3dubG9hZEVsZW1lbnQoKSk7XG4gIC8vIH1cblxuICBoYW5kbGVCdXR0b25DbGljaygpIHtcbiAgICB0aGlzLmZvcm1CdXR0b25IYW5kbGVyLmVtaXQodGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZG93bmxvYWRFbGVtZW50KCkpO1xuICB9XG5cbn1cbiIsIjwhLS0gQVAgMjJKQU4yNSAtIEZpZWxkIGFuZCBFbGVtZW50IFByb3BlcnRpZXMgLS0+XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAnYXR0cmlidXRlcyd9XCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignYXR0cmlidXRlcycpXCI+XG4gICAgICBBdHRyaWJ1dGVzXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAncHJvcGVydHknfVwiIChjbGljayk9XCJzZXRBY3RpdmVUYWIoJ3Byb3BlcnR5JylcIj5cbiAgICAgIFByb3BlcnR5XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAnYXBwZWFyYW5jZSd9XCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignYXBwZWFyYW5jZScpXCI+XG4gICAgICBBcHBlYXJhbmNlXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj57eyBlcnJvck1lc3NhZ2UgfX08L2Rpdj4gLS0+XG4gIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiICpuZ0lmPVwiYWN0aXZlVGFiID09PSAnYXR0cmlidXRlcydcIj5cbiAgICA8IS0tIEVsZW1lbnQgUHJvcGVycnRpZXMgLS0+XG4gICAgPCEtLSBBUC0wNk1BUjI1IFNlbGVjdCBlbGVtZW50IHR5cGUgc2hvdyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0UHJvcGVydGllcygpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wIG9mIGdldFByb3BlcnRpZXMoKS5lbGVtZW50UHJvcHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgcHJvcC5sYWJlbCB9fTwvbGFiZWw+XG5cbiAgICAgICAgICA8IS0tIFRleHQgSW5wdXQgLS0+XG4gICAgICAgICAgPGlucHV0ICpuZ0lmPVwicHJvcC50eXBlID09PSAndGV4dCdcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJwcm9wLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJoZWFkZXJTZWxlY3QgPyBib29rLnJlY29yZHNbMF0udGl0bGUgOiBzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJoZWFkZXJTZWxlY3QgPyB1cGRhdGVUaXRsZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSA6IHVwZGF0ZVByb3BlcnR5KHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICBbY2xhc3MucmVhZC1vbmx5XT1cInNlbGVjdGVkRWxlbWVudC5yZWFkT25seVwiIFtyZWFkb25seV09XCJzZWxlY3RlZEVsZW1lbnQucmVhZE9ubHlcIiAvPlxuXG4gICAgICAgICAgPCEtLSBoZWxwIHRleHQgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnaGVscFRleHQnICYmIHNlbGVjdGVkRWxlbWVudC5oZWxwVGV4dFwiPnt7XG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQuaGVscFRleHQgfX08L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRm9udCBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnZm9udCdcIj5cbiAgICAgICAgICAgIDwhLS0gPGxhYmVsPnt7IHByb3AubGFiZWwgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzZWxlY3QnICYmIHByb3Aua2V5ID09PSAnZm9udCdcIiBjbGFzcz1cInNlbGVjdC1jb250YWluZXJcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50Py5mb250XCIgKGNoYW5nZSk9XCJ1cGRhdGVQcm9wZXJ0eSgnZm9udCcsICRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+IHt7IG9wdGlvbiB9fSA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gb3JkZXIgLS0+XG4gICAgICAgICAgPGlucHV0ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdvcmRlcidcIiB0eXBlPVwibnVtYmVyXCIgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudC5vcmRlclwiXG4gICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlUHJvcGVydHkoJ29yZGVyJywgJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAvPlxuXG4gICAgICAgICAgPCEtLSBmaWxlIC0tPlxuICAgICAgICAgIDwhLS0gQWRkIHRoaXMgaW5zaWRlIHRoZSBlbGVtZW50UHJvcHMgbG9vcCB3aGVyZSBvdGhlciBpbnB1dHMgYXJlIHJlbmRlcmVkIC0tPlxuICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzZWxlY3QnICYmIHByb3Aua2V5ID09PSAnc3VwcG9ydFR5cGUnXCIgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVQcm9wZXJ0eShwcm9wLmtleSwgJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgZmlsZSBjYXRlZ29yeTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj4ge3sgb3B0aW9uLmxhYmVsIH19IDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgPCEtLSBGb250IFdlaWdodCBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnZm9udFdlaWdodCdcIj5cbiAgICAgICAgICAgIDwhLS0gPGxhYmVsPnt7IHByb3AubGFiZWwgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzZWxlY3QnICYmIHByb3Aua2V5ID09PSAnZm9udFdlaWdodCdcIiBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50Py5mb250V2VpZ2h0XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVQcm9wZXJ0eSgnZm9udFdlaWdodCcsICRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+IHt7IG9wdGlvbi5sYWJlbCB9fSA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBUb2dnbGUgR3JvdXAgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3RvZ2dsZUdyb3VwJ1wiIGNsYXNzPVwidG9nZ2xlLWdyb3VwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtbGFiZWxcIj5SZWFkIE9ubHk8L3NwYW4+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJzZWxlY3RlZEVsZW1lbnQ/LmlzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUNoYW5nZSgnaXNSZWFkT25seScsICRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtaXRlbVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS1sYWJlbFwiPklzIEhpZGU8L3NwYW4+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJzZWxlY3RlZEVsZW1lbnQ/LmlzSGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVDaGFuZ2UoJ2lzSGlkZGVuJywgJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGlkZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVGV4dCBBbGlnbiBCdXR0b25zIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdhbGlnbidcIj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiAoY2xpY2spPVwib25BbGlnblNlbGVjdChvcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LnRleHRBbGlnbiA9PT0gb3B0aW9uLnZhbHVlXCIgW3RpdGxlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiJy4uL2Fzc2V0cy9pY29ucy8nICsgb3B0aW9uLmljb24gKyAnLnN2ZydcIiBbYWx0XT1cIm9wdGlvbi52YWx1ZVwiIGNsYXNzPVwiaWNvbi1zaXplXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3N0eWxlJ1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIChjbGljayk9XCJvblN0eWxlU2VsZWN0KG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzU3R5bGVBY3RpdmUob3B0aW9uLnZhbHVlKVwiIFt0aXRsZV09XCJvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIicuLi9hc3NldHMvaWNvbnMvJyArIG9wdGlvbi5pY29uICsgJy5zdmcnXCIgW2FsdF09XCJvcHRpb24udmFsdWVcIiBjbGFzcz1cImljb24tc2l6ZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRmllbGQgU2l6ZSBDb250cm9scyAtLT5cbiAgICAgICAgICA8IS0tIEFQIDI1RkVCMjUgLSBDaGFuZ2Uga2V5IHNpemUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnc2l6ZSdcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNpemUtbGFiZWxcIj5XaWR0aDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LnNpemVcIiAoaW5wdXQpPVwidXBkYXRlUHJvcGVydHkoJ3NpemUnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2l6ZS1pbnB1dFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiICpuZ0lmPVwiYWN0aXZlVGFiID09PSAncHJvcGVydHknXCI+XG4gICAgPCEtLSBGaWVsZCBFbGVtZW50cyBQcm9wZXJ0aWVzIC0tPlxuICAgIDwhLS0gQVAtMDZNQVIyNSBTaG93IGVsZW1lbnRzIElEICAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0UHJvcGVydGllcygpXCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAxM3B4OyBwYWRkaW5nOjVweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOiNlZmY4ZmY7XCI+IGlkIDoge3sgaGVhZGVyU2VsZWN0ID9cbiAgICAgICAgYm9va0lkIDogc2VsZWN0ZWRFbGVtZW50LmlkfX08L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb3Agb2YgZ2V0UHJvcGVydGllcygpLmZpZWxkUHJvcHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgcHJvcC5sYWJlbCB9fTwvbGFiZWw+XG5cbiAgICAgICAgICA8IS0tIElucHV0IEJveCAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICd0ZXh0J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIiAoaW5wdXQpPVwidXBkYXRlUHJvcGVydHkocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cblxuICAgICAgICAgIDwhLS0gUmFkaW8gR3JvdXAgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3JhZGlvJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpemVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdhcFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2NoZWNrZWRdPVwic2VsZWN0ZWRFbGVtZW50Py5pc1JlcXVpcmVkXCIgKGNoYW5nZSk9XCJvblJlcXVpcmVkQ2hhbmdlKHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlcXVpcmVkXCIgY2xhc3M9XCJyYWRpby1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsXCI+IFJlcXVpcmVkIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtaXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbY2hlY2tlZF09XCIhc2VsZWN0ZWRFbGVtZW50Py5pc1JlcXVpcmVkXCIgKGNoYW5nZSk9XCJvblJlcXVpcmVkQ2hhbmdlKGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXF1aXJlZFwiIGNsYXNzPVwicmFkaW8taW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNDAwXCI+IE5vdCBSZXF1aXJlZCA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBBUCAyNUZFQjI1IC0gaGFuZGxlZCBvcHRpb25zIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicHJvcC50eXBlID09PSAnZHJvcGRvd24nIHx8IHByb3AudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wLnR5cGUgPT09ICdyYWRpbycgJiYgcHJvcC5rZXkgPT09ICdvcHRpb25zJ1wiXG4gICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwib3B0aW9uLWl0ZW1zXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVtpXS52YWx1ZVwiIHBsYWNlaG9sZGVyPVwiT3B0aW9uIHt7IGkgKyAxIH19XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnNcIiAvPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKHNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV0sIGkpXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZE9wdGlvbihzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLXZhcmllbnRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGdcIj4rPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdhcHBlYXJhbmNlJ1wiPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRQcm9wZXJ0aWVzKClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb3Agb2YgZ2V0UHJvcGVydGllcygpLmFwcGVhcmFuY2VcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgcHJvcC5sYWJlbCB9fTwvbGFiZWw+XG5cbiAgICAgICAgICA8IS0tIElucHV0IEJveCAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICd0ZXh0J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIiAoaW5wdXQpPVwidXBkYXRlUHJvcGVydHkocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cblxuICAgICAgICAgIDwhLS0gUmFkaW8gR3JvdXAgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3JhZGlvJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2NoZWNrZWRdPVwic2VsZWN0ZWRFbGVtZW50Py5pc1JlcXVpcmVkXCIgKGNoYW5nZSk9XCJvblJlcXVpcmVkQ2hhbmdlKHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlcXVpcmVkXCIgY2xhc3M9XCJyYWRpby1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsXCI+IFJlcXVpcmVkIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtaXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbY2hlY2tlZF09XCIhc2VsZWN0ZWRFbGVtZW50Py5pc1JlcXVpcmVkXCIgKGNoYW5nZSk9XCJvblJlcXVpcmVkQ2hhbmdlKGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXF1aXJlZFwiIGNsYXNzPVwicmFkaW8taW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNDAwXCI+IE5vdCBSZXF1aXJlZCA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBBUCAyNUZFQjI1IC0gaGFuZGxlZCBvcHRpb25zIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicHJvcC50eXBlID09PSAnZHJvcGRvd24nIHx8IHByb3AudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wLnR5cGUgPT09ICdyYWRpbycgJiYgcHJvcC5rZXkgPT09ICdvcHRpb25zJ1wiXG4gICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwib3B0aW9uLWl0ZW1zXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVtpXS52YWx1ZVwiIHBsYWNlaG9sZGVyPVwiT3B0aW9uIHt7IGkgKyAxIH19XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnNcIiAvPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKHNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV0sIGkpXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZE9wdGlvbihzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLXZhcmllbnRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGdcIj4rPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnRuXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwic2F2ZS1idG5cIiAoY2xpY2spPVwib25TYXZlKClcIj5TYXZlPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
730
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYnVpbGRlci9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL2J1aWxkZXIvcHJvcGVydGllcy9wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRMUcsTUFBTSxPQUFPLG1CQUFtQjtJQXNkVjtJQUEwQjtJQXBkcEMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN0RCxjQUFjLEdBQVcsRUFBRSxDQUFDO0lBQzVCLG9CQUFvQixHQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLG1CQUFtQixHQUFXLEVBQUUsQ0FBQztJQUMxQyxhQUFhLEdBQVcsWUFBWSxDQUFDLENBQUUsb0JBQW9CO0lBQzNELGNBQWMsR0FBYSxFQUFFLENBQUMsQ0FBRSxvREFBb0Q7SUFDcEYsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixlQUFlLEdBQVEsSUFBSSxDQUFDLENBQUUsK0JBQStCO0lBQzdELFlBQVksR0FBWSxLQUFLLENBQUM7SUFDOUIsTUFBTSxDQUFNO0lBQ1osSUFBSSxDQUFNO0lBQ1YsU0FBUyxHQUFXLFlBQVksQ0FBQztJQUNqQyxZQUFZLENBQUs7SUFFakIsaUJBQWlCLEdBQUc7UUFDbEIscUVBQXFFO1FBQ3JFLFFBQVEsRUFBRTtZQUNSLFlBQVksRUFBRTtnQkFDWixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFF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Q3pMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7d0dBOXZCWSxtQkFBbUI7NEZBQW5CLG1CQUFtQixtS0NWaEMsK2hXQTROTTs7NEZEbE5PLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxnQkFBZ0I7Z0hBTWhCLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFHRSxtQkFBbUI7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBUCAyMkpBTjI1XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS1idWlsZGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcHJvcGVydGllcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvcGVydGllcy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJvcGVydGllc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQE91dHB1dCgpIGZvcm1CdXR0b25IYW5kbGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRFbGVtZW50SW5kZXg6IG51bWJlciA9IC0xO1xuICBASW5wdXQoKSBzZWxlY3RlZEVsZW1lbnRUeXBlOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRBbGlnbjogc3RyaW5nID0gJ2FsaWduLWxlZnQnOyAgLy8gQWRkIHRoaXMgcHJvcGVydHlcbiAgc2VsZWN0ZWRTdHlsZXM6IHN0cmluZ1tdID0gW107ICAvLyBVc2luZyBhcnJheSBzaW5jZSBtdWx0aXBsZSBzdHlsZXMgY2FuIGJlIHNlbGVjdGVkXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkRWxlbWVudDogYW55ID0gbnVsbDsgIC8vIFJlY2VpdmUgdGhlIHNlbGVjdGVkIGVsZW1lbnRcbiAgaGVhZGVyU2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIGJvb2tJZDogYW55O1xuICBib29rOiBhbnk7XG4gIGFjdGl2ZVRhYjogc3RyaW5nID0gJ2F0dHJpYnV0ZXMnO1xuICBzZWxlY3RDb2x1bW4gOmFueVxuXG4gIGVsZW1lbnRQcm9wZXJ0aWVzID0ge1xuICAgIC8vIEFQLTEwTUFSMjUgLSBEZWZpbmVzIHRoZSBIZWFkZXIgZWxlbWVudCB3aXRoIGEgdGV4dCBpbnB1dCBmaWVsZCAgIFxuICAgICdIZWFkZXInOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICd0aXRsZScgfV1cbiAgICB9LFxuXG4gICAgJ1RleHQnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcblxuICAgICAgICAvLyBxdWVzdGlvblRleHQgLSBMYWJlbC1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG5cbiAgICAgICAgLy8gcXVlc3Rpb24gLSBQbGFjZWhvbGRlci1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuXG4gICAgICAgIC8vIGVycm9yTWVzc2FnZSAtIEVycm9yIE1zZy1mb2xsb3cgYWxsIGVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250JywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnQnLFxuICAgICAgICAgIG9wdGlvbnM6IFsnSGVsdmV0aWNhIE5ldWUnLCAnQXJpYWwnLCAnVGltZXMgTmV3IFJvbWFuJywgJ1JvYm90byddXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ1dlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IHZhbHVlOiAnNDAwJywgbGFiZWw6ICc0MDAtTm9ybWFsJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzUwMCcsIGxhYmVsOiAnNTAwLU1lZGl1bScgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc2MDAnLCBsYWJlbDogJzYwMC1TZW1pIEJvbGQnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNzAwJywgbGFiZWw6ICc3MDAtQm9sZCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfVxuXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nLCBrZXk6ICdpc1JlcXVpcmVkJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ2RlZmF1bHRWYWx1ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YlRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3N1YlRleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgJ0NoZWNrYm94Jzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnT3B0aW9ucycsXG4gICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICBrZXk6ICdvcHRpb25zJyxcbiAgICAgICAgICBhZGRPcHRpb25MYWJlbDogJ0FkZCBPcHRpb24nLFxuICAgICAgICAgIGljb246ICdwbHVzJ1xuICAgICAgICB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcsIGtleTogJ3N0eWxlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3N1YlRleHQnIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgJ0NhbGVuZGFyJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcbiAgICAvLyBBUC0xMk1BUjI1IC0gQWRkZWQgRGF0ZSBlbGVtZW50IFByb3BlcnRpZXNcbiAgICAnRGF0ZSc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdzaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdlcnJvck1lc3NhZ2UnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnRW1haWwnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ09yZGVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ29yZGVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcsIGtleTogJ3N0eWxlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3N1YlRleHQnIH1cbiAgICAgIF1cbiAgICB9LCBcbiAgICBcIlRhYmxlXCI6IHtcbiAgICAgIFwiZWxlbWVudFByb3BzXCI6IFtcbiAgICAgICAgeyBcImxhYmVsXCI6IFwidGFibGVOYW1lXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBsb3llZSBEZXRhaWxzXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJxdWVzdGlvblRleHRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJpbnB1dFRleHRBbGlnbm1lbnRcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkxlZnRcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInRhYmxlU2NhbGVTaXplXCIsIFwicGxhY2Vob2xkZXJcIjogXCIwNiAtIEZ1bGwgU2NhbGVcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmxlU2NhbGVTaXplXCIgfSxcblxuICAgICAgICB7IFwibGFiZWxcIjogXCJpc05vc0luZGljYXRvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiMDYgLSBGdWxsIFNjYWxlXCIsIFwidHlwZVwiOiBcImNoZWNrYm94XCIsIFwia2V5XCI6IFwiZmllbGRzTWV0YS4wLnRhYmxlQ29uZmlnLmlzTm9zSW5kaWNhdG9yXCJ9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJpc1BhZ2luYXRpb25cIiwgXCJwbGFjZWhvbGRlclwiOiBcIjA2IC0gRnVsbCBTY2FsZVwiLCBcInR5cGVcIjogXCJjaGVja2JveFwiLCBcImtleVwiOiBcImZpZWxkc01ldGEuMC50YWJsZUNvbmZpZy5pc1BhZ2luYXRpb25cIn0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFkZElubGluZVJlY29yZFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiMDYgLSBGdWxsIFNjYWxlXCIsIFwidHlwZVwiOiBcImNoZWNrYm94XCIsIFwia2V5XCI6IFwiZmllbGRzTWV0YS4wLnRhYmxlQ29uZmlnLmFkZElubGluZVJlY29yZFwifSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiYWN0aW9uQnV0dG9uXCIsIFwicGxhY2Vob2xkZXJcIjogXCIwNiAtIEZ1bGwgU2NhbGVcIiwgXCJ0eXBlXCI6IFwiY2hlY2tib3hcIiwgXCJrZXlcIjogXCJmaWVsZHNNZXRhLjAudGFibGVDb25maWcuYWN0aW9uQnV0dG9uXCJ9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJzZWFyY2hCYXJcIiwgXCJwbGFjZWhvbGRlclwiOiBcIjA2IC0gRnVsbCBTY2FsZVwiLCBcInR5cGVcIjogXCJjaGVja2JveFwiLCBcImtleVwiOiBcImZpZWxkc01ldGEuMC50YWJsZUNvbmZpZy5zZWFyY2hCYXJcIn0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlzRGVsZXRlUm93XCIsIFwicGxhY2Vob2xkZXJcIjogXCIwNiAtIEZ1bGwgU2NhbGVcIiwgXCJ0eXBlXCI6IFwiY2hlY2tib3hcIiwgXCJrZXlcIjogXCJmaWVsZHNNZXRhLjAudGFibGVDb25maWcuaXNEZWxldGVSb3dcIn0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlzRWRpdFJvd1wiLCBcInBsYWNlaG9sZGVyXCI6IFwiMDYgLSBGdWxsIFNjYWxlXCIsIFwidHlwZVwiOiBcImNoZWNrYm94XCIsIFwia2V5XCI6IFwiZmllbGRzTWV0YS4wLnRhYmxlQ29uZmlnLmlzRWRpdFJvd1wifSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaXNCdXR0b25zXCIsIFwicGxhY2Vob2xkZXJcIjogXCIwNiAtIEZ1bGwgU2NhbGVcIiwgXCJ0eXBlXCI6IFwiY2hlY2tib3hcIiwgXCJrZXlcIjogXCJmaWVsZHNNZXRhLjAudGFibGVDb25maWcuaXNCdXR0b25zXCJ9LFxuXG5cbiAgICAgICAgeyBcImxhYmVsXCI6IFwicm93Q2hvaWNlXCIsIFwicGxhY2Vob2xkZXJcIjogXCJcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJvd0Nob2ljZVwiIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsXCI6IFwicXVpY2tBY3Rpb25Ub29sc1wiLFxuICAgICAgICAgIFwidHlwZVwiOiBcImdyb3VwXCIsXG4gICAgICAgICAgXCJrZXlcIjogXCJxdWlja0FjdGlvblRvb2xzXCIsXG4gICAgICAgICAgXCJjaGlsZHJlblwiOiBbXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJlZGl0XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImVkaXRcIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwidmlld1wiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJ2aWV3XCIgfSxcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImRlbGV0ZVwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJkZWxldGVcIiB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAncXVlc3Rpb25OdW1iZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFkZFJlY29yZEV2ZW50XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImFkZFJlY29yZEV2ZW50XCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJ0YWJsZVNjcm9sbEV2ZW50Q2hvaWNlXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInRhYmxlU2Nyb2xsRXZlbnRDaG9pY2VcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImhvcml6b250YWxcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaG9yaXpvbnRhbFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2ZXJ0aWNhbFwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJ2ZXJ0aWNhbFwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImZpZWxkUHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJlbElkXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBfVGFiZWxfMDFcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmVsSWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJpbnB1dFRleHRBbGlnbm1lbnRcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkxlZnRcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlcXVpcmVkRmllbGRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwicmVxdWlyZWRGaWVsZFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlYWRPbmx5XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcInJlYWRPbmx5XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGlkZUxhYmVsXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImhpZGVMYWJlbFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImRpc2FibGVkXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImRpc2FibGVkXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGlkZUVsZW1lbnRzXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImhpZGVFbGVtZW50c1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcIm1hc2tpbmdcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwibWFza2luZ1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImhlbHBUZXh0XCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbnRlciBoZWxwIG1lc3NhZ2UgaGVyZVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaGVscFRleHRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJkZWZhdWx0VmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkRlZmF1bHQgVmFsdWVcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImRlZmF1bHRWYWx1ZVwiIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiY29udHJvbGxpbmdFbGVtZW50c1wiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJjb250cm9sbGluZ0VsZW1lbnRzXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaXNEZXBlbmRlbmNlXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImlzRGVwZW5kZW5jZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcIm5ld0xpbmVcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwibmV3TGluZVwiIH1cbiAgICAgIF0sXG4gICAgICBcImFwcGVhcmFuY2VcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJzZWxlY3RGb250XCIsIFwicGxhY2Vob2xkZXJcIjogXCJMZWZ0XCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJzZWxlY3RGb250XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiZm9udENvbG9yXCIsIFwicGxhY2Vob2xkZXJcIjogXCIjMjgzNDNFXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJmb250Q29sb3JcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJoZXhDb2RlXCIsIFwicGxhY2Vob2xkZXJcIjogXCIjMjgzNDNFXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJoZXhDb2RlXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiZm9udFNpemVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIjMwMCAtIE1lZGl1bVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiZm9udFNpemVcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJmb250V2lkdGhcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkxlZnRcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImZvbnRXaWR0aFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJhY2tncm91bmRDb2xvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiI0UyRTJFMlwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiYmFja2dyb3VuZENvbG9yXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiYmFja2dyb3VuZEhleENvZGVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIiNFMkUyRTJcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImJhY2tncm91bmRIZXhDb2RlXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwicmVmZXJlbmNlQW5jaG9yXCIsIFwicGxhY2Vob2xkZXJcIjogXCJodHRwOi8vc291cmNlL3Jhbmdlcm54dF9iaW9fZGF0YS83NC9kLmRvY1wiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwicmVmZXJlbmNlQW5jaG9yXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiYmxhbmtTcGFjZVwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJibGFua1NwYWNlXCIgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJUYWJsZUNvbHVtblwiOiB7XG4gICAgICBcImVsZW1lbnRQcm9wc1wiOiBbXG5cbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGVhZGVyTGFiZWxzXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBsb3llZSBEZXRhaWxzXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJ0YXJnZXRBcnJheVwiOiBcImZpZWxkc01ldGFcIiwgXCJ0YXJnZXRBcnJheUtleVwiOlwiYXBpTmFtZVwiLFwia2V5XCI6XCJsYWJlbFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFwaU5hbWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6XCJhcGlOYW1lXCIsXCJrZXlcIjpcImFwaU5hbWVcIiB9LFxuXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaW5wdXRUZXh0QWxpZ25tZW50XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwidGFibGVTY2FsZVNpemVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIjA2IC0gRnVsbCBTY2FsZVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwidGFibGVTY2FsZVNpemVcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJyb3dDaG9pY2VcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwicm93Q2hvaWNlXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJxdWlja0FjdGlvblRvb2xzXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInF1aWNrQWN0aW9uVG9vbHNcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImVkaXRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiZWRpdFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2aWV3XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcInZpZXdcIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwiZGVsZXRlXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImRlbGV0ZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFkZFJlY29yZEV2ZW50XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImFkZFJlY29yZEV2ZW50XCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJ0YWJsZVNjcm9sbEV2ZW50Q2hvaWNlXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInRhYmxlU2Nyb2xsRXZlbnRDaG9pY2VcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImhvcml6b250YWxcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaG9yaXpvbnRhbFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2ZXJ0aWNhbFwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJ2ZXJ0aWNhbFwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImZpZWxkUHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJlbElkXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBfVGFiZWxfMDFcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmVsSWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJpbnB1dFRleHRBbGlnbm1lbnRcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkxlZnRcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlcXVpcmVkRmllbGRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwicmVxdWlyZWRGaWVsZFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlYWRPbmx5XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcInJlYWRPbmx5XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGlkZUxhYmVsXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImhpZGVMYWJlbFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImRpc2FibGVkXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImRpc2FibGVkXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGlkZUVsZW1lbnRzXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImhpZGVFbGVtZW50c1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcIm1hc2tpbmdcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwibWFza2luZ1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImhlbHBUZXh0XCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbnRlciBoZWxwIG1lc3NhZ2UgaGVyZVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaGVscFRleHRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJkZWZhdWx0VmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkRlZmF1bHQgVmFsdWVcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImRlZmF1bHRWYWx1ZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImNvbnRyb2xsaW5nRWxlbWVudHNcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiY29udHJvbGxpbmdFbGVtZW50c1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlzRGVwZW5kZW5jZVwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJpc0RlcGVuZGVuY2VcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJuZXdMaW5lXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcIm5ld0xpbmVcIiB9XG4gICAgICBdLFxuICAgICAgXCJhcHBlYXJhbmNlXCI6IFtcbiAgICAgICAgeyBcImxhYmVsXCI6IFwic2VsZWN0Rm9udFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwic2VsZWN0Rm9udFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRDb2xvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiZm9udENvbG9yXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGV4Q29kZVwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRTaXplXCIsIFwicGxhY2Vob2xkZXJcIjogXCIzMDAgLSBNZWRpdW1cIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImZvbnRTaXplXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiZm9udFdpZHRoXCIsIFwicGxhY2Vob2xkZXJcIjogXCJMZWZ0XCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJmb250V2lkdGhcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCJwbGFjZWhvbGRlclwiOiBcIiNFMkUyRTJcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImJhY2tncm91bmRDb2xvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJhY2tncm91bmRIZXhDb2RlXCIsIFwicGxhY2Vob2xkZXJcIjogXCIjRTJFMkUyXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJiYWNrZ3JvdW5kSGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJsYW5rU3BhY2VcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiYmxhbmtTcGFjZVwiIH1cbiAgICAgIF1cbiAgICB9LFxuICAgICdGaWxlJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcblxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTdXBwb3J0IFR5cGUnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnc3VwcG9ydFR5cGUnLCBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnSW1hZ2VzIChKUEVHLCBQTkcsIEdJRiknLCB2YWx1ZTogJ2ltYWdlLyonLCBleHRlbnNpb25zOiBbJy5qcGcnLCAnLmpwZWcnLCAnLnBuZycsICcuZ2lmJ10gfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdBdWRpbyAoTVAzLCBXQVYsIEFJRkYpJywgdmFsdWU6ICdhdWRpby8qJywgZXh0ZW5zaW9uczogWycubXAzJywgJy53YXYnLCAnLmFpZmYnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1ZpZGVvIChNUDQsIEFWSSwgSEVWQyknLCB2YWx1ZTogJ3ZpZGVvLyonLCBleHRlbnNpb25zOiBbJy5tcDQnLCAnLmF2aScsICcuaGV2YyddIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnRG9jdW1lbnRzIChET0MsIERPQ1gsIFBQVCwgUERGKScsIHZhbHVlOiAnYXBwbGljYXRpb24vcGRmLGFwcGxpY2F0aW9uL21zd29yZCxhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCxhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsIGV4dGVuc2lvbnM6IFsnLmRvYycsICcuZG9jeCcsICcucHB0JywgJy5wZGYnXSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0V4ZWN1dGFibGVzIChFWEUsIEJBRCwgU0gpJywgdmFsdWU6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQsYXBwbGljYXRpb24veC1zaCcsIGV4dGVuc2lvbnM6IFsnLmV4ZScsICcuYmFkJywgJy5zaCddIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQXJjaGl2ZXMgKFpJUCwgUkFSLCBHaXQtaHViKScsIHZhbHVlOiAnYXBwbGljYXRpb24vemlwLGFwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQsYXBwbGljYXRpb24veC1naXQnLCBleHRlbnNpb25zOiBbJy56aXAnLCAnLnJhcicsICcuZ2l0J10gfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcblxuICAgICdMaXN0Jzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcblxuICAgICdUZXh0QXJlYSc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdzaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdlcnJvck1lc3NhZ2UnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nLCBrZXk6ICdyZXF1aXJlZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2RlZmF1bHRWYWx1ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcblxuICAgICdSaWNoVGV4dEFyZWEnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ09yZGVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ29yZGVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJywga2V5OiAncmVxdWlyZWQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdkZWZhdWx0VmFsdWUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnTnVtYmVyJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb25UZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUGxhY2UgSG9sZGVyJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvbicgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnaGVscFRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdPcmRlcicsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdvcmRlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBTaXplJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3NpemUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFcnJvciBNc2cnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2Vycm9yTWVzc2FnZScgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdGaWVsZCBSZXF1aXJlZCcsIHR5cGU6ICdyYWRpbycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmFsdWUnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N0eWxlJywgcGxhY2Vob2xkZXI6ICdTdHlsZSBKU09OJywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdHlsZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ1N1YiBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdzdWJUZXh0JyB9XG4gICAgICBdXG4gICAgfSxcblxuICAgICdEcm9wZG93bic6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdzaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdlcnJvck1lc3NhZ2UnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ09wdGlvbnMnLFxuICAgICAgICAgIHR5cGU6ICdkcm9wZG93bicsXG4gICAgICAgICAga2V5OiAnb3B0aW9ucycsXG4gICAgICAgICAgYWRkT3B0aW9uTGFiZWw6ICdBZGQgVmFyaWFudCcsXG4gICAgICAgICAgaWNvbjogJ3BsdXMnXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuXG4gICAgICBdXG4gICAgfSxcblxuICAgICdJbWFnZSc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnTGFiZWwnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ2hlbHBUZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnT3JkZXInLCB0eXBlOiAnbnVtYmVyJywga2V5OiAnb3JkZXInIH0sXG4gICAgICAgIHsgbGFiZWw6ICcnLCB0eXBlOiAndG9nZ2xlR3JvdXAnLCBrZXk6ICd0b2dnbGVPcHRpb25zJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICdzaXplJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXJyb3IgTXNnJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdlcnJvck1lc3NhZ2UnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRmllbGQgUmVxdWlyZWQnLCB0eXBlOiAncmFkaW8nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnUmFkaW8nOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ09yZGVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ29yZGVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdPcHRpb25zJyxcbiAgICAgICAgICB0eXBlOiAncmFkaW8nLFxuICAgICAgICAgIGtleTogJ29wdGlvbnMnLFxuICAgICAgICAgIGFkZE9wdGlvbkxhYmVsOiAnQWRkIE9wdGlvbicsXG4gICAgICAgICAgaWNvbjogJ3BsdXMnXG4gICAgICAgIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdHlsZScsIHBsYWNlaG9sZGVyOiAnU3R5bGUgSlNPTicsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3R5bGUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTdWIgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnc3ViVGV4dCcgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICAnTGFiZWwnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xhYmVsJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdxdWVzdGlvblRleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnSGVscCBUZXh0JywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0JywgdHlwZTogJ3RleHQnLCBrZXk6ICdoZWxwVGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ09yZGVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ29yZGVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFNpemUnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnc2l6ZScgfSxcbiAgICAgICAgeyBsYWJlbDogJ0Vycm9yIE1zZycsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAnZXJyb3JNZXNzYWdlJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0ZpZWxkIFJlcXVpcmVkJywgdHlwZTogJ3JhZGlvJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3R5bGUnLCBwbGFjZWhvbGRlcjogJ1N0eWxlIEpTT04nLCB0eXBlOiAndGV4dCcsIGtleTogJ3N0eWxlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3ViIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3N1YlRleHQnIH1cbiAgICAgIF1cbiAgICB9XG5cbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgZm9ybUJ1aWxkZXJTZXJ2aWNlOiBGb3JtQnVpbGRlclNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vQVAtMTBNQVIyNSBTdWJzY3JpYmVzIHRvIGhlYWRlciBzZWxlY3Rpb24gY2hhbmdlcyBhbmQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudCAgXG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2Uuc2VsZWN0SGVhZGVyU3ViamVjdCQuc3Vic2NyaWJlKGhlYWRlciA9PiB7XG4gICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50Wyd0eXBlJ10gPSBoZWFkZXI7XG4gICAgICAgIHRoaXMuaGVhZGVyU2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ib29rID0gdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZ2V0Qm9vaygpO1xuICAgICAgICB0aGlzLmJvb2tJZCA9IHRoaXMuYm9vay5yZWNvcmRzWzBdLmlkO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2Uuc2VsZWN0ZWRFbGVtZW50JC5zdWJzY3JpYmUoaW5kZXggPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCA9IGluZGV4O1xuICAgICAgdGhpcy5oZWFkZXJTZWxlY3QgPSBmYWxzZTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZ2V0RWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQgPSBlbGVtZW50c1tpbmRleF07XG4gICAgICB9XG4gICAgICBpZih0aGlzLnNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJyl7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50WydmaWVsZHNNZXRhJ10gPSB0eXBlb2YgdGhpcy5zZWxlY3RlZEVsZW1lbnQuZmllbGRzTWV0YSA9PT0gJ29iamVjdCcgPyB0aGlzLnNlbGVjdGVkRWxlbWVudC5maWVsZHNNZXRhIDogIEpTT04ucGFyc2UodGhpcy5zZWxlY3RlZEVsZW1lbnRbJ2ZpZWxkc01ldGEnXSB8fCBbe31dKTtcbiAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW4gPSB0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5nZXRTZWxlY3RUYWJsZUNvbHVtbigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdENvbHVtbiA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZlVGFiPSAnYXR0cmlidXRlcydcbiAgICAgIHRoaXMuZ2V0UHJvcGVydGllcygpIFxuICAgIH0pO1xuICB9XG4gIC8vQVAtMTBNQVIyNSBVcGRhdGVzIHRoZSB0aXRsZSB1c2luZyB0aGUgZm9ybSBidWlsZGVyIHNlcnZpY2UgIFxuICB1cGRhdGVUaXRsZShldmVudDogYW55KSB7XG4gICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UudXBkYXRlVGl0bGUoZXZlbnQpO1xuICB9XG4gIHZhbGlkYXRlSW5wdXQodmFsdWU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGUgPT09ICdsYWJlbCcgfHwgdHlwZSA9PT0gJ3BsYWNlaG9sZGVyJykge1xuICAgICAgY29uc3QgcmVnZXggPSAvXlthLXpBLVowLTlcXHNdKiQvO1xuICAgICAgaWYgKCFyZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdPbmx5IGxldHRlcnMgYW5kIG51bWJlcnMgYXJlIGFsbG93ZWQnO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuXG4gIHVwZGF0ZVByb3BlcnR5KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgaWYodGhpcy5zZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ1RhYmxlJyl7XG4gICAgICAgIHRoaXMuc2V0VmFsdWVCeVBhdGgoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAncXVlc3Rpb25UZXh0JyB8fCBrZXkgPT09ICdxdWVzdGlvbicpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlSW5wdXQodmFsdWUsIGtleSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdxdWVzdGlvbk51bWJlcicpIHtcbiAgICAgICAgLy9BUC0xME1BUjI1IENvbnZlcnQgdGhlIHZhbHVlIHRvIGFuIGludGVnZXIgIFxuICAgICAgICBjb25zdCBuZXdPcmRlciA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgIGlmIChpc05hTihuZXdPcmRlcikpIHJldHVybjtcblxuICAgICAgICAvL0FQLTEwTUFSMjUgVXBkYXRlIHRoZSBlbGVtZW50J3Mgb3JkZXIgaW4gdGhlIGZvcm0gYnVpbGRlciBzZXJ2aWNlICBcbiAgICAgICAgdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UudXBkYXRlRWxlbWVudCh0aGlzLnNlbGVjdGVkRWxlbWVudEluZGV4LCB7IHF1ZXN0aW9uTnVtYmVyOiBuZXdPcmRlciB9KTtcblxuICAgICAgICAvL0FQLTEwTUFSMjUgU29ydCBlbGVtZW50cyBiYXNlZCBvbiB0aGUgdXBkYXRlZCBvcmRlciAgXG4gICAgICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnNvcnRFbGVtZW50c0J5T3JkZXIoKTtcbiAgICAgIH1cblxuXG4gICAgICBpZiAoa2V5ID09PSAnZm9udFdlaWdodCcpIHtcbiAgICAgICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBudW1iZXIgdmFsdWUgZnJvbSB0aGUgb3B0aW9uXG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJy0nKVswXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ3N0eWxlcycpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0eWxlcyA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlcyB8fCBbXTtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnY2FwaXRhbGl6ZScgfHwgdmFsdWUgPT09ICdsb3dlcmNhc2UnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcHBvc2l0ZSBjYXNlIGlmIGl0IGV4aXN0c1xuICAgICAgICAgIGNvbnN0IG9wcG9zaXRlU3R5bGUgPSB2YWx1ZSA9PT0gJ2NhcGl0YWxpemUnID8gJ2xvd2VyY2FzZScgOiAnY2FwaXRhbGl6ZSc7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRTdHlsZXMgPSBjdXJyZW50U3R5bGVzLmZpbHRlcihzID0+IHMgIT09IG9wcG9zaXRlU3R5bGUpO1xuICAgICAgICAgIHZhbHVlID0gY3VycmVudFN0eWxlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICAgID8gZmlsdGVyZWRTdHlsZXMuZmlsdGVyKHMgPT4gcyAhPT0gdmFsdWUpXG4gICAgICAgICAgICA6IFsuLi5maWx0ZXJlZFN0eWxlcywgdmFsdWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRvZ2dsZSBvdGhlciBzdHlsZXNcbiAgICAgICAgICB2YWx1ZSA9IGN1cnJlbnRTdHlsZXMuaW5jbHVkZXModmFsdWUpXG4gICAgICAgICAgICA/IGN1cnJlbnRTdHlsZXMuZmlsdGVyKHMgPT4gcyAhPT0gdmFsdWUpXG4gICAgICAgICAgICA6IFsuLi5jdXJyZW50U3R5bGVzLCB2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlID0geyBba2V5XTogdmFsdWUgfTtcbiAgICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZUVsZW1lbnQodGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCwgdXBkYXRlKTtcblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgZm9udCBhbmQgZm9udCB3ZWlnaHRcbiAgICAgIGlmIChrZXkgPT09ICdmb250Jykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5mb250ID0gdmFsdWU7IC8vIERpcmVjdGx5IHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCdzIGZvbnQgcHJvcGVydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVpcmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XG4gICAgICBsZXQgbGFiZWwgPSB0aGlzLnNlbGVjdGVkRWxlbWVudC5sYWJlbCA/IHRoaXMuc2VsZWN0ZWRFbGVtZW50LmxhYmVsLnJlcGxhY2UoL1xccypcXCorJC8sICcnKSA6ICdMYWJlbCc7XG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBsYWJlbCA9IGAke2xhYmVsfSAqYDtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0eSgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICB0aGlzLnVwZGF0ZVByb3BlcnR5KCdpc1JlcXVpcmVkJywgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRWxlbWVudCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBBUC0xME1BUjI1IFJldHJpZXZlIHRoZSBsYXRlc3QgYm9vayBkYXRhXG4gICAgdGhpcy5ib29rID0gdGhpcy5mb3JtQnVpbGRlclNlcnZpY2UuZ2V0Qm9vaygpO1xuXG4gICAgLy8gQVAtMTBNQVIyNSBJZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBhICdIZWFkZXInLCByZXR1cm4gaXRzIHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnR5cGUgPT09ICdIZWFkZXInKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllc1snSGVhZGVyJ107XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJykge1xuICAgICAgaWYodGhpcy5zZWxlY3RDb2x1bW4gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdENvbHVtbiAhPT0gbnVsbCl7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzWydUYWJsZUNvbHVtbiddO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllc1t0aGlzLnNlbGVjdGVkRWxlbWVudD8udHlwZV07XG4gIH1cblxuICBhZGRPcHRpb24ob3B0aW9uczogYW55W10pIHtcbiAgICBvcHRpb25zLnB1c2goeyBsYWJlbDogJycsIHZhbHVlOiAnJyB9KTtcbiAgfVxuXG4gIHJlbW92ZU9wdGlvbihvcHRpb25zOiBhbnlbXSwgaW5kZXg6IG51bWJlcikge1xuICAgIG9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIGhhbmRsZUJ1dHRvbkNsaWNrKCkge1xuICAgIHRoaXMuZm9ybUJ1dHRvbkhhbmRsZXIuZW1pdCh0aGlzLmZvcm1CdWlsZGVyU2VydmljZS5kb3dubG9hZEVsZW1lbnQoKSk7XG4gIH1cblxuICAvLyBTS1MxM01BUjI1IGFjdGl2ZSB0YWIgc2VsZWN0XG4gIHNldEFjdGl2ZVRhYih0YWI6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICB9XG4gIC8vIFNLUzEzTUFSMjUgdGFibGUgcHJvcGVydHkgc2F2ZVxuICBvblNhdmUoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1NhdmluZyBkYXRhOicpO1xuICB9XG4gIC8vIFNLUzEzTUFSMjUgdGFibGUgcHJvcGVydHkgcmVzZXRcbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ09wZXJhdGlvbiBjYW5jZWxsZWQnKTtcbiAgfVxuXG4gIC8vIG9uVG9nZ2xlQ2hhbmdlKGtleTogc3RyaW5nLCBldmVudDogRXZlbnQpIHtcbiAgLy8gICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAvLyAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50ID0geyAuLi50aGlzLnNlbGVjdGVkRWxlbWVudCwgW2tleV06IGNoZWNrZWQgfTtcbiAgLy8gICB0aGlzLnVwZGF0ZVByb3BlcnR5KGtleSwgY2hlY2tlZCk7IC8vQVAtMDZNQVIyNSBCdWcgRml4ZWRcbiAgLy8gfVxuXG4gIHVwZGF0ZVByb3BlcnRpZXMoZWxlbWVudFR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGFsaWdubWVudCBhbmQgc3R5bGVzIGlmIHN3aXRjaGluZyBlbGVtZW50c1xuICAgIHRoaXMuc2VsZWN0ZWRBbGlnbiA9ICdhbGlnbi1sZWZ0JztcbiAgICB0aGlzLnNlbGVjdGVkU3R5bGVzID0gW107XG5cbiAgICAvLyBGZXRjaCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCB0eXBlXG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCk7XG4gICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcHJvcGVydGllcyBhcmUgZHluYW1pY2FsbHkgdXBkYXRlZFxuICAgIH1cbiAgfVxuXG4gIG9uQWxpZ25TZWxlY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQudGV4dEFsaWduID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgb25TdHlsZVNlbGVjdCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzdHlsZXMgYXJyYXkgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlcyA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlcyB8fCBbXTtcblxuICAgIC8vIEVuc3VyZSBvbmx5IG9uZSBzdHlsZSBpcyBzZWxlY3RlZCBhdCBhIHRpbWVcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5zdHlsZXMgPSBbdmFsdWVdO1xuXG4gIH1cblxuICBpc1N0eWxlQWN0aXZlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnN0eWxlcz8uaW5jbHVkZXModmFsdWUpIHx8IGZhbHNlO1xuICB9XG4gIGdldFZhbHVlQnlQYXRoKHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgaWYodGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnR5cGUgPT09ICdUYWJsZScpe1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRbJ2ZpZWxkc01ldGEnXSA9IHR5cGVvZiB0aGlzLnNlbGVjdGVkRWxlbWVudD8uZmllbGRzTWV0YSA9PT0gJ29iamVjdCcgID8gdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LmZpZWxkc01ldGEgOiBKU09OLnBhcnNlKHRoaXMuc2VsZWN0ZWRFbGVtZW50WydmaWVsZHNNZXRhJ10gfHwgW3t9XSk7XG4gICAgfVxuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChvYmosIGtleSkgPT4gb2JqPy5ba2V5XSA/PyB0cnVlLCB0aGlzLnNlbGVjdGVkRWxlbWVudCk7XG4gIH0gIFxuICBcbiAgb25Ub2dnbGVDaGFuZ2UocGF0aDogc3RyaW5nLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgIHRoaXMuc2V0VmFsdWVCeVBhdGgocGF0aCwgY2hlY2tlZCk7XG4gICAgY29uc29sZS5sb2coXCJkYXRhIGNoYW5nZVwiKVxuICAgIHRoaXMudXBkYXRlRWxlbWVudCh0aGlzLnNlbGVjdGVkRWxlbWVudClcbiAgfVxuICBcbiAgc2V0VmFsdWVCeVBhdGgocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBsZXQgb2JqID0gdGhpcy5zZWxlY3RlZEVsZW1lbnQ7XG4gICAgaWYodGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnR5cGUgPT09ICdUYWJsZScpe1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRbJ2ZpZWxkc01ldGEnXSA9IHR5cGVvZiB0aGlzLnNlbGVjdGVkRWxlbWVudD8uZmllbGRzTWV0YSA9PT0gJ29iamVjdCcgID8gdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LmZpZWxkc01ldGEgOiBKU09OLnBhcnNlKHRoaXMuc2VsZWN0ZWRFbGVtZW50WydmaWVsZHNNZXRhJ10gfHwgW3t9XSk7XG4gICAgfVxuXG4gICAga2V5cy5mb3JFYWNoKChrZXksIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIW9ialtrZXldKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBuZXh0IGtleSBpcyBhIG51bWJlciAoYXJyYXkgaW5kZXgpXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBrZXlzW2luZGV4ICsgMV07XG4gICAgICAgIG9ialtrZXldID0gaXNOYU4oTnVtYmVyKG5leHRLZXkpKSA/IHt9IDogW107IFxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ID09PSBrZXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTsgLy8gQXNzaWduIHZhbHVlIHRvIGxhc3Qga2V5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSBvYmpba2V5XTsgLy8gTW92ZSBkZWVwZXJcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvLyBTS1MxOU1BUjI1IHVwZGF0ZSBlbGVtZW50IGluIHNlcnZpZXNcbiAgdXBkYXRlRWxlbWVudChlbGVtZW50OiBhbnkpe1xuICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLmVsZW1lbnRVcGRhdGUodGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCxlbGVtZW50KVxuICAgIHRoaXMuZm9ybUJ1aWxkZXJTZXJ2aWNlLnNldFNlbGVjdGVkVGFibGVFbGVtZW50KHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXgsIHtjb2x1bW46IHRoaXMuc2VsZWN0Q29sdW1ufSk7XG4gIH1cbiAgLy8gU0tTMTlNQVIyNSBnZXQgdmFsdWUgZnJvbSBhcnJheVxuICBnZXRWYWx1ZUJ5QXJyYXlQYXRoKHRhcmdldEFycmF5UGF0aDogYW55LCB0YXJnZXRBcnJheUtleTogc3RyaW5nLCBzZWxlY3RDb2x1bW46IHN0cmluZywga2V5UGF0aDogc3RyaW5nKTogYW55IHtcbiAgICBpZih0aGlzLnNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJyl7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFsnZmllbGRzTWV0YSddID0gdHlwZW9mIHRoaXMuc2VsZWN0ZWRFbGVtZW50Py5maWVsZHNNZXRhID09PSAnb2JqZWN0JyAgPyB0aGlzLnNlbGVjdGVkRWxlbWVudD8uZmllbGRzTWV0YSA6IEpTT04ucGFyc2UodGhpcy5zZWxlY3RlZEVsZW1lbnRbJ2ZpZWxkc01ldGEnXSB8fCBbe31dKTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0QXJyYXkgPSB0aGlzLmdldERhdGFCeVBhdGgodGFyZ2V0QXJyYXlQYXRoKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0QXJyYXkpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBcbiAgICBjb25zdCBmb3VuZEl0ZW0gPSB0YXJnZXRBcnJheS5maW5kKGl0ZW0gPT4gaXRlbVt0YXJnZXRBcnJheUtleV0gPT09IHNlbGVjdENvbHVtbik7XG4gICAgXG4gICAgcmV0dXJuIGZvdW5kSXRlbSA/IGtleVBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiBvYmo/LltrZXldLCBmb3VuZEl0ZW0pIDogdW5kZWZpbmVkO1xuICB9XG5cbi8vU0tTMTlNQVIyNSBGdW5jdGlvbiB0byB1cGRhdGUgYSB2YWx1ZSBpbiBhbiBhcnJheSBkeW5hbWljYWxseVxudXBkYXRlVmFsdWVCeUFycmF5UGF0aCh0YXJnZXRBcnJheVBhdGg6IGFueSwgdGFyZ2V0QXJyYXlLZXk6IHN0cmluZywgc2VsZWN0Q29sdW1uOiBzdHJpbmcsIGtleVBhdGg6IHN0cmluZywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gIGlmKHRoaXMuc2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnVGFibGUnKXtcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFsnZmllbGRzTWV0YSddID0gdHlwZW9mIHRoaXMuc2VsZWN0ZWRFbGVtZW50Py5maWVsZHNNZXRhID09PSAnb2JqZWN0JyAgPyB0aGlzLnNlbGVjdGVkRWxlbWVudD8uZmllbGRzTWV0YSA6IEpTT04ucGFyc2UodGhpcy5zZWxlY3RlZEVsZW1lbnRbJ2ZpZWxkc01ldGEnXSB8fCBbe31dKTtcbiAgfVxuICBjb25zdCB0YXJnZXRBcnJheSA9IHRoaXMuZ2V0RGF0YUJ5UGF0aCh0YXJnZXRBcnJheVBhdGgpO1xuICBjb25zb2xlLmxvZyhcInRhcmdldEFycmF5XCIsdGFyZ2V0QXJyYXksXCJ0YXJnZXRBcnJheUtleVwiLHRhcmdldEFycmF5S2V5LFwic2VsZWN0Q29sdW1uXCIsc2VsZWN0Q29sdW1uLFwia2V5UGF0aFwiLGtleVBhdGgsXCJldmVudFwiLGV2ZW50KVxuICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0QXJyYXkpKSByZXR1cm47XG5cbiAgLy8gRmluZCB0aGUgb2JqZWN0IHRoYXQgbWF0Y2hlcyBzZWxlY3RDb2x1bW5cbiAgbGV0IGZvdW5kSXRlbSA9IHRhcmdldEFycmF5LmZpbmQoaXRlbSA9PiBpdGVtW3RhcmdldEFycmF5S2V5XSA9PT0gc2VsZWN0Q29sdW1uKTtcblxuICAvLyBJZiB0aGUgaXRlbSBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGFuZCBhZGQgaXRcbiAgaWYgKCFmb3VuZEl0ZW0pIHtcbiAgICBmb3VuZEl0ZW0gPSB7IFt0YXJnZXRBcnJheUtleV06IHNlbGVjdENvbHVtbiB9OyAvLyBFbnN1cmUgdGhlIGtleSBleGlzdHNcbiAgICB0YXJnZXRBcnJheS5wdXNoKGZvdW5kSXRlbSk7XG4gIH1cblxuICAvLyBUcmF2ZXJzZSBhbmQgc2V0IHRoZSB2YWx1ZVxuICBjb25zdCBrZXlzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xuICBsZXQgb2JqID0gZm91bmRJdGVtO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghb2JqW2tleV0pIG9ialtrZXldID0ge307IC8vIEluaXRpYWxpemUgbWlzc2luZyBvYmplY3RzXG4gICAgb2JqID0gb2JqW2tleV07XG4gIH1cblxuICAvLyBBc3NpZ24gdGhlIHZhbHVlIGJhc2VkIG9uIGlucHV0IHR5cGVcbiAgY29uc3QgbGFzdEtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgb2JqW2xhc3RLZXldID0gaW5wdXRFbGVtZW50LnR5cGUgPT09ICdjaGVja2JveCcgPyBpbnB1dEVsZW1lbnQuY2hlY2tlZCA6IGlucHV0RWxlbWVudC52YWx1ZTtcbiAgaWYoa2V5UGF0aCA9PT0gJ2FwaU5hbWUnKXtcbiAgICB0aGlzLnNlbGVjdENvbHVtbiA9IGlucHV0RWxlbWVudC52YWx1ZVxuICB9XG4gIGNvbnNvbGUubG9nKFwiYnJlYWsgMVwiKVxuICB0aGlzLnVwZGF0ZUVsZW1lbnQodGhpcy5zZWxlY3RlZEVsZW1lbnQpXG59XG5nZXREYXRhQnlQYXRoKHBhdGg6IHN0cmluZyk6IGFueSB7XG4gIGlmKHRoaXMuc2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnVGFibGUnKXtcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFsnZmllbGRzTWV0YSddID0gdHlwZW9mIHRoaXMuc2VsZWN0ZWRFbGVtZW50Py5maWVsZHNNZXRhID09PSAnb2JqZWN0JyAgPyB0aGlzLnNlbGVjdGVkRWxlbWVudD8uZmllbGRzTWV0YSA6IEpTT04ucGFyc2UodGhpcy5zZWxlY3RlZEVsZW1lbnRbJ2ZpZWxkc01ldGEnXSB8fCBbe31dKTtcbiAgfVxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCBrZXkpID0+IG9iaj8uW2tleV0sIHRoaXMuc2VsZWN0ZWRFbGVtZW50KTtcbn1cbn1cbiIsIjwhLS0gQVAgMjJKQU4yNSAtIEZpZWxkIGFuZCBFbGVtZW50IFByb3BlcnRpZXMgLS0+XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAnYXR0cmlidXRlcyd9XCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignYXR0cmlidXRlcycpXCI+XG4gICAgICBBdHRyaWJ1dGVzXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAncHJvcGVydHknfVwiIChjbGljayk9XCJzZXRBY3RpdmVUYWIoJ3Byb3BlcnR5JylcIj5cbiAgICAgIFByb3BlcnR5XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAnYXBwZWFyYW5jZSd9XCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignYXBwZWFyYW5jZScpXCI+XG4gICAgICBBcHBlYXJhbmNlXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj57eyBlcnJvck1lc3NhZ2UgfX08L2Rpdj4gLS0+XG4gIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiICpuZ0lmPVwiYWN0aXZlVGFiID09PSAnYXR0cmlidXRlcydcIj5cbiAgICA8IS0tIEVsZW1lbnQgUHJvcGVycnRpZXMgLS0+XG4gICAgPCEtLSBBUC0wNk1BUjI1IFNlbGVjdCBlbGVtZW50IHR5cGUgc2hvdyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0UHJvcGVydGllcygpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wIG9mIGdldFByb3BlcnRpZXMoKS5lbGVtZW50UHJvcHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJwcm9wLnR5cGUgIT09ICdjaGVja2JveCdcIiBjbGFzcz1cInRleHQtc21cIj57eyBwcm9wLmxhYmVsIH19PC9sYWJlbD5cblxuICAgICAgICAgIDwhLS0gVGV4dCBJbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICd0ZXh0J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImhlYWRlclNlbGVjdCA/IGJvb2sucmVjb3Jkc1swXS50aXRsZSA6IChzZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gZ2V0VmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5ICkgOiBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkgKSA6IHNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV0pXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJoZWFkZXJTZWxlY3QgPyB1cGRhdGVUaXRsZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSA6IChzZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gdXBkYXRlVmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5LCAkZXZlbnQpIDogZ2V0VmFsdWVCeVBhdGgocHJvcC5rZXkpICkgOiB1cGRhdGVQcm9wZXJ0eShwcm9wLmtleSwgJGV2ZW50LnRhcmdldC52YWx1ZSkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5yZWFkLW9ubHldPVwic2VsZWN0ZWRFbGVtZW50LnJlYWRPbmx5XCIgW3JlYWRvbmx5XT1cInNlbGVjdGVkRWxlbWVudC5yZWFkT25seVwiIC8+XG5cbiAgICAgICAgICA8IS0tIGhlbHAgdGV4dCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdoZWxwVGV4dCcgJiYgc2VsZWN0ZWRFbGVtZW50LmhlbHBUZXh0XCI+e3tcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudC5oZWxwVGV4dCB9fTwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBGb250IFNlbGVjdGlvbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdmb250J1wiPlxuICAgICAgICAgICAgPCEtLSA8bGFiZWw+e3sgcHJvcC5sYWJlbCB9fTwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgPHNlbGVjdCAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcC5rZXkgPT09ICdmb250J1wiIGNsYXNzPVwic2VsZWN0LWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LmZvbnRcIiAoY2hhbmdlKT1cInVwZGF0ZVByb3BlcnR5KCdmb250JywgJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj4ge3sgb3B0aW9uIH19IDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBxdWVzdGlvbk51bWJlciAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ3F1ZXN0aW9uTnVtYmVyJ1wiIHR5cGU9XCJudW1iZXJcIiBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50LnF1ZXN0aW9uTnVtYmVyXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVQcm9wZXJ0eSgncXVlc3Rpb25OdW1iZXInLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIC8+XG5cbiAgICAgICAgICA8IS0tIGZpbGUgLS0+XG4gICAgICAgICAgPCEtLSBBZGQgdGhpcyBpbnNpZGUgdGhlIGVsZW1lbnRQcm9wcyBsb29wIHdoZXJlIG90aGVyIGlucHV0cyBhcmUgcmVuZGVyZWQgLS0+XG4gICAgICAgICAgPHNlbGVjdCAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcC5rZXkgPT09ICdzdXBwb3J0VHlwZSdcIiBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVByb3BlcnR5KHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCBmaWxlIGNhdGVnb3J5PC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPiB7eyBvcHRpb24ubGFiZWwgfX0gPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICA8IS0tIEZvbnQgV2VpZ2h0IFNlbGVjdGlvbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdmb250V2VpZ2h0J1wiPlxuICAgICAgICAgICAgPCEtLSA8bGFiZWw+e3sgcHJvcC5sYWJlbCB9fTwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgPHNlbGVjdCAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcC5rZXkgPT09ICdmb250V2VpZ2h0J1wiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LmZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVByb3BlcnR5KCdmb250V2VpZ2h0JywgJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj4ge3sgb3B0aW9uLmxhYmVsIH19IDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnY2hlY2tib3gnXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS1sYWJlbFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIj57eyBwcm9wLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0VmFsdWVCeVBhdGgocHJvcC5rZXkpXCIgXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVDaGFuZ2UocHJvcC5rZXksICRldmVudClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBUb2dnbGUgR3JvdXAgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3RvZ2dsZUdyb3VwJ1wiIGNsYXNzPVwidG9nZ2xlLWdyb3VwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtbGFiZWxcIj5SZWFkIE9ubHk8L3NwYW4+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJzZWxlY3RlZEVsZW1lbnQ/LmlzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUNoYW5nZSgnaXNSZWFkT25seScsICRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtaXRlbVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS1sYWJlbFwiPklzIEhpZGU8L3NwYW4+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN3aXRjaFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJzZWxlY3RlZEVsZW1lbnQ/LmlzSGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVDaGFuZ2UoJ2lzSGlkZGVuJywgJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGlkZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVGV4dCBBbGlnbiBCdXR0b25zIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdhbGlnbidcIj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiAoY2xpY2spPVwib25BbGlnblNlbGVjdChvcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LnRleHRBbGlnbiA9PT0gb3B0aW9uLnZhbHVlXCIgW3RpdGxlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiJy4uL2Fzc2V0cy9pY29ucy8nICsgb3B0aW9uLmljb24gKyAnLnN2ZydcIiBbYWx0XT1cIm9wdGlvbi52YWx1ZVwiIGNsYXNzPVwiaWNvbi1zaXplXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3N0eWxlJ1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIChjbGljayk9XCJvblN0eWxlU2VsZWN0KG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzU3R5bGVBY3RpdmUob3B0aW9uLnZhbHVlKVwiIFt0aXRsZV09XCJvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIicuLi9hc3NldHMvaWNvbnMvJyArIG9wdGlvbi5pY29uICsgJy5zdmcnXCIgW2FsdF09XCJvcHRpb24udmFsdWVcIiBjbGFzcz1cImljb24tc2l6ZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRmllbGQgU2l6ZSBDb250cm9scyAtLT5cbiAgICAgICAgICA8IS0tIEFQIDI1RkVCMjUgLSBDaGFuZ2Uga2V5IHNpemUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnc2l6ZSdcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNpemUtbGFiZWxcIj5XaWR0aDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LnNpemVcIiAoaW5wdXQpPVwidXBkYXRlUHJvcGVydHkoJ3NpemUnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2l6ZS1pbnB1dFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiICpuZ0lmPVwiYWN0aXZlVGFiID09PSAncHJvcGVydHknXCI+XG4gICAgPCEtLSBGaWVsZCBFbGVtZW50cyBQcm9wZXJ0aWVzIC0tPlxuICAgIDwhLS0gQVAtMDZNQVIyNSBTaG93IGVsZW1lbnRzIElEICAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0UHJvcGVydGllcygpXCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAxM3B4OyBwYWRkaW5nOjVweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOiNlZmY4ZmY7XCI+IGlkIDoge3sgaGVhZGVyU2VsZWN0ID9cbiAgICAgICAgYm9va0lkIDogc2VsZWN0ZWRFbGVtZW50LmlkfX08L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb3Agb2YgZ2V0UHJvcGVydGllcygpLmZpZWxkUHJvcHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgcHJvcC5sYWJlbCB9fTwvbGFiZWw+XG5cbiAgICAgICAgICA8IS0tIElucHV0IEJveCAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICd0ZXh0J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIiAoaW5wdXQpPVwidXBkYXRlUHJvcGVydHkocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cblxuICAgICAgICAgIDwhLS0gUmFkaW8gR3JvdXAgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3JhZGlvJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpemVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdhcFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2NoZWNrZWRdPVwic2VsZWN0ZWRFbGVtZW50Py5pc1JlcXVpcmVkXCIgKGNoYW5nZSk9XCJvblJlcXVpcmVkQ2hhbmdlKHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlcXVpcmVkXCIgY2xhc3M9XCJyYWRpby1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsXCI+IFJlcXVpcmVkIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtaXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbY2hlY2tlZF09XCIhc2VsZWN0ZWRFbGVtZW50Py5pc1JlcXVpcmVkXCIgKGNoYW5nZSk9XCJvblJlcXVpcmVkQ2hhbmdlKGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXF1aXJlZFwiIGNsYXNzPVwicmFkaW8taW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNDAwXCI+IE5vdCBSZXF1aXJlZCA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBBUCAyNUZFQjI1IC0gaGFuZGxlZCBvcHRpb25zIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicHJvcC50eXBlID09PSAnZHJvcGRvd24nIHx8IHByb3AudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wLnR5cGUgPT09ICdyYWRpbycgJiYgcHJvcC5rZXkgPT09ICdvcHRpb25zJ1wiXG4gICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwib3B0aW9uLWl0ZW1zXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVtpXS52YWx1ZVwiIHBsYWNlaG9sZGVyPVwiT3B0aW9uIHt7IGkgKyAxIH19XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnNcIiAvPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKHNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV0sIGkpXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZE9wdGlvbihzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLXZhcmllbnRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGdcIj4rPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdhcHBlYXJhbmNlJ1wiPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRQcm9wZXJ0aWVzKClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHByb3Agb2YgZ2V0UHJvcGVydGllcygpLmFwcGVhcmFuY2VcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgcHJvcC5sYWJlbCB9fTwvbGFiZWw+XG5cbiAgICAgICAgICA8IS0tIElucHV0IEJveCAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICd0ZXh0J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIiAoaW5wdXQpPVwidXBkYXRlUHJvcGVydHkocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cblxuICAgICAgICAgIDwhLS0gUmFkaW8gR3JvdXAgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3JhZGlvJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2NoZWNrZWRdPVwic2VsZWN0ZWRFbGVtZW50Py5pc1JlcXVpcmVkXCIgKGNoYW5nZSk9XCJvblJlcXVpcmVkQ2hhbmdlKHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJlcXVpcmVkXCIgY2xhc3M9XCJyYWRpby1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWxhYmVsXCI+IFJlcXVpcmVkIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtaXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbY2hlY2tlZF09XCIhc2VsZWN0ZWRFbGVtZW50Py5pc1JlcXVpcmVkXCIgKGNoYW5nZSk9XCJvblJlcXVpcmVkQ2hhbmdlKGZhbHNlKVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJyZXF1aXJlZFwiIGNsYXNzPVwicmFkaW8taW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNDAwXCI+IE5vdCBSZXF1aXJlZCA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBBUCAyNUZFQjI1IC0gaGFuZGxlZCBvcHRpb25zIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicHJvcC50eXBlID09PSAnZHJvcGRvd24nIHx8IHByb3AudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wLnR5cGUgPT09ICdyYWRpbycgJiYgcHJvcC5rZXkgPT09ICdvcHRpb25zJ1wiXG4gICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwib3B0aW9uLWl0ZW1zXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVtpXS52YWx1ZVwiIHBsYWNlaG9sZGVyPVwiT3B0aW9uIHt7IGkgKyAxIH19XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnNcIiAvPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9UcmFzaC5zdmdcIiAoY2xpY2spPVwicmVtb3ZlT3B0aW9uKHNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV0sIGkpXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZE9wdGlvbihzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLXZhcmllbnRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGdcIj4rPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnRuXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwic2F2ZS1idG5cIiAoY2xpY2spPVwiaGFuZGxlQnV0dG9uQ2xpY2soKVwiPlNhdmU8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|