barsa-novin-ray-core 1.0.447 → 1.0.448
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/esm2020/lib/abstract-classes/report-view-base.component.mjs +8 -2
- package/esm2020/lib/constants.mjs +3 -2
- package/esm2020/lib/dynamic-component/base-view-item-props.mjs +23 -22
- package/esm2020/lib/dynamic-component/base-view-props.mjs +7 -2
- package/esm2020/lib/services/notification-sw.service.mjs +11 -1
- package/fesm2015/barsa-novin-ray-core.mjs +46 -23
- package/fesm2015/barsa-novin-ray-core.mjs.map +1 -1
- package/fesm2020/barsa-novin-ray-core.mjs +46 -23
- package/fesm2020/barsa-novin-ray-core.mjs.map +1 -1
- package/lib/abstract-classes/report-view-base.component.d.ts +3 -1
- package/lib/constants.d.ts +1 -1
- package/lib/dynamic-component/base-view-item-props.d.ts +1 -2
- package/lib/dynamic-component/base-view-props.d.ts +3 -1
- package/package.json +1 -1
|
@@ -14,6 +14,7 @@ export class ReportViewBaseComponent extends BaseComponent {
|
|
|
14
14
|
this._portalService = _portalService;
|
|
15
15
|
this._uploadService = _uploadService;
|
|
16
16
|
this.rowActivable = true;
|
|
17
|
+
this.escapeKey = new EventEmitter();
|
|
17
18
|
this.resetWorkflowState = new EventEmitter();
|
|
18
19
|
this.deselectAll = new EventEmitter();
|
|
19
20
|
this.editFormPanelCancel = new EventEmitter();
|
|
@@ -167,6 +168,9 @@ export class ReportViewBaseComponent extends BaseComponent {
|
|
|
167
168
|
onEditFormPanelCancel(mo) {
|
|
168
169
|
this.editFormPanelCancel.emit(mo);
|
|
169
170
|
}
|
|
171
|
+
onEscapeKey(mo) {
|
|
172
|
+
this.escapeKey.emit(mo);
|
|
173
|
+
}
|
|
170
174
|
onEditFormPanelValueChange(mo) {
|
|
171
175
|
this.editFormPanelValueChange.emit(mo);
|
|
172
176
|
}
|
|
@@ -211,7 +215,7 @@ export class ReportViewBaseComponent extends BaseComponent {
|
|
|
211
215
|
_containerWidthChanged(_) { }
|
|
212
216
|
}
|
|
213
217
|
ReportViewBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ReportViewBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1.FindColumnByDbNamePipe }, { token: i2.UlvMainService }, { token: i2.PortalService }, { token: i2.UploadService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
214
|
-
ReportViewBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: ReportViewBaseComponent, selector: "bnrc-report-view-base", inputs: { contextView: "contextView", viewSetting: "viewSetting", allColumns: "allColumns", isCheckList: "isCheckList", hideToolbar: "hideToolbar", toolbarButtons: "toolbarButtons", allChecked: "allChecked", moDataList: "moDataList", UlvMainCtrlr: "UlvMainCtrlr", access: "access", groupby: "groupby", selectedCount: "selectedCount", conditionalFormats: "conditionalFormats", parentHeight: "parentHeight", deviceName: "deviceName", deviceSize: "deviceSize", contextMenuItems: "contextMenuItems", columns: "columns", allowInlineEdit: "allowInlineEdit", secondaryColumns: "secondaryColumns", popin: "popin", customFieldInfo: "customFieldInfo", hasSummary: "hasSummary", hasSelected: "hasSelected", columnsCount: "columnsCount", hideOpenIcon: "hideOpenIcon", openOnClick: "openOnClick", typeDefId: "typeDefId", reportId: "reportId", listEditViewId: "listEditViewId", typeViewId: "typeViewId", extraRelation: "extraRelation", relationList: "relationList", disableResponsive: "disableResponsive", rowItem: "rowItem", mobileOrTablet: "mobileOrTablet", inDialog: "inDialog", isMultiSelect: "isMultiSelect", fullscreen: "fullscreen", hideSearchpanel: "hideSearchpanel", newInlineEditMo: "newInlineEditMo", selectedMo: "selectedMo", inlineEditMode: "inlineEditMode", onlyInlineEdit: "onlyInlineEdit", rowHoverable: "rowHoverable", tlbButtons: "tlbButtons", formSetting: "formSetting", disableOverflowContextMenu: "disableOverflowContextMenu", rowActivable: "rowActivable", contentDensity: "contentDensity", rtl: "rtl", showOkCancelButtons: "showOkCancelButtons", title: "title", hasInlineDeleteButton: "hasInlineDeleteButton", hasInlineEditButton: "hasInlineEditButton", contextSetting: "contextSetting", gridFreeColumnSizing: "gridFreeColumnSizing", navigationArrow: "navigationArrow", cartableTemplates: "cartableTemplates", cartableChildsMo: "cartableChildsMo", pagingSetting: "pagingSetting", containerWidth: "containerWidth" }, outputs: { resetWorkflowState: "resetWorkflowState", deselectAll: "deselectAll", editFormPanelCancel: "editFormPanelCancel", editFormPanelSave: "editFormPanelSave", selectNextInlineRecord: "selectNextInlineRecord", editFormPanelValueChange: "editFormPanelValueChange", ulvCommandClick: "ulvCommandClick", sortAscending: "sortAscending", workflowShareButtons: "workflowShareButtons", sortDescending: "sortDescending", filter: "filter", executeToolbarButton: "executeToolbarButton", rowCheck: "rowCheck", rowClick: "rowClick", cartableFormClosed: "cartableFormClosed", createNewMo: "createNewMo", updateMo: "updateMo", expandClick: "expandClick", trackBySelectedFn: "trackBySelectedFn", allCheckbox: "allCheckbox", mandatory: "mandatory", columnResized: "columnResized", hasDetailsInRow: "hasDetailsInRow" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
218
|
+
ReportViewBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: ReportViewBaseComponent, selector: "bnrc-report-view-base", inputs: { contextView: "contextView", viewSetting: "viewSetting", allColumns: "allColumns", isCheckList: "isCheckList", hideToolbar: "hideToolbar", toolbarButtons: "toolbarButtons", allChecked: "allChecked", moDataList: "moDataList", UlvMainCtrlr: "UlvMainCtrlr", access: "access", groupby: "groupby", selectedCount: "selectedCount", conditionalFormats: "conditionalFormats", parentHeight: "parentHeight", deviceName: "deviceName", deviceSize: "deviceSize", contextMenuItems: "contextMenuItems", columns: "columns", allowInlineEdit: "allowInlineEdit", secondaryColumns: "secondaryColumns", popin: "popin", customFieldInfo: "customFieldInfo", hasSummary: "hasSummary", hasSelected: "hasSelected", columnsCount: "columnsCount", hideOpenIcon: "hideOpenIcon", openOnClick: "openOnClick", typeDefId: "typeDefId", reportId: "reportId", listEditViewId: "listEditViewId", typeViewId: "typeViewId", extraRelation: "extraRelation", relationList: "relationList", disableResponsive: "disableResponsive", rowItem: "rowItem", mobileOrTablet: "mobileOrTablet", inDialog: "inDialog", isMultiSelect: "isMultiSelect", fullscreen: "fullscreen", hideSearchpanel: "hideSearchpanel", newInlineEditMo: "newInlineEditMo", selectedMo: "selectedMo", inlineEditMode: "inlineEditMode", onlyInlineEdit: "onlyInlineEdit", rowHoverable: "rowHoverable", tlbButtons: "tlbButtons", formSetting: "formSetting", disableOverflowContextMenu: "disableOverflowContextMenu", rowActivable: "rowActivable", contentDensity: "contentDensity", rtl: "rtl", showOkCancelButtons: "showOkCancelButtons", title: "title", hasInlineDeleteButton: "hasInlineDeleteButton", hasInlineEditButton: "hasInlineEditButton", contextSetting: "contextSetting", gridFreeColumnSizing: "gridFreeColumnSizing", navigationArrow: "navigationArrow", cartableTemplates: "cartableTemplates", cartableChildsMo: "cartableChildsMo", pagingSetting: "pagingSetting", containerWidth: "containerWidth" }, outputs: { escapeKey: "escapeKey", resetWorkflowState: "resetWorkflowState", deselectAll: "deselectAll", editFormPanelCancel: "editFormPanelCancel", editFormPanelSave: "editFormPanelSave", selectNextInlineRecord: "selectNextInlineRecord", editFormPanelValueChange: "editFormPanelValueChange", ulvCommandClick: "ulvCommandClick", sortAscending: "sortAscending", workflowShareButtons: "workflowShareButtons", sortDescending: "sortDescending", filter: "filter", executeToolbarButton: "executeToolbarButton", rowCheck: "rowCheck", rowClick: "rowClick", cartableFormClosed: "cartableFormClosed", createNewMo: "createNewMo", updateMo: "updateMo", expandClick: "expandClick", trackBySelectedFn: "trackBySelectedFn", allCheckbox: "allCheckbox", mandatory: "mandatory", columnResized: "columnResized", hasDetailsInRow: "hasDetailsInRow" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
215
219
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ReportViewBaseComponent, decorators: [{
|
|
216
220
|
type: Component,
|
|
217
221
|
args: [{
|
|
@@ -343,6 +347,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
343
347
|
type: Input
|
|
344
348
|
}], pagingSetting: [{
|
|
345
349
|
type: Input
|
|
350
|
+
}], escapeKey: [{
|
|
351
|
+
type: Output
|
|
346
352
|
}], resetWorkflowState: [{
|
|
347
353
|
type: Output
|
|
348
354
|
}], deselectAll: [{
|
|
@@ -392,4 +398,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
392
398
|
}], containerWidth: [{
|
|
393
399
|
type: Input
|
|
394
400
|
}] } });
|
|
395
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXZpZXctYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL2Fic3RyYWN0LWNsYXNzZXMvcmVwb3J0LXZpZXctYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUlULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQXdCakQsTUFBTSxPQUFPLHVCQUEyRCxTQUFRLGFBQWE7SUFtR3pGLFlBQ2MsR0FBZSxFQUNmLElBQXVCLEVBQ3ZCLFVBQXFCLEVBQ3JCLG1CQUEyQyxFQUMzQyxlQUErQixFQUMvQixjQUE2QixFQUNqQixjQUE4QjtRQUVwRCxLQUFLLEVBQUUsQ0FBQztRQVJFLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0Msb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQ2pCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXpEL0MsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFhbkIsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUM5QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDdkMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDOUQsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDNUQsMkJBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7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Q00sY0FBYztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBSZW5kZXJlcjIsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVGVtcGxhdGVSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udGVudERlbnNpdHkgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbmRDb2x1bW5CeURiTmFtZVBpcGUgfSBmcm9tICcuLi9waXBlcyc7XHJcbmltcG9ydCB7IFBvcnRhbFNlcnZpY2UsIFVsdk1haW5TZXJ2aWNlLCBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQge1xyXG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxyXG4gICAgY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MsXHJcbiAgICBEZWZhdWx0Q29tbWFuZHNBY2Nlc3MsXHJcbiAgICBEZXZpY2VTaXplLFxyXG4gICAgRm9ybVNldHRpbmcsXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgUmVsYXRpb25JdGVtVHlwZSxcclxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXHJcbiAgICBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZyxcclxuICAgIFNoYXJlQnV0dG9uc0Nob2ljZURlZixcclxuICAgIFR5cGVVbHZNYWluQ3RybHIsXHJcbiAgICBQYWdpbmdTZXR0aW5nLFxyXG4gICAgTWVudUl0ZW1cclxufSBmcm9tICcuL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYm5yYy1yZXBvcnQtdmlldy1iYXNlJyxcclxuICAgIHRlbXBsYXRlOiAnJyxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBvcnRWaWV3QmFzZUNvbXBvbmVudDxUIGV4dGVuZHMgVWlSZXBvcnRWaWV3QmFzZVNldHRpbmc+IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBjb250ZXh0VmlldzogYW55O1xyXG4gICAgQElucHV0KCkgdmlld1NldHRpbmc6IFQ7XHJcbiAgICBASW5wdXQoKSBhbGxDb2x1bW5zOiBhbnk7XHJcbiAgICBASW5wdXQoKSBpc0NoZWNrTGlzdDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGhpZGVUb29sYmFyOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdG9vbGJhckJ1dHRvbnM6IE1lbnVJdGVtW107XHJcbiAgICBASW5wdXQoKSBhbGxDaGVja2VkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbW9EYXRhTGlzdDogYW55O1xyXG4gICAgQElucHV0KCkgVWx2TWFpbkN0cmxyOiBUeXBlVWx2TWFpbkN0cmxyO1xyXG4gICAgQElucHV0KCkgYWNjZXNzOiBEZWZhdWx0Q29tbWFuZHNBY2Nlc3M7XHJcbiAgICBASW5wdXQoKSBncm91cGJ5OiBhbnk7XHJcbiAgICBASW5wdXQoKSBzZWxlY3RlZENvdW50OiBhbnk7XHJcbiAgICBASW5wdXQoKSBjb25kaXRpb25hbEZvcm1hdHM6IGFueTtcclxuICAgIEBJbnB1dCgpIHBhcmVudEhlaWdodDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgZGV2aWNlTmFtZTogRGV2aWNlU2l6ZTtcclxuICAgIEBJbnB1dCgpIGRldmljZVNpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZTtcclxuICAgIEBJbnB1dCgpIGNvbnRleHRNZW51SXRlbXM6IGFueVtdO1xyXG4gICAgQElucHV0KCkgY29sdW1uczogYW55O1xyXG4gICAgQElucHV0KCkgYWxsb3dJbmxpbmVFZGl0OiBhbnk7XHJcbiAgICBASW5wdXQoKSBzZWNvbmRhcnlDb2x1bW5zOiBhbnk7XHJcbiAgICBASW5wdXQoKSBwb3BpbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGN1c3RvbUZpZWxkSW5mbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IGFueTtcclxuICAgIEBJbnB1dCgpIGhhc1N1bW1hcnk6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBoYXNTZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGNvbHVtbnNDb3VudDogYW55O1xyXG4gICAgQElucHV0KCkgaGlkZU9wZW5JY29uOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgb3Blbk9uQ2xpY2s6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB0eXBlRGVmSWQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHJlcG9ydElkOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBsaXN0RWRpdFZpZXdJZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgdHlwZVZpZXdJZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZXh0cmFSZWxhdGlvbjogYW55O1xyXG4gICAgQElucHV0KCkgcmVsYXRpb25MaXN0OiBBcnJheTxSZWxhdGlvbkl0ZW1UeXBlPjtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVSZXNwb25zaXZlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcm93SXRlbTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIG1vYmlsZU9yVGFibGV0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaW5EaWFsb2c6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBpc011bHRpU2VsZWN0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgZnVsbHNjcmVlbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGhpZGVTZWFyY2hwYW5lbDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIG5ld0lubGluZUVkaXRNbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGw7XHJcbiAgICBASW5wdXQoKSBzZWxlY3RlZE1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsO1xyXG4gICAgQElucHV0KCkgaW5saW5lRWRpdE1vZGU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBvbmx5SW5saW5lRWRpdDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHJvd0hvdmVyYWJsZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHRsYkJ1dHRvbnM6IGFueVtdO1xyXG4gICAgQElucHV0KCkgZm9ybVNldHRpbmc6IEZvcm1TZXR0aW5nO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSByb3dBY3RpdmFibGUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgY29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5O1xyXG4gICAgQElucHV0KCkgcnRsO1xyXG4gICAgQElucHV0KCkgc2hvd09rQ2FuY2VsQnV0dG9ucztcclxuICAgIEBJbnB1dCgpIHRpdGxlO1xyXG4gICAgQElucHV0KCkgaGFzSW5saW5lRGVsZXRlQnV0dG9uOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGFzSW5saW5lRWRpdEJ1dHRvbjogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGNvbnRleHRTZXR0aW5nO1xyXG4gICAgQElucHV0KCkgZ3JpZEZyZWVDb2x1bW5TaXppbmc6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBuYXZpZ2F0aW9uQXJyb3c6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGNhcnRhYmxlVGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1TZXR0aW5nIH07XHJcbiAgICBASW5wdXQoKSBjYXJ0YWJsZUNoaWxkc01vOiB7IFtrZXk6IHN0cmluZ106IE1ldGFvYmplY3REYXRhTW9kZWwgfTtcclxuICAgIEBJbnB1dCgpIHBhZ2luZ1NldHRpbmc6IFBhZ2luZ1NldHRpbmc7XHJcbiAgICBAT3V0cHV0KCkgcmVzZXRXb3JrZmxvd1N0YXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIGRlc2VsZWN0QWxsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIGVkaXRGb3JtUGFuZWxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgZWRpdEZvcm1QYW5lbFNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2VsZWN0TmV4dElubGluZVJlY29yZCA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIEBPdXRwdXQoKSBlZGl0Rm9ybVBhbmVsVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgdWx2Q29tbWFuZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydEFzY2VuZGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIHdvcmtmbG93U2hhcmVCdXR0b25zID0gbmV3IEV2ZW50RW1pdHRlcjxTaGFyZUJ1dHRvbnNDaG9pY2VEZWY+KCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydERlc2NlbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBmaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBleGVjdXRlVG9vbGJhckJ1dHRvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpdGVtSWQ6IHN0cmluZzsgb3B0aW9ucz86IGFueSB9PigpO1xyXG4gICAgQE91dHB1dCgpIHJvd0NoZWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1vOyBpbmRleDsgY2F1c2U/IH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbW87IGluZGV4IH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2FydGFibGVGb3JtQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1vOyBpbmRleCB9PigpO1xyXG4gICAgQE91dHB1dCgpIGNyZWF0ZU5ld01vID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIHVwZGF0ZU1vID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgQE91dHB1dCgpIGV4cGFuZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgQE91dHB1dCgpIHRyYWNrQnlTZWxlY3RlZEZuID0gbmV3IEV2ZW50RW1pdHRlcjx7IGluZGV4OyByZWNvcmQgfT4oKTtcclxuICAgIEBPdXRwdXQoKSBhbGxDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgIEBPdXRwdXQoKSBtYW5kYXRvcnkgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgICBAT3V0cHV0KCkgY29sdW1uUmVzaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8Y29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3M+KCk7XHJcbiAgICBAT3V0cHV0KCkgaGFzRGV0YWlsc0luUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gICAgQElucHV0KCkgc2V0IGNvbnRhaW5lcldpZHRoKHZhbDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyV2lkdGggPSB2YWw7XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyV2lkdGhDaGFuZ2VkKHZhbCk7XHJcbiAgICB9XHJcbiAgICByZXNpemVkQnlVc2VyOiBib29sZWFuO1xyXG4gICAgZWxXaWR0aDogbnVtYmVyO1xyXG4gICAgY2FuVmlldyA9IGZhbHNlO1xyXG4gICAgZml0V2lkdGg6IGJvb2xlYW47XHJcbiAgICBmaXJzdFNlbGVjdGVkTWV0YW9iamVjdDogTWV0YW9iamVjdERhdGFNb2RlbDtcclxuICAgIGNvbnRleHRNZW51V2lkdGggPSAwO1xyXG4gICAgZmllbGREaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gICAgYWN0aW9uTGlzdDogYW55W107XHJcbiAgICBwcml2YXRlIF9zaW5nbGVDbGlja2VkOiBib29sZWFuO1xyXG4gICAgcHJvdGVjdGVkIF9jb250YWluZXJXaWR0aCA9IDA7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgX2VsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgX3JlbmRlcmVyMjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZmluZENvbHVtbkJ5RGJOYW1lOiBGaW5kQ29sdW1uQnlEYk5hbWVQaXBlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfdWx2TWFpblNlcnZpY2U6IFVsdk1haW5TZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX3VwbG9hZFNlcnZpY2U/OiBVcGxvYWRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNob3dWaWV3QnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhblZpZXcgJiYgIXRoaXMuaW5saW5lRWRpdE1vZGUgJiYgIXRoaXMuaGlkZU9wZW5JY29uO1xyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICBpZiAodGhpcy5hY2Nlc3MuVmlldyAmJiAhdGhpcy5zaG93T2tDYW5jZWxCdXR0b25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuVmlldyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWN0aW9uTGlzdCA9IHRoaXMuX2NyZWF0ZUFjdGlvbkJ1dHRvbnMoKTtcclxuICAgICAgICB0aGlzLmVsV2lkdGggPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgICAgIHRoaXMuZml0V2lkdGggPSB0aGlzLnZpZXdTZXR0aW5nPy5GaXRXaWR0aCA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRGljdCA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoYykgPT4gKGZpZWxkRGljdFtjLkNhcHRpb25dID0gYy5OYW1lKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGREaWN0ID0gZmllbGREaWN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX2NyZWF0ZUFjdGlvbkJ1dHRvbnMoKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbnM6IGFueVtdID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzSW5saW5lRWRpdEJ1dHRvbikge1xyXG4gICAgICAgICAgICBidXR0b25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZ2x5cGg6ICdlZGl0JyxcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbicsXHJcbiAgICAgICAgICAgICAgICBjbG9zZU9uQ2xpY2s6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiAoZTogeyBtbzogTWV0YW9iamVjdERhdGFNb2RlbDsgaW5kZXg6IG51bWJlciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBtbywgaW5kZXggfSA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRCdG4gPSB0aGlzLnRvb2xiYXJCdXR0b25zLmZpbmQoKHRiKSA9PiB0Yj8uaXRlbUlkID09PSAnRWRpdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZGl0QnRuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0QnRuIGFzIGFueSkuaGFuZGxlcihlZGl0QnRuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5oYXNJbmxpbmVEZWxldGVCdXR0b24pIHtcclxuICAgICAgICAgICAgYnV0dG9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGdseXBoOiAnZGVsZXRlJyxcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbicsXHJcbiAgICAgICAgICAgICAgICBjbG9zZU9uQ2xpY2s6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiAoZTogeyBtbzogTWV0YW9iamVjdERhdGFNb2RlbDsgaW5kZXg6IG51bWJlciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBtbywgaW5kZXggfSA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZUJ0biA9IHRoaXMudG9vbGJhckJ1dHRvbnMuZmluZCgodGIpID0+IHRiPy5pdGVtSWQgPT09ICdEZWxldGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlQnRuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVCdG4gYXMgYW55KS5oYW5kbGVyKGRlbGV0ZUJ0bik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1ZpZXdCdXR0b24pIHtcclxuICAgICAgICAgICAgYnV0dG9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGdseXBoOiB0aGlzLm5hdmlnYXRpb25BcnJvdyxcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICByb2xlOiAncHJlc2VudGF0aW9uJyxcclxuICAgICAgICAgICAgICAgIGNsb3NlT25DbGljazogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IChlOiB7IG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsOyBpbmRleDogbnVtYmVyIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG1vLCBpbmRleCB9ID0gZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUm93Q2xpY2soeyBtbywgaW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBsZXQgZGV0ZWN0Q2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1trZXldID0gY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGRldGVjdENoYW5nZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGRldGVjdENoYW5nZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25EZXNlbGVjdEFsbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRlc2VsZWN0QWxsLmVtaXQoKTtcclxuICAgIH1cclxuICAgIG9uUm93Q2hlY2soeyBtbywgaW5kZXggfSk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMuX3NpbmdsZUNsaWNrZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vICAgaWYgKHRoaXMuX3NpbmdsZUNsaWNrZWQpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5yb3dDaGVjay5lbWl0KHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0sIDMwKTtcclxuICAgICAgICAvLyB0aGlzLnJvd0NoZWNrLmVtaXQoeyBtbywgaW5kZXgsIGNhdXNlIH0pO1xyXG4gICAgICAgIHRoaXMucm93Q2hlY2suZW1pdCh7IG1vLCBpbmRleCB9KTtcclxuICAgIH1cclxuICAgIG9uV29ya2Zsb3dTaGFyZUJ1dHRvbnMoZTogU2hhcmVCdXR0b25zQ2hvaWNlRGVmKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd1NoYXJlQnV0dG9ucy5lbWl0KGUpO1xyXG4gICAgfVxyXG4gICAgb25PbGdvRXZlbnRzKGU6IHsgdGl0bGU6IHN0cmluZzsgZGF0YT86IGFueSB9KTogdm9pZCB7XHJcbiAgICAgICAgdGhpc1tlLnRpdGxlXS5lbWl0KGUuZGF0YSk7XHJcbiAgICB9XHJcbiAgICBvblJvd0NsaWNrKHsgbW8sIGluZGV4IH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zaW5nbGVDbGlja2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgbW8sIGluZGV4IH0pO1xyXG4gICAgfVxyXG4gICAgb25DYXJ0YWJsZUZvcm1DbG9zZWQoeyBtbywgaW5kZXggfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2FydGFibGVGb3JtQ2xvc2VkLmVtaXQoeyBtbywgaW5kZXggfSk7XHJcbiAgICB9XHJcbiAgICBvbkV4cGFuZENsaWNrKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRDbGljay5lbWl0KG1vKTtcclxuICAgIH1cclxuICAgIG9uQWxsQ2hlY2tib3goY2hlY2tlZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWxsQ2hlY2tib3guZW1pdChjaGVja2VkKTtcclxuICAgIH1cclxuICAgIG9uQ2xlYXJDaGVja2JveCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFsbENoZWNrYm94LmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgb25TZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3ROZXh0SW5saW5lUmVjb3JkLmVtaXQobW8pO1xyXG4gICAgfVxyXG4gICAgb25FZGl0Rm9ybVBhbmVsU2F2ZShtbyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZWRpdEZvcm1QYW5lbFNhdmUuZW1pdChtbyk7XHJcbiAgICB9XHJcbiAgICBvbkVkaXRGb3JtUGFuZWxDYW5jZWwobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVkaXRGb3JtUGFuZWxDYW5jZWwuZW1pdChtbyk7XHJcbiAgICB9XHJcbiAgICBvbkVkaXRGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZWRpdEZvcm1QYW5lbFZhbHVlQ2hhbmdlLmVtaXQobW8pO1xyXG4gICAgfVxyXG4gICAgb25VbHZDb21tYW5kKHsgbW8sIGluZGV4IH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVsdkNvbW1hbmRDbGljay5lbWl0KHsgbW8sIGluZGV4IH0pO1xyXG4gICAgfVxyXG4gICAgb25Tb3J0QXNjZW5kaW5nKGNvbHVtbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc29ydEFzY2VuZGluZy5lbWl0KGNvbHVtbik7XHJcbiAgICB9XHJcbiAgICBvblNvcnREZXNjZW5kaW5nKGNvbHVtbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc29ydERlc2NlbmRpbmcuZW1pdChjb2x1bW4pO1xyXG4gICAgfVxyXG4gICAgb25GaWx0ZXIoY29sdW1uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIuZW1pdChjb2x1bW4pO1xyXG4gICAgfVxyXG4gICAgb25EeW5hbWljQ29tcG9uZW50RXZlbnRzKGU6IHsgdGl0bGU6IHN0cmluZzsgZGF0YT86IGFueSB9LCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAoZS50aXRsZSkge1xyXG4gICAgICAgICAgICBjYXNlICdyb3dDaGVjayc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uUm93Q2hlY2soeyBtbywgaW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncm93Q2xpY2snOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vblJvd0NsaWNrKHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3VsdkNvbW1hbmQnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vblVsdkNvbW1hbmQoeyBtbywgaW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBfdHJhY2tCeVNlbGVjdGVkRm4oaW5kZXgsIHJlY29yZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudHJhY2tCeVNlbGVjdGVkRm4/LmVtaXQoeyBpbmRleCwgcmVjb3JkIH0pO1xyXG4gICAgfVxyXG4gICAgX3RyYWNrQnlDb2x1bW4oaW5kZXg6IG51bWJlciwgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7Y29sdW1uLk5hbWV9JHtpbmRleH1gO1xyXG4gICAgfVxyXG4gICAgX3RyYWNrQnlSb3coaW5kZXg6IG51bWJlciwgcm93OiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7cm93LiRHcm91cCA/IHJvdy4kR3JvdXAgOiByb3cuSWR9JHtpbmRleH1gO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgcHJvdGVjdGVkIF9jb250YWluZXJXaWR0aENoYW5nZWQoXzogbnVtYmVyKTogdm9pZCB7fVxyXG59XHJcbiJdfQ==
|
|
401
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXZpZXctYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL2Fic3RyYWN0LWNsYXNzZXMvcmVwb3J0LXZpZXctYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUlULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQXdCakQsTUFBTSxPQUFPLHVCQUEyRCxTQUFRLGFBQWE7SUFvR3pGLFlBQ2MsR0FBZSxFQUNmLElBQXVCLEVBQ3ZCLFVBQXFCLEVBQ3JCLG1CQUEyQyxFQUMzQyxlQUErQixFQUMvQixjQUE2QixFQUNqQixjQUE4QjtRQUVwRCxLQUFLLEVBQUUsQ0FBQztRQVJFLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ3JCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0Msb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQ2pCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTFEL0MsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFhbkIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3BELHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDOUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQzlELHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FB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Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDTSxjQUFjO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxuICAgIFJlbmRlcmVyMixcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBUZW1wbGF0ZVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmluZENvbHVtbkJ5RGJOYW1lUGlwZSB9IGZyb20gJy4uL3BpcGVzJztcclxuaW1wb3J0IHsgUG9ydGFsU2VydmljZSwgVWx2TWFpblNlcnZpY2UsIFVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXHJcbiAgICBjb2x1bW5zUmVzaXplZEV2ZW50QXJncyxcclxuICAgIERlZmF1bHRDb21tYW5kc0FjY2VzcyxcclxuICAgIERldmljZVNpemUsXHJcbiAgICBGb3JtU2V0dGluZyxcclxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBSZWxhdGlvbkl0ZW1UeXBlLFxyXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcclxuICAgIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nLFxyXG4gICAgU2hhcmVCdXR0b25zQ2hvaWNlRGVmLFxyXG4gICAgVHlwZVVsdk1haW5DdHJscixcclxuICAgIFBhZ2luZ1NldHRpbmcsXHJcbiAgICBNZW51SXRlbVxyXG59IGZyb20gJy4vbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdibnJjLXJlcG9ydC12aWV3LWJhc2UnLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50PFQgZXh0ZW5kcyBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZz4gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBJbnB1dCgpIGNvbnRleHRWaWV3OiBhbnk7XHJcbiAgICBASW5wdXQoKSB2aWV3U2V0dGluZzogVDtcclxuICAgIEBJbnB1dCgpIGFsbENvbHVtbnM6IGFueTtcclxuICAgIEBJbnB1dCgpIGlzQ2hlY2tMaXN0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGlkZVRvb2xiYXI6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB0b29sYmFyQnV0dG9uczogTWVudUl0ZW1bXTtcclxuICAgIEBJbnB1dCgpIGFsbENoZWNrZWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBtb0RhdGFMaXN0OiBhbnk7XHJcbiAgICBASW5wdXQoKSBVbHZNYWluQ3RybHI6IFR5cGVVbHZNYWluQ3RybHI7XHJcbiAgICBASW5wdXQoKSBhY2Nlc3M6IERlZmF1bHRDb21tYW5kc0FjY2VzcztcclxuICAgIEBJbnB1dCgpIGdyb3VwYnk6IGFueTtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ291bnQ6IGFueTtcclxuICAgIEBJbnB1dCgpIGNvbmRpdGlvbmFsRm9ybWF0czogYW55O1xyXG4gICAgQElucHV0KCkgcGFyZW50SGVpZ2h0OiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBkZXZpY2VOYW1lOiBEZXZpY2VTaXplO1xyXG4gICAgQElucHV0KCkgZGV2aWNlU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplO1xyXG4gICAgQElucHV0KCkgY29udGV4dE1lbnVJdGVtczogYW55W107XHJcbiAgICBASW5wdXQoKSBjb2x1bW5zOiBhbnk7XHJcbiAgICBASW5wdXQoKSBhbGxvd0lubGluZUVkaXQ6IGFueTtcclxuICAgIEBJbnB1dCgpIHNlY29uZGFyeUNvbHVtbnM6IGFueTtcclxuICAgIEBJbnB1dCgpIHBvcGluOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY3VzdG9tRmllbGRJbmZvOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgYW55O1xyXG4gICAgQElucHV0KCkgaGFzU3VtbWFyeTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGhhc1NlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY29sdW1uc0NvdW50OiBhbnk7XHJcbiAgICBASW5wdXQoKSBoaWRlT3Blbkljb246IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBvcGVuT25DbGljazogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHR5cGVEZWZJZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcmVwb3J0SWQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGxpc3RFZGl0Vmlld0lkOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSB0eXBlVmlld0lkOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBleHRyYVJlbGF0aW9uOiBhbnk7XHJcbiAgICBASW5wdXQoKSByZWxhdGlvbkxpc3Q6IEFycmF5PFJlbGF0aW9uSXRlbVR5cGU+O1xyXG4gICAgQElucHV0KCkgZGlzYWJsZVJlc3BvbnNpdmU6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSByb3dJdGVtOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQElucHV0KCkgbW9iaWxlT3JUYWJsZXQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBpbkRpYWxvZzogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGlzTXVsdGlTZWxlY3Q6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBmdWxsc2NyZWVuOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaGlkZVNlYXJjaHBhbmVsOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbmV3SW5saW5lRWRpdE1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbDtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkTW86IE1ldGFvYmplY3REYXRhTW9kZWw7XHJcbiAgICBASW5wdXQoKSBpbmxpbmVFZGl0TW9kZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIG9ubHlJbmxpbmVFZGl0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcm93SG92ZXJhYmxlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgdGxiQnV0dG9uczogYW55W107XHJcbiAgICBASW5wdXQoKSBmb3JtU2V0dGluZzogRm9ybVNldHRpbmc7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlT3ZlcmZsb3dDb250ZXh0TWVudTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHJvd0FjdGl2YWJsZSA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBjb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHk7XHJcbiAgICBASW5wdXQoKSBydGw7XHJcbiAgICBASW5wdXQoKSBzaG93T2tDYW5jZWxCdXR0b25zO1xyXG4gICAgQElucHV0KCkgdGl0bGU7XHJcbiAgICBASW5wdXQoKSBoYXNJbmxpbmVEZWxldGVCdXR0b246IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBoYXNJbmxpbmVFZGl0QnV0dG9uOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY29udGV4dFNldHRpbmc7XHJcbiAgICBASW5wdXQoKSBncmlkRnJlZUNvbHVtblNpemluZzogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIG5hdmlnYXRpb25BcnJvdzogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgY2FydGFibGVUZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogRm9ybVNldHRpbmcgfTtcclxuICAgIEBJbnB1dCgpIGNhcnRhYmxlQ2hpbGRzTW86IHsgW2tleTogc3RyaW5nXTogTWV0YW9iamVjdERhdGFNb2RlbCB9O1xyXG4gICAgQElucHV0KCkgcGFnaW5nU2V0dGluZzogUGFnaW5nU2V0dGluZztcclxuICAgIEBPdXRwdXQoKSBlc2NhcGVLZXkgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgcmVzZXRXb3JrZmxvd1N0YXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIGRlc2VsZWN0QWxsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIGVkaXRGb3JtUGFuZWxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgZWRpdEZvcm1QYW5lbFNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgc2VsZWN0TmV4dElubGluZVJlY29yZCA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIEBPdXRwdXQoKSBlZGl0Rm9ybVBhbmVsVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgdWx2Q29tbWFuZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydEFzY2VuZGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIHdvcmtmbG93U2hhcmVCdXR0b25zID0gbmV3IEV2ZW50RW1pdHRlcjxTaGFyZUJ1dHRvbnNDaG9pY2VEZWY+KCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydERlc2NlbmRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBmaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBleGVjdXRlVG9vbGJhckJ1dHRvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpdGVtSWQ6IHN0cmluZzsgb3B0aW9ucz86IGFueSB9PigpO1xyXG4gICAgQE91dHB1dCgpIHJvd0NoZWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1vOyBpbmRleDsgY2F1c2U/IH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbW87IGluZGV4IH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2FydGFibGVGb3JtQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1vOyBpbmRleCB9PigpO1xyXG4gICAgQE91dHB1dCgpIGNyZWF0ZU5ld01vID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIHVwZGF0ZU1vID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgQE91dHB1dCgpIGV4cGFuZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgQE91dHB1dCgpIHRyYWNrQnlTZWxlY3RlZEZuID0gbmV3IEV2ZW50RW1pdHRlcjx7IGluZGV4OyByZWNvcmQgfT4oKTtcclxuICAgIEBPdXRwdXQoKSBhbGxDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgIEBPdXRwdXQoKSBtYW5kYXRvcnkgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgICBAT3V0cHV0KCkgY29sdW1uUmVzaXplZCA9IG5ldyBFdmVudEVtaXR0ZXI8Y29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3M+KCk7XHJcbiAgICBAT3V0cHV0KCkgaGFzRGV0YWlsc0luUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gICAgQElucHV0KCkgc2V0IGNvbnRhaW5lcldpZHRoKHZhbDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyV2lkdGggPSB2YWw7XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyV2lkdGhDaGFuZ2VkKHZhbCk7XHJcbiAgICB9XHJcbiAgICByZXNpemVkQnlVc2VyOiBib29sZWFuO1xyXG4gICAgZWxXaWR0aDogbnVtYmVyO1xyXG4gICAgY2FuVmlldyA9IGZhbHNlO1xyXG4gICAgZml0V2lkdGg6IGJvb2xlYW47XHJcbiAgICBmaXJzdFNlbGVjdGVkTWV0YW9iamVjdDogTWV0YW9iamVjdERhdGFNb2RlbDtcclxuICAgIGNvbnRleHRNZW51V2lkdGggPSAwO1xyXG4gICAgZmllbGREaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gICAgYWN0aW9uTGlzdDogYW55W107XHJcbiAgICBwcml2YXRlIF9zaW5nbGVDbGlja2VkOiBib29sZWFuO1xyXG4gICAgcHJvdGVjdGVkIF9jb250YWluZXJXaWR0aCA9IDA7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgX2VsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgX3JlbmRlcmVyMjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZmluZENvbHVtbkJ5RGJOYW1lOiBGaW5kQ29sdW1uQnlEYk5hbWVQaXBlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfdWx2TWFpblNlcnZpY2U6IFVsdk1haW5TZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX3VwbG9hZFNlcnZpY2U/OiBVcGxvYWRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNob3dWaWV3QnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhblZpZXcgJiYgIXRoaXMuaW5saW5lRWRpdE1vZGUgJiYgIXRoaXMuaGlkZU9wZW5JY29uO1xyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICBpZiAodGhpcy5hY2Nlc3MuVmlldyAmJiAhdGhpcy5zaG93T2tDYW5jZWxCdXR0b25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuVmlldyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWN0aW9uTGlzdCA9IHRoaXMuX2NyZWF0ZUFjdGlvbkJ1dHRvbnMoKTtcclxuICAgICAgICB0aGlzLmVsV2lkdGggPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgICAgIHRoaXMuZml0V2lkdGggPSB0aGlzLnZpZXdTZXR0aW5nPy5GaXRXaWR0aCA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRGljdCA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoYykgPT4gKGZpZWxkRGljdFtjLkNhcHRpb25dID0gYy5OYW1lKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGREaWN0ID0gZmllbGREaWN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX2NyZWF0ZUFjdGlvbkJ1dHRvbnMoKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbnM6IGFueVtdID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzSW5saW5lRWRpdEJ1dHRvbikge1xyXG4gICAgICAgICAgICBidXR0b25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZ2x5cGg6ICdlZGl0JyxcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbicsXHJcbiAgICAgICAgICAgICAgICBjbG9zZU9uQ2xpY2s6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiAoZTogeyBtbzogTWV0YW9iamVjdERhdGFNb2RlbDsgaW5kZXg6IG51bWJlciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBtbywgaW5kZXggfSA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRCdG4gPSB0aGlzLnRvb2xiYXJCdXR0b25zLmZpbmQoKHRiKSA9PiB0Yj8uaXRlbUlkID09PSAnRWRpdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlZGl0QnRuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0QnRuIGFzIGFueSkuaGFuZGxlcihlZGl0QnRuKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5oYXNJbmxpbmVEZWxldGVCdXR0b24pIHtcclxuICAgICAgICAgICAgYnV0dG9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGdseXBoOiAnZGVsZXRlJyxcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcm9sZTogJ3ByZXNlbnRhdGlvbicsXHJcbiAgICAgICAgICAgICAgICBjbG9zZU9uQ2xpY2s6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiAoZTogeyBtbzogTWV0YW9iamVjdERhdGFNb2RlbDsgaW5kZXg6IG51bWJlciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBtbywgaW5kZXggfSA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZUJ0biA9IHRoaXMudG9vbGJhckJ1dHRvbnMuZmluZCgodGIpID0+IHRiPy5pdGVtSWQgPT09ICdEZWxldGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlQnRuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVCdG4gYXMgYW55KS5oYW5kbGVyKGRlbGV0ZUJ0bik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1ZpZXdCdXR0b24pIHtcclxuICAgICAgICAgICAgYnV0dG9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGdseXBoOiB0aGlzLm5hdmlnYXRpb25BcnJvdyxcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICByb2xlOiAncHJlc2VudGF0aW9uJyxcclxuICAgICAgICAgICAgICAgIGNsb3NlT25DbGljazogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IChlOiB7IG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsOyBpbmRleDogbnVtYmVyIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG1vLCBpbmRleCB9ID0gZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUm93Q2xpY2soeyBtbywgaW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBsZXQgZGV0ZWN0Q2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1trZXldID0gY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGRldGVjdENoYW5nZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGRldGVjdENoYW5nZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25EZXNlbGVjdEFsbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRlc2VsZWN0QWxsLmVtaXQoKTtcclxuICAgIH1cclxuICAgIG9uUm93Q2hlY2soeyBtbywgaW5kZXggfSk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMuX3NpbmdsZUNsaWNrZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vICAgaWYgKHRoaXMuX3NpbmdsZUNsaWNrZWQpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5yb3dDaGVjay5lbWl0KHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0sIDMwKTtcclxuICAgICAgICAvLyB0aGlzLnJvd0NoZWNrLmVtaXQoeyBtbywgaW5kZXgsIGNhdXNlIH0pO1xyXG4gICAgICAgIHRoaXMucm93Q2hlY2suZW1pdCh7IG1vLCBpbmRleCB9KTtcclxuICAgIH1cclxuICAgIG9uV29ya2Zsb3dTaGFyZUJ1dHRvbnMoZTogU2hhcmVCdXR0b25zQ2hvaWNlRGVmKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd1NoYXJlQnV0dG9ucy5lbWl0KGUpO1xyXG4gICAgfVxyXG4gICAgb25PbGdvRXZlbnRzKGU6IHsgdGl0bGU6IHN0cmluZzsgZGF0YT86IGFueSB9KTogdm9pZCB7XHJcbiAgICAgICAgdGhpc1tlLnRpdGxlXS5lbWl0KGUuZGF0YSk7XHJcbiAgICB9XHJcbiAgICBvblJvd0NsaWNrKHsgbW8sIGluZGV4IH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zaW5nbGVDbGlja2VkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgbW8sIGluZGV4IH0pO1xyXG4gICAgfVxyXG4gICAgb25DYXJ0YWJsZUZvcm1DbG9zZWQoeyBtbywgaW5kZXggfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2FydGFibGVGb3JtQ2xvc2VkLmVtaXQoeyBtbywgaW5kZXggfSk7XHJcbiAgICB9XHJcbiAgICBvbkV4cGFuZENsaWNrKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRDbGljay5lbWl0KG1vKTtcclxuICAgIH1cclxuICAgIG9uQWxsQ2hlY2tib3goY2hlY2tlZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWxsQ2hlY2tib3guZW1pdChjaGVja2VkKTtcclxuICAgIH1cclxuICAgIG9uQ2xlYXJDaGVja2JveCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFsbENoZWNrYm94LmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgb25TZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3ROZXh0SW5saW5lUmVjb3JkLmVtaXQobW8pO1xyXG4gICAgfVxyXG4gICAgb25FZGl0Rm9ybVBhbmVsU2F2ZShtbyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZWRpdEZvcm1QYW5lbFNhdmUuZW1pdChtbyk7XHJcbiAgICB9XHJcbiAgICBvbkVkaXRGb3JtUGFuZWxDYW5jZWwobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVkaXRGb3JtUGFuZWxDYW5jZWwuZW1pdChtbyk7XHJcbiAgICB9XHJcbiAgICBvbkVzY2FwZUtleShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZXNjYXBlS2V5LmVtaXQobW8pO1xyXG4gICAgfVxyXG4gICAgb25FZGl0Rm9ybVBhbmVsVmFsdWVDaGFuZ2UobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVkaXRGb3JtUGFuZWxWYWx1ZUNoYW5nZS5lbWl0KG1vKTtcclxuICAgIH1cclxuICAgIG9uVWx2Q29tbWFuZCh7IG1vLCBpbmRleCB9KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51bHZDb21tYW5kQ2xpY2suZW1pdCh7IG1vLCBpbmRleCB9KTtcclxuICAgIH1cclxuICAgIG9uU29ydEFzY2VuZGluZyhjb2x1bW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNvcnRBc2NlbmRpbmcuZW1pdChjb2x1bW4pO1xyXG4gICAgfVxyXG4gICAgb25Tb3J0RGVzY2VuZGluZyhjb2x1bW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNvcnREZXNjZW5kaW5nLmVtaXQoY29sdW1uKTtcclxuICAgIH1cclxuICAgIG9uRmlsdGVyKGNvbHVtbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyLmVtaXQoY29sdW1uKTtcclxuICAgIH1cclxuICAgIG9uRHluYW1pY0NvbXBvbmVudEV2ZW50cyhlOiB7IHRpdGxlOiBzdHJpbmc7IGRhdGE/OiBhbnkgfSwgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKGUudGl0bGUpIHtcclxuICAgICAgICAgICAgY2FzZSAncm93Q2hlY2snOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3Jvd0NsaWNrJzpcclxuICAgICAgICAgICAgICAgIHRoaXMub25Sb3dDbGljayh7IG1vLCBpbmRleCB9KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd1bHZDb21tYW5kJzpcclxuICAgICAgICAgICAgICAgIHRoaXMub25VbHZDb21tYW5kKHsgbW8sIGluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgX3RyYWNrQnlTZWxlY3RlZEZuKGluZGV4LCByZWNvcmQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRyYWNrQnlTZWxlY3RlZEZuPy5lbWl0KHsgaW5kZXgsIHJlY29yZCB9KTtcclxuICAgIH1cclxuICAgIF90cmFja0J5Q29sdW1uKGluZGV4OiBudW1iZXIsIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5OYW1lfSR7aW5kZXh9YDtcclxuICAgIH1cclxuICAgIF90cmFja0J5Um93KGluZGV4OiBudW1iZXIsIHJvdzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke3Jvdy4kR3JvdXAgPyByb3cuJEdyb3VwIDogcm93LklkfSR7aW5kZXh9YDtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHByb3RlY3RlZCBfY29udGFpbmVyV2lkdGhDaGFuZ2VkKF86IG51bWJlcik6IHZvaWQge31cclxufVxyXG4iXX0=
|
|
@@ -477,7 +477,7 @@ export function getNewMoGridEditor(formSettings, typedefId) {
|
|
|
477
477
|
const newFormSettings = JSON.parse(JSON.stringify(formSettings));
|
|
478
478
|
return { ...newFormSettings.Data.Mo, $TypeDefId: typedefId };
|
|
479
479
|
}
|
|
480
|
-
export function createGridEditorFormPanel(formSettings, mo, typedef, relation, rewriteLayout = true) {
|
|
480
|
+
export function createGridEditorFormPanel(formSettings, mo, typedef, relation, rewriteLayout = true, UlvMainCtrlr = null) {
|
|
481
481
|
const newFormSettings = JSON.parse(JSON.stringify(formSettings));
|
|
482
482
|
newFormSettings.Data.Mo = { ...mo, $TypeDefId: typedef };
|
|
483
483
|
if (rewriteLayout) {
|
|
@@ -499,6 +499,7 @@ export function createGridEditorFormPanel(formSettings, mo, typedef, relation, r
|
|
|
499
499
|
const formPanelCtrlr = new BarsaApi.Ul.FormPanelCtrlr({
|
|
500
500
|
Setting: newFormSettings,
|
|
501
501
|
Relation: relation,
|
|
502
|
+
UlvMainCtrlr: UlvMainCtrlr,
|
|
502
503
|
Features: {
|
|
503
504
|
Workflow: false,
|
|
504
505
|
Toolbar: false,
|
|
@@ -733,4 +734,4 @@ export function ChangeLayoutInfoCustomUi(layoutInfo, componentUi) {
|
|
|
733
734
|
debugger;
|
|
734
735
|
layoutInfo.FieldUi.Setting.CustomUi = componentUi;
|
|
735
736
|
}
|
|
736
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFjeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM1Qiw2RUFBVyxDQUFBO0lBQ1gscUZBQWUsQ0FBQTtJQUNmLG1GQUFjLENBQUE7SUFDZCxtRkFBYyxDQUFBO0FBQ2xCLENBQUMsRUFMVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBSy9CO0FBQ0QsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxTQUFzQixFQUN0QixPQUFnQixFQUNoQixnQkFBNEIsRUFDNUIsMEJBQW1DLEVBQ25DLElBQTBCLEVBRTFCLFVBQWlDLEVBQ2pDLE9BQTJCO0lBRTNCLFFBQVEsSUFBSSxFQUFFO1FBQ1YsS0FBSyxvQkFBb0IsQ0FBQyxXQUFXO1lBQ2pDLE9BQU8sb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RyxLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsT0FBTyxrQ0FBa0MsQ0FDckMsU0FBUyxFQUNULE9BQU8sRUFDUCwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FDVixDQUFDO1FBQ04sS0FBSyxvQkFBb0IsQ0FBQyxjQUFjO1lBQ3BDLE1BQU0sZ0JBQWdC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LElBQUksQ0FBQztJQUNmLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0MsT0FBTyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsZUFBZTtJQUM3QyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDaEMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDOUU7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUM7QUFDRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQVk7SUFDaEMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUNELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBSTtJQUN4QixJQUFJLENBQUMsSUFBSSxFQUFF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QUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNuRDtBQUNMLENBQUM7QUFVRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQ3JCLHVHQUF1RyxDQUFDO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx3Q0FBd0MsQ0FBQztBQUN0RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUV2QyxNQUFNLFVBQVUsd0JBQXdCLENBQUMsVUFBeUIsRUFBRSxXQUFzQjtJQUN0RixRQUFRLENBQUM7SUFDVCxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG5pbXBvcnQgeyBfaXNOdW1iZXJWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi9hYnN0cmFjdC1jbGFzc2VzL2JhcnNhLWFwaSc7XHJcbmltcG9ydCB7XHJcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXHJcbiAgICBDb2xTZXR0aW5nLFxyXG4gICAgRWpyYXlPbGdvLFxyXG4gICAgRm9ybVNldHRpbmcsXHJcbiAgICBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbCxcclxuICAgIEdyaWRTZXR0aW5nLFxyXG4gICAgTGF5b3V0U2V0dGluZyxcclxuICAgIE1lbnVJdGVtLFxyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXHJcbiAgICBTb3J0U2V0dGluZ1xyXG59IGZyb20gJy4vYWJzdHJhY3QtY2xhc3Nlcy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBEYXRlSGlqcmlTZXJ2aWNlLCBEYXRlTWlsYWRpU2VydmljZSwgRGF0ZVNlcnZpY2UsIERhdGVTaGFtc2lTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlLXNlcnZpY2VzJztcclxuaW1wb3J0ICogYXMgRGV2aWNlIGZyb20gJy4vZGV2aWNlJztcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbG9nLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGVudW0gVGFibGVIZWFkZXJXaWR0aE1vZGUge1xyXG4gICAgRml0VG9Db2x1bW4sXHJcbiAgICBGaXRUb1Jvd0NvbnRlbnQsXHJcbiAgICBGaXRUb0NvbnRhaW5lcixcclxuICAgIEZyZWVDb2x1bW5TaXplXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVdpZHRoT2ZMaXN0Q29sdW1uKFxyXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcclxuICAgIGNhblZpZXc6IGJvb2xlYW4sXHJcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLFxyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXHJcbiAgICBtb2RlOiBUYWJsZUhlYWRlcldpZHRoTW9kZSxcclxuXHJcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXHJcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW11cclxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db2x1bW46XHJcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVDb2x1bW5XaWR0aChjb250YWluZXIsIGNvbHVtbnMsIG1vRGF0YUxpc3QsIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93LCBjb250ZXh0TWVudUl0ZW1zKTtcclxuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29udGFpbmVyOlxyXG4gICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcixcclxuICAgICAgICAgICAgICAgIGNhblZpZXcsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyxcclxuICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbXMsXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GcmVlQ29sdW1uU2l6ZTpcclxuICAgICAgICAgICAgY29uc3QgY29udGV4dE1lbnVXaWR0aCA9IF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiAoeyAuLi5jb2x1bW4sICRXaWR0aDI6IGNvbHVtbi4kV2lkdGggfSkpO1xyXG4gICAgICAgICAgICByZXR1cm4geyBjb2x1bW5zOiBuZXdDb2x1bW5zLCBjb250ZXh0TWVudVdpZHRoOiBjb250ZXh0TWVudVdpZHRoIH07XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbHVtbldpZHRoRml0VG9Db250YWluZXIoXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIsXHJcbiAgICAgICAgICAgICAgICBjYW5WaWV3LFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3csXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1zLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aChcclxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sXHJcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXHJcbiAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbixcclxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW11cclxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sQ2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY29sdW1uLkFsaWFzKSArIDE2ICsgMTA7XHJcbiAgICAgICAgY29sdW1uLiRXaWR0aDIgPSBgJHtNYXRoLmNlaWwoY29sQ2FwdGlvbldpZHRoKX1weGA7XHJcbiAgICAgICAgLy8gaWYgKG1vZGUgPT09IFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29sdW1uKSB7XHJcbiAgICAgICAgLy8gfSBlbHNlIGlmIChtYXhXaWR0aCA8IGNvbENhcHRpb25XaWR0aCkge1xyXG4gICAgICAgIC8vICAgICBjb2x1bW4uJFdpZHRoMiA9IGAke01hdGguY2VpbChjb2xDYXB0aW9uV2lkdGgpfXB4YDtcclxuICAgICAgICAvLyB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBfY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xyXG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbikge1xyXG4gICAgY29uc3Qgd2lkdGggPSBjYWxjdWxhdGVNb0RhdGFMaXN0Q29udGVudFdpZHRoQnlDb2x1bW5OYW1lKG1vRGF0YUxpc3QsIGNvbHVtbik7XHJcbiAgICBjb2x1bW4uJFdpZHRoMiA9IGAke01hdGguY2VpbCh3aWR0aCl9cHhgO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTW9EYXRhTGlzdENvbnRlbnRXaWR0aEJ5Q29sdW1uTmFtZShcclxuICAgIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcclxuICAgIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtblxyXG4pOiBudW1iZXIge1xyXG4gICAgbGV0IG1heFdpZHRoID0gMDtcclxuICAgIG1vRGF0YUxpc3QuZm9yRWFjaCgoYywgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBjYXB0aW9uID0gZ2V0Q29sdW1uVmFsdWVPZk1vRGF0YUxpc3QoY29sdW1uLk5hbWUsIGMsIHVuZGVmaW5lZCwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgY2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY2FwdGlvbikgKyAxNjtcclxuICAgICAgICBpZiAobWF4V2lkdGggPCBjYXB0aW9uV2lkdGgpIHtcclxuICAgICAgICAgICAgbWF4V2lkdGggPSBjYXB0aW9uV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKG1heFdpZHRoKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcclxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcbiAgICBjYW5WaWV3OiBib29sZWFuLFxyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXHJcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLFxyXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdXHJcbik6IHsgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdOyBjb250ZXh0TWVudVdpZHRoOiBudW1iZXIgfSB7XHJcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDtcclxuICAgIGxldCBhbGxDb2xXaWR0aCA9IDA7XHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb2wuV2lkdGggPSBjb2wuV2lkdGggJiYgY29sLldpZHRoID4gMCA/IGNvbC5XaWR0aCA6IG1lYXN1cmVUZXh0KGNvbC5BbGlhcykgKyAyMDtcclxuICAgICAgICBhbGxDb2xXaWR0aCArPSBjb2wuV2lkdGg7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNhblZpZXdCdXR0b25XaWR0aCA9IGNhblZpZXcgPyA0MCA6IDA7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25XaWR0aCA9IDMwO1xyXG5cclxuICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBfY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xyXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zID0gY29udGFpbmVyV2lkdGggLSBzZWxlY3Rpb25XaWR0aCAtIGNhblZpZXdCdXR0b25XaWR0aCAtIGNvbnRleHRNZW51V2lkdGggLSAxMjtcclxuICAgIC8vIGFsbENvbFdpZHRoICs9IGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyAtIGFsbENvbFdpZHRoOy8vINmF2K3Yp9iz2KjZhyDYotiu2LHbjNmGINiz2KrZiNmGLtqG2YjZhiB3aWR0aCDZhdi02K7YtduMINmG2K/Yp9ix2K9cclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLmNlaWwoKGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyAqIGNvbC5XaWR0aCkgLyBhbGxDb2xXaWR0aCk7XHJcbiAgICAgICAgY29sLldpZHRoID0gbmV3V2lkdGg7XHJcbiAgICAgICAgY29sLiRXaWR0aDIgPSBgJHtuZXdXaWR0aH1weGA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IGNvbHVtbnM6IFsuLi5jb2x1bW5zXSwgY29udGV4dE1lbnVXaWR0aCB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBfY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtczogTWVudUl0ZW1bXSwgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgbGV0IGNvbnRleHRNZW51V2lkdGggPSBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA+IDEgPyA0MCA6IDA7XHJcbiAgICBjb25zdCBidG5QYWRkaW5nID0gMTQgKyAyICsgMTA7IC8vIHBhZGRpbmcgKyBib3JkZXIgKyBpZiB0ZXh0IGlzIG92ZXJmbG93ZWQgdGhlbiBhZGQgNSBwaXhlbC5zbyB3ZSBhbHdheXMgNSBweCB0byBpdC5cclxuICAgIGNvbnN0IHRkUGFkZGluZyA9IDE1ICsgMTsgLy8gcGFkZGluZyArIGJvcmRlclxyXG4gICAgY29uc3QgYnV0dG9uSWNvbldpZHRoID0gMTYgKyA2OyAvLyBzaXplICsgbWFyZ2luXHJcbiAgICBpZiAoZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cgfHwgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBjb250ZXh0TWVudVdpZHRoID0gMDtcclxuICAgICAgICBjb250ZXh0TWVudUl0ZW1zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgY29udGV4dE1lbnVXaWR0aCArPSBtZWFzdXJlVGV4dChjLnRleHQpICsgYnRuUGFkZGluZyArIHRkUGFkZGluZztcclxuICAgICAgICAgICAgY29udGV4dE1lbnVXaWR0aCArPSBjLmljb24gPyBidXR0b25JY29uV2lkdGggOiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRleHRNZW51V2lkdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtblZhbHVlT2ZNb0RhdGFMaXN0KFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBDb2x1bW5zPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IE5hbWU6IHN0cmluZzsgQ2FwdGlvbjogc3RyaW5nIH1bXSxcclxuICAgIGNhcHRpb24/OiBib29sZWFuXHJcbik6IGFueSB7XHJcbiAgICBsZXQgZmllbGROYW1lID0gQ29sdW1ucyA/IENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBuYW1lIHx8IGMuQWxpYXMgPT09IG5hbWUpPy5OYW1lIDogbmFtZTtcclxuICAgIGlmICghZmllbGROYW1lKSB7XHJcbiAgICAgICAgZmllbGROYW1lID0gbmFtZTtcclxuICAgIH1cclxuICAgIGxldCB2YWwgPSBmaWVsZE5hbWUgPyBtb1tmaWVsZE5hbWVdIDogdW5kZWZpbmVkO1xyXG4gICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICBsZXQgY2FwdGlvblZhbCA9IGZpZWxkTmFtZSA/IG1vW2ZpZWxkTmFtZV0/LiRDYXB0aW9uIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZSArICckQ2FwdGlvbiddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNhcHRpb25WYWwgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhbCA9IGNhcHRpb25WYWw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0lmQWxyZWFkeUxvYWRlZChwYXJlbnRNb2R1bGU6IGFueSwgbW9kdWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAocGFyZW50TW9kdWxlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiBJbXBvcnQgJHttb2R1bGVOYW1lfSBpbiB0aGUgQXBwTW9kdWxlIG9ubHkuYCk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVUZXh0KHRleHQ6IHN0cmluZywgZm9udFNpemU/OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbWVhc3VyZVRleHREb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVhc3VyZVRleHQnKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIGlmICghbWVhc3VyZVRleHREb20pIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjdHggPSBtZWFzdXJlVGV4dERvbS5nZXRDb250ZXh0KCcyZCcpIGFzIGFueTtcclxuICAgIGZvbnRTaXplID0gZm9udFNpemUgPyBmb250U2l6ZSA6ICcwLjg4NXJlbSc7XHJcbiAgICBjdHguZm9udCA9IGBub3JtYWwgJHtmb250U2l6ZX0gSVJBTllla2FuRGlnaXRzYDtcclxuICAgIHJldHVybiBjdHgubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbnJhdGVJbmxpbmVNb0lkKCkge1xyXG4gICAgcmV0dXJuIChCYXJzYUFwaS5pZEdlbmVyYXRvci0tKS50b1N0cmluZygpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBlbnVtVmFsdWVUb1N0cmluZ1NpemUodmFsdWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh2YWx1ZSkge1xyXG4gICAgICAgIGNhc2UgJzEnOlxyXG4gICAgICAgICAgICByZXR1cm4gJ3MnO1xyXG4gICAgICAgIGNhc2UgJzInOlxyXG4gICAgICAgICAgICByZXR1cm4gJ20nO1xyXG4gICAgICAgIGNhc2UgJzMnOlxyXG4gICAgICAgICAgICByZXR1cm4gJ2wnO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVVbHZDb21tYW5kSGFuZGxlcihidXR0b24sIG9wdGlvbnM/KTogdm9pZCB7XHJcbiAgICBpZiAoYnV0dG9uLkNvbW1hbmQgJiYgYnV0dG9uLkNvbW1hbmQuSGFuZGxlcikge1xyXG4gICAgICAgIGJ1dHRvbi5Db21tYW5kLkhhbmRsZXIoYnV0dG9uLCBvcHRpb25zKTtcclxuICAgIH0gZWxzZSBpZiAoYnV0dG9uLmhhbmRsZXIpIHtcclxuICAgICAgICBidXR0b24uaGFuZGxlci5iaW5kKGJ1dHRvbi5zY29wZSkoYnV0dG9uLCBvcHRpb25zKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pcXVlSWQocGFydHM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzdHJpbmdBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzOyBpKyspIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxyXG4gICAgICAgIGNvbnN0IFM0ID0gKCgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkgfCAwKS50b1N0cmluZygxNik7XHJcbiAgICAgICAgY29uc3QgUzRfOiBzdHJpbmcgPSBTNC5sZW5ndGggPiAwID8gUzQuc3Vic3RyaW5nKDEpIDogJyc7XHJcbiAgICAgICAgc3RyaW5nQXJyLnB1c2goUzRfKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJpbmdBcnIuam9pbignLScpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVNlcnZpY2UobG9nU2VydmljZTogTG9nU2VydmljZSwgY3VsdHVyZT8pOiBEYXRlU2VydmljZSB7XHJcbiAgICBjb25zdCBkZWZhdWx0Q3VsdHVyZSA9IGN1bHR1cmUgPz8gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdWx0dXJlO1xyXG4gICAgc3dpdGNoIChkZWZhdWx0Q3VsdHVyZSkge1xyXG4gICAgICAgIGNhc2UgJ2ZhLUlSJzpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlU2hhbXNpU2VydmljZShsb2dTZXJ2aWNlKTtcclxuICAgICAgICBjYXNlICdhci1BRSc6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZUhpanJpU2VydmljZShsb2dTZXJ2aWNlKTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVNaWxhZGlTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ZpcmVmb3goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IC0xO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZVBhdGgoXHJcbiAgICB0eXBlOiBzdHJpbmcsXHJcbiAgICBtb0lkOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgZmlsZUlkOiBzdHJpbmcsXHJcbiAgICBmaWVsZERlZklkPzogc3RyaW5nLFxyXG4gICAgc2l6ZT86IG51bWJlcixcclxuICAgIHNpemVIPzogbnVtYmVyXHJcbik6IHN0cmluZyB7XHJcbiAgICBtb0lkID0gbW9JZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQobW9JZCk7XHJcbiAgICBmaWxlSWQgPSBmaWxlSWQgPT0gbnVsbCA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVJZCk7XHJcbiAgICBmaWVsZERlZklkID0gZmllbGREZWZJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmllbGREZWZJZCk7XHJcbiAgICBzaXplID0gc2l6ZSA9PSBudWxsID8gMTI4IDogc2l6ZTtcclxuICAgIHNpemVIID0gc2l6ZUggPT0gbnVsbCA/IHNpemUgOiBzaXplSDtcclxuICAgIGNvbnN0IHVybCA9IGAvSUguYXNoeD90eT0ke3R5cGV9Jm1vSWQ9JHttb0lkfSZpZD0ke2ZpbGVJZH0mZmRJZD0ke2ZpZWxkRGVmSWR9JnNpPSR7c2l6ZX0mc2lIPSR7c2l6ZUh9YDtcclxuICAgIHJldHVybiB1cmw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjayk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9DaGVjayAmJiB7fS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIERldmljZVdpZHRoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPiAwID8gd2luZG93LmlubmVyV2lkdGggOiBzY3JlZW4ud2lkdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlclZhbHVlKGZpZWxkVmFsdWUpOiBhbnkge1xyXG4gICAgaWYgKHR5cGVvZiBmaWVsZFZhbHVlICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHJldHVybiBmaWVsZFZhbHVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsdWUgPSBmaWVsZFZhbHVlLlZhbHVlO1xyXG4gICAgY29uc3QgdmFsdWVDYXB0aW9uOiBzdHJpbmcgPSBmaWVsZFZhbHVlLlZhbHVlJENhcHRpb247XHJcbiAgICBsZXQgdmFsdWVPYmplY3RDYXB0aW9uID0gbnVsbDtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdmFsdWVPYmplY3RDYXB0aW9uID0gZmllbGRWYWx1ZS5WYWx1ZS4kQ2FwdGlvbjtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZU9iamVjdENhcHRpb24pIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVPYmplY3RDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlQ2FwdGlvbiAmJiAhdmFsdWVDYXB0aW9uLnN0YXJ0c1dpdGgoJ3RtcCcpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlQ2FwdGlvbjtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudEluVmlld3BvcnQyKGVsOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCB0b3AgPSBlbC5vZmZzZXRUb3A7XHJcbiAgICBsZXQgbGVmdCA9IGVsLm9mZnNldExlZnQ7XHJcbiAgICBjb25zdCB3aWR0aCA9IGVsLm9mZnNldFdpZHRoO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gZWwub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgIHdoaWxlIChlbC5vZmZzZXRQYXJlbnQpIHtcclxuICAgICAgICBlbCA9IGVsLm9mZnNldFBhcmVudDtcclxuICAgICAgICB0b3AgKz0gZWwub2Zmc2V0VG9wO1xyXG4gICAgICAgIGxlZnQgKz0gZWwub2Zmc2V0TGVmdDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHRvcCA8IHdpbmRvdy5wYWdlWU9mZnNldCArIHdpbmRvdy5pbm5lckhlaWdodCAmJlxyXG4gICAgICAgIGxlZnQgPCB3aW5kb3cucGFnZVhPZmZzZXQgKyB3aW5kb3cuaW5uZXJXaWR0aCAmJlxyXG4gICAgICAgIHRvcCArIGhlaWdodCA+IHdpbmRvdy5wYWdlWU9mZnNldCAmJlxyXG4gICAgICAgIGxlZnQgKyB3aWR0aCA+IHdpbmRvdy5wYWdlWE9mZnNldFxyXG4gICAgKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gUHJldmVudERlZmF1bEV2ZW50KGUpOiB2b2lkIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRIZWlnaHQoZWxEb206IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcclxuICAgIGxldCBwYXJlbnREb20gPSBlbERvbS5wYXJlbnRFbGVtZW50O1xyXG4gICAgbGV0IHBhcmVudEhlaWdodCA9IHBhcmVudERvbT8uY2xpZW50SGVpZ2h0ID8/IDA7XHJcbiAgICB3aGlsZSAocGFyZW50RG9tICE9IG51bGwgJiYgcGFyZW50SGVpZ2h0IDwgNDApIHtcclxuICAgICAgICBwYXJlbnREb20gPSBwYXJlbnREb20ucGFyZW50RWxlbWVudDtcclxuICAgICAgICBwYXJlbnRIZWlnaHQgPSBwYXJlbnREb20/LmNsaWVudEhlaWdodCA/PyAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcmVudEhlaWdodDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXBvbmVudERlZmluZWQoXHJcbiAgICBjb250cm9sVWk6IHsgb3JpZ2luYWxYdHlwZTogc3RyaW5nIH0sXHJcbiAgICBjdXN0b21VaVNldHRpbmc6IHsgTW9kdWxlOiBzdHJpbmc7IE5hbWU6IHN0cmluZzsgU2VsZWN0b3I6IHN0cmluZyB9XHJcbik6IHtcclxuICAgIG1vZHVsZU5hbWU6IHN0cmluZztcclxuICAgIG1vZHVsZVBhdGg6IHN0cmluZztcclxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZztcclxuICAgIHNlbGVjdG9yOiBzdHJpbmc7XHJcbn0ge1xyXG4gICAgbGV0IG1vZHVsZU5hbWUgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkRlZmF1bHRVaU1vZHVsZTtcclxuICAgIGxldCBtb2R1bGVLZWJhYk5hbWUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UobW9kdWxlTmFtZSk7XHJcbiAgICBsZXQgY29tcG9uZW50TmFtZSA9IGNvbnRyb2xVaS5vcmlnaW5hbFh0eXBlLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZSgnXycsICcnKTtcclxuICAgIGxldCBzZWxlY3Rvcjogc3RyaW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKGNvbXBvbmVudE5hbWUpO1xyXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSwgc2VsZWN0b3IubGVuZ3RoKTtcclxuICAgIHNlbGVjdG9yID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdXN0b21VaVByZWZpeCArICctJyArIHNlbGVjdG9yO1xyXG4gICAgaWYgKGN1c3RvbVVpU2V0dGluZyAmJiBjdXN0b21VaVNldHRpbmcuTW9kdWxlKSB7XHJcbiAgICAgICAgbW9kdWxlTmFtZSA9IGN1c3RvbVVpU2V0dGluZy5Nb2R1bGU7XHJcbiAgICAgICAgbW9kdWxlS2ViYWJOYW1lID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbXBvbmVudE5hbWUgPSBjdXN0b21VaVNldHRpbmcuTmFtZTtcclxuICAgICAgICBzZWxlY3RvciA9IGN1c3RvbVVpU2V0dGluZy5TZWxlY3RvcjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1vZHVsZVBhdGggPSBtb2R1bGVLZWJhYk5hbWUuc2xpY2UoMSwgbW9kdWxlS2ViYWJOYW1lLmxlbmd0aCk7XHJcbiAgICByZXR1cm4geyBtb2R1bGVOYW1lLCBtb2R1bGVQYXRoLCBjb21wb25lbnROYW1lLCBzZWxlY3RvciB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNQaG9uZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBEZXZpY2UuaXNQaG9uZSgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc0Rlc2t0b3AoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gRGV2aWNlLmlzVGFibGV0KCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzVGFibGV0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIERldmljZS5pc1RhYmxldCgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc01vYmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ21vYmknKSA+IDAgfHwgZ2V0RGV2aWNlSXNQaG9uZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbFNpemVNb2RlKGVsOiBIVE1MRWxlbWVudCwgZGV2aWNlU2l6ZTogJ3MnIHwgJ20nIHwgJ2wnIHwgJ3hsJyA9ICdsJyk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XHJcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsLm9mZnNldFdpZHRoO1xyXG4gICAgaWYgKGNvbnRhaW5lcldpZHRoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGRldmljZVNpemU7XHJcbiAgICB9XHJcbiAgICBpZiAoZGV2aWNlU2l6ZSA9PT0gJ3MnIHx8IGNvbnRhaW5lcldpZHRoIDwgNjAwKSB7XHJcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdzJztcclxuICAgIH0gZWxzZSBpZiAoZGV2aWNlU2l6ZSA9PT0gJ20nIHx8IChjb250YWluZXJXaWR0aCA+IDYwMCAmJiBjb250YWluZXJXaWR0aCA8IDEyMDApKSB7XHJcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdtJztcclxuICAgIH1cclxuICAgIHJldHVybiBkZXZpY2VTaXplO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoXHJcbiAgICBieXRlcyxcclxuICAgIGRlY2ltYWxzID0gMixcclxuICAgIHNpemU6ICdCeXRlcycgfCAnS0InIHwgJ01CJyB8ICdHQicgfCAnVEInIHwgJ1BCJyB8ICdFQicgfCAnWkInIHwgJ1lCJ1xyXG4pOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuICcwIEJ5dGVzJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrID0gMTAyNDtcclxuICAgIGNvbnN0IGRtID0gZGVjaW1hbHMgPCAwID8gMCA6IGRlY2ltYWxzO1xyXG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XHJcbiAgICBjb25zdCBpID0gc2l6ZXMuZmluZEluZGV4KChjKSA9PiBjID09PSBzaXplKTtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSkgKyAnICcgKyBzaXplc1tpXTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFeHRlbnNpb24odmFsaWRFeHRlbnNpb25zKTogc3RyaW5nIHtcclxuICAgIGxldCBfdmFsaWRFeHRlbnNpb25zID0gJyc7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZEV4dGVuc2lvbnMpKSB7XHJcbiAgICAgICAgX3ZhbGlkRXh0ZW5zaW9ucyA9IHZhbGlkRXh0ZW5zaW9ucy5tYXAoKGMpID0+ICcuJyArIGMuRXh0ZW5zaW9uKS5qb2luKCcsJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX3ZhbGlkRXh0ZW5zaW9ucztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbih0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEJhcnNhQXBpLkNvbW1vbi5GaWxlLkZpbGVJY29uRGljdDEyOFt0eXBlXTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNJbWFnZSh0eXBlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIFsnaW1nJywgJ3BuZycsICdqcGVnJywgJ2pwZycsICdnaWYnLCAnYm1wJywgJ3RpZmYnLCAnaW1hZ2UnXS5pbmRleE9mKHR5cGUpID4gLTE7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBHZXRBbGxDb2x1bW5zU29ydGVkKGNvbnRleHQpOiBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPiB7XHJcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuVmlldy5Db2x1bW5zJywgW10pLmZpbHRlcihcclxuICAgICAgICAoYykgPT4gYy5OYW1lICE9PSAnSWQnICYmIGMuTmFtZSAhPT0gJyRTdHlsZUluZGV4JyAmJiAhYy5IaWRkZW5cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgY29sTGlzdDogQ29sU2V0dGluZ1tdID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXHJcbiAgICAgICAgY29udGV4dCxcclxuICAgICAgICAnU2V0dGluZy5WaWV3LkdyaWRTZXR0aW5nLkNvbFNldHRpbmdMaXN0JyxcclxuICAgICAgICBbXVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNvbHVtbnMgPSBuZXcgQXJyYXk8UmVwb3J0Vmlld0NvbHVtbj4oKTtcclxuICAgIGNvbExpc3QuZm9yRWFjaCgoY29sUykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbk9mQ29sTGlzdCA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2xTLk5hbWUpO1xyXG4gICAgICAgIGlmIChjb2x1bW5PZkNvbExpc3QpIHtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHsgLi4uY29sdW1uT2ZDb2xMaXN0LCBIaWRkZW46IGNvbFMuSXNIaWRkZW4sIFdpZHRoOiBjb2xTLldpZHRoIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgYWxsQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sU2V0dGluZyA9IGNvbExpc3QuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2x1bW4uTmFtZSk7XHJcbiAgICAgICAgaWYgKCFjb2xTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGluZGV4LCAwLCB7IC4uLmNvbHVtbiwgSGlkZGVuOiBjb2xMaXN0Lmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIEdldFZpc2libGVWYWx1ZShvYmplY3QsIGZpZWxkKTogc3RyaW5nIHtcclxuICAgIGxldCBvdXRwdXRWYWx1ZTtcclxuICAgIGlmIChvYmplY3RbZmllbGRdPy4kQ2FwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgb3V0cHV0VmFsdWUgPSBvYmplY3RbZmllbGRdLiRDYXB0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRwdXRWYWx1ZSA9IG9iamVjdFtmaWVsZCArICckQ2FwdGlvbiddICE9PSB1bmRlZmluZWQgPyBvYmplY3RbZmllbGQgKyAnJENhcHRpb24nXSA6IG9iamVjdFtmaWVsZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWU7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XHJcbiAgICAkR3JvdXA6IGFueTtcclxuICAgICRMZXZlbDogbnVtYmVyO1xyXG4gICAgJENvdW50OiBudW1iZXI7XHJcbiAgICAkRXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgICAkUGFyZW50OiBhbnk7XHJcbiAgICAkQ2hpbGRyZW46IGFueVtdO1xyXG4gICAgJFZpc2liaWxpdHk6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBHcm91cEJ5KGNvbGxlY3Rpb246IGFueVtdLCBzb3J0U2V0dGluZ3M6IFNvcnRTZXR0aW5nW10pOiB7IGdyb3VwZWQ6IEdyb3VwOyBncm91cHM6IGFueVtdIH0ge1xyXG4gICAgY29uc3QgZ3JvdXBlZDogYW55ID0ge307XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzID0gc29ydFNldHRpbmdzLm1hcCgoYykgPT4gYy5OYW1lKTtcclxuICAgIGNvbnN0IGdldFRpdGxlID0gKG1vLCBmaWVsZE5hbWUpOiBzdHJpbmcgPT4gR2V0VmlzaWJsZVZhbHVlKG1vLCBmaWVsZE5hbWUpO1xyXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKChhKSA9PiB7XHJcbiAgICAgICAgZ3JvdXBzXHJcbiAgICAgICAgICAgIC5yZWR1Y2UoKG8sIGcsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwVGl0bGUgPSBnZXRUaXRsZShhLCBnKTtcclxuICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0gPSBvW2dyb3VwVGl0bGVdIHx8IChpICsgMSA9PT0gZ3JvdXBzLmxlbmd0aCA/IFtdIDoge30pO1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1tncm91cFRpdGxlXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhLiRMZXZlbCA9IGdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gZ2V0VGl0bGUoYSwgZ3JvdXBzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gZ3JvdXBlZFt0aXRsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LiRDb3VudCA9IChwYXJlbnQuJENvdW50ID8/IDApICsgMTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGdyb3Vwcy5sZW5ndGggLSAxOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBnZXRUaXRsZShhLCBncm91cHNbal0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbdGl0bGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJENvdW50ID0gb1tncm91cFRpdGxlXS5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYTIgPSBGaW5kR3JvdXAoZ3JvdXBUaXRsZSwgYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXS4kRXhwYW5kZWQgPSBhMj8uJEV4cGFuZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0uJFZpc2liaWxpdHkgPSBhMj8uJFZpc2liaWxpdHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb1tncm91cFRpdGxlXTtcclxuICAgICAgICAgICAgfSwgZ3JvdXBlZClcclxuICAgICAgICAgICAgLnB1c2goYSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IGdyb3VwZWQsIGdyb3VwcyB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRmluZEdyb3VwKGdyb3VwVGl0bGU6IHN0cmluZywgYTogYW55KTogYW55IHtcclxuICAgIGlmIChhLiRHcm91cCA9PT0gZ3JvdXBUaXRsZSkge1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgaWYgKGEuJFBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiBGaW5kR3JvdXAoZ3JvdXBUaXRsZSwgYS4kUGFyZW50KTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRmlsbEFsbExheW91dENvbnRyb2xzKGl0ZW06IExheW91dFNldHRpbmcsIGxheW91dENvbnRyb2xzOiBMYXlvdXRTZXR0aW5nW10pOiB2b2lkIHtcclxuICAgIGlmIChpdGVtLnh0eXBlID09PSAnTHkuTGF5b3V0Q29udHJvbCcpIHtcclxuICAgICAgICBsYXlvdXRDb250cm9scy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghaXRlbS5pdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaXRlbS5pdGVtcy5mb3JFYWNoKChjKSA9PiBGaWxsQWxsTGF5b3V0Q29udHJvbHMoYywgbGF5b3V0Q29udHJvbHMpKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRmluZFRvb2xiYXJJdGVtKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZywgcHJvcDogc3RyaW5nID0gJ3RleHQnKTogTWVudUl0ZW0gfCBudWxsIHtcclxuICAgIGlmICghdG9vbGJhckl0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbmRJbkFycmF5ID0gKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBpdGVtOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHRvb2xiYXJJdGVtcy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgIWl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjW3Byb3BdID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBjO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYy5tZW51Py5pdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGZpbmRJbkFycmF5KGMubWVudS5pdGVtcywgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZpbmRJbkFycmF5KHRvb2xiYXJJdGVtcywgdmFsdWUpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBGaW5kTGF5b3V0U2V0dGluZ0Zyb21MYXlvdXQ5NChsYXlvdXQ5NDogTGF5b3V0U2V0dGluZywgbGF5b3V0VGl0bGU6IHN0cmluZyk6IExheW91dFNldHRpbmcgfCBudWxsIHtcclxuICAgIGlmICghbGF5b3V0VGl0bGUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChsYXlvdXQ5NC5DYXB0aW9uID09PSBsYXlvdXRUaXRsZSB8fCBsYXlvdXQ5NC5UaXRsZSA9PT0gbGF5b3V0VGl0bGUpIHtcclxuICAgICAgICByZXR1cm4gbGF5b3V0OTQ7XHJcbiAgICB9XHJcbiAgICBsZXQgdGVtcExheW91dDk0OiBMYXlvdXRTZXR0aW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBpZiAobGF5b3V0OTQuaXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0OTQuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCF0ZW1wTGF5b3V0OTQpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBMYXlvdXQ5NCA9IEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0KGxheW91dDk0Lml0ZW1zW2ldLCBsYXlvdXRUaXRsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGVtcExheW91dDk0O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmlkU2V0dGluZ3MoY29udGV4dCk6IEdyaWRTZXR0aW5nIHtcclxuICAgIGNvbnN0IGdyaWRTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuVmlldy5HcmlkU2V0dGluZycsIG51bGwpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBDb2xTZXR0aW5nTGlzdDogZ3JpZFNldHRpbmc/LkNvbFNldHRpbmdMaXN0ID8/IG51bGwsXHJcbiAgICAgICAgU29ydFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uU29ydFNldHRpbmdMaXN0ID8/IFtdLFxyXG4gICAgICAgIEF1dG9TaXplQ29sdW1uczogZ3JpZFNldHRpbmc/LkF1dG9TaXplQ29sdW1ucyA/PyBmYWxzZVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQ6IHN0cmluZyk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBJZDogJzAnLFxyXG4gICAgICAgICRDYXB0aW9uOiAnJyxcclxuICAgICAgICAkVHlwZURlZklkOiB0eXBlRGVmSWQsXHJcbiAgICAgICAgJFN0YXRlOiAnTmV3JyxcclxuICAgICAgICAkVHlwZTogJ0NvbW1vbi5NZXRhT2JqZWN0V2ViJyxcclxuICAgICAgICAkRmllbGREaWN0OiB7fVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5b3V0OTRPYmplY3RJbmZvKCk6IExheW91dFNldHRpbmcge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBUeXBlOiAnUm9vdCcsXHJcbiAgICAgICAgQ29udHJvbElkOiAn2LHbjNi02YcnLFxyXG4gICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Q29udGFpbmVyJyxcclxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxyXG4gICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFR5cGU6ICdWZXJ0aWNhbEpvaW4nLFxyXG4gICAgICAgICAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRKb2luJyxcclxuICAgICAgICAgICAgICAgIElzVmVydGljYWw6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiA4MiB9LFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkOiBzdHJpbmcpOiBGb3JtU2V0dGluZyB7XHJcbiAgICBjb25zdCBtbyA9IEdldERlZmF1bHRNb09iamVjdEluZm8odHlwZURlZklkKTtcclxuXHJcbiAgICBjb25zdCBmb3JtUGFuZWxTZXR0aW5nczogRm9ybVNldHRpbmcgPSB7XHJcbiAgICAgICAgVmlldzoge1xyXG4gICAgICAgICAgICBMYXlvdXQ5NDogZ2V0TGF5b3V0OTRPYmplY3RJbmZvLFxyXG4gICAgICAgICAgICBDb250cm9sSW5mbzogW10sXHJcbiAgICAgICAgICAgIFR5cGVEZWZJZDogdHlwZURlZklkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBJc1NlYXJjaFBhbmVsOiB0cnVlLFxyXG4gICAgICAgIERhdGE6IHtcclxuICAgICAgICAgICAgTW86IG1vXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBmb3JtUGFuZWxTZXR0aW5ncztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVBhbmVsTWV0YUNvbmRpdGlvbnMoXHJcbiAgICB0eXBlRGVmSWQ6IHN0cmluZyxcclxuICAgIGNvbnRyb2xzSW5mbzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSxcclxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXHJcbiAgICB2YWx1ZTogYW55XHJcbik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtU2V0dGluZ3MgPSBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkKTtcclxuICAgIGZvcm1TZXR0aW5ncy5WaWV3LkNvbnRyb2xJbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb250cm9sc0luZm8pKTtcclxuXHJcbiAgICBmb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NC5pdGVtc1swXS5pdGVtcy5wdXNoKC4uLmNvbnRyb2xzSW5mby5tYXAoKGMpID0+IGdldExheW91dENvbnRyb2woYy5Db250cm9sTmFtZSkpKTtcclxuICAgIGZvcm1TZXR0aW5ncy5EYXRhLk1vW2NvbnRyb2xOYW1lXSA9IHZhbHVlO1xyXG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xyXG4gICAgICAgIFNldHRpbmc6IGZvcm1TZXR0aW5ncyxcclxuICAgICAgICBGZWF0dXJlczoge1xyXG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIFRvb2xiYXI6IGZhbHNlLFxyXG4gICAgICAgICAgICBJbmZvQmFyOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm1QYW5lbEN0cmxyO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdNb0dyaWRFZGl0b3IoZm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZywgdHlwZWRlZklkOiBzdHJpbmcpOiBQYXJ0aWFsPEZvcm1TZXR0aW5nPiB7XHJcbiAgICBjb25zdCBuZXdGb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtU2V0dGluZ3MpKTtcclxuICAgIHJldHVybiB7IC4uLm5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLCAkVHlwZURlZklkOiB0eXBlZGVmSWQgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR3JpZEVkaXRvckZvcm1QYW5lbChcclxuICAgIGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsXHJcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIHR5cGVkZWY6IHN0cmluZyxcclxuICAgIHJlbGF0aW9uOiBhbnksXHJcbiAgICByZXdyaXRlTGF5b3V0OiBib29sZWFuID0gdHJ1ZVxyXG4pOiBhbnkge1xyXG4gICAgY29uc3QgbmV3Rm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybVNldHRpbmdzKSk7XHJcbiAgICBuZXdGb3JtU2V0dGluZ3MuRGF0YS5NbyA9IHsgLi4ubW8sICRUeXBlRGVmSWQ6IHR5cGVkZWYgfTtcclxuICAgIGlmIChyZXdyaXRlTGF5b3V0KSB7XHJcbiAgICAgICAgbmV3Rm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQgPSBnZXRMYXlvdXQ5NE9iamVjdEluZm8oKTtcclxuICAgICAgICBuZXdGb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NC5pdGVtc1swXS5pdGVtcy5wdXNoKFxyXG4gICAgICAgICAgICAuLi5uZXdGb3JtU2V0dGluZ3MuVmlldy5Db250cm9sSW5mby5tYXAoKGMpID0+XHJcbiAgICAgICAgICAgICAgICBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUsIGMuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQsIGZhbHNlKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZvcm1SZXF1ZXN0UGFyYW1zID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1SZXF1ZXN0UGFyYW1zKHtcclxuICAgICAgICBNb0lkOiBuZXdGb3JtU2V0dGluZ3MuRGF0YS5Nby5JZCxcclxuICAgICAgICBUeXBlRGVmSWQ6IHR5cGVkZWYsXHJcbiAgICAgICAgUmVsYXRpb246IHJlbGF0aW9uXHJcbiAgICAgICAgLy8gTW9Db250ZXh0OiB7XHJcbiAgICAgICAgLy8gICAgIFJlcG9ydElkOiAnJyxcclxuICAgICAgICAvLyAgICAgVmlld0lkOiAnJyxcclxuICAgICAgICAvLyAgICAgVmlld05hbWU6ICcnLFxyXG4gICAgICAgIC8vICAgICBDb25kRm9ybWF0aW5nOiAnJyxcclxuICAgICAgICAvLyAgICAgSW5jbHVkZUluUmVwb3J0OiAnJ1xyXG4gICAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xyXG4gICAgICAgIFNldHRpbmc6IG5ld0Zvcm1TZXR0aW5ncyxcclxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb24sXHJcbiAgICAgICAgRmVhdHVyZXM6IHtcclxuICAgICAgICAgICAgV29ya2Zsb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcclxuICAgICAgICAgICAgSW5mb0JhcjogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIEZvcm1SZXF1ZXN0UGFyYW1zOiBmb3JtUmVxdWVzdFBhcmFtc1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXlvdXRDb250cm9sKFxyXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRyb2xDYXB0aW9uOiBzdHJpbmcgPSAnJyxcclxuICAgIGhpZGU6IGJvb2xlYW4gPSB0cnVlXHJcbik6IFBhcnRpYWw8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWw+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250cm9sJyxcclxuICAgICAgICBUeXBlOiAnTGF5b3V0Q29udHJvbEl0ZW0nLFxyXG4gICAgICAgIENvbnRyb2xJZDogY29udHJvbE5hbWUsXHJcbiAgICAgICAgSXNWZXJ0aWNhbDogZmFsc2UsXHJcbiAgICAgICAgVGV4dExvY2F0aW9uOiAnUmlnaHQnLFxyXG4gICAgICAgIFRleHRWaXNpYmxlOiBmYWxzZSxcclxuICAgICAgICBWaXNpYmxlOiAhaGlkZSxcclxuICAgICAgICBoaWRlLFxyXG4gICAgICAgIFVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbDogZmFsc2UsXHJcbiAgICAgICAgQ2FwdGlvbjogY29udHJvbENhcHRpb24sXHJcbiAgICAgICAgQWNjZXNzaWJsZU5hbWU6ICcnLFxyXG4gICAgICAgIEJvdW5kczogeyB4OiAwLCB5OiAwLCB3aWR0aDogNDMyLCBoZWlnaHQ6IDI0IH0sXHJcbiAgICAgICAgTWluU2l6ZTogeyB3aWR0aDogODksIGhlaWdodDogMjQgfSxcclxuICAgICAgICBNYXhTaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDI0IH0sXHJcbiAgICAgICAgQ29udHJvbEJvdW5kczogeyB3aWR0aDogMzg4LCBoZWlnaHQ6IDIwIH0sXHJcbiAgICAgICAgQ29udHJvbE1pblNpemU6IHsgd2lkdGg6IDQ1LCBoZWlnaHQ6IDIwIH0sXHJcbiAgICAgICAgQ29udHJvbE1heFNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMjAgfSxcclxuICAgICAgICBQYWRkaW5nOiBbMiwgMiwgMiwgMl0sXHJcbiAgICAgICAgTGFiZWxTaXplOiB7IHdpZHRoOiAzNSwgaGVpZ2h0OiAxMyB9LFxyXG4gICAgICAgIG9yaWdpbmFsWHR5cGU6ICcnXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbExpc3QoXHJcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIGNvbnRyb2xEYk5hbWVzOiBzdHJpbmdbXSxcclxuICAgIGlzU2VhcmNoUGFuZWw6IGJvb2xlYW4sXHJcbiAgICBpc0dyaWRFZGl0b3I6IGJvb2xlYW5cclxuKTogUHJvbWlzZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXHJcbiAgICAgICAgICAgICdGb3JtOTQuR2V0Q29udHJvbEluZm9zJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbEluZm9QYXJhbWV0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBGaWVsZERiTmFtZXM6IGNvbnRyb2xEYk5hbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIE1vOiBuZXcgQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIobW8pLFxyXG4gICAgICAgICAgICAgICAgICAgIElzU2VhcmNoUGFuZWw6IGlzU2VhcmNoUGFuZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgSXNHcmlkRWRpdG9yOiBpc0dyaWRFZGl0b3JcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKG0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBOelNhZmVBbnkgPSBhbnk7XHJcbmV4cG9ydCB0eXBlIE51bWJlcklucHV0ID0gbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcclxuZXhwb3J0IGludGVyZmFjZSBOZ1N0eWxlSW50ZXJmYWNlIHtcclxuICAgIFtrbGFzczogc3RyaW5nXTogTnpTYWZlQW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4YWJsZU9iamVjdCB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBOelNhZmVBbnk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBPzogSW5kZXhhYmxlT2JqZWN0LCBvYmpCPzogSW5kZXhhYmxlT2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICBpZiAob2JqQSA9PT0gb2JqQikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgIW9iakEgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8ICFvYmpCKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XHJcbiAgICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xyXG5cclxuICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQob2JqQik7XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBrZXlzQS5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0FbaWR4XTtcclxuICAgICAgICBpZiAoIWJIYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iakFba2V5XSAhPT0gb2JqQltrZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXI7XHJcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcjxEPih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFjazogRCk6IG51bWJlciB8IEQ7XHJcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFja1ZhbHVlOiBudW1iZXIgPSAwKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBfaXNOdW1iZXJWYWx1ZSh2YWx1ZSkgPyBOdW1iZXIodmFsdWUpIDogZmFsbGJhY2tWYWx1ZTtcclxufVxyXG5mdW5jdGlvbiBwcm9wRGVjb3JhdG9yRmFjdG9yeTxULCBEPihcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGZhbGxiYWNrOiAodjogVCkgPT4gRFxyXG4pOiAodGFyZ2V0OiBOelNhZmVBbnksIHByb3BOYW1lOiBzdHJpbmcpID0+IHZvaWQge1xyXG4gICAgZnVuY3Rpb24gcHJvcERlY29yYXRvcihcclxuICAgICAgICB0YXJnZXQ6IE56U2FmZUFueSxcclxuICAgICAgICBwcm9wTmFtZTogc3RyaW5nLFxyXG4gICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPE56U2FmZUFueT5cclxuICAgICk6IE56U2FmZUFueSB7XHJcbiAgICAgICAgY29uc3QgcHJpdmF0ZVByb3BOYW1lID0gYCQkX196b3Jyb1Byb3BEZWNvcmF0b3JfXyR7cHJvcE5hbWV9YDtcclxuXHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSkpIHtcclxuICAgICAgICAgICAgLy8gd2FybihgVGhlIHByb3AgXCIke3ByaXZhdGVQcm9wTmFtZX1cIiBpcyBhbHJlYWR5IGV4aXN0LCBpdCB3aWxsIGJlIG92ZXJyaWRlZCBieSAke25hbWV9IGRlY29yYXRvci5gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSwge1xyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdldCgpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRGVzY3JpcHRvciAmJiBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0XHJcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0LmJpbmQodGhpcykoKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpc1twcml2YXRlUHJvcE5hbWVdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLnNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvci5zZXQuYmluZCh0aGlzKShmYWxsYmFjayh2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpc1twcml2YXRlUHJvcE5hbWVdID0gZmFsbGJhY2sodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJvcERlY29yYXRvcjtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gSW5wdXROdW1iZXIoZmFsbGJhY2tWYWx1ZT86IE56U2FmZUFueSk6IE56U2FmZUFueSB7XHJcbiAgICByZXR1cm4gcHJvcERlY29yYXRvckZhY3RvcnkoJ0lucHV0TnVtYmVyJywgKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHRvTnVtYmVyKHZhbHVlLCBmYWxsYmFja1ZhbHVlKSk7XHJcbn1cclxuZXhwb3J0IGVudW0gQWZmaXhSZXNwb25kRXZlbnRzIHtcclxuICAgIHJlc2l6ZSA9ICdyZXNpemUnLFxyXG4gICAgc2Nyb2xsID0gJ3Njcm9sbCcsXHJcbiAgICB0b3VjaHN0YXJ0ID0gJ3RvdWNoc3RhcnQnLFxyXG4gICAgdG91Y2htb3ZlID0gJ3RvdWNobW92ZScsXHJcbiAgICB0b3VjaGVuZCA9ICd0b3VjaGVuZCcsXHJcbiAgICBwYWdlc2hvdyA9ICdwYWdlc2hvdycsXHJcbiAgICBsb2FkID0gJ0xPQUQnXHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVSZWN0IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgd2lkdGg/OiBudW1iZXI7XHJcbiAgICBoZWlnaHQ/OiBudW1iZXI7XHJcbiAgICBib3R0b20/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1RhcmdldFdpbmRvdyh0YXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3cpOiB0YXJnZXQgaXMgV2luZG93IHtcclxuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0YXJnZXQgPT09IHdpbmRvdztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldFJlY3QodGFyZ2V0OiBFbGVtZW50IHwgV2luZG93KTogU2ltcGxlUmVjdCB7XHJcbiAgICByZXR1cm4gIWlzVGFyZ2V0V2luZG93KHRhcmdldClcclxuICAgICAgICA/IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgICAgIGJvdHRvbTogMFxyXG4gICAgICAgICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkVmFsdWUobmFtZTogc3RyaW5nLCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCwgY2FwdGlvbj86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgaWYgKG1vLkdldEZWYWx1ZUJ5Q2FwdGlvbikge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBtby5HZXRGVmFsdWUobmFtZSk7XHJcbiAgICAgICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gbW8uR2V0RkNhcHRpb24obmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvbiA9PT0gJ3VuZGVmaW5lZCcgJiYgbW8uSW5oZXJpdGFuY2VJbmZvICYmICEobW8uJEZpZWxkRGljdCAmJiBtby4kRmllbGREaWN0W25hbWVdKSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IFBhcmVudEZpZWxkTmFtZSB9ID0gbW8uSW5oZXJpdGFuY2VJbmZvO1xyXG4gICAgICAgICAgICBjb25zdCBtb1BhcmVudCA9IG1vLkdldEZWYWx1ZShQYXJlbnRGaWVsZE5hbWUpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbW9QYXJlbnQuR2V0RlZhbHVlKG5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbW9QYXJlbnQuR2V0RkNhcHRpb24obmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IG1vLiRGaWVsZERpY3QgJiYgbW8uJEZpZWxkRGljdFtuYW1lXSA/IG1vLiRGaWVsZERpY3RbbmFtZV0gOiBuYW1lO1xyXG4gICAgbGV0IHZhbCA9IG1vW2ZpZWxkTmFtZV07XHJcbiAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgIGxldCBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lXT8uJENhcHRpb247XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uVmFsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWUgKyAnJENhcHRpb24nXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gY2FwdGlvblZhbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xyXG5leHBvcnQgY29uc3QgYXZhaWxhYmxlUHJlZml4ZXMgPSBbJ21veicsICdtcycsICd3ZWJraXQnXTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbCgpOiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHtcclxuICAgIGxldCBsYXN0VGltZSA9IDA7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrOiBGcmFtZVJlcXVlc3RDYWxsYmFjayk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zdCB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyclRpbWUgLSBsYXN0VGltZSkpO1xyXG4gICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7XHJcbiAgICAgICAgfSwgdGltZVRvQ2FsbCk7XHJcbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGw7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZUR5bmFtaWNDb21tYW5kKGNvbW1hbmQ6IHsgSWQ6IHN0cmluZyB9LCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwgPSBudWxsKTogdm9pZCB7XHJcbiAgICBjb25zdCBlID0geyBjb21tYW5kLCBEeW5hbWljU2V0dGluZzogbW8sIE1vOiBtbyB9O1xyXG4gICAgQmFyc2FBcGkuQ29tbW9uLkN1c3RvbUNvZGVNYW5hZ2VyLlJ1bkR5bmFtaWNDb21tYW5kKGNvbW1hbmQuSWQsIGUpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBFeGVjdXRlV29ya2Zsb3dDaG9pY2VEZWYoc2NvcGUsIHBhcmFtLCBzdWNjZXNzOiAocmVzdWx0KSA9PiB2b2lkLCBmYWlsZWQ6IChlcnJvcikgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgQmFyc2FBcGkuQ29tbW9uLkFqYXguR2V0U2VydmVyRGF0YShcclxuICAgICAgICAnV29ya2Zsb3c5NC5DaG9pY2VTZWxlY3QnLFxyXG4gICAgICAgIHBhcmFtLFxyXG4gICAgICAgIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgc3VjY2VzcyhyZXN1bHQpO1xyXG4gICAgICAgIH0sIC8vIHN1Y2Nlc3NcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgZmFpbGVkKGVycm9yKTtcclxuICAgICAgICB9LCAvLyAgZXJyb3JcclxuICAgICAgICAoKSA9PiB7fSwgLy8gZG9SZXR1cm5cclxuICAgICAgICBzY29wZSxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTogdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gKCkgPT4gMDtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNDQ2NVxyXG4gICAgICAgIHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmVmaXggPSBhdmFpbGFibGVQcmVmaXhlcy5maWx0ZXIoKGtleSkgPT4gYCR7a2V5fVJlcXVlc3RBbmltYXRpb25GcmFtZWAgaW4gd2luZG93KVswXTtcclxuXHJcbiAgICByZXR1cm4gcHJlZml4ID8gKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZShpZDogbnVtYmVyKTogTnpTYWZlQW55IHtcclxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKFxyXG4gICAgICAgIChrZXkpID0+IGAke2tleX1DYW5jZWxBbmltYXRpb25GcmFtZWAgaW4gd2luZG93IHx8IGAke2tleX1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvd1xyXG4gICAgKVswXTtcclxuXHJcbiAgICByZXR1cm4gcHJlZml4XHJcbiAgICAgICAgPyAoXHJcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxBbmltYXRpb25GcmFtZWBdIHx8XHJcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAuY2FsbCh0aGlzLCBpZClcclxuICAgICAgICA6IGNsZWFyVGltZW91dChpZCk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEVhc3lpbmdGbiA9ICh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpID0+IG51bWJlcjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlSW5PdXRDdWJpYyh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgY2MgPSBjIC0gYjtcclxuICAgIGxldCB0dCA9IHQgLyAoZCAvIDIpO1xyXG4gICAgaWYgKHR0IDwgMSkge1xyXG4gICAgICAgIHJldHVybiAoY2MgLyAyKSAqIHR0ICogdHQgKiB0dCArIGI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoY2MgLyAyKSAqICgodHQgLT0gMikgKiB0dCAqIHR0ICsgMikgKyBiO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE56U2Nyb2xsVG9PcHRpb25zIHtcclxuICAgIC8qKiBBbmltYXRpb24gZHVyYXRpb24sIGRlZmF1bHQgYXMgNDUwICovXHJcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcclxuICAgIC8qKiBTY3JvbGwgY29udGFpbmVyLCBkZWZhdWx0IGFzIHdpbmRvdyAqL1xyXG4gICAgZWFzaW5nPzogRWFzeWluZ0ZuO1xyXG4gICAgLyoqIFNjcm9sbCBlbmQgY2FsbGJhY2sgKi9cclxuICAgIGNhbGxiYWNrPygpOiB2b2lkO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXb3JkTWltZVR5cGUgPVxyXG4gICAgJy5kb2MsLmRvY3gsYXBwbGljYXRpb24vbXN3b3JkLGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JztcclxuZXhwb3J0IGNvbnN0IEltYWdlTWltZVR5cGUgPSAnLmpwZWcsLmpwZywuZ2lmLC5wbmcsLmJtcCwudGlmLGltYWdlLyonO1xyXG5leHBvcnQgY29uc3QgUGRmTWltZVR5cGUgPSAnLnBkZic7XHJcbmV4cG9ydCBjb25zdCBBbGxGaWxlc01pbWVUeXBlID0gJy50eHQsLnBwdCwucGRmLC4qJztcclxuZXhwb3J0IGNvbnN0IFZpZGVvTWltZVR5cGUgPSAndmlkZW8vKic7XHJcbmV4cG9ydCBjb25zdCBBdWRpb01pbWVUeXBlID0gJ2F1ZGlvLyonO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIENoYW5nZUxheW91dEluZm9DdXN0b21VaShsYXlvdXRJbmZvOiBMYXlvdXRTZXR0aW5nLCBjb21wb25lbnRVaTogRWpyYXlPbGdvKTogdm9pZCB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIGxheW91dEluZm8uRmllbGRVaS5TZXR0aW5nLkN1c3RvbVVpID0gY29tcG9uZW50VWk7XHJcbn1cclxuIl19
|
|
737
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFjeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFHbkMsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM1Qiw2RUFBVyxDQUFBO0lBQ1gscUZBQWUsQ0FBQTtJQUNmLG1GQUFjLENBQUE7SUFDZCxtRkFBYyxDQUFBO0FBQ2xCLENBQUMsRUFMVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBSy9CO0FBQ0QsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxTQUFzQixFQUN0QixPQUFnQixFQUNoQixnQkFBNEIsRUFDNUIsMEJBQW1DLEVBQ25DLElBQTBCLEVBRTFCLFVBQWlDLEVBQ2pDLE9BQTJCO0lBRTNCLFFBQVEsSUFBSSxFQUFFO1FBQ1YsS0FBSyxvQkFBb0IsQ0FBQyxXQUFXO1lBQ2pDLE9BQU8sb0JBQW9CLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RyxLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsT0FBTyxrQ0FBa0MsQ0FDckMsU0FBUyxFQUNULE9BQU8sRUFDUCwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FDVixDQUFDO1FBQ04sS0FBSyxvQkFBb0IsQ0FBQyxjQUFjO1lBQ3BDLE1BQU0sZ0JBQWdC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LElBQUksQ0FBQztJQUNmLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0MsT0FBTyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFDRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsZUFBZTtJQUM3QyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDaEMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDOUU7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUM7QUFDRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQVk7SUFDaEMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUNELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBSTtJQUN4QixJQUFJLENBQUMsSUFBSSxFQUFF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O1FBQ0gsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ25EO0FBQ0wsQ0FBQztBQVVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FDckIsdUdBQXVHLENBQUM7QUFDNUcsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLHdDQUF3QyxDQUFDO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBRXZDLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxVQUF5QixFQUFFLFdBQXNCO0lBQ3RGLFFBQVEsQ0FBQztJQUNULFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXHJcbmltcG9ydCB7IF9pc051bWJlclZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgQmFyc2FBcGkgfSBmcm9tICcuL2Fic3RyYWN0LWNsYXNzZXMvYmFyc2EtYXBpJztcclxuaW1wb3J0IHtcclxuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcclxuICAgIENvbFNldHRpbmcsXHJcbiAgICBFanJheU9sZ28sXHJcbiAgICBGb3JtU2V0dGluZyxcclxuICAgIEdlbmVyYWxDb250cm9sSW5mb01vZGVsLFxyXG4gICAgR3JpZFNldHRpbmcsXHJcbiAgICBMYXlvdXRTZXR0aW5nLFxyXG4gICAgTWVudUl0ZW0sXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcclxuICAgIFNvcnRTZXR0aW5nXHJcbn0gZnJvbSAnLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XHJcbmltcG9ydCB7IERhdGVIaWpyaVNlcnZpY2UsIERhdGVNaWxhZGlTZXJ2aWNlLCBEYXRlU2VydmljZSwgRGF0ZVNoYW1zaVNlcnZpY2UgfSBmcm9tICcuL2RhdGUtc2VydmljZXMnO1xyXG5pbXBvcnQgKiBhcyBEZXZpY2UgZnJvbSAnLi9kZXZpY2UnO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9sb2cuc2VydmljZSc7XHJcblxyXG5leHBvcnQgZW51bSBUYWJsZUhlYWRlcldpZHRoTW9kZSB7XHJcbiAgICBGaXRUb0NvbHVtbixcclxuICAgIEZpdFRvUm93Q29udGVudCxcclxuICAgIEZpdFRvQ29udGFpbmVyLFxyXG4gICAgRnJlZUNvbHVtblNpemVcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlV2lkdGhPZkxpc3RDb2x1bW4oXHJcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxyXG4gICAgY2FuVmlldzogYm9vbGVhbixcclxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sXHJcbiAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbixcclxuICAgIG1vZGU6IFRhYmxlSGVhZGVyV2lkdGhNb2RlLFxyXG5cclxuICAgIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcclxuICAgIGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXVxyXG4pOiB7IGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTsgY29udGV4dE1lbnVXaWR0aDogbnVtYmVyIH0ge1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb0NvbHVtbjpcclxuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZUNvbHVtbldpZHRoKGNvbnRhaW5lciwgY29sdW1ucywgbW9EYXRhTGlzdCwgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3csIGNvbnRleHRNZW51SXRlbXMpO1xyXG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI6XHJcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgY2FuVmlldyxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93LFxyXG4gICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtcyxcclxuICAgICAgICAgICAgICAgIGNvbHVtbnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplOlxyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0TWVudVdpZHRoID0gX2NhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXMsIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93KTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IGNvbHVtbnMubWFwKChjb2x1bW4pID0+ICh7IC4uLmNvbHVtbiwgJFdpZHRoMjogY29sdW1uLiRXaWR0aCB9KSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGNvbHVtbnM6IG5ld0NvbHVtbnMsIGNvbnRleHRNZW51V2lkdGg6IGNvbnRleHRNZW51V2lkdGggfTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcixcclxuICAgICAgICAgICAgICAgIGNhblZpZXcsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyxcclxuICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbXMsXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbHVtbldpZHRoKFxyXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcclxuICAgIGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSxcclxuICAgIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcclxuICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuLFxyXG4gICAgY29udGV4dE1lbnVJdGVtczogTWVudUl0ZW1bXVxyXG4pOiB7IGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTsgY29udGV4dE1lbnVXaWR0aDogbnVtYmVyIH0ge1xyXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICBjb25zdCBjb2xDYXB0aW9uV2lkdGggPSBtZWFzdXJlVGV4dChjb2x1bW4uQWxpYXMpICsgMTYgKyAxMDtcclxuICAgICAgICBjb2x1bW4uJFdpZHRoMiA9IGAke01hdGguY2VpbChjb2xDYXB0aW9uV2lkdGgpfXB4YDtcclxuICAgICAgICAvLyBpZiAobW9kZSA9PT0gVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db2x1bW4pIHtcclxuICAgICAgICAvLyB9IGVsc2UgaWYgKG1heFdpZHRoIDwgY29sQ2FwdGlvbldpZHRoKSB7XHJcbiAgICAgICAgLy8gICAgIGNvbHVtbi4kV2lkdGgyID0gYCR7TWF0aC5jZWlsKGNvbENhcHRpb25XaWR0aCl9cHhgO1xyXG4gICAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgY29udGV4dE1lbnVXaWR0aCA9IF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XHJcbiAgICByZXR1cm4geyBjb2x1bW5zOiBbLi4uY29sdW1uc10sIGNvbnRleHRNZW51V2lkdGggfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uV2lkdGhCeU1heE1vQ29udGVudFdpZHRoKG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSwgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKSB7XHJcbiAgICBjb25zdCB3aWR0aCA9IGNhbGN1bGF0ZU1vRGF0YUxpc3RDb250ZW50V2lkdGhCeUNvbHVtbk5hbWUobW9EYXRhTGlzdCwgY29sdW1uKTtcclxuICAgIGNvbHVtbi4kV2lkdGgyID0gYCR7TWF0aC5jZWlsKHdpZHRoKX1weGA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVNb0RhdGFMaXN0Q29udGVudFdpZHRoQnlDb2x1bW5OYW1lKFxyXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxyXG4gICAgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uXHJcbik6IG51bWJlciB7XHJcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xyXG4gICAgbW9EYXRhTGlzdC5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNhcHRpb24gPSBnZXRDb2x1bW5WYWx1ZU9mTW9EYXRhTGlzdChjb2x1bW4uTmFtZSwgYywgdW5kZWZpbmVkLCB0cnVlKTtcclxuICAgICAgICBjb25zdCBjYXB0aW9uV2lkdGggPSBtZWFzdXJlVGV4dChjYXB0aW9uKSArIDE2O1xyXG4gICAgICAgIGlmIChtYXhXaWR0aCA8IGNhcHRpb25XaWR0aCkge1xyXG4gICAgICAgICAgICBtYXhXaWR0aCA9IGNhcHRpb25XaWR0aDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBNYXRoLmNlaWwobWF4V2lkdGgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxyXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcclxuICAgIGNhblZpZXc6IGJvb2xlYW4sXHJcbiAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbixcclxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sXHJcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW11cclxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcclxuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xyXG4gICAgbGV0IGFsbENvbFdpZHRoID0gMDtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbC5XaWR0aCA9IGNvbC5XaWR0aCAmJiBjb2wuV2lkdGggPiAwID8gY29sLldpZHRoIDogbWVhc3VyZVRleHQoY29sLkFsaWFzKSArIDIwO1xyXG4gICAgICAgIGFsbENvbFdpZHRoICs9IGNvbC5XaWR0aDtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY2FuVmlld0J1dHRvbldpZHRoID0gY2FuVmlldyA/IDQwIDogMDtcclxuICAgIGNvbnN0IHNlbGVjdGlvbldpZHRoID0gMzA7XHJcblxyXG4gICAgY29uc3QgY29udGV4dE1lbnVXaWR0aCA9IF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XHJcbiAgICBjb25zdCBjb250YWluZXJXaWR0aEFsbENvbHVtbnMgPSBjb250YWluZXJXaWR0aCAtIHNlbGVjdGlvbldpZHRoIC0gY2FuVmlld0J1dHRvbldpZHRoIC0gY29udGV4dE1lbnVXaWR0aCAtIDEyO1xyXG4gICAgLy8gYWxsQ29sV2lkdGggKz0gY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zIC0gYWxsQ29sV2lkdGg7Ly8g2YXYrdin2LPYqNmHINii2K7YsduM2YYg2LPYqtmI2YYu2obZiNmGIHdpZHRoINmF2LTYrti124wg2YbYr9in2LHYr1xyXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGguY2VpbCgoY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zICogY29sLldpZHRoKSAvIGFsbENvbFdpZHRoKTtcclxuICAgICAgICBjb2wuV2lkdGggPSBuZXdXaWR0aDtcclxuICAgICAgICBjb2wuJFdpZHRoMiA9IGAke25ld1dpZHRofXB4YDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIF9jYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgY29udGV4dE1lbnVXaWR0aCA9IGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMSA/IDQwIDogMDtcclxuICAgIGNvbnN0IGJ0blBhZGRpbmcgPSAxNCArIDIgKyAxMDsgLy8gcGFkZGluZyArIGJvcmRlciArIGlmIHRleHQgaXMgb3ZlcmZsb3dlZCB0aGVuIGFkZCA1IHBpeGVsLnNvIHdlIGFsd2F5cyA1IHB4IHRvIGl0LlxyXG4gICAgY29uc3QgdGRQYWRkaW5nID0gMTUgKyAxOyAvLyBwYWRkaW5nICsgYm9yZGVyXHJcbiAgICBjb25zdCBidXR0b25JY29uV2lkdGggPSAxNiArIDY7IC8vIHNpemUgKyBtYXJnaW5cclxuICAgIGlmIChkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyB8fCBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIGNvbnRleHRNZW51V2lkdGggPSAwO1xyXG4gICAgICAgIGNvbnRleHRNZW51SXRlbXMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICBjb250ZXh0TWVudVdpZHRoICs9IG1lYXN1cmVUZXh0KGMudGV4dCkgKyBidG5QYWRkaW5nICsgdGRQYWRkaW5nO1xyXG4gICAgICAgICAgICBjb250ZXh0TWVudVdpZHRoICs9IGMuaWNvbiA/IGJ1dHRvbkljb25XaWR0aCA6IDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGV4dE1lbnVXaWR0aDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uVmFsdWVPZk1vRGF0YUxpc3QoXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIENvbHVtbnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgTmFtZTogc3RyaW5nOyBDYXB0aW9uOiBzdHJpbmcgfVtdLFxyXG4gICAgY2FwdGlvbj86IGJvb2xlYW5cclxuKTogYW55IHtcclxuICAgIGxldCBmaWVsZE5hbWUgPSBDb2x1bW5zID8gQ29sdW1ucy5maW5kKChjKSA9PiBjLk5hbWUgPT09IG5hbWUgfHwgYy5BbGlhcyA9PT0gbmFtZSk/Lk5hbWUgOiBuYW1lO1xyXG4gICAgaWYgKCFmaWVsZE5hbWUpIHtcclxuICAgICAgICBmaWVsZE5hbWUgPSBuYW1lO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbCA9IGZpZWxkTmFtZSA/IG1vW2ZpZWxkTmFtZV0gOiB1bmRlZmluZWQ7XHJcbiAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgIGxldCBjYXB0aW9uVmFsID0gZmllbGROYW1lID8gbW9bZmllbGROYW1lXT8uJENhcHRpb24gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uVmFsID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lICsgJyRDYXB0aW9uJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY2FwdGlvblZhbCA9IHZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gY2FwdGlvblZhbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZBbHJlYWR5TG9hZGVkKHBhcmVudE1vZHVsZTogYW55LCBtb2R1bGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChwYXJlbnRNb2R1bGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bW9kdWxlTmFtZX0gaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuIEltcG9ydCAke21vZHVsZU5hbWV9IGluIHRoZSBBcHBNb2R1bGUgb25seS5gKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZVRleHQodGV4dDogc3RyaW5nLCBmb250U2l6ZT86IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBjb25zdCBtZWFzdXJlVGV4dERvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWFzdXJlVGV4dCcpIGFzIEhUTUxDYW52YXNFbGVtZW50O1xyXG4gICAgaWYgKCFtZWFzdXJlVGV4dERvbSkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuICAgIGNvbnN0IGN0eCA9IG1lYXN1cmVUZXh0RG9tLmdldENvbnRleHQoJzJkJykgYXMgYW55O1xyXG4gICAgZm9udFNpemUgPSBmb250U2l6ZSA/IGZvbnRTaXplIDogJzAuODg1cmVtJztcclxuICAgIGN0eC5mb250ID0gYG5vcm1hbCAke2ZvbnRTaXplfSBJUkFOWWVrYW5EaWdpdHNgO1xyXG4gICAgcmV0dXJuIGN0eC5tZWFzdXJlVGV4dCh0ZXh0KS53aWR0aDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2VucmF0ZUlubGluZU1vSWQoKSB7XHJcbiAgICByZXR1cm4gKEJhcnNhQXBpLmlkR2VuZXJhdG9yLS0pLnRvU3RyaW5nKCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGVudW1WYWx1ZVRvU3RyaW5nU2l6ZSh2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XHJcbiAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgIHJldHVybiAncyc7XHJcbiAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgIHJldHVybiAnbSc7XHJcbiAgICAgICAgY2FzZSAnMyc6XHJcbiAgICAgICAgICAgIHJldHVybiAnbCc7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZVVsdkNvbW1hbmRIYW5kbGVyKGJ1dHRvbiwgb3B0aW9ucz8pOiB2b2lkIHtcclxuICAgIGlmIChidXR0b24uQ29tbWFuZCAmJiBidXR0b24uQ29tbWFuZC5IYW5kbGVyKSB7XHJcbiAgICAgICAgYnV0dG9uLkNvbW1hbmQuSGFuZGxlcihidXR0b24sIG9wdGlvbnMpO1xyXG4gICAgfSBlbHNlIGlmIChidXR0b24uaGFuZGxlcikge1xyXG4gICAgICAgIGJ1dHRvbi5oYW5kbGVyLmJpbmQoYnV0dG9uLnNjb3BlKShidXR0b24sIG9wdGlvbnMpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmlxdWVJZChwYXJ0czogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN0cmluZ0Fycjogc3RyaW5nW10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHM7IGkrKykge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXHJcbiAgICAgICAgY29uc3QgUzQgPSAoKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKSB8IDApLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBjb25zdCBTNF86IHN0cmluZyA9IFM0Lmxlbmd0aCA+IDAgPyBTNC5zdWJzdHJpbmcoMSkgOiAnJztcclxuICAgICAgICBzdHJpbmdBcnIucHVzaChTNF8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZ0Fyci5qb2luKCctJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlU2VydmljZShsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLCBjdWx0dXJlPyk6IERhdGVTZXJ2aWNlIHtcclxuICAgIGNvbnN0IGRlZmF1bHRDdWx0dXJlID0gY3VsdHVyZSA/PyBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1bHR1cmU7XHJcbiAgICBzd2l0Y2ggKGRlZmF1bHRDdWx0dXJlKSB7XHJcbiAgICAgICAgY2FzZSAnZmEtSVInOlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVTaGFtc2lTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xyXG4gICAgICAgIGNhc2UgJ2FyLUFFJzpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlSGlqcmlTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZU1pbGFkaVNlcnZpY2UobG9nU2VydmljZSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlyZWZveCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gLTE7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlUGF0aChcclxuICAgIHR5cGU6IHN0cmluZyxcclxuICAgIG1vSWQ6IHN0cmluZyB8IG51bGwsXHJcbiAgICBmaWxlSWQ6IHN0cmluZyxcclxuICAgIGZpZWxkRGVmSWQ/OiBzdHJpbmcsXHJcbiAgICBzaXplPzogbnVtYmVyLFxyXG4gICAgc2l6ZUg/OiBudW1iZXJcclxuKTogc3RyaW5nIHtcclxuICAgIG1vSWQgPSBtb0lkID09IG51bGwgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudChtb0lkKTtcclxuICAgIGZpbGVJZCA9IGZpbGVJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmlsZUlkKTtcclxuICAgIGZpZWxkRGVmSWQgPSBmaWVsZERlZklkID09IG51bGwgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudChmaWVsZERlZklkKTtcclxuICAgIHNpemUgPSBzaXplID09IG51bGwgPyAxMjggOiBzaXplO1xyXG4gICAgc2l6ZUggPSBzaXplSCA9PSBudWxsID8gc2l6ZSA6IHNpemVIO1xyXG4gICAgY29uc3QgdXJsID0gYC9JSC5hc2h4P3R5PSR7dHlwZX0mbW9JZD0ke21vSWR9JmlkPSR7ZmlsZUlkfSZmZElkPSR7ZmllbGREZWZJZH0mc2k9JHtzaXplfSZzaUg9JHtzaXplSH1gO1xyXG4gICAgcmV0dXJuIHVybDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24oZnVuY3Rpb25Ub0NoZWNrKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIHt9LnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRGV2aWNlV2lkdGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDAgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHNjcmVlbi53aWR0aDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyVmFsdWUoZmllbGRWYWx1ZSk6IGFueSB7XHJcbiAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWx1ZSA9IGZpZWxkVmFsdWUuVmFsdWU7XHJcbiAgICBjb25zdCB2YWx1ZUNhcHRpb246IHN0cmluZyA9IGZpZWxkVmFsdWUuVmFsdWUkQ2FwdGlvbjtcclxuICAgIGxldCB2YWx1ZU9iamVjdENhcHRpb24gPSBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICB2YWx1ZU9iamVjdENhcHRpb24gPSBmaWVsZFZhbHVlLlZhbHVlLiRDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlT2JqZWN0Q2FwdGlvbikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZU9iamVjdENhcHRpb247XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVDYXB0aW9uICYmICF2YWx1ZUNhcHRpb24uc3RhcnRzV2l0aCgndG1wJykpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50SW5WaWV3cG9ydDIoZWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHRvcCA9IGVsLm9mZnNldFRvcDtcclxuICAgIGxldCBsZWZ0ID0gZWwub2Zmc2V0TGVmdDtcclxuICAgIGNvbnN0IHdpZHRoID0gZWwub2Zmc2V0V2lkdGg7XHJcbiAgICBjb25zdCBoZWlnaHQgPSBlbC5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgd2hpbGUgKGVsLm9mZnNldFBhcmVudCkge1xyXG4gICAgICAgIGVsID0gZWwub2Zmc2V0UGFyZW50O1xyXG4gICAgICAgIHRvcCArPSBlbC5vZmZzZXRUb3A7XHJcbiAgICAgICAgbGVmdCArPSBlbC5vZmZzZXRMZWZ0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgdG9wIDwgd2luZG93LnBhZ2VZT2Zmc2V0ICsgd2luZG93LmlubmVySGVpZ2h0ICYmXHJcbiAgICAgICAgbGVmdCA8IHdpbmRvdy5wYWdlWE9mZnNldCArIHdpbmRvdy5pbm5lcldpZHRoICYmXHJcbiAgICAgICAgdG9wICsgaGVpZ2h0ID4gd2luZG93LnBhZ2VZT2Zmc2V0ICYmXHJcbiAgICAgICAgbGVmdCArIHdpZHRoID4gd2luZG93LnBhZ2VYT2Zmc2V0XHJcbiAgICApO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBQcmV2ZW50RGVmYXVsRXZlbnQoZSk6IHZvaWQge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEhlaWdodChlbERvbTogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xyXG4gICAgbGV0IHBhcmVudERvbSA9IGVsRG9tLnBhcmVudEVsZW1lbnQ7XHJcbiAgICBsZXQgcGFyZW50SGVpZ2h0ID0gcGFyZW50RG9tPy5jbGllbnRIZWlnaHQgPz8gMDtcclxuICAgIHdoaWxlIChwYXJlbnREb20gIT0gbnVsbCAmJiBwYXJlbnRIZWlnaHQgPCA0MCkge1xyXG4gICAgICAgIHBhcmVudERvbSA9IHBhcmVudERvbS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgIHBhcmVudEhlaWdodCA9IHBhcmVudERvbT8uY2xpZW50SGVpZ2h0ID8/IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyZW50SGVpZ2h0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50RGVmaW5lZChcclxuICAgIGNvbnRyb2xVaTogeyBvcmlnaW5hbFh0eXBlOiBzdHJpbmcgfSxcclxuICAgIGN1c3RvbVVpU2V0dGluZzogeyBNb2R1bGU6IHN0cmluZzsgTmFtZTogc3RyaW5nOyBTZWxlY3Rvcjogc3RyaW5nIH1cclxuKToge1xyXG4gICAgbW9kdWxlTmFtZTogc3RyaW5nO1xyXG4gICAgbW9kdWxlUGF0aDogc3RyaW5nO1xyXG4gICAgY29tcG9uZW50TmFtZTogc3RyaW5nO1xyXG4gICAgc2VsZWN0b3I6IHN0cmluZztcclxufSB7XHJcbiAgICBsZXQgbW9kdWxlTmFtZSA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuRGVmYXVsdFVpTW9kdWxlO1xyXG4gICAgbGV0IG1vZHVsZUtlYmFiTmFtZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcclxuICAgIGxldCBjb21wb25lbnROYW1lID0gY29udHJvbFVpLm9yaWdpbmFsWHR5cGUucmVwbGFjZSgnLicsICcnKS5yZXBsYWNlKCdfJywgJycpO1xyXG4gICAgbGV0IHNlbGVjdG9yOiBzdHJpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UoY29tcG9uZW50TmFtZSk7XHJcbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cmluZygxLCBzZWxlY3Rvci5sZW5ndGgpO1xyXG4gICAgc2VsZWN0b3IgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1c3RvbVVpUHJlZml4ICsgJy0nICsgc2VsZWN0b3I7XHJcbiAgICBpZiAoY3VzdG9tVWlTZXR0aW5nICYmIGN1c3RvbVVpU2V0dGluZy5Nb2R1bGUpIHtcclxuICAgICAgICBtb2R1bGVOYW1lID0gY3VzdG9tVWlTZXR0aW5nLk1vZHVsZTtcclxuICAgICAgICBtb2R1bGVLZWJhYk5hbWUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UobW9kdWxlTmFtZSk7XHJcbiAgICAgICAgY29tcG9uZW50TmFtZSA9IGN1c3RvbVVpU2V0dGluZy5OYW1lO1xyXG4gICAgICAgIHNlbGVjdG9yID0gY3VzdG9tVWlTZXR0aW5nLlNlbGVjdG9yO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IG1vZHVsZUtlYmFiTmFtZS5zbGljZSgxLCBtb2R1bGVLZWJhYk5hbWUubGVuZ3RoKTtcclxuICAgIHJldHVybiB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc1Bob25lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIERldmljZS5pc1Bob25lKCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzRGVza3RvcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBEZXZpY2UuaXNUYWJsZXQoKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNUYWJsZXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gRGV2aWNlLmlzVGFibGV0KCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignbW9iaScpID4gMCB8fCBnZXREZXZpY2VJc1Bob25lKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sU2l6ZU1vZGUoZWw6IEhUTUxFbGVtZW50LCBkZXZpY2VTaXplOiAncycgfCAnbScgfCAnbCcgfCAneGwnID0gJ2wnKTogQWJicmV2YXRpb25EZXZpY2VTaXplIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gZWwub2Zmc2V0V2lkdGg7XHJcbiAgICBpZiAoY29udGFpbmVyV2lkdGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZGV2aWNlU2l6ZTtcclxuICAgIH1cclxuICAgIGlmIChkZXZpY2VTaXplID09PSAncycgfHwgY29udGFpbmVyV2lkdGggPCA2MDApIHtcclxuICAgICAgICBkZXZpY2VTaXplID0gJ3MnO1xyXG4gICAgfSBlbHNlIGlmIChkZXZpY2VTaXplID09PSAnbScgfHwgKGNvbnRhaW5lcldpZHRoID4gNjAwICYmIGNvbnRhaW5lcldpZHRoIDwgMTIwMCkpIHtcclxuICAgICAgICBkZXZpY2VTaXplID0gJ20nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRldmljZVNpemU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRCeXRlcyhcclxuICAgIGJ5dGVzLFxyXG4gICAgZGVjaW1hbHMgPSAyLFxyXG4gICAgc2l6ZTogJ0J5dGVzJyB8ICdLQicgfCAnTUInIHwgJ0dCJyB8ICdUQicgfCAnUEInIHwgJ0VCJyB8ICdaQicgfCAnWUInXHJcbik6IHN0cmluZyB7XHJcbiAgICBpZiAoYnl0ZXMgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gJzAgQnl0ZXMnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGsgPSAxMDI0O1xyXG4gICAgY29uc3QgZG0gPSBkZWNpbWFscyA8IDAgPyAwIDogZGVjaW1hbHM7XHJcbiAgICBjb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcclxuICAgIGNvbnN0IGkgPSBzaXplcy5maW5kSW5kZXgoKGMpID0+IGMgPT09IHNpemUpO1xyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoZG0pKSArICcgJyArIHNpemVzW2ldO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZEV4dGVuc2lvbih2YWxpZEV4dGVuc2lvbnMpOiBzdHJpbmcge1xyXG4gICAgbGV0IF92YWxpZEV4dGVuc2lvbnMgPSAnJztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkRXh0ZW5zaW9ucykpIHtcclxuICAgICAgICBfdmFsaWRFeHRlbnNpb25zID0gdmFsaWRFeHRlbnNpb25zLm1hcCgoYykgPT4gJy4nICsgYy5FeHRlbnNpb24pLmpvaW4oJywnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBfdmFsaWRFeHRlbnNpb25zO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gQmFyc2FBcGkuQ29tbW9uLkZpbGUuRmlsZUljb25EaWN0MTI4W3R5cGVdO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ltYWdlKHR5cGUpOiBib29sZWFuIHtcclxuICAgIGlmICghdHlwZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gWydpbWcnLCAncG5nJywgJ2pwZWcnLCAnanBnJywgJ2dpZicsICdibXAnLCAndGlmZicsICdpbWFnZSddLmluZGV4T2YodHlwZSkgPiAtMTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEdldEFsbENvbHVtbnNTb3J0ZWQoY29udGV4dCk6IEFycmF5PFJlcG9ydFZpZXdDb2x1bW4+IHtcclxuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5WaWV3LkNvbHVtbnMnLCBbXSkuZmlsdGVyKFxyXG4gICAgICAgIChjKSA9PiBjLk5hbWUgIT09ICdJZCcgJiYgYy5OYW1lICE9PSAnJFN0eWxlSW5kZXgnICYmICFjLkhpZGRlblxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjb2xMaXN0OiBDb2xTZXR0aW5nW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICdTZXR0aW5nLlZpZXcuR3JpZFNldHRpbmcuQ29sU2V0dGluZ0xpc3QnLFxyXG4gICAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPigpO1xyXG4gICAgY29sTGlzdC5mb3JFYWNoKChjb2xTKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uT2ZDb2xMaXN0ID0gYWxsQ29sdW1ucy5maW5kKChjKSA9PiBjLk5hbWUgPT09IGNvbFMuTmFtZSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbk9mQ29sTGlzdCkge1xyXG4gICAgICAgICAgICBjb2x1bW5zLnB1c2goeyAuLi5jb2x1bW5PZkNvbExpc3QsIEhpZGRlbjogY29sUy5Jc0hpZGRlbiwgV2lkdGg6IGNvbFMuV2lkdGggfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBhbGxDb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBjb2xTZXR0aW5nID0gY29sTGlzdC5maW5kKChjKSA9PiBjLk5hbWUgPT09IGNvbHVtbi5OYW1lKTtcclxuICAgICAgICBpZiAoIWNvbFNldHRpbmcpIHtcclxuICAgICAgICAgICAgY29sdW1ucy5zcGxpY2UoaW5kZXgsIDAsIHsgLi4uY29sdW1uLCBIaWRkZW46IGNvbExpc3QubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29sdW1ucztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gR2V0VmlzaWJsZVZhbHVlKG9iamVjdCwgZmllbGQpOiBzdHJpbmcge1xyXG4gICAgbGV0IG91dHB1dFZhbHVlO1xyXG4gICAgaWYgKG9iamVjdFtmaWVsZF0/LiRDYXB0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBvdXRwdXRWYWx1ZSA9IG9iamVjdFtmaWVsZF0uJENhcHRpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dHB1dFZhbHVlID0gb2JqZWN0W2ZpZWxkICsgJyRDYXB0aW9uJ10gIT09IHVuZGVmaW5lZCA/IG9iamVjdFtmaWVsZCArICckQ2FwdGlvbiddIDogb2JqZWN0W2ZpZWxkXTtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXRWYWx1ZTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwIHtcclxuICAgICRHcm91cDogYW55O1xyXG4gICAgJExldmVsOiBudW1iZXI7XHJcbiAgICAkQ291bnQ6IG51bWJlcjtcclxuICAgICRFeHBhbmRlZDogYm9vbGVhbjtcclxuICAgICRQYXJlbnQ6IGFueTtcclxuICAgICRDaGlsZHJlbjogYW55W107XHJcbiAgICAkVmlzaWJpbGl0eTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEdyb3VwQnkoY29sbGVjdGlvbjogYW55W10sIHNvcnRTZXR0aW5nczogU29ydFNldHRpbmdbXSk6IHsgZ3JvdXBlZDogR3JvdXA7IGdyb3VwczogYW55W10gfSB7XHJcbiAgICBjb25zdCBncm91cGVkOiBhbnkgPSB7fTtcclxuXHJcbiAgICBjb25zdCBncm91cHMgPSBzb3J0U2V0dGluZ3MubWFwKChjKSA9PiBjLk5hbWUpO1xyXG4gICAgY29uc3QgZ2V0VGl0bGUgPSAobW8sIGZpZWxkTmFtZSk6IHN0cmluZyA9PiBHZXRWaXNpYmxlVmFsdWUobW8sIGZpZWxkTmFtZSk7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGEpID0+IHtcclxuICAgICAgICBncm91cHNcclxuICAgICAgICAgICAgLnJlZHVjZSgobywgZywgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBUaXRsZSA9IGdldFRpdGxlKGEsIGcpO1xyXG4gICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXSA9IG9bZ3JvdXBUaXRsZV0gfHwgKGkgKyAxID09PSBncm91cHMubGVuZ3RoID8gW10gOiB7fSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvW2dyb3VwVGl0bGVdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGEuJExldmVsID0gZ3JvdXBzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBnZXRUaXRsZShhLCBncm91cHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSBncm91cGVkW3RpdGxlXTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJENvdW50ID0gKHBhcmVudC4kQ291bnQgPz8gMCkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgZ3JvdXBzLmxlbmd0aCAtIDE7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IGdldFRpdGxlKGEsIGdyb3Vwc1tqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFt0aXRsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC4kQ291bnQgPSBvW2dyb3VwVGl0bGVdLmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhMiA9IEZpbmRHcm91cChncm91cFRpdGxlLCBhKTtcclxuICAgICAgICAgICAgICAgICAgICBvW2dyb3VwVGl0bGVdLiRFeHBhbmRlZCA9IGEyPy4kRXhwYW5kZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXS4kVmlzaWJpbGl0eSA9IGEyPy4kVmlzaWJpbGl0eTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBvW2dyb3VwVGl0bGVdO1xyXG4gICAgICAgICAgICB9LCBncm91cGVkKVxyXG4gICAgICAgICAgICAucHVzaChhKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHsgZ3JvdXBlZCwgZ3JvdXBzIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBGaW5kR3JvdXAoZ3JvdXBUaXRsZTogc3RyaW5nLCBhOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGEuJEdyb3VwID09PSBncm91cFRpdGxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbiAgICBpZiAoYS4kUGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIEZpbmRHcm91cChncm91cFRpdGxlLCBhLiRQYXJlbnQpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBGaWxsQWxsTGF5b3V0Q29udHJvbHMoaXRlbTogTGF5b3V0U2V0dGluZywgbGF5b3V0Q29udHJvbHM6IExheW91dFNldHRpbmdbXSk6IHZvaWQge1xyXG4gICAgaWYgKGl0ZW0ueHR5cGUgPT09ICdMeS5MYXlvdXRDb250cm9sJykge1xyXG4gICAgICAgIGxheW91dENvbnRyb2xzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpdGVtLml0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpdGVtLml0ZW1zLmZvckVhY2goKGMpID0+IEZpbGxBbGxMYXlvdXRDb250cm9scyhjLCBsYXlvdXRDb250cm9scykpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBGaW5kVG9vbGJhckl0ZW0odG9vbGJhckl0ZW1zOiBNZW51SXRlbVtdLCB2YWx1ZTogc3RyaW5nLCBwcm9wOiBzdHJpbmcgPSAndGV4dCcpOiBNZW51SXRlbSB8IG51bGwge1xyXG4gICAgaWYgKCF0b29sYmFySXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmluZEluQXJyYXkgPSAodG9vbGJhckl0ZW1zOiBNZW51SXRlbVtdLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgbGV0IGl0ZW06IE1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgdG9vbGJhckl0ZW1zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjID09PSAnb2JqZWN0JyAmJiAhaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNbcHJvcF0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjLm1lbnU/Lml0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtID0gZmluZEluQXJyYXkoYy5tZW51Lml0ZW1zLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gZmluZEluQXJyYXkodG9vbGJhckl0ZW1zLCB2YWx1ZSk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0KGxheW91dDk0OiBMYXlvdXRTZXR0aW5nLCBsYXlvdXRUaXRsZTogc3RyaW5nKTogTGF5b3V0U2V0dGluZyB8IG51bGwge1xyXG4gICAgaWYgKCFsYXlvdXRUaXRsZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKGxheW91dDk0LkNhcHRpb24gPT09IGxheW91dFRpdGxlIHx8IGxheW91dDk0LlRpdGxlID09PSBsYXlvdXRUaXRsZSkge1xyXG4gICAgICAgIHJldHVybiBsYXlvdXQ5NDtcclxuICAgIH1cclxuICAgIGxldCB0ZW1wTGF5b3V0OTQ6IExheW91dFNldHRpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIGlmIChsYXlvdXQ5NC5pdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXlvdXQ5NC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXRlbXBMYXlvdXQ5NCkge1xyXG4gICAgICAgICAgICAgICAgdGVtcExheW91dDk0ID0gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQobGF5b3V0OTQuaXRlbXNbaV0sIGxheW91dFRpdGxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wTGF5b3V0OTQ7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRTZXR0aW5ncyhjb250ZXh0KTogR3JpZFNldHRpbmcge1xyXG4gICAgY29uc3QgZ3JpZFNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5WaWV3LkdyaWRTZXR0aW5nJywgbnVsbCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIENvbFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uQ29sU2V0dGluZ0xpc3QgPz8gbnVsbCxcclxuICAgICAgICBTb3J0U2V0dGluZ0xpc3Q6IGdyaWRTZXR0aW5nPy5Tb3J0U2V0dGluZ0xpc3QgPz8gW10sXHJcbiAgICAgICAgQXV0b1NpemVDb2x1bW5zOiBncmlkU2V0dGluZz8uQXV0b1NpemVDb2x1bW5zID8/IGZhbHNlXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBHZXREZWZhdWx0TW9PYmplY3RJbmZvKHR5cGVEZWZJZDogc3RyaW5nKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIElkOiAnMCcsXHJcbiAgICAgICAgJENhcHRpb246ICcnLFxyXG4gICAgICAgICRUeXBlRGVmSWQ6IHR5cGVEZWZJZCxcclxuICAgICAgICAkU3RhdGU6ICdOZXcnLFxyXG4gICAgICAgICRUeXBlOiAnQ29tbW9uLk1ldGFPYmplY3RXZWInLFxyXG4gICAgICAgICRGaWVsZERpY3Q6IHt9XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXlvdXQ5NE9iamVjdEluZm8oKTogTGF5b3V0U2V0dGluZyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIFR5cGU6ICdSb290JyxcclxuICAgICAgICBDb250cm9sSWQ6ICfYsduM2LTZhycsXHJcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250YWluZXInLFxyXG4gICAgICAgIEJvdW5kczogeyB4OiAwLCB5OiAwLCB3aWR0aDogNDMyLCBoZWlnaHQ6IDI0IH0sXHJcbiAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgVHlwZTogJ1ZlcnRpY2FsSm9pbicsXHJcbiAgICAgICAgICAgICAgICB4dHlwZTogJ0x5LkxheW91dEpvaW4nLFxyXG4gICAgICAgICAgICAgICAgSXNWZXJ0aWNhbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIEJvdW5kczogeyB4OiAwLCB5OiAwLCB3aWR0aDogNDMyLCBoZWlnaHQ6IDgyIH0sXHJcbiAgICAgICAgICAgICAgICBpdGVtczogW11cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TZXR0aW5ncyh0eXBlRGVmSWQ6IHN0cmluZyk6IEZvcm1TZXR0aW5nIHtcclxuICAgIGNvbnN0IG1vID0gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQpO1xyXG5cclxuICAgIGNvbnN0IGZvcm1QYW5lbFNldHRpbmdzOiBGb3JtU2V0dGluZyA9IHtcclxuICAgICAgICBWaWV3OiB7XHJcbiAgICAgICAgICAgIExheW91dDk0OiBnZXRMYXlvdXQ5NE9iamVjdEluZm8sXHJcbiAgICAgICAgICAgIENvbnRyb2xJbmZvOiBbXSxcclxuICAgICAgICAgICAgVHlwZURlZklkOiB0eXBlRGVmSWRcclxuICAgICAgICB9LFxyXG4gICAgICAgIElzU2VhcmNoUGFuZWw6IHRydWUsXHJcbiAgICAgICAgRGF0YToge1xyXG4gICAgICAgICAgICBNbzogbW9cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZvcm1QYW5lbFNldHRpbmdzO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtUGFuZWxNZXRhQ29uZGl0aW9ucyhcclxuICAgIHR5cGVEZWZJZDogc3RyaW5nLFxyXG4gICAgY29udHJvbHNJbmZvOiBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdLFxyXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcclxuICAgIHZhbHVlOiBhbnlcclxuKTogYW55IHtcclxuICAgIGNvbnN0IGZvcm1TZXR0aW5ncyA9IGdldEZvcm1TZXR0aW5ncyh0eXBlRGVmSWQpO1xyXG4gICAgZm9ybVNldHRpbmdzLlZpZXcuQ29udHJvbEluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbnRyb2xzSW5mbykpO1xyXG5cclxuICAgIGZvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0Lml0ZW1zWzBdLml0ZW1zLnB1c2goLi4uY29udHJvbHNJbmZvLm1hcCgoYykgPT4gZ2V0TGF5b3V0Q29udHJvbChjLkNvbnRyb2xOYW1lKSkpO1xyXG4gICAgZm9ybVNldHRpbmdzLkRhdGEuTW9bY29udHJvbE5hbWVdID0gdmFsdWU7XHJcbiAgICBjb25zdCBmb3JtUGFuZWxDdHJsciA9IG5ldyBCYXJzYUFwaS5VbC5Gb3JtUGFuZWxDdHJscih7XHJcbiAgICAgICAgU2V0dGluZzogZm9ybVNldHRpbmdzLFxyXG4gICAgICAgIEZlYXR1cmVzOiB7XHJcbiAgICAgICAgICAgIFdvcmtmbG93OiBmYWxzZSxcclxuICAgICAgICAgICAgVG9vbGJhcjogZmFsc2UsXHJcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld01vR3JpZEVkaXRvcihmb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nLCB0eXBlZGVmSWQ6IHN0cmluZyk6IFBhcnRpYWw8Rm9ybVNldHRpbmc+IHtcclxuICAgIGNvbnN0IG5ld0Zvcm1TZXR0aW5nczogRm9ybVNldHRpbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1TZXR0aW5ncykpO1xyXG4gICAgcmV0dXJuIHsgLi4ubmV3Rm9ybVNldHRpbmdzLkRhdGEuTW8sICRUeXBlRGVmSWQ6IHR5cGVkZWZJZCB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHcmlkRWRpdG9yRm9ybVBhbmVsKFxyXG4gICAgZm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZyxcclxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgdHlwZWRlZjogc3RyaW5nLFxyXG4gICAgcmVsYXRpb246IGFueSxcclxuICAgIHJld3JpdGVMYXlvdXQ6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgVWx2TWFpbkN0cmxyOiBhbnkgPSBudWxsXHJcbik6IGFueSB7XHJcbiAgICBjb25zdCBuZXdGb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtU2V0dGluZ3MpKTtcclxuICAgIG5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vID0geyAuLi5tbywgJFR5cGVEZWZJZDogdHlwZWRlZiB9O1xyXG4gICAgaWYgKHJld3JpdGVMYXlvdXQpIHtcclxuICAgICAgICBuZXdGb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NCA9IGdldExheW91dDk0T2JqZWN0SW5mbygpO1xyXG4gICAgICAgIG5ld0Zvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0Lml0ZW1zWzBdLml0ZW1zLnB1c2goXHJcbiAgICAgICAgICAgIC4uLm5ld0Zvcm1TZXR0aW5ncy5WaWV3LkNvbnRyb2xJbmZvLm1hcCgoYykgPT5cclxuICAgICAgICAgICAgICAgIGdldExheW91dENvbnRyb2woYy5Db250cm9sTmFtZSwgYy5Db250cm9sRmllbGRDYXB0aW9uVHJhbnNsYXRlZCwgZmFsc2UpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZm9ybVJlcXVlc3RQYXJhbXMgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVJlcXVlc3RQYXJhbXMoe1xyXG4gICAgICAgIE1vSWQ6IG5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLklkLFxyXG4gICAgICAgIFR5cGVEZWZJZDogdHlwZWRlZixcclxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb25cclxuICAgICAgICAvLyBNb0NvbnRleHQ6IHtcclxuICAgICAgICAvLyAgICAgUmVwb3J0SWQ6ICcnLFxyXG4gICAgICAgIC8vICAgICBWaWV3SWQ6ICcnLFxyXG4gICAgICAgIC8vICAgICBWaWV3TmFtZTogJycsXHJcbiAgICAgICAgLy8gICAgIENvbmRGb3JtYXRpbmc6ICcnLFxyXG4gICAgICAgIC8vICAgICBJbmNsdWRlSW5SZXBvcnQ6ICcnXHJcbiAgICAgICAgLy8gfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmb3JtUGFuZWxDdHJsciA9IG5ldyBCYXJzYUFwaS5VbC5Gb3JtUGFuZWxDdHJscih7XHJcbiAgICAgICAgU2V0dGluZzogbmV3Rm9ybVNldHRpbmdzLFxyXG4gICAgICAgIFJlbGF0aW9uOiByZWxhdGlvbixcclxuICAgICAgICBVbHZNYWluQ3RybHI6IFVsdk1haW5DdHJscixcclxuICAgICAgICBGZWF0dXJlczoge1xyXG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIFRvb2xiYXI6IGZhbHNlLFxyXG4gICAgICAgICAgICBJbmZvQmFyOiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgRm9ybVJlcXVlc3RQYXJhbXM6IGZvcm1SZXF1ZXN0UGFyYW1zXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmb3JtUGFuZWxDdHJscjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dENvbnRyb2woXHJcbiAgICBjb250cm9sTmFtZTogc3RyaW5nLFxyXG4gICAgY29udHJvbENhcHRpb246IHN0cmluZyA9ICcnLFxyXG4gICAgaGlkZTogYm9vbGVhbiA9IHRydWVcclxuKTogUGFydGlhbDxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbD4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB4dHlwZTogJ0x5LkxheW91dENvbnRyb2wnLFxyXG4gICAgICAgIFR5cGU6ICdMYXlvdXRDb250cm9sSXRlbScsXHJcbiAgICAgICAgQ29udHJvbElkOiBjb250cm9sTmFtZSxcclxuICAgICAgICBJc1ZlcnRpY2FsOiBmYWxzZSxcclxuICAgICAgICBUZXh0TG9jYXRpb246ICdSaWdodCcsXHJcbiAgICAgICAgVGV4dFZpc2libGU6IGZhbHNlLFxyXG4gICAgICAgIFZpc2libGU6ICFoaWRlLFxyXG4gICAgICAgIGhpZGUsXHJcbiAgICAgICAgVXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sOiBmYWxzZSxcclxuICAgICAgICBDYXB0aW9uOiBjb250cm9sQ2FwdGlvbixcclxuICAgICAgICBBY2Nlc3NpYmxlTmFtZTogJycsXHJcbiAgICAgICAgQm91bmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiA0MzIsIGhlaWdodDogMjQgfSxcclxuICAgICAgICBNaW5TaXplOiB7IHdpZHRoOiA4OSwgaGVpZ2h0OiAyNCB9LFxyXG4gICAgICAgIE1heFNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMjQgfSxcclxuICAgICAgICBDb250cm9sQm91bmRzOiB7IHdpZHRoOiAzODgsIGhlaWdodDogMjAgfSxcclxuICAgICAgICBDb250cm9sTWluU2l6ZTogeyB3aWR0aDogNDUsIGhlaWdodDogMjAgfSxcclxuICAgICAgICBDb250cm9sTWF4U2l6ZTogeyB3aWR0aDogMCwgaGVpZ2h0OiAyMCB9LFxyXG4gICAgICAgIFBhZGRpbmc6IFsyLCAyLCAyLCAyXSxcclxuICAgICAgICBMYWJlbFNpemU6IHsgd2lkdGg6IDM1LCBoZWlnaHQ6IDEzIH0sXHJcbiAgICAgICAgb3JpZ2luYWxYdHlwZTogJydcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sTGlzdChcclxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgY29udHJvbERiTmFtZXM6IHN0cmluZ1tdLFxyXG4gICAgaXNTZWFyY2hQYW5lbDogYm9vbGVhbixcclxuICAgIGlzR3JpZEVkaXRvcjogYm9vbGVhblxyXG4pOiBQcm9taXNlPEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkFqYXguR2V0U2VydmVyRGF0YShcclxuICAgICAgICAgICAgJ0Zvcm05NC5HZXRDb250cm9sSW5mb3MnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sSW5mb1BhcmFtZXRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIEZpZWxkRGJOYW1lczogY29udHJvbERiTmFtZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgTW86IG5ldyBCYXJzYUFwaS5Db21tb24uTWV0YU9iamVjdFdlYihtbyksXHJcbiAgICAgICAgICAgICAgICAgICAgSXNTZWFyY2hQYW5lbDogaXNTZWFyY2hQYW5lbCxcclxuICAgICAgICAgICAgICAgICAgICBJc0dyaWRFZGl0b3I6IGlzR3JpZEVkaXRvclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAobSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShtKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE56U2FmZUFueSA9IGFueTtcclxuZXhwb3J0IHR5cGUgTnVtYmVySW5wdXQgPSBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xyXG5leHBvcnQgaW50ZXJmYWNlIE5nU3R5bGVJbnRlcmZhY2Uge1xyXG4gICAgW2tsYXNzOiBzdHJpbmddOiBOelNhZmVBbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhhYmxlT2JqZWN0IHtcclxuICAgIFtrZXk6IHN0cmluZ106IE56U2FmZUFueTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakE/OiBJbmRleGFibGVPYmplY3QsIG9iakI/OiBJbmRleGFibGVPYmplY3QpOiBib29sZWFuIHtcclxuICAgIGlmIChvYmpBID09PSBvYmpCKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCAhb2JqQSB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgIW9iakIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcclxuICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XHJcblxyXG4gICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJIYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZChvYmpCKTtcclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcclxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBrZXlzQVtpZHhdO1xyXG4gICAgICAgIGlmICghYkhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqQVtrZXldICE9PSBvYmpCW2tleV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlcjtcclxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyPEQ+KHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIGZhbGxiYWNrOiBEKTogbnVtYmVyIHwgRDtcclxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIGZhbGxiYWNrVmFsdWU6IG51bWJlciA9IDApOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIF9pc051bWJlclZhbHVlKHZhbHVlKSA/IE51bWJlcih2YWx1ZSkgOiBmYWxsYmFja1ZhbHVlO1xyXG59XHJcbmZ1bmN0aW9uIHByb3BEZWNvcmF0b3JGYWN0b3J5PFQsIEQ+KFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgZmFsbGJhY2s6ICh2OiBUKSA9PiBEXHJcbik6ICh0YXJnZXQ6IE56U2FmZUFueSwgcHJvcE5hbWU6IHN0cmluZykgPT4gdm9pZCB7XHJcbiAgICBmdW5jdGlvbiBwcm9wRGVjb3JhdG9yKFxyXG4gICAgICAgIHRhcmdldDogTnpTYWZlQW55LFxyXG4gICAgICAgIHByb3BOYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgb3JpZ2luYWxEZXNjcmlwdG9yPzogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8TnpTYWZlQW55PlxyXG4gICAgKTogTnpTYWZlQW55IHtcclxuICAgICAgICBjb25zdCBwcml2YXRlUHJvcE5hbWUgPSBgJCRfX3pvcnJvUHJvcERlY29yYXRvcl9fJHtwcm9wTmFtZX1gO1xyXG5cclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJpdmF0ZVByb3BOYW1lKSkge1xyXG4gICAgICAgICAgICAvLyB3YXJuKGBUaGUgcHJvcCBcIiR7cHJpdmF0ZVByb3BOYW1lfVwiIGlzIGFscmVhZHkgZXhpc3QsIGl0IHdpbGwgYmUgb3ZlcnJpZGVkIGJ5ICR7bmFtZX0gZGVjb3JhdG9yLmApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJpdmF0ZVByb3BOYW1lLCB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZ2V0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxEZXNjcmlwdG9yICYmIG9yaWdpbmFsRGVzY3JpcHRvci5nZXRcclxuICAgICAgICAgICAgICAgICAgICA/IG9yaWdpbmFsRGVzY3JpcHRvci5nZXQuYmluZCh0aGlzKSgpXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzW3ByaXZhdGVQcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldCh2YWx1ZTogVCk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsRGVzY3JpcHRvciAmJiBvcmlnaW5hbERlc2NyaXB0b3Iuc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxEZXNjcmlwdG9yLnNldC5iaW5kKHRoaXMpKGZhbGxiYWNrKHZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzW3ByaXZhdGVQcm9wTmFtZV0gPSBmYWxsYmFjayh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwcm9wRGVjb3JhdG9yO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBJbnB1dE51bWJlcihmYWxsYmFja1ZhbHVlPzogTnpTYWZlQW55KTogTnpTYWZlQW55IHtcclxuICAgIHJldHVybiBwcm9wRGVjb3JhdG9yRmFjdG9yeSgnSW5wdXROdW1iZXInLCAodmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gdG9OdW1iZXIodmFsdWUsIGZhbGxiYWNrVmFsdWUpKTtcclxufVxyXG5leHBvcnQgZW51bSBBZmZpeFJlc3BvbmRFdmVudHMge1xyXG4gICAgcmVzaXplID0gJ3Jlc2l6ZScsXHJcbiAgICBzY3JvbGwgPSAnc2Nyb2xsJyxcclxuICAgIHRvdWNoc3RhcnQgPSAndG91Y2hzdGFydCcsXHJcbiAgICB0b3VjaG1vdmUgPSAndG91Y2htb3ZlJyxcclxuICAgIHRvdWNoZW5kID0gJ3RvdWNoZW5kJyxcclxuICAgIHBhZ2VzaG93ID0gJ3BhZ2VzaG93JyxcclxuICAgIGxvYWQgPSAnTE9BRCdcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVJlY3Qge1xyXG4gICAgdG9wOiBudW1iZXI7XHJcbiAgICBsZWZ0OiBudW1iZXI7XHJcbiAgICB3aWR0aD86IG51bWJlcjtcclxuICAgIGhlaWdodD86IG51bWJlcjtcclxuICAgIGJvdHRvbT86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFyZ2V0V2luZG93KHRhcmdldDogRWxlbWVudCB8IFdpbmRvdyk6IHRhcmdldCBpcyBXaW5kb3cge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRhcmdldCA9PT0gd2luZG93O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0UmVjdCh0YXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3cpOiBTaW1wbGVSZWN0IHtcclxuICAgIHJldHVybiAhaXNUYXJnZXRXaW5kb3codGFyZ2V0KVxyXG4gICAgICAgID8gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXHJcbiAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICAgICAgYm90dG9tOiAwXHJcbiAgICAgICAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZShuYW1lOiBzdHJpbmcsIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBjYXB0aW9uPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBpZiAobW8uR2V0RlZhbHVlQnlDYXB0aW9uKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG1vLkdldEZWYWx1ZShuYW1lKTtcclxuICAgICAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBtby5HZXRGQ2FwdGlvbihuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uID09PSAndW5kZWZpbmVkJyAmJiBtby5Jbmhlcml0YW5jZUluZm8gJiYgIShtby4kRmllbGREaWN0ICYmIG1vLiRGaWVsZERpY3RbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgUGFyZW50RmllbGROYW1lIH0gPSBtby5Jbmhlcml0YW5jZUluZm87XHJcbiAgICAgICAgICAgIGNvbnN0IG1vUGFyZW50ID0gbW8uR2V0RlZhbHVlKFBhcmVudEZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBtb1BhcmVudC5HZXRGVmFsdWUobmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChjYXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBtb1BhcmVudC5HZXRGQ2FwdGlvbihuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmllbGROYW1lID0gbW8uJEZpZWxkRGljdCAmJiBtby4kRmllbGREaWN0W25hbWVdID8gbW8uJEZpZWxkRGljdFtuYW1lXSA6IG5hbWU7XHJcbiAgICBsZXQgdmFsID0gbW9bZmllbGROYW1lXTtcclxuICAgIGlmIChjYXB0aW9uKSB7XHJcbiAgICAgICAgbGV0IGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWVdPy4kQ2FwdGlvbjtcclxuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmICghY2FwdGlvblZhbCkge1xyXG4gICAgICAgICAgICAgICAgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZSArICckQ2FwdGlvbiddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY2FwdGlvblZhbCkge1xyXG4gICAgICAgICAgICAgICAgY2FwdGlvblZhbCA9IHZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwgPSBjYXB0aW9uVmFsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8taW52YWxpZC10aGlzICovXHJcbmV4cG9ydCBjb25zdCBhdmFpbGFibGVQcmVmaXhlcyA9IFsnbW96JywgJ21zJywgJ3dlYmtpdCddO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUge1xyXG4gICAgbGV0IGxhc3RUaW1lID0gMDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKTogYW55IHtcclxuICAgICAgICBjb25zdCBjdXJyVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnN0IHRpbWVUb0NhbGwgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyVGltZSAtIGxhc3RUaW1lKSk7XHJcbiAgICAgICAgY29uc3QgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY2FsbGJhY2soY3VyclRpbWUgKyB0aW1lVG9DYWxsKTtcclxuICAgICAgICB9LCB0aW1lVG9DYWxsKTtcclxuICAgICAgICBsYXN0VGltZSA9IGN1cnJUaW1lICsgdGltZVRvQ2FsbDtcclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBFeGVjdXRlRHluYW1pY0NvbW1hbmQoY29tbWFuZDogeyBJZDogc3RyaW5nIH0sIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgIGNvbnN0IGUgPSB7IGNvbW1hbmQsIER5bmFtaWNTZXR0aW5nOiBtbywgTW86IG1vIH07XHJcbiAgICBCYXJzYUFwaS5Db21tb24uQ3VzdG9tQ29kZU1hbmFnZXIuUnVuRHluYW1pY0NvbW1hbmQoY29tbWFuZC5JZCwgZSk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIEV4ZWN1dGVXb3JrZmxvd0Nob2ljZURlZihzY29wZSwgcGFyYW0sIHN1Y2Nlc3M6IChyZXN1bHQpID0+IHZvaWQsIGZhaWxlZDogKGVycm9yKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBCYXJzYUFwaS5Db21tb24uQWpheC5HZXRTZXJ2ZXJEYXRhKFxyXG4gICAgICAgICdXb3JrZmxvdzk0LkNob2ljZVNlbGVjdCcsXHJcbiAgICAgICAgcGFyYW0sXHJcbiAgICAgICAgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBzdWNjZXNzKHJlc3VsdCk7XHJcbiAgICAgICAgfSwgLy8gc3VjY2Vzc1xyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBmYWlsZWQoZXJyb3IpO1xyXG4gICAgICAgIH0sIC8vICBlcnJvclxyXG4gICAgICAgICgpID0+IHt9LCAvLyBkb1JldHVyblxyXG4gICAgICAgIHNjb3BlLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcXVlc3RBbmltYXRpb25GcmFtZSgpOiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHtcclxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiAwO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy80NDY1XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByZWZpeCA9IGF2YWlsYWJsZVByZWZpeGVzLmZpbHRlcigoa2V5KSA9PiBgJHtrZXl9UmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpbiB3aW5kb3cpWzBdO1xyXG5cclxuICAgIHJldHVybiBwcmVmaXggPyAod2luZG93IGFzIE56U2FmZUFueSlbYCR7cHJlZml4fVJlcXVlc3RBbmltYXRpb25GcmFtZWBdIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGlkOiBudW1iZXIpOiBOelNhZmVBbnkge1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVmaXggPSBhdmFpbGFibGVQcmVmaXhlcy5maWx0ZXIoXHJcbiAgICAgICAgKGtleSkgPT4gYCR7a2V5fUNhbmNlbEFuaW1hdGlvbkZyYW1lYCBpbiB3aW5kb3cgfHwgYCR7a2V5fUNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZWAgaW4gd2luZG93XHJcbiAgICApWzBdO1xyXG5cclxuICAgIHJldHVybiBwcmVmaXhcclxuICAgICAgICA/IChcclxuICAgICAgICAgICAgICAod2luZG93IGFzIE56U2FmZUFueSlbYCR7cHJlZml4fUNhbmNlbEFuaW1hdGlvbkZyYW1lYF0gfHxcclxuICAgICAgICAgICAgICAod2luZG93IGFzIE56U2FmZUFueSlbYCR7cHJlZml4fUNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZWBdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgIC5jYWxsKHRoaXMsIGlkKVxyXG4gICAgICAgIDogY2xlYXJUaW1lb3V0KGlkKTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRWFzeWluZ0ZuID0gKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcikgPT4gbnVtYmVyO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbk91dEN1YmljKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBjYyA9IGMgLSBiO1xyXG4gICAgbGV0IHR0ID0gdCAvIChkIC8gMik7XHJcbiAgICBpZiAodHQgPCAxKSB7XHJcbiAgICAgICAgcmV0dXJuIChjYyAvIDIpICogdHQgKiB0dCAqIHR0ICsgYjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIChjYyAvIDIpICogKCh0dCAtPSAyKSAqIHR0ICogdHQgKyAyKSArIGI7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTnpTY3JvbGxUb09wdGlvbnMge1xyXG4gICAgLyoqIEFuaW1hdGlvbiBkdXJhdGlvbiwgZGVmYXVsdCBhcyA0NTAgKi9cclxuICAgIGR1cmF0aW9uPzogbnVtYmVyO1xyXG4gICAgLyoqIFNjcm9sbCBjb250YWluZXIsIGRlZmF1bHQgYXMgd2luZG93ICovXHJcbiAgICBlYXNpbmc/OiBFYXN5aW5nRm47XHJcbiAgICAvKiogU2Nyb2xsIGVuZCBjYWxsYmFjayAqL1xyXG4gICAgY2FsbGJhY2s/KCk6IHZvaWQ7XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdvcmRNaW1lVHlwZSA9XHJcbiAgICAnLmRvYywuZG9jeCxhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xyXG5leHBvcnQgY29uc3QgSW1hZ2VNaW1lVHlwZSA9ICcuanBlZywuanBnLC5naWYsLnBuZywuYm1wLC50aWYsaW1hZ2UvKic7XHJcbmV4cG9ydCBjb25zdCBQZGZNaW1lVHlwZSA9ICcucGRmJztcclxuZXhwb3J0IGNvbnN0IEFsbEZpbGVzTWltZVR5cGUgPSAnLnR4dCwucHB0LC5wZGYsLionO1xyXG5leHBvcnQgY29uc3QgVmlkZW9NaW1lVHlwZSA9ICd2aWRlby8qJztcclxuZXhwb3J0IGNvbnN0IEF1ZGlvTWltZVR5cGUgPSAnYXVkaW8vKic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQ2hhbmdlTGF5b3V0SW5mb0N1c3RvbVVpKGxheW91dEluZm86IExheW91dFNldHRpbmcsIGNvbXBvbmVudFVpOiBFanJheU9sZ28pOiB2b2lkIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgbGF5b3V0SW5mby5GaWVsZFVpLlNldHRpbmcuQ3VzdG9tVWkgPSBjb21wb25lbnRVaTtcclxufVxyXG4iXX0=
|