@pepperi-addons/ngx-lib 0.4.0-angular14.9 → 0.4.0-beta.3
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/chips/chips.component.d.ts +93 -0
- package/chips/chips.component.theme.scss +58 -0
- package/chips/chips.model.d.ts +13 -0
- package/chips/chips.module.d.ts +20 -0
- package/chips/chips.service.d.ts +15 -0
- package/{plugin → chips}/index.d.ts +1 -1
- package/chips/public-api.d.ts +3 -0
- package/color/color-picker.component.d.ts +1 -1
- package/core/common/model/wapi.model.d.ts +1 -0
- package/core/common/services/addon.service.d.ts +13 -9
- package/core/common/services/utilities.service.d.ts +5 -4
- package/core/customization/customization.model.d.ts +7 -0
- package/esm2020/address/address.component.mjs +1 -1
- package/esm2020/attachment/attachment.component.mjs +1 -1
- package/esm2020/checkbox/checkbox.component.mjs +1 -1
- package/esm2020/chips/chips.component.mjs +158 -0
- package/esm2020/chips/chips.model.mjs +2 -0
- package/esm2020/chips/chips.module.mjs +81 -0
- package/esm2020/chips/chips.service.mjs +44 -0
- package/esm2020/chips/pepperi-addons-ngx-lib-chips.mjs +5 -0
- package/esm2020/chips/public-api.mjs +7 -0
- package/esm2020/color/color-picker.component.mjs +4 -4
- package/esm2020/color/color.component.mjs +1 -1
- package/esm2020/core/common/model/wapi.model.mjs +1 -1
- package/esm2020/core/common/services/addon.service.mjs +43 -38
- package/esm2020/core/common/services/utilities.service.mjs +66 -13
- package/esm2020/core/customization/customization.model.mjs +10 -1
- package/esm2020/core/http/interceptors/loader.interceptor.mjs +4 -5
- package/esm2020/core/http/services/loader.service.mjs +4 -4
- package/esm2020/date/date.component.mjs +3 -3
- package/esm2020/field-title/field-title.component.mjs +6 -3
- package/esm2020/form/field-generator.component.mjs +7 -7
- package/esm2020/form/form.component.mjs +12 -3
- package/esm2020/form/internal-button.component.mjs +1 -1
- package/esm2020/form/internal-field-generator.component.mjs +3 -3
- package/esm2020/form/internal-form.component.mjs +4 -2
- package/esm2020/form/internal-list.component.mjs +5 -2
- package/esm2020/group-buttons/group-buttons.component.mjs +8 -4
- package/esm2020/icon/icon-generated-all.model.mjs +8 -1
- package/esm2020/icon/icon-generated.model.mjs +29 -1
- package/esm2020/image/image.component.mjs +1 -1
- package/esm2020/images-filmstrip/images-filmstrip.component.mjs +3 -91
- package/esm2020/images-filmstrip/images-filmstrip.module.mjs +1 -56
- package/esm2020/link/link.component.mjs +1 -1
- package/esm2020/list/list-pager.component.mjs +1 -1
- package/esm2020/list/list.component.mjs +5 -2
- package/esm2020/list/virtual-scroller.mjs +11 -10
- package/esm2020/menu/menu.component.mjs +11 -3
- package/esm2020/page-layout/page-layout.component.mjs +3 -3
- package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +1 -1
- package/esm2020/quantity-selector/quantity-selector.component.mjs +24 -4
- package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +1 -1
- package/esm2020/query-builder/query-builder-section/query-builder-section.component.mjs +1 -1
- package/esm2020/remote-loader/addon-block-loader.component.mjs +23 -5
- package/esm2020/remote-loader/addon-block-loader.service.mjs +9 -8
- package/esm2020/remote-loader/public-api.mjs +2 -1
- package/esm2020/remote-loader/remote-loader-element.component.mjs +109 -0
- package/esm2020/remote-loader/remote-loader.component.mjs +37 -59
- package/esm2020/remote-loader/remote-loader.model.mjs +1 -1
- package/esm2020/remote-loader/remote-loader.module.mjs +12 -3
- package/esm2020/remote-loader/remote-loader.service.mjs +50 -26
- package/esm2020/rich-html-textarea/rich-html-textarea.component.mjs +1 -1
- package/esm2020/select/select.component.mjs +33 -7
- package/esm2020/side-bar/side-bar.component.mjs +11 -27
- package/esm2020/side-bar/side-bar.module.mjs +7 -3
- package/esm2020/signature/signature.component.mjs +1 -1
- package/esm2020/size-detector/size-detector.component.mjs +2 -2
- package/esm2020/slider/slider.component.mjs +1 -1
- package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +1 -1
- package/esm2020/smart-filters/date-filter/date-filter.component.mjs +1 -1
- package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +1 -1
- package/esm2020/smart-filters/number-filter/number-filter.component.mjs +3 -3
- package/esm2020/smart-filters/text-filter/text-filter.component.mjs +1 -1
- package/esm2020/textarea/textarea.component.mjs +1 -1
- package/esm2020/textbox/textbox.component.mjs +48 -7
- package/esm2020/textbox-icon/textbox-icon.component.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-address.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-address.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-checkbox.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +287 -0
- package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -0
- package/fesm2015/pepperi-addons-ngx-lib-color.mjs +4 -4
- package/fesm2015/pepperi-addons-ngx-lib-color.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-date.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-date.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs +5 -2
- package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-form.mjs +23 -12
- package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs +7 -3
- package/fesm2015/pepperi-addons-ngx-lib-group-buttons.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-icon.mjs +36 -1
- package/fesm2015/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-image.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-image.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs +2 -129
- package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-link.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs +15 -11
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +10 -2
- package/fesm2015/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-page-layout.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +23 -3
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +249 -105
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-select.mjs +32 -6
- package/fesm2015/pepperi-addons-ngx-lib-select.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs +15 -27
- package/fesm2015/pepperi-addons-ngx-lib-side-bar.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-size-detector.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-slider.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-slider.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +6 -6
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textbox-icon.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +49 -8
- package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib.mjs +128 -57
- package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-address.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-address.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-checkbox.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +287 -0
- package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -0
- package/fesm2020/pepperi-addons-ngx-lib-color.mjs +4 -4
- package/fesm2020/pepperi-addons-ngx-lib-color.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-date.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-date.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs +5 -2
- package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-form.mjs +26 -12
- package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs +7 -3
- package/fesm2020/pepperi-addons-ngx-lib-group-buttons.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-icon.mjs +36 -1
- package/fesm2020/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-image.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-image.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs +2 -129
- package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-link.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-link.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs +15 -11
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-menu.mjs +10 -2
- package/fesm2020/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-page-layout.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +23 -3
- package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +230 -98
- package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-select.mjs +32 -6
- package/fesm2020/pepperi-addons-ngx-lib-select.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-side-bar.mjs +15 -27
- package/fesm2020/pepperi-addons-ngx-lib-side-bar.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-signature.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-size-detector.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-slider.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-slider.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +6 -6
- package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-textbox-icon.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-textbox-icon.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +48 -8
- package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib.mjs +125 -58
- package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/field-title/field-title.component.d.ts +2 -1
- package/form/field-generator.component.d.ts +1 -1
- package/group-buttons/group-buttons.component.d.ts +2 -1
- package/icon/icon-generated-all.model.d.ts +7 -0
- package/icon/icon-generated.model.d.ts +29 -1
- package/menu/menu.component.d.ts +2 -0
- package/package.json +14 -13
- package/page-layout/page-layout.component.d.ts +1 -1
- package/quantity-selector/quantity-selector.component.d.ts +7 -1
- package/remote-loader/addon-block-loader.component.d.ts +10 -6
- package/remote-loader/addon-block-loader.service.d.ts +2 -3
- package/remote-loader/public-api.d.ts +1 -0
- package/remote-loader/remote-loader-element.component.d.ts +30 -0
- package/remote-loader/remote-loader.component.d.ts +3 -5
- package/remote-loader/remote-loader.model.d.ts +16 -11
- package/remote-loader/remote-loader.module.d.ts +8 -6
- package/remote-loader/remote-loader.service.d.ts +5 -7
- package/select/select.component.d.ts +10 -4
- package/side-bar/side-bar.component.d.ts +3 -3
- package/src/assets/i18n/en.ngx-lib.json +4 -0
- package/src/core/style/components/checkbox.scss +20 -1
- package/src/core/style/components/general.scss +5 -4
- package/textbox/textbox.component.d.ts +16 -1
- package/esm2020/plugin/pepperi-addons-ngx-lib-plugin.mjs +0 -5
- package/esm2020/plugin/plugin-proxy.component.mjs +0 -90
- package/esm2020/plugin/plugin.model.mjs +0 -2
- package/esm2020/plugin/public-api.mjs +0 -6
- package/fesm2015/pepperi-addons-ngx-lib-plugin.mjs +0 -107
- package/fesm2015/pepperi-addons-ngx-lib-plugin.mjs.map +0 -1
- package/fesm2020/pepperi-addons-ngx-lib-plugin.mjs +0 -101
- package/fesm2020/pepperi-addons-ngx-lib-plugin.mjs.map +0 -1
- package/plugin/plugin-proxy.component.d.ts +0 -22
- package/plugin/plugin.model.d.ts +0 -5
- package/plugin/public-api.d.ts +0 -2
|
@@ -253,7 +253,7 @@ export class PepFormComponent {
|
|
|
253
253
|
return;
|
|
254
254
|
}
|
|
255
255
|
const placeholder = controlField.ReadOnly || !canEditObject ? '' : controlField.Title;
|
|
256
|
-
|
|
256
|
+
let fieldProperties = {
|
|
257
257
|
key: controlField.ApiName,
|
|
258
258
|
label: controlField.Title,
|
|
259
259
|
accessory: dataField.Accessory,
|
|
@@ -281,7 +281,15 @@ export class PepFormComponent {
|
|
|
281
281
|
// hasIndicators: hasIndicators,
|
|
282
282
|
textColor: dataField.TextColor,
|
|
283
283
|
visible: dataField.Visible,
|
|
284
|
+
digitsNumberAfterDecimalPoint: dataField.DigitsNumberAfterDecimalPoint,
|
|
284
285
|
};
|
|
286
|
+
if (dataField.AdditionalProps) {
|
|
287
|
+
fieldProperties = {
|
|
288
|
+
...fieldProperties,
|
|
289
|
+
...dataField.AdditionalProps
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
return fieldProperties;
|
|
285
293
|
}
|
|
286
294
|
convertToCustomField(controlField, dataField, canEditObject, menuField, hasCampaignField, indicatorsField, objectId, parentId, searchCode) {
|
|
287
295
|
let customField;
|
|
@@ -896,6 +904,7 @@ export class PepFormComponent {
|
|
|
896
904
|
additionalValue: updatedField.AdditionalValue,
|
|
897
905
|
formattedValue: updatedField.FormattedValue,
|
|
898
906
|
textColor: updatedField.TextColor,
|
|
907
|
+
digitsNumberAfterDecimalPoint: updatedField.DigitsNumberAfterDecimalPoint
|
|
899
908
|
};
|
|
900
909
|
if (customField instanceof PepQuantitySelectorField) {
|
|
901
910
|
const notificationInfo = updatedField.NotificationInfo;
|
|
@@ -1170,7 +1179,7 @@ export class PepFormComponent {
|
|
|
1170
1179
|
}
|
|
1171
1180
|
}
|
|
1172
1181
|
PepFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepFormComponent, deps: [{ token: i1.PepDialogService }, { token: i2.PepCustomizationService }, { token: i2.PepLayoutService }, { token: i3.FormBuilder }, { token: i0.KeyValueDiffers }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1173
|
-
PepFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepFormComponent, selector: "pep-form", inputs: { isInternal: "isInternal", isReport: "isReport", layout: "layout", lockEvents: "lockEvents", canEditObject: "canEditObject", data: "data", lockFields: "lockFields", isActive: "isActive", layoutType: "layoutType", objectId: "objectId", parentId: "parentId", searchCode: "searchCode", showTitle: "showTitle", firstFieldAsLink: "firstFieldAsLink", checkForChanges: "checkForChanges" }, outputs: { valueChange: "valueChange", formValidationChange: "formValidationChange", fieldClick: "fieldClick", internalFormFieldClick: "internalFormFieldClick", internalFormFieldChange: "internalFormFieldChange" }, usesOnChanges: true, ngImport: i0, template: "<fieldset *ngIf=\"form\" [formGroup]=\"form\" [disabled]=\"isLocked\" class=\"pep-form\"\n [ngStyle]=\"{ 'background-color': layoutType == 'card' && data?.BackgroundColor }\">\n <!-- New Form -->\n <mat-grid-list *ngIf=\"layoutType == 'form'\" [cols]=\"columns\" [rowHeight]=\"rowHeight + 'rem'\"\n [gutterSize]=\"formGutterSize\">\n <mat-grid-tile *ngFor=\"let field of fields$ | async\" [rowspan]=\"field.rowSpan\" [colspan]=\"field.colSpan\">\n <pep-field-generator *ngIf=\"field.controlType != 'placeholder'\" [form]=\"form\" [layoutType]=\"layoutType\"\n [checkForChanges]=\"checkForChanges\" [uid]=\"data?.UID\" [field]=\"field\" [showTitle]=\"showTitle\"\n (valueChange)=\"onValueChanged($event)\" (elementClick)=\"onClick($event)\"\n (internalFormFieldClick)=\"onInternalFormFieldClicked($event)\"\n (internalFormFieldChange)=\"onInternalFormFieldChanged($event)\"\n (formValueChange)=\"onFormValueChanged($event)\" (formFieldClick)=\"onFormFieldClick($event)\"\n (formValidationChange)=\"onFormValidationChanged($event)\">\n </pep-field-generator>\n </mat-grid-tile>\n </mat-grid-list>\n\n <!-- Thumbnails -->\n <mat-grid-list *ngIf=\"layoutType == 'card'\" [cols]=\"columns\" [rowHeight]=\"rowHeight + 'rem'\"\n [gutterSize]=\"cardGutterSize\" class=\"card-spacing\">\n <mat-grid-tile *ngFor=\"let field of fields$ | async\" [rowspan]=\"field.rowSpan\" [colspan]=\"field.colSpan\"\n [ngStyle]=\"{ overflow: field.type == 'qs' ? 'unset' : 'hidden' }\">\n <pep-field-generator *ngIf=\"field.controlType != 'placeholder'\" [form]=\"form\" [layoutType]=\"layoutType\"\n [ngClass]=\"{ 'lock-events': lockEvents }\" [isActive]=\"isActive\" [checkForChanges]=\"checkForChanges\"\n [uid]=\"data?.UID\" [field]=\"field\" [showTitle]=\"showTitle\" (valueChange)=\"onValueChanged($event)\"\n (elementClick)=\"onClick($event)\" (internalFormFieldClick)=\"onInternalFormFieldClicked($event)\"\n (internalFormFieldChange)=\"onInternalFormFieldChanged($event)\"\n (formValueChange)=\"onFormValueChanged($event)\" (formFieldClick)=\"onFormFieldClick($event)\">\n </pep-field-generator>\n </mat-grid-tile>\n </mat-grid-list>\n\n <ng-container *ngIf=\"layoutType == 'table'\">\n <ng-container *ngIf=\"isReport; then reportBlock; else notReportBlock\"></ng-container>\n <ng-template #reportBlock>\n <ng-container *ngTemplateOutlet=\"report\"></ng-container>\n </ng-template>\n <ng-template #notReportBlock>\n <div *ngFor=\"let field of fields$ | async; let j = index\" class=\"pull-left flip table-cell \"\n [ngClass]=\"['text-align-' + field.xAlignment]\" style=\"height: 100%\"\n [ngStyle]=\"{ width: (layout?.ControlFields)[j]?.calcColumnWidthString}\">\n <pep-field-generator *ngIf=\"field.controlType != 'placeholder'\" [checkForChanges]=\"checkForChanges\"\n [uid]=\"data?.UID\" [field]=\"field\" [form]=\"form\" [layoutType]=\"layoutType\" [showTitle]=\"false\"\n (elementClick)=\"onClick($event)\" (valueChange)=\"onValueChanged($event)\"\n (formValueChange)=\"onFormValueChanged($event)\" (formFieldClick)=\"onFormFieldClick($event)\"\n [isActive]=\"isActive\">\n </pep-field-generator>\n </div>\n </ng-template>\n </ng-container>\n\n <!------- For testing ------------\n {{ form.value | json }}\n {{ form.valid }}\n ---------------------------------->\n</fieldset>\n\n<ng-template #report>\n <div *ngFor=\"let field of fields$ | async; let j = index\" class=\"pull-left flip pep-report-fields\"\n [ngStyle]=\"{ width: (layout?.ControlFields)[j]?.calcColumnWidthString }\"\n [ngClass]=\"['text-align-' + field.xAlignment]\">\n <ng-container [ngSwitch]=\"field.controlType\">\n <pep-image *ngSwitchCase=\"'image'\" [uid]=\"data?.UID\" [form]=\"form\" [key]=\"field.key\"\n [src]=\"field.formattedValue\" [srcLarge]=\"field.value\" [options]=\"field.options\" [label]=\"field.label\"\n [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\" [readonly]=\"field.readonly\"\n [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\" [layoutType]=\"layoutType\"\n (elementClick)=\"onClick($event)\">\n </pep-image>\n\n <pep-signature *ngSwitchCase=\"'signature'\" [form]=\"form\" [key]=\"field.key\" [src]=\"field.value\"\n [label]=\"field.label\" [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\"\n [readonly]=\"field.readonly\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [layoutType]=\"layoutType\">\n </pep-signature>\n\n <pep-checkbox *ngSwitchCase=\"'checkbox'\" [form]=\"form\" [key]=\"field.key\"\n [value]=\"(field.value | lowercase) == 'true' || field.value == '1' ? true : false\" [label]=\"field.label\"\n [type]=\"field.type\" [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\"\n [readonly]=\"field.readonly\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [additionalValue]=\"field.additionalValue\" [layoutType]=\"layoutType\">\n </pep-checkbox>\n\n <pep-date *ngSwitchCase=\"'date'\" [form]=\"form\" [key]=\"field.key\" [value]=\"field.value\"\n [formattedValue]=\"field.formattedValue\" [label]=\"field.label\" [type]=\"field.type\"\n [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\" [readonly]=\"field.readonly\"\n [textColor]=\"field.textColor\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [minValue]=\"field.minValue\" [maxValue]=\"field.maxValue\" [layoutType]=\"layoutType\">\n </pep-date>\n\n <pep-internal-button *ngSwitchCase=\"'button'\" [form]=\"form\" [key]=\"field.key\" [value]=\"field.value\"\n [formattedValue]=\"field.formattedValue\" [label]=\"field.label\" [type]=\"field.type\"\n [disabled]=\"field.disabled\" [readonly]=\"field.readonly\" [xAlignment]=\"field.xAlignment\"\n [layoutType]=\"layoutType\" (elementClick)=\"onClick($event)\">\n </pep-internal-button>\n\n <pep-textarea *ngSwitchCase=\"'textarea'\" [form]=\"form\" [key]=\"field.key\" [value]=\"field.value\"\n [label]=\"field.label\" [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\"\n [readonly]=\"field.readonly\" [maxFieldCharacters]=\"field.maxFieldCharacters\"\n [textColor]=\"field.textColor\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [layoutType]=\"layoutType\">\n </pep-textarea>\n\n <pep-quantity-selector *ngSwitchCase=\"'qs'\" [id]=\"field.key\" [form]=\"form\" [key]=\"field.key\"\n [value]=\"field.value\" [formattedValue]=\"field.formattedValue\" [label]=\"field.label\" [type]=\"field.type\"\n [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\" [readonly]=\"field.readonly\"\n [textColor]=\"field.textColor\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [layoutType]=\"layoutType\" (valueChange)=\"onValueChanged($event)\" (elementClick)=\"onClick($event)\">\n </pep-quantity-selector>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"field.formattedValue?.length > 0; then notEmptyBlock; else emptyBlock\">\n </ng-container>\n <ng-template #notEmptyBlock>\n <ng-container\n *ngIf=\"field.controlType === 'attachment' || field.type === 'link'; then linkBlock; else notLinkBlock\">\n </ng-container>\n <ng-template #linkBlock>\n <a [id]=\"field.key\" class=\"color-link body-sm pep-report-input readonly\"\n *ngIf=\"field.formattedValue != null\" title=\"{{ field.formattedValue }}\" target=\"_blank\"\n href=\"{{ field.value }}\">{{ field.formattedValue }}</a>\n </ng-template>\n <ng-template #notLinkBlock>\n <span [id]=\"field.key\" class=\"body-sm pep-report-input readonly\"\n title=\"{{ field.formattedValue }}\" [ngStyle]=\"{ color: field.textColor }\">{{\n field.formattedValue }}</span>\n </ng-template>\n </ng-template>\n <ng-template #emptyBlock>\n <span> </span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>", styles: [":host{display:grid}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "component", type: i7.PepCheckboxComponent, selector: "pep-checkbox", inputs: ["key", "value", "label", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "additionalValue", "form", "isActive", "showTitle", "renderTitle", "layoutType", "visible"], outputs: ["valueChange"] }, { kind: "component", type: i8.PepDateComponent, selector: "pep-date", inputs: ["key", "value", "formattedValue", "label", "type", "mandatory", "disabled", "readonly", "textColor", "xAlignment", "rowSpan", "visible", "minValue", "maxValue", "minDateValue", "maxDateValue", "form", "isActive", "showTitle", "renderTitle", "renderError", "renderSymbol", "layoutType"], outputs: ["valueChange"] }, { kind: "component", type: i9.PepImageComponent, selector: "pep-image", inputs: ["key", "srcLarge", "src", "options", "label", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "indicatorsField", "menuField", "hasCampaignField", "visible", "form", "uid", "showTitle", "renderTitle", "layoutType", "isActive", "sizeLimitMB", "acceptImagesType"], outputs: ["fileChange", "elementClick"] }, { kind: "component", type: i10.PepQuantitySelectorComponent, selector: "pep-quantity-selector", inputs: ["key", "value", "formattedValue", "label", "type", "mandatory", "disabled", "readonly", "textColor", "xAlignment", "rowSpan", "allowDecimal", "additionalValue", "notificationInfo", "visible", "form", "showTitle", "renderTitle", "layoutType", "isActive", "styleType"], outputs: ["valueChange", "elementClick"] }, { kind: "component", type: i11.PepSignatureComponent, selector: "pep-signature", inputs: ["key", "src", "label", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "signatureURL", "visible", "form", "showTitle", "renderTitle", "layoutType", "isActive"], outputs: ["fileChange"] }, { kind: "component", type: i12.PepTextareaComponent, selector: "pep-textarea", inputs: ["key", "value", "label", "mandatory", "disabled", "readonly", "maxFieldCharacters", "textColor", "xAlignment", "rowSpan", "visible", "form", "isActive", "showTitle", "renderTitle", "layoutType"], outputs: ["valueChange"] }, { kind: "component", type: i13.PepFieldGeneratorComponent, selector: "pep-field-generator", inputs: ["field", "isActive", "uid", "form", "layoutType", "showTitle", "checkForChanges"], outputs: ["valueChange", "formValidationChange", "elementClick", "internalFormFieldChange", "internalFormFieldClick", "formValueChange", "formFieldClick"] }, { kind: "component", type: i14.PepInternalButtonComponent, selector: "pep-internal-button", inputs: ["key", "value", "formattedValue", "label", "referenceObjectInternalType", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "visible", "form", "showTitle", "layoutType"], outputs: ["elementClick", "valueChange"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.LowerCasePipe, name: "lowercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1182
|
+
PepFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepFormComponent, selector: "pep-form", inputs: { isInternal: "isInternal", isReport: "isReport", layout: "layout", lockEvents: "lockEvents", canEditObject: "canEditObject", data: "data", lockFields: "lockFields", isActive: "isActive", layoutType: "layoutType", objectId: "objectId", parentId: "parentId", searchCode: "searchCode", showTitle: "showTitle", firstFieldAsLink: "firstFieldAsLink", checkForChanges: "checkForChanges" }, outputs: { valueChange: "valueChange", formValidationChange: "formValidationChange", fieldClick: "fieldClick", internalFormFieldClick: "internalFormFieldClick", internalFormFieldChange: "internalFormFieldChange" }, usesOnChanges: true, ngImport: i0, template: "<fieldset *ngIf=\"form\" [formGroup]=\"form\" [disabled]=\"isLocked\" class=\"pep-form\"\n [ngStyle]=\"{ 'background-color': layoutType == 'card' && data?.BackgroundColor }\">\n <!-- New Form -->\n <mat-grid-list *ngIf=\"layoutType == 'form'\" [cols]=\"columns\" [rowHeight]=\"rowHeight + 'rem'\"\n [gutterSize]=\"formGutterSize\">\n <mat-grid-tile *ngFor=\"let field of fields$ | async\" [rowspan]=\"field.rowSpan\" [colspan]=\"field.colSpan\">\n <pep-field-generator *ngIf=\"field.controlType != 'placeholder'\" [form]=\"form\" [layoutType]=\"layoutType\"\n [checkForChanges]=\"checkForChanges\" [uid]=\"data?.UID\" [field]=\"field\" [showTitle]=\"showTitle\"\n (valueChange)=\"onValueChanged($event)\" (elementClick)=\"onClick($event)\"\n (internalFormFieldClick)=\"onInternalFormFieldClicked($event)\"\n (internalFormFieldChange)=\"onInternalFormFieldChanged($event)\"\n (formValueChange)=\"onFormValueChanged($event)\" (formFieldClick)=\"onFormFieldClick($event)\"\n (formValidationChange)=\"onFormValidationChanged($event)\">\n </pep-field-generator>\n </mat-grid-tile>\n </mat-grid-list>\n\n <!-- Thumbnails -->\n <mat-grid-list *ngIf=\"layoutType == 'card'\" [cols]=\"columns\" [rowHeight]=\"rowHeight + 'rem'\"\n [gutterSize]=\"cardGutterSize\" class=\"card-spacing\">\n <mat-grid-tile *ngFor=\"let field of fields$ | async\" [rowspan]=\"field.rowSpan\" [colspan]=\"field.colSpan\"\n [ngStyle]=\"{ overflow: field.type == 'qs' ? 'unset' : 'hidden' }\">\n <pep-field-generator *ngIf=\"field.controlType != 'placeholder'\" [form]=\"form\" [layoutType]=\"layoutType\"\n [ngClass]=\"{ 'lock-events': lockEvents }\" [isActive]=\"isActive\" [checkForChanges]=\"checkForChanges\"\n [uid]=\"data?.UID\" [field]=\"field\" [showTitle]=\"showTitle\" (valueChange)=\"onValueChanged($event)\"\n (elementClick)=\"onClick($event)\" (internalFormFieldClick)=\"onInternalFormFieldClicked($event)\"\n (internalFormFieldChange)=\"onInternalFormFieldChanged($event)\"\n (formValueChange)=\"onFormValueChanged($event)\" (formFieldClick)=\"onFormFieldClick($event)\">\n </pep-field-generator>\n </mat-grid-tile>\n </mat-grid-list>\n\n <ng-container *ngIf=\"layoutType == 'table'\">\n <ng-container *ngIf=\"isReport; then reportBlock; else notReportBlock\"></ng-container>\n <ng-template #reportBlock>\n <ng-container *ngTemplateOutlet=\"report\"></ng-container>\n </ng-template>\n <ng-template #notReportBlock>\n <div *ngFor=\"let field of fields$ | async; let j = index\" class=\"pull-left flip table-cell \"\n [ngClass]=\"['text-align-' + field.xAlignment]\" style=\"height: 100%\"\n [ngStyle]=\"{ width: (layout?.ControlFields)[j]?.calcColumnWidthString}\">\n <pep-field-generator *ngIf=\"field.controlType != 'placeholder'\" [checkForChanges]=\"checkForChanges\"\n [uid]=\"data?.UID\" [field]=\"field\" [form]=\"form\" [layoutType]=\"layoutType\" [showTitle]=\"false\"\n (elementClick)=\"onClick($event)\" (valueChange)=\"onValueChanged($event)\"\n (formValueChange)=\"onFormValueChanged($event)\" (formFieldClick)=\"onFormFieldClick($event)\"\n [isActive]=\"isActive\">\n </pep-field-generator>\n </div>\n </ng-template>\n </ng-container>\n\n <!------- For testing ------------\n {{ form.value | json }}\n {{ form.valid }}\n ---------------------------------->\n</fieldset>\n\n<ng-template #report>\n <div *ngFor=\"let field of fields$ | async; let j = index\" class=\"pull-left flip pep-report-fields\"\n [ngStyle]=\"{ width: (layout?.ControlFields)[j]?.calcColumnWidthString }\"\n [ngClass]=\"['text-align-' + field.xAlignment]\">\n <ng-container [ngSwitch]=\"field.controlType\">\n <pep-image *ngSwitchCase=\"'image'\" [uid]=\"data?.UID\" [form]=\"form\" [key]=\"field.key\"\n [src]=\"field.formattedValue\" [srcLarge]=\"field.value\" [options]=\"field.options\" [label]=\"field.label\"\n [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\" [readonly]=\"field.readonly\"\n [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\" [layoutType]=\"layoutType\"\n (elementClick)=\"onClick($event)\">\n </pep-image>\n\n <pep-signature *ngSwitchCase=\"'signature'\" [form]=\"form\" [key]=\"field.key\" [src]=\"field.value\"\n [label]=\"field.label\" [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\"\n [readonly]=\"field.readonly\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [layoutType]=\"layoutType\">\n </pep-signature>\n\n <pep-checkbox *ngSwitchCase=\"'checkbox'\" [form]=\"form\" [key]=\"field.key\"\n [value]=\"(field.value | lowercase) == 'true' || field.value == '1' ? true : false\" [label]=\"field.label\"\n [type]=\"field.type\" [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\"\n [readonly]=\"field.readonly\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [additionalValue]=\"field.additionalValue\" [layoutType]=\"layoutType\">\n </pep-checkbox>\n\n <pep-date *ngSwitchCase=\"'date'\" [form]=\"form\" [key]=\"field.key\" [value]=\"field.value\"\n [formattedValue]=\"field.formattedValue\" [label]=\"field.label\" [type]=\"field.type\"\n [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\" [readonly]=\"field.readonly\"\n [textColor]=\"field.textColor\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [minValue]=\"field.minValue\" [maxValue]=\"field.maxValue\" [layoutType]=\"layoutType\">\n </pep-date>\n\n <pep-internal-button *ngSwitchCase=\"'button'\" [form]=\"form\" [key]=\"field.key\" [value]=\"field.value\"\n [formattedValue]=\"field.formattedValue\" [label]=\"field.label\" [type]=\"field.type\"\n [disabled]=\"field.disabled\" [readonly]=\"field.readonly\" [xAlignment]=\"field.xAlignment\"\n [layoutType]=\"layoutType\" (elementClick)=\"onClick($event)\">\n </pep-internal-button>\n\n <pep-textarea *ngSwitchCase=\"'textarea'\" [form]=\"form\" [key]=\"field.key\" [value]=\"field.value\"\n [label]=\"field.label\" [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\"\n [readonly]=\"field.readonly\" [maxFieldCharacters]=\"field.maxFieldCharacters\"\n [textColor]=\"field.textColor\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [layoutType]=\"layoutType\">\n </pep-textarea>\n\n <pep-quantity-selector *ngSwitchCase=\"'qs'\" [id]=\"field.key\" [form]=\"form\" [key]=\"field.key\"\n [value]=\"field.value\" [formattedValue]=\"field.formattedValue\" [label]=\"field.label\" [type]=\"field.type\"\n [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\" [readonly]=\"field.readonly\"\n [textColor]=\"field.textColor\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [layoutType]=\"layoutType\" (valueChange)=\"onValueChanged($event)\" (elementClick)=\"onClick($event)\">\n </pep-quantity-selector>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"field.formattedValue?.length > 0; then notEmptyBlock; else emptyBlock\">\n </ng-container>\n <ng-template #notEmptyBlock>\n <ng-container\n *ngIf=\"field.controlType === 'attachment' || field.type === 'link'; then linkBlock; else notLinkBlock\">\n </ng-container>\n <ng-template #linkBlock>\n <a [id]=\"field.key\" class=\"color-link body-sm pep-report-input readonly\"\n *ngIf=\"field.formattedValue != null\" title=\"{{ field.formattedValue }}\" target=\"_blank\"\n href=\"{{ field.value }}\">{{ field.formattedValue }}</a>\n </ng-template>\n <ng-template #notLinkBlock>\n <span [id]=\"field.key\" class=\"body-sm pep-report-input readonly\"\n title=\"{{ field.formattedValue }}\" [ngStyle]=\"{ color: field.textColor }\">{{\n field.formattedValue }}</span>\n </ng-template>\n </ng-template>\n <ng-template #emptyBlock>\n <span> </span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>", styles: [":host{display:grid}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "component", type: i7.PepCheckboxComponent, selector: "pep-checkbox", inputs: ["key", "value", "label", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "additionalValue", "form", "isActive", "showTitle", "renderTitle", "layoutType", "visible"], outputs: ["valueChange"] }, { kind: "component", type: i8.PepDateComponent, selector: "pep-date", inputs: ["key", "value", "formattedValue", "label", "type", "mandatory", "disabled", "readonly", "textColor", "xAlignment", "rowSpan", "visible", "minValue", "maxValue", "minDateValue", "maxDateValue", "form", "isActive", "showTitle", "renderTitle", "renderError", "renderSymbol", "layoutType"], outputs: ["valueChange"] }, { kind: "component", type: i9.PepImageComponent, selector: "pep-image", inputs: ["key", "srcLarge", "src", "options", "label", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "indicatorsField", "menuField", "hasCampaignField", "visible", "form", "uid", "showTitle", "renderTitle", "layoutType", "isActive", "sizeLimitMB", "acceptImagesType"], outputs: ["fileChange", "elementClick"] }, { kind: "component", type: i10.PepQuantitySelectorComponent, selector: "pep-quantity-selector", inputs: ["key", "value", "formattedValue", "minFractionDigits", "maxFractionDigits", "label", "type", "mandatory", "disabled", "readonly", "textColor", "xAlignment", "rowSpan", "allowDecimal", "additionalValue", "notificationInfo", "visible", "form", "showTitle", "renderTitle", "layoutType", "isActive", "styleType"], outputs: ["valueChange", "elementClick"] }, { kind: "component", type: i11.PepSignatureComponent, selector: "pep-signature", inputs: ["key", "src", "label", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "signatureURL", "visible", "form", "showTitle", "renderTitle", "layoutType", "isActive"], outputs: ["fileChange"] }, { kind: "component", type: i12.PepTextareaComponent, selector: "pep-textarea", inputs: ["key", "value", "label", "mandatory", "disabled", "readonly", "maxFieldCharacters", "textColor", "xAlignment", "rowSpan", "visible", "form", "isActive", "showTitle", "renderTitle", "layoutType"], outputs: ["valueChange"] }, { kind: "component", type: i13.PepFieldGeneratorComponent, selector: "pep-field-generator", inputs: ["field", "isActive", "uid", "form", "layoutType", "showTitle", "checkForChanges"], outputs: ["valueChange", "formValidationChange", "elementClick", "internalFormFieldChange", "internalFormFieldClick", "formValueChange", "formFieldClick"] }, { kind: "component", type: i14.PepInternalButtonComponent, selector: "pep-internal-button", inputs: ["key", "value", "formattedValue", "label", "referenceObjectInternalType", "type", "mandatory", "disabled", "readonly", "xAlignment", "rowSpan", "visible", "form", "showTitle", "layoutType"], outputs: ["elementClick", "valueChange"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.LowerCasePipe, name: "lowercase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1174
1183
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepFormComponent, decorators: [{
|
|
1175
1184
|
type: Component,
|
|
1176
1185
|
args: [{ selector: 'pep-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fieldset *ngIf=\"form\" [formGroup]=\"form\" [disabled]=\"isLocked\" class=\"pep-form\"\n [ngStyle]=\"{ 'background-color': layoutType == 'card' && data?.BackgroundColor }\">\n <!-- New Form -->\n <mat-grid-list *ngIf=\"layoutType == 'form'\" [cols]=\"columns\" [rowHeight]=\"rowHeight + 'rem'\"\n [gutterSize]=\"formGutterSize\">\n <mat-grid-tile *ngFor=\"let field of fields$ | async\" [rowspan]=\"field.rowSpan\" [colspan]=\"field.colSpan\">\n <pep-field-generator *ngIf=\"field.controlType != 'placeholder'\" [form]=\"form\" [layoutType]=\"layoutType\"\n [checkForChanges]=\"checkForChanges\" [uid]=\"data?.UID\" [field]=\"field\" [showTitle]=\"showTitle\"\n (valueChange)=\"onValueChanged($event)\" (elementClick)=\"onClick($event)\"\n (internalFormFieldClick)=\"onInternalFormFieldClicked($event)\"\n (internalFormFieldChange)=\"onInternalFormFieldChanged($event)\"\n (formValueChange)=\"onFormValueChanged($event)\" (formFieldClick)=\"onFormFieldClick($event)\"\n (formValidationChange)=\"onFormValidationChanged($event)\">\n </pep-field-generator>\n </mat-grid-tile>\n </mat-grid-list>\n\n <!-- Thumbnails -->\n <mat-grid-list *ngIf=\"layoutType == 'card'\" [cols]=\"columns\" [rowHeight]=\"rowHeight + 'rem'\"\n [gutterSize]=\"cardGutterSize\" class=\"card-spacing\">\n <mat-grid-tile *ngFor=\"let field of fields$ | async\" [rowspan]=\"field.rowSpan\" [colspan]=\"field.colSpan\"\n [ngStyle]=\"{ overflow: field.type == 'qs' ? 'unset' : 'hidden' }\">\n <pep-field-generator *ngIf=\"field.controlType != 'placeholder'\" [form]=\"form\" [layoutType]=\"layoutType\"\n [ngClass]=\"{ 'lock-events': lockEvents }\" [isActive]=\"isActive\" [checkForChanges]=\"checkForChanges\"\n [uid]=\"data?.UID\" [field]=\"field\" [showTitle]=\"showTitle\" (valueChange)=\"onValueChanged($event)\"\n (elementClick)=\"onClick($event)\" (internalFormFieldClick)=\"onInternalFormFieldClicked($event)\"\n (internalFormFieldChange)=\"onInternalFormFieldChanged($event)\"\n (formValueChange)=\"onFormValueChanged($event)\" (formFieldClick)=\"onFormFieldClick($event)\">\n </pep-field-generator>\n </mat-grid-tile>\n </mat-grid-list>\n\n <ng-container *ngIf=\"layoutType == 'table'\">\n <ng-container *ngIf=\"isReport; then reportBlock; else notReportBlock\"></ng-container>\n <ng-template #reportBlock>\n <ng-container *ngTemplateOutlet=\"report\"></ng-container>\n </ng-template>\n <ng-template #notReportBlock>\n <div *ngFor=\"let field of fields$ | async; let j = index\" class=\"pull-left flip table-cell \"\n [ngClass]=\"['text-align-' + field.xAlignment]\" style=\"height: 100%\"\n [ngStyle]=\"{ width: (layout?.ControlFields)[j]?.calcColumnWidthString}\">\n <pep-field-generator *ngIf=\"field.controlType != 'placeholder'\" [checkForChanges]=\"checkForChanges\"\n [uid]=\"data?.UID\" [field]=\"field\" [form]=\"form\" [layoutType]=\"layoutType\" [showTitle]=\"false\"\n (elementClick)=\"onClick($event)\" (valueChange)=\"onValueChanged($event)\"\n (formValueChange)=\"onFormValueChanged($event)\" (formFieldClick)=\"onFormFieldClick($event)\"\n [isActive]=\"isActive\">\n </pep-field-generator>\n </div>\n </ng-template>\n </ng-container>\n\n <!------- For testing ------------\n {{ form.value | json }}\n {{ form.valid }}\n ---------------------------------->\n</fieldset>\n\n<ng-template #report>\n <div *ngFor=\"let field of fields$ | async; let j = index\" class=\"pull-left flip pep-report-fields\"\n [ngStyle]=\"{ width: (layout?.ControlFields)[j]?.calcColumnWidthString }\"\n [ngClass]=\"['text-align-' + field.xAlignment]\">\n <ng-container [ngSwitch]=\"field.controlType\">\n <pep-image *ngSwitchCase=\"'image'\" [uid]=\"data?.UID\" [form]=\"form\" [key]=\"field.key\"\n [src]=\"field.formattedValue\" [srcLarge]=\"field.value\" [options]=\"field.options\" [label]=\"field.label\"\n [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\" [readonly]=\"field.readonly\"\n [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\" [layoutType]=\"layoutType\"\n (elementClick)=\"onClick($event)\">\n </pep-image>\n\n <pep-signature *ngSwitchCase=\"'signature'\" [form]=\"form\" [key]=\"field.key\" [src]=\"field.value\"\n [label]=\"field.label\" [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\"\n [readonly]=\"field.readonly\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [layoutType]=\"layoutType\">\n </pep-signature>\n\n <pep-checkbox *ngSwitchCase=\"'checkbox'\" [form]=\"form\" [key]=\"field.key\"\n [value]=\"(field.value | lowercase) == 'true' || field.value == '1' ? true : false\" [label]=\"field.label\"\n [type]=\"field.type\" [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\"\n [readonly]=\"field.readonly\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [additionalValue]=\"field.additionalValue\" [layoutType]=\"layoutType\">\n </pep-checkbox>\n\n <pep-date *ngSwitchCase=\"'date'\" [form]=\"form\" [key]=\"field.key\" [value]=\"field.value\"\n [formattedValue]=\"field.formattedValue\" [label]=\"field.label\" [type]=\"field.type\"\n [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\" [readonly]=\"field.readonly\"\n [textColor]=\"field.textColor\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [minValue]=\"field.minValue\" [maxValue]=\"field.maxValue\" [layoutType]=\"layoutType\">\n </pep-date>\n\n <pep-internal-button *ngSwitchCase=\"'button'\" [form]=\"form\" [key]=\"field.key\" [value]=\"field.value\"\n [formattedValue]=\"field.formattedValue\" [label]=\"field.label\" [type]=\"field.type\"\n [disabled]=\"field.disabled\" [readonly]=\"field.readonly\" [xAlignment]=\"field.xAlignment\"\n [layoutType]=\"layoutType\" (elementClick)=\"onClick($event)\">\n </pep-internal-button>\n\n <pep-textarea *ngSwitchCase=\"'textarea'\" [form]=\"form\" [key]=\"field.key\" [value]=\"field.value\"\n [label]=\"field.label\" [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\"\n [readonly]=\"field.readonly\" [maxFieldCharacters]=\"field.maxFieldCharacters\"\n [textColor]=\"field.textColor\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [layoutType]=\"layoutType\">\n </pep-textarea>\n\n <pep-quantity-selector *ngSwitchCase=\"'qs'\" [id]=\"field.key\" [form]=\"form\" [key]=\"field.key\"\n [value]=\"field.value\" [formattedValue]=\"field.formattedValue\" [label]=\"field.label\" [type]=\"field.type\"\n [mandatory]=\"field.mandatory\" [disabled]=\"field.disabled\" [readonly]=\"field.readonly\"\n [textColor]=\"field.textColor\" [xAlignment]=\"field.xAlignment\" [rowSpan]=\"field.rowSpan\"\n [layoutType]=\"layoutType\" (valueChange)=\"onValueChanged($event)\" (elementClick)=\"onClick($event)\">\n </pep-quantity-selector>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"field.formattedValue?.length > 0; then notEmptyBlock; else emptyBlock\">\n </ng-container>\n <ng-template #notEmptyBlock>\n <ng-container\n *ngIf=\"field.controlType === 'attachment' || field.type === 'link'; then linkBlock; else notLinkBlock\">\n </ng-container>\n <ng-template #linkBlock>\n <a [id]=\"field.key\" class=\"color-link body-sm pep-report-input readonly\"\n *ngIf=\"field.formattedValue != null\" title=\"{{ field.formattedValue }}\" target=\"_blank\"\n href=\"{{ field.value }}\">{{ field.formattedValue }}</a>\n </ng-template>\n <ng-template #notLinkBlock>\n <span [id]=\"field.key\" class=\"body-sm pep-report-input readonly\"\n title=\"{{ field.formattedValue }}\" [ngStyle]=\"{ color: field.textColor }\">{{\n field.formattedValue }}</span>\n </ng-template>\n </ng-template>\n <ng-template #emptyBlock>\n <span> </span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>", styles: [":host{display:grid}\n"] }]
|
|
@@ -1215,4 +1224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
1215
1224
|
}], internalFormFieldChange: [{
|
|
1216
1225
|
type: Output
|
|
1217
1226
|
}] } });
|
|
1218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHVCQUF1QixFQUd2QixLQUFLLEVBRUwsTUFBTSxFQUNOLFlBQVksR0FJZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0gsVUFBVSxHQUViLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUVILGFBQWEsR0FDaEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBSUgsVUFBVSxFQUNWLHVCQUF1QixFQU92QixlQUFlLEVBQ2YsY0FBYyxFQUNkLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixjQUFjLEVBQ2QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBR25CLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsMEJBQTBCLEVBQzFCLDRCQUE0QixHQUcvQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTbkQsTUFBTSxPQUFPLGdCQUFnQjtJQW1GekIsaUNBQWlDO0lBQ2pDLHlCQUF5QjtJQUV6QixZQUNZLGFBQStCLEVBQy9CLG9CQUE2QyxFQUM3QyxhQUErQixFQUMvQixFQUFlLEVBQ3ZCLE9BQXdCLEVBQ2hCLFNBQTJC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S0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7NkdBNzdDUSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixvcUJDMUU3QixpOFJBcUljOzJGRDNERCxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0ksVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNO21RQUd0QyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFJRixJQUFJO3NCQURQLEtBQUs7Z0JBaUJGLFVBQVU7c0JBRGIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFHTixXQUFXO3NCQURWLE1BQU07Z0JBR1Asb0JBQW9CO3NCQURuQixNQUFNO2dCQUlQLFVBQVU7c0JBRFQsTUFBTTtnQkFHRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dCxcbiAgICBLZXlWYWx1ZURpZmZlcnMsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPbkNoYW5nZXMsXG4gICAgRG9DaGVjayxcbiAgICBPcHRpb25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEZvcm1Hcm91cCxcbiAgICBGb3JtQnVpbGRlcixcbiAgICBWYWxpZGF0b3JzLFxuICAgIEFic3RyYWN0Q29udHJvbCxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBQZXBEaWFsb2dTZXJ2aWNlLFxuICAgIFBlcERpYWxvZ0RhdGEsXG59IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2RpYWxvZyc7XG5pbXBvcnQge1xuICAgIElQZXBGaWVsZFZhbHVlQ2hhbmdlRXZlbnQsXG4gICAgSVBlcEZpZWxkQ2xpY2tFdmVudCxcbiAgICBQZXBMYXlvdXRUeXBlLFxuICAgIEZJRUxEX1RZUEUsXG4gICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgUGVwTGF5b3V0U2VydmljZSxcbiAgICBVSUNvbnRyb2wsXG4gICAgVUlDb250cm9sRmllbGQsXG4gICAgT2JqZWN0c0RhdGFSb3csXG4gICAgT2JqZWN0c0RhdGFSb3dDZWxsLFxuICAgIFBlcEZpZWxkQmFzZSxcbiAgICBQZXBUZXh0Ym94RmllbGQsXG4gICAgUGVwU2VsZWN0RmllbGQsXG4gICAgUGVwSW50ZXJuYWxNZW51RmllbGQsXG4gICAgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkLFxuICAgIFBlcEFkZHJlc3NGaWVsZCxcbiAgICBQZXBJbmRpY2F0b3JzRmllbGQsXG4gICAgUGVwSW50ZXJuYWxQYWdlRmllbGQsXG4gICAgUGVwSW50ZXJuYWxDYXJ1c2VsRmllbGQsXG4gICAgUGVwSW50ZXJuYWxCdXR0b25GaWVsZCxcbiAgICBQZXBBdHRhY2htZW50RmllbGQsXG4gICAgUGVwU2lnbmF0dXJlRmllbGQsXG4gICAgUGVwSW1hZ2VGaWVsZCxcbiAgICBQZXBJbWFnZXNGaWVsZCxcbiAgICBQZXBMaW5rRmllbGQsXG4gICAgUGVwVGV4dGFyZWFGaWVsZCxcbiAgICBQZXBSaWNoSHRtbFRleHRhcmVhRmllbGQsXG4gICAgUGVwRGF0ZUZpZWxkLFxuICAgIFBlcENoZWNrYm94RmllbGQsXG4gICAgUGVwU2VwYXJhdG9yRmllbGQsXG4gICAgUGVwUGxhY2Vob2xkZXJGaWVsZCxcbiAgICBQZXBIb3Jpem9udGFsQWxpZ25tZW50LFxuICAgIFBlcFZlcnRpY2FsQWxpZ25tZW50LFxuICAgIFhfQUxJR05NRU5UX1RZUEUsXG4gICAgWV9BTElHTk1FTlRfVFlQRSxcbiAgICBERUZBVUxUX1ZFUlRJQ0FMX0FMSUdOTUVOVCxcbiAgICBERUZBVUxUX0hPUklaT05UQUxfQUxJR05NRU5ULFxuICAgIEtleVZhbHVlUGFpcixcbiAgICBJUGVwT3B0aW9uLFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50LCBJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudCB9IGZyb20gJy4vZm9ybS5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGVwLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFBlcEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIERvQ2hlY2ssIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBpc0ludGVybmFsID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBpc1JlcG9ydCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGxheW91dDogVUlDb250cm9sO1xuICAgIEBJbnB1dCgpIGxvY2tFdmVudHMgPSBmYWxzZTsgICBcbiAgICBASW5wdXQoKSBjYW5FZGl0T2JqZWN0ID0gdHJ1ZTtcblxuICAgIHByaXZhdGUgX2RhdGE6IE9iamVjdHNEYXRhUm93ID0gbnVsbDtcbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhKHZhbHVlOiBPYmplY3RzRGF0YVJvdykge1xuICAgICAgICBjb25zdCBzaG91bGRSZWxvYWQgPSB0aGlzLnNob3VsZFJlbG9hZEZvcm0gfHwgIXRoaXMuX2RhdGE7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB2YWx1ZTtcblxuICAgICAgICBpZiAoc2hvdWxkUmVsb2FkKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG91bGRSZWxvYWRGb3JtID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGF0YSgpOiBPYmplY3RzRGF0YVJvdyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxvY2tGaWVsZHModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0xvY2tlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGlzQWN0aXZlID0gZmFsc2U7XG4gICAgQElucHV0KCkgbGF5b3V0VHlwZTogUGVwTGF5b3V0VHlwZSA9ICdjYXJkJztcbiAgICAvLyBASW5wdXQoKSBsaXN0VHlwZSA9ICcnO1xuICAgIEBJbnB1dCgpIG9iamVjdElkID0gJzAnO1xuICAgIEBJbnB1dCgpIHBhcmVudElkID0gJzAnO1xuICAgIEBJbnB1dCgpIHNlYXJjaENvZGUgPSAnMCc7XG4gICAgQElucHV0KCkgc2hvd1RpdGxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBmaXJzdEZpZWxkQXNMaW5rID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2hlY2tGb3JDaGFuZ2VzOiBhbnkgPSBudWxsO1xuXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwRm9ybUZpZWxkVmFsdWVDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1WYWxpZGF0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBmaWVsZENsaWNrOiBFdmVudEVtaXR0ZXI8SVBlcEZvcm1GaWVsZENsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudD4oKTtcblxuICAgIEBPdXRwdXQoKSBpbnRlcm5hbEZvcm1GaWVsZENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBpbnRlcm5hbEZvcm1GaWVsZENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIGlzTG9ja2VkID0gZmFsc2U7XG4gICAgZm9ybUd1dHRlclNpemU7XG4gICAgY2FyZEd1dHRlclNpemU7XG4gICAgcm93SGVpZ2h0O1xuICAgIC8vIHByaXZhdGUgbWF0cml4SXNMYXN0ID0gZmFsc2U7XG4gICAgLy8gbGFzdFVwZGF0ZWRGaWVsZEFwaU5hbWU6IHN0cmluZyA9ICcnO1xuICAgIGZvcm06IEZvcm1Hcm91cDtcbiAgICBkaWZmZXI6IGFueTtcblxuICAgIC8vIHBheUxvYWQgPSAnJztcbiAgICBwcml2YXRlIHJvd3M6IEFycmF5PFBlcEZpZWxkQmFzZVtdPiA9IFtdO1xuICAgIGZpZWxkczogUGVwRmllbGRCYXNlW10gPSBbXTtcblxuICAgIHByaXZhdGUgX2ZpZWxkc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxQZXBGaWVsZEJhc2VbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBlcEZpZWxkQmFzZVtdPihbXSk7XG4gICAgZ2V0IGZpZWxkcyQoKTogT2JzZXJ2YWJsZTxQZXBGaWVsZEJhc2VbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBjb2x1bW5zID0gMTtcblxuICAgIHByaXZhdGUgaGFzTWVudUZsb2F0aW5nT25PdGhlckZpZWxkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBtZW51RmllbGQ6IGFueTtcbiAgICBwcml2YXRlIG1lbnVEYXRhRmllbGQ6IGFueTtcbiAgICBwcml2YXRlIGhhc0NhbXBhaWduRmllbGQ6IGFueTtcbiAgICBwcml2YXRlIGhhc0NhbXBhaWduRGF0YUZpZWxkOiBhbnk7XG4gICAgcHJpdmF0ZSBpbmRpY2F0b3JzRmllbGQ6IGFueTtcbiAgICBwcml2YXRlIGluZGljYXRvcnNEYXRhRmllbGQ6IGFueSA9IG51bGw7XG5cbiAgICBwcml2YXRlIF9zaG91bGRSZWxvYWRGb3JtID0gZmFsc2U7XG4gICAgZ2V0IHNob3VsZFJlbG9hZEZvcm0oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG91bGRSZWxvYWRGb3JtO1xuICAgIH1cblxuICAgIC8vIGV2ZW50U2VydmljZVN1YjogU3Vic2NyaXB0aW9uO1xuICAgIC8vIHB1YmxpYyBqc29uTGliID0gSlNPTjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IFBlcERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY3VzdG9taXphdGlvblNlcnZpY2U6IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBkaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIHZhbHVlIHRvIGNvbXBhcmUgd2l0aFxuICAgICAgICB0aGlzLmRpZmZlciA9IGRpZmZlcnMuZmluZCh7fSkuY3JlYXRlKCk7XG4gICAgfVxuXG4gICAgY29udmVydFhBbGlnblRvSG9yaXpvbnRhbEFsaWduKFxuICAgICAgICB4QWxpZ246IFhfQUxJR05NRU5UX1RZUEVcbiAgICApOiBQZXBIb3Jpem9udGFsQWxpZ25tZW50IHtcbiAgICAgICAgbGV0IHJlcyA9IERFRkFVTFRfSE9SSVpPTlRBTF9BTElHTk1FTlQ7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgeEFsaWduID09PSBYX0FMSUdOTUVOVF9UWVBFLk5vbmUgfHxcbiAgICAgICAgICAgIHhBbGlnbiA9PT0gWF9BTElHTk1FTlRfVFlQRS5MZWZ0XG4gICAgICAgICkge1xuICAgICAgICAgICAgcmVzID0gJ2xlZnQnO1xuICAgICAgICB9IGVsc2UgaWYgKHhBbGlnbiA9PT0gWF9BTElHTk1FTlRfVFlQRS5SaWdodCkge1xuICAgICAgICAgICAgcmVzID0gJ3JpZ2h0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9ICdjZW50ZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBjb252ZXJ0WUFsaWduVG9WZXJ0aWNhbEFsaWduKFxuICAgICAgICB5QWxpZ246IFlfQUxJR05NRU5UX1RZUEVcbiAgICApOiBQZXBWZXJ0aWNhbEFsaWdubWVudCB7XG4gICAgICAgIGxldCByZXMgPSBERUZBVUxUX1ZFUlRJQ0FMX0FMSUdOTUVOVDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB5QWxpZ24gPT09IFlfQUxJR05NRU5UX1RZUEUuTm9uZSB8fFxuICAgICAgICAgICAgeUFsaWduID09PSBZX0FMSUdOTUVOVF9UWVBFLlRvcFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJlcyA9ICd0b3AnO1xuICAgICAgICB9IGVsc2UgaWYgKHlBbGlnbiA9PT0gWV9BTElHTk1FTlRfVFlQRS5Cb3R0b20pIHtcbiAgICAgICAgICAgIHJlcyA9ICdib3R0b20nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gJ21pZGRsZSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGNvbnZlcnRPcHRpb25hbFZhbHVlcyhcbiAgICAgICAgb3B0aW9uYWxWYWx1ZXM6IEFycmF5PEtleVZhbHVlUGFpcjxzdHJpbmc+PlxuICAgICk6IElQZXBPcHRpb25bXSB7XG4gICAgICAgIGlmIChvcHRpb25hbFZhbHVlcyAmJiBvcHRpb25hbFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZXMubWFwKChvdikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGtleTogb3YuS2V5LCB2YWx1ZTogb3YuVmFsdWUgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udmVydEFkZHJlc3NGaWVsZHMoXG4gICAgICAgIGNvbnRyb2xGaWVsZDogVUlDb250cm9sRmllbGQsXG4gICAgICAgIGFkZHJlc3NGaWVsZHM6IEFycmF5PE9iamVjdHNEYXRhUm93Q2VsbD4sXG4gICAgICAgIGNhbkVkaXRPYmplY3Q6IGJvb2xlYW5cbiAgICApOiBQZXBGaWVsZEJhc2VbXSB7XG4gICAgICAgIGNvbnN0IGZpZWxkczogUGVwRmllbGRCYXNlW10gPSBbXTtcblxuICAgICAgICBhZGRyZXNzRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBsZXQgY3VzdG9tRmllbGQ6IFBlcEZpZWxkQmFzZTtcbiAgICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gZmllbGQuQXBpTmFtZTtcblxuICAgICAgICAgICAgaWYgKGZpZWxkLkFwaU5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdzdHJlZXQnKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwVGV4dGJveEZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5BcGlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZmllbGQuQXBpTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICFjYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWZpZWxkLkVuYWJsZWQgfHwgIWNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZC5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IGZpZWxkLkZvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbDogMCxcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMixcbiAgICAgICAgICAgICAgICAgICAgeEFsaWdubWVudDogdGhpcy5jb252ZXJ0WEFsaWduVG9Ib3Jpem9udGFsQWxpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sRmllbGQuTGF5b3V0LlhBbGlnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgeUFsaWdubWVudDogdGhpcy5jb252ZXJ0WUFsaWduVG9WZXJ0aWNhbEFsaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEZpZWxkLkxheW91dC5ZQWxpZ25tZW50XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5BcGlOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2l0eScpID49IDApIHtcbiAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBUZXh0Ym94RmllbGQoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLkFwaU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBmaWVsZC5BcGlOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICByZWFkb25seTogIWNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhZmllbGQuRW5hYmxlZCB8fCAhY2FuRWRpdE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkLlZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogZmllbGQuRm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICAgICAgICAgICAgY29sOiAyLFxuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICAgICAgICAgICAgICB4QWxpZ25tZW50OiB0aGlzLmNvbnZlcnRYQWxpZ25Ub0hvcml6b250YWxBbGlnbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWEFsaWdubWVudFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB5QWxpZ25tZW50OiB0aGlzLmNvbnZlcnRZQWxpZ25Ub1ZlcnRpY2FsQWxpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sRmllbGQuTGF5b3V0LllBbGlnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLkFwaU5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdzdGF0ZScpID49IDApIHtcbiAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBTZWxlY3RGaWVsZCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogZmllbGQuQXBpTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGZpZWxkLkFwaU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNvbnZlcnRPcHRpb25hbFZhbHVlcyhmaWVsZC5PcHRpb25hbFZhbHVlcyksXG4gICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiAhY2FuRWRpdE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICFmaWVsZC5FbmFibGVkIHx8ICFjYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGQuVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiBmaWVsZC5Gb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgICAgICAgICAgICBjb2w6IDAsXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIHhBbGlnbm1lbnQ6IHRoaXMuY29udmVydFhBbGlnblRvSG9yaXpvbnRhbEFsaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEZpZWxkLkxheW91dC5YQWxpZ25tZW50XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHlBbGlnbm1lbnQ6IHRoaXMuY29udmVydFlBbGlnblRvVmVydGljYWxBbGlnbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWUFsaWdubWVudFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuQXBpTmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3ppcGNvZGUnKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwVGV4dGJveEZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5BcGlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZmllbGQuQXBpTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICFjYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWZpZWxkLkVuYWJsZWQgfHwgIWNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZC5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IGZpZWxkLkZvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbDogMSxcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgICAgICAgICAgeEFsaWdubWVudDogdGhpcy5jb252ZXJ0WEFsaWduVG9Ib3Jpem9udGFsQWxpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sRmllbGQuTGF5b3V0LlhBbGlnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgeUFsaWdubWVudDogdGhpcy5jb252ZXJ0WUFsaWduVG9WZXJ0aWNhbEFsaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEZpZWxkLkxheW91dC5ZQWxpZ25tZW50XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5BcGlOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY291bnRyeScpID49IDApIHtcbiAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBTZWxlY3RGaWVsZCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogZmllbGQuQXBpTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGZpZWxkLkFwaU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNvbnZlcnRPcHRpb25hbFZhbHVlcyhmaWVsZC5PcHRpb25hbFZhbHVlcyksXG4gICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiAhY2FuRWRpdE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICFmaWVsZC5FbmFibGVkIHx8ICFjYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGQuVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiBmaWVsZC5Gb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgICAgICAgICAgICBjb2w6IDIsXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIHhBbGlnbm1lbnQ6IHRoaXMuY29udmVydFhBbGlnblRvSG9yaXpvbnRhbEFsaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEZpZWxkLkxheW91dC5YQWxpZ25tZW50XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHlBbGlnbm1lbnQ6IHRoaXMuY29udmVydFlBbGlnblRvVmVydGljYWxBbGlnbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWUFsaWdubWVudFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogNCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmllbGRzLnB1c2goY3VzdG9tRmllbGQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmllbGRzLnNvcnQoKG4xLCBuMikgPT5cbiAgICAgICAgICAgIG4xLm9yZGVyID4gbjIub3JkZXIgPyAxIDogbjEub3JkZXIgPCBuMi5vcmRlciA/IC0xIDogMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzTWF0cml4RmllbGQoYXBpTmFtZVRvQ2hlY2s6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYXBpTmFtZVRvQ2hlY2suaW5kZXhPZignTWF0cml4JykgPj0gMDtcbiAgICB9XG5cbiAgICBkb2VzRmllbGRIYXZhRmxvYXRpbmdGaWVsZChcbiAgICAgICAgY29udHJvbEZpZWxkOiBVSUNvbnRyb2xGaWVsZCxcbiAgICAgICAgZmxvYXRpbmdGaWVsZDogYW55XG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBoYXNGbG9hdGluZ0ZpZWxkID0gZmFsc2U7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGZsb2F0aW5nRmllbGQuTGF5b3V0LlkgPj0gY29udHJvbEZpZWxkLkxheW91dC5ZICYmXG4gICAgICAgICAgICBmbG9hdGluZ0ZpZWxkLkxheW91dC5ZIDxcbiAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWSArIGNvbnRyb2xGaWVsZC5MYXlvdXQuSGVpZ2h0ICYmXG4gICAgICAgICAgICBmbG9hdGluZ0ZpZWxkLkxheW91dC5YID49IGNvbnRyb2xGaWVsZC5MYXlvdXQuWCAmJlxuICAgICAgICAgICAgZmxvYXRpbmdGaWVsZC5MYXlvdXQuWCA8XG4gICAgICAgICAgICBjb250cm9sRmllbGQuTGF5b3V0LlggKyBjb250cm9sRmllbGQuTGF5b3V0LldpZHRoXG4gICAgICAgICkge1xuICAgICAgICAgICAgaGFzRmxvYXRpbmdGaWVsZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaGFzRmxvYXRpbmdGaWVsZDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25zRm9yQ3VzdG9tRmllbGQoXG4gICAgICAgIGNvbnRyb2xGaWVsZDogVUlDb250cm9sRmllbGQsXG4gICAgICAgIGRhdGFGaWVsZDogYW55LFxuICAgICAgICBjYW5FZGl0T2JqZWN0OiBib29sZWFuXG4gICAgKTogYW55IHtcbiAgICAgICAgaWYgKCFjb250cm9sRmllbGQgfHwgIWRhdGFGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgY29udHJvbEZpZWxkLlJlYWRPbmx5IHx8ICFjYW5FZGl0T2JqZWN0ID8gJycgOiBjb250cm9sRmllbGQuVGl0bGU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogY29udHJvbEZpZWxkLkFwaU5hbWUsXG4gICAgICAgICAgICBsYWJlbDogY29udHJvbEZpZWxkLlRpdGxlLFxuICAgICAgICAgICAgYWNjZXNzb3J5OiBkYXRhRmllbGQuQWNjZXNzb3J5LFxuICAgICAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgICAgICByZWFkb25seTogY29udHJvbEZpZWxkLlJlYWRPbmx5IHx8ICFjYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICFkYXRhRmllbGQuRW5hYmxlZCB8fCAhY2FuRWRpdE9iamVjdCxcbiAgICAgICAgICAgIGhpZGRlbjogY29udHJvbEZpZWxkLkhpZGRlbixcbiAgICAgICAgICAgIG1hbmRhdG9yeTogY29udHJvbEZpZWxkLk1hbmRhdG9yeSxcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhRmllbGQuVmFsdWUsXG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogZGF0YUZpZWxkLkZvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgICAgYWRkaXRpb25hbFZhbHVlOiBkYXRhRmllbGQuQWRkaXRpb25hbFZhbHVlLFxuICAgICAgICAgICAgcm93OiBjb250cm9sRmllbGQuTGF5b3V0LlksXG4gICAgICAgICAgICByb3dTcGFuOiBjb250cm9sRmllbGQuTGF5b3V0LkhlaWdodCxcbiAgICAgICAgICAgIGNvbDogY29udHJvbEZpZWxkLkxheW91dC5YLFxuICAgICAgICAgICAgY29sU3BhbjogY29udHJvbEZpZWxkLkxheW91dC5XaWR0aCxcbiAgICAgICAgICAgIHhBbGlnbm1lbnQ6IHRoaXMuY29udmVydFhBbGlnblRvSG9yaXpvbnRhbEFsaWduKFxuICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWEFsaWdubWVudFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHlBbGlnbm1lbnQ6IHRoaXMuY29udmVydFlBbGlnblRvVmVydGljYWxBbGlnbihcbiAgICAgICAgICAgICAgICBjb250cm9sRmllbGQuTGF5b3V0LllBbGlnbm1lbnRcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNvbnZlcnRPcHRpb25hbFZhbHVlcyhkYXRhRmllbGQuT3B0aW9uYWxWYWx1ZXMpLFxuICAgICAgICAgICAgZ3JvdXBGaWVsZHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1heEZpZWxkQ2hhcmFjdGVyczogY29udHJvbEZpZWxkLk1heEZpZWxkQ2hhcmFjdGVycyxcbiAgICAgICAgICAgIG1pblZhbHVlOiBjb250cm9sRmllbGQuTWluVmFsdWUsXG4gICAgICAgICAgICBtYXhWYWx1ZTogY29udHJvbEZpZWxkLk1heFZhbHVlLFxuICAgICAgICAgICAgLy8gaGFzTWVudTogaGFzTWVudSxcbiAgICAgICAgICAgIC8vIGhhc0NhbXBhaWduOiBoYXNDYW1wYWlnbixcbiAgICAgICAgICAgIC8vIGhhc0luZGljYXRvcnM6IGhhc0luZGljYXRvcnMsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IGRhdGFGaWVsZC5UZXh0Q29sb3IsXG4gICAgICAgICAgICB2aXNpYmxlOiBkYXRhRmllbGQuVmlzaWJsZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9DdXN0b21GaWVsZChcbiAgICAgICAgY29udHJvbEZpZWxkOiBVSUNvbnRyb2xGaWVsZCxcbiAgICAgICAgZGF0YUZpZWxkOiBhbnksXG4gICAgICAgIGNhbkVkaXRPYmplY3Q6IGJvb2xlYW4sXG4gICAgICAgIG1lbnVGaWVsZDogYW55LFxuICAgICAgICBoYXNDYW1wYWlnbkZpZWxkOiBhbnksXG4gICAgICAgIGluZGljYXRvcnNGaWVsZDogYW55LFxuICAgICAgICBvYmplY3RJZDogYW55LFxuICAgICAgICBwYXJlbnRJZDogYW55LFxuICAgICAgICBzZWFyY2hDb2RlOiBhbnlcbiAgICApOiBQZXBGaWVsZEJhc2Uge1xuICAgICAgICBsZXQgY3VzdG9tRmllbGQ6IFBlcEZpZWxkQmFzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uc0ZvckN1c3RvbUZpZWxkKFxuICAgICAgICAgICAgY29udHJvbEZpZWxkLFxuICAgICAgICAgICAgZGF0YUZpZWxkLFxuICAgICAgICAgICAgY2FuRWRpdE9iamVjdFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjb250cm9sRmllbGQuQXBpTmFtZSA9PT0gJ09iamVjdE1lbnUnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnbWVudSc7XG4gICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBJbnRlcm5hbE1lbnVGaWVsZChvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbFF1YW50aXR5U2VsZWN0b3IgfHxcbiAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5GaWVsZFR5cGUgPT09XG4gICAgICAgICAgICBGSUVMRF9UWVBFLk51bWJlckludGVnZXJRdWFudGl0eVNlbGVjdG9yIHx8XG4gICAgICAgICAgICBjb250cm9sRmllbGQuQXBpTmFtZSA9PT0gJ1F1YW50aXR5U2VsZWN0b3InIHx8XG4gICAgICAgICAgICBjb250cm9sRmllbGQuQXBpTmFtZSA9PT0gJ1VuaXRzUXVhbnRpdHknIHx8XG4gICAgICAgICAgICBjb250cm9sRmllbGQuQXBpTmFtZS5pbmRleE9mKCdzaXplXycpID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuSW50ZXJuYWxMaW5rKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuUGFja2FnZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdwYWNrYWdlQnV0dG9uJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsUXVhbnRpdHlTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3FzJztcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFsbG93RGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09XG4gICAgICAgICAgICAgICAgRklFTERfVFlQRS5OdW1iZXJJbnRlZ2VyUXVhbnRpdHlTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVySW50ZWdlclxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3FzJztcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFsbG93RGVjaW1hbCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlckludGVnZXJGb3JNYXRyaXhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdxc0Zvck1hdHJpeCc7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hbGxvd0RlY2ltYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YUZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsRm9yTWF0cml4KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3FzRm9yTWF0cml4JztcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFsbG93RGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMubm90aWZpY2F0aW9uSW5mbyA9IGRhdGFGaWVsZC5Ob3RpZmljYXRpb25JbmZvO1xuICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkKG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSEFDSzogbmVlZCB0byByZW1vdmUgdGhpcy4uXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5JbmRpY2F0b3JzICYmXG4gICAgICAgICAgICAgICAgdGhpcy5pc01hdHJpeEZpZWxkKGRhdGFGaWVsZC5BcGlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkLkZpZWxkVHlwZSA9IEZJRUxEX1RZUEUuSW50ZXJuYWxQYWdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGRhdGFGaWVsZC5GaWVsZFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQWRkcmVzczoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5FZGl0R3JvdXBPYmplY3QgPSBjb250cm9sRmllbGQuUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuRWRpdE9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ncm91cEZpZWxkcyA9IHRoaXMuY29udmVydEFkZHJlc3NGaWVsZHMoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhRmllbGQuR3JvdXBGaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5FZGl0R3JvdXBPYmplY3RcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwQWRkcmVzc0ZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkluZGljYXRvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9uc1sndHlwZSddID0gJ2luZGljYXRvcnMnOyAvLyBOb3QgbmVlZGVkIHRoaXMgaXMgUGVwSW5kaWNhdG9yc0ZpZWxkLlxuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBJbmRpY2F0b3JzRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuSW50ZXJuYWxQYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWF0cml4RmllbGQoY29udHJvbEZpZWxkLkFwaU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJvd1NwYW4gPSBjb250cm9sRmllbGQuTGF5b3V0LkhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub2JqZWN0SWQgPSBvYmplY3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyZW50SWQgPSBwYXJlbnRJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VhcmNoQ29kZSA9IHNlYXJjaENvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsUGFnZUZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuUmVsYXRlZE9iamVjdHNDYXJkczoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJvd1NwYW4gPSBjb250cm9sRmllbGQuTGF5b3V0LkhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zZWFyY2hDb2RlID0gc2VhcmNoQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYWdlSW5mbyA9IGRhdGFGaWVsZC5VSVBhZ2VJbmZvO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsQ2FydXNlbEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkxpbms6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ2xpbmsnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBMaW5rRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuSW50ZXJuYWxMaW5rOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5CdXR0b246IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsQnV0dG9uRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQXR0YWNobWVudDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zLnR5cGUgPSAnYXR0YWNobWVudCc7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEF0dGFjaG1lbnRGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5TaWduYXR1cmU6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucy50eXBlID0gJ3NpZ25hdHVyZSc7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFNpZ25hdHVyZUZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkltYWdlOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5JbWFnZVVSTDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zLnR5cGUgPSAnaW1hZ2UnO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1lbnVGaWVsZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtZW51RmllbGQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvZXNGaWVsZEhhdmFGbG9hdGluZ0ZpZWxkKGNvbnRyb2xGaWVsZCwgbWVudUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWVudUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmhhc0NhbXBhaWduRmllbGQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2FtcGFpZ25GaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9lc0ZpZWxkSGF2YUZsb2F0aW5nRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2FtcGFpZ25GaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhhc0NhbXBhaWduRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW5kaWNhdG9yc0ZpZWxkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvcnNGaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9lc0ZpZWxkSGF2YUZsb2F0aW5nRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yc0ZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaW5kaWNhdG9yc0ZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEltYWdlRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuSW1hZ2VzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbnMudHlwZSA9ICdpbWFnZXMnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBJbWFnZXNGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5FbWFpbDoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnZW1haWwnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBMaW5rRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuUGhvbmU6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3Bob25lJztcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwTGlua0ZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdkdXJhdGlvbic7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFRleHRib3hGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5EZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5UZXh0Qm94OlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5MaW1pdGVkTGVuZ3RoVGV4dEJveDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuVGV4dEhlYWRlcjpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQ2FsY3VsYXRlZFN0cmluZzpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTWFwRGF0YVN0cmluZzoge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBUZXh0Ym94RmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuVGV4dEFyZWE6IHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwVGV4dGFyZWFGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLlJpY2hUZXh0SFRNTDoge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBSaWNoSHRtbFRleHRhcmVhRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuRGF0ZTpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTGltaXRlZERhdGU6XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkNhbGN1bGF0ZWREYXRlOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5EYXRlQW5kVGltZToge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5EYXRlQW5kVGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2RhdGV0aW1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RhdGUnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBEYXRlRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTnVtYmVySW50ZWdlcjpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQ2FsY3VsYXRlZEludDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTWFwRGF0YUludDoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnaW50JztcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwVGV4dGJveEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLlBlcmNlbnRhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3BlcmNlbnRhZ2UnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBUZXh0Ym94RmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQ3VycmVuY3k6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ2N1cnJlbmN5JztcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwVGV4dGJveEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLk51bWJlclJlYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkNhbGN1bGF0ZWRSZWFsOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5NYXBEYXRhUmVhbDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuU3VtOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5Ub3RhbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3JlYWwnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBUZXh0Ym94RmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQ2FsY3VsYXRlZEJvb2w6IHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwQ2hlY2tib3hGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5Cb29sZWFuVGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnYm9vbGVhblRleHQnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBDaGVja2JveEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkNvbWJvQm94OlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5FbXB0eUNvbWJvQm94OlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5NYXBEYXRhRHJvcERvd246IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucy50eXBlID0gJ3NlbGVjdCc7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFNlbGVjdEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLk11bHRpVGlja0JveDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTXVsdGlUaWNrQm94VG9Db21ib0JveDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuRW1wdHlNdWx0aVRpY2tCb3g6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ211bHRpJztcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwU2VsZWN0RmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuR3VpZFJlZmVyZW5jZVR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3JlZmVyZW5jZSc7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVmZXJlbmNlT2JqZWN0VHlwZSA9IGRhdGFGaWVsZC5SZWZlcmVuY2VPYmplY3RUeXBlO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlZmVyZW5jZU9iamVjdFN1YlR5cGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkLlJlZmVyZW5jZU9iamVjdFN1YlR5cGU7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVmZXJlbmNlT2JqZWN0SW50ZXJuYWxUeXBlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5SZWZlcmVuY2VPYmplY3RJbnRlcm5hbFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsQnV0dG9uRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTGlzdE9mT2JqZWN0czoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnbGlzdG9mb2JqZWN0cyc7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsQnV0dG9uRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuU2VwYXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFNlcGFyYXRvckZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkltYWdlczogcmV0dXJuIHRoYXQuZmllbGQodmFsdWUpO1xuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLk51bWJlclJlYWxRdWFudGl0eVNlbGVjdG9yOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5OdW1iZXJJbnRlZ2VyUXVhbnRpdHlTZWxlY3Rvcjoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAncXMnO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFsbG93RGVjaW1hbCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhRmllbGQuRmllbGRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgRklFTERfVFlQRS5OdW1iZXJSZWFsUXVhbnRpdHlTZWxlY3RvcjtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ub3RpZmljYXRpb25JbmZvID0gZGF0YUZpZWxkLk5vdGlmaWNhdGlvbkluZm87XG5cbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLlBhY2thZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3BhY2thZ2VCdXR0b24nO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm5vdGlmaWNhdGlvbkluZm8gPSBkYXRhRmllbGQuTm90aWZpY2F0aW9uSW5mbztcblxuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY3VzdG9tRmllbGQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubGFiZWwgPSBjb250cm9sRmllbGQuQXBpTmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCEhISc7XG4gICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBTZXBhcmF0b3JGaWVsZChvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXN0b21GaWVsZDtcbiAgICB9XG5cbiAgICBnZXRGaWVsZEZvcm1hdHRlZFZhbHVlKGZpZWxkOiBQZXBGaWVsZEJhc2UpOiBzdHJpbmcge1xuICAgICAgICBsZXQgZmllbGRGb3JtYXR0ZWRWYWx1ZSA9IGZpZWxkLmZvcm1hdHRlZFZhbHVlO1xuXG4gICAgICAgIC8vIEZpeCBmb3IgdGhlIGN1c3RvbSBjaGVjayBib3ggY29tcG9uZW50LlxuICAgICAgICBpZiAoZmllbGQuY29udHJvbFR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGZpZWxkRm9ybWF0dGVkVmFsdWUgPSBmaWVsZEZvcm1hdHRlZFZhbHVlID09PSAndHJ1ZSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXggZm9yIHRoZSBjdXN0b20gYnV0dG9uIGNvbXBvbmVudC5cbiAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2xUeXBlID09PSAnYnV0dG9uJykge1xuICAgICAgICAgICAgZmllbGRGb3JtYXR0ZWRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgZmllbGRGb3JtYXR0ZWRWYWx1ZSA9PT0gJzAnID8gJycgOiBmaWVsZEZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkRm9ybWF0dGVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b0NvbnRyb2xHcm91cChmaWVsZHM6IFBlcEZpZWxkQmFzZVtdKTogRm9ybUdyb3VwIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB7fTtcbiAgICAgICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmdyb3VwRmllbGRzICYmIGZpZWxkLmdyb3VwRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViR3JvdXAgPSB7fTtcblxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5ncm91cEZpZWxkcy5mb3JFYWNoKChncm91cEZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZC5tYW5kYXRvcnkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmllbGQucmVhZG9ubHkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdyb3VwW2dyb3VwRmllbGQua2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWFkb25seSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRpc2FibGVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZC5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdyb3VwW2dyb3VwRmllbGQua2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWFkb25seSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRpc2FibGVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZC5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZmllbGQua2V5XSA9IHRoaXMuZmIuZ3JvdXAoc3ViR3JvdXApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBmaWVsZC5nZXRWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkRm9ybWF0dGVkVmFsdWUgPSB0aGlzLmdldEZpZWxkRm9ybWF0dGVkVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwW2ZpZWxkLmtleV0gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkRm9ybWF0dGVkVmFsdWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMsXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXNlRmllbGQodWlDb250cm9sRmllbGQ6IFVJQ29udHJvbEZpZWxkLCBkYXRhRmllbGQ6IGFueSkge1xuICAgICAgICBjb25zdCBjdXN0b21GaWVsZDogUGVwRmllbGRCYXNlID0gdGhpcy5jb252ZXJ0VG9DdXN0b21GaWVsZChcbiAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLFxuICAgICAgICAgICAgZGF0YUZpZWxkLFxuICAgICAgICAgICAgdGhpcy5jYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgdGhpcy5tZW51RGF0YUZpZWxkLFxuICAgICAgICAgICAgdGhpcy5oYXNDYW1wYWlnbkRhdGFGaWVsZCxcbiAgICAgICAgICAgIHRoaXMuaW5kaWNhdG9yc0RhdGFGaWVsZCxcbiAgICAgICAgICAgIHRoaXMub2JqZWN0SWQsXG4gICAgICAgICAgICB0aGlzLnBhcmVudElkLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb2RlXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGN1c3RvbUZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93Rm9ybVZhbGlkYXRpb25NZXNzYWdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWVsZHM6IFBlcEZpZWxkQmFzZVtdID0gdGhpcy5maWVsZHM7XG4gICAgICAgIGxldCBlbXB0eU1hbmRhdG9yeUZpZWxkc01zZyA9ICcnO1xuICAgICAgICBsZXQgbm90VmFsaWRGaWVsZHNNc2cgPSAnJztcblxuICAgICAgICAvLyBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vICAgICBsZXQgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uZ2V0KGZpZWxkLmtleSk7XG5cbiAgICAgICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIC8vIE1hbmRhdG9yeSBpcyBlbXB0eS5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLm1hbmRhdG9yeSAmJlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbC52YWx1ZS50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZW1wdHlNYW5kYXRvcnlGaWVsZHNNc2cgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGk+PHNtYWxsPicgKyBmaWVsZC5sYWJlbCArICc8L3NtYWxsPjwvbGk+JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaWVsZC5kaXNhYmxlZCAmJiAhZm9ybUNvbnRyb2wudmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm90VmFsaWRGaWVsZHNNc2cgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGk+PHNtYWxsPicgKyBmaWVsZC5sYWJlbCArICc8L3NtYWxsPjwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGhlIGhlYWRlciBtZXNzYWdlIG9mIHRoZSBlbXB0eSBtYW5kYXRvcnkgZmllbGRzXG4gICAgICAgIGlmIChlbXB0eU1hbmRhdG9yeUZpZWxkc01zZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbXB0eU1hbmRhdG9yeUZpZWxkc01zZyA9XG4gICAgICAgICAgICAgICAgJzxkaXY+JyArXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTUVTU0FHRVMuRVJST1JfTUFOREFUT1JZX0ZJRUxEUycpICtcbiAgICAgICAgICAgICAgICBcIjwvZGl2Pjx1bCBzdHlsZT0ncGFkZGluZzogMCAyMHB4Oyc+XCIgK1xuICAgICAgICAgICAgICAgIGVtcHR5TWFuZGF0b3J5RmllbGRzTXNnICtcbiAgICAgICAgICAgICAgICAnPC91bD48YnIvPic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGhlIGhlYWRlciBtZXNzYWdlIG9mIHRoZSBlbXB0eSBtYW5kYXRvcnkgZmllbGRzXG4gICAgICAgIGlmIChub3RWYWxpZEZpZWxkc01zZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBub3RWYWxpZEZpZWxkc01zZyA9XG4gICAgICAgICAgICAgICAgJzxkaXY+JyArXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTUVTU0FHRVMuRVJST1JfSU5WQUxJRF9GSUVMRFMnKSArXG4gICAgICAgICAgICAgICAgXCI8L2Rpdj48dWwgc3R5bGU9J3BhZGRpbmc6IDAgMjBweDsnPlwiICtcbiAgICAgICAgICAgICAgICBub3RWYWxpZEZpZWxkc01zZyArXG4gICAgICAgICAgICAgICAgJzwvdWw+JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTUVTU0FHRVMuVElUTEVfTk9USUNFJyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgUGVwRGlhbG9nRGF0YSh7XG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGVtcHR5TWFuZGF0b3J5RmllbGRzTXNnICsgbm90VmFsaWRGaWVsZHNNc2csXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkRlZmF1bHREaWFsb2coZGF0YSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcbiAgICAgICAgLy8gY29udmVydCByZW0gdG8gcGl4ZWxcbiAgICAgICAgY29uc3QgUmVtVG9QaXhlbCA9IDE2O1xuICAgICAgICB0aGlzLmZvcm1HdXR0ZXJTaXplID1cbiAgICAgICAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9TUEFDRUlOR19LRVlcbiAgICAgICAgICAgICkgKiBSZW1Ub1BpeGVsO1xuICAgICAgICB0aGlzLmNhcmRHdXR0ZXJTaXplID1cbiAgICAgICAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9TUEFDRUlOR19LRVlcbiAgICAgICAgICAgICkgKiBSZW1Ub1BpeGVsO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5kYXRhKTsgLy8gY2hlY2sgZm9yIGNoYW5nZXNcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0ZvckNoYW5nZXMgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xuICAgICAgICAvLyBpZiAoY2hhbmdlcy5kYXRhICYmIGNoYW5nZXMuZGF0YS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgLy8gICAgIC8vIExvYWQgY2hhbmdlc1xuICAgICAgICAvLyAgICAgaWYgKCF0aGlzLnNob3VsZFJlbG9hZEZvcm0gJiYgY2hhbmdlcy5kYXRhLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmRhdGEgPSBjaGFuZ2VzLmRhdGEuY3VycmVudFZhbHVlO1xuICAgICAgICAvLyAgICAgICAgIHRoaXMudXBkYXRlRm9ybSgpO1xuICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLl9zaG91bGRSZWxvYWRGb3JtID0gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGlmICh0aGlzLnNob3VsZFJlbG9hZEZvcm0gfHwgIWNoYW5nZXM/LmRhdGE/LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuX3Nob3VsZFJlbG9hZEZvcm0gPSBmYWxzZTtcbiAgICAgICAgLy8gICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICAgICAgLy8gICAgIHRoaXMuY2hlY2tGb3JDaGFuZ2VzID0gbmV3IERhdGUoKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIGdldFVpQ29udHJvbEZpZWxkcygpOiBBcnJheTxVSUNvbnRyb2xGaWVsZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQgPyB0aGlzLmxheW91dC5Db250cm9sRmllbGRzIDogW107XG4gICAgfVxuXG4gICAgaW5pdEZpZWxkc1N0cnVjdHVyZShmaWVsZHM6IFBlcEZpZWxkQmFzZVtdLCBtYXhSb3c6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldFRoZW1lVmFyaWFibGVzKCk7XG5cbiAgICAgICAgLy8gU2V0IGZvcm0gcm93IGhlaWdodC5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0VHlwZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBjYXJkRmllbGRIZWlnaHQgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfRklFTERfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0ID0gY2FyZEZpZWxkSGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm93RmllbGRIZWlnaHQgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0ZpZWxkVGl0bGVIZWlnaHQgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfVElUTEVfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0ID0gcm93RmllbGRIZWlnaHQgKyByb3dGaWVsZFRpdGxlSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBmaWVsZHMgc3RydWN0dXJlICh0aGUgZmllbGRzIG11c3QgYmUgc29ydGVkISEhKS5cbiAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBJbml0IHRoZSBsYXlvdXQuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5sYXlvdXRUeXBlID09PSAnZm9ybScgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFR5cGUgPT09ICd0YWJsZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkc1N1YmplY3QubmV4dChmaWVsZHMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBtYXhSb3c7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd3NbaV0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGZpZWxkID0gZmllbGRzW2ldXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dzW2ZpZWxkLnJvd10ucHVzaChmaWVsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2VzZmllbGRFeGlzdEluOiBib29sZWFuW11bXSA9IG5ldyBBcnJheShtYXhSb3cpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2VzZmllbGRFeGlzdEluLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5baV0gPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRvZXNmaWVsZEV4aXN0SW5baV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5baV1bal0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFJ1biBpbiBzcXVlcmUgKHJvdyAtIGNvbHNwYW4sIGNvbCAtIHJvd3NwYW4pIGFuZCBwdXQgdHJ1ZSB3aGVyZSBpdCBzaG91bGQuXG4gICAgICAgICAgICAgICAgLy8gZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgY3VycmVudEZpZWxkID0gZmllbGRzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRGaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZC5yb3dTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm93OiBudW1iZXIgPSBjdXJyZW50RmllbGQucm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA8IGN1cnJlbnRGaWVsZC5yb3cgKyBjdXJyZW50RmllbGQucm93U3BhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3crK1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZC5jb2xTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbDogbnVtYmVyID0gY3VycmVudEZpZWxkLmNvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQuY29sICsgY3VycmVudEZpZWxkLmNvbFNwYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wrK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzZmllbGRFeGlzdEluLmxlbmd0aCA+IHJvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bMF0ubGVuZ3RoID4gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzZmllbGRFeGlzdEluW3Jvd11bY29sXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzZmllbGRFeGlzdEluLmxlbmd0aCA+IHJvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc2ZpZWxkRXhpc3RJblswXS5sZW5ndGggPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLmNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bcm93XVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQuY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50RmllbGQuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbDogbnVtYmVyID0gY3VycmVudEZpZWxkLmNvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPCBjdXJyZW50RmllbGQuY29sICsgY3VycmVudEZpZWxkLmNvbFNwYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sKytcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc2ZpZWxkRXhpc3RJbi5sZW5ndGggPiBjdXJyZW50RmllbGQucm93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bMF0ubGVuZ3RoID4gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bY3VycmVudEZpZWxkLnJvd11bY29sXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW4ubGVuZ3RoID4gY3VycmVudEZpZWxkLnJvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bMF0ubGVuZ3RoID4gY3VycmVudEZpZWxkLmNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc2ZpZWxkRXhpc3RJbltjdXJyZW50RmllbGQucm93XVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLmNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGVtcHR5IGZpZWxkcyB3aGVyZSBkb2VzZmllbGRFeGlzdEluIGlzIGZhbHNlIChGb3IgdGhlIG1kLWdyaWQtbGlzdCBVSSBDb21wb25lbnQpLlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9lc2ZpZWxkRXhpc3RJbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRvZXNmaWVsZEV4aXN0SW5baV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9lc2ZpZWxkRXhpc3RJbltpXVtqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBlbXB0eSBmaWVsZCBhbmQgYWRkIGl0IHRvIHRoZSBmaWVsZHMgbGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBlcFBsYWNlaG9sZGVyRmllbGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBpICsgJ18nICsgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gU29ydCB0aGUgZmllbGRzIGFnYWluLlxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzLnNvcnQoKGYxLCBmMikgPT5cbiAgICAgICAgICAgICAgICAgICAgZjEucm93ID4gZjIucm93XG4gICAgICAgICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZjEucm93IDwgZjIucm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZjEuY29sID4gZjIuY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGYxLmNvbCA8IGYyLmNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWVsZHNTdWJqZWN0Lm5leHQoZmllbGRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEZvcm0oaXNGb3JVcGRhdGUgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBsZXQgYWxsRmllbGRzQXJlUmVhZE9ubHkgPSB0cnVlO1xuXG4gICAgICAgIGlmICghaXNGb3JVcGRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50RmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAvLyBBZGQgYWxsIGZpZWxkcyBleGNlcHQgJ2ludGVybmFsUGFnZScgKGZvciBjaGlsZHJlbikuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZC5jb250cm9sVHlwZSAhPT0gJ2ludGVybmFsUGFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2goY3VycmVudEZpZWxkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGaWVsZC5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgICAgICBhbGxGaWVsZHNBcmVSZWFkT25seSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5mb3JtID0gdGhpcy50b0NvbnRyb2xHcm91cChmaWVsZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGZvcm0gdmFsdWVzIGlmIGNoYW5nZWQgYnkgY2FsY3VsYXRlZCBmaWVsZHMuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGaWVsZCA9IHRoaXMuZmllbGRzW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZC5jb250cm9sVHlwZSA9PT0gJ2ludGVybmFsQ2FydXNlbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSGFjayB0byBvdmVycmlkZSAodXBkYXRlKSB0aGUgZmllbGQuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpQ29udHJvbEZpZWxkID0gdGhpcy5nZXRVaUNvbnRyb2xGaWVsZHMoKS5maW5kKGNmID0+IGNmLkFwaU5hbWUgPT09IGN1cnJlbnRGaWVsZC5rZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhRmllbGQgPSB0aGlzLmRhdGEuRmllbGRzLmZpbmQoZGYgPT4gZGYuQXBpTmFtZSA9PT0gY3VycmVudEZpZWxkLmtleSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCA9IHRoaXMuY3JlYXRlQmFzZUZpZWxkKHVpQ29udHJvbEZpZWxkLCBkYXRhRmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWVsZHNTdWJqZWN0LnZhbHVlW2ldID0gY3VycmVudEZpZWxkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEZpZWxkLmNvbnRyb2xUeXBlICE9PSAnaW50ZXJuYWxQYWdlJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQuZ3JvdXBGaWVsZHMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5ncm91cEZpZWxkcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBjdXJyZW50RmllbGQuZ3JvdXBGaWVsZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgY3VycmVudEdyb3VwRmllbGQgPSBjdXJyZW50RmllbGQuZ3JvdXBGaWVsZHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRHcm91cEZpZWxkIG9mIGN1cnJlbnRGaWVsZC5ncm91cEZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkRm9ybWF0dGVkVmFsdWUgPSB0aGlzLmdldEZpZWxkRm9ybWF0dGVkVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLnVwZGF0ZUZvcm1GaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRGb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkRm9ybWF0dGVkVmFsdWUgPSB0aGlzLmdldEZpZWxkRm9ybWF0dGVkVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5mb3JtLmNvbnRyb2xzW2N1cnJlbnRGaWVsZC5rZXldLnNldFZhbHVlKGZpZWxkRm9ybWF0dGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS51cGRhdGVGb3JtRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEZvcm1hdHRlZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50RmllbGQucmVhZG9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsRmllbGRzQXJlUmVhZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNGb3JtVmFsaWQgPSB0aGlzLmZvcm0/LnZhbGlkO1xuXG4gICAgICAgIC8vIENoYW5nZSB2YWxpZGF0aW9uIHRvIHRydWUgaWYgYWxsIGZpZWxkcyBhcmUgcmVhZCBvbmx5LlxuICAgICAgICBpZiAoIWlzRm9ybVZhbGlkICYmIGFsbEZpZWxkc0FyZVJlYWRPbmx5KSB7XG4gICAgICAgICAgICBpc0Zvcm1WYWxpZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uRm9ybVZhbGlkYXRpb25DaGFuZ2VkKGlzRm9ybVZhbGlkKTtcblxuICAgICAgICAvLyBTZXQgaXQgdG8gZmFsc2UgdG8gZW5hYmxlIGFsbCBmaWVsZHMuXG4gICAgICAgIGlmICh0aGlzLmlzSW50ZXJuYWwgJiYgdGhpcy5pc0xvY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5pc0xvY2tlZCA9IGZhbHNlOyBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRGb3JtKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5GaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkczogUGVwRmllbGRCYXNlW10gPSB0aGlzLmNvbnZlcnRDdXN0b21GaWVsZHMoXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRVaUNvbnRyb2xGaWVsZHMoKSxcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuRmllbGRzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBtYXhSb3cgPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAuLi5maWVsZHMubWFwKChmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmLnJvdyArIGYucm93U3BhbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIC4uLmZpZWxkcy5tYXAoKGYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYuY29sICsgZi5jb2xTcGFuO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmluaXRGaWVsZHNTdHJ1Y3R1cmUoZmllbGRzLCBtYXhSb3cpO1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUZpZWxkKFxuICAgICAgICBjdXN0b21GaWVsZDogUGVwRmllbGRCYXNlLFxuICAgICAgICB1cGRhdGVkRmllbGQ6IE9iamVjdHNEYXRhUm93Q2VsbFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XG4gICAgICAgICAgICBkaXNhYmxlZDogIXVwZGF0ZWRGaWVsZC5FbmFibGVkIHx8ICF0aGlzLmNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICByZWFkb25seTogIXVwZGF0ZWRGaWVsZC5FbmFibGVkIHx8ICF0aGlzLmNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICB2aXNpYmxlOiB1cGRhdGVkRmllbGQuVmlzaWJsZSxcbiAgICAgICAgICAgIHZhbHVlOiB1cGRhdGVkRmllbGQuVmFsdWUsXG4gICAgICAgICAgICBhZGRpdGlvbmFsVmFsdWU6IHVwZGF0ZWRGaWVsZC5BZGRpdGlvbmFsVmFsdWUsXG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogdXBkYXRlZEZpZWxkLkZvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgICAgdGV4dENvbG9yOiB1cGRhdGVkRmllbGQuVGV4dENvbG9yLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChjdXN0b21GaWVsZCBpbnN0YW5jZW9mIFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZCkge1xuICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uSW5mbyA9IHVwZGF0ZWRGaWVsZC5Ob3RpZmljYXRpb25JbmZvO1xuICAgICAgICAgICAgb3B0aW9ucy5ub3RpZmljYXRpb25JbmZvID0gbm90aWZpY2F0aW9uSW5mbztcblxuICAgICAgICAgICAgLy8gQ2hhbmdlIHR5cGUgaWYgaXQncyBjaGFuZ2UgKG9ubHkgZm9yIGFsbG93RGVjaW1hbCkuXG4gICAgICAgICAgICBsZXQgYWxsb3dEZWNpbWFsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodXBkYXRlZEZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsUXVhbnRpdHlTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbCB8fFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbEZvck1hdHJpeFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgYWxsb3dEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dEZWNpbWFsID0gYWxsb3dEZWNpbWFsO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tRmllbGQgaW5zdGFuY2VvZiBQZXBTZWxlY3RGaWVsZCkge1xuICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zID0gdGhpcy5jb252ZXJ0T3B0aW9uYWxWYWx1ZXMoXG4gICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkLk9wdGlvbmFsVmFsdWVzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMub3B0aW9ucyB8fCBvcHRpb25zLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLmZvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGN1c3RvbUZpZWxkIGluc3RhbmNlb2YgUGVwSW50ZXJuYWxDYXJ1c2VsRmllbGQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFnZUluZm8gPSB1cGRhdGVkRmllbGQuVUlQYWdlSW5mbztcbiAgICAgICAgfVxuXG4gICAgICAgIGN1c3RvbUZpZWxkLnVwZGF0ZShvcHRpb25zKTtcbiAgICB9XG5cbiAgICB1cGRhdGVGb3JtKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5GaWVsZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3VycmVudEZpZWxkIG9mIHRoaXMuZGF0YS5GaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21GaWVsZCA9IHRoaXMuZmllbGRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGYpID0+IGYua2V5ID09PSBjdXJyZW50RmllbGQuQXBpTmFtZVxuICAgICAgICAgICAgICAgIClbMF07XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGFsbCBmaWVsZHMgZXhjZXB0ICdpbnRlcm5hbFBhZ2UnIHR5cGUgKGZvciBjaGlsZHJlbikuXG4gICAgICAgICAgICAgICAgaWYgKGN1c3RvbUZpZWxkICYmIGN1c3RvbUZpZWxkLmNvbnRyb2xUeXBlICE9PSAnaW50ZXJuYWxQYWdlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkKGN1c3RvbUZpZWxkLCBjdXJyZW50RmllbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZ3JvdXAgZmllbGRzLlxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZC5jb250cm9sVHlwZSA9PT0gJ2FkZHJlc3MnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQuR3JvdXBGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgKGxldCBqID0gMDsgaiA8IGN1cnJlbnRGaWVsZC5Hcm91cEZpZWxkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IGN1cnJlbnRHcm91cEZpZWxkID0gY3VycmVudEZpZWxkLkdyb3VwRmllbGRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50R3JvdXBGaWVsZCBvZiBjdXJyZW50RmllbGQuR3JvdXBGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBGaWVsZC5FbmFibGVkID0gIWN1cnJlbnRGaWVsZC5FbmFibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50R3JvdXBGaWVsZC5FbmFibGVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tR3JvdXBGaWVsZCA9IGN1c3RvbUZpZWxkLmdyb3VwRmllbGRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGYpID0+IGYua2V5ID09PSBjdXJyZW50R3JvdXBGaWVsZC5BcGlOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21Hcm91cEZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBSZWxvYWRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaG91bGRSZWxvYWRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBvblN1Ym1pdCgpIHtcbiAgICAvLyAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgIC8vICAgICAgICAgdGhpcy5wYXlMb2FkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLnZhbHVlKTtcbiAgICAvLyAgICAgICAgIC8vdGhpcy5zdWJtaXR0ZWQuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtQ29udHJvbEJ5SWQoa2V5OiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgICAgICAgbGV0IGZvcm1Db250cm9sID0gbnVsbDtcblxuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkLmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5ncm91cEZpZWxkcyAmJiBmaWVsZC5ncm91cEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZ3JvdXBGaWVsZHMuZm9yRWFjaCgoZ3JvdXBGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBGaWVsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmtleSArICcuJyArIGdyb3VwRmllbGQua2V5XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmb3JtQ29udHJvbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNwZWNpYWxGaWVsZHMoXG4gICAgICAgIGNvbnRyb2xGaWVsZHM6IEFycmF5PGFueT4sXG4gICAgICAgIGRhdGFGaWVsZHM6IEFycmF5PGFueT5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgLy8gbGV0IGNmO1xuICAgICAgICAvLyBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29udHJvbEZpZWxkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgLy8gICAgIGNmID0gY29udHJvbEZpZWxkc1tpbmRleF07XG4gICAgICAgIGZvciAoY29uc3QgY2Ygb2YgY29udHJvbEZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGNmLkFwaU5hbWUgPT09ICdPYmplY3RNZW51Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubWVudUZpZWxkID0gY2Y7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNmLkFwaU5hbWUgPT09ICdJdGVtSGFzQWN0aXZlQ2FtcGFpZ24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDYW1wYWlnbkZpZWxkID0gY2Y7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNmLkFwaU5hbWUgPT09ICdJdGVtSW5kaWNhdG9yc1dpdGhvdXRDYW1wYWlnbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGljYXRvcnNGaWVsZCA9IGNmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGV0IGRmO1xuICAgICAgICAvLyBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YUZpZWxkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgLy8gICAgIGRmID0gZGF0YUZpZWxkc1tpbmRleF07XG4gICAgICAgIGZvciAoY29uc3QgZGYgb2YgZGF0YUZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGRmLkFwaU5hbWUgPT09ICdPYmplY3RNZW51Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubWVudURhdGFGaWVsZCA9IGRmO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkZi5BcGlOYW1lID09PSAnSXRlbUhhc0FjdGl2ZUNhbXBhaWduJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2FtcGFpZ25EYXRhRmllbGQgPSBkZjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGYuQXBpTmFtZSA9PT0gJ0l0ZW1JbmRpY2F0b3JzV2l0aG91dENhbXBhaWduJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNhdG9yc0RhdGFGaWVsZCA9IGRmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWVudUZpZWxkICYmIHRoaXMubWVudURhdGFGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5tZW51RGF0YUZpZWxkLkxheW91dCA9IHRoaXMubWVudUZpZWxkLkxheW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc0NhbXBhaWduRmllbGQgJiYgdGhpcy5oYXNDYW1wYWlnbkRhdGFGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5oYXNDYW1wYWlnbkRhdGFGaWVsZC5MYXlvdXQgPSB0aGlzLmhhc0NhbXBhaWduRmllbGQuTGF5b3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5kaWNhdG9yc0ZpZWxkICYmIHRoaXMuaW5kaWNhdG9yc0RhdGFGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5pbmRpY2F0b3JzRGF0YUZpZWxkLkxheW91dCA9IHRoaXMuaW5kaWNhdG9yc0ZpZWxkLkxheW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIG1lbnUgaXMgZmxvYXRpbmcgb24gb3RoZXIgZmllbGQuXG4gICAgICAgIC8vIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb250cm9sRmllbGRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAvLyAgICAgY2YgPSBjb250cm9sRmllbGRzW2luZGV4XTtcbiAgICAgICAgZm9yIChjb25zdCBjZiBvZiBjb250cm9sRmllbGRzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tZW51RmllbGQgJiYgY2YuQXBpTmFtZSAhPT0gJ09iamVjdE1lbnUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNNZW51RmxvYXRpbmdPbk90aGVyRmllbGQgPSB0aGlzLmRvZXNGaWVsZEhhdmFGbG9hdGluZ0ZpZWxkKFxuICAgICAgICAgICAgICAgICAgICBjZixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51RmllbGRcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzTWVudUZsb2F0aW5nT25PdGhlckZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnZlcnRDdXN0b21GaWVsZHMoXG4gICAgICAgIGNvbnRyb2xGaWVsZHM6IEFycmF5PGFueT4sXG4gICAgICAgIGRhdGFGaWVsZHM6IEFycmF5PGFueT5cbiAgICApOiBQZXBGaWVsZEJhc2VbXSB7XG4gICAgICAgIGlmICh0aGlzLmxheW91dFR5cGUgIT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3BlY2lhbEZpZWxkcyhjb250cm9sRmllbGRzLCBkYXRhRmllbGRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEhBQ0s6IGNvbnZlcnQgdG8gY2VudGVyIGFsaWdubWVudCBpZiB0YWJsZSB2aWV3ICYgc3BlY2lhbCBmaWVsZHMpXG4gICAgICAgICAgICBjb250cm9sRmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuQXBpTmFtZSA9PT0gJ1VuaXRzUXVhbnRpdHknIHx8XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkFwaU5hbWUgPT09ICdRdWFudGl0eVNlbGVjdG9yJyB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5BcGlOYW1lID09PSAnT2JqZWN0TWVudScgfHxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLkltYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5JbWFnZVVSTCB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuSW5kaWNhdG9ycyB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuQm9vbGVhbiB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuQ2FsY3VsYXRlZEJvb2wgfHxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLlNpZ25hdHVyZSB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5GaWVsZFR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgIEZJRUxEX1RZUEUuTnVtYmVySW50ZWdlclF1YW50aXR5U2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlclJlYWxRdWFudGl0eVNlbGVjdG9yIHx8XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5QYWNrYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJJbnRlZ2VyRm9yTWF0cml4IHx8XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsRm9yTWF0cml4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkxheW91dC5YQWxpZ25tZW50ID0gWF9BTElHTk1FTlRfVFlQRS5DZW50ZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSEFDSzogYWxpZ24gdGhlIHJlc3Qgb2YgdGhlIGZpZWxkcyBieSB0aGUgY3VsdHVyZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gZmllbGQuTGF5b3V0LlhBbGlnbm1lbnQgPSB0aGlzLmxheW91dFNlcnZpY2UuaXNSdGwoKSA/IFhfQUxJR05NRU5UX1RZUEUuUmlnaHQgOiBYX0FMSUdOTUVOVF9UWVBFLkxlZnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWVsZHM6IFBlcEZpZWxkQmFzZVtdID0gW107XG5cbiAgICAgICAgY29udHJvbEZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFGaWVsZCA9IGRhdGFGaWVsZHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChkZikgPT4gZGYuQXBpTmFtZSA9PT0gZmllbGQuQXBpTmFtZVxuICAgICAgICAgICAgKVswXTtcblxuICAgICAgICAgICAgaWYgKCFkYXRhRmllbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGN1cnJlbnQgdmlldyBpcyBub3QgdGFibGUgdmlldyBhbmQgdGhvc2UgZmllbGRzIGFyZSBzcGVjaWFsLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0VHlwZSAhPT0gJ3RhYmxlJyAmJlxuICAgICAgICAgICAgICAgICgodGhpcy5oYXNNZW51RmxvYXRpbmdPbk90aGVyRmllbGQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51RmllbGQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51RmllbGQuQXBpTmFtZSA9PT0gZmllbGQuQXBpTmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW5kaWNhdG9yc0ZpZWxkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGljYXRvcnNGaWVsZC5BcGlOYW1lID09PSBmaWVsZC5BcGlOYW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5oYXNDYW1wYWlnbkZpZWxkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0NhbXBhaWduRmllbGQuQXBpTmFtZSA9PT0gZmllbGQuQXBpTmFtZSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNldCB0eXBlIHRvIGxpbmtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiB0aGlzLmZpcnN0RmllbGRBc0xpbmspIHtcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQuRmllbGRUeXBlID0gRklFTERfVFlQRS5JbnRlcm5hbExpbms7XG4gICAgICAgICAgICAgICAgLy8gZGF0YUZpZWxkLlZhbHVlID0gdGhpcy5nZXRJbnRlcm5hbExpbmtIcmVmKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5BcGlOYW1lID09PSAnT2JqZWN0TWVudScpIHtcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gSEFDSyA6IFVudGlsIFwiRW5hYmxlZFwiIHJldHVybnMgZnJvbSB0aGUgc2VydmVyLCB3ZSBzZXQgUGVwTWVudSB0byBiZVxuICAgICAgICAgICAgICAgIC8vICAgICAgICBEaXNhYmxlZCBpbiBjYXJ0IG9uIHJlZ3VsYXIgaXRlbXMgYW5kIG5vdCBjYW1waWduIGl0ZW1zLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VzdG9tRmllbGQ6IFBlcEZpZWxkQmFzZSA9IHRoaXMuY3JlYXRlQmFzZUZpZWxkKGZpZWxkLCBkYXRhRmllbGQpO1xuICAgICAgICAgICAgZmllbGRzLnB1c2goY3VzdG9tRmllbGQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmllbGRzLnNvcnQoKGYxLCBmMikgPT5cbiAgICAgICAgICAgIGYxLnJvdyA+IGYyLnJvd1xuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogZjEucm93IDwgZjIucm93XG4gICAgICAgICAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgICAgICAgICAgOiBmMS5jb2wgPiBmMi5jb2xcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBmMS5jb2wgPCBmMi5jb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25Gb3JtVmFsaWRhdGlvbkNoYW5nZWQoZm9ybVZhbGlkYXRpb25DaGFuZ2U6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uQ2hhbmdlLmVtaXQoZm9ybVZhbGlkYXRpb25DaGFuZ2UpO1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2VkKGV2ZW50OiBJUGVwRmllbGRWYWx1ZUNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Gb3JtVmFsaWRhdGlvbkNoYW5nZWQodGhpcy5mb3JtLnZhbGlkKTtcblxuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2xCeUlkKGV2ZW50LmtleSk7XG5cbiAgICAgICAgY29uc3QgaXNWYWxpZCA9IGZvcm1Db250cm9sID8gZm9ybUNvbnRyb2wudmFsaWQgOiB0cnVlO1xuICAgICAgICAvLyBjb25zdCBpc1ZhbGlkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgLy8gU2V0IGl0IHRvIGZhbHNlIHRvIGRpc2FibGUgYWxsIGZpZWxkcy5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW50ZXJuYWwgJiYgdGhpcy5sYXlvdXRUeXBlID09PSAnZm9ybScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGZpZWxkIHZhbHVlLlxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgoZikgPT4gZi5rZXkgPT09IGV2ZW50LmtleSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLmZvcm1hdHRlZFZhbHVlID0gY3VycmVudEZpZWxkLnZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuZGF0YS5VSUQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB1aU9iamVjdEtleTogdGhpcy5kYXRhLktleSxcbiAgICAgICAgICAgICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZXZlbnQudmFsdWUsXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IGV2ZW50LmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNsaWNrKGZpZWxkQ2xpY2tFdmVudDogSVBlcEZpZWxkQ2xpY2tFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjbGlja2VkVWlDb250cm9sRmllbGQgPSB0aGlzLmRhdGEuRmllbGRzLmZpbHRlcihcbiAgICAgICAgICAgIChmKSA9PiBmLkFwaU5hbWUgPT09IGZpZWxkQ2xpY2tFdmVudC5rZXlcbiAgICAgICAgKVswXTtcbiAgICAgICAgY29uc3QgaWRUeXBlID0gdGhpcy5kYXRhLlR5cGUgPyB0aGlzLmRhdGEuVHlwZS50b1N0cmluZygpIDogJyc7XG5cbiAgICAgICAgaWYgKGNsaWNrZWRVaUNvbnRyb2xGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZENsaWNrLmVtaXQoe1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmRhdGEuVUlELnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgdWlPYmplY3RLZXk6IHRoaXMuZGF0YS5LZXksXG4gICAgICAgICAgICAgICAga2V5OiBmaWVsZENsaWNrRXZlbnQua2V5LFxuICAgICAgICAgICAgICAgIGlkVHlwZSxcbiAgICAgICAgICAgICAgICB3aGljaDogZmllbGRDbGlja0V2ZW50LmV2ZW50V2hpY2gsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkQ2xpY2tFdmVudC52YWx1ZSxcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogZmllbGRDbGlja0V2ZW50LmNvbnRyb2xUeXBlLFxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZTogY2xpY2tlZFVpQ29udHJvbEZpZWxkLkZpZWxkVHlwZSxcbiAgICAgICAgICAgICAgICBvdGhlckRhdGE6IGZpZWxkQ2xpY2tFdmVudC5vdGhlckRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZvciBvdGhlciBhcGkgbmFtZXMgKGxpa2UgZW50ZXIgY2hpbGRyZW4gZXRjKS5cbiAgICAgICAgICAgIHRoaXMuZmllbGRDbGljay5lbWl0KHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5kYXRhLlVJRC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHVpT2JqZWN0S2V5OiB0aGlzLmRhdGEuS2V5LFxuICAgICAgICAgICAgICAgIGtleTogZmllbGRDbGlja0V2ZW50LmtleSxcbiAgICAgICAgICAgICAgICBpZFR5cGUsXG4gICAgICAgICAgICAgICAgd2hpY2g6IGZpZWxkQ2xpY2tFdmVudC5ldmVudFdoaWNoLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZENsaWNrRXZlbnQudmFsdWUsXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IGZpZWxkQ2xpY2tFdmVudC5jb250cm9sVHlwZSxcbiAgICAgICAgICAgICAgICBvdGhlckRhdGE6IGZpZWxkQ2xpY2tFdmVudC5vdGhlckRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZXZlbnQgaXMgZm9yIGhhbmRsZSB0aGUgaW50ZXJuYWwgcGFnZSBldmVudHMuXG4gICAgb25JbnRlcm5hbEZvcm1GaWVsZENsaWNrZWQoaW50ZXJuYWxGb3JtRmllbGRDbGljazogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxGb3JtRmllbGRDbGljay5lbWl0KGludGVybmFsRm9ybUZpZWxkQ2xpY2spO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZXZlbnQgaXMgZm9yIGhhbmRsZSB0aGUgaW50ZXJuYWwgcGFnZSBldmVudHMuXG4gICAgb25JbnRlcm5hbEZvcm1GaWVsZENoYW5nZWQoaW50ZXJuYWxGb3JtRmllbGRDaGFuZ2U6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmludGVybmFsRm9ybUZpZWxkQ2hhbmdlLmVtaXQoaW50ZXJuYWxGb3JtRmllbGRDaGFuZ2UpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZXZlbnQgaXMgZm9yIGhhbmRsZSB0aGUgcmVsYXRlZCBpdGVtcyBjaGFuZ2UgZXZlbnRzLlxuICAgIG9uRm9ybVZhbHVlQ2hhbmdlZChldmVudDogSVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGV2ZW50IGlzIGZvciBoYW5kbGUgdGhlIHJlbGF0ZWQgaXRlbXMgY2hhbmdlIGV2ZW50cy5cbiAgICBvbkZvcm1GaWVsZENsaWNrKGV2ZW50OiBJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpZWxkQ2xpY2suZW1pdChldmVudCk7XG4gICAgfVxufVxuIiwiPGZpZWxkc2V0ICpuZ0lmPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiIGNsYXNzPVwicGVwLWZvcm1cIlxuICAgIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtY29sb3InOiBsYXlvdXRUeXBlID09ICdjYXJkJyAmJiBkYXRhPy5CYWNrZ3JvdW5kQ29sb3IgfVwiPlxuICAgIDwhLS0gTmV3IEZvcm0gLS0+XG4gICAgPG1hdC1ncmlkLWxpc3QgKm5nSWY9XCJsYXlvdXRUeXBlID09ICdmb3JtJ1wiIFtjb2xzXT1cImNvbHVtbnNcIiBbcm93SGVpZ2h0XT1cInJvd0hlaWdodCArICdyZW0nXCJcbiAgICAgICAgW2d1dHRlclNpemVdPVwiZm9ybUd1dHRlclNpemVcIj5cbiAgICAgICAgPG1hdC1ncmlkLXRpbGUgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkcyQgfCBhc3luY1wiIFtyb3dzcGFuXT1cImZpZWxkLnJvd1NwYW5cIiBbY29sc3Bhbl09XCJmaWVsZC5jb2xTcGFuXCI+XG4gICAgICAgICAgICA8cGVwLWZpZWxkLWdlbmVyYXRvciAqbmdJZj1cImZpZWxkLmNvbnRyb2xUeXBlICE9ICdwbGFjZWhvbGRlcidcIiBbZm9ybV09XCJmb3JtXCIgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrRm9yQ2hhbmdlc109XCJjaGVja0ZvckNoYW5nZXNcIiBbdWlkXT1cImRhdGE/LlVJRFwiIFtmaWVsZF09XCJmaWVsZFwiIFtzaG93VGl0bGVdPVwic2hvd1RpdGxlXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIChlbGVtZW50Q2xpY2spPVwib25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoaW50ZXJuYWxGb3JtRmllbGRDbGljayk9XCJvbkludGVybmFsRm9ybUZpZWxkQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoaW50ZXJuYWxGb3JtRmllbGRDaGFuZ2UpPVwib25JbnRlcm5hbEZvcm1GaWVsZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvcm1WYWx1ZUNoYW5nZSk9XCJvbkZvcm1WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIChmb3JtRmllbGRDbGljayk9XCJvbkZvcm1GaWVsZENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChmb3JtVmFsaWRhdGlvbkNoYW5nZSk9XCJvbkZvcm1WYWxpZGF0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L3BlcC1maWVsZC1nZW5lcmF0b3I+XG4gICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICA8L21hdC1ncmlkLWxpc3Q+XG5cbiAgICA8IS0tIFRodW1ibmFpbHMgLS0+XG4gICAgPG1hdC1ncmlkLWxpc3QgKm5nSWY9XCJsYXlvdXRUeXBlID09ICdjYXJkJ1wiIFtjb2xzXT1cImNvbHVtbnNcIiBbcm93SGVpZ2h0XT1cInJvd0hlaWdodCArICdyZW0nXCJcbiAgICAgICAgW2d1dHRlclNpemVdPVwiY2FyZEd1dHRlclNpemVcIiBjbGFzcz1cImNhcmQtc3BhY2luZ1wiPlxuICAgICAgICA8bWF0LWdyaWQtdGlsZSAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzJCB8IGFzeW5jXCIgW3Jvd3NwYW5dPVwiZmllbGQucm93U3BhblwiIFtjb2xzcGFuXT1cImZpZWxkLmNvbFNwYW5cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyBvdmVyZmxvdzogZmllbGQudHlwZSA9PSAncXMnID8gJ3Vuc2V0JyA6ICdoaWRkZW4nIH1cIj5cbiAgICAgICAgICAgIDxwZXAtZmllbGQtZ2VuZXJhdG9yICpuZ0lmPVwiZmllbGQuY29udHJvbFR5cGUgIT0gJ3BsYWNlaG9sZGVyJ1wiIFtmb3JtXT1cImZvcm1cIiBbbGF5b3V0VHlwZV09XCJsYXlvdXRUeXBlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdsb2NrLWV2ZW50cyc6IGxvY2tFdmVudHMgfVwiIFtpc0FjdGl2ZV09XCJpc0FjdGl2ZVwiIFtjaGVja0ZvckNoYW5nZXNdPVwiY2hlY2tGb3JDaGFuZ2VzXCJcbiAgICAgICAgICAgICAgICBbdWlkXT1cImRhdGE/LlVJRFwiIFtmaWVsZF09XCJmaWVsZFwiIFtzaG93VGl0bGVdPVwic2hvd1RpdGxlXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChlbGVtZW50Q2xpY2spPVwib25DbGljaygkZXZlbnQpXCIgKGludGVybmFsRm9ybUZpZWxkQ2xpY2spPVwib25JbnRlcm5hbEZvcm1GaWVsZENsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGludGVybmFsRm9ybUZpZWxkQ2hhbmdlKT1cIm9uSW50ZXJuYWxGb3JtRmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChmb3JtVmFsdWVDaGFuZ2UpPVwib25Gb3JtVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZm9ybUZpZWxkQ2xpY2spPVwib25Gb3JtRmllbGRDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L3BlcC1maWVsZC1nZW5lcmF0b3I+XG4gICAgICAgIDwvbWF0LWdyaWQtdGlsZT5cbiAgICA8L21hdC1ncmlkLWxpc3Q+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0VHlwZSA9PSAndGFibGUnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JlcG9ydDsgdGhlbiByZXBvcnRCbG9jazsgZWxzZSBub3RSZXBvcnRCbG9ja1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlcG9ydEJsb2NrPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlcG9ydFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vdFJlcG9ydEJsb2NrPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzJCB8IGFzeW5jOyBsZXQgaiA9IGluZGV4XCIgY2xhc3M9XCJwdWxsLWxlZnQgZmxpcCB0YWJsZS1jZWxsIFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiWyd0ZXh0LWFsaWduLScgKyBmaWVsZC54QWxpZ25tZW50XVwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiAobGF5b3V0Py5Db250cm9sRmllbGRzKVtqXT8uY2FsY0NvbHVtbldpZHRoU3RyaW5nfVwiPlxuICAgICAgICAgICAgICAgIDxwZXAtZmllbGQtZ2VuZXJhdG9yICpuZ0lmPVwiZmllbGQuY29udHJvbFR5cGUgIT0gJ3BsYWNlaG9sZGVyJ1wiIFtjaGVja0ZvckNoYW5nZXNdPVwiY2hlY2tGb3JDaGFuZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgW3VpZF09XCJkYXRhPy5VSURcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiIFtzaG93VGl0bGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAoZWxlbWVudENsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvcm1WYWx1ZUNoYW5nZSk9XCJvbkZvcm1WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIChmb3JtRmllbGRDbGljayk9XCJvbkZvcm1GaWVsZENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbaXNBY3RpdmVdPVwiaXNBY3RpdmVcIj5cbiAgICAgICAgICAgICAgICA8L3BlcC1maWVsZC1nZW5lcmF0b3I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0tLS0tLSBGb3IgdGVzdGluZyAtLS0tLS0tLS0tLS1cbiAgICB7eyBmb3JtLnZhbHVlIHwganNvbiB9fVxuICAgIHt7IGZvcm0udmFsaWQgfX1cbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuPC9maWVsZHNldD5cblxuPG5nLXRlbXBsYXRlICNyZXBvcnQ+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzJCB8IGFzeW5jOyBsZXQgaiA9IGluZGV4XCIgY2xhc3M9XCJwdWxsLWxlZnQgZmxpcCBwZXAtcmVwb3J0LWZpZWxkc1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IChsYXlvdXQ/LkNvbnRyb2xGaWVsZHMpW2pdPy5jYWxjQ29sdW1uV2lkdGhTdHJpbmcgfVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIlsndGV4dC1hbGlnbi0nICsgZmllbGQueEFsaWdubWVudF1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmllbGQuY29udHJvbFR5cGVcIj5cbiAgICAgICAgICAgIDxwZXAtaW1hZ2UgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIiBbdWlkXT1cImRhdGE/LlVJRFwiIFtmb3JtXT1cImZvcm1cIiBba2V5XT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJmaWVsZC5mb3JtYXR0ZWRWYWx1ZVwiIFtzcmNMYXJnZV09XCJmaWVsZC52YWx1ZVwiIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIiBbbGFiZWxdPVwiZmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICAgIFttYW5kYXRvcnldPVwiZmllbGQubWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImZpZWxkLmRpc2FibGVkXCIgW3JlYWRvbmx5XT1cImZpZWxkLnJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICBbeEFsaWdubWVudF09XCJmaWVsZC54QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwiZmllbGQucm93U3BhblwiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIlxuICAgICAgICAgICAgICAgIChlbGVtZW50Q2xpY2spPVwib25DbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L3BlcC1pbWFnZT5cblxuICAgICAgICAgICAgPHBlcC1zaWduYXR1cmUgKm5nU3dpdGNoQ2FzZT1cIidzaWduYXR1cmUnXCIgW2Zvcm1dPVwiZm9ybVwiIFtrZXldPVwiZmllbGQua2V5XCIgW3NyY109XCJmaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCIgW21hbmRhdG9yeV09XCJmaWVsZC5tYW5kYXRvcnlcIiBbZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJmaWVsZC5yZWFkb25seVwiIFt4QWxpZ25tZW50XT1cImZpZWxkLnhBbGlnbm1lbnRcIiBbcm93U3Bhbl09XCJmaWVsZC5yb3dTcGFuXCJcbiAgICAgICAgICAgICAgICBbbGF5b3V0VHlwZV09XCJsYXlvdXRUeXBlXCI+XG4gICAgICAgICAgICA8L3BlcC1zaWduYXR1cmU+XG5cbiAgICAgICAgICAgIDxwZXAtY2hlY2tib3ggKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIiBbZm9ybV09XCJmb3JtXCIgW2tleV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCIoZmllbGQudmFsdWUgfCBsb3dlcmNhc2UpID09ICd0cnVlJyB8fCBmaWVsZC52YWx1ZSA9PSAnMScgPyB0cnVlIDogZmFsc2VcIiBbbGFiZWxdPVwiZmllbGQubGFiZWxcIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImZpZWxkLnR5cGVcIiBbbWFuZGF0b3J5XT1cImZpZWxkLm1hbmRhdG9yeVwiIFtkaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImZpZWxkLnJlYWRvbmx5XCIgW3hBbGlnbm1lbnRdPVwiZmllbGQueEFsaWdubWVudFwiIFtyb3dTcGFuXT1cImZpZWxkLnJvd1NwYW5cIlxuICAgICAgICAgICAgICAgIFthZGRpdGlvbmFsVmFsdWVdPVwiZmllbGQuYWRkaXRpb25hbFZhbHVlXCIgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiPlxuICAgICAgICAgICAgPC9wZXAtY2hlY2tib3g+XG5cbiAgICAgICAgICAgIDxwZXAtZGF0ZSAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCIgW2Zvcm1dPVwiZm9ybVwiIFtrZXldPVwiZmllbGQua2V5XCIgW3ZhbHVlXT1cImZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0dGVkVmFsdWVdPVwiZmllbGQuZm9ybWF0dGVkVmFsdWVcIiBbbGFiZWxdPVwiZmllbGQubGFiZWxcIiBbdHlwZV09XCJmaWVsZC50eXBlXCJcbiAgICAgICAgICAgICAgICBbbWFuZGF0b3J5XT1cImZpZWxkLm1hbmRhdG9yeVwiIFtkaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZFwiIFtyZWFkb25seV09XCJmaWVsZC5yZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCJmaWVsZC50ZXh0Q29sb3JcIiBbeEFsaWdubWVudF09XCJmaWVsZC54QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwiZmllbGQucm93U3BhblwiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlXT1cImZpZWxkLm1pblZhbHVlXCIgW21heFZhbHVlXT1cImZpZWxkLm1heFZhbHVlXCIgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiPlxuICAgICAgICAgICAgPC9wZXAtZGF0ZT5cblxuICAgICAgICAgICAgPHBlcC1pbnRlcm5hbC1idXR0b24gKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCIgW2Zvcm1dPVwiZm9ybVwiIFtrZXldPVwiZmllbGQua2V5XCIgW3ZhbHVlXT1cImZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0dGVkVmFsdWVdPVwiZmllbGQuZm9ybWF0dGVkVmFsdWVcIiBbbGFiZWxdPVwiZmllbGQubGFiZWxcIiBbdHlwZV09XCJmaWVsZC50eXBlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwiZmllbGQucmVhZG9ubHlcIiBbeEFsaWdubWVudF09XCJmaWVsZC54QWxpZ25tZW50XCJcbiAgICAgICAgICAgICAgICBbbGF5b3V0VHlwZV09XCJsYXlvdXRUeXBlXCIgKGVsZW1lbnRDbGljayk9XCJvbkNsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvcGVwLWludGVybmFsLWJ1dHRvbj5cblxuICAgICAgICAgICAgPHBlcC10ZXh0YXJlYSAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiIFtmb3JtXT1cImZvcm1cIiBba2V5XT1cImZpZWxkLmtleVwiIFt2YWx1ZV09XCJmaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCIgW21hbmRhdG9yeV09XCJmaWVsZC5tYW5kYXRvcnlcIiBbZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJmaWVsZC5yZWFkb25seVwiIFttYXhGaWVsZENoYXJhY3RlcnNdPVwiZmllbGQubWF4RmllbGRDaGFyYWN0ZXJzXCJcbiAgICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cImZpZWxkLnRleHRDb2xvclwiIFt4QWxpZ25tZW50XT1cImZpZWxkLnhBbGlnbm1lbnRcIiBbcm93U3Bhbl09XCJmaWVsZC5yb3dTcGFuXCJcbiAgICAgICAgICAgICAgICBbbGF5b3V0VHlwZV09XCJsYXlvdXRUeXBlXCI+XG4gICAgICAgICAgICA8L3BlcC10ZXh0YXJlYT5cblxuICAgICAgICAgICAgPHBlcC1xdWFudGl0eS1zZWxlY3RvciAqbmdTd2l0Y2hDYXNlPVwiJ3FzJ1wiIFtpZF09XCJmaWVsZC5rZXlcIiBbZm9ybV09XCJmb3JtXCIgW2tleV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmaWVsZC52YWx1ZVwiIFtmb3JtYXR0ZWRWYWx1ZV09XCJmaWVsZC5mb3JtYXR0ZWRWYWx1ZVwiIFtsYWJlbF09XCJmaWVsZC5sYWJlbFwiIFt0eXBlXT1cImZpZWxkLnR5cGVcIlxuICAgICAgICAgICAgICAgIFttYW5kYXRvcnldPVwiZmllbGQubWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImZpZWxkLmRpc2FibGVkXCIgW3JlYWRvbmx5XT1cImZpZWxkLnJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cImZpZWxkLnRleHRDb2xvclwiIFt4QWxpZ25tZW50XT1cImZpZWxkLnhBbGlnbm1lbnRcIiBbcm93U3Bhbl09XCJmaWVsZC5yb3dTcGFuXCJcbiAgICAgICAgICAgICAgICBbbGF5b3V0VHlwZV09XCJsYXlvdXRUeXBlXCIgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZWxlbWVudENsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9wZXAtcXVhbnRpdHktc2VsZWN0b3I+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQuZm9ybWF0dGVkVmFsdWU/Lmxlbmd0aCA+IDA7IHRoZW4gbm90RW1wdHlCbG9jazsgZWxzZSBlbXB0eUJsb2NrXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RFbXB0eUJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkLmNvbnRyb2xUeXBlID09PSAnYXR0YWNobWVudCcgfHwgZmllbGQudHlwZSA9PT0gJ2xpbmsnOyB0aGVuIGxpbmtCbG9jazsgZWxzZSBub3RMaW5rQmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGlua0Jsb2NrPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2lkXT1cImZpZWxkLmtleVwiIGNsYXNzPVwiY29sb3ItbGluayBib2R5LXNtIHBlcC1yZXBvcnQtaW5wdXQgcmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQuZm9ybWF0dGVkVmFsdWUgIT0gbnVsbFwiIHRpdGxlPVwie3sgZmllbGQuZm9ybWF0dGVkVmFsdWUgfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBmaWVsZC52YWx1ZSB9fVwiPnt7IGZpZWxkLmZvcm1hdHRlZFZhbHVlIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdExpbmtCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpZF09XCJmaWVsZC5rZXlcIiBjbGFzcz1cImJvZHktc20gcGVwLXJlcG9ydC1pbnB1dCByZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBmaWVsZC5mb3JtYXR0ZWRWYWx1ZSB9fVwiIFtuZ1N0eWxlXT1cInsgY29sb3I6IGZpZWxkLnRleHRDb2xvciB9XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5mb3JtYXR0ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
1227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHVCQUF1QixFQUd2QixLQUFLLEVBRUwsTUFBTSxFQUNOLFlBQVksR0FHZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0gsVUFBVSxHQUViLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUVILGFBQWEsR0FDaEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBSUgsVUFBVSxFQUNWLHVCQUF1QixFQU92QixlQUFlLEVBQ2YsY0FBYyxFQUNkLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixjQUFjLEVBQ2QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBR25CLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsMEJBQTBCLEVBQzFCLDRCQUE0QixHQUcvQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTbkQsTUFBTSxPQUFPLGdCQUFnQjtJQW1GekIsaUNBQWlDO0lBQ2pDLHlCQUF5QjtJQUV6QixZQUNZLGFBQStCLEVBQy9CLG9CQUE2QyxFQUM3QyxhQUErQixFQUMvQixFQUFlLEVBQ3ZCLE9BQXdCLEVBQ2hCLFNBQTJC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Qyx1QkFBNEI7UUFDbkQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsa0JBQWtCLENBQUMsS0FBb0M7UUFDbkQsZ0NBQWdDO0lBQ3BDLENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsZ0JBQWdCLENBQUMsS0FBOEI7UUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7NkdBdjhDUSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixvcUJDekU3QixpOFJBcUljOzJGRDVERCxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0ksVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNO21RQUd0QyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFJRixJQUFJO3NCQURQLEtBQUs7Z0JBaUJGLFVBQVU7c0JBRGIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFHTixXQUFXO3NCQURWLE1BQU07Z0JBR1Asb0JBQW9CO3NCQURuQixNQUFNO2dCQUlQLFVBQVU7c0JBRFQsTUFBTTtnQkFHRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBJbnB1dCxcbiAgICBLZXlWYWx1ZURpZmZlcnMsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPbkNoYW5nZXMsXG4gICAgRG9DaGVjaywgICAgXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBGb3JtR3JvdXAsXG4gICAgRm9ybUJ1aWxkZXIsXG4gICAgVmFsaWRhdG9ycyxcbiAgICBBYnN0cmFjdENvbnRyb2wsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gICAgUGVwRGlhbG9nU2VydmljZSxcbiAgICBQZXBEaWFsb2dEYXRhLFxufSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYi9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgICBJUGVwRmllbGRWYWx1ZUNoYW5nZUV2ZW50LFxuICAgIElQZXBGaWVsZENsaWNrRXZlbnQsXG4gICAgUGVwTGF5b3V0VHlwZSxcbiAgICBGSUVMRF9UWVBFLFxuICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgIFBlcExheW91dFNlcnZpY2UsXG4gICAgVUlDb250cm9sLFxuICAgIFVJQ29udHJvbEZpZWxkLFxuICAgIE9iamVjdHNEYXRhUm93LFxuICAgIE9iamVjdHNEYXRhUm93Q2VsbCxcbiAgICBQZXBGaWVsZEJhc2UsXG4gICAgUGVwVGV4dGJveEZpZWxkLFxuICAgIFBlcFNlbGVjdEZpZWxkLFxuICAgIFBlcEludGVybmFsTWVudUZpZWxkLFxuICAgIFBlcFF1YW50aXR5U2VsZWN0b3JGaWVsZCxcbiAgICBQZXBBZGRyZXNzRmllbGQsXG4gICAgUGVwSW5kaWNhdG9yc0ZpZWxkLFxuICAgIFBlcEludGVybmFsUGFnZUZpZWxkLFxuICAgIFBlcEludGVybmFsQ2FydXNlbEZpZWxkLFxuICAgIFBlcEludGVybmFsQnV0dG9uRmllbGQsXG4gICAgUGVwQXR0YWNobWVudEZpZWxkLFxuICAgIFBlcFNpZ25hdHVyZUZpZWxkLFxuICAgIFBlcEltYWdlRmllbGQsXG4gICAgUGVwSW1hZ2VzRmllbGQsXG4gICAgUGVwTGlua0ZpZWxkLFxuICAgIFBlcFRleHRhcmVhRmllbGQsXG4gICAgUGVwUmljaEh0bWxUZXh0YXJlYUZpZWxkLFxuICAgIFBlcERhdGVGaWVsZCxcbiAgICBQZXBDaGVja2JveEZpZWxkLFxuICAgIFBlcFNlcGFyYXRvckZpZWxkLFxuICAgIFBlcFBsYWNlaG9sZGVyRmllbGQsXG4gICAgUGVwSG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICBQZXBWZXJ0aWNhbEFsaWdubWVudCxcbiAgICBYX0FMSUdOTUVOVF9UWVBFLFxuICAgIFlfQUxJR05NRU5UX1RZUEUsXG4gICAgREVGQVVMVF9WRVJUSUNBTF9BTElHTk1FTlQsXG4gICAgREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVCxcbiAgICBLZXlWYWx1ZVBhaXIsXG4gICAgSVBlcE9wdGlvbixcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJUGVwRm9ybUZpZWxkVmFsdWVDaGFuZ2VFdmVudCwgSVBlcEZvcm1GaWVsZENsaWNrRXZlbnQgfSBmcm9tICcuL2Zvcm0ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrLCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgaXNJbnRlcm5hbCA9IHRydWU7XG4gICAgQElucHV0KCkgaXNSZXBvcnQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBsYXlvdXQ6IFVJQ29udHJvbDtcbiAgICBASW5wdXQoKSBsb2NrRXZlbnRzID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2FuRWRpdE9iamVjdCA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9kYXRhOiBPYmplY3RzRGF0YVJvdyA9IG51bGw7XG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YSh2YWx1ZTogT2JqZWN0c0RhdGFSb3cpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkUmVsb2FkID0gdGhpcy5zaG91bGRSZWxvYWRGb3JtIHx8ICF0aGlzLl9kYXRhO1xuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHNob3VsZFJlbG9hZCkge1xuICAgICAgICAgICAgdGhpcy5fc2hvdWxkUmVsb2FkRm9ybSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRhdGEoKTogT2JqZWN0c0RhdGFSb3cge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBsb2NrRmllbGRzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNMb2NrZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBpc0FjdGl2ZSA9IGZhbHNlOyAgICBcbiAgICBASW5wdXQoKSBsYXlvdXRUeXBlOiBQZXBMYXlvdXRUeXBlID0gJ2NhcmQnO1xuICAgIC8vIEBJbnB1dCgpIGxpc3RUeXBlID0gJyc7XG4gICAgQElucHV0KCkgb2JqZWN0SWQgPSAnMCc7XG4gICAgQElucHV0KCkgcGFyZW50SWQgPSAnMCc7XG4gICAgQElucHV0KCkgc2VhcmNoQ29kZSA9ICcwJztcbiAgICBASW5wdXQoKSBzaG93VGl0bGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGZpcnN0RmllbGRBc0xpbmsgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjaGVja0ZvckNoYW5nZXM6IGFueSA9IG51bGw7XG5cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEZvcm1GaWVsZFZhbHVlQ2hhbmdlRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpXG4gICAgZm9ybVZhbGlkYXRpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGZpZWxkQ2xpY2s6IEV2ZW50RW1pdHRlcjxJUGVwRm9ybUZpZWxkQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBGb3JtRmllbGRDbGlja0V2ZW50PigpO1xuXG4gICAgQE91dHB1dCgpIGludGVybmFsRm9ybUZpZWxkQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIGludGVybmFsRm9ybUZpZWxkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgaXNMb2NrZWQgPSBmYWxzZTtcbiAgICBmb3JtR3V0dGVyU2l6ZTtcbiAgICBjYXJkR3V0dGVyU2l6ZTtcbiAgICByb3dIZWlnaHQ7XG4gICAgLy8gcHJpdmF0ZSBtYXRyaXhJc0xhc3QgPSBmYWxzZTtcbiAgICAvLyBsYXN0VXBkYXRlZEZpZWxkQXBpTmFtZTogc3RyaW5nID0gJyc7XG4gICAgZm9ybTogRm9ybUdyb3VwO1xuICAgIGRpZmZlcjogYW55O1xuXG4gICAgLy8gcGF5TG9hZCA9ICcnO1xuICAgIHByaXZhdGUgcm93czogQXJyYXk8UGVwRmllbGRCYXNlW10+ID0gW107XG4gICAgZmllbGRzOiBQZXBGaWVsZEJhc2VbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfZmllbGRzU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFBlcEZpZWxkQmFzZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGVwRmllbGRCYXNlW10+KFtdKTtcbiAgICBnZXQgZmllbGRzJCgpOiBPYnNlcnZhYmxlPFBlcEZpZWxkQmFzZVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGNvbHVtbnMgPSAxO1xuXG4gICAgcHJpdmF0ZSBoYXNNZW51RmxvYXRpbmdPbk90aGVyRmllbGQgPSBmYWxzZTtcbiAgICBwcml2YXRlIG1lbnVGaWVsZDogYW55O1xuICAgIHByaXZhdGUgbWVudURhdGFGaWVsZDogYW55O1xuICAgIHByaXZhdGUgaGFzQ2FtcGFpZ25GaWVsZDogYW55O1xuICAgIHByaXZhdGUgaGFzQ2FtcGFpZ25EYXRhRmllbGQ6IGFueTtcbiAgICBwcml2YXRlIGluZGljYXRvcnNGaWVsZDogYW55O1xuICAgIHByaXZhdGUgaW5kaWNhdG9yc0RhdGFGaWVsZDogYW55ID0gbnVsbDtcblxuICAgIHByaXZhdGUgX3Nob3VsZFJlbG9hZEZvcm0gPSBmYWxzZTtcbiAgICBnZXQgc2hvdWxkUmVsb2FkRm9ybSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3VsZFJlbG9hZEZvcm07XG4gICAgfVxuXG4gICAgLy8gZXZlbnRTZXJ2aWNlU3ViOiBTdWJzY3JpcHRpb247XG4gICAgLy8gcHVibGljIGpzb25MaWIgPSBKU09OO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogUGVwRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21pemF0aW9uU2VydmljZTogUGVwQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbGF5b3V0U2VydmljZTogUGVwTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycyxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgLy8gc3RvcmUgdGhlIGluaXRpYWwgdmFsdWUgdG8gY29tcGFyZSB3aXRoXG4gICAgICAgIHRoaXMuZGlmZmVyID0gZGlmZmVycy5maW5kKHt9KS5jcmVhdGUoKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0WEFsaWduVG9Ib3Jpem9udGFsQWxpZ24oXG4gICAgICAgIHhBbGlnbjogWF9BTElHTk1FTlRfVFlQRVxuICAgICk6IFBlcEhvcml6b250YWxBbGlnbm1lbnQge1xuICAgICAgICBsZXQgcmVzID0gREVGQVVMVF9IT1JJWk9OVEFMX0FMSUdOTUVOVDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB4QWxpZ24gPT09IFhfQUxJR05NRU5UX1RZUEUuTm9uZSB8fFxuICAgICAgICAgICAgeEFsaWduID09PSBYX0FMSUdOTUVOVF9UWVBFLkxlZnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXMgPSAnbGVmdCc7XG4gICAgICAgIH0gZWxzZSBpZiAoeEFsaWduID09PSBYX0FMSUdOTUVOVF9UWVBFLlJpZ2h0KSB7XG4gICAgICAgICAgICByZXMgPSAncmlnaHQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gJ2NlbnRlcic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGNvbnZlcnRZQWxpZ25Ub1ZlcnRpY2FsQWxpZ24oXG4gICAgICAgIHlBbGlnbjogWV9BTElHTk1FTlRfVFlQRVxuICAgICk6IFBlcFZlcnRpY2FsQWxpZ25tZW50IHtcbiAgICAgICAgbGV0IHJlcyA9IERFRkFVTFRfVkVSVElDQUxfQUxJR05NRU5UO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHlBbGlnbiA9PT0gWV9BTElHTk1FTlRfVFlQRS5Ob25lIHx8XG4gICAgICAgICAgICB5QWxpZ24gPT09IFlfQUxJR05NRU5UX1RZUEUuVG9wXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmVzID0gJ3RvcCc7XG4gICAgICAgIH0gZWxzZSBpZiAoeUFsaWduID09PSBZX0FMSUdOTUVOVF9UWVBFLkJvdHRvbSkge1xuICAgICAgICAgICAgcmVzID0gJ2JvdHRvbSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSAnbWlkZGxlJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY29udmVydE9wdGlvbmFsVmFsdWVzKFxuICAgICAgICBvcHRpb25hbFZhbHVlczogQXJyYXk8S2V5VmFsdWVQYWlyPHN0cmluZz4+XG4gICAgKTogSVBlcE9wdGlvbltdIHtcbiAgICAgICAgaWYgKG9wdGlvbmFsVmFsdWVzICYmIG9wdGlvbmFsVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25hbFZhbHVlcy5tYXAoKG92KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsga2V5OiBvdi5LZXksIHZhbHVlOiBvdi5WYWx1ZSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb252ZXJ0QWRkcmVzc0ZpZWxkcyhcbiAgICAgICAgY29udHJvbEZpZWxkOiBVSUNvbnRyb2xGaWVsZCxcbiAgICAgICAgYWRkcmVzc0ZpZWxkczogQXJyYXk8T2JqZWN0c0RhdGFSb3dDZWxsPixcbiAgICAgICAgY2FuRWRpdE9iamVjdDogYm9vbGVhblxuICAgICk6IFBlcEZpZWxkQmFzZVtdIHtcbiAgICAgICAgY29uc3QgZmllbGRzOiBQZXBGaWVsZEJhc2VbXSA9IFtdO1xuXG4gICAgICAgIGFkZHJlc3NGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGxldCBjdXN0b21GaWVsZDogUGVwRmllbGRCYXNlO1xuICAgICAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBmaWVsZC5BcGlOYW1lO1xuXG4gICAgICAgICAgICBpZiAoZmllbGQuQXBpTmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3N0cmVldCcpID49IDApIHtcbiAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBUZXh0Ym94RmllbGQoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLkFwaU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBmaWVsZC5BcGlOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICByZWFkb25seTogIWNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhZmllbGQuRW5hYmxlZCB8fCAhY2FuRWRpdE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkLlZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogZmllbGQuRm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICAgICAgICAgICAgY29sOiAwLFxuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiAyLFxuICAgICAgICAgICAgICAgICAgICB4QWxpZ25tZW50OiB0aGlzLmNvbnZlcnRYQWxpZ25Ub0hvcml6b250YWxBbGlnbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWEFsaWdubWVudFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB5QWxpZ25tZW50OiB0aGlzLmNvbnZlcnRZQWxpZ25Ub1ZlcnRpY2FsQWxpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sRmllbGQuTGF5b3V0LllBbGlnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLkFwaU5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjaXR5JykgPj0gMCkge1xuICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFRleHRib3hGaWVsZCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogZmllbGQuQXBpTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGZpZWxkLkFwaU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiAhY2FuRWRpdE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICFmaWVsZC5FbmFibGVkIHx8ICFjYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGQuVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiBmaWVsZC5Gb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgICAgICAgICAgICBjb2w6IDIsXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIHhBbGlnbm1lbnQ6IHRoaXMuY29udmVydFhBbGlnblRvSG9yaXpvbnRhbEFsaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEZpZWxkLkxheW91dC5YQWxpZ25tZW50XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHlBbGlnbm1lbnQ6IHRoaXMuY29udmVydFlBbGlnblRvVmVydGljYWxBbGlnbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWUFsaWdubWVudFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuQXBpTmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3N0YXRlJykgPj0gMCkge1xuICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFNlbGVjdEZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5BcGlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZmllbGQuQXBpTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY29udmVydE9wdGlvbmFsVmFsdWVzKGZpZWxkLk9wdGlvbmFsVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICFjYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWZpZWxkLkVuYWJsZWQgfHwgIWNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZC5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IGZpZWxkLkZvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbDogMCxcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgICAgICAgICAgeEFsaWdubWVudDogdGhpcy5jb252ZXJ0WEFsaWduVG9Ib3Jpem9udGFsQWxpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sRmllbGQuTGF5b3V0LlhBbGlnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgeUFsaWdubWVudDogdGhpcy5jb252ZXJ0WUFsaWduVG9WZXJ0aWNhbEFsaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEZpZWxkLkxheW91dC5ZQWxpZ25tZW50XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAyLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5BcGlOYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignemlwY29kZScpID49IDApIHtcbiAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBUZXh0Ym94RmllbGQoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGZpZWxkLkFwaU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBmaWVsZC5BcGlOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICByZWFkb25seTogIWNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhZmllbGQuRW5hYmxlZCB8fCAhY2FuRWRpdE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkLlZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogZmllbGQuRm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICAgICAgICAgICAgY29sOiAxLFxuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICAgICAgICAgICAgICB4QWxpZ25tZW50OiB0aGlzLmNvbnZlcnRYQWxpZ25Ub0hvcml6b250YWxBbGlnbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWEFsaWdubWVudFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB5QWxpZ25tZW50OiB0aGlzLmNvbnZlcnRZQWxpZ25Ub1ZlcnRpY2FsQWxpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sRmllbGQuTGF5b3V0LllBbGlnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLkFwaU5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjb3VudHJ5JykgPj0gMCkge1xuICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFNlbGVjdEZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZC5BcGlOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZmllbGQuQXBpTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY29udmVydE9wdGlvbmFsVmFsdWVzKGZpZWxkLk9wdGlvbmFsVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICFjYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWZpZWxkLkVuYWJsZWQgfHwgIWNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZC5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IGZpZWxkLkZvcm1hdHRlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbDogMixcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgICAgICAgICAgeEFsaWdubWVudDogdGhpcy5jb252ZXJ0WEFsaWduVG9Ib3Jpem9udGFsQWxpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sRmllbGQuTGF5b3V0LlhBbGlnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgeUFsaWdubWVudDogdGhpcy5jb252ZXJ0WUFsaWduVG9WZXJ0aWNhbEFsaWduKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEZpZWxkLkxheW91dC5ZQWxpZ25tZW50XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiA0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmaWVsZHMucHVzaChjdXN0b21GaWVsZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmaWVsZHMuc29ydCgobjEsIG4yKSA9PlxuICAgICAgICAgICAgbjEub3JkZXIgPiBuMi5vcmRlciA/IDEgOiBuMS5vcmRlciA8IG4yLm9yZGVyID8gLTEgOiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaXNNYXRyaXhGaWVsZChhcGlOYW1lVG9DaGVjazogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhcGlOYW1lVG9DaGVjay5pbmRleE9mKCdNYXRyaXgnKSA+PSAwO1xuICAgIH1cblxuICAgIGRvZXNGaWVsZEhhdmFGbG9hdGluZ0ZpZWxkKFxuICAgICAgICBjb250cm9sRmllbGQ6IFVJQ29udHJvbEZpZWxkLFxuICAgICAgICBmbG9hdGluZ0ZpZWxkOiBhbnlcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGhhc0Zsb2F0aW5nRmllbGQgPSBmYWxzZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmxvYXRpbmdGaWVsZC5MYXlvdXQuWSA+PSBjb250cm9sRmllbGQuTGF5b3V0LlkgJiZcbiAgICAgICAgICAgIGZsb2F0aW5nRmllbGQuTGF5b3V0LlkgPFxuICAgICAgICAgICAgY29udHJvbEZpZWxkLkxheW91dC5ZICsgY29udHJvbEZpZWxkLkxheW91dC5IZWlnaHQgJiZcbiAgICAgICAgICAgIGZsb2F0aW5nRmllbGQuTGF5b3V0LlggPj0gY29udHJvbEZpZWxkLkxheW91dC5YICYmXG4gICAgICAgICAgICBmbG9hdGluZ0ZpZWxkLkxheW91dC5YIDxcbiAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWCArIGNvbnRyb2xGaWVsZC5MYXlvdXQuV2lkdGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBoYXNGbG9hdGluZ0ZpZWxkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoYXNGbG9hdGluZ0ZpZWxkO1xuICAgIH1cblxuICAgIGdldE9wdGlvbnNGb3JDdXN0b21GaWVsZChcbiAgICAgICAgY29udHJvbEZpZWxkOiBVSUNvbnRyb2xGaWVsZCxcbiAgICAgICAgZGF0YUZpZWxkOiBhbnksXG4gICAgICAgIGNhbkVkaXRPYmplY3Q6IGJvb2xlYW5cbiAgICApOiBhbnkge1xuICAgICAgICBpZiAoIWNvbnRyb2xGaWVsZCB8fCAhZGF0YUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBjb250cm9sRmllbGQuUmVhZE9ubHkgfHwgIWNhbkVkaXRPYmplY3QgPyAnJyA6IGNvbnRyb2xGaWVsZC5UaXRsZTtcblxuICAgICAgICBsZXQgZmllbGRQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAga2V5OiBjb250cm9sRmllbGQuQXBpTmFtZSxcbiAgICAgICAgICAgIGxhYmVsOiBjb250cm9sRmllbGQuVGl0bGUsXG4gICAgICAgICAgICBhY2Nlc3Nvcnk6IGRhdGFGaWVsZC5BY2Nlc3NvcnksXG4gICAgICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgICAgIHJlYWRvbmx5OiBjb250cm9sRmllbGQuUmVhZE9ubHkgfHwgIWNhbkVkaXRPYmplY3QsXG4gICAgICAgICAgICBkaXNhYmxlZDogIWRhdGFGaWVsZC5FbmFibGVkIHx8ICFjYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgaGlkZGVuOiBjb250cm9sRmllbGQuSGlkZGVuLFxuICAgICAgICAgICAgbWFuZGF0b3J5OiBjb250cm9sRmllbGQuTWFuZGF0b3J5LFxuICAgICAgICAgICAgdmFsdWU6IGRhdGFGaWVsZC5WYWx1ZSxcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiBkYXRhRmllbGQuRm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICBhZGRpdGlvbmFsVmFsdWU6IGRhdGFGaWVsZC5BZGRpdGlvbmFsVmFsdWUsXG4gICAgICAgICAgICByb3c6IGNvbnRyb2xGaWVsZC5MYXlvdXQuWSxcbiAgICAgICAgICAgIHJvd1NwYW46IGNvbnRyb2xGaWVsZC5MYXlvdXQuSGVpZ2h0LFxuICAgICAgICAgICAgY29sOiBjb250cm9sRmllbGQuTGF5b3V0LlgsXG4gICAgICAgICAgICBjb2xTcGFuOiBjb250cm9sRmllbGQuTGF5b3V0LldpZHRoLFxuICAgICAgICAgICAgeEFsaWdubWVudDogdGhpcy5jb252ZXJ0WEFsaWduVG9Ib3Jpem9udGFsQWxpZ24oXG4gICAgICAgICAgICAgICAgY29udHJvbEZpZWxkLkxheW91dC5YQWxpZ25tZW50XG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgeUFsaWdubWVudDogdGhpcy5jb252ZXJ0WUFsaWduVG9WZXJ0aWNhbEFsaWduKFxuICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5MYXlvdXQuWUFsaWdubWVudFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY29udmVydE9wdGlvbmFsVmFsdWVzKGRhdGFGaWVsZC5PcHRpb25hbFZhbHVlcyksXG4gICAgICAgICAgICBncm91cEZpZWxkczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbWF4RmllbGRDaGFyYWN0ZXJzOiBjb250cm9sRmllbGQuTWF4RmllbGRDaGFyYWN0ZXJzLFxuICAgICAgICAgICAgbWluVmFsdWU6IGNvbnRyb2xGaWVsZC5NaW5WYWx1ZSxcbiAgICAgICAgICAgIG1heFZhbHVlOiBjb250cm9sRmllbGQuTWF4VmFsdWUsXG4gICAgICAgICAgICAvLyBoYXNNZW51OiBoYXNNZW51LFxuICAgICAgICAgICAgLy8gaGFzQ2FtcGFpZ246IGhhc0NhbXBhaWduLFxuICAgICAgICAgICAgLy8gaGFzSW5kaWNhdG9yczogaGFzSW5kaWNhdG9ycyxcbiAgICAgICAgICAgIHRleHRDb2xvcjogZGF0YUZpZWxkLlRleHRDb2xvcixcbiAgICAgICAgICAgIHZpc2libGU6IGRhdGFGaWVsZC5WaXNpYmxlLFxuICAgICAgICAgICAgZGlnaXRzTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6IGRhdGFGaWVsZC5EaWdpdHNOdW1iZXJBZnRlckRlY2ltYWxQb2ludCxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZGF0YUZpZWxkLkFkZGl0aW9uYWxQcm9wcykge1xuICAgICAgICAgICAgZmllbGRQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIC4uLmZpZWxkUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAuLi5kYXRhRmllbGQuQWRkaXRpb25hbFByb3BzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkUHJvcGVydGllcztcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9DdXN0b21GaWVsZChcbiAgICAgICAgY29udHJvbEZpZWxkOiBVSUNvbnRyb2xGaWVsZCxcbiAgICAgICAgZGF0YUZpZWxkOiBhbnksXG4gICAgICAgIGNhbkVkaXRPYmplY3Q6IGJvb2xlYW4sXG4gICAgICAgIG1lbnVGaWVsZDogYW55LFxuICAgICAgICBoYXNDYW1wYWlnbkZpZWxkOiBhbnksXG4gICAgICAgIGluZGljYXRvcnNGaWVsZDogYW55LFxuICAgICAgICBvYmplY3RJZDogYW55LFxuICAgICAgICBwYXJlbnRJZDogYW55LFxuICAgICAgICBzZWFyY2hDb2RlOiBhbnlcbiAgICApOiBQZXBGaWVsZEJhc2Uge1xuICAgICAgICBsZXQgY3VzdG9tRmllbGQ6IFBlcEZpZWxkQmFzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uc0ZvckN1c3RvbUZpZWxkKFxuICAgICAgICAgICAgY29udHJvbEZpZWxkLFxuICAgICAgICAgICAgZGF0YUZpZWxkLFxuICAgICAgICAgICAgY2FuRWRpdE9iamVjdFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjb250cm9sRmllbGQuQXBpTmFtZSA9PT0gJ09iamVjdE1lbnUnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnbWVudSc7XG4gICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBJbnRlcm5hbE1lbnVGaWVsZChvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbFF1YW50aXR5U2VsZWN0b3IgfHxcbiAgICAgICAgICAgIGNvbnRyb2xGaWVsZC5GaWVsZFR5cGUgPT09XG4gICAgICAgICAgICBGSUVMRF9UWVBFLk51bWJlckludGVnZXJRdWFudGl0eVNlbGVjdG9yIHx8XG4gICAgICAgICAgICBjb250cm9sRmllbGQuQXBpTmFtZSA9PT0gJ1F1YW50aXR5U2VsZWN0b3InIHx8XG4gICAgICAgICAgICBjb250cm9sRmllbGQuQXBpTmFtZSA9PT0gJ1VuaXRzUXVhbnRpdHknIHx8XG4gICAgICAgICAgICBjb250cm9sRmllbGQuQXBpTmFtZS5pbmRleE9mKCdzaXplXycpID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuSW50ZXJuYWxMaW5rKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuUGFja2FnZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdwYWNrYWdlQnV0dG9uJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsUXVhbnRpdHlTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3FzJztcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFsbG93RGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09XG4gICAgICAgICAgICAgICAgRklFTERfVFlQRS5OdW1iZXJJbnRlZ2VyUXVhbnRpdHlTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVySW50ZWdlclxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3FzJztcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFsbG93RGVjaW1hbCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlckludGVnZXJGb3JNYXRyaXhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdxc0Zvck1hdHJpeCc7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hbGxvd0RlY2ltYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YUZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsRm9yTWF0cml4KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3FzRm9yTWF0cml4JztcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFsbG93RGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMubm90aWZpY2F0aW9uSW5mbyA9IGRhdGFGaWVsZC5Ob3RpZmljYXRpb25JbmZvO1xuICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkKG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSEFDSzogbmVlZCB0byByZW1vdmUgdGhpcy4uXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5JbmRpY2F0b3JzICYmXG4gICAgICAgICAgICAgICAgdGhpcy5pc01hdHJpeEZpZWxkKGRhdGFGaWVsZC5BcGlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkLkZpZWxkVHlwZSA9IEZJRUxEX1RZUEUuSW50ZXJuYWxQYWdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGRhdGFGaWVsZC5GaWVsZFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQWRkcmVzczoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5FZGl0R3JvdXBPYmplY3QgPSBjb250cm9sRmllbGQuUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuRWRpdE9iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ncm91cEZpZWxkcyA9IHRoaXMuY29udmVydEFkZHJlc3NGaWVsZHMoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhRmllbGQuR3JvdXBGaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5FZGl0R3JvdXBPYmplY3RcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwQWRkcmVzc0ZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkluZGljYXRvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9uc1sndHlwZSddID0gJ2luZGljYXRvcnMnOyAvLyBOb3QgbmVlZGVkIHRoaXMgaXMgUGVwSW5kaWNhdG9yc0ZpZWxkLlxuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBJbmRpY2F0b3JzRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuSW50ZXJuYWxQYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWF0cml4RmllbGQoY29udHJvbEZpZWxkLkFwaU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJvd1NwYW4gPSBjb250cm9sRmllbGQuTGF5b3V0LkhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub2JqZWN0SWQgPSBvYmplY3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyZW50SWQgPSBwYXJlbnRJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2VhcmNoQ29kZSA9IHNlYXJjaENvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsUGFnZUZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuUmVsYXRlZE9iamVjdHNDYXJkczoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJvd1NwYW4gPSBjb250cm9sRmllbGQuTGF5b3V0LkhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zZWFyY2hDb2RlID0gc2VhcmNoQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYWdlSW5mbyA9IGRhdGFGaWVsZC5VSVBhZ2VJbmZvO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsQ2FydXNlbEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkxpbms6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ2xpbmsnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBMaW5rRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuSW50ZXJuYWxMaW5rOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5CdXR0b246IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsQnV0dG9uRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQXR0YWNobWVudDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zLnR5cGUgPSAnYXR0YWNobWVudCc7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEF0dGFjaG1lbnRGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5TaWduYXR1cmU6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucy50eXBlID0gJ3NpZ25hdHVyZSc7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFNpZ25hdHVyZUZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkltYWdlOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5JbWFnZVVSTDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zLnR5cGUgPSAnaW1hZ2UnO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1lbnVGaWVsZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtZW51RmllbGQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvZXNGaWVsZEhhdmFGbG9hdGluZ0ZpZWxkKGNvbnRyb2xGaWVsZCwgbWVudUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWVudUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmhhc0NhbXBhaWduRmllbGQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2FtcGFpZ25GaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9lc0ZpZWxkSGF2YUZsb2F0aW5nRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2FtcGFpZ25GaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhhc0NhbXBhaWduRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW5kaWNhdG9yc0ZpZWxkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRvcnNGaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9lc0ZpZWxkSGF2YUZsb2F0aW5nRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yc0ZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaW5kaWNhdG9yc0ZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEltYWdlRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuSW1hZ2VzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbnMudHlwZSA9ICdpbWFnZXMnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBJbWFnZXNGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5FbWFpbDoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnZW1haWwnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBMaW5rRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuUGhvbmU6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3Bob25lJztcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwTGlua0ZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkR1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdkdXJhdGlvbic7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFRleHRib3hGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5EZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5UZXh0Qm94OlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5MaW1pdGVkTGVuZ3RoVGV4dEJveDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuVGV4dEhlYWRlcjpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQ2FsY3VsYXRlZFN0cmluZzpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTWFwRGF0YVN0cmluZzoge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBUZXh0Ym94RmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuVGV4dEFyZWE6IHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwVGV4dGFyZWFGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLlJpY2hUZXh0SFRNTDoge1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBSaWNoSHRtbFRleHRhcmVhRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuRGF0ZTpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTGltaXRlZERhdGU6XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkNhbGN1bGF0ZWREYXRlOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5EYXRlQW5kVGltZToge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5EYXRlQW5kVGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2RhdGV0aW1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RhdGUnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBEYXRlRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTnVtYmVySW50ZWdlcjpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQ2FsY3VsYXRlZEludDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTWFwRGF0YUludDoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnaW50JztcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwVGV4dGJveEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLlBlcmNlbnRhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3BlcmNlbnRhZ2UnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBUZXh0Ym94RmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQ3VycmVuY3k6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ2N1cnJlbmN5JztcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwVGV4dGJveEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLk51bWJlclJlYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkNhbGN1bGF0ZWRSZWFsOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5NYXBEYXRhUmVhbDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuU3VtOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5Ub3RhbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3JlYWwnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBUZXh0Ym94RmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuQ2FsY3VsYXRlZEJvb2w6IHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwQ2hlY2tib3hGaWVsZChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5Cb29sZWFuVGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnYm9vbGVhblRleHQnO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBDaGVja2JveEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkNvbWJvQm94OlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5FbXB0eUNvbWJvQm94OlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5NYXBEYXRhRHJvcERvd246IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucy50eXBlID0gJ3NlbGVjdCc7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFNlbGVjdEZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLk11bHRpVGlja0JveDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTXVsdGlUaWNrQm94VG9Db21ib0JveDpcbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuRW1wdHlNdWx0aVRpY2tCb3g6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ211bHRpJztcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwU2VsZWN0RmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuR3VpZFJlZmVyZW5jZVR5cGU6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3JlZmVyZW5jZSc7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVmZXJlbmNlT2JqZWN0VHlwZSA9IGRhdGFGaWVsZC5SZWZlcmVuY2VPYmplY3RUeXBlO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlZmVyZW5jZU9iamVjdFN1YlR5cGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUZpZWxkLlJlZmVyZW5jZU9iamVjdFN1YlR5cGU7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmVmZXJlbmNlT2JqZWN0SW50ZXJuYWxUeXBlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5SZWZlcmVuY2VPYmplY3RJbnRlcm5hbFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsQnV0dG9uRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuTGlzdE9mT2JqZWN0czoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnbGlzdG9mb2JqZWN0cyc7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcEludGVybmFsQnV0dG9uRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX1RZUEUuU2VwYXJhdG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkID0gbmV3IFBlcFNlcGFyYXRvckZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLkltYWdlczogcmV0dXJuIHRoYXQuZmllbGQodmFsdWUpO1xuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLk51bWJlclJlYWxRdWFudGl0eVNlbGVjdG9yOlxuICAgICAgICAgICAgICAgIGNhc2UgRklFTERfVFlQRS5OdW1iZXJJbnRlZ2VyUXVhbnRpdHlTZWxlY3Rvcjoge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAncXMnO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFsbG93RGVjaW1hbCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhRmllbGQuRmllbGRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgRklFTERfVFlQRS5OdW1iZXJSZWFsUXVhbnRpdHlTZWxlY3RvcjtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ub3RpZmljYXRpb25JbmZvID0gZGF0YUZpZWxkLk5vdGlmaWNhdGlvbkluZm87XG5cbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQgPSBuZXcgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9UWVBFLlBhY2thZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ3BhY2thZ2VCdXR0b24nO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm5vdGlmaWNhdGlvbkluZm8gPSBkYXRhRmllbGQuTm90aWZpY2F0aW9uSW5mbztcblxuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBRdWFudGl0eVNlbGVjdG9yRmllbGQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY3VzdG9tRmllbGQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubGFiZWwgPSBjb250cm9sRmllbGQuQXBpTmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCEhISc7XG4gICAgICAgICAgICBjdXN0b21GaWVsZCA9IG5ldyBQZXBTZXBhcmF0b3JGaWVsZChvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXN0b21GaWVsZDtcbiAgICB9XG5cbiAgICBnZXRGaWVsZEZvcm1hdHRlZFZhbHVlKGZpZWxkOiBQZXBGaWVsZEJhc2UpOiBzdHJpbmcge1xuICAgICAgICBsZXQgZmllbGRGb3JtYXR0ZWRWYWx1ZSA9IGZpZWxkLmZvcm1hdHRlZFZhbHVlO1xuXG4gICAgICAgIC8vIEZpeCBmb3IgdGhlIGN1c3RvbSBjaGVjayBib3ggY29tcG9uZW50LlxuICAgICAgICBpZiAoZmllbGQuY29udHJvbFR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGZpZWxkRm9ybWF0dGVkVmFsdWUgPSBmaWVsZEZvcm1hdHRlZFZhbHVlID09PSAndHJ1ZSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXggZm9yIHRoZSBjdXN0b20gYnV0dG9uIGNvbXBvbmVudC5cbiAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2xUeXBlID09PSAnYnV0dG9uJykge1xuICAgICAgICAgICAgZmllbGRGb3JtYXR0ZWRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgZmllbGRGb3JtYXR0ZWRWYWx1ZSA9PT0gJzAnID8gJycgOiBmaWVsZEZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkRm9ybWF0dGVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b0NvbnRyb2xHcm91cChmaWVsZHM6IFBlcEZpZWxkQmFzZVtdKTogRm9ybUdyb3VwIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB7fTtcbiAgICAgICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmdyb3VwRmllbGRzICYmIGZpZWxkLmdyb3VwRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViR3JvdXAgPSB7fTtcblxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5ncm91cEZpZWxkcy5mb3JFYWNoKChncm91cEZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZC5tYW5kYXRvcnkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmllbGQucmVhZG9ubHkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdyb3VwW2dyb3VwRmllbGQua2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWFkb25seSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRpc2FibGVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZC5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdyb3VwW2dyb3VwRmllbGQua2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwRmllbGQuZm9ybWF0dGVkVmFsdWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWFkb25seSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmRpc2FibGVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBGaWVsZC5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBbZmllbGQua2V5XSA9IHRoaXMuZmIuZ3JvdXAoc3ViR3JvdXApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBmaWVsZC5nZXRWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkRm9ybWF0dGVkVmFsdWUgPSB0aGlzLmdldEZpZWxkRm9ybWF0dGVkVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwW2ZpZWxkLmtleV0gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkRm9ybWF0dGVkVmFsdWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMsXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXNlRmllbGQodWlDb250cm9sRmllbGQ6IFVJQ29udHJvbEZpZWxkLCBkYXRhRmllbGQ6IGFueSkge1xuICAgICAgICBjb25zdCBjdXN0b21GaWVsZDogUGVwRmllbGRCYXNlID0gdGhpcy5jb252ZXJ0VG9DdXN0b21GaWVsZChcbiAgICAgICAgICAgIHVpQ29udHJvbEZpZWxkLFxuICAgICAgICAgICAgZGF0YUZpZWxkLFxuICAgICAgICAgICAgdGhpcy5jYW5FZGl0T2JqZWN0LFxuICAgICAgICAgICAgdGhpcy5tZW51RGF0YUZpZWxkLFxuICAgICAgICAgICAgdGhpcy5oYXNDYW1wYWlnbkRhdGFGaWVsZCxcbiAgICAgICAgICAgIHRoaXMuaW5kaWNhdG9yc0RhdGFGaWVsZCxcbiAgICAgICAgICAgIHRoaXMub2JqZWN0SWQsXG4gICAgICAgICAgICB0aGlzLnBhcmVudElkLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hDb2RlXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGN1c3RvbUZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93Rm9ybVZhbGlkYXRpb25NZXNzYWdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWVsZHM6IFBlcEZpZWxkQmFzZVtdID0gdGhpcy5maWVsZHM7XG4gICAgICAgIGxldCBlbXB0eU1hbmRhdG9yeUZpZWxkc01zZyA9ICcnO1xuICAgICAgICBsZXQgbm90VmFsaWRGaWVsZHNNc2cgPSAnJztcblxuICAgICAgICAvLyBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vICAgICBsZXQgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uZ2V0KGZpZWxkLmtleSk7XG5cbiAgICAgICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIC8vIE1hbmRhdG9yeSBpcyBlbXB0eS5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLm1hbmRhdG9yeSAmJlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbC52YWx1ZS50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZW1wdHlNYW5kYXRvcnlGaWVsZHNNc2cgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGk+PHNtYWxsPicgKyBmaWVsZC5sYWJlbCArICc8L3NtYWxsPjwvbGk+JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaWVsZC5kaXNhYmxlZCAmJiAhZm9ybUNvbnRyb2wudmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm90VmFsaWRGaWVsZHNNc2cgKz1cbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGk+PHNtYWxsPicgKyBmaWVsZC5sYWJlbCArICc8L3NtYWxsPjwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGhlIGhlYWRlciBtZXNzYWdlIG9mIHRoZSBlbXB0eSBtYW5kYXRvcnkgZmllbGRzXG4gICAgICAgIGlmIChlbXB0eU1hbmRhdG9yeUZpZWxkc01zZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBlbXB0eU1hbmRhdG9yeUZpZWxkc01zZyA9XG4gICAgICAgICAgICAgICAgJzxkaXY+JyArXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTUVTU0FHRVMuRVJST1JfTUFOREFUT1JZX0ZJRUxEUycpICtcbiAgICAgICAgICAgICAgICBcIjwvZGl2Pjx1bCBzdHlsZT0ncGFkZGluZzogMCAyMHB4Oyc+XCIgK1xuICAgICAgICAgICAgICAgIGVtcHR5TWFuZGF0b3J5RmllbGRzTXNnICtcbiAgICAgICAgICAgICAgICAnPC91bD48YnIvPic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGhlIGhlYWRlciBtZXNzYWdlIG9mIHRoZSBlbXB0eSBtYW5kYXRvcnkgZmllbGRzXG4gICAgICAgIGlmIChub3RWYWxpZEZpZWxkc01zZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBub3RWYWxpZEZpZWxkc01zZyA9XG4gICAgICAgICAgICAgICAgJzxkaXY+JyArXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTUVTU0FHRVMuRVJST1JfSU5WQUxJRF9GSUVMRFMnKSArXG4gICAgICAgICAgICAgICAgXCI8L2Rpdj48dWwgc3R5bGU9J3BhZGRpbmc6IDAgMjBweDsnPlwiICtcbiAgICAgICAgICAgICAgICBub3RWYWxpZEZpZWxkc01zZyArXG4gICAgICAgICAgICAgICAgJzwvdWw+JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnTUVTU0FHRVMuVElUTEVfTk9USUNFJyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgUGVwRGlhbG9nRGF0YSh7XG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGVtcHR5TWFuZGF0b3J5RmllbGRzTXNnICsgbm90VmFsaWRGaWVsZHNNc2csXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkRlZmF1bHREaWFsb2coZGF0YSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcbiAgICAgICAgLy8gY29udmVydCByZW0gdG8gcGl4ZWxcbiAgICAgICAgY29uc3QgUmVtVG9QaXhlbCA9IDE2O1xuICAgICAgICB0aGlzLmZvcm1HdXR0ZXJTaXplID1cbiAgICAgICAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9TUEFDRUlOR19LRVlcbiAgICAgICAgICAgICkgKiBSZW1Ub1BpeGVsO1xuICAgICAgICB0aGlzLmNhcmRHdXR0ZXJTaXplID1cbiAgICAgICAgICAgIHRoaXMuY3VzdG9taXphdGlvblNlcnZpY2UuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9TUEFDRUlOR19LRVlcbiAgICAgICAgICAgICkgKiBSZW1Ub1BpeGVsO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5kYXRhKTsgLy8gY2hlY2sgZm9yIGNoYW5nZXNcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0ZvckNoYW5nZXMgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcyk6IHZvaWQge1xuICAgICAgICAvLyBpZiAoY2hhbmdlcy5kYXRhICYmIGNoYW5nZXMuZGF0YS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgLy8gICAgIC8vIExvYWQgY2hhbmdlc1xuICAgICAgICAvLyAgICAgaWYgKCF0aGlzLnNob3VsZFJlbG9hZEZvcm0gJiYgY2hhbmdlcy5kYXRhLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmRhdGEgPSBjaGFuZ2VzLmRhdGEuY3VycmVudFZhbHVlO1xuICAgICAgICAvLyAgICAgICAgIHRoaXMudXBkYXRlRm9ybSgpO1xuICAgICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLl9zaG91bGRSZWxvYWRGb3JtID0gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGlmICh0aGlzLnNob3VsZFJlbG9hZEZvcm0gfHwgIWNoYW5nZXM/LmRhdGE/LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuX3Nob3VsZFJlbG9hZEZvcm0gPSBmYWxzZTtcbiAgICAgICAgLy8gICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICAgICAgLy8gICAgIHRoaXMuY2hlY2tGb3JDaGFuZ2VzID0gbmV3IERhdGUoKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIGdldFVpQ29udHJvbEZpZWxkcygpOiBBcnJheTxVSUNvbnRyb2xGaWVsZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQgPyB0aGlzLmxheW91dC5Db250cm9sRmllbGRzIDogW107XG4gICAgfVxuXG4gICAgaW5pdEZpZWxkc1N0cnVjdHVyZShmaWVsZHM6IFBlcEZpZWxkQmFzZVtdLCBtYXhSb3c6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldFRoZW1lVmFyaWFibGVzKCk7XG5cbiAgICAgICAgLy8gU2V0IGZvcm0gcm93IGhlaWdodC5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0VHlwZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBjYXJkRmllbGRIZWlnaHQgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfRklFTERfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0ID0gY2FyZEZpZWxkSGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm93RmllbGRIZWlnaHQgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0ZpZWxkVGl0bGVIZWlnaHQgPSB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfVElUTEVfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0ID0gcm93RmllbGRIZWlnaHQgKyByb3dGaWVsZFRpdGxlSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBmaWVsZHMgc3RydWN0dXJlICh0aGUgZmllbGRzIG11c3QgYmUgc29ydGVkISEhKS5cbiAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBJbml0IHRoZSBsYXlvdXQuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5sYXlvdXRUeXBlID09PSAnZm9ybScgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFR5cGUgPT09ICd0YWJsZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkc1N1YmplY3QubmV4dChmaWVsZHMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBtYXhSb3c7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd3NbaV0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGZpZWxkID0gZmllbGRzW2ldXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dzW2ZpZWxkLnJvd10ucHVzaChmaWVsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2VzZmllbGRFeGlzdEluOiBib29sZWFuW11bXSA9IG5ldyBBcnJheShtYXhSb3cpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2VzZmllbGRFeGlzdEluLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5baV0gPSBuZXcgQXJyYXkodGhpcy5jb2x1bW5zKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRvZXNmaWVsZEV4aXN0SW5baV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5baV1bal0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFJ1biBpbiBzcXVlcmUgKHJvdyAtIGNvbHNwYW4sIGNvbCAtIHJvd3NwYW4pIGFuZCBwdXQgdHJ1ZSB3aGVyZSBpdCBzaG91bGQuXG4gICAgICAgICAgICAgICAgLy8gZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgY3VycmVudEZpZWxkID0gZmllbGRzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRGaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZC5yb3dTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm93OiBudW1iZXIgPSBjdXJyZW50RmllbGQucm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA8IGN1cnJlbnRGaWVsZC5yb3cgKyBjdXJyZW50RmllbGQucm93U3BhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3crK1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZC5jb2xTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbDogbnVtYmVyID0gY3VycmVudEZpZWxkLmNvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQuY29sICsgY3VycmVudEZpZWxkLmNvbFNwYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wrK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzZmllbGRFeGlzdEluLmxlbmd0aCA+IHJvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bMF0ubGVuZ3RoID4gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzZmllbGRFeGlzdEluW3Jvd11bY29sXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzZmllbGRFeGlzdEluLmxlbmd0aCA+IHJvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc2ZpZWxkRXhpc3RJblswXS5sZW5ndGggPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLmNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bcm93XVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQuY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50RmllbGQuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbDogbnVtYmVyID0gY3VycmVudEZpZWxkLmNvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPCBjdXJyZW50RmllbGQuY29sICsgY3VycmVudEZpZWxkLmNvbFNwYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sKytcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc2ZpZWxkRXhpc3RJbi5sZW5ndGggPiBjdXJyZW50RmllbGQucm93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bMF0ubGVuZ3RoID4gY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bY3VycmVudEZpZWxkLnJvd11bY29sXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW4ubGVuZ3RoID4gY3VycmVudEZpZWxkLnJvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvZXNmaWVsZEV4aXN0SW5bMF0ubGVuZ3RoID4gY3VycmVudEZpZWxkLmNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9lc2ZpZWxkRXhpc3RJbltjdXJyZW50RmllbGQucm93XVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLmNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGVtcHR5IGZpZWxkcyB3aGVyZSBkb2VzZmllbGRFeGlzdEluIGlzIGZhbHNlIChGb3IgdGhlIG1kLWdyaWQtbGlzdCBVSSBDb21wb25lbnQpLlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9lc2ZpZWxkRXhpc3RJbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRvZXNmaWVsZEV4aXN0SW5baV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9lc2ZpZWxkRXhpc3RJbltpXVtqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBlbXB0eSBmaWVsZCBhbmQgYWRkIGl0IHRvIHRoZSBmaWVsZHMgbGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBlcFBsYWNlaG9sZGVyRmllbGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBpICsgJ18nICsgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93U3BhbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gU29ydCB0aGUgZmllbGRzIGFnYWluLlxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzID0gZmllbGRzLnNvcnQoKGYxLCBmMikgPT5cbiAgICAgICAgICAgICAgICAgICAgZjEucm93ID4gZjIucm93XG4gICAgICAgICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZjEucm93IDwgZjIucm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZjEuY29sID4gZjIuY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGYxLmNvbCA8IGYyLmNvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWVsZHNTdWJqZWN0Lm5leHQoZmllbGRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEZvcm0oaXNGb3JVcGRhdGUgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBsZXQgYWxsRmllbGRzQXJlUmVhZE9ubHkgPSB0cnVlO1xuXG4gICAgICAgIGlmICghaXNGb3JVcGRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50RmllbGQgb2YgdGhpcy5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAvLyBBZGQgYWxsIGZpZWxkcyBleGNlcHQgJ2ludGVybmFsUGFnZScgKGZvciBjaGlsZHJlbikuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZC5jb250cm9sVHlwZSAhPT0gJ2ludGVybmFsUGFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2goY3VycmVudEZpZWxkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRGaWVsZC5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgICAgICBhbGxGaWVsZHNBcmVSZWFkT25seSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5mb3JtID0gdGhpcy50b0NvbnRyb2xHcm91cChmaWVsZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGZvcm0gdmFsdWVzIGlmIGNoYW5nZWQgYnkgY2FsY3VsYXRlZCBmaWVsZHMuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGaWVsZCA9IHRoaXMuZmllbGRzW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZC5jb250cm9sVHlwZSA9PT0gJ2ludGVybmFsQ2FydXNlbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSGFjayB0byBvdmVycmlkZSAodXBkYXRlKSB0aGUgZmllbGQuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpQ29udHJvbEZpZWxkID0gdGhpcy5nZXRVaUNvbnRyb2xGaWVsZHMoKS5maW5kKGNmID0+IGNmLkFwaU5hbWUgPT09IGN1cnJlbnRGaWVsZC5rZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhRmllbGQgPSB0aGlzLmRhdGEuRmllbGRzLmZpbmQoZGYgPT4gZGYuQXBpTmFtZSA9PT0gY3VycmVudEZpZWxkLmtleSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCA9IHRoaXMuY3JlYXRlQmFzZUZpZWxkKHVpQ29udHJvbEZpZWxkLCBkYXRhRmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWVsZHNTdWJqZWN0LnZhbHVlW2ldID0gY3VycmVudEZpZWxkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEZpZWxkLmNvbnRyb2xUeXBlICE9PSAnaW50ZXJuYWxQYWdlJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQuZ3JvdXBGaWVsZHMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5ncm91cEZpZWxkcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBjdXJyZW50RmllbGQuZ3JvdXBGaWVsZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZXQgY3VycmVudEdyb3VwRmllbGQgPSBjdXJyZW50RmllbGQuZ3JvdXBGaWVsZHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRHcm91cEZpZWxkIG9mIGN1cnJlbnRGaWVsZC5ncm91cEZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkRm9ybWF0dGVkVmFsdWUgPSB0aGlzLmdldEZpZWxkRm9ybWF0dGVkVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlLnVwZGF0ZUZvcm1GaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRGb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkRm9ybWF0dGVkVmFsdWUgPSB0aGlzLmdldEZpZWxkRm9ybWF0dGVkVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5mb3JtLmNvbnRyb2xzW2N1cnJlbnRGaWVsZC5rZXldLnNldFZhbHVlKGZpZWxkRm9ybWF0dGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21pemF0aW9uU2VydmljZS51cGRhdGVGb3JtRmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEZvcm1hdHRlZFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50RmllbGQucmVhZG9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsRmllbGRzQXJlUmVhZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNGb3JtVmFsaWQgPSB0aGlzLmZvcm0/LnZhbGlkO1xuXG4gICAgICAgIC8vIENoYW5nZSB2YWxpZGF0aW9uIHRvIHRydWUgaWYgYWxsIGZpZWxkcyBhcmUgcmVhZCBvbmx5LlxuICAgICAgICBpZiAoIWlzRm9ybVZhbGlkICYmIGFsbEZpZWxkc0FyZVJlYWRPbmx5KSB7XG4gICAgICAgICAgICBpc0Zvcm1WYWxpZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uRm9ybVZhbGlkYXRpb25DaGFuZ2VkKGlzRm9ybVZhbGlkKTtcblxuICAgICAgICAvLyBTZXQgaXQgdG8gZmFsc2UgdG8gZW5hYmxlIGFsbCBmaWVsZHMuXG4gICAgICAgIGlmICh0aGlzLmlzSW50ZXJuYWwgJiYgdGhpcy5pc0xvY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5pc0xvY2tlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdEZvcm0oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLkZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzOiBQZXBGaWVsZEJhc2VbXSA9IHRoaXMuY29udmVydEN1c3RvbUZpZWxkcyhcbiAgICAgICAgICAgICAgICB0aGlzLmdldFVpQ29udHJvbEZpZWxkcygpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5GaWVsZHNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1heFJvdyA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgIC4uLmZpZWxkcy5tYXAoKGYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYucm93ICsgZi5yb3dTcGFuO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zID0gTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgLi4uZmllbGRzLm1hcCgoZikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5jb2wgKyBmLmNvbFNwYW47XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdEZpZWxkc1N0cnVjdHVyZShmaWVsZHMsIG1heFJvdyk7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm0oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRmllbGQoXG4gICAgICAgIGN1c3RvbUZpZWxkOiBQZXBGaWVsZEJhc2UsXG4gICAgICAgIHVwZGF0ZWRGaWVsZDogT2JqZWN0c0RhdGFSb3dDZWxsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcbiAgICAgICAgICAgIGRpc2FibGVkOiAhdXBkYXRlZEZpZWxkLkVuYWJsZWQgfHwgIXRoaXMuY2FuRWRpdE9iamVjdCxcbiAgICAgICAgICAgIHJlYWRvbmx5OiAhdXBkYXRlZEZpZWxkLkVuYWJsZWQgfHwgIXRoaXMuY2FuRWRpdE9iamVjdCxcbiAgICAgICAgICAgIHZpc2libGU6IHVwZGF0ZWRGaWVsZC5WaXNpYmxlLFxuICAgICAgICAgICAgdmFsdWU6IHVwZGF0ZWRGaWVsZC5WYWx1ZSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxWYWx1ZTogdXBkYXRlZEZpZWxkLkFkZGl0aW9uYWxWYWx1ZSxcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiB1cGRhdGVkRmllbGQuRm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IHVwZGF0ZWRGaWVsZC5UZXh0Q29sb3IsXG4gICAgICAgICAgICBkaWdpdHNOdW1iZXJBZnRlckRlY2ltYWxQb2ludDogdXBkYXRlZEZpZWxkLkRpZ2l0c051bWJlckFmdGVyRGVjaW1hbFBvaW50XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGN1c3RvbUZpZWxkIGluc3RhbmNlb2YgUGVwUXVhbnRpdHlTZWxlY3RvckZpZWxkKSB7XG4gICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25JbmZvID0gdXBkYXRlZEZpZWxkLk5vdGlmaWNhdGlvbkluZm87XG4gICAgICAgICAgICBvcHRpb25zLm5vdGlmaWNhdGlvbkluZm8gPSBub3RpZmljYXRpb25JbmZvO1xuXG4gICAgICAgICAgICAvLyBDaGFuZ2UgdHlwZSBpZiBpdCdzIGNoYW5nZSAob25seSBmb3IgYWxsb3dEZWNpbWFsKS5cbiAgICAgICAgICAgIGxldCBhbGxvd0RlY2ltYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh1cGRhdGVkRmllbGQuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLk51bWJlclJlYWxRdWFudGl0eVNlbGVjdG9yIHx8XG4gICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsIHx8XG4gICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsRm9yTWF0cml4XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBhbGxvd0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcHRpb25zLmFsbG93RGVjaW1hbCA9IGFsbG93RGVjaW1hbDtcblxuICAgICAgICB9IGVsc2UgaWYgKGN1c3RvbUZpZWxkIGluc3RhbmNlb2YgUGVwU2VsZWN0RmllbGQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucyA9IHRoaXMuY29udmVydE9wdGlvbmFsVmFsdWVzKFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZC5PcHRpb25hbFZhbHVlc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLm9wdGlvbnMgfHwgb3B0aW9ucy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBvcHRpb25zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5mb3JtYXR0ZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21GaWVsZCBpbnN0YW5jZW9mIFBlcEludGVybmFsQ2FydXNlbEZpZWxkKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhZ2VJbmZvID0gdXBkYXRlZEZpZWxkLlVJUGFnZUluZm87XG4gICAgICAgIH1cblxuICAgICAgICBjdXN0b21GaWVsZC51cGRhdGUob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdXBkYXRlRm9ybSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuRmllbGRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRGaWVsZCBvZiB0aGlzLmRhdGEuRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tRmllbGQgPSB0aGlzLmZpZWxkcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChmKSA9PiBmLmtleSA9PT0gY3VycmVudEZpZWxkLkFwaU5hbWVcbiAgICAgICAgICAgICAgICApWzBdO1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBhbGwgZmllbGRzIGV4Y2VwdCAnaW50ZXJuYWxQYWdlJyB0eXBlIChmb3IgY2hpbGRyZW4pLlxuICAgICAgICAgICAgICAgIGlmIChjdXN0b21GaWVsZCAmJiBjdXN0b21GaWVsZC5jb250cm9sVHlwZSAhPT0gJ2ludGVybmFsUGFnZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZChjdXN0b21GaWVsZCwgY3VycmVudEZpZWxkKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGdyb3VwIGZpZWxkcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGQuY29udHJvbFR5cGUgPT09ICdhZGRyZXNzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLkdyb3VwRmllbGRzXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIChsZXQgaiA9IDA7IGogPCBjdXJyZW50RmllbGQuR3JvdXBGaWVsZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBjdXJyZW50R3JvdXBGaWVsZCA9IGN1cnJlbnRGaWVsZC5Hcm91cEZpZWxkc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3VycmVudEdyb3VwRmllbGQgb2YgY3VycmVudEZpZWxkLkdyb3VwRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwRmllbGQuRW5hYmxlZCA9ICFjdXJyZW50RmllbGQuRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudEdyb3VwRmllbGQuRW5hYmxlZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbUdyb3VwRmllbGQgPSBjdXN0b21GaWVsZC5ncm91cEZpZWxkcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmKSA9PiBmLmtleSA9PT0gY3VycmVudEdyb3VwRmllbGQuQXBpTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tR3JvdXBGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldEZvcm0odHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgUmVsb2FkRm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2hvdWxkUmVsb2FkRm9ybSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gb25TdWJtaXQoKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAvLyAgICAgICAgIHRoaXMucGF5TG9hZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgLy8gICAgICAgICAvL3RoaXMuc3VibWl0dGVkLmVtaXQodGhpcy5mb3JtLnZhbHVlKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybUNvbnRyb2xCeUlkKGtleTogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgICAgIGxldCBmb3JtQ29udHJvbCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZC5rZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuZ3JvdXBGaWVsZHMgJiYgZmllbGQuZ3JvdXBGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmdyb3VwRmllbGRzLmZvckVhY2goKGdyb3VwRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwRmllbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sID0gdGhpcy5mb3JtLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5rZXkgKyAnLicgKyBncm91cEZpZWxkLmtleVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZm9ybUNvbnRyb2w7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTcGVjaWFsRmllbGRzKFxuICAgICAgICBjb250cm9sRmllbGRzOiBBcnJheTxhbnk+LFxuICAgICAgICBkYXRhRmllbGRzOiBBcnJheTxhbnk+XG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIGxldCBjZjtcbiAgICAgICAgLy8gZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbnRyb2xGaWVsZHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIC8vICAgICBjZiA9IGNvbnRyb2xGaWVsZHNbaW5kZXhdO1xuICAgICAgICBmb3IgKGNvbnN0IGNmIG9mIGNvbnRyb2xGaWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChjZi5BcGlOYW1lID09PSAnT2JqZWN0TWVudScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVGaWVsZCA9IGNmO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjZi5BcGlOYW1lID09PSAnSXRlbUhhc0FjdGl2ZUNhbXBhaWduJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2FtcGFpZ25GaWVsZCA9IGNmO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjZi5BcGlOYW1lID09PSAnSXRlbUluZGljYXRvcnNXaXRob3V0Q2FtcGFpZ24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRpY2F0b3JzRmllbGQgPSBjZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxldCBkZjtcbiAgICAgICAgLy8gZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFGaWVsZHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIC8vICAgICBkZiA9IGRhdGFGaWVsZHNbaW5kZXhdO1xuICAgICAgICBmb3IgKGNvbnN0IGRmIG9mIGRhdGFGaWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChkZi5BcGlOYW1lID09PSAnT2JqZWN0TWVudScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVEYXRhRmllbGQgPSBkZjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGYuQXBpTmFtZSA9PT0gJ0l0ZW1IYXNBY3RpdmVDYW1wYWlnbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NhbXBhaWduRGF0YUZpZWxkID0gZGY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRmLkFwaU5hbWUgPT09ICdJdGVtSW5kaWNhdG9yc1dpdGhvdXRDYW1wYWlnbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGljYXRvcnNEYXRhRmllbGQgPSBkZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1lbnVGaWVsZCAmJiB0aGlzLm1lbnVEYXRhRmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMubWVudURhdGFGaWVsZC5MYXlvdXQgPSB0aGlzLm1lbnVGaWVsZC5MYXlvdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNDYW1wYWlnbkZpZWxkICYmIHRoaXMuaGFzQ2FtcGFpZ25EYXRhRmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzQ2FtcGFpZ25EYXRhRmllbGQuTGF5b3V0ID0gdGhpcy5oYXNDYW1wYWlnbkZpZWxkLkxheW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmluZGljYXRvcnNGaWVsZCAmJiB0aGlzLmluZGljYXRvcnNEYXRhRmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kaWNhdG9yc0RhdGFGaWVsZC5MYXlvdXQgPSB0aGlzLmluZGljYXRvcnNGaWVsZC5MYXlvdXQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiBtZW51IGlzIGZsb2F0aW5nIG9uIG90aGVyIGZpZWxkLlxuICAgICAgICAvLyBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29udHJvbEZpZWxkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgLy8gICAgIGNmID0gY29udHJvbEZpZWxkc1tpbmRleF07XG4gICAgICAgIGZvciAoY29uc3QgY2Ygb2YgY29udHJvbEZpZWxkcykge1xuICAgICAgICAgICAgaWYgKHRoaXMubWVudUZpZWxkICYmIGNmLkFwaU5hbWUgIT09ICdPYmplY3RNZW51Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzTWVudUZsb2F0aW5nT25PdGhlckZpZWxkID0gdGhpcy5kb2VzRmllbGRIYXZhRmxvYXRpbmdGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgY2YsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudUZpZWxkXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc01lbnVGbG9hdGluZ09uT3RoZXJGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb252ZXJ0Q3VzdG9tRmllbGRzKFxuICAgICAgICBjb250cm9sRmllbGRzOiBBcnJheTxhbnk+LFxuICAgICAgICBkYXRhRmllbGRzOiBBcnJheTxhbnk+XG4gICAgKTogUGVwRmllbGRCYXNlW10ge1xuICAgICAgICBpZiAodGhpcy5sYXlvdXRUeXBlICE9PSAndGFibGUnKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNwZWNpYWxGaWVsZHMoY29udHJvbEZpZWxkcywgZGF0YUZpZWxkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBIQUNLOiBjb252ZXJ0IHRvIGNlbnRlciBhbGlnbm1lbnQgaWYgdGFibGUgdmlldyAmIHNwZWNpYWwgZmllbGRzKVxuICAgICAgICAgICAgY29udHJvbEZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkFwaU5hbWUgPT09ICdVbml0c1F1YW50aXR5JyB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5BcGlOYW1lID09PSAnUXVhbnRpdHlTZWxlY3RvcicgfHxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuQXBpTmFtZSA9PT0gJ09iamVjdE1lbnUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5JbWFnZSB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuSW1hZ2VVUkwgfHxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLkluZGljYXRvcnMgfHxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLkJvb2xlYW4gfHxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuRmllbGRUeXBlID09PSBGSUVMRF9UWVBFLkNhbGN1bGF0ZWRCb29sIHx8XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5TaWduYXR1cmUgfHxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuRmllbGRUeXBlID09PVxuICAgICAgICAgICAgICAgICAgICBGSUVMRF9UWVBFLk51bWJlckludGVnZXJRdWFudGl0eVNlbGVjdG9yIHx8XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLkZpZWxkVHlwZSA9PT0gRklFTERfVFlQRS5OdW1iZXJSZWFsUXVhbnRpdHlTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuUGFja2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVySW50ZWdlckZvck1hdHJpeCB8fFxuICAgICAgICAgICAgICAgICAgICBmaWVsZC5GaWVsZFR5cGUgPT09IEZJRUxEX1RZUEUuTnVtYmVyUmVhbEZvck1hdHJpeFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5MYXlvdXQuWEFsaWdubWVudCA9IFhfQUxJR05NRU5UX1RZUEUuQ2VudGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhBQ0s6IGFsaWduIHRoZSByZXN0IG9mIHRoZSBmaWVsZHMgYnkgdGhlIGN1bHR1cmUuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpZWxkLkxheW91dC5YQWxpZ25tZW50ID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmlzUnRsKCkgPyBYX0FMSUdOTUVOVF9UWVBFLlJpZ2h0IDogWF9BTElHTk1FTlRfVFlQRS5MZWZ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGRzOiBQZXBGaWVsZEJhc2VbXSA9IFtdO1xuXG4gICAgICAgIGNvbnRyb2xGaWVsZHMuZm9yRWFjaCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZGYpID0+IGRmLkFwaU5hbWUgPT09IGZpZWxkLkFwaU5hbWVcbiAgICAgICAgICAgIClbMF07XG5cbiAgICAgICAgICAgIGlmICghZGF0YUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBjdXJyZW50IHZpZXcgaXMgbm90IHRhYmxlIHZpZXcgYW5kIHRob3NlIGZpZWxkcyBhcmUgc3BlY2lhbC5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFR5cGUgIT09ICd0YWJsZScgJiZcbiAgICAgICAgICAgICAgICAoKHRoaXMuaGFzTWVudUZsb2F0aW5nT25PdGhlckZpZWxkICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudUZpZWxkICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudUZpZWxkLkFwaU5hbWUgPT09IGZpZWxkLkFwaU5hbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmluZGljYXRvcnNGaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRpY2F0b3JzRmllbGQuQXBpTmFtZSA9PT0gZmllbGQuQXBpTmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaGFzQ2FtcGFpZ25GaWVsZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNDYW1wYWlnbkZpZWxkLkFwaU5hbWUgPT09IGZpZWxkLkFwaU5hbWUpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZXQgdHlwZSB0byBsaW5rXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgdGhpcy5maXJzdEZpZWxkQXNMaW5rKSB7XG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkLkZpZWxkVHlwZSA9IEZJRUxEX1RZUEUuSW50ZXJuYWxMaW5rO1xuICAgICAgICAgICAgICAgIC8vIGRhdGFGaWVsZC5WYWx1ZSA9IHRoaXMuZ2V0SW50ZXJuYWxMaW5rSHJlZigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQuQXBpTmFtZSA9PT0gJ09iamVjdE1lbnUnKSB7XG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkLkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vIEhBQ0sgOiBVbnRpbCBcIkVuYWJsZWRcIiByZXR1cm5zIGZyb20gdGhlIHNlcnZlciwgd2Ugc2V0IFBlcE1lbnUgdG8gYmVcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgRGlzYWJsZWQgaW4gY2FydCBvbiByZWd1bGFyIGl0ZW1zIGFuZCBub3QgY2FtcGlnbiBpdGVtcy5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUZpZWxkOiBQZXBGaWVsZEJhc2UgPSB0aGlzLmNyZWF0ZUJhc2VGaWVsZChmaWVsZCwgZGF0YUZpZWxkKTtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKGN1c3RvbUZpZWxkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkcy5zb3J0KChmMSwgZjIpID0+XG4gICAgICAgICAgICBmMS5yb3cgPiBmMi5yb3dcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IGYxLnJvdyA8IGYyLnJvd1xuICAgICAgICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgICAgICAgIDogZjEuY29sID4gZjIuY29sXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZjEuY29sIDwgZjIuY29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uRm9ybVZhbGlkYXRpb25DaGFuZ2VkKGZvcm1WYWxpZGF0aW9uQ2hhbmdlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkNoYW5nZS5lbWl0KGZvcm1WYWxpZGF0aW9uQ2hhbmdlKTtcbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlZChldmVudDogSVBlcEZpZWxkVmFsdWVDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uRm9ybVZhbGlkYXRpb25DaGFuZ2VkKHRoaXMuZm9ybS52YWxpZCk7XG5cbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sQnlJZChldmVudC5rZXkpO1xuXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBmb3JtQ29udHJvbCA/IGZvcm1Db250cm9sLnZhbGlkIDogdHJ1ZTtcbiAgICAgICAgLy8gY29uc3QgaXNWYWxpZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgIC8vIFNldCBpdCB0byBmYWxzZSB0byBkaXNhYmxlIGFsbCBmaWVsZHMuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ludGVybmFsICYmIHRoaXMubGF5b3V0VHlwZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvY2tlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBmaWVsZCB2YWx1ZS5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKGYpID0+IGYua2V5ID09PSBldmVudC5rZXkpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5mb3JtYXR0ZWRWYWx1ZSA9IGN1cnJlbnRGaWVsZC52YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmRhdGEuVUlELnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgdWlPYmplY3RLZXk6IHRoaXMuZGF0YS5LZXksXG4gICAgICAgICAgICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnZhbHVlLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBldmVudC5jb250cm9sVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DbGljayhmaWVsZENsaWNrRXZlbnQ6IElQZXBGaWVsZENsaWNrRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpY2tlZFVpQ29udHJvbEZpZWxkID0gdGhpcy5kYXRhLkZpZWxkcy5maWx0ZXIoXG4gICAgICAgICAgICAoZikgPT4gZi5BcGlOYW1lID09PSBmaWVsZENsaWNrRXZlbnQua2V5XG4gICAgICAgIClbMF07XG4gICAgICAgIGNvbnN0IGlkVHlwZSA9IHRoaXMuZGF0YS5UeXBlID8gdGhpcy5kYXRhLlR5cGUudG9TdHJpbmcoKSA6ICcnO1xuXG4gICAgICAgIGlmIChjbGlja2VkVWlDb250cm9sRmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGRDbGljay5lbWl0KHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5kYXRhLlVJRC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHVpT2JqZWN0S2V5OiB0aGlzLmRhdGEuS2V5LFxuICAgICAgICAgICAgICAgIGtleTogZmllbGRDbGlja0V2ZW50LmtleSxcbiAgICAgICAgICAgICAgICBpZFR5cGUsXG4gICAgICAgICAgICAgICAgd2hpY2g6IGZpZWxkQ2xpY2tFdmVudC5ldmVudFdoaWNoLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZENsaWNrRXZlbnQudmFsdWUsXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IGZpZWxkQ2xpY2tFdmVudC5jb250cm9sVHlwZSxcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGU6IGNsaWNrZWRVaUNvbnRyb2xGaWVsZC5GaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgb3RoZXJEYXRhOiBmaWVsZENsaWNrRXZlbnQub3RoZXJEYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGb3Igb3RoZXIgYXBpIG5hbWVzIChsaWtlIGVudGVyIGNoaWxkcmVuIGV0YykuXG4gICAgICAgICAgICB0aGlzLmZpZWxkQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuZGF0YS5VSUQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB1aU9iamVjdEtleTogdGhpcy5kYXRhLktleSxcbiAgICAgICAgICAgICAgICBrZXk6IGZpZWxkQ2xpY2tFdmVudC5rZXksXG4gICAgICAgICAgICAgICAgaWRUeXBlLFxuICAgICAgICAgICAgICAgIHdoaWNoOiBmaWVsZENsaWNrRXZlbnQuZXZlbnRXaGljaCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGRDbGlja0V2ZW50LnZhbHVlLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBmaWVsZENsaWNrRXZlbnQuY29udHJvbFR5cGUsXG4gICAgICAgICAgICAgICAgb3RoZXJEYXRhOiBmaWVsZENsaWNrRXZlbnQub3RoZXJEYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGV2ZW50IGlzIGZvciBoYW5kbGUgdGhlIGludGVybmFsIHBhZ2UgZXZlbnRzLlxuICAgIG9uSW50ZXJuYWxGb3JtRmllbGRDbGlja2VkKGludGVybmFsRm9ybUZpZWxkQ2xpY2s6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmludGVybmFsRm9ybUZpZWxkQ2xpY2suZW1pdChpbnRlcm5hbEZvcm1GaWVsZENsaWNrKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGV2ZW50IGlzIGZvciBoYW5kbGUgdGhlIGludGVybmFsIHBhZ2UgZXZlbnRzLlxuICAgIG9uSW50ZXJuYWxGb3JtRmllbGRDaGFuZ2VkKGludGVybmFsRm9ybUZpZWxkQ2hhbmdlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEZvcm1GaWVsZENoYW5nZS5lbWl0KGludGVybmFsRm9ybUZpZWxkQ2hhbmdlKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGV2ZW50IGlzIGZvciBoYW5kbGUgdGhlIHJlbGF0ZWQgaXRlbXMgY2hhbmdlIGV2ZW50cy5cbiAgICBvbkZvcm1WYWx1ZUNoYW5nZWQoZXZlbnQ6IElQZXBGb3JtRmllbGRWYWx1ZUNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBldmVudCBpcyBmb3IgaGFuZGxlIHRoZSByZWxhdGVkIGl0ZW1zIGNoYW5nZSBldmVudHMuXG4gICAgb25Gb3JtRmllbGRDbGljayhldmVudDogSVBlcEZvcm1GaWVsZENsaWNrRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWVsZENsaWNrLmVtaXQoZXZlbnQpO1xuICAgIH1cbn1cbiIsIjxmaWVsZHNldCAqbmdJZj1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBbZGlzYWJsZWRdPVwiaXNMb2NrZWRcIiBjbGFzcz1cInBlcC1mb3JtXCJcbiAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogbGF5b3V0VHlwZSA9PSAnY2FyZCcgJiYgZGF0YT8uQmFja2dyb3VuZENvbG9yIH1cIj5cbiAgICA8IS0tIE5ldyBGb3JtIC0tPlxuICAgIDxtYXQtZ3JpZC1saXN0ICpuZ0lmPVwibGF5b3V0VHlwZSA9PSAnZm9ybSdcIiBbY29sc109XCJjb2x1bW5zXCIgW3Jvd0hlaWdodF09XCJyb3dIZWlnaHQgKyAncmVtJ1wiXG4gICAgICAgIFtndXR0ZXJTaXplXT1cImZvcm1HdXR0ZXJTaXplXCI+XG4gICAgICAgIDxtYXQtZ3JpZC10aWxlICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHMkIHwgYXN5bmNcIiBbcm93c3Bhbl09XCJmaWVsZC5yb3dTcGFuXCIgW2NvbHNwYW5dPVwiZmllbGQuY29sU3BhblwiPlxuICAgICAgICAgICAgPHBlcC1maWVsZC1nZW5lcmF0b3IgKm5nSWY9XCJmaWVsZC5jb250cm9sVHlwZSAhPSAncGxhY2Vob2xkZXInXCIgW2Zvcm1dPVwiZm9ybVwiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIlxuICAgICAgICAgICAgICAgIFtjaGVja0ZvckNoYW5nZXNdPVwiY2hlY2tGb3JDaGFuZ2VzXCIgW3VpZF09XCJkYXRhPy5VSURcIiBbZmllbGRdPVwiZmllbGRcIiBbc2hvd1RpdGxlXT1cInNob3dUaXRsZVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZWxlbWVudENsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGludGVybmFsRm9ybUZpZWxkQ2xpY2spPVwib25JbnRlcm5hbEZvcm1GaWVsZENsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGludGVybmFsRm9ybUZpZWxkQ2hhbmdlKT1cIm9uSW50ZXJuYWxGb3JtRmllbGRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChmb3JtVmFsdWVDaGFuZ2UpPVwib25Gb3JtVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZm9ybUZpZWxkQ2xpY2spPVwib25Gb3JtRmllbGRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZm9ybVZhbGlkYXRpb25DaGFuZ2UpPVwib25Gb3JtVmFsaWRhdGlvbkNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9wZXAtZmllbGQtZ2VuZXJhdG9yPlxuICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgPC9tYXQtZ3JpZC1saXN0PlxuXG4gICAgPCEtLSBUaHVtYm5haWxzIC0tPlxuICAgIDxtYXQtZ3JpZC1saXN0ICpuZ0lmPVwibGF5b3V0VHlwZSA9PSAnY2FyZCdcIiBbY29sc109XCJjb2x1bW5zXCIgW3Jvd0hlaWdodF09XCJyb3dIZWlnaHQgKyAncmVtJ1wiXG4gICAgICAgIFtndXR0ZXJTaXplXT1cImNhcmRHdXR0ZXJTaXplXCIgY2xhc3M9XCJjYXJkLXNwYWNpbmdcIj5cbiAgICAgICAgPG1hdC1ncmlkLXRpbGUgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkcyQgfCBhc3luY1wiIFtyb3dzcGFuXT1cImZpZWxkLnJvd1NwYW5cIiBbY29sc3Bhbl09XCJmaWVsZC5jb2xTcGFuXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgb3ZlcmZsb3c6IGZpZWxkLnR5cGUgPT0gJ3FzJyA/ICd1bnNldCcgOiAnaGlkZGVuJyB9XCI+XG4gICAgICAgICAgICA8cGVwLWZpZWxkLWdlbmVyYXRvciAqbmdJZj1cImZpZWxkLmNvbnRyb2xUeXBlICE9ICdwbGFjZWhvbGRlcidcIiBbZm9ybV09XCJmb3JtXCIgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnbG9jay1ldmVudHMnOiBsb2NrRXZlbnRzIH1cIiBbaXNBY3RpdmVdPVwiaXNBY3RpdmVcIiBbY2hlY2tGb3JDaGFuZ2VzXT1cImNoZWNrRm9yQ2hhbmdlc1wiXG4gICAgICAgICAgICAgICAgW3VpZF09XCJkYXRhPy5VSURcIiBbZmllbGRdPVwiZmllbGRcIiBbc2hvd1RpdGxlXT1cInNob3dUaXRsZVwiICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZWxlbWVudENsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiIChpbnRlcm5hbEZvcm1GaWVsZENsaWNrKT1cIm9uSW50ZXJuYWxGb3JtRmllbGRDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChpbnRlcm5hbEZvcm1GaWVsZENoYW5nZSk9XCJvbkludGVybmFsRm9ybUZpZWxkQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZm9ybVZhbHVlQ2hhbmdlKT1cIm9uRm9ybVZhbHVlQ2hhbmdlZCgkZXZlbnQpXCIgKGZvcm1GaWVsZENsaWNrKT1cIm9uRm9ybUZpZWxkQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9wZXAtZmllbGQtZ2VuZXJhdG9yPlxuICAgICAgICA8L21hdC1ncmlkLXRpbGU+XG4gICAgPC9tYXQtZ3JpZC1saXN0PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dFR5cGUgPT0gJ3RhYmxlJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNSZXBvcnQ7IHRoZW4gcmVwb3J0QmxvY2s7IGVsc2Ugbm90UmVwb3J0QmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBvcnRCbG9jaz5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZXBvcnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3RSZXBvcnRCbG9jaz5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkcyQgfCBhc3luYzsgbGV0IGogPSBpbmRleFwiIGNsYXNzPVwicHVsbC1sZWZ0IGZsaXAgdGFibGUtY2VsbCBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsndGV4dC1hbGlnbi0nICsgZmllbGQueEFsaWdubWVudF1cIiBzdHlsZT1cImhlaWdodDogMTAwJVwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogKGxheW91dD8uQ29udHJvbEZpZWxkcylbal0/LmNhbGNDb2x1bW5XaWR0aFN0cmluZ31cIj5cbiAgICAgICAgICAgICAgICA8cGVwLWZpZWxkLWdlbmVyYXRvciAqbmdJZj1cImZpZWxkLmNvbnRyb2xUeXBlICE9ICdwbGFjZWhvbGRlcidcIiBbY2hlY2tGb3JDaGFuZ2VzXT1cImNoZWNrRm9yQ2hhbmdlc1wiXG4gICAgICAgICAgICAgICAgICAgIFt1aWRdPVwiZGF0YT8uVUlEXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIiBbc2hvd1RpdGxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgKGVsZW1lbnRDbGljayk9XCJvbkNsaWNrKCRldmVudClcIiAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChmb3JtVmFsdWVDaGFuZ2UpPVwib25Gb3JtVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZm9ybUZpZWxkQ2xpY2spPVwib25Gb3JtRmllbGRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cImlzQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgPC9wZXAtZmllbGQtZ2VuZXJhdG9yPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tLS0tLS0gRm9yIHRlc3RpbmcgLS0tLS0tLS0tLS0tXG4gICAge3sgZm9ybS52YWx1ZSB8IGpzb24gfX1cbiAgICB7eyBmb3JtLnZhbGlkIH19XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbjwvZmllbGRzZXQ+XG5cbjxuZy10ZW1wbGF0ZSAjcmVwb3J0PlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkcyQgfCBhc3luYzsgbGV0IGogPSBpbmRleFwiIGNsYXNzPVwicHVsbC1sZWZ0IGZsaXAgcGVwLXJlcG9ydC1maWVsZHNcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiAobGF5b3V0Py5Db250cm9sRmllbGRzKVtqXT8uY2FsY0NvbHVtbldpZHRoU3RyaW5nIH1cIlxuICAgICAgICBbbmdDbGFzc109XCJbJ3RleHQtYWxpZ24tJyArIGZpZWxkLnhBbGlnbm1lbnRdXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkLmNvbnRyb2xUeXBlXCI+XG4gICAgICAgICAgICA8cGVwLWltYWdlICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgW3VpZF09XCJkYXRhPy5VSURcIiBbZm9ybV09XCJmb3JtXCIgW2tleV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZmllbGQuZm9ybWF0dGVkVmFsdWVcIiBbc3JjTGFyZ2VdPVwiZmllbGQudmFsdWVcIiBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCIgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbWFuZGF0b3J5XT1cImZpZWxkLm1hbmRhdG9yeVwiIFtkaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZFwiIFtyZWFkb25seV09XCJmaWVsZC5yZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3hBbGlnbm1lbnRdPVwiZmllbGQueEFsaWdubWVudFwiIFtyb3dTcGFuXT1cImZpZWxkLnJvd1NwYW5cIiBbbGF5b3V0VHlwZV09XCJsYXlvdXRUeXBlXCJcbiAgICAgICAgICAgICAgICAoZWxlbWVudENsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9wZXAtaW1hZ2U+XG5cbiAgICAgICAgICAgIDxwZXAtc2lnbmF0dXJlICpuZ1N3aXRjaENhc2U9XCInc2lnbmF0dXJlJ1wiIFtmb3JtXT1cImZvcm1cIiBba2V5XT1cImZpZWxkLmtleVwiIFtzcmNdPVwiZmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZC5sYWJlbFwiIFttYW5kYXRvcnldPVwiZmllbGQubWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZmllbGQucmVhZG9ubHlcIiBbeEFsaWdubWVudF09XCJmaWVsZC54QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwiZmllbGQucm93U3BhblwiXG4gICAgICAgICAgICAgICAgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiPlxuICAgICAgICAgICAgPC9wZXAtc2lnbmF0dXJlPlxuXG4gICAgICAgICAgICA8cGVwLWNoZWNrYm94ICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCIgW2Zvcm1dPVwiZm9ybVwiIFtrZXldPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiKGZpZWxkLnZhbHVlIHwgbG93ZXJjYXNlKSA9PSAndHJ1ZScgfHwgZmllbGQudmFsdWUgPT0gJzEnID8gdHJ1ZSA6IGZhbHNlXCIgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJmaWVsZC50eXBlXCIgW21hbmRhdG9yeV09XCJmaWVsZC5tYW5kYXRvcnlcIiBbZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJmaWVsZC5yZWFkb25seVwiIFt4QWxpZ25tZW50XT1cImZpZWxkLnhBbGlnbm1lbnRcIiBbcm93U3Bhbl09XCJmaWVsZC5yb3dTcGFuXCJcbiAgICAgICAgICAgICAgICBbYWRkaXRpb25hbFZhbHVlXT1cImZpZWxkLmFkZGl0aW9uYWxWYWx1ZVwiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIj5cbiAgICAgICAgICAgIDwvcGVwLWNoZWNrYm94PlxuXG4gICAgICAgICAgICA8cGVwLWRhdGUgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiIFtmb3JtXT1cImZvcm1cIiBba2V5XT1cImZpZWxkLmtleVwiIFt2YWx1ZV09XCJmaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdHRlZFZhbHVlXT1cImZpZWxkLmZvcm1hdHRlZFZhbHVlXCIgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCIgW3R5cGVdPVwiZmllbGQudHlwZVwiXG4gICAgICAgICAgICAgICAgW21hbmRhdG9yeV09XCJmaWVsZC5tYW5kYXRvcnlcIiBbZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwiZmllbGQucmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiZmllbGQudGV4dENvbG9yXCIgW3hBbGlnbm1lbnRdPVwiZmllbGQueEFsaWdubWVudFwiIFtyb3dTcGFuXT1cImZpZWxkLnJvd1NwYW5cIlxuICAgICAgICAgICAgICAgIFttaW5WYWx1ZV09XCJmaWVsZC5taW5WYWx1ZVwiIFttYXhWYWx1ZV09XCJmaWVsZC5tYXhWYWx1ZVwiIFtsYXlvdXRUeXBlXT1cImxheW91dFR5cGVcIj5cbiAgICAgICAgICAgIDwvcGVwLWRhdGU+XG5cbiAgICAgICAgICAgIDxwZXAtaW50ZXJuYWwtYnV0dG9uICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiIFtmb3JtXT1cImZvcm1cIiBba2V5XT1cImZpZWxkLmtleVwiIFt2YWx1ZV09XCJmaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdHRlZFZhbHVlXT1cImZpZWxkLmZvcm1hdHRlZFZhbHVlXCIgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCIgW3R5cGVdPVwiZmllbGQudHlwZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLmRpc2FibGVkXCIgW3JlYWRvbmx5XT1cImZpZWxkLnJlYWRvbmx5XCIgW3hBbGlnbm1lbnRdPVwiZmllbGQueEFsaWdubWVudFwiXG4gICAgICAgICAgICAgICAgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiIChlbGVtZW50Q2xpY2spPVwib25DbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L3BlcC1pbnRlcm5hbC1idXR0b24+XG5cbiAgICAgICAgICAgIDxwZXAtdGV4dGFyZWEgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0YXJlYSdcIiBbZm9ybV09XCJmb3JtXCIgW2tleV09XCJmaWVsZC5rZXlcIiBbdmFsdWVdPVwiZmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZC5sYWJlbFwiIFttYW5kYXRvcnldPVwiZmllbGQubWFuZGF0b3J5XCIgW2Rpc2FibGVkXT1cImZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZmllbGQucmVhZG9ubHlcIiBbbWF4RmllbGRDaGFyYWN0ZXJzXT1cImZpZWxkLm1heEZpZWxkQ2hhcmFjdGVyc1wiXG4gICAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCJmaWVsZC50ZXh0Q29sb3JcIiBbeEFsaWdubWVudF09XCJmaWVsZC54QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwiZmllbGQucm93U3BhblwiXG4gICAgICAgICAgICAgICAgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiPlxuICAgICAgICAgICAgPC9wZXAtdGV4dGFyZWE+XG5cbiAgICAgICAgICAgIDxwZXAtcXVhbnRpdHktc2VsZWN0b3IgKm5nU3dpdGNoQ2FzZT1cIidxcydcIiBbaWRdPVwiZmllbGQua2V5XCIgW2Zvcm1dPVwiZm9ybVwiIFtrZXldPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmllbGQudmFsdWVcIiBbZm9ybWF0dGVkVmFsdWVdPVwiZmllbGQuZm9ybWF0dGVkVmFsdWVcIiBbbGFiZWxdPVwiZmllbGQubGFiZWxcIiBbdHlwZV09XCJmaWVsZC50eXBlXCJcbiAgICAgICAgICAgICAgICBbbWFuZGF0b3J5XT1cImZpZWxkLm1hbmRhdG9yeVwiIFtkaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZFwiIFtyZWFkb25seV09XCJmaWVsZC5yZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCJmaWVsZC50ZXh0Q29sb3JcIiBbeEFsaWdubWVudF09XCJmaWVsZC54QWxpZ25tZW50XCIgW3Jvd1NwYW5dPVwiZmllbGQucm93U3BhblwiXG4gICAgICAgICAgICAgICAgW2xheW91dFR5cGVdPVwibGF5b3V0VHlwZVwiICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlZCgkZXZlbnQpXCIgKGVsZW1lbnRDbGljayk9XCJvbkNsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvcGVwLXF1YW50aXR5LXNlbGVjdG9yPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZvcm1hdHRlZFZhbHVlPy5sZW5ndGggPiAwOyB0aGVuIG5vdEVtcHR5QmxvY2s7IGVsc2UgZW1wdHlCbG9ja1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90RW1wdHlCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZC5jb250cm9sVHlwZSA9PT0gJ2F0dGFjaG1lbnQnIHx8IGZpZWxkLnR5cGUgPT09ICdsaW5rJzsgdGhlbiBsaW5rQmxvY2s7IGVsc2Ugbm90TGlua0Jsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xpbmtCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtpZF09XCJmaWVsZC5rZXlcIiBjbGFzcz1cImNvbG9yLWxpbmsgYm9keS1zbSBwZXAtcmVwb3J0LWlucHV0IHJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkLmZvcm1hdHRlZFZhbHVlICE9IG51bGxcIiB0aXRsZT1cInt7IGZpZWxkLmZvcm1hdHRlZFZhbHVlIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgZmllbGQudmFsdWUgfX1cIj57eyBmaWVsZC5mb3JtYXR0ZWRWYWx1ZSB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RMaW5rQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaWRdPVwiZmllbGQua2V5XCIgY2xhc3M9XCJib2R5LXNtIHBlcC1yZXBvcnQtaW5wdXQgcmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgZmllbGQuZm9ybWF0dGVkVmFsdWUgfX1cIiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBmaWVsZC50ZXh0Q29sb3IgfVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZm9ybWF0dGVkVmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5QmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|