ngx-render-material-forms 2.5.11 → 2.5.13
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/lib/FormioControl.mjs +36 -0
- package/esm2022/lib/components/Base.mjs +32 -0
- package/esm2022/lib/components/MaterialComponent.mjs +148 -0
- package/esm2022/lib/components/MaterialNestedComponent.mjs +38 -0
- package/esm2022/lib/components/Webform.mjs +18 -0
- package/{esm2020 → esm2022}/lib/components/add-on-products/add-on-products.component.mjs +841 -842
- package/esm2022/lib/components/button/button.component.mjs +101 -0
- package/esm2022/lib/components/calendar/calendar.component.mjs +127 -0
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +53 -0
- package/esm2022/lib/components/columns/columns.component.mjs +58 -0
- package/esm2022/lib/components/common.service.mjs +255 -0
- package/esm2022/lib/components/confirmation-dialog/confirmation-dialog.component.mjs +24 -0
- package/esm2022/lib/components/container/container.component.mjs +24 -0
- package/{esm2020 → esm2022}/lib/components/content/content.component.mjs +18 -18
- package/esm2022/lib/components/currency/currency.component.mjs +41 -0
- package/esm2022/lib/components/datagrid/datagrid.component.mjs +693 -0
- package/esm2022/lib/components/date/date.component.mjs +336 -0
- package/{esm2020 → esm2022}/lib/components/day/day.component.mjs +75 -75
- package/esm2022/lib/components/editgrid/editgrid.component.mjs +243 -0
- package/esm2022/lib/components/email/email.component.mjs +28 -0
- package/esm2022/lib/components/fieldset/fieldset.component.mjs +49 -0
- package/esm2022/lib/components/formio-form-field/formio-form-field.component.mjs +56 -0
- package/esm2022/lib/components/formio.wizard.mjs +88 -0
- package/{esm2020 → esm2022}/lib/components/hidden/hidden.component.mjs +20 -20
- package/esm2022/lib/components/html/html.component.mjs +29 -0
- package/esm2022/lib/components/index.mjs +125 -0
- package/{esm2020 → esm2022}/lib/components/label/label.component.mjs +17 -17
- package/esm2022/lib/components/number/number.component.mjs +65 -0
- package/esm2022/lib/components/panel/panel.component.mjs +56 -0
- package/esm2022/lib/components/password/password.component.mjs +28 -0
- package/esm2022/lib/components/phonenumber/phonenumber.component.mjs +28 -0
- package/esm2022/lib/components/radio/radio.component.mjs +93 -0
- package/esm2022/lib/components/select/select.component.mjs +592 -0
- package/esm2022/lib/components/selectboxes/selectboxes.component.mjs +99 -0
- package/esm2022/lib/components/signature/signature.component.mjs +99 -0
- package/esm2022/lib/components/survey/survey.component.mjs +166 -0
- package/esm2022/lib/components/table/table.component.mjs +96 -0
- package/esm2022/lib/components/tabs/tabs.component.mjs +42 -0
- package/esm2022/lib/components/tags/tags.component.mjs +114 -0
- package/esm2022/lib/components/textarea/textarea.component.mjs +94 -0
- package/esm2022/lib/components/textfield/textfield.component.mjs +122 -0
- package/esm2022/lib/components/time/time.component.mjs +205 -0
- package/esm2022/lib/components/url/url.component.mjs +28 -0
- package/esm2022/lib/components/well/well.component.mjs +41 -0
- package/{esm2020 → esm2022}/lib/const/ButtonsThemes.mjs +16 -16
- package/{esm2020 → esm2022}/lib/const/LabelPositions.mjs +9 -9
- package/esm2022/lib/directives/mask.directive.mjs +65 -0
- package/esm2022/lib/formio.component.mjs +77 -0
- package/{esm2020 → esm2022}/lib/ngx-render-material-forms.component.mjs +15 -15
- package/esm2022/lib/ngx-render-material-forms.module.mjs +324 -0
- package/{esm2020 → esm2022}/lib/ngx-render-material-forms.service.mjs +14 -14
- package/{esm2020 → esm2022}/lib/renderer.mjs +12 -12
- package/{esm2020 → esm2022}/ngx-render-material-forms.js +4 -4
- package/{esm2020 → esm2022}/public-api.mjs +6 -6
- package/{fesm2020 → fesm2022}/ngx-render-material-forms.js +4195 -4272
- package/fesm2022/ngx-render-material-forms.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/FormioControl.d.ts +7 -7
- package/lib/components/Base.d.ts +2 -2
- package/lib/components/MaterialComponent.d.ts +30 -30
- package/lib/components/MaterialNestedComponent.d.ts +13 -13
- package/lib/components/Webform.d.ts +1 -1
- package/lib/components/add-on-products/add-on-products.component.d.ts +142 -142
- package/lib/components/button/button.component.d.ts +30 -30
- package/lib/components/calendar/calendar.component.d.ts +34 -34
- package/lib/components/checkbox/checkbox.component.d.ts +9 -9
- package/lib/components/columns/columns.component.d.ts +12 -12
- package/lib/components/common.service.d.ts +86 -86
- package/lib/components/confirmation-dialog/confirmation-dialog.component.d.ts +11 -11
- package/lib/components/container/container.component.d.ts +8 -8
- package/lib/components/content/content.component.d.ts +8 -8
- package/lib/components/currency/currency.component.d.ts +10 -10
- package/lib/components/datagrid/datagrid.component.d.ts +81 -81
- package/lib/components/date/date.component.d.ts +40 -40
- package/lib/components/day/day.component.d.ts +16 -16
- package/lib/components/editgrid/editgrid.component.d.ts +50 -50
- package/lib/components/email/email.component.d.ts +9 -9
- package/lib/components/fieldset/fieldset.component.d.ts +8 -8
- package/lib/components/formio-form-field/formio-form-field.component.d.ts +18 -18
- package/lib/components/formio.wizard.d.ts +19 -19
- package/lib/components/hidden/hidden.component.d.ts +8 -8
- package/lib/components/html/html.component.d.ts +11 -11
- package/lib/components/index.d.ts +2 -2
- package/lib/components/label/label.component.d.ts +6 -6
- package/lib/components/number/number.component.d.ts +18 -18
- package/lib/components/panel/panel.component.d.ts +8 -8
- package/lib/components/password/password.component.d.ts +9 -9
- package/lib/components/phonenumber/phonenumber.component.d.ts +9 -9
- package/lib/components/radio/radio.component.d.ts +12 -12
- package/lib/components/select/select.component.d.ts +77 -77
- package/lib/components/selectboxes/selectboxes.component.d.ts +15 -15
- package/lib/components/signature/signature.component.d.ts +12 -12
- package/lib/components/survey/survey.component.d.ts +14 -14
- package/lib/components/table/table.component.d.ts +12 -12
- package/lib/components/tabs/tabs.component.d.ts +9 -9
- package/lib/components/tags/tags.component.d.ts +15 -15
- package/lib/components/textarea/textarea.component.d.ts +13 -13
- package/lib/components/textfield/textfield.component.d.ts +18 -18
- package/lib/components/time/time.component.d.ts +27 -27
- package/lib/components/url/url.component.d.ts +9 -9
- package/lib/components/well/well.component.d.ts +8 -8
- package/lib/const/ButtonsThemes.d.ts +14 -14
- package/lib/const/LabelPositions.d.ts +8 -8
- package/lib/directives/mask.directive.d.ts +17 -17
- package/lib/formio.component.d.ts +15 -15
- package/lib/ngx-render-material-forms.component.d.ts +8 -8
- package/lib/ngx-render-material-forms.module.d.ts +110 -112
- package/lib/ngx-render-material-forms.service.d.ts +6 -6
- package/lib/renderer.d.ts +8 -8
- package/package.json +5 -11
- package/public-api.d.ts +3 -3
- package/esm2020/lib/FormioControl.mjs +0 -36
- package/esm2020/lib/components/Base.mjs +0 -32
- package/esm2020/lib/components/MaterialComponent.mjs +0 -148
- package/esm2020/lib/components/MaterialNestedComponent.mjs +0 -38
- package/esm2020/lib/components/Webform.mjs +0 -18
- package/esm2020/lib/components/button/button.component.mjs +0 -102
- package/esm2020/lib/components/calendar/calendar.component.mjs +0 -129
- package/esm2020/lib/components/checkbox/checkbox.component.mjs +0 -54
- package/esm2020/lib/components/columns/columns.component.mjs +0 -69
- package/esm2020/lib/components/common.service.mjs +0 -256
- package/esm2020/lib/components/confirmation-dialog/confirmation-dialog.component.mjs +0 -25
- package/esm2020/lib/components/container/container.component.mjs +0 -25
- package/esm2020/lib/components/currency/currency.component.mjs +0 -43
- package/esm2020/lib/components/datagrid/datagrid.component.mjs +0 -694
- package/esm2020/lib/components/date/date.component.mjs +0 -337
- package/esm2020/lib/components/editgrid/editgrid.component.mjs +0 -243
- package/esm2020/lib/components/email/email.component.mjs +0 -30
- package/esm2020/lib/components/fieldset/fieldset.component.mjs +0 -50
- package/esm2020/lib/components/formio-form-field/formio-form-field.component.mjs +0 -57
- package/esm2020/lib/components/formio.wizard.mjs +0 -88
- package/esm2020/lib/components/html/html.component.mjs +0 -29
- package/esm2020/lib/components/index.mjs +0 -125
- package/esm2020/lib/components/number/number.component.mjs +0 -67
- package/esm2020/lib/components/panel/panel.component.mjs +0 -57
- package/esm2020/lib/components/password/password.component.mjs +0 -30
- package/esm2020/lib/components/phonenumber/phonenumber.component.mjs +0 -30
- package/esm2020/lib/components/radio/radio.component.mjs +0 -96
- package/esm2020/lib/components/select/select.component.mjs +0 -593
- package/esm2020/lib/components/selectboxes/selectboxes.component.mjs +0 -102
- package/esm2020/lib/components/signature/signature.component.mjs +0 -103
- package/esm2020/lib/components/survey/survey.component.mjs +0 -167
- package/esm2020/lib/components/table/table.component.mjs +0 -97
- package/esm2020/lib/components/tabs/tabs.component.mjs +0 -43
- package/esm2020/lib/components/tags/tags.component.mjs +0 -115
- package/esm2020/lib/components/textarea/textarea.component.mjs +0 -98
- package/esm2020/lib/components/textfield/textfield.component.mjs +0 -124
- package/esm2020/lib/components/time/time.component.mjs +0 -206
- package/esm2020/lib/components/url/url.component.mjs +0 -30
- package/esm2020/lib/components/well/well.component.mjs +0 -43
- package/esm2020/lib/directives/mask.directive.mjs +0 -65
- package/esm2020/lib/formio.component.mjs +0 -80
- package/esm2020/lib/ngx-render-material-forms.module.mjs +0 -378
- package/fesm2015/ngx-render-material-forms.js +0 -5850
- package/fesm2015/ngx-render-material-forms.mjs.map +0 -1
- package/fesm2020/ngx-render-material-forms.mjs.map +0 -1
|
@@ -1,694 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { MatTableDataSource } from '@angular/material/table';
|
|
3
|
-
import { MaterialNestedComponent } from '../MaterialNestedComponent';
|
|
4
|
-
import DataGridComponent from 'formiojs/components/datagrid/DataGrid.js';
|
|
5
|
-
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
6
|
-
import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component';
|
|
7
|
-
import { AddOnProductsComponent } from '../add-on-products/add-on-products.component';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/material/dialog";
|
|
10
|
-
import * as i2 from "../common.service";
|
|
11
|
-
import * as i3 from "@angular/common";
|
|
12
|
-
import * as i4 from "@angular/material/button";
|
|
13
|
-
import * as i5 from "@angular/material/table";
|
|
14
|
-
import * as i6 from "@angular/material/icon";
|
|
15
|
-
import * as i7 from "@angular/flex-layout/flex";
|
|
16
|
-
import * as i8 from "@angular/material/card";
|
|
17
|
-
import * as i9 from "@angular/cdk/drag-drop";
|
|
18
|
-
import * as i10 from "../formio-form-field/formio-form-field.component";
|
|
19
|
-
import * as i11 from "../label/label.component";
|
|
20
|
-
const ELEMENT_DATA = [];
|
|
21
|
-
export class MaterialDataGridComponent extends MaterialNestedComponent {
|
|
22
|
-
constructor(element, ref, dialog, commonService) {
|
|
23
|
-
super(element, ref);
|
|
24
|
-
this.element = element;
|
|
25
|
-
this.ref = ref;
|
|
26
|
-
this.dialog = dialog;
|
|
27
|
-
this.commonService = commonService;
|
|
28
|
-
this.dataSource = new MatTableDataSource();
|
|
29
|
-
this.dataSourceNew = ELEMENT_DATA;
|
|
30
|
-
this.displayedColumnsNew = ['productName', 'category', 'subCategory', 'quantity', 'price', 'skuNumber', 'inventory', 'cost'];
|
|
31
|
-
this.showNewProductPicker = false;
|
|
32
|
-
this.showCategory = false;
|
|
33
|
-
this.showSubcategory = false;
|
|
34
|
-
this.showPrice = true;
|
|
35
|
-
this.showQuantity = true;
|
|
36
|
-
this.showSkuNumber = false;
|
|
37
|
-
this.showInventory = false;
|
|
38
|
-
this.hasInitialized = false;
|
|
39
|
-
this.checkSubmissionStatus = false;
|
|
40
|
-
this.showDataGrid = true;
|
|
41
|
-
this.hasValueAndEditMode = false;
|
|
42
|
-
this.dropdownL1 = false;
|
|
43
|
-
this.dropdownL2 = false;
|
|
44
|
-
this.dropdownL3 = false;
|
|
45
|
-
this.dropdownL4 = false;
|
|
46
|
-
this.showDialogQuantity = false;
|
|
47
|
-
this.showDialogPrice = false;
|
|
48
|
-
this.showDialogCategory = false;
|
|
49
|
-
this.showDialogSkuNumber = false;
|
|
50
|
-
this.showDialogInventory = false;
|
|
51
|
-
this.showDialogSubCategory = false;
|
|
52
|
-
this.dropdownL1Label = '';
|
|
53
|
-
this.dropdownL2Label = '';
|
|
54
|
-
this.dropdownL3Label = '';
|
|
55
|
-
this.dropdownL4Label = '';
|
|
56
|
-
this.isCustomerCountryFiltered = false;
|
|
57
|
-
this.emptyArray = false;
|
|
58
|
-
this.isPriceDisable = true;
|
|
59
|
-
this.priceTweek = 'Price';
|
|
60
|
-
this.skuTweek = 'SKU Number';
|
|
61
|
-
this.costTweek = 'Your Target Cost';
|
|
62
|
-
this.showCost = false;
|
|
63
|
-
this.showDialogCost = false;
|
|
64
|
-
this.quantityTweek = 'Quantity';
|
|
65
|
-
this.productTweek = 'Product Name';
|
|
66
|
-
this.categoryTweek = 'Category Name';
|
|
67
|
-
this.subCategoryTweek = 'Sub Category';
|
|
68
|
-
this.inventoryTweek = 'Inventory';
|
|
69
|
-
this.alphanumeric = false;
|
|
70
|
-
if (this.element && this.element.nativeElement && this.instance) {
|
|
71
|
-
// Add custom classes to elements.
|
|
72
|
-
if (this.instance.component.customClass) {
|
|
73
|
-
this.element.nativeElement.classList.add(this.instance.component.customClass);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
getColumnLabel(column) {
|
|
78
|
-
return column.label || column.key;
|
|
79
|
-
}
|
|
80
|
-
getLabelName(newProductPickerFlag, attributeName) {
|
|
81
|
-
if (newProductPickerFlag && Object.keys(newProductPickerFlag).some(key => key.toLocaleLowerCase() === attributeName.toLowerCase())) {
|
|
82
|
-
// Find the key that matches attributeName case-insensitively
|
|
83
|
-
const matchingKey = Object.keys(newProductPickerFlag).find(key => key.toLocaleLowerCase() === attributeName.toLowerCase());
|
|
84
|
-
// Return the value of the matching key
|
|
85
|
-
return newProductPickerFlag[matchingKey];
|
|
86
|
-
}
|
|
87
|
-
return '';
|
|
88
|
-
}
|
|
89
|
-
// ngOnInit(): void {
|
|
90
|
-
// }
|
|
91
|
-
setInstance(instance) {
|
|
92
|
-
const checkAttribute = instance?.component?.attributes;
|
|
93
|
-
this.showNewProductPicker = this.commonService.checkIsAttributeTrue(checkAttribute, "newproductpicker");
|
|
94
|
-
this.showCategory = this.commonService.checkIsAttributeTrue(checkAttribute, "showCategory");
|
|
95
|
-
this.showSubcategory = this.commonService.checkIsAttributeTrue(checkAttribute, "showSubcategory");
|
|
96
|
-
this.showPrice = this.commonService.checkIsAttributeTrue(checkAttribute, "showPrice");
|
|
97
|
-
this.showQuantity = this.commonService.checkIsAttributeTrue(checkAttribute, "showQuantity");
|
|
98
|
-
this.showSkuNumber = this.commonService.checkIsAttributeTrue(checkAttribute, "showSkuNumber");
|
|
99
|
-
this.showInventory = this.commonService.checkIsAttributeTrue(checkAttribute, "showInventory");
|
|
100
|
-
this.showDialogQuantity = this.commonService.checkIsAttributeTrue(checkAttribute, "showDialogQuantity");
|
|
101
|
-
this.showDialogPrice = this.commonService.checkIsAttributeTrue(checkAttribute, "showDialogPrice");
|
|
102
|
-
this.showDialogCategory = this.commonService.checkIsAttributeTrue(checkAttribute, "showDialogCategory");
|
|
103
|
-
this.showDialogSkuNumber = this.commonService.checkIsAttributeTrue(checkAttribute, "showDialogSkuNumber");
|
|
104
|
-
this.showDialogInventory = this.commonService.checkIsAttributeTrue(checkAttribute, "showDialogInventory");
|
|
105
|
-
this.showDialogSubCategory = this.commonService.checkIsAttributeTrue(checkAttribute, "showDialogSubCategory");
|
|
106
|
-
this.isCustomerCountryFiltered = this.commonService.checkIsAttributeTrue(checkAttribute, "filterProductBasedOnCustomerCountry");
|
|
107
|
-
this.isPriceDisable = this.commonService.checkIsAttributeTrue(checkAttribute, "isPriceDisable");
|
|
108
|
-
this.showCost = this.commonService.checkIsAttributeTrue(checkAttribute, "showCost");
|
|
109
|
-
this.showDialogCost = this.commonService.checkIsAttributeTrue(checkAttribute, "showDialogCost");
|
|
110
|
-
this.alphanumeric = this.commonService.checkIsAttributeTrue(checkAttribute, "Alphanumeric");
|
|
111
|
-
const l1 = this.getLabelName(checkAttribute, "dropdownL1");
|
|
112
|
-
const l2 = this.getLabelName(checkAttribute, "dropdownL2");
|
|
113
|
-
const l3 = this.getLabelName(checkAttribute, "dropdownL3");
|
|
114
|
-
const l4 = this.getLabelName(checkAttribute, "dropdownL4");
|
|
115
|
-
const price = this.getLabelName(checkAttribute, "priceLabel");
|
|
116
|
-
const sku = this.getLabelName(checkAttribute, "skuLabel");
|
|
117
|
-
const cost = this.getLabelName(checkAttribute, "costLabel");
|
|
118
|
-
const quantity = this.getLabelName(checkAttribute, "quantityLabel");
|
|
119
|
-
const product = this.getLabelName(checkAttribute, "productLabel");
|
|
120
|
-
const category = this.getLabelName(checkAttribute, "categoryLabel");
|
|
121
|
-
const subCategory = this.getLabelName(checkAttribute, "subCategoryLabel");
|
|
122
|
-
const inventory = this.getLabelName(checkAttribute, "inventoryLabel");
|
|
123
|
-
this.dropdownL1 = l1 !== null && l1 !== undefined && (typeof l1 === 'string' ? l1.trim() !== "" : l1 !== "") ? true : false;
|
|
124
|
-
this.dropdownL2 = l2 !== null && l2 !== undefined && (typeof l2 === 'string' ? l2.trim() !== "" : l2 !== "") ? true : false;
|
|
125
|
-
this.dropdownL3 = l3 !== null && l3 !== undefined && (typeof l3 === 'string' ? l3.trim() !== "" : l3 !== "") ? true : false;
|
|
126
|
-
this.dropdownL4 = l4 !== null && l4 !== undefined && (typeof l4 === 'string' ? l4.trim() !== "" : l4 !== "") ? true : false;
|
|
127
|
-
const priceTweek = price !== null && price !== undefined && (typeof price === 'string' ? price.trim() !== "" : price !== "") ? true : false;
|
|
128
|
-
const skuTweek = sku !== null && sku !== undefined && (typeof sku === 'string' ? sku.trim() !== "" : sku !== "") ? true : false;
|
|
129
|
-
const costTweek = cost !== null && cost !== undefined && (typeof cost === 'string' ? cost.trim() !== "" : cost !== "") ? true : false;
|
|
130
|
-
const quantityTweek = quantity !== null && quantity !== undefined && (typeof quantity === 'string' ? quantity.trim() !== "" : quantity !== "") ? true : false;
|
|
131
|
-
const productTweek = product !== null && product !== undefined && (typeof product === 'string' ? product.trim() !== "" : product !== "") ? true : false;
|
|
132
|
-
const categoryTweek = category !== null && category !== undefined && (typeof category === 'string' ? category.trim() !== "" : category !== "") ? true : false;
|
|
133
|
-
const subCategoryTweek = subCategory !== null && subCategory !== undefined && (typeof subCategory === 'string' ? subCategory.trim() !== "" : subCategory !== "") ? true : false;
|
|
134
|
-
const inventoryTweek = inventory !== null && inventory !== undefined && (typeof inventory === 'string' ? inventory.trim() !== "" : inventory !== "") ? true : false;
|
|
135
|
-
if (this.dropdownL1) {
|
|
136
|
-
this.dropdownL1Label = l1;
|
|
137
|
-
}
|
|
138
|
-
if (this.dropdownL2) {
|
|
139
|
-
this.dropdownL2Label = l2;
|
|
140
|
-
}
|
|
141
|
-
if (this.dropdownL3) {
|
|
142
|
-
this.dropdownL3Label = l3;
|
|
143
|
-
}
|
|
144
|
-
if (this.dropdownL4) {
|
|
145
|
-
this.dropdownL4Label = l4;
|
|
146
|
-
}
|
|
147
|
-
if (priceTweek) {
|
|
148
|
-
this.priceTweek = price;
|
|
149
|
-
}
|
|
150
|
-
if (skuTweek) {
|
|
151
|
-
this.skuTweek = sku;
|
|
152
|
-
}
|
|
153
|
-
if (costTweek) {
|
|
154
|
-
this.costTweek = cost;
|
|
155
|
-
}
|
|
156
|
-
if (quantityTweek) {
|
|
157
|
-
this.quantityTweek = quantity;
|
|
158
|
-
}
|
|
159
|
-
if (productTweek) {
|
|
160
|
-
this.productTweek = product;
|
|
161
|
-
}
|
|
162
|
-
if (categoryTweek) {
|
|
163
|
-
this.categoryTweek = category;
|
|
164
|
-
}
|
|
165
|
-
if (subCategoryTweek) {
|
|
166
|
-
this.subCategoryTweek = subCategory;
|
|
167
|
-
}
|
|
168
|
-
if (inventoryTweek) {
|
|
169
|
-
this.inventoryTweek = inventory;
|
|
170
|
-
}
|
|
171
|
-
this.checkSubmissionStatus = this.commonService.checkIsAttributeTrue(checkAttribute, 'isProductOptional');
|
|
172
|
-
this.hasValueAndEditMode = (checkAttribute?.hasValue === 'yes') && (checkAttribute?.editMode === 'true');
|
|
173
|
-
const retrievedObject = JSON.parse(localStorage.getItem('storageObject'));
|
|
174
|
-
this.emptyArray = retrievedObject?.dataSource?.length < 1 ? true : false;
|
|
175
|
-
super.setInstance(instance);
|
|
176
|
-
if (this.showNewProductPicker && !this.hasInitialized) {
|
|
177
|
-
if (!this.showCategory) {
|
|
178
|
-
this.removeColumn('category');
|
|
179
|
-
}
|
|
180
|
-
if (!this.showQuantity) {
|
|
181
|
-
this.removeColumn('quantity');
|
|
182
|
-
}
|
|
183
|
-
if (!this.showPrice) {
|
|
184
|
-
this.removeColumn('price');
|
|
185
|
-
}
|
|
186
|
-
if (!this.showSubcategory) {
|
|
187
|
-
this.removeColumn('subCategory');
|
|
188
|
-
}
|
|
189
|
-
if (!this.showSkuNumber) {
|
|
190
|
-
this.removeColumn('skuNumber');
|
|
191
|
-
}
|
|
192
|
-
if (!this.showInventory) {
|
|
193
|
-
this.removeColumn('inventory');
|
|
194
|
-
}
|
|
195
|
-
if (!this.showCost) {
|
|
196
|
-
this.removeColumn('cost');
|
|
197
|
-
}
|
|
198
|
-
this.dealId = this.getLabelName(checkAttribute, "dealId");
|
|
199
|
-
localStorage.setItem("currentDealId", this.dealId);
|
|
200
|
-
const storedData = localStorage.getItem(`showGridPickerProducts-${this.dealId}`) || '';
|
|
201
|
-
const parsedData = JSON.parse(storedData || 'null');
|
|
202
|
-
this.dataSourceNew = Array.isArray(parsedData) ? parsedData : [];
|
|
203
|
-
// Set flag to true to prevent further execution
|
|
204
|
-
this.hasInitialized = true;
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
this.dataSource.data = instance.dataValue;
|
|
208
|
-
}
|
|
209
|
-
//this.checkSubmissionStatus &&
|
|
210
|
-
if (this.checkSubmissionStatus && !this.hasValueAndEditMode) {
|
|
211
|
-
this.showDataGrid = false;
|
|
212
|
-
this.dataSource.data = [];
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
this.showDataGrid = true;
|
|
216
|
-
this.dataSource.data = instance.dataValue;
|
|
217
|
-
}
|
|
218
|
-
this.columns = {};
|
|
219
|
-
this.displayedColumns = [];
|
|
220
|
-
this.formColumns = [];
|
|
221
|
-
instance.getColumns().map((column) => {
|
|
222
|
-
this.formColumns.push(column.key);
|
|
223
|
-
this.displayedColumns.push(column.key);
|
|
224
|
-
this.columns[column.key] = column;
|
|
225
|
-
});
|
|
226
|
-
this.displayedColumns.push('__removeRow');
|
|
227
|
-
if (this.instance.component.reorder) {
|
|
228
|
-
this.displayedColumns.push('position');
|
|
229
|
-
}
|
|
230
|
-
instance.viewContainer = (component) => {
|
|
231
|
-
let viewContainer;
|
|
232
|
-
if (this.instance.component.disabled) {
|
|
233
|
-
component.component.disabled = true;
|
|
234
|
-
}
|
|
235
|
-
this.viewContainers.forEach((container) => {
|
|
236
|
-
const td = container.element.nativeElement.parentNode;
|
|
237
|
-
if (component.rowIndex === parseInt(td.getAttribute('rowIndex'), 10) &&
|
|
238
|
-
component.component.key === td.getAttribute('component')) {
|
|
239
|
-
viewContainer = container;
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
return viewContainer ? viewContainer : null;
|
|
243
|
-
};
|
|
244
|
-
if (this.element && this.element.nativeElement && this.instance) {
|
|
245
|
-
// Add custom classes to elements.
|
|
246
|
-
if (this.instance.component.customClass) {
|
|
247
|
-
this.element.nativeElement.classList.add(this.instance.component.customClass);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
removeColumn(columnName) {
|
|
252
|
-
this.displayedColumnsNew = this.displayedColumnsNew.filter(column => column !== columnName);
|
|
253
|
-
}
|
|
254
|
-
addAnotherOld() {
|
|
255
|
-
this.showDataGrid = true;
|
|
256
|
-
this.checkRowsNumber();
|
|
257
|
-
this.instance.addRow();
|
|
258
|
-
if (this.dataSource.data.length < this.instance.rows.length) {
|
|
259
|
-
this.dataSource.data.push({});
|
|
260
|
-
}
|
|
261
|
-
this.dataSource.data = [...this.dataSource.data];
|
|
262
|
-
}
|
|
263
|
-
addAnother() {
|
|
264
|
-
this.showDataGrid = true;
|
|
265
|
-
if (this.showNewProductPicker) {
|
|
266
|
-
localStorage.setItem('currentDealId', this.dealId);
|
|
267
|
-
const diologeRef = this.dialog.open(AddOnProductsComponent, {
|
|
268
|
-
disableClose: true,
|
|
269
|
-
width: '90%',
|
|
270
|
-
maxWidth: '1000px',
|
|
271
|
-
autoFocus: false,
|
|
272
|
-
data: { dropdownsFlag: { showDialogInventory: this.showDialogInventory, showInventory: this.showInventory, inventoryTweek: this.inventoryTweek, quantityTweek: this.quantityTweek, subCategoryTweek: this.subCategoryTweek, categoryTweek: this.categoryTweek, productTweek: this.productTweek, costTweek: this.costTweek, skuTweek: this.skuTweek, priceTweek: this.priceTweek, showDialogCost: this.showDialogCost, showNewProductPicker: this.showNewProductPicker, showDialogSubCategory: this.showDialogSubCategory, showDialogSkuNumber: this.showDialogSkuNumber, showDialogCategory: this.showDialogCategory, showDialogPrice: this.showDialogPrice, showDialogQuantity: this.showDialogQuantity, dropdownL1: this.dropdownL1, dropdownL2: this.dropdownL2, dropdownL3: this.dropdownL3, dropdownL4: this.dropdownL4, dropdownL1Label: this.dropdownL1Label, dropdownL2Label: this.dropdownL2Label, dropdownL3Label: this.dropdownL3Label, dropdownL4Label: this.dropdownL4Label, checkSubmissionStatus: this.checkSubmissionStatus, priceDisable: this.isPriceDisable, alphanumeric: this.alphanumeric }, selectedProducts: this.dataSourceNew }
|
|
273
|
-
})
|
|
274
|
-
.afterClosed().subscribe(response => {
|
|
275
|
-
this.instance.addRow();
|
|
276
|
-
if (response?.data?.status) {
|
|
277
|
-
this.instance.addRow();
|
|
278
|
-
if (!this.showCategory) {
|
|
279
|
-
this.removeColumn('category');
|
|
280
|
-
}
|
|
281
|
-
if (!this.showQuantity) {
|
|
282
|
-
this.removeColumn('quantity');
|
|
283
|
-
}
|
|
284
|
-
if (!this.showPrice) {
|
|
285
|
-
this.removeColumn('price');
|
|
286
|
-
}
|
|
287
|
-
if (!this.showSubcategory) {
|
|
288
|
-
this.removeColumn('subCategory');
|
|
289
|
-
}
|
|
290
|
-
if (!this.showInventory) {
|
|
291
|
-
this.removeColumn('inventory');
|
|
292
|
-
}
|
|
293
|
-
const selectedProductsCopy = JSON.parse(JSON.stringify(response.data.items.selectedProducts));
|
|
294
|
-
localStorage.setItem(`selectedProducts-${this.dealId}`, JSON.stringify(this.addPriceProperty(selectedProductsCopy)));
|
|
295
|
-
this.dataSourceNew = response.data.items.selectedProducts;
|
|
296
|
-
this.showDataGrid = true;
|
|
297
|
-
this.instance.component.defaultValue = response.data.items.selectedProducts;
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
else {
|
|
302
|
-
this.checkRowsNumber();
|
|
303
|
-
this.instance.addRow();
|
|
304
|
-
if (this.dataSource.data.length < this.instance.rows.length) {
|
|
305
|
-
this.dataSource.data.push({});
|
|
306
|
-
}
|
|
307
|
-
this.dataSource.data = [...this.dataSource.data];
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
addPriceProperty(selectedProducts) {
|
|
311
|
-
return selectedProducts.map(products => {
|
|
312
|
-
return {
|
|
313
|
-
...products,
|
|
314
|
-
priceDisable: this.isPriceDisable ? true : false
|
|
315
|
-
};
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
checkRowsNumber() {
|
|
319
|
-
while (this.instance.rows.length < this.dataSource.data.length) {
|
|
320
|
-
this.instance.addRow();
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
removeRow(index) {
|
|
324
|
-
let message = 'Are you sure you want to delete this product?';
|
|
325
|
-
let showButton = true;
|
|
326
|
-
if (this.dataSource?.data?.length === 1 && !this.checkSubmissionStatus) {
|
|
327
|
-
message = 'Please select at least one product.';
|
|
328
|
-
showButton = false;
|
|
329
|
-
}
|
|
330
|
-
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
|
|
331
|
-
disableClose: true,
|
|
332
|
-
width: '90%',
|
|
333
|
-
maxWidth: '400px',
|
|
334
|
-
data: { message: message, buttonStatus: showButton }
|
|
335
|
-
});
|
|
336
|
-
dialogRef.afterClosed().subscribe(result => {
|
|
337
|
-
if (result) {
|
|
338
|
-
if (this.dataSource?.data?.length === 1 && this.checkSubmissionStatus) {
|
|
339
|
-
this.showDataGrid = false;
|
|
340
|
-
}
|
|
341
|
-
// User confirmed, proceed with deletion
|
|
342
|
-
this.instance.removeRow(index);
|
|
343
|
-
this.dataSource.data.splice(index, 1);
|
|
344
|
-
this.dataSource.data = [...this.dataSource.data];
|
|
345
|
-
}
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
dropTable(event) {
|
|
349
|
-
const prevIndex = this.dataSource.data.findIndex((d) => d === event.item.data);
|
|
350
|
-
moveItemInArray(this.control.value, prevIndex, event.currentIndex);
|
|
351
|
-
this.renderComponents();
|
|
352
|
-
}
|
|
353
|
-
renderComponents() {
|
|
354
|
-
this.instance.getRows();
|
|
355
|
-
this.instance.setValue(this.control.value || []);
|
|
356
|
-
}
|
|
357
|
-
setValue(value) {
|
|
358
|
-
const gridLength = value ? value.length : 0;
|
|
359
|
-
while (this.instance.rows.length < gridLength) {
|
|
360
|
-
this.addAnother();
|
|
361
|
-
this.instance.dataValue = value;
|
|
362
|
-
this.instance.setValue(value);
|
|
363
|
-
}
|
|
364
|
-
if (!value && this.instance.component.clearOnHide) {
|
|
365
|
-
this.dataSource = new MatTableDataSource(this.instance.defaultValue);
|
|
366
|
-
}
|
|
367
|
-
super.setValue(value);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
MaterialDataGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialDataGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.MatDialog }, { token: i2.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
371
|
-
MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MaterialDataGridComponent, selector: "mat-formio-datagrid", usesInheritance: true, ngImport: i0, template: `
|
|
372
|
-
<mat-formio-form-field [instance]="instance"
|
|
373
|
-
[componentTemplate]="componentTemplate"
|
|
374
|
-
[labelTemplate]="labelTemplate"
|
|
375
|
-
></mat-formio-form-field>
|
|
376
|
-
<ng-template #componentTemplate let-hasLabel>
|
|
377
|
-
<mat-card appearance="outlined" fxFill>
|
|
378
|
-
<ng-container *ngIf="hasLabel">
|
|
379
|
-
<ng-container *ngTemplateOutlet="labelTemplate"></ng-container>
|
|
380
|
-
</ng-container>
|
|
381
|
-
<mat-card-content>
|
|
382
|
-
|
|
383
|
-
<!-- Message when no products are found -->
|
|
384
|
-
<div class="no-data-message" *ngIf="!showDataGrid || (dataSource?.data?.length === 0 && !showNewProductPicker)">
|
|
385
|
-
No products found. Please add some products.
|
|
386
|
-
</div>
|
|
387
|
-
|
|
388
|
-
<ng-container *ngIf="showDataGrid">
|
|
389
|
-
<mat-card-actions
|
|
390
|
-
*ngIf="instance.hasAddButton() && (instance.component.addAnotherPosition === 'both' || instance.component.addAnotherPosition === 'top')">
|
|
391
|
-
<button mat-raised-button color="primary" (click)="addAnother()">
|
|
392
|
-
<mat-icon>add</mat-icon>
|
|
393
|
-
{{instance.component.addAnother || 'Add Another'}}
|
|
394
|
-
</button>
|
|
395
|
-
</mat-card-actions>
|
|
396
|
-
<ng-container *ngIf="!showNewProductPicker">
|
|
397
|
-
<div class="mat-elevation-z8">
|
|
398
|
-
<table
|
|
399
|
-
mat-table
|
|
400
|
-
[dataSource]="dataSource"
|
|
401
|
-
class="mat-elevation-z8"
|
|
402
|
-
fxFill
|
|
403
|
-
cdkDropList
|
|
404
|
-
[cdkDropListData]="dataSource"
|
|
405
|
-
(cdkDropListDropped)="dropTable($event)" *ngIf="!isCustomerCountryFiltered || !emptyArray; else noDataMessage">
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
<ng-container *ngFor="let column of formColumns" [matColumnDef]="column">
|
|
409
|
-
<th mat-header-cell *matHeaderCellDef>{{ getColumnLabel(columns[column]) }}</th>
|
|
410
|
-
<td mat-cell *matCellDef="let i = index;" [attr.rowIndex]="i" [attr.component]="column">
|
|
411
|
-
<ng-template #components></ng-template>
|
|
412
|
-
</td>
|
|
413
|
-
</ng-container>
|
|
414
|
-
<ng-container matColumnDef="__removeRow">
|
|
415
|
-
<th mat-header-cell *matHeaderCellDef></th>
|
|
416
|
-
<td mat-cell *matCellDef="let i = index;">
|
|
417
|
-
<button mat-button *ngIf="instance.hasRemoveButtons()" (click)="removeRow(i)">
|
|
418
|
-
<mat-icon aria-hidden="false" aria-label="Remove row">delete</mat-icon>
|
|
419
|
-
</button>
|
|
420
|
-
</td>
|
|
421
|
-
</ng-container>
|
|
422
|
-
<ng-container matColumnDef="position" *ngIf="instance.component.reorder">
|
|
423
|
-
<th mat-header-cell *matHeaderCellDef> No.</th>
|
|
424
|
-
<td mat-cell *matCellDef="let element">
|
|
425
|
-
<mat-icon cdkDragHandle>reorder</mat-icon>
|
|
426
|
-
</td>
|
|
427
|
-
</ng-container>
|
|
428
|
-
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
|
|
429
|
-
<div *ngIf="instance?.component?.reorder">
|
|
430
|
-
<tr class="datagrid-row" mat-row *matRowDef="let row; columns: displayedColumns;" cdkDrag
|
|
431
|
-
[cdkDragData]="row"></tr>
|
|
432
|
-
</div>
|
|
433
|
-
<div *ngIf="!instance?.component?.reorder">
|
|
434
|
-
<tr class="datagrid-row" mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
|
|
435
|
-
</div>
|
|
436
|
-
</table>
|
|
437
|
-
</div>
|
|
438
|
-
</ng-container>
|
|
439
|
-
|
|
440
|
-
<!-- Default Message -->
|
|
441
|
-
<ng-template #noDataMessage>
|
|
442
|
-
<div class="no-data-message" *ngIf="isCustomerCountryFiltered && emptyArray && !showNewProductPicker">
|
|
443
|
-
<span>
|
|
444
|
-
No Product found with the selected Customer country.
|
|
445
|
-
</span>
|
|
446
|
-
</div>
|
|
447
|
-
</ng-template>
|
|
448
|
-
|
|
449
|
-
<table mat-table [dataSource]="dataSourceNew" class="mat-table" *ngIf="dataSourceNew.length > 0 && showNewProductPicker; else noData" >
|
|
450
|
-
<!-- Product Name Column -->
|
|
451
|
-
<ng-container matColumnDef="productName">
|
|
452
|
-
<th mat-header-cell *matHeaderCellDef> {{productTweek}} </th>
|
|
453
|
-
<td mat-cell *matCellDef="let element"> {{element.text}} </td>
|
|
454
|
-
</ng-container>
|
|
455
|
-
|
|
456
|
-
<!-- Quantity Column -->
|
|
457
|
-
<ng-container matColumnDef="quantity" *ngIf="showQuantity">
|
|
458
|
-
<th mat-header-cell *matHeaderCellDef> {{ quantityTweek }} </th>
|
|
459
|
-
<td mat-cell *matCellDef="let element"> {{element.quantity}} </td>
|
|
460
|
-
</ng-container>
|
|
461
|
-
|
|
462
|
-
<!-- Price Column -->
|
|
463
|
-
<ng-container matColumnDef="price" *ngIf="showPrice">
|
|
464
|
-
<th mat-header-cell *matHeaderCellDef> {{priceTweek}} </th>
|
|
465
|
-
<td mat-cell *matCellDef="let element"> {{element.price}} </td>
|
|
466
|
-
</ng-container>
|
|
467
|
-
|
|
468
|
-
<!-- Category Column -->
|
|
469
|
-
<ng-container matColumnDef="category" *ngIf="showCategory">
|
|
470
|
-
<th mat-header-cell *matHeaderCellDef> {{categoryTweek}} </th>
|
|
471
|
-
<td mat-cell *matCellDef="let element"> {{element.category}} </td>
|
|
472
|
-
</ng-container>
|
|
473
|
-
|
|
474
|
-
<!-- Category Column -->
|
|
475
|
-
<ng-container matColumnDef="subCategory" *ngIf="showSubcategory">
|
|
476
|
-
<th mat-header-cell *matHeaderCellDef> {{subCategoryTweek}} </th>
|
|
477
|
-
<td mat-cell *matCellDef="let element"> {{element.subCategory}} </td>
|
|
478
|
-
</ng-container>
|
|
479
|
-
|
|
480
|
-
<!-- SKU Column -->
|
|
481
|
-
<ng-container matColumnDef="skuNumber" *ngIf="showSkuNumber">
|
|
482
|
-
<th mat-header-cell *matHeaderCellDef> {{skuTweek}} </th>
|
|
483
|
-
<td mat-cell *matCellDef="let element"> {{element?.otherInformation0}} </td>
|
|
484
|
-
</ng-container>
|
|
485
|
-
|
|
486
|
-
<!-- Inventory Column -->
|
|
487
|
-
<ng-container matColumnDef="inventory" *ngIf="showInventory">
|
|
488
|
-
<th mat-header-cell *matHeaderCellDef> {{inventoryTweek}} </th>
|
|
489
|
-
<td mat-cell *matCellDef="let element"> {{element?.otherInformation1}} </td>
|
|
490
|
-
</ng-container>
|
|
491
|
-
|
|
492
|
-
<!-- Your Target Cost -->
|
|
493
|
-
<ng-container matColumnDef="cost" *ngIf="showCost">
|
|
494
|
-
<th mat-header-cell *matHeaderCellDef> {{costTweek}} </th>
|
|
495
|
-
<td mat-cell *matCellDef="let element"> {{element?.otherInformation0 || element?.otherInformation2}} </td>
|
|
496
|
-
</ng-container>
|
|
497
|
-
|
|
498
|
-
<tr mat-header-row *matHeaderRowDef="displayedColumnsNew"></tr>
|
|
499
|
-
<tr mat-row *matRowDef="let row; columns: displayedColumnsNew;"></tr>
|
|
500
|
-
</table>
|
|
501
|
-
<ng-template #noData>
|
|
502
|
-
<div class="no-data-message" *ngIf="showNewProductPicker">
|
|
503
|
-
<ng-container *ngIf="showNewProductPicker && !isCustomerCountryFiltered">
|
|
504
|
-
No products found. Please add some products.
|
|
505
|
-
</ng-container>
|
|
506
|
-
<ng-container *ngIf="showNewProductPicker && isCustomerCountryFiltered">
|
|
507
|
-
No products found. Please add some products.
|
|
508
|
-
</ng-container>
|
|
509
|
-
</div>
|
|
510
|
-
</ng-template>
|
|
511
|
-
|
|
512
|
-
</ng-container>
|
|
513
|
-
|
|
514
|
-
</mat-card-content>
|
|
515
|
-
<mat-card-actions *ngIf="instance.hasAddButton() && instance.component.addAnotherPosition !== 'top'">
|
|
516
|
-
<button class = "picker2new-btn" mat-raised-button color="primary" (click)="addAnother()" *ngIf="!(isCustomerCountryFiltered && emptyArray && !showNewProductPicker)">
|
|
517
|
-
<mat-icon>add</mat-icon>
|
|
518
|
-
{{instance.component.addAnother || 'Add Another'}}
|
|
519
|
-
</button>
|
|
520
|
-
</mat-card-actions>
|
|
521
|
-
</mat-card>
|
|
522
|
-
</ng-template>
|
|
523
|
-
|
|
524
|
-
<ng-template #labelTemplate>
|
|
525
|
-
<mat-card-title>
|
|
526
|
-
<span [instance]="instance" matFormioLabel></span>
|
|
527
|
-
</mat-card-title>
|
|
528
|
-
</ng-template>
|
|
529
|
-
`, isInline: true, styles: [".datagrid-row{height:auto}.mat-mdc-table{width:100%}.mat-mdc-header-cell,.mat-mdc-cell{padding:8px}.no-data-message{display:flex;justify-content:center;align-items:center;text-align:center;padding:20px;margin:0 20px;font-size:18px;color:#888}::ng-deep .picker2new-btn.cdk-program-focused .mat-button-focus-overlay{opacity:0}\n"], dependencies: [{ 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: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i8.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i9.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i9.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i9.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i10.FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: i11.LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }] });
|
|
530
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialDataGridComponent, decorators: [{
|
|
531
|
-
type: Component,
|
|
532
|
-
args: [{ selector: 'mat-formio-datagrid', template: `
|
|
533
|
-
<mat-formio-form-field [instance]="instance"
|
|
534
|
-
[componentTemplate]="componentTemplate"
|
|
535
|
-
[labelTemplate]="labelTemplate"
|
|
536
|
-
></mat-formio-form-field>
|
|
537
|
-
<ng-template #componentTemplate let-hasLabel>
|
|
538
|
-
<mat-card appearance="outlined" fxFill>
|
|
539
|
-
<ng-container *ngIf="hasLabel">
|
|
540
|
-
<ng-container *ngTemplateOutlet="labelTemplate"></ng-container>
|
|
541
|
-
</ng-container>
|
|
542
|
-
<mat-card-content>
|
|
543
|
-
|
|
544
|
-
<!-- Message when no products are found -->
|
|
545
|
-
<div class="no-data-message" *ngIf="!showDataGrid || (dataSource?.data?.length === 0 && !showNewProductPicker)">
|
|
546
|
-
No products found. Please add some products.
|
|
547
|
-
</div>
|
|
548
|
-
|
|
549
|
-
<ng-container *ngIf="showDataGrid">
|
|
550
|
-
<mat-card-actions
|
|
551
|
-
*ngIf="instance.hasAddButton() && (instance.component.addAnotherPosition === 'both' || instance.component.addAnotherPosition === 'top')">
|
|
552
|
-
<button mat-raised-button color="primary" (click)="addAnother()">
|
|
553
|
-
<mat-icon>add</mat-icon>
|
|
554
|
-
{{instance.component.addAnother || 'Add Another'}}
|
|
555
|
-
</button>
|
|
556
|
-
</mat-card-actions>
|
|
557
|
-
<ng-container *ngIf="!showNewProductPicker">
|
|
558
|
-
<div class="mat-elevation-z8">
|
|
559
|
-
<table
|
|
560
|
-
mat-table
|
|
561
|
-
[dataSource]="dataSource"
|
|
562
|
-
class="mat-elevation-z8"
|
|
563
|
-
fxFill
|
|
564
|
-
cdkDropList
|
|
565
|
-
[cdkDropListData]="dataSource"
|
|
566
|
-
(cdkDropListDropped)="dropTable($event)" *ngIf="!isCustomerCountryFiltered || !emptyArray; else noDataMessage">
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
<ng-container *ngFor="let column of formColumns" [matColumnDef]="column">
|
|
570
|
-
<th mat-header-cell *matHeaderCellDef>{{ getColumnLabel(columns[column]) }}</th>
|
|
571
|
-
<td mat-cell *matCellDef="let i = index;" [attr.rowIndex]="i" [attr.component]="column">
|
|
572
|
-
<ng-template #components></ng-template>
|
|
573
|
-
</td>
|
|
574
|
-
</ng-container>
|
|
575
|
-
<ng-container matColumnDef="__removeRow">
|
|
576
|
-
<th mat-header-cell *matHeaderCellDef></th>
|
|
577
|
-
<td mat-cell *matCellDef="let i = index;">
|
|
578
|
-
<button mat-button *ngIf="instance.hasRemoveButtons()" (click)="removeRow(i)">
|
|
579
|
-
<mat-icon aria-hidden="false" aria-label="Remove row">delete</mat-icon>
|
|
580
|
-
</button>
|
|
581
|
-
</td>
|
|
582
|
-
</ng-container>
|
|
583
|
-
<ng-container matColumnDef="position" *ngIf="instance.component.reorder">
|
|
584
|
-
<th mat-header-cell *matHeaderCellDef> No.</th>
|
|
585
|
-
<td mat-cell *matCellDef="let element">
|
|
586
|
-
<mat-icon cdkDragHandle>reorder</mat-icon>
|
|
587
|
-
</td>
|
|
588
|
-
</ng-container>
|
|
589
|
-
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
|
|
590
|
-
<div *ngIf="instance?.component?.reorder">
|
|
591
|
-
<tr class="datagrid-row" mat-row *matRowDef="let row; columns: displayedColumns;" cdkDrag
|
|
592
|
-
[cdkDragData]="row"></tr>
|
|
593
|
-
</div>
|
|
594
|
-
<div *ngIf="!instance?.component?.reorder">
|
|
595
|
-
<tr class="datagrid-row" mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
|
|
596
|
-
</div>
|
|
597
|
-
</table>
|
|
598
|
-
</div>
|
|
599
|
-
</ng-container>
|
|
600
|
-
|
|
601
|
-
<!-- Default Message -->
|
|
602
|
-
<ng-template #noDataMessage>
|
|
603
|
-
<div class="no-data-message" *ngIf="isCustomerCountryFiltered && emptyArray && !showNewProductPicker">
|
|
604
|
-
<span>
|
|
605
|
-
No Product found with the selected Customer country.
|
|
606
|
-
</span>
|
|
607
|
-
</div>
|
|
608
|
-
</ng-template>
|
|
609
|
-
|
|
610
|
-
<table mat-table [dataSource]="dataSourceNew" class="mat-table" *ngIf="dataSourceNew.length > 0 && showNewProductPicker; else noData" >
|
|
611
|
-
<!-- Product Name Column -->
|
|
612
|
-
<ng-container matColumnDef="productName">
|
|
613
|
-
<th mat-header-cell *matHeaderCellDef> {{productTweek}} </th>
|
|
614
|
-
<td mat-cell *matCellDef="let element"> {{element.text}} </td>
|
|
615
|
-
</ng-container>
|
|
616
|
-
|
|
617
|
-
<!-- Quantity Column -->
|
|
618
|
-
<ng-container matColumnDef="quantity" *ngIf="showQuantity">
|
|
619
|
-
<th mat-header-cell *matHeaderCellDef> {{ quantityTweek }} </th>
|
|
620
|
-
<td mat-cell *matCellDef="let element"> {{element.quantity}} </td>
|
|
621
|
-
</ng-container>
|
|
622
|
-
|
|
623
|
-
<!-- Price Column -->
|
|
624
|
-
<ng-container matColumnDef="price" *ngIf="showPrice">
|
|
625
|
-
<th mat-header-cell *matHeaderCellDef> {{priceTweek}} </th>
|
|
626
|
-
<td mat-cell *matCellDef="let element"> {{element.price}} </td>
|
|
627
|
-
</ng-container>
|
|
628
|
-
|
|
629
|
-
<!-- Category Column -->
|
|
630
|
-
<ng-container matColumnDef="category" *ngIf="showCategory">
|
|
631
|
-
<th mat-header-cell *matHeaderCellDef> {{categoryTweek}} </th>
|
|
632
|
-
<td mat-cell *matCellDef="let element"> {{element.category}} </td>
|
|
633
|
-
</ng-container>
|
|
634
|
-
|
|
635
|
-
<!-- Category Column -->
|
|
636
|
-
<ng-container matColumnDef="subCategory" *ngIf="showSubcategory">
|
|
637
|
-
<th mat-header-cell *matHeaderCellDef> {{subCategoryTweek}} </th>
|
|
638
|
-
<td mat-cell *matCellDef="let element"> {{element.subCategory}} </td>
|
|
639
|
-
</ng-container>
|
|
640
|
-
|
|
641
|
-
<!-- SKU Column -->
|
|
642
|
-
<ng-container matColumnDef="skuNumber" *ngIf="showSkuNumber">
|
|
643
|
-
<th mat-header-cell *matHeaderCellDef> {{skuTweek}} </th>
|
|
644
|
-
<td mat-cell *matCellDef="let element"> {{element?.otherInformation0}} </td>
|
|
645
|
-
</ng-container>
|
|
646
|
-
|
|
647
|
-
<!-- Inventory Column -->
|
|
648
|
-
<ng-container matColumnDef="inventory" *ngIf="showInventory">
|
|
649
|
-
<th mat-header-cell *matHeaderCellDef> {{inventoryTweek}} </th>
|
|
650
|
-
<td mat-cell *matCellDef="let element"> {{element?.otherInformation1}} </td>
|
|
651
|
-
</ng-container>
|
|
652
|
-
|
|
653
|
-
<!-- Your Target Cost -->
|
|
654
|
-
<ng-container matColumnDef="cost" *ngIf="showCost">
|
|
655
|
-
<th mat-header-cell *matHeaderCellDef> {{costTweek}} </th>
|
|
656
|
-
<td mat-cell *matCellDef="let element"> {{element?.otherInformation0 || element?.otherInformation2}} </td>
|
|
657
|
-
</ng-container>
|
|
658
|
-
|
|
659
|
-
<tr mat-header-row *matHeaderRowDef="displayedColumnsNew"></tr>
|
|
660
|
-
<tr mat-row *matRowDef="let row; columns: displayedColumnsNew;"></tr>
|
|
661
|
-
</table>
|
|
662
|
-
<ng-template #noData>
|
|
663
|
-
<div class="no-data-message" *ngIf="showNewProductPicker">
|
|
664
|
-
<ng-container *ngIf="showNewProductPicker && !isCustomerCountryFiltered">
|
|
665
|
-
No products found. Please add some products.
|
|
666
|
-
</ng-container>
|
|
667
|
-
<ng-container *ngIf="showNewProductPicker && isCustomerCountryFiltered">
|
|
668
|
-
No products found. Please add some products.
|
|
669
|
-
</ng-container>
|
|
670
|
-
</div>
|
|
671
|
-
</ng-template>
|
|
672
|
-
|
|
673
|
-
</ng-container>
|
|
674
|
-
|
|
675
|
-
</mat-card-content>
|
|
676
|
-
<mat-card-actions *ngIf="instance.hasAddButton() && instance.component.addAnotherPosition !== 'top'">
|
|
677
|
-
<button class = "picker2new-btn" mat-raised-button color="primary" (click)="addAnother()" *ngIf="!(isCustomerCountryFiltered && emptyArray && !showNewProductPicker)">
|
|
678
|
-
<mat-icon>add</mat-icon>
|
|
679
|
-
{{instance.component.addAnother || 'Add Another'}}
|
|
680
|
-
</button>
|
|
681
|
-
</mat-card-actions>
|
|
682
|
-
</mat-card>
|
|
683
|
-
</ng-template>
|
|
684
|
-
|
|
685
|
-
<ng-template #labelTemplate>
|
|
686
|
-
<mat-card-title>
|
|
687
|
-
<span [instance]="instance" matFormioLabel></span>
|
|
688
|
-
</mat-card-title>
|
|
689
|
-
</ng-template>
|
|
690
|
-
`, styles: [".datagrid-row{height:auto}.mat-mdc-table{width:100%}.mat-mdc-header-cell,.mat-mdc-cell{padding:8px}.no-data-message{display:flex;justify-content:center;align-items:center;text-align:center;padding:20px;margin:0 20px;font-size:18px;color:#888}::ng-deep .picker2new-btn.cdk-program-focused .mat-button-focus-overlay{opacity:0}\n"] }]
|
|
691
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.MatDialog }, { type: i2.CommonService }]; } });
|
|
692
|
-
DataGridComponent.MaterialComponent = MaterialDataGridComponent;
|
|
693
|
-
export { DataGridComponent };
|
|
694
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlbmRlci1tYXRlcmlhbC1mb3Jtcy9zcmMvbGliL2NvbXBvbmVudHMvZGF0YWdyaWQvZGF0YWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0MsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8saUJBQWlCLE1BQU0sMENBQTBDLENBQUM7QUFDekUsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3RGLE1BQU0sWUFBWSxHQUFjLEVBQy9CLENBQUM7QUF1S0YsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHVCQUF1QjtJQUVwRSxZQUFtQixPQUFtQixFQUFTLEdBQXNCLEVBQVUsTUFBaUIsRUFBUyxhQUE0QjtRQUNuSSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBREgsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUFTLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBWXJJLGVBQVUsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDdEMsa0JBQWEsR0FBRyxZQUFZLENBQUM7UUFDN0Isd0JBQW1CLEdBQWEsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUs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QUFDLEtBQUssQ0FBQztRQUM1SCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM1SCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM1SCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM1SCxNQUFNLFVBQVUsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDNUksTUFBTSxRQUFRLEdBQUcsR0FBRyxL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QXlCLGtGQXBLMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEpUOzRGQU1VLHlCQUF5QjtrQkF0S3JDLFNBQVM7K0JBQ0UscUJBQXFCLFlBQ3JCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThKVDs7QUE4WEgsaUJBQWlCLENBQUMsaUJBQWlCLEdBQUcseUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbE5lc3RlZENvbXBvbmVudCB9IGZyb20gJy4uL01hdGVyaWFsTmVzdGVkQ29tcG9uZW50JztcclxuaW1wb3J0IERhdGFHcmlkQ29tcG9uZW50IGZyb20gJ2Zvcm1pb2pzL2NvbXBvbmVudHMvZGF0YWdyaWQvRGF0YUdyaWQuanMnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBZGRPblByb2R1Y3RzQ29tcG9uZW50IH0gZnJvbSAnLi4vYWRkLW9uLXByb2R1Y3RzL2FkZC1vbi1wcm9kdWN0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgaW50ZXJmYWNlIFByb2R1Y3Qge1xyXG4gIHByb2R1Y3ROYW1lOiBzdHJpbmc7XHJcbiAgcXVhbnRpdHk6IG51bWJlcjtcclxuICBwcmljZTogbnVtYmVyO1xyXG59XHJcbmNvbnN0IEVMRU1FTlRfREFUQTogUHJvZHVjdFtdID0gW1xyXG5dO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21hdC1mb3JtaW8tZGF0YWdyaWQnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bWF0LWZvcm1pby1mb3JtLWZpZWxkIFtpbnN0YW5jZV09XCJpbnN0YW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRUZW1wbGF0ZV09XCJjb21wb25lbnRUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFRlbXBsYXRlXT1cImxhYmVsVGVtcGxhdGVcIlxyXG4gICAgPjwvbWF0LWZvcm1pby1mb3JtLWZpZWxkPlxyXG4gICAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRUZW1wbGF0ZSBsZXQtaGFzTGFiZWw+XHJcbiAgICAgIDxtYXQtY2FyZCBhcHBlYXJhbmNlPVwib3V0bGluZWRcIiBmeEZpbGw+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0xhYmVsXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICA8IS0tIE1lc3NhZ2Ugd2hlbiBubyBwcm9kdWN0cyBhcmUgZm91bmQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cIm5vLWRhdGEtbWVzc2FnZVwiICpuZ0lmPVwiIXNob3dEYXRhR3JpZCB8fCAoZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID09PSAwICYmICFzaG93TmV3UHJvZHVjdFBpY2tlcilcIj5cclxuICAgIE5vIHByb2R1Y3RzIGZvdW5kLiBQbGVhc2UgYWRkIHNvbWUgcHJvZHVjdHMuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RGF0YUdyaWRcIj5cclxuICAgICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5zdGFuY2UuaGFzQWRkQnV0dG9uKCkgJiYgKGluc3RhbmNlLmNvbXBvbmVudC5hZGRBbm90aGVyUG9zaXRpb24gPT09ICdib3RoJyB8fCBpbnN0YW5jZS5jb21wb25lbnQuYWRkQW5vdGhlclBvc2l0aW9uID09PSAndG9wJylcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYWRkQW5vdGhlcigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAge3tpbnN0YW5jZS5jb21wb25lbnQuYWRkQW5vdGhlciB8fCAnQWRkIEFub3RoZXInfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd05ld1Byb2R1Y3RQaWNrZXJcIj5cclxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIj5cclxuICAgICAgICAgIDx0YWJsZVxyXG4gICAgICAgICAgICAgICAgICBtYXQtdGFibGVcclxuICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OFwiXHJcbiAgICAgICAgICAgICAgICAgIGZ4RmlsbFxyXG4gICAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxyXG4gICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BUYWJsZSgkZXZlbnQpXCIgKm5nSWY9XCIhaXNDdXN0b21lckNvdW50cnlGaWx0ZXJlZCB8fCAhZW1wdHlBcnJheTsgZWxzZSBub0RhdGFNZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZvcm1Db2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPnt7IGdldENvbHVtbkxhYmVsKGNvbHVtbnNbY29sdW1uXSkgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpID0gaW5kZXg7XCIgW2F0dHIucm93SW5kZXhdPVwiaVwiIFthdHRyLmNvbXBvbmVudF09XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29tcG9uZW50cz48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIl9fcmVtb3ZlUm93XCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxyXG4gICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpID0gaW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCJpbnN0YW5jZS5oYXNSZW1vdmVCdXR0b25zKClcIiAoY2xpY2spPVwicmVtb3ZlUm93KGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIlJlbW92ZSByb3dcIj5kZWxldGU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicG9zaXRpb25cIiAqbmdJZj1cImluc3RhbmNlLmNvbXBvbmVudC5yZW9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gTm8uPC90aD5cclxuICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+cmVvcmRlcjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpbnN0YW5jZT8uY29tcG9uZW50Py5yZW9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZGF0YWdyaWQtcm93XCIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIiBjZGtEcmFnXHJcbiAgICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJyb3dcIj48L3RyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpbnN0YW5jZT8uY29tcG9uZW50Py5yZW9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZGF0YWdyaWQtcm93XCIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1ucztcIj48L3RyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48IS0tIERlZmF1bHQgTWVzc2FnZSAtLT5cclxuPG5nLXRlbXBsYXRlICNub0RhdGFNZXNzYWdlPlxyXG4gIDxkaXYgY2xhc3M9XCJuby1kYXRhLW1lc3NhZ2VcIiAqbmdJZj1cImlzQ3VzdG9tZXJDb3VudHJ5RmlsdGVyZWQgJiYgZW1wdHlBcnJheSAmJiAhc2hvd05ld1Byb2R1Y3RQaWNrZXJcIj5cclxuICAgIDxzcGFuPlxyXG4gICAgICBObyBQcm9kdWN0IGZvdW5kIHdpdGggdGhlIHNlbGVjdGVkIEN1c3RvbWVyIGNvdW50cnkuXHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlTmV3XCIgY2xhc3M9XCJtYXQtdGFibGVcIiAqbmdJZj1cImRhdGFTb3VyY2VOZXcubGVuZ3RoID4gMCAmJiBzaG93TmV3UHJvZHVjdFBpY2tlcjsgZWxzZSBub0RhdGFcIiA+XHJcbiAgICA8IS0tIFByb2R1Y3QgTmFtZSBDb2x1bW4gLS0+XHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInByb2R1Y3ROYW1lXCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IHt7cHJvZHVjdFR3ZWVrfX0gPC90aD5cclxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3tlbGVtZW50LnRleHR9fSA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBRdWFudGl0eSBDb2x1bW4gLS0+XHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInF1YW50aXR5XCIgKm5nSWY9XCJzaG93UXVhbnRpdHlcIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4ge3sgcXVhbnRpdHlUd2VlayB9fSA8L3RoPlxyXG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPiB7e2VsZW1lbnQucXVhbnRpdHl9fSA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBQcmljZSBDb2x1bW4gLS0+XHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInByaWNlXCIgKm5nSWY9XCJzaG93UHJpY2VcIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4ge3twcmljZVR3ZWVrfX0gPC90aD5cclxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3tlbGVtZW50LnByaWNlfX0gPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICA8IS0tIENhdGVnb3J5IENvbHVtbiAtLT5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiY2F0ZWdvcnlcIiAqbmdJZj1cInNob3dDYXRlZ29yeVwiPlxyXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiB7e2NhdGVnb3J5VHdlZWt9fSA8L3RoPlxyXG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPiB7e2VsZW1lbnQuY2F0ZWdvcnl9fSA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gQ2F0ZWdvcnkgQ29sdW1uIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdWJDYXRlZ29yeVwiICpuZ0lmPVwic2hvd1N1YmNhdGVnb3J5XCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IHt7c3ViQ2F0ZWdvcnlUd2Vla319IDwvdGg+XHJcbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+IHt7ZWxlbWVudC5zdWJDYXRlZ29yeX19IDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBTS1UgQ29sdW1uIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJza3VOdW1iZXJcIiAqbmdJZj1cInNob3dTa3VOdW1iZXJcIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4ge3tza3VUd2Vla319IDwvdGg+XHJcbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+IHt7ZWxlbWVudD8ub3RoZXJJbmZvcm1hdGlvbjB9fSA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBJbnZlbnRvcnkgQ29sdW1uIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJpbnZlbnRvcnlcIiAqbmdJZj1cInNob3dJbnZlbnRvcnlcIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4ge3tpbnZlbnRvcnlUd2Vla319IDwvdGg+XHJcbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+IHt7ZWxlbWVudD8ub3RoZXJJbmZvcm1hdGlvbjF9fSA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBZb3VyIFRhcmdldCBDb3N0IC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjb3N0XCIgKm5nSWY9XCJzaG93Q29zdFwiPlxyXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiB7e2Nvc3RUd2Vla319IDwvdGg+XHJcbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+IHt7ZWxlbWVudD8ub3RoZXJJbmZvcm1hdGlvbjAgfHwgZWxlbWVudD8ub3RoZXJJbmZvcm1hdGlvbjJ9fSA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zTmV3XCI+PC90cj5cclxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zTmV3O1wiPjwvdHI+XHJcbiAgPC90YWJsZT5cclxuICA8bmctdGVtcGxhdGUgI25vRGF0YT5cclxuICA8ZGl2IGNsYXNzPVwibm8tZGF0YS1tZXNzYWdlXCIgKm5nSWY9XCJzaG93TmV3UHJvZHVjdFBpY2tlclwiPlxyXG4gICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd05ld1Byb2R1Y3RQaWNrZXIgJiYgIWlzQ3VzdG9tZXJDb3VudHJ5RmlsdGVyZWRcIj5cclxuICAgICAgTm8gcHJvZHVjdHMgZm91bmQuIFBsZWFzZSBhZGQgc29tZSBwcm9kdWN0cy5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TmV3UHJvZHVjdFBpY2tlciAmJiBpc0N1c3RvbWVyQ291bnRyeUZpbHRlcmVkXCI+XHJcbiAgICAgIE5vIHByb2R1Y3RzIGZvdW5kLiBQbGVhc2UgYWRkIHNvbWUgcHJvZHVjdHMuXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zICpuZ0lmPVwiaW5zdGFuY2UuaGFzQWRkQnV0dG9uKCkgJiYgaW5zdGFuY2UuY29tcG9uZW50LmFkZEFub3RoZXJQb3NpdGlvbiAhPT0gJ3RvcCdcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3MgPSBcInBpY2tlcjJuZXctYnRuXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImFkZEFub3RoZXIoKVwiICpuZ0lmPVwiIShpc0N1c3RvbWVyQ291bnRyeUZpbHRlcmVkICYmIGVtcHR5QXJyYXkgJiYgIXNob3dOZXdQcm9kdWN0UGlja2VyKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAge3tpbnN0YW5jZS5jb21wb25lbnQuYWRkQW5vdGhlciB8fCAnQWRkIEFub3RoZXInfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICAgICAgPC9tYXQtY2FyZD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxyXG4gICAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgPHNwYW4gW2luc3RhbmNlXT1cImluc3RhbmNlXCIgbWF0Rm9ybWlvTGFiZWw+PC9zcGFuPlxyXG4gICAgICA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG4gIHN0eWxlczogW1xyXG4gICAgYC5kYXRhZ3JpZC1yb3cgeyBoZWlnaHQ6IGF1dG87IH0gLm1hdC1tZGMtdGFibGV7IHdpZHRoOiAxMDAlIH0gLm1hdC1tZGMtaGVhZGVyLWNlbGwsIC5tYXQtbWRjLWNlbGx7IHBhZGRpbmc6IDhweCB9IC5uby1kYXRhLW1lc3NhZ2Uge2Rpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6MjBweDsgbWFyZ2luOiAwIDIwcHggMDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjODg4O30gLyogVE9ETyhtZGMtbWlncmF0aW9uKTogVGhlIGZvbGxvd2luZyBydWxlIHRhcmdldHMgaW50ZXJuYWwgY2xhc3NlcyBvZiBidXR0b24gdGhhdCBtYXkgbm8gbG9uZ2VyIGFwcGx5IGZvciB0aGUgTURDIHZlcnNpb24uICovXHJcbiAgICAgIDo6bmctZGVlcCAucGlja2VyMm5ldy1idG4uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6IDB9YFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsRGF0YUdyaWRDb21wb25lbnQgZXh0ZW5kcyBNYXRlcmlhbE5lc3RlZENvbXBvbmVudCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLCBwdWJsaWMgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGVsZW1lbnQsIHJlZik7XHJcbiAgICBpZiAodGhpcy5lbGVtZW50ICYmIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgLy8gQWRkIGN1c3RvbSBjbGFzc2VzIHRvIGVsZW1lbnRzLlxyXG4gICAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQuY3VzdG9tQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmN1c3RvbUNsYXNzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXTtcclxuICBmb3JtQ29sdW1uczogc3RyaW5nW107XHJcbiAgY29sdW1uczogYW55O1xyXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKCk7XHJcbiAgZGF0YVNvdXJjZU5ldyA9IEVMRU1FTlRfREFUQTtcclxuICBkaXNwbGF5ZWRDb2x1bW5zTmV3OiBzdHJpbmdbXSA9IFsncHJvZHVjdE5hbWUnLCAnY2F0ZWdvcnknLCAnc3ViQ2F0ZWdvcnknLCAncXVhbnRpdHknLCAncHJpY2UnLCAnc2t1TnVtYmVyJywgJ2ludmVudG9yeScsICdjb3N0J107XHJcbiAgc2hvd05ld1Byb2R1Y3RQaWNrZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93Q2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U3ViY2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93UHJpY2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dRdWFudGl0eTogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd1NrdU51bWJlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dJbnZlbnRvcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoZWNrU3VibWlzc2lvblN0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dEYXRhR3JpZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaGFzVmFsdWVBbmRFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRyb3Bkb3duTDE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkcm9wZG93bkwyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZHJvcGRvd25MMzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRyb3Bkb3duTDQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RGlhbG9nUXVhbnRpdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RGlhbG9nUHJpY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RGlhbG9nQ2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RGlhbG9nU2t1TnVtYmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0RpYWxvZ0ludmVudG9yeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dEaWFsb2dTdWJDYXRlZ29yeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRyb3Bkb3duTDFMYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgZHJvcGRvd25MMkxhYmVsOiBzdHJpbmcgPSAnJztcclxuICBkcm9wZG93bkwzTGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIGRyb3Bkb3duTDRMYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgZGVhbElkOiBhbnk7XHJcbiAgaXNDdXN0b21lckNvdW50cnlGaWx0ZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVtcHR5QXJyYXk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1ByaWNlRGlzYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpY2VUd2Vlazogc3RyaW5nID0gJ1ByaWNlJztcclxuICBza3VUd2Vlazogc3RyaW5nID0gJ1NLVSBOdW1iZXInO1xyXG4gIGNvc3RUd2Vlazogc3RyaW5nID0gJ1lvdXIgVGFyZ2V0IENvc3QnO1xyXG4gIHNob3dDb3N0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0RpYWxvZ0Nvc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBxdWFudGl0eVR3ZWVrOiBzdHJpbmcgPSAnUXVhbnRpdHknO1xyXG4gIHByb2R1Y3RUd2Vlazogc3RyaW5nID0gJ1Byb2R1Y3QgTmFtZSc7XHJcbiAgY2F0ZWdvcnlUd2Vlazogc3RyaW5nID0gJ0NhdGVnb3J5IE5hbWUnO1xyXG4gIHN1YkNhdGVnb3J5VHdlZWs6IHN0cmluZyA9ICdTdWIgQ2F0ZWdvcnknO1xyXG4gIGludmVudG9yeVR3ZWVrOiBzdHJpbmcgPSAnSW52ZW50b3J5JztcclxuICBhbHBoYW51bWVyaWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBnZXRDb2x1bW5MYWJlbChjb2x1bW4pIHtcclxuICAgIHJldHVybiBjb2x1bW4ubGFiZWwgfHwgY29sdW1uLmtleTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZ2V0TGFiZWxOYW1lKG5ld1Byb2R1Y3RQaWNrZXJGbGFnLCBhdHRyaWJ1dGVOYW1lKSB7XHJcbiAgICBpZiAobmV3UHJvZHVjdFBpY2tlckZsYWcgJiYgT2JqZWN0LmtleXMobmV3UHJvZHVjdFBpY2tlckZsYWcpLnNvbWUoa2V5ID0+XHJcbiAgICAgIGtleS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgIC8vIEZpbmQgdGhlIGtleSB0aGF0IG1hdGNoZXMgYXR0cmlidXRlTmFtZSBjYXNlLWluc2Vuc2l0aXZlbHlcclxuICAgICAgY29uc3QgbWF0Y2hpbmdLZXkgPSBPYmplY3Qua2V5cyhuZXdQcm9kdWN0UGlja2VyRmxhZykuZmluZChrZXkgPT5cclxuICAgICAgICBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIG1hdGNoaW5nIGtleVxyXG4gICAgICByZXR1cm4gbmV3UHJvZHVjdFBpY2tlckZsYWdbbWF0Y2hpbmdLZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG5cclxuICAvLyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgLy8gfVxyXG5cclxuICBzZXRJbnN0YW5jZShpbnN0YW5jZTogYW55KSB7XHJcbiAgICBjb25zdCBjaGVja0F0dHJpYnV0ZSA9IGluc3RhbmNlPy5jb21wb25lbnQ/LmF0dHJpYnV0ZXM7XHJcbiAgICB0aGlzLnNob3dOZXdQcm9kdWN0UGlja2VyID0gdGhpcy5jb21tb25TZXJ2aWNlLmNoZWNrSXNBdHRyaWJ1dGVUcnVlKGNoZWNrQXR0cmlidXRlLCBcIm5ld3Byb2R1Y3RwaWNrZXJcIik7XHJcbiAgICB0aGlzLnNob3dDYXRlZ29yeSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJzaG93Q2F0ZWdvcnlcIik7XHJcbiAgICB0aGlzLnNob3dTdWJjYXRlZ29yeSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJzaG93U3ViY2F0ZWdvcnlcIik7XHJcbiAgICB0aGlzLnNob3dQcmljZSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJzaG93UHJpY2VcIik7XHJcbiAgICB0aGlzLnNob3dRdWFudGl0eSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJzaG93UXVhbnRpdHlcIik7XHJcbiAgICB0aGlzLnNob3dTa3VOdW1iZXIgPSB0aGlzLmNvbW1vblNlcnZpY2UuY2hlY2tJc0F0dHJpYnV0ZVRydWUoY2hlY2tBdHRyaWJ1dGUsIFwic2hvd1NrdU51bWJlclwiKTtcclxuICAgIHRoaXMuc2hvd0ludmVudG9yeSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJzaG93SW52ZW50b3J5XCIpXHJcbiAgICB0aGlzLnNob3dEaWFsb2dRdWFudGl0eSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJzaG93RGlhbG9nUXVhbnRpdHlcIik7XHJcbiAgICB0aGlzLnNob3dEaWFsb2dQcmljZSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJzaG93RGlhbG9nUHJpY2VcIik7XHJcbiAgICB0aGlzLnNob3dEaWFsb2dDYXRlZ29yeSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJzaG93RGlhbG9nQ2F0ZWdvcnlcIik7XHJcbiAgICB0aGlzLnNob3dEaWFsb2dTa3VOdW1iZXIgPSB0aGlzLmNvbW1vblNlcnZpY2UuY2hlY2tJc0F0dHJpYnV0ZVRydWUoY2hlY2tBdHRyaWJ1dGUsIFwic2hvd0RpYWxvZ1NrdU51bWJlclwiKTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZ0ludmVudG9yeSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJzaG93RGlhbG9nSW52ZW50b3J5XCIpO1xyXG4gICAgdGhpcy5zaG93RGlhbG9nU3ViQ2F0ZWdvcnkgPSB0aGlzLmNvbW1vblNlcnZpY2UuY2hlY2tJc0F0dHJpYnV0ZVRydWUoY2hlY2tBdHRyaWJ1dGUsIFwic2hvd0RpYWxvZ1N1YkNhdGVnb3J5XCIpO1xyXG4gICAgdGhpcy5pc0N1c3RvbWVyQ291bnRyeUZpbHRlcmVkID0gdGhpcy5jb21tb25TZXJ2aWNlLmNoZWNrSXNBdHRyaWJ1dGVUcnVlKGNoZWNrQXR0cmlidXRlLCBcImZpbHRlclByb2R1Y3RCYXNlZE9uQ3VzdG9tZXJDb3VudHJ5XCIpO1xyXG4gICAgdGhpcy5pc1ByaWNlRGlzYWJsZSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShjaGVja0F0dHJpYnV0ZSwgXCJpc1ByaWNlRGlzYWJsZVwiKTtcclxuICAgIHRoaXMuc2hvd0Nvc3QgPSB0aGlzLmNvbW1vblNlcnZpY2UuY2hlY2tJc0F0dHJpYnV0ZVRydWUoY2hlY2tBdHRyaWJ1dGUsIFwic2hvd0Nvc3RcIik7XHJcbiAgICB0aGlzLnNob3dEaWFsb2dDb3N0ID0gdGhpcy5jb21tb25TZXJ2aWNlLmNoZWNrSXNBdHRyaWJ1dGVUcnVlKGNoZWNrQXR0cmlidXRlLCBcInNob3dEaWFsb2dDb3N0XCIpO1xyXG4gICAgdGhpcy5hbHBoYW51bWVyaWMgPSB0aGlzLmNvbW1vblNlcnZpY2UuY2hlY2tJc0F0dHJpYnV0ZVRydWUoY2hlY2tBdHRyaWJ1dGUsIFwiQWxwaGFudW1lcmljXCIpO1xyXG4gICAgY29uc3QgbDEgPSB0aGlzLmdldExhYmVsTmFtZShjaGVja0F0dHJpYnV0ZSwgXCJkcm9wZG93bkwxXCIpO1xyXG4gICAgY29uc3QgbDIgPSB0aGlzLmdldExhYmVsTmFtZShjaGVja0F0dHJpYnV0ZSwgXCJkcm9wZG93bkwyXCIpO1xyXG4gICAgY29uc3QgbDMgPSB0aGlzLmdldExhYmVsTmFtZShjaGVja0F0dHJpYnV0ZSwgXCJkcm9wZG93bkwzXCIpO1xyXG4gICAgY29uc3QgbDQgPSB0aGlzLmdldExhYmVsTmFtZShjaGVja0F0dHJpYnV0ZSwgXCJkcm9wZG93bkw0XCIpO1xyXG4gICAgY29uc3QgcHJpY2UgPSB0aGlzLmdldExhYmVsTmFtZShjaGVja0F0dHJpYnV0ZSwgXCJwcmljZUxhYmVsXCIpO1xyXG4gICAgY29uc3Qgc2t1ID0gdGhpcy5nZXRMYWJlbE5hbWUoY2hlY2tBdHRyaWJ1dGUsIFwic2t1TGFiZWxcIik7XHJcbiAgICBjb25zdCBjb3N0ID0gdGhpcy5nZXRMYWJlbE5hbWUoY2hlY2tBdHRyaWJ1dGUsIFwiY29zdExhYmVsXCIpO1xyXG4gICAgY29uc3QgcXVhbnRpdHkgPSB0aGlzLmdldExhYmVsTmFtZShjaGVja0F0dHJpYnV0ZSwgXCJxdWFudGl0eUxhYmVsXCIpO1xyXG4gICAgY29uc3QgcHJvZHVjdCA9IHRoaXMuZ2V0TGFiZWxOYW1lKGNoZWNrQXR0cmlidXRlLCBcInByb2R1Y3RMYWJlbFwiKTtcclxuICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5nZXRMYWJlbE5hbWUoY2hlY2tBdHRyaWJ1dGUsIFwiY2F0ZWdvcnlMYWJlbFwiKTtcclxuICAgIGNvbnN0IHN1YkNhdGVnb3J5ID0gdGhpcy5nZXRMYWJlbE5hbWUoY2hlY2tBdHRyaWJ1dGUsIFwic3ViQ2F0ZWdvcnlMYWJlbFwiKTtcclxuICAgIGNvbnN0IGludmVudG9yeSA9IHRoaXMuZ2V0TGFiZWxOYW1lKGNoZWNrQXR0cmlidXRlLCBcImludmVudG9yeUxhYmVsXCIpO1xyXG4gICAgdGhpcy5kcm9wZG93bkwxID0gbDEgIT09IG51bGwgJiYgbDEgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGwxID09PSAnc3RyaW5nJyA/IGwxLnRyaW0oKSAhPT0gXCJcIiA6IGwxICE9PSBcIlwiKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMuZHJvcGRvd25MMiA9IGwyICE9PSBudWxsICYmIGwyICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBsMiA9PT0gJ3N0cmluZycgPyBsMi50cmltKCkgIT09IFwiXCIgOiBsMiAhPT0gXCJcIikgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLmRyb3Bkb3duTDMgPSBsMyAhPT0gbnVsbCAmJiBsMyAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgbDMgPT09ICdzdHJpbmcnID8gbDMudHJpbSgpICE9PSBcIlwiIDogbDMgIT09IFwiXCIpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy5kcm9wZG93bkw0ID0gbDQgIT09IG51bGwgJiYgbDQgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGw0ID09PSAnc3RyaW5nJyA/IGw0LnRyaW0oKSAhPT0gXCJcIiA6IGw0ICE9PSBcIlwiKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IHByaWNlVHdlZWsgPSBwcmljZSAhPT0gbnVsbCAmJiBwcmljZSAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgcHJpY2UgPT09ICdzdHJpbmcnID8gcHJpY2UudHJpbSgpICE9PSBcIlwiIDogcHJpY2UgIT09IFwiXCIpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3Qgc2t1VHdlZWsgPSBza3UgIT09IG51bGwgJiYgc2t1ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBza3UgPT09ICdzdHJpbmcnID8gc2t1LnRyaW0oKSAhPT0gXCJcIiA6IHNrdSAhPT0gXCJcIikgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBjb25zdCBjb3N0VHdlZWsgPSBjb3N0ICE9PSBudWxsICYmIGNvc3QgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGNvc3QgPT09ICdzdHJpbmcnID8gY29zdC50cmltKCkgIT09IFwiXCIgOiBjb3N0ICE9PSBcIlwiKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IHF1YW50aXR5VHdlZWsgPSBxdWFudGl0eSAhPT0gbnVsbCAmJiBxdWFudGl0eSAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgcXVhbnRpdHkgPT09ICdzdHJpbmcnID8gcXVhbnRpdHkudHJpbSgpICE9PSBcIlwiIDogcXVhbnRpdHkgIT09IFwiXCIpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3QgcHJvZHVjdFR3ZWVrID0gcHJvZHVjdCAhPT0gbnVsbCAmJiBwcm9kdWN0ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBwcm9kdWN0ID09PSAnc3RyaW5nJyA/IHByb2R1Y3QudHJpbSgpICE9PSBcIlwiIDogcHJvZHVjdCAhPT0gXCJcIikgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBjb25zdCBjYXRlZ29yeVR3ZWVrID0gY2F0ZWdvcnkgIT09IG51bGwgJiYgY2F0ZWdvcnkgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGNhdGVnb3J5ID09PSAnc3RyaW5nJyA/IGNhdGVnb3J5LnRyaW0oKSAhPT0gXCJcIiA6IGNhdGVnb3J5ICE9PSBcIlwiKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IHN1YkNhdGVnb3J5VHdlZWsgPSBzdWJDYXRlZ29yeSAhPT0gbnVsbCAmJiBzdWJDYXRlZ29yeSAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2Ygc3ViQ2F0ZWdvcnkgPT09ICdzdHJpbmcnID8gc3ViQ2F0ZWdvcnkudHJpbSgpICE9PSBcIlwiIDogc3ViQ2F0ZWdvcnkgIT09IFwiXCIpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3QgaW52ZW50b3J5VHdlZWsgPSBpbnZlbnRvcnkgIT09IG51bGwgJiYgaW52ZW50b3J5ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBpbnZlbnRvcnkgPT09ICdzdHJpbmcnID8gaW52ZW50b3J5LnRyaW0oKSAhPT0gXCJcIiA6IGludmVudG9yeSAhPT0gXCJcIikgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bkwxKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25MMUxhYmVsID0gbDE7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bkwyKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25MMkxhYmVsID0gbDI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bkwzKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25MM0xhYmVsID0gbDM7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bkw0KSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25MNExhYmVsID0gbDQ7XHJcbiAgICB9XHJcbiAgICBpZiAocHJpY2VUd2Vlaykge1xyXG4gICAgICB0aGlzLnByaWNlVHdlZWsgPSBwcmljZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2t1VHdlZWspIHtcclxuICAgICAgdGhpcy5za3VUd2VlayA9IHNrdTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29zdFR3ZWVrKSB7XHJcbiAgICAgIHRoaXMuY29zdFR3ZWVrID0gY29zdDtcclxuICAgIH1cclxuICAgIGlmIChxdWFudGl0eVR3ZWVrKSB7XHJcbiAgICAgIHRoaXMucXVhbnRpdHlUd2VlayA9IHF1YW50aXR5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9kdWN0VHdlZWspIHtcclxuICAgICAgdGhpcy5wcm9kdWN0VHdlZWsgPSBwcm9kdWN0O1xyXG4gICAgfVxyXG4gICAgaWYgKGNhdGVnb3J5VHdlZWspIHtcclxuICAgICAgdGhpcy5jYXRlZ29yeVR3ZWVrID0gY2F0ZWdvcnk7XHJcbiAgICB9XHJcbiAgICBpZiAoc3ViQ2F0ZWdvcnlUd2Vlaykge1xyXG4gICAgICB0aGlzLnN1YkNhdGVnb3J5VHdlZWsgPSBzdWJDYXRlZ29yeTtcclxuICAgIH1cclxuICAgIGlmIChpbnZlbnRvcnlUd2Vlaykge1xyXG4gICAgICB0aGlzLmludmVudG9yeVR3ZWVrID0gaW52ZW50b3J5O1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja1N1Ym1pc3Npb25TdGF0dXMgPSB0aGlzLmNvbW1vblNlcnZpY2UuY2hlY2tJc0F0dHJpYnV0ZVRydWUoY2hlY2tBdHRyaWJ1dGUsICdpc1Byb2R1Y3RPcHRpb25hbCcpO1xyXG4gICAgdGhpcy5oYXNWYWx1ZUFuZEVkaXRNb2RlID0gKGNoZWNrQXR0cmlidXRlPy5oYXNWYWx1ZSA9PT0gJ3llcycpICYmIChjaGVja0F0dHJpYnV0ZT8uZWRpdE1vZGUgPT09ICd0cnVlJyk7XHJcbiAgICBjb25zdCByZXRyaWV2ZWRPYmplY3QgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdG9yYWdlT2JqZWN0JykpO1xyXG4gICAgdGhpcy5lbXB0eUFycmF5ID0gcmV0cmlldmVkT2JqZWN0Py5kYXRhU291cmNlPy5sZW5ndGggPCAxID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgc3VwZXIuc2V0SW5zdGFuY2UoaW5zdGFuY2UpO1xyXG4gICAgaWYgKHRoaXMuc2hvd05ld1Byb2R1Y3RQaWNrZXIgJiYgIXRoaXMuaGFzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLnNob3dDYXRlZ29yeSkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ29sdW1uKCdjYXRlZ29yeScpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5zaG93UXVhbnRpdHkpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUNvbHVtbigncXVhbnRpdHknKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuc2hvd1ByaWNlKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW4oJ3ByaWNlJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dTdWJjYXRlZ29yeSkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ29sdW1uKCdzdWJDYXRlZ29yeScpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5zaG93U2t1TnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW4oJ3NrdU51bWJlcicpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5zaG93SW52ZW50b3J5KSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW4oJ2ludmVudG9yeScpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dDb3N0KSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW4oJ2Nvc3QnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRlYWxJZCA9IHRoaXMuZ2V0TGFiZWxOYW1lKGNoZWNrQXR0cmlidXRlLCBcImRlYWxJZFwiKTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJjdXJyZW50RGVhbElkXCIsIHRoaXMuZGVhbElkKTtcclxuICAgICAgY29uc3Qgc3RvcmVkRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGBzaG93R3JpZFBpY2tlclByb2R1Y3RzLSR7dGhpcy5kZWFsSWR9YCkgfHwgJyc7XHJcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKHN0b3JlZERhdGEgfHwgJ251bGwnKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlTmV3ID0gQXJyYXkuaXNBcnJheShwYXJzZWREYXRhKSA/IHBhcnNlZERhdGEgOiBbXTtcclxuXHJcbiAgICAgIC8vIFNldCBmbGFnIHRvIHRydWUgdG8gcHJldmVudCBmdXJ0aGVyIGV4ZWN1dGlvblxyXG4gICAgICB0aGlzLmhhc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gaW5zdGFuY2UuZGF0YVZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy90aGlzLmNoZWNrU3VibWlzc2lvblN0YXR1cyAmJiBcclxuICAgIGlmICh0aGlzLmNoZWNrU3VibWlzc2lvblN0YXR1cyAmJiAhdGhpcy5oYXNWYWx1ZUFuZEVkaXRNb2RlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0RhdGFHcmlkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gW11cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd0RhdGFHcmlkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBpbnN0YW5jZS5kYXRhVmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbHVtbnMgPSB7fTtcclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5mb3JtQ29sdW1ucyA9IFtdO1xyXG4gICAgaW5zdGFuY2UuZ2V0Q29sdW1ucygpLm1hcCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbHVtbnMucHVzaChjb2x1bW4ua2V5KTtcclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goY29sdW1uLmtleSk7XHJcbiAgICAgIHRoaXMuY29sdW1uc1tjb2x1bW4ua2V5XSA9IGNvbHVtbjtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goJ19fcmVtb3ZlUm93Jyk7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQucmVvcmRlcikge1xyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgncG9zaXRpb24nKTtcclxuICAgIH1cclxuICAgIGluc3RhbmNlLnZpZXdDb250YWluZXIgPSAoY29tcG9uZW50KSA9PiB7XHJcbiAgICAgIGxldCB2aWV3Q29udGFpbmVyO1xyXG4gICAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICBjb21wb25lbnQuY29tcG9uZW50LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZpZXdDb250YWluZXJzLmZvckVhY2goKGNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRkID0gY29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbXBvbmVudC5yb3dJbmRleCA9PT0gcGFyc2VJbnQodGQuZ2V0QXR0cmlidXRlKCdyb3dJbmRleCcpLCAxMCkgJiZcclxuICAgICAgICAgIGNvbXBvbmVudC5jb21wb25lbnQua2V5ID09PSB0ZC5nZXRBdHRyaWJ1dGUoJ2NvbXBvbmVudCcpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2aWV3Q29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gdmlld0NvbnRhaW5lciA/IHZpZXdDb250YWluZXIgOiBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5lbGVtZW50ICYmIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgLy8gQWRkIGN1c3RvbSBjbGFzc2VzIHRvIGVsZW1lbnRzLlxyXG4gICAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQuY3VzdG9tQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmN1c3RvbUNsYXNzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zTmV3ID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zTmV3LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uICE9PSBjb2x1bW5OYW1lKTtcclxuICB9XHJcblxyXG4gIGFkZEFub3RoZXJPbGQoKSB7XHJcbiAgICB0aGlzLnNob3dEYXRhR3JpZCA9IHRydWU7XHJcbiAgICB0aGlzLmNoZWNrUm93c051bWJlcigpO1xyXG4gICAgdGhpcy5pbnN0YW5jZS5hZGRSb3coKTtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPCB0aGlzLmluc3RhbmNlLnJvd3MubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLnB1c2goe30pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlLmRhdGFdO1xyXG4gIH1cclxuXHJcbiAgYWRkQW5vdGhlcigpIHtcclxuICAgIHRoaXMuc2hvd0RhdGFHcmlkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnNob3dOZXdQcm9kdWN0UGlja2VyKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjdXJyZW50RGVhbElkJywgdGhpcy5kZWFsSWQpO1xyXG4gICAgICBjb25zdCBkaW9sb2dlUmVmID0gdGhpcy5kaWFsb2cub3BlbihBZGRPblByb2R1Y3RzQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiAnOTAlJyxcclxuICAgICAgICBtYXhXaWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICBkYXRhOiB7IGRyb3Bkb3duc0ZsYWc6IHsgc2hvd0RpYWxvZ0ludmVudG9yeTogdGhpcy5zaG93RGlhbG9nSW52ZW50b3J5LCBzaG93SW52ZW50b3J5OiB0aGlzLnNob3dJbnZlbnRvcnksIGludmVudG9yeVR3ZWVrOiB0aGlzLmludmVudG9yeVR3ZWVrLCBxdWFudGl0eVR3ZWVrOiB0aGlzLnF1YW50aXR5VHdlZWssIHN1YkNhdGVnb3J5VHdlZWs6IHRoaXMuc3ViQ2F0ZWdvcnlUd2VlaywgY2F0ZWdvcnlUd2VlazogdGhpcy5jYXRlZ29yeVR3ZWVrLCBwcm9kdWN0VHdlZWs6IHRoaXMucHJvZHVjdFR3ZWVrLCBjb3N0VHdlZWs6IHRoaXMuY29zdFR3ZWVrLCBza3VUd2VlazogdGhpcy5za3VUd2VlaywgcHJpY2VUd2VlazogdGhpcy5wcmljZVR3ZWVrLCBzaG93RGlhbG9nQ29zdDogdGhpcy5zaG93RGlhbG9nQ29zdCwgc2hvd05ld1Byb2R1Y3RQaWNrZXI6IHRoaXMuc2hvd05ld1Byb2R1Y3RQaWNrZXIsIHNob3dEaWFsb2dTdWJDYXRlZ29yeTogdGhpcy5zaG93RGlhbG9nU3ViQ2F0ZWdvcnksIHNob3dEaWFsb2dTa3VOdW1iZXI6IHRoaXMuc2hvd0RpYWxvZ1NrdU51bWJlciwgc2hvd0RpYWxvZ0NhdGVnb3J5OiB0aGlzLnNob3dEaWFsb2dDYXRlZ29yeSwgc2hvd0RpYWxvZ1ByaWNlOiB0aGlzLnNob3dEaWFsb2dQcmljZSwgc2hvd0RpYWxvZ1F1YW50aXR5OiB0aGlzLnNob3dEaWFsb2dRdWFudGl0eSwgZHJvcGRvd25MMTogdGhpcy5kcm9wZG93bkwxLCBkcm9wZG93bkwyOiB0aGlzLmRyb3Bkb3duTDIsIGRyb3Bkb3duTDM6IHRoaXMuZHJvcGRvd25MMywgZHJvcGRvd25MNDogdGhpcy5kcm9wZG93bkw0LCBkcm9wZG93bkwxTGFiZWw6IHRoaXMuZHJvcGRvd25MMUxhYmVsLCBkcm9wZG93bkwyTGFiZWw6IHRoaXMuZHJvcGRvd25MMkxhYmVsLCBkcm9wZG93bkwzTGFiZWw6IHRoaXMuZHJvcGRvd25MM0xhYmVsLCBkcm9wZG93bkw0TGFiZWw6IHRoaXMuZHJvcGRvd25MNExhYmVsLCBjaGVja1N1Ym1pc3Npb25TdGF0dXM6IHRoaXMuY2hlY2tTdWJtaXNzaW9uU3RhdHVzLCBwcmljZURpc2FibGU6IHRoaXMuaXNQcmljZURpc2FibGUsIGFscGhhbnVtZXJpYzogdGhpcy5hbHBoYW51bWVyaWMgfSwgc2VsZWN0ZWRQcm9kdWN0czogdGhpcy5kYXRhU291cmNlTmV3IH1cclxuICAgICAgfSlcclxuICAgICAgICAuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbnN0YW5jZS5hZGRSb3coKTtcclxuICAgICAgICAgIGlmIChyZXNwb25zZT8uZGF0YT8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuYWRkUm93KCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93Q2F0ZWdvcnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbHVtbignY2F0ZWdvcnknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW4oJ3F1YW50aXR5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dQcmljZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29sdW1uKCdwcmljZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93U3ViY2F0ZWdvcnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbHVtbignc3ViQ2F0ZWdvcnknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd0ludmVudG9yeSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29sdW1uKCdpbnZlbnRvcnknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3RzQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YS5pdGVtcy5zZWxlY3RlZFByb2R1Y3RzKSk7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGBzZWxlY3RlZFByb2R1Y3RzLSR7dGhpcy5kZWFsSWR9YCwgSlNPTi5zdHJpbmdpZnkodGhpcy5hZGRQcmljZVByb3BlcnR5KHNlbGVjdGVkUHJvZHVjdHNDb3B5KSkpO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VOZXcgPSByZXNwb25zZS5kYXRhLml0ZW1zLnNlbGVjdGVkUHJvZHVjdHM7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0RhdGFHcmlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5jb21wb25lbnQuZGVmYXVsdFZhbHVlID0gcmVzcG9uc2UuZGF0YS5pdGVtcy5zZWxlY3RlZFByb2R1Y3RzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaGVja1Jvd3NOdW1iZXIoKTtcclxuICAgICAgdGhpcy5pbnN0YW5jZS5hZGRSb3coKTtcclxuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA8IHRoaXMuaW5zdGFuY2Uucm93cy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5wdXNoKHt9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZGF0YV07XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgYWRkUHJpY2VQcm9wZXJ0eShzZWxlY3RlZFByb2R1Y3RzKSB7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRQcm9kdWN0cy5tYXAocHJvZHVjdHMgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLnByb2R1Y3RzLFxyXG4gICAgICAgIHByaWNlRGlzYWJsZTogdGhpcy5pc1ByaWNlRGlzYWJsZSA/IHRydWUgOiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBjaGVja1Jvd3NOdW1iZXIoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5pbnN0YW5jZS5yb3dzLmxlbmd0aCA8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmluc3RhbmNlLmFkZFJvdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUm93KGluZGV4KSB7XHJcbiAgICBsZXQgbWVzc2FnZSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcHJvZHVjdD8nO1xyXG4gICAgbGV0IHNob3dCdXR0b24gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID09PSAxICYmICF0aGlzLmNoZWNrU3VibWlzc2lvblN0YXR1cykge1xyXG4gICAgICBtZXNzYWdlID0gJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHByb2R1Y3QuJztcclxuICAgICAgc2hvd0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzkwJScsXHJcbiAgICAgIG1heFdpZHRoOiAnNDAwcHgnLFxyXG4gICAgICBkYXRhOiB7IG1lc3NhZ2U6IG1lc3NhZ2UsIGJ1dHRvblN0YXR1czogc2hvd0J1dHRvbiB9XHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID09PSAxICYmIHRoaXMuY2hlY2tTdWJtaXNzaW9uU3RhdHVzKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dEYXRhR3JpZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBVc2VyIGNvbmZpcm1lZCwgcHJvY2VlZCB3aXRoIGRlbGV0aW9uXHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5yZW1vdmVSb3coaW5kZXgpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlLmRhdGFdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRyb3BUYWJsZShldmVudDogQ2RrRHJhZ0Ryb3A8YW55Pikge1xyXG4gICAgY29uc3QgcHJldkluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KChkKSA9PiBkID09PSBldmVudC5pdGVtLmRhdGEpO1xyXG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuY29udHJvbC52YWx1ZSwgcHJldkluZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgdGhpcy5yZW5kZXJDb21wb25lbnRzKCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJDb21wb25lbnRzKCkge1xyXG4gICAgdGhpcy5pbnN0YW5jZS5nZXRSb3dzKCk7XHJcbiAgICB0aGlzLmluc3RhbmNlLnNldFZhbHVlKHRoaXMuY29udHJvbC52YWx1ZSB8fCBbXSk7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2YWx1ZTogW10gfCBudWxsKSB7XHJcbiAgICBjb25zdCBncmlkTGVuZ3RoID0gdmFsdWUgPyB2YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgd2hpbGUgKHRoaXMuaW5zdGFuY2Uucm93cy5sZW5ndGggPCBncmlkTGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYWRkQW5vdGhlcigpO1xyXG4gICAgICB0aGlzLmluc3RhbmNlLmRhdGFWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmluc3RhbmNlLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbHVlICYmIHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmNsZWFyT25IaWRlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5pbnN0YW5jZS5kZWZhdWx0VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxufVxyXG5EYXRhR3JpZENvbXBvbmVudC5NYXRlcmlhbENvbXBvbmVudCA9IE1hdGVyaWFsRGF0YUdyaWRDb21wb25lbnQ7XHJcbmV4cG9ydCB7IERhdGFHcmlkQ29tcG9uZW50IH07Il19
|