@bryntum/gantt-angular-thin 7.1.1 → 7.1.2
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/README.md +302 -15
- package/bundles/bryntum-gantt-angular-thin.umd.js +25 -17
- package/bundles/bryntum-gantt-angular-thin.umd.js.map +1 -1
- package/esm2015/lib/bryntum-assignment-grid.component.js +2 -2
- package/esm2015/lib/bryntum-gantt-base.component.js +13 -9
- package/esm2015/lib/bryntum-gantt.component.js +13 -9
- package/fesm2015/bryntum-gantt-angular-thin.js +25 -17
- package/fesm2015/bryntum-gantt-angular-thin.js.map +1 -1
- package/lib/bryntum-assignment-grid.component.d.ts +1 -1
- package/lib/bryntum-gantt-base.component.d.ts +8 -4
- package/lib/bryntum-gantt.component.d.ts +8 -4
- package/package.json +1 -1
- package/src/lib/bryntum-assignment-field.component.ts +1658 -0
- package/src/lib/bryntum-assignment-grid.component.ts +2821 -0
- package/src/lib/bryntum-calendar-picker.component.ts +1635 -0
- package/src/lib/bryntum-dependency-field.component.ts +1690 -0
- package/src/lib/bryntum-gantt-base.component.ts +5315 -0
- package/src/lib/bryntum-gantt-project-model.component.ts +1477 -0
- package/src/lib/bryntum-gantt.component.ts +5319 -0
- package/src/lib/gantt.module.ts +37 -0
- package/src/lib/wrapper.helper.ts +89 -0
- package/src/public-api.ts +12 -0
|
@@ -463,7 +463,7 @@ export class BryntumGanttBaseComponent {
|
|
|
463
463
|
/**
|
|
464
464
|
* Fires on the owning Grid before export started. Return `false` to cancel the export.
|
|
465
465
|
* @param {object} event Event object
|
|
466
|
-
* @param {
|
|
466
|
+
* @param {PdfExportConfig} event.config Export config
|
|
467
467
|
*/
|
|
468
468
|
this.onBeforePdfExport = new EventEmitter();
|
|
469
469
|
/**
|
|
@@ -1088,6 +1088,8 @@ export class BryntumGanttBaseComponent {
|
|
|
1088
1088
|
* @param {Scheduler.model.TimeSpan} event.source The source task
|
|
1089
1089
|
* @param {Scheduler.model.TimeSpan} event.target The target task
|
|
1090
1090
|
* @param {number} event.dependencyType The dependency type, see [Type](https://bryntum.com/products/gantt/docs/api/Scheduler/model/DependencyBaseModel#property-Type-static)
|
|
1091
|
+
* @param {'start','end','top','bottom'} event.fromSide The side of the source task where the dependency starts
|
|
1092
|
+
* @param {'start','end','top','bottom'} event.toSide The side of the target task where the dependency ends
|
|
1091
1093
|
*/
|
|
1092
1094
|
this.onDependencyValidationComplete = new EventEmitter();
|
|
1093
1095
|
/**
|
|
@@ -1096,6 +1098,8 @@ export class BryntumGanttBaseComponent {
|
|
|
1096
1098
|
* @param {Scheduler.model.TimeSpan} event.source The source task
|
|
1097
1099
|
* @param {Scheduler.model.TimeSpan} event.target The target task
|
|
1098
1100
|
* @param {number} event.dependencyType The dependency type, see [Type](https://bryntum.com/products/gantt/docs/api/Scheduler/model/DependencyBaseModel#property-Type-static)
|
|
1101
|
+
* @param {'start','end','top','bottom'} event.fromSide The side of the source task where the dependency starts
|
|
1102
|
+
* @param {'start','end','top','bottom'} event.toSide The side of the target task where the dependency ends
|
|
1099
1103
|
*/
|
|
1100
1104
|
this.onDependencyValidationStart = new EventEmitter();
|
|
1101
1105
|
/**
|
|
@@ -2947,9 +2951,7 @@ BryntumGanttBaseComponent.bryntumConfigsOnly = [
|
|
|
2947
2951
|
'managedEventSizing',
|
|
2948
2952
|
'maskDefaults',
|
|
2949
2953
|
'masked',
|
|
2950
|
-
'maxDate',
|
|
2951
2954
|
'maxTimeAxisUnit',
|
|
2952
|
-
'minDate',
|
|
2953
2955
|
'monitorResize',
|
|
2954
2956
|
'newTaskDefaults',
|
|
2955
2957
|
'owner',
|
|
@@ -3049,9 +3051,11 @@ BryntumGanttBaseComponent.bryntumProps = BryntumGanttBaseComponent.bryntumFeatur
|
|
|
3049
3051
|
'labelPosition',
|
|
3050
3052
|
'longPressTime',
|
|
3051
3053
|
'margin',
|
|
3054
|
+
'maxDate',
|
|
3052
3055
|
'maxHeight',
|
|
3053
3056
|
'maxWidth',
|
|
3054
3057
|
'maxZoomLevel',
|
|
3058
|
+
'minDate',
|
|
3055
3059
|
'minHeight',
|
|
3056
3060
|
'minWidth',
|
|
3057
3061
|
'minZoomLevel',
|
|
@@ -3112,7 +3116,7 @@ BryntumGanttBaseComponent.bryntumProps = BryntumGanttBaseComponent.bryntumFeatur
|
|
|
3112
3116
|
'zoomLevel'
|
|
3113
3117
|
]);
|
|
3114
3118
|
BryntumGanttBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumGanttBaseComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
3115
|
-
BryntumGanttBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumGanttBaseComponent, selector: "bryntum-gantt-base", inputs: { adopt: "adopt", allowCreate: "allowCreate", allowCreateOnlyParent: "allowCreateOnlyParent", animateFilterRemovals: "animateFilterRemovals", animateRemovingRows: "animateRemovingRows", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", autoAdjustTimeAxis: "autoAdjustTimeAxis", autoHeight: "autoHeight", bbar: "bbar", bodyCls: "bodyCls", bubbleEvents: "bubbleEvents", bufferCoef: "bufferCoef", bufferThreshold: "bufferThreshold", collapsible: "collapsible", color: "color", config: "config", contentElementCls: "contentElementCls", contextMenuTriggerEvent: "contextMenuTriggerEvent", creationTooltip: "creationTooltip", cycleResolutionPopupClass: "cycleResolutionPopupClass", dataField: "dataField", defaultRegion: "defaultRegion", defaultResourceImageName: "defaultResourceImageName", dependencyIdField: "dependencyIdField", destroyStore: "destroyStore", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", disableGridColumnIdWarning: "disableGridColumnIdWarning", disableGridRowModelWarning: "disableGridRowModelWarning", displaySchedulingIssueResolutionPopup: "displaySchedulingIssueResolutionPopup", dock: "dock", drawer: "drawer", durationDisplayPrecision: "durationDisplayPrecision", elementAttributes: "elementAttributes", enableDeleteKey: "enableDeleteKey", enableRecurringEvents: "enableRecurringEvents", enableSticky: "enableSticky", enableTextSelection: "enableTextSelection", enableTransactionalFeatures: "enableTransactionalFeatures", fillLastColumn: "fillLastColumn", fixedRowHeight: "fixedRowHeight", footer: "footer", formulaProviders: "formulaProviders", fullRowRefresh: "fullRowRefresh", getDateConstraints: "getDateConstraints", getRowHeight: "getRowHeight", header: "header", hideHorizontalScrollbar: "hideHorizontalScrollbar", hoverCls: "hoverCls", icon: "icon", ignoreDomEventsWhileScrolling: "ignoreDomEventsWhileScrolling", ignoreParentReadOnly: "ignoreParentReadOnly", listeners: "listeners", loadMask: "loadMask", loadMaskDefaults: "loadMaskDefaults", loadMaskError: "loadMaskError", localizable: "localizable", managedEventSizing: "managedEventSizing", maskDefaults: "maskDefaults", masked: "masked", maxDate: "maxDate", maxTimeAxisUnit: "maxTimeAxisUnit", minDate: "minDate", monitorResize: "monitorResize", newTaskDefaults: "newTaskDefaults", owner: "owner", partner: "partner", plugins: "plugins", preserveFocusOnDatasetChange: "preserveFocusOnDatasetChange", preserveScrollOnDatasetChange: "preserveScrollOnDatasetChange", preventTooltipOnTouch: "preventTooltipOnTouch", projectProgressReporting: "projectProgressReporting", relayStoreEvents: "relayStoreEvents", resizable: "resizable", resizeToFitIncludesHeader: "resizeToFitIncludesHeader", resourceImageFolderPath: "resourceImageFolderPath", resourceImagePath: "resourceImagePath", responsiveLevels: "responsiveLevels", ripple: "ripple", rootElement: "rootElement", schedulingIssueResolutionPopupClass: "schedulingIssueResolutionPopupClass", scrollerClass: "scrollerClass", scrollManager: "scrollManager", showCostControls: "showCostControls", showCreationTooltip: "showCreationTooltip", showDirty: "showDirty", showLagInTooltip: "showLagInTooltip", showRecurringUI: "showRecurringUI", showTaskColorPickers: "showTaskColorPickers", snapRelativeToEventStartDate: "snapRelativeToEventStartDate", stateful: "stateful", statefulEvents: "statefulEvents", stateId: "stateId", stateProvider: "stateProvider", stickyHeaders: "stickyHeaders", strips: "strips", subGridConfigs: "subGridConfigs", syncMask: "syncMask", tab: "tab", tabBarItems: "tabBarItems", taskRenderer: "taskRenderer", tbar: "tbar", terminalCls: "terminalCls", terminalSides: "terminalSides", timeAxis: "timeAxis", ui: "ui", visibleZoomFactor: "visibleZoomFactor", weekStartDay: "weekStartDay", weight: "weight", zoomKeepsOriginalTimespan: "zoomKeepsOriginalTimespan", zoomOnMouseWheel: "zoomOnMouseWheel", zoomOnTimeAxisDoubleClick: "zoomOnTimeAxisDoubleClick", alignSelf: "alignSelf", allowDropOnEventBar: "allowDropOnEventBar", animateTreeNodeToggle: "animateTreeNodeToggle", appendTo: "appendTo", assignments: "assignments", barMargin: "barMargin", calendars: "calendars", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cellEllipsis: "cellEllipsis", cls: "cls", collapsed: "collapsed", column: "column", columnLines: "columnLines", columns: "columns", creationTooltipTemplate: "creationTooltipTemplate", data: "data", dataset: "dataset", dependencies: "dependencies", disabled: "disabled", displayDateFormat: "displayDateFormat", emptyText: "emptyText", enableEventAnimations: "enableEventAnimations", enableUndoRedoKeys: "enableUndoRedoKeys", endDate: "endDate", eventColor: "eventColor", eventStyle: "eventStyle", extraData: "extraData", fillTicks: "fillTicks", flex: "flex", forceFit: "forceFit", height: "height", hidden: "hidden", hideFooters: "hideFooters", hideHeaders: "hideHeaders", hideRowHover: "hideRowHover", id: "id", infiniteScroll: "infiniteScroll", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", keyMap: "keyMap", labelPosition: "labelPosition", longPressTime: "longPressTime", margin: "margin", maxHeight: "maxHeight", maxWidth: "maxWidth", maxZoomLevel: "maxZoomLevel", minHeight: "minHeight", minWidth: "minWidth", minZoomLevel: "minZoomLevel", preserveScroll: "preserveScroll", presets: "presets", project: "project", readOnly: "readOnly", recurrenceConfirmationPopup: "recurrenceConfirmationPopup", rendition: "rendition", resources: "resources", rowHeight: "rowHeight", rowLines: "rowLines", rtl: "rtl", scrollable: "scrollable", scrollTaskIntoViewOnCellClick: "scrollTaskIntoViewOnCellClick", selectionMode: "selectionMode", showTooltip: "showTooltip", showUnscheduledTasks: "showUnscheduledTasks", snap: "snap", span: "span", startDate: "startDate", stateSettings: "stateSettings", store: "store", suppressFit: "suppressFit", tasks: "tasks", taskStore: "taskStore", terminalHideDelay: "terminalHideDelay", terminalOffset: "terminalOffset", terminalShowDelay: "terminalShowDelay", terminalSize: "terminalSize", tickSize: "tickSize", timeRanges: "timeRanges", timeResolution: "timeResolution", timeZone: "timeZone", title: "title", toggleParentTasksOnClick: "toggleParentTasksOnClick", tools: "tools", tooltipTemplate: "tooltipTemplate", transition: "transition", transitionDuration: "transitionDuration", useContextualRecurrenceRules: "useContextualRecurrenceRules", viewPreset: "viewPreset", visibleDate: "visibleDate", width: "width", workingTime: "workingTime", calendarManagerStore: "calendarManagerStore", focusVisible: "focusVisible", hasChanges: "hasChanges", originalStore: "originalStore", parent: "parent", scrollLeft: "scrollLeft", scrollTop: "scrollTop", scrollX: "scrollX", selectedCell: "selectedCell", selectedCells: "selectedCells", selectedRecord: "selectedRecord", selectedRecords: "selectedRecords", selectedRows: "selectedRows", state: "state", tooltip: "tooltip", zoomLevel: "zoomLevel", aiFilterFeature: "aiFilterFeature", baselinesFeature: "baselinesFeature", cellCopyPasteFeature: "cellCopyPasteFeature", cellEditFeature: "cellEditFeature", cellMenuFeature: "cellMenuFeature", cellTooltipFeature: "cellTooltipFeature", chartsFeature: "chartsFeature", columnAutoWidthFeature: "columnAutoWidthFeature", columnDragToolbarFeature: "columnDragToolbarFeature", columnLinesFeature: "columnLinesFeature", columnPickerFeature: "columnPickerFeature", columnRenameFeature: "columnRenameFeature", columnReorderFeature: "columnReorderFeature", columnResizeFeature: "columnResizeFeature", criticalPathsFeature: "criticalPathsFeature", dependenciesFeature: "dependenciesFeature", dependencyEditFeature: "dependencyEditFeature", eventFilterFeature: "eventFilterFeature", eventSegmentsFeature: "eventSegmentsFeature", excelExporterFeature: "excelExporterFeature", fileDropFeature: "fileDropFeature", fillHandleFeature: "fillHandleFeature", filterFeature: "filterFeature", filterBarFeature: "filterBarFeature", groupFeature: "groupFeature", groupSummaryFeature: "groupSummaryFeature", headerMenuFeature: "headerMenuFeature", headerZoomFeature: "headerZoomFeature", indicatorsFeature: "indicatorsFeature", labelsFeature: "labelsFeature", lockRowsFeature: "lockRowsFeature", mergeCellsFeature: "mergeCellsFeature", mspExportFeature: "mspExportFeature", nonWorkingTimeFeature: "nonWorkingTimeFeature", panFeature: "panFeature", parentAreaFeature: "parentAreaFeature", pdfExportFeature: "pdfExportFeature", percentBarFeature: "percentBarFeature", pinColumnsFeature: "pinColumnsFeature", printFeature: "printFeature", progressLineFeature: "progressLineFeature", projectEditFeature: "projectEditFeature", projectLinesFeature: "projectLinesFeature", quickFindFeature: "quickFindFeature", regionResizeFeature: "regionResizeFeature", rollupsFeature: "rollupsFeature", rowCopyPasteFeature: "rowCopyPasteFeature", rowEditFeature: "rowEditFeature", rowExpanderFeature: "rowExpanderFeature", rowReorderFeature: "rowReorderFeature", rowResizeFeature: "rowResizeFeature", scheduleMenuFeature: "scheduleMenuFeature", scheduleTooltipFeature: "scheduleTooltipFeature", scrollButtonsFeature: "scrollButtonsFeature", searchFeature: "searchFeature", sortFeature: "sortFeature", splitFeature: "splitFeature", stickyCellsFeature: "stickyCellsFeature", stripeFeature: "stripeFeature", summaryFeature: "summaryFeature", taskCopyPasteFeature: "taskCopyPasteFeature", taskDragFeature: "taskDragFeature", taskDragCreateFeature: "taskDragCreateFeature", taskEditFeature: "taskEditFeature", taskMenuFeature: "taskMenuFeature", taskNonWorkingTimeFeature: "taskNonWorkingTimeFeature", taskResizeFeature: "taskResizeFeature", taskSegmentDragFeature: "taskSegmentDragFeature", taskSegmentResizeFeature: "taskSegmentResizeFeature", taskTooltipFeature: "taskTooltipFeature", timeAxisHeaderMenuFeature: "timeAxisHeaderMenuFeature", timelineChartFeature: "timelineChartFeature", timeRangesFeature: "timeRangesFeature", timeSpanHighlightFeature: "timeSpanHighlightFeature", treeFeature: "treeFeature", treeGroupFeature: "treeGroupFeature", versionsFeature: "versionsFeature" }, outputs: { onAfterDependencyCreateDrop: "onAfterDependencyCreateDrop", onAfterDependencySave: "onAfterDependencySave", onAfterDragCreate: "onAfterDragCreate", onAfterEventEdit: "onAfterEventEdit", onAfterEventSave: "onAfterEventSave", onAfterProjectEdit: "onAfterProjectEdit", onAfterProjectSave: "onAfterProjectSave", onAfterTaskDrop: "onAfterTaskDrop", onAfterTaskEdit: "onAfterTaskEdit", onAfterTaskSave: "onAfterTaskSave", onAfterTaskSegmentDrop: "onAfterTaskSegmentDrop", onBeforeAssignmentDelete: "onBeforeAssignmentDelete", onBeforeCancelCellEdit: "onBeforeCancelCellEdit", onBeforeCancelRowEdit: "onBeforeCancelRowEdit", onBeforeCellEditStart: "onBeforeCellEditStart", onBeforeCellRangeDelete: "onBeforeCellRangeDelete", onBeforeCellRangeEdit: "onBeforeCellRangeEdit", onBeforeColumnDragStart: "onBeforeColumnDragStart", onBeforeColumnDropFinalize: "onBeforeColumnDropFinalize", onBeforeColumnResize: "onBeforeColumnResize", onBeforeCopy: "onBeforeCopy", onBeforeCSVExport: "onBeforeCSVExport", onBeforeDependencyAdd: "onBeforeDependencyAdd", onBeforeDependencyCreateDrag: "onBeforeDependencyCreateDrag", onBeforeDependencyCreateFinalize: "onBeforeDependencyCreateFinalize", onBeforeDependencyDelete: "onBeforeDependencyDelete", onBeforeDependencyEdit: "onBeforeDependencyEdit", onBeforeDependencyEditShow: "onBeforeDependencyEditShow", onBeforeDependencySave: "onBeforeDependencySave", onBeforeDestroy: "onBeforeDestroy", onBeforeDragCreate: "onBeforeDragCreate", onBeforeDragCreateFinalize: "onBeforeDragCreateFinalize", onBeforeEventDelete: "onBeforeEventDelete", onBeforeEventEdit: "onBeforeEventEdit", onBeforeEventEditShow: "onBeforeEventEditShow", onBeforeEventResize: "onBeforeEventResize", onBeforeEventResizeFinalize: "onBeforeEventResizeFinalize", onBeforeEventSave: "onBeforeEventSave", onBeforeEventSegmentResize: "onBeforeEventSegmentResize", onBeforeEventSegmentResizeFinalize: "onBeforeEventSegmentResizeFinalize", onBeforeExcelExport: "onBeforeExcelExport", onBeforeFillHandleDragStart: "onBeforeFillHandleDragStart", onBeforeFinishCellEdit: "onBeforeFinishCellEdit", onBeforeFinishRowEdit: "onBeforeFinishRowEdit", onBeforeHide: "onBeforeHide", onBeforeMspExport: "onBeforeMspExport", onBeforePan: "onBeforePan", onBeforePaste: "onBeforePaste", onBeforePdfExport: "onBeforePdfExport", onBeforePresetChange: "onBeforePresetChange", onBeforeProjectEdit: "onBeforeProjectEdit", onBeforeProjectEditShow: "onBeforeProjectEditShow", onBeforeProjectSave: "onBeforeProjectSave", onBeforeRenderRow: "onBeforeRenderRow", onBeforeRenderRows: "onBeforeRenderRows", onBeforeRowCollapse: "onBeforeRowCollapse", onBeforeRowExpand: "onBeforeRowExpand", onBeforeSelectionChange: "onBeforeSelectionChange", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onBeforeShowTerminals: "onBeforeShowTerminals", onBeforeStartRowEdit: "onBeforeStartRowEdit", onBeforeStateApply: "onBeforeStateApply", onBeforeStateSave: "onBeforeStateSave", onBeforeTaskAdd: "onBeforeTaskAdd", onBeforeTaskDelete: "onBeforeTaskDelete", onBeforeTaskDrag: "onBeforeTaskDrag", onBeforeTaskDropFinalize: "onBeforeTaskDropFinalize", onBeforeTaskEdit: "onBeforeTaskEdit", onBeforeTaskEditShow: "onBeforeTaskEditShow", onBeforeTaskResize: "onBeforeTaskResize", onBeforeTaskResizeFinalize: "onBeforeTaskResizeFinalize", onBeforeTaskSave: "onBeforeTaskSave", onBeforeTaskSegmentDrag: "onBeforeTaskSegmentDrag", onBeforeTaskSegmentDropFinalize: "onBeforeTaskSegmentDropFinalize", onBeforeTaskSegmentResize: "onBeforeTaskSegmentResize", onBeforeTaskSegmentResizeFinalize: "onBeforeTaskSegmentResizeFinalize", onBeforeToggleGroup: "onBeforeToggleGroup", onBeforeToggleNode: "onBeforeToggleNode", onCancelCellEdit: "onCancelCellEdit", onCatchAll: "onCatchAll", onCellClick: "onCellClick", onCellContextMenu: "onCellContextMenu", onCellDblClick: "onCellDblClick", onCellMenuBeforeShow: "onCellMenuBeforeShow", onCellMenuItem: "onCellMenuItem", onCellMenuShow: "onCellMenuShow", onCellMenuToggleItem: "onCellMenuToggleItem", onCellMouseEnter: "onCellMouseEnter", onCellMouseLeave: "onCellMouseLeave", onCellMouseOut: "onCellMouseOut", onCellMouseOver: "onCellMouseOver", onCollapse: "onCollapse", onCollapseNode: "onCollapseNode", onColumnDrag: "onColumnDrag", onColumnDragStart: "onColumnDragStart", onColumnDrop: "onColumnDrop", onColumnResize: "onColumnResize", onColumnResizeStart: "onColumnResizeStart", onContextMenuItem: "onContextMenuItem", onContextMenuToggleItem: "onContextMenuToggleItem", onCopy: "onCopy", onCriticalPathsHighlighted: "onCriticalPathsHighlighted", onCriticalPathsUnhighlighted: "onCriticalPathsUnhighlighted", onCurrentTimelineUpdate: "onCurrentTimelineUpdate", onDataChange: "onDataChange", onDateRangeChange: "onDateRangeChange", onDependenciesDrawn: "onDependenciesDrawn", onDependencyClick: "onDependencyClick", onDependencyContextMenu: "onDependencyContextMenu", onDependencyCreateDragStart: "onDependencyCreateDragStart", onDependencyCreateDrop: "onDependencyCreateDrop", onDependencyDblClick: "onDependencyDblClick", onDependencyMouseOut: "onDependencyMouseOut", onDependencyMouseOver: "onDependencyMouseOver", onDependencyValidationComplete: "onDependencyValidationComplete", onDependencyValidationStart: "onDependencyValidationStart", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onDragCreateEnd: "onDragCreateEnd", onDragCreateStart: "onDragCreateStart", onDragSelecting: "onDragSelecting", onElementCreated: "onElementCreated", onEventEditBeforeSetRecord: "onEventEditBeforeSetRecord", onEventMenuBeforeShow: "onEventMenuBeforeShow", onEventMenuItem: "onEventMenuItem", onEventMenuShow: "onEventMenuShow", onEventPartialResize: "onEventPartialResize", onEventResizeEnd: "onEventResizeEnd", onEventResizeStart: "onEventResizeStart", onEventSegmentPartialResize: "onEventSegmentPartialResize", onEventSegmentResizeEnd: "onEventSegmentResizeEnd", onEventSegmentResizeStart: "onEventSegmentResizeStart", onExpand: "onExpand", onExpandNode: "onExpandNode", onFileDrop: "onFileDrop", onFillHandleBeforeDragFinalize: "onFillHandleBeforeDragFinalize", onFillHandleDrag: "onFillHandleDrag", onFillHandleDragAbort: "onFillHandleDragAbort", onFillHandleDragEnd: "onFillHandleDragEnd", onFillHandleDragStart: "onFillHandleDragStart", onFinishCellEdit: "onFinishCellEdit", onFinishRowEdit: "onFinishRowEdit", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onGridRowBeforeDragStart: "onGridRowBeforeDragStart", onGridRowBeforeDropFinalize: "onGridRowBeforeDropFinalize", onGridRowDrag: "onGridRowDrag", onGridRowDragAbort: "onGridRowDragAbort", onGridRowDragStart: "onGridRowDragStart", onGridRowDrop: "onGridRowDrop", onHeaderClick: "onHeaderClick", onHeaderMenuBeforeShow: "onHeaderMenuBeforeShow", onHeaderMenuItem: "onHeaderMenuItem", onHeaderMenuShow: "onHeaderMenuShow", onHeaderMenuToggleItem: "onHeaderMenuToggleItem", onHide: "onHide", onLockRows: "onLockRows", onMouseOut: "onMouseOut", onMouseOver: "onMouseOver", onMspExport: "onMspExport", onNavigate: "onNavigate", onNoZoomChange: "onNoZoomChange", onPaint: "onPaint", onPaste: "onPaste", onPdfExport: "onPdfExport", onPercentBarDrag: "onPercentBarDrag", onPercentBarDragAbort: "onPercentBarDragAbort", onPercentBarDragStart: "onPercentBarDragStart", onPercentBarDrop: "onPercentBarDrop", onPresetChange: "onPresetChange", onProjectEditCanceled: "onProjectEditCanceled", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onReleaseTask: "onReleaseTask", onRenderRow: "onRenderRow", onRenderRows: "onRenderRows", onRenderTask: "onRenderTask", onResize: "onResize", onResourceAssignmentClick: "onResourceAssignmentClick", onResponsive: "onResponsive", onRowCollapse: "onRowCollapse", onRowExpand: "onRowExpand", onRowMouseEnter: "onRowMouseEnter", onRowMouseLeave: "onRowMouseLeave", onScheduleMenuBeforeShow: "onScheduleMenuBeforeShow", onScheduleMenuItem: "onScheduleMenuItem", onScheduleMenuShow: "onScheduleMenuShow", onScroll: "onScroll", onScrollButtonClick: "onScrollButtonClick", onSelectionChange: "onSelectionChange", onSelectionModeChange: "onSelectionModeChange", onShow: "onShow", onSplit: "onSplit", onSplitterCollapseClick: "onSplitterCollapseClick", onSplitterDragEnd: "onSplitterDragEnd", onSplitterDragStart: "onSplitterDragStart", onSplitterExpandClick: "onSplitterExpandClick", onStartCellEdit: "onStartCellEdit", onStartRowEdit: "onStartRowEdit", onSubGridCollapse: "onSubGridCollapse", onSubGridExpand: "onSubGridExpand", onTaskClick: "onTaskClick", onTaskContextMenu: "onTaskContextMenu", onTaskDblClick: "onTaskDblClick", onTaskDrag: "onTaskDrag", onTaskDragStart: "onTaskDragStart", onTaskDrop: "onTaskDrop", onTaskEditCanceled: "onTaskEditCanceled", onTaskKeyDown: "onTaskKeyDown", onTaskKeyUp: "onTaskKeyUp", onTaskMenuBeforeShow: "onTaskMenuBeforeShow", onTaskMenuItem: "onTaskMenuItem", onTaskMenuShow: "onTaskMenuShow", onTaskMouseDown: "onTaskMouseDown", onTaskMouseOut: "onTaskMouseOut", onTaskMouseOver: "onTaskMouseOver", onTaskMouseUp: "onTaskMouseUp", onTaskNonWorkingTimeClick: "onTaskNonWorkingTimeClick", onTaskNonWorkingTimeContextMenu: "onTaskNonWorkingTimeContextMenu", onTaskNonWorkingTimeDblClick: "onTaskNonWorkingTimeDblClick", onTaskPartialResize: "onTaskPartialResize", onTaskResizeEnd: "onTaskResizeEnd", onTaskResizeStart: "onTaskResizeStart", onTaskSegmentDrag: "onTaskSegmentDrag", onTaskSegmentDragStart: "onTaskSegmentDragStart", onTaskSegmentDrop: "onTaskSegmentDrop", onTaskSegmentPartialResize: "onTaskSegmentPartialResize", onTaskSegmentResizeEnd: "onTaskSegmentResizeEnd", onTaskSegmentResizeStart: "onTaskSegmentResizeStart", onTickSizeChange: "onTickSizeChange", onTimeAxisChange: "onTimeAxisChange", onTimeAxisHeaderClick: "onTimeAxisHeaderClick", onTimeAxisHeaderContextMenu: "onTimeAxisHeaderContextMenu", onTimeAxisHeaderDblClick: "onTimeAxisHeaderDblClick", onTimeAxisHeaderMenuBeforeShow: "onTimeAxisHeaderMenuBeforeShow", onTimeAxisHeaderMenuItem: "onTimeAxisHeaderMenuItem", onTimeAxisHeaderMenuShow: "onTimeAxisHeaderMenuShow", onTimelineContextChange: "onTimelineContextChange", onTimelineViewportResize: "onTimelineViewportResize", onTimeRangeHeaderClick: "onTimeRangeHeaderClick", onTimeRangeHeaderContextMenu: "onTimeRangeHeaderContextMenu", onTimeRangeHeaderDblClick: "onTimeRangeHeaderDblClick", onToggleGroup: "onToggleGroup", onToggleNode: "onToggleNode", onToolClick: "onToolClick", onTransactionChange: "onTransactionChange", onUnlockRows: "onUnlockRows", onUnsplit: "onUnsplit", onVisibleDateRangeChange: "onVisibleDateRangeChange" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
3119
|
+
BryntumGanttBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumGanttBaseComponent, selector: "bryntum-gantt-base", inputs: { adopt: "adopt", allowCreate: "allowCreate", allowCreateOnlyParent: "allowCreateOnlyParent", animateFilterRemovals: "animateFilterRemovals", animateRemovingRows: "animateRemovingRows", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", autoAdjustTimeAxis: "autoAdjustTimeAxis", autoHeight: "autoHeight", bbar: "bbar", bodyCls: "bodyCls", bubbleEvents: "bubbleEvents", bufferCoef: "bufferCoef", bufferThreshold: "bufferThreshold", collapsible: "collapsible", color: "color", config: "config", contentElementCls: "contentElementCls", contextMenuTriggerEvent: "contextMenuTriggerEvent", creationTooltip: "creationTooltip", cycleResolutionPopupClass: "cycleResolutionPopupClass", dataField: "dataField", defaultRegion: "defaultRegion", defaultResourceImageName: "defaultResourceImageName", dependencyIdField: "dependencyIdField", destroyStore: "destroyStore", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", disableGridColumnIdWarning: "disableGridColumnIdWarning", disableGridRowModelWarning: "disableGridRowModelWarning", displaySchedulingIssueResolutionPopup: "displaySchedulingIssueResolutionPopup", dock: "dock", drawer: "drawer", durationDisplayPrecision: "durationDisplayPrecision", elementAttributes: "elementAttributes", enableDeleteKey: "enableDeleteKey", enableRecurringEvents: "enableRecurringEvents", enableSticky: "enableSticky", enableTextSelection: "enableTextSelection", enableTransactionalFeatures: "enableTransactionalFeatures", fillLastColumn: "fillLastColumn", fixedRowHeight: "fixedRowHeight", footer: "footer", formulaProviders: "formulaProviders", fullRowRefresh: "fullRowRefresh", getDateConstraints: "getDateConstraints", getRowHeight: "getRowHeight", header: "header", hideHorizontalScrollbar: "hideHorizontalScrollbar", hoverCls: "hoverCls", icon: "icon", ignoreDomEventsWhileScrolling: "ignoreDomEventsWhileScrolling", ignoreParentReadOnly: "ignoreParentReadOnly", listeners: "listeners", loadMask: "loadMask", loadMaskDefaults: "loadMaskDefaults", loadMaskError: "loadMaskError", localizable: "localizable", managedEventSizing: "managedEventSizing", maskDefaults: "maskDefaults", masked: "masked", maxTimeAxisUnit: "maxTimeAxisUnit", monitorResize: "monitorResize", newTaskDefaults: "newTaskDefaults", owner: "owner", partner: "partner", plugins: "plugins", preserveFocusOnDatasetChange: "preserveFocusOnDatasetChange", preserveScrollOnDatasetChange: "preserveScrollOnDatasetChange", preventTooltipOnTouch: "preventTooltipOnTouch", projectProgressReporting: "projectProgressReporting", relayStoreEvents: "relayStoreEvents", resizable: "resizable", resizeToFitIncludesHeader: "resizeToFitIncludesHeader", resourceImageFolderPath: "resourceImageFolderPath", resourceImagePath: "resourceImagePath", responsiveLevels: "responsiveLevels", ripple: "ripple", rootElement: "rootElement", schedulingIssueResolutionPopupClass: "schedulingIssueResolutionPopupClass", scrollerClass: "scrollerClass", scrollManager: "scrollManager", showCostControls: "showCostControls", showCreationTooltip: "showCreationTooltip", showDirty: "showDirty", showLagInTooltip: "showLagInTooltip", showRecurringUI: "showRecurringUI", showTaskColorPickers: "showTaskColorPickers", snapRelativeToEventStartDate: "snapRelativeToEventStartDate", stateful: "stateful", statefulEvents: "statefulEvents", stateId: "stateId", stateProvider: "stateProvider", stickyHeaders: "stickyHeaders", strips: "strips", subGridConfigs: "subGridConfigs", syncMask: "syncMask", tab: "tab", tabBarItems: "tabBarItems", taskRenderer: "taskRenderer", tbar: "tbar", terminalCls: "terminalCls", terminalSides: "terminalSides", timeAxis: "timeAxis", ui: "ui", visibleZoomFactor: "visibleZoomFactor", weekStartDay: "weekStartDay", weight: "weight", zoomKeepsOriginalTimespan: "zoomKeepsOriginalTimespan", zoomOnMouseWheel: "zoomOnMouseWheel", zoomOnTimeAxisDoubleClick: "zoomOnTimeAxisDoubleClick", alignSelf: "alignSelf", allowDropOnEventBar: "allowDropOnEventBar", animateTreeNodeToggle: "animateTreeNodeToggle", appendTo: "appendTo", assignments: "assignments", barMargin: "barMargin", calendars: "calendars", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cellEllipsis: "cellEllipsis", cls: "cls", collapsed: "collapsed", column: "column", columnLines: "columnLines", columns: "columns", creationTooltipTemplate: "creationTooltipTemplate", data: "data", dataset: "dataset", dependencies: "dependencies", disabled: "disabled", displayDateFormat: "displayDateFormat", emptyText: "emptyText", enableEventAnimations: "enableEventAnimations", enableUndoRedoKeys: "enableUndoRedoKeys", endDate: "endDate", eventColor: "eventColor", eventStyle: "eventStyle", extraData: "extraData", fillTicks: "fillTicks", flex: "flex", forceFit: "forceFit", height: "height", hidden: "hidden", hideFooters: "hideFooters", hideHeaders: "hideHeaders", hideRowHover: "hideRowHover", id: "id", infiniteScroll: "infiniteScroll", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", keyMap: "keyMap", labelPosition: "labelPosition", longPressTime: "longPressTime", margin: "margin", maxDate: "maxDate", maxHeight: "maxHeight", maxWidth: "maxWidth", maxZoomLevel: "maxZoomLevel", minDate: "minDate", minHeight: "minHeight", minWidth: "minWidth", minZoomLevel: "minZoomLevel", preserveScroll: "preserveScroll", presets: "presets", project: "project", readOnly: "readOnly", recurrenceConfirmationPopup: "recurrenceConfirmationPopup", rendition: "rendition", resources: "resources", rowHeight: "rowHeight", rowLines: "rowLines", rtl: "rtl", scrollable: "scrollable", scrollTaskIntoViewOnCellClick: "scrollTaskIntoViewOnCellClick", selectionMode: "selectionMode", showTooltip: "showTooltip", showUnscheduledTasks: "showUnscheduledTasks", snap: "snap", span: "span", startDate: "startDate", stateSettings: "stateSettings", store: "store", suppressFit: "suppressFit", tasks: "tasks", taskStore: "taskStore", terminalHideDelay: "terminalHideDelay", terminalOffset: "terminalOffset", terminalShowDelay: "terminalShowDelay", terminalSize: "terminalSize", tickSize: "tickSize", timeRanges: "timeRanges", timeResolution: "timeResolution", timeZone: "timeZone", title: "title", toggleParentTasksOnClick: "toggleParentTasksOnClick", tools: "tools", tooltipTemplate: "tooltipTemplate", transition: "transition", transitionDuration: "transitionDuration", useContextualRecurrenceRules: "useContextualRecurrenceRules", viewPreset: "viewPreset", visibleDate: "visibleDate", width: "width", workingTime: "workingTime", calendarManagerStore: "calendarManagerStore", focusVisible: "focusVisible", hasChanges: "hasChanges", originalStore: "originalStore", parent: "parent", scrollLeft: "scrollLeft", scrollTop: "scrollTop", scrollX: "scrollX", selectedCell: "selectedCell", selectedCells: "selectedCells", selectedRecord: "selectedRecord", selectedRecords: "selectedRecords", selectedRows: "selectedRows", state: "state", tooltip: "tooltip", zoomLevel: "zoomLevel", aiFilterFeature: "aiFilterFeature", baselinesFeature: "baselinesFeature", cellCopyPasteFeature: "cellCopyPasteFeature", cellEditFeature: "cellEditFeature", cellMenuFeature: "cellMenuFeature", cellTooltipFeature: "cellTooltipFeature", chartsFeature: "chartsFeature", columnAutoWidthFeature: "columnAutoWidthFeature", columnDragToolbarFeature: "columnDragToolbarFeature", columnLinesFeature: "columnLinesFeature", columnPickerFeature: "columnPickerFeature", columnRenameFeature: "columnRenameFeature", columnReorderFeature: "columnReorderFeature", columnResizeFeature: "columnResizeFeature", criticalPathsFeature: "criticalPathsFeature", dependenciesFeature: "dependenciesFeature", dependencyEditFeature: "dependencyEditFeature", eventFilterFeature: "eventFilterFeature", eventSegmentsFeature: "eventSegmentsFeature", excelExporterFeature: "excelExporterFeature", fileDropFeature: "fileDropFeature", fillHandleFeature: "fillHandleFeature", filterFeature: "filterFeature", filterBarFeature: "filterBarFeature", groupFeature: "groupFeature", groupSummaryFeature: "groupSummaryFeature", headerMenuFeature: "headerMenuFeature", headerZoomFeature: "headerZoomFeature", indicatorsFeature: "indicatorsFeature", labelsFeature: "labelsFeature", lockRowsFeature: "lockRowsFeature", mergeCellsFeature: "mergeCellsFeature", mspExportFeature: "mspExportFeature", nonWorkingTimeFeature: "nonWorkingTimeFeature", panFeature: "panFeature", parentAreaFeature: "parentAreaFeature", pdfExportFeature: "pdfExportFeature", percentBarFeature: "percentBarFeature", pinColumnsFeature: "pinColumnsFeature", printFeature: "printFeature", progressLineFeature: "progressLineFeature", projectEditFeature: "projectEditFeature", projectLinesFeature: "projectLinesFeature", quickFindFeature: "quickFindFeature", regionResizeFeature: "regionResizeFeature", rollupsFeature: "rollupsFeature", rowCopyPasteFeature: "rowCopyPasteFeature", rowEditFeature: "rowEditFeature", rowExpanderFeature: "rowExpanderFeature", rowReorderFeature: "rowReorderFeature", rowResizeFeature: "rowResizeFeature", scheduleMenuFeature: "scheduleMenuFeature", scheduleTooltipFeature: "scheduleTooltipFeature", scrollButtonsFeature: "scrollButtonsFeature", searchFeature: "searchFeature", sortFeature: "sortFeature", splitFeature: "splitFeature", stickyCellsFeature: "stickyCellsFeature", stripeFeature: "stripeFeature", summaryFeature: "summaryFeature", taskCopyPasteFeature: "taskCopyPasteFeature", taskDragFeature: "taskDragFeature", taskDragCreateFeature: "taskDragCreateFeature", taskEditFeature: "taskEditFeature", taskMenuFeature: "taskMenuFeature", taskNonWorkingTimeFeature: "taskNonWorkingTimeFeature", taskResizeFeature: "taskResizeFeature", taskSegmentDragFeature: "taskSegmentDragFeature", taskSegmentResizeFeature: "taskSegmentResizeFeature", taskTooltipFeature: "taskTooltipFeature", timeAxisHeaderMenuFeature: "timeAxisHeaderMenuFeature", timelineChartFeature: "timelineChartFeature", timeRangesFeature: "timeRangesFeature", timeSpanHighlightFeature: "timeSpanHighlightFeature", treeFeature: "treeFeature", treeGroupFeature: "treeGroupFeature", versionsFeature: "versionsFeature" }, outputs: { onAfterDependencyCreateDrop: "onAfterDependencyCreateDrop", onAfterDependencySave: "onAfterDependencySave", onAfterDragCreate: "onAfterDragCreate", onAfterEventEdit: "onAfterEventEdit", onAfterEventSave: "onAfterEventSave", onAfterProjectEdit: "onAfterProjectEdit", onAfterProjectSave: "onAfterProjectSave", onAfterTaskDrop: "onAfterTaskDrop", onAfterTaskEdit: "onAfterTaskEdit", onAfterTaskSave: "onAfterTaskSave", onAfterTaskSegmentDrop: "onAfterTaskSegmentDrop", onBeforeAssignmentDelete: "onBeforeAssignmentDelete", onBeforeCancelCellEdit: "onBeforeCancelCellEdit", onBeforeCancelRowEdit: "onBeforeCancelRowEdit", onBeforeCellEditStart: "onBeforeCellEditStart", onBeforeCellRangeDelete: "onBeforeCellRangeDelete", onBeforeCellRangeEdit: "onBeforeCellRangeEdit", onBeforeColumnDragStart: "onBeforeColumnDragStart", onBeforeColumnDropFinalize: "onBeforeColumnDropFinalize", onBeforeColumnResize: "onBeforeColumnResize", onBeforeCopy: "onBeforeCopy", onBeforeCSVExport: "onBeforeCSVExport", onBeforeDependencyAdd: "onBeforeDependencyAdd", onBeforeDependencyCreateDrag: "onBeforeDependencyCreateDrag", onBeforeDependencyCreateFinalize: "onBeforeDependencyCreateFinalize", onBeforeDependencyDelete: "onBeforeDependencyDelete", onBeforeDependencyEdit: "onBeforeDependencyEdit", onBeforeDependencyEditShow: "onBeforeDependencyEditShow", onBeforeDependencySave: "onBeforeDependencySave", onBeforeDestroy: "onBeforeDestroy", onBeforeDragCreate: "onBeforeDragCreate", onBeforeDragCreateFinalize: "onBeforeDragCreateFinalize", onBeforeEventDelete: "onBeforeEventDelete", onBeforeEventEdit: "onBeforeEventEdit", onBeforeEventEditShow: "onBeforeEventEditShow", onBeforeEventResize: "onBeforeEventResize", onBeforeEventResizeFinalize: "onBeforeEventResizeFinalize", onBeforeEventSave: "onBeforeEventSave", onBeforeEventSegmentResize: "onBeforeEventSegmentResize", onBeforeEventSegmentResizeFinalize: "onBeforeEventSegmentResizeFinalize", onBeforeExcelExport: "onBeforeExcelExport", onBeforeFillHandleDragStart: "onBeforeFillHandleDragStart", onBeforeFinishCellEdit: "onBeforeFinishCellEdit", onBeforeFinishRowEdit: "onBeforeFinishRowEdit", onBeforeHide: "onBeforeHide", onBeforeMspExport: "onBeforeMspExport", onBeforePan: "onBeforePan", onBeforePaste: "onBeforePaste", onBeforePdfExport: "onBeforePdfExport", onBeforePresetChange: "onBeforePresetChange", onBeforeProjectEdit: "onBeforeProjectEdit", onBeforeProjectEditShow: "onBeforeProjectEditShow", onBeforeProjectSave: "onBeforeProjectSave", onBeforeRenderRow: "onBeforeRenderRow", onBeforeRenderRows: "onBeforeRenderRows", onBeforeRowCollapse: "onBeforeRowCollapse", onBeforeRowExpand: "onBeforeRowExpand", onBeforeSelectionChange: "onBeforeSelectionChange", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onBeforeShowTerminals: "onBeforeShowTerminals", onBeforeStartRowEdit: "onBeforeStartRowEdit", onBeforeStateApply: "onBeforeStateApply", onBeforeStateSave: "onBeforeStateSave", onBeforeTaskAdd: "onBeforeTaskAdd", onBeforeTaskDelete: "onBeforeTaskDelete", onBeforeTaskDrag: "onBeforeTaskDrag", onBeforeTaskDropFinalize: "onBeforeTaskDropFinalize", onBeforeTaskEdit: "onBeforeTaskEdit", onBeforeTaskEditShow: "onBeforeTaskEditShow", onBeforeTaskResize: "onBeforeTaskResize", onBeforeTaskResizeFinalize: "onBeforeTaskResizeFinalize", onBeforeTaskSave: "onBeforeTaskSave", onBeforeTaskSegmentDrag: "onBeforeTaskSegmentDrag", onBeforeTaskSegmentDropFinalize: "onBeforeTaskSegmentDropFinalize", onBeforeTaskSegmentResize: "onBeforeTaskSegmentResize", onBeforeTaskSegmentResizeFinalize: "onBeforeTaskSegmentResizeFinalize", onBeforeToggleGroup: "onBeforeToggleGroup", onBeforeToggleNode: "onBeforeToggleNode", onCancelCellEdit: "onCancelCellEdit", onCatchAll: "onCatchAll", onCellClick: "onCellClick", onCellContextMenu: "onCellContextMenu", onCellDblClick: "onCellDblClick", onCellMenuBeforeShow: "onCellMenuBeforeShow", onCellMenuItem: "onCellMenuItem", onCellMenuShow: "onCellMenuShow", onCellMenuToggleItem: "onCellMenuToggleItem", onCellMouseEnter: "onCellMouseEnter", onCellMouseLeave: "onCellMouseLeave", onCellMouseOut: "onCellMouseOut", onCellMouseOver: "onCellMouseOver", onCollapse: "onCollapse", onCollapseNode: "onCollapseNode", onColumnDrag: "onColumnDrag", onColumnDragStart: "onColumnDragStart", onColumnDrop: "onColumnDrop", onColumnResize: "onColumnResize", onColumnResizeStart: "onColumnResizeStart", onContextMenuItem: "onContextMenuItem", onContextMenuToggleItem: "onContextMenuToggleItem", onCopy: "onCopy", onCriticalPathsHighlighted: "onCriticalPathsHighlighted", onCriticalPathsUnhighlighted: "onCriticalPathsUnhighlighted", onCurrentTimelineUpdate: "onCurrentTimelineUpdate", onDataChange: "onDataChange", onDateRangeChange: "onDateRangeChange", onDependenciesDrawn: "onDependenciesDrawn", onDependencyClick: "onDependencyClick", onDependencyContextMenu: "onDependencyContextMenu", onDependencyCreateDragStart: "onDependencyCreateDragStart", onDependencyCreateDrop: "onDependencyCreateDrop", onDependencyDblClick: "onDependencyDblClick", onDependencyMouseOut: "onDependencyMouseOut", onDependencyMouseOver: "onDependencyMouseOver", onDependencyValidationComplete: "onDependencyValidationComplete", onDependencyValidationStart: "onDependencyValidationStart", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onDragCreateEnd: "onDragCreateEnd", onDragCreateStart: "onDragCreateStart", onDragSelecting: "onDragSelecting", onElementCreated: "onElementCreated", onEventEditBeforeSetRecord: "onEventEditBeforeSetRecord", onEventMenuBeforeShow: "onEventMenuBeforeShow", onEventMenuItem: "onEventMenuItem", onEventMenuShow: "onEventMenuShow", onEventPartialResize: "onEventPartialResize", onEventResizeEnd: "onEventResizeEnd", onEventResizeStart: "onEventResizeStart", onEventSegmentPartialResize: "onEventSegmentPartialResize", onEventSegmentResizeEnd: "onEventSegmentResizeEnd", onEventSegmentResizeStart: "onEventSegmentResizeStart", onExpand: "onExpand", onExpandNode: "onExpandNode", onFileDrop: "onFileDrop", onFillHandleBeforeDragFinalize: "onFillHandleBeforeDragFinalize", onFillHandleDrag: "onFillHandleDrag", onFillHandleDragAbort: "onFillHandleDragAbort", onFillHandleDragEnd: "onFillHandleDragEnd", onFillHandleDragStart: "onFillHandleDragStart", onFinishCellEdit: "onFinishCellEdit", onFinishRowEdit: "onFinishRowEdit", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onGridRowBeforeDragStart: "onGridRowBeforeDragStart", onGridRowBeforeDropFinalize: "onGridRowBeforeDropFinalize", onGridRowDrag: "onGridRowDrag", onGridRowDragAbort: "onGridRowDragAbort", onGridRowDragStart: "onGridRowDragStart", onGridRowDrop: "onGridRowDrop", onHeaderClick: "onHeaderClick", onHeaderMenuBeforeShow: "onHeaderMenuBeforeShow", onHeaderMenuItem: "onHeaderMenuItem", onHeaderMenuShow: "onHeaderMenuShow", onHeaderMenuToggleItem: "onHeaderMenuToggleItem", onHide: "onHide", onLockRows: "onLockRows", onMouseOut: "onMouseOut", onMouseOver: "onMouseOver", onMspExport: "onMspExport", onNavigate: "onNavigate", onNoZoomChange: "onNoZoomChange", onPaint: "onPaint", onPaste: "onPaste", onPdfExport: "onPdfExport", onPercentBarDrag: "onPercentBarDrag", onPercentBarDragAbort: "onPercentBarDragAbort", onPercentBarDragStart: "onPercentBarDragStart", onPercentBarDrop: "onPercentBarDrop", onPresetChange: "onPresetChange", onProjectEditCanceled: "onProjectEditCanceled", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onReleaseTask: "onReleaseTask", onRenderRow: "onRenderRow", onRenderRows: "onRenderRows", onRenderTask: "onRenderTask", onResize: "onResize", onResourceAssignmentClick: "onResourceAssignmentClick", onResponsive: "onResponsive", onRowCollapse: "onRowCollapse", onRowExpand: "onRowExpand", onRowMouseEnter: "onRowMouseEnter", onRowMouseLeave: "onRowMouseLeave", onScheduleMenuBeforeShow: "onScheduleMenuBeforeShow", onScheduleMenuItem: "onScheduleMenuItem", onScheduleMenuShow: "onScheduleMenuShow", onScroll: "onScroll", onScrollButtonClick: "onScrollButtonClick", onSelectionChange: "onSelectionChange", onSelectionModeChange: "onSelectionModeChange", onShow: "onShow", onSplit: "onSplit", onSplitterCollapseClick: "onSplitterCollapseClick", onSplitterDragEnd: "onSplitterDragEnd", onSplitterDragStart: "onSplitterDragStart", onSplitterExpandClick: "onSplitterExpandClick", onStartCellEdit: "onStartCellEdit", onStartRowEdit: "onStartRowEdit", onSubGridCollapse: "onSubGridCollapse", onSubGridExpand: "onSubGridExpand", onTaskClick: "onTaskClick", onTaskContextMenu: "onTaskContextMenu", onTaskDblClick: "onTaskDblClick", onTaskDrag: "onTaskDrag", onTaskDragStart: "onTaskDragStart", onTaskDrop: "onTaskDrop", onTaskEditCanceled: "onTaskEditCanceled", onTaskKeyDown: "onTaskKeyDown", onTaskKeyUp: "onTaskKeyUp", onTaskMenuBeforeShow: "onTaskMenuBeforeShow", onTaskMenuItem: "onTaskMenuItem", onTaskMenuShow: "onTaskMenuShow", onTaskMouseDown: "onTaskMouseDown", onTaskMouseOut: "onTaskMouseOut", onTaskMouseOver: "onTaskMouseOver", onTaskMouseUp: "onTaskMouseUp", onTaskNonWorkingTimeClick: "onTaskNonWorkingTimeClick", onTaskNonWorkingTimeContextMenu: "onTaskNonWorkingTimeContextMenu", onTaskNonWorkingTimeDblClick: "onTaskNonWorkingTimeDblClick", onTaskPartialResize: "onTaskPartialResize", onTaskResizeEnd: "onTaskResizeEnd", onTaskResizeStart: "onTaskResizeStart", onTaskSegmentDrag: "onTaskSegmentDrag", onTaskSegmentDragStart: "onTaskSegmentDragStart", onTaskSegmentDrop: "onTaskSegmentDrop", onTaskSegmentPartialResize: "onTaskSegmentPartialResize", onTaskSegmentResizeEnd: "onTaskSegmentResizeEnd", onTaskSegmentResizeStart: "onTaskSegmentResizeStart", onTickSizeChange: "onTickSizeChange", onTimeAxisChange: "onTimeAxisChange", onTimeAxisHeaderClick: "onTimeAxisHeaderClick", onTimeAxisHeaderContextMenu: "onTimeAxisHeaderContextMenu", onTimeAxisHeaderDblClick: "onTimeAxisHeaderDblClick", onTimeAxisHeaderMenuBeforeShow: "onTimeAxisHeaderMenuBeforeShow", onTimeAxisHeaderMenuItem: "onTimeAxisHeaderMenuItem", onTimeAxisHeaderMenuShow: "onTimeAxisHeaderMenuShow", onTimelineContextChange: "onTimelineContextChange", onTimelineViewportResize: "onTimelineViewportResize", onTimeRangeHeaderClick: "onTimeRangeHeaderClick", onTimeRangeHeaderContextMenu: "onTimeRangeHeaderContextMenu", onTimeRangeHeaderDblClick: "onTimeRangeHeaderDblClick", onToggleGroup: "onToggleGroup", onToggleNode: "onToggleNode", onToolClick: "onToolClick", onTransactionChange: "onTransactionChange", onUnlockRows: "onUnlockRows", onUnsplit: "onUnsplit", onVisibleDateRangeChange: "onVisibleDateRangeChange" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
3116
3120
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumGanttBaseComponent, decorators: [{
|
|
3117
3121
|
type: Component,
|
|
3118
3122
|
args: [{
|
|
@@ -3239,12 +3243,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImpor
|
|
|
3239
3243
|
type: Input
|
|
3240
3244
|
}], masked: [{
|
|
3241
3245
|
type: Input
|
|
3242
|
-
}], maxDate: [{
|
|
3243
|
-
type: Input
|
|
3244
3246
|
}], maxTimeAxisUnit: [{
|
|
3245
3247
|
type: Input
|
|
3246
|
-
}], minDate: [{
|
|
3247
|
-
type: Input
|
|
3248
3248
|
}], monitorResize: [{
|
|
3249
3249
|
type: Input
|
|
3250
3250
|
}], newTaskDefaults: [{
|
|
@@ -3433,12 +3433,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImpor
|
|
|
3433
3433
|
type: Input
|
|
3434
3434
|
}], margin: [{
|
|
3435
3435
|
type: Input
|
|
3436
|
+
}], maxDate: [{
|
|
3437
|
+
type: Input
|
|
3436
3438
|
}], maxHeight: [{
|
|
3437
3439
|
type: Input
|
|
3438
3440
|
}], maxWidth: [{
|
|
3439
3441
|
type: Input
|
|
3440
3442
|
}], maxZoomLevel: [{
|
|
3441
3443
|
type: Input
|
|
3444
|
+
}], minDate: [{
|
|
3445
|
+
type: Input
|
|
3442
3446
|
}], minHeight: [{
|
|
3443
3447
|
type: Input
|
|
3444
3448
|
}], minWidth: [{
|
|
@@ -4216,4 +4220,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImpor
|
|
|
4216
4220
|
}], onVisibleDateRangeChange: [{
|
|
4217
4221
|
type: Output
|
|
4218
4222
|
}] } });
|
|
4219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1nYW50dC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudC9zcmMvbGliL2JyeW50dW0tZ2FudHQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0RBQXNEO0FBQ3REOztHQUVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBa0QsTUFBTSxlQUFlLENBQUM7QUFFbkksT0FBTyxhQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFFN0MsT0FBTyxFQUFtZSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUk3Z0IsT0FBTyxFQUF5UyxTQUFTLEVBQTg4QixNQUFNLHFCQUFxQixDQUFDO0FBRW55QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBOHdEbEQsTUFBTSxPQUFPLHlCQUF5QjtJQWt4QmxDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUFpV0Ysa0JBQWtCO1FBQ2xCOzs7Ozs7V0FNRztRQUNPLGdDQUEyQixHQUFRLElBQUksWUFBWSxFQUFxRyxDQUFDO1FBQ25LOzs7Ozs7V0FNRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUErRixDQUFDO1FBQ3ZKOzs7Ozs7V0FNRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUEwRSxDQUFDO1FBQzlIOzs7Ozs7Ozs7O1dBVUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBK04sQ0FBQztRQUNsUjs7Ozs7O1dBTUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBdUcsQ0FBQztRQUMxSjs7Ozs7OztXQU9HO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQW1HLENBQUM7UUFDeEo7Ozs7OztXQU1HO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQW1HLENBQUM7UUFDeEo7Ozs7OztXQU1HO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBeUYsQ0FBQztRQUMzSTs7Ozs7OztXQU9HO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBc0csQ0FBQztRQUN4Sjs7Ozs7O1dBTUc7UUFDTyxvQkFBZSxHQUFRLElBQUksWUFBWSxFQUFzRyxDQUFDO1FBQ3hKOzs7Ozs7V0FNRztRQUNPLDJCQUFzQixHQUFRLElBQUksWUFBWSxFQUF5RixDQUFDO1FBQ2xKOzs7Ozs7Ozs7Ozs7V0FZRztRQUNPLDZCQUF3QixHQUFRLElBQUksWUFBWSxFQUErSyxDQUFDO1FBQzFPOzs7OztXQUtHO1FBQ08sMkJBQXNCLEdBQVEsSUFBSSxZQUFZLEVBQW9HLENBQUM7UUFDN0o7Ozs7Ozs7V0FPRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUFzRyxDQUFDO1FBQzlKOzs7OztXQUtHO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQXlHLENBQUM7UUFDaks7Ozs7OztXQU1HO1FBQ08sNEJBQXVCLEdBQVEsSUFBSSxZQUFZLEVBQThHLENBQUM7UUFDeEs7Ozs7OztXQU1HO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQW1HLENBQUM7UUFDM0o7Ozs7OztXQU1HO1FBQ08sNEJBQXVCLEdBQVEsSUFBSSxZQUFZLEVBQXFHLENBQUM7UUFDL0o7Ozs7Ozs7OztXQVNHO1FBQ08sK0JBQTBCLEdBQVEsSUFBSSxZQUFZLEVBQThKLENBQUM7UUFDM047Ozs7Ozs7V0FPRztRQUNPLHlCQUFvQixHQUFRLElBQUksWUFBWSxFQUF3RyxDQUFDO1FBQy9KOzs7Ozs7OztXQVFHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBZ0osQ0FBQztRQUMvTDs7Ozs7Ozs7V0FRRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUFpSyxDQUFDO1FBQ3JOOzs7Ozs7O1dBT0c7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlBQVksRUFBaUssQ0FBQztRQUN6Tjs7Ozs7V0FLRztRQUNPLGlDQUE0QixHQUFRLElBQUksWUFBWSxFQUEyRSxDQUFDO1FBQzFJOzs7Ozs7O1dBT0c7UUFDTyxxQ0FBZ0MsR0FBUSxJQUFJLFlBQVksRUFBMkssQ0FBQztRQUM5Tzs7Ozs7O1dBTUc7UUFDTyw2QkFBd0IsR0FBUSxJQUFJLFlBQVksRUFBd0gsQ0FBQztRQUNuTDs7Ozs7Ozs7V0FRRztRQUNPLDJCQUFzQixHQUFRLElBQUksWUFBWSxFQUFpSyxDQUFDO1FBQzFOOzs7Ozs7OztXQVFHO1FBQ08sK0JBQTBCLEdBQVEsSUFBSSxZQUFZLEVBQXVKLENBQUM7UUFDcE47Ozs7OztXQU1HO1FBQ08sMkJBQXNCLEdBQVEsSUFBSSxZQUFZLEVBQXdJLENBQUM7UUFDak07Ozs7V0FJRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDaEc7Ozs7OztXQU1HO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQWtGLENBQUM7UUFDdkk7Ozs7Ozs7Ozs7O1dBV0c7UUFDTywrQkFBMEIsR0FBUSxJQUFJLFlBQVksRUFBMkgsQ0FBQztRQUN4TDs7Ozs7Ozs7Ozs7O1dBWUc7UUFDTyx3QkFBbUIsR0FBUSxJQUFJLFlBQVksRUFBeUssQ0FBQztRQUMvTjs7Ozs7Ozs7Ozs7O1dBWUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBdU0sQ0FBQztRQUMzUDs7Ozs7Ozs7OztXQVVHO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQTZMLENBQUM7UUFDclA7Ozs7Ozs7V0FPRztRQUNPLHdCQUFtQixHQUFRLElBQUksWUFBWSxFQUF5SyxDQUFDO1FBQy9OOzs7Ozs7Ozs7Ozs7Ozs7OztXQWlCRztRQUNPLGdDQUEyQixHQUFRLElBQUksWUFBWSxFQUFnUixDQUFDO1FBQzlVOzs7Ozs7OztXQVFHO1FBQ08sc0JBQWlCLEdBQVEsSUFBSSxZQUFZLEVBQWdJLENBQUM7UUFDcEw7Ozs7Ozs7V0FPRztRQUNPLCtCQUEwQixHQUFRLElBQUksWUFBWSxFQUFzSyxDQUFDO1FBQ25POzs7Ozs7Ozs7O1dBVUc7UUFDTyx1Q0FBa0MsR0FBUSxJQUFJLFlBQVksRUFBdUcsQ0FBQztRQUM1Szs7Ozs7O1dBTUc7UUFDTyx3QkFBbUIsR0FBUSxJQUFJLFlBQVksRUFBa0gsQ0FBQztRQUN4Szs7Ozs7V0FLRztRQUNPLGdDQUEyQixHQUFRLElBQUksWUFBWSxFQUFtRyxDQUFDO1FBQ2pLOzs7OztXQUtHO1FBQ08sMkJBQXNCLEdBQVEsSUFBSSxZQUFZLEVBQThFLENBQUM7UUFDdkk7Ozs7Ozs7V0FPRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUFzRyxDQUFDO1FBQzlKOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUFRLElBQUksWUFBWSxFQUF5RSxDQUFDO1FBQ3hIOzs7O1dBSUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBeUUsQ0FBQztRQUM3SDs7OztXQUlHO1FBQ08sZ0JBQVcsR0FBUSxJQUFJLFlBQVksRUFBdUUsQ0FBQztRQUNySDs7Ozs7Ozs7V0FRRztRQUNPLGtCQUFhLEdBQVEsSUFBSSxZQUFZLEVBQTBKLENBQUM7UUFDMU07Ozs7V0FJRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUF5RSxDQUFDO1FBQzdIOzs7Ozs7OztXQVFHO1FBQ08seUJBQW9CLEdBQVEsSUFBSSxZQUFZLEVBQThJLENBQUM7UUFDck07Ozs7Ozs7Ozs7V0FVRztRQUNPLHdCQUFtQixHQUFRLElBQUksWUFBWSxFQUErSCxDQUFDO1FBQ3JMOzs7Ozs7OztXQVFHO1FBQ08sNEJBQXVCLEdBQVEsSUFBSSxZQUFZLEVBQTZILENBQUM7UUFDdkw7Ozs7Ozs7O1dBUUc7UUFDTyx3QkFBbUIsR0FBUSxJQUFJLFlBQVksRUFBNEgsQ0FBQztRQUNsTDs7Ozs7OztXQU9HO1FBQ08sc0JBQWlCLEdBQVEsSUFBSSxZQUFZLEVBQTRGLENBQUM7UUFDaEo7Ozs7V0FJRztRQUNPLHVCQUFrQixHQUFRLElBQUksWUFBWSxFQUE4QyxDQUFDO1FBQ25HOzs7Ozs7V0FNRztRQUNPLHdCQUFtQixHQUFRLElBQUksWUFBWSxFQUF3RSxDQUFDO1FBQzlIOzs7Ozs7V0FNRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUF3RSxDQUFDO1FBQzVIOzs7Ozs7Ozs7Ozs7V0FZRztRQUNPLDRCQUF1QixHQUFRLElBQUksWUFBWSxFQUFzUSxDQUFDO1FBQ2hVOzs7Ozs7V0FNRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUFrRSxDQUFDO1FBQ3RIOzs7O1dBSUc7UUFDTyxpQkFBWSxHQUFRLElBQUksWUFBWSxFQUE2RSxDQUFDO1FBQzVIOzs7OztXQUtHO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQTJFLENBQUM7UUFDbkk7Ozs7O1dBS0c7UUFDTyx5QkFBb0IsR0FBUSxJQUFJLFlBQVksRUFBd0csQ0FBQztRQUMvSjs7OztXQUlHO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQStFLENBQUM7UUFDcEk7Ozs7V0FJRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUErRSxDQUFDO1FBQ25JOzs7OztXQUtHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBc0UsQ0FBQztRQUN4SDs7Ozs7Ozs7V0FRRztRQUNPLHVCQUFrQixHQUFRLElBQUksWUFBWSxFQUErSCxDQUFDO1FBQ3BMOzs7Ozs7V0FNRztRQUNPLHFCQUFnQixHQUFRLElBQUksWUFBWSxFQUE2RyxDQUFDO1FBQ2hLOzs7Ozs7Ozs7Ozs7V0FZRztRQUNPLDZCQUF3QixHQUFRLElBQUksWUFBWSxFQUEwSSxDQUFDO1FBQ3JNOzs7Ozs7Ozs7OztXQVdHO1FBQ08scUJBQWdCLEdBQVEsSUFBSSxZQUFZLEVBQWlLLENBQUM7UUFDcE47Ozs7Ozs7OztXQVNHO1FBQ08seUJBQW9CLEdBQVEsSUFBSSxZQUFZLEVBQWlLLENBQUM7UUFDeE47Ozs7O1dBS0c7UUFDTyx1QkFBa0IsR0FBUSxJQUFJLFlBQVksRUFBOEYsQ0FBQztRQUNuSjs7Ozs7Ozs7Ozs7Ozs7O1dBZUc7UUFDTywrQkFBMEIsR0FBUSxJQUFJLFlBQVksRUFBeU0sQ0FBQztRQUN0UTs7Ozs7Ozs7V0FRRztRQUNPLHFCQUFnQixHQUFRLElBQUksWUFBWSxFQUErSCxDQUFDO1FBQ2xMOzs7Ozs7V0FNRztRQUNPLDRCQUF1QixHQUFRLElBQUksWUFBWSxFQUE2RyxDQUFDO1FBQ3ZLOzs7Ozs7Ozs7Ozs7V0FZRztRQUNPLG9DQUErQixHQUFRLElBQUksWUFBWSxFQUEwSSxDQUFDO1FBQzVNOzs7Ozs7O1dBT0c7UUFDTyw4QkFBeUIsR0FBUSxJQUFJLFlBQVksRUFBMEosQ0FBQztRQUN0Tjs7Ozs7Ozs7OztXQVVHO1FBQ08sc0NBQWlDLEdBQVEsSUFBSSxZQUFZLEVBQWdHLENBQUM7UUFDcEs7Ozs7Ozs7O1dBUUc7UUFDTyx3QkFBbUIsR0FBUSxJQUFJLFlBQVksRUFBd0ksQ0FBQztRQUM5TDs7Ozs7O1dBTUc7UUFDTyx1QkFBa0IsR0FBUSxJQUFJLFlBQVksRUFBZ0YsQ0FBQztRQUNySTs7Ozs7O1dBTUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBeUYsQ0FBQztRQUM1STs7Ozs7OztXQU9HO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUFnRSxDQUFDO1FBQzdHOzs7Ozs7Ozs7V0FTRztRQUNPLGdCQUFXLEdBQVEsSUFBSSxZQUFZLEVBQTZJLENBQUM7UUFDM0w7Ozs7Ozs7OztXQVNHO1FBQ08sc0JBQWlCLEdBQVEsSUFBSSxZQUFZLEVBQTZJLENBQUM7UUFDak07Ozs7Ozs7OztXQVNHO1FBQ08sbUJBQWMsR0FBUSxJQUFJLFlBQVksRUFBNkksQ0FBQztRQUM5TDs7Ozs7Ozs7Ozs7V0FXRztRQUNPLHlCQUFvQixHQUFRLElBQUksWUFBWSxFQUF3SixDQUFDO1FBQy9NOzs7Ozs7OztXQVFHO1FBQ08sbUJBQWMsR0FBUSxJQUFJLFlBQVksRUFBeUcsQ0FBQztRQUMxSjs7Ozs7Ozs7V0FRRztRQUNPLG1CQUFjLEdBQVEsSUFBSSxZQUFZLEVBQStILENBQUM7UUFDaEw7Ozs7Ozs7OztXQVNHO1FBQ08seUJBQW9CLEdBQVEsSUFBSSxZQUFZLEVBQTJILENBQUM7UUFDbEw7Ozs7Ozs7O1dBUUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBMEgsQ0FBQztRQUM3Szs7Ozs7Ozs7V0FRRztRQUNPLHFCQUFnQixHQUFRLElBQUksWUFBWSxFQUEwSCxDQUFDO1FBQzdLOzs7Ozs7Ozs7V0FTRztRQUNPLG1CQUFjLEdBQVEsSUFBSSxZQUFZLEVBQTZJLENBQUM7UUFDOUw7Ozs7Ozs7OztXQVNHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBNkksQ0FBQztRQUMvTDs7OztXQUlHO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUErQyxDQUFDO1FBQzVGOzs7OztXQUtHO1FBQ08sbUJBQWMsR0FBUSxJQUFJLFlBQVksRUFBNkQsQ0FBQztRQUM5Rzs7Ozs7Ozs7OztXQVVHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBK0gsQ0FBQztRQUM5Szs7Ozs7O1dBTUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBNEUsQ0FBQztRQUNoSTs7Ozs7Ozs7Ozs7V0FXRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQThLLENBQUM7UUFDN047Ozs7OztXQU1HO1FBQ08sbUJBQWMsR0FBUSxJQUFJLFlBQVksRUFBK0UsQ0FBQztRQUNoSTs7Ozs7O1dBTUc7UUFDTyx3QkFBbUIsR0FBUSxJQUFJLFlBQVksRUFBK0UsQ0FBQztRQUNySTs7Ozs7O1dBTUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBNEUsQ0FBQztRQUNoSTs7Ozs7OztXQU9HO1FBQ08sNEJBQXVCLEdBQVEsSUFBSSxZQUFZLEVBQThGLENBQUM7UUFDeEo7Ozs7Ozs7O1dBUUc7UUFDTyxXQUFNLEdBQVEsSUFBSSxZQUFZLEVBQW1JLENBQUM7UUFDNUs7Ozs7V0FJRztRQUNPLCtCQUEwQixHQUFRLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3BGOzs7O1dBSUc7UUFDTyxpQ0FBNEIsR0FBUSxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN0Rjs7Ozs7V0FLRztRQUNPLDRCQUF1QixHQUFRLElBQUksWUFBWSxFQUErRCxDQUFDO1FBQ3pIOzs7Ozs7Ozs7OztXQVdHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBdU0sQ0FBQztRQUN0UDs7Ozs7Ozs7Ozs7Ozs7V0FjRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUF3SSxDQUFDO1FBQzVMOztXQUVHO1FBQ08sd0JBQW1CLEdBQVEsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDN0U7Ozs7OztXQU1HO1FBQ08sc0JBQWlCLEdBQVEsSUFBSSxZQUFZLEVBQTRHLENBQUM7UUFDaEs7Ozs7OztXQU1HO1FBQ08sNEJBQXVCLEdBQVEsSUFBSSxZQUFZLEVBQTRHLENBQUM7UUFDdEs7Ozs7V0FJRztRQUNPLGdDQUEyQixHQUFRLElBQUksWUFBWSxFQUFrRCxDQUFDO1FBQ2hIOzs7Ozs7V0FNRztRQUNPLDJCQUFzQixHQUFRLElBQUksWUFBWSxFQUFxRyxDQUFDO1FBQzlKOzs7Ozs7V0FNRztRQUNPLHlCQUFvQixHQUFRLElBQUksWUFBWSxFQUE0RyxDQUFDO1FBQ25LOzs7Ozs7V0FNRztRQUNPLHlCQUFvQixHQUFRLElBQUksWUFBWSxFQUE0RyxDQUFDO1FBQ25LOzs7Ozs7V0FNRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUE0RyxDQUFDO1FBQ3BLOzs7Ozs7V0FNRztRQUNPLG1DQUE4QixHQUFRLElBQUksWUFBWSxFQUE0RixDQUFDO1FBQzdKOzs7Ozs7V0FNRztRQUNPLGdDQUEyQixHQUFRLElBQUksWUFBWSxFQUE0RixDQUFDO1FBQzFKOzs7O1dBSUc7UUFDTyxjQUFTLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDMUY7Ozs7O1dBS0c7UUFDTyx1QkFBa0IsR0FBUSxJQUFJLFlBQVksRUFBbUUsQ0FBQztRQUN4SDs7Ozs7OztXQU9HO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBb0gsQ0FBQztRQUN0Szs7Ozs7V0FLRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUEwRSxDQUFDO1FBQzlIOzs7Ozs7O1dBT0c7UUFDTyxvQkFBZSxHQUFRLElBQUksWUFBWSxFQUE0SCxDQUFDO1FBQzlLOzs7O1dBSUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBc0QsQ0FBQztRQUN6Rzs7Ozs7O1dBTUc7UUFDTywrQkFBMEIsR0FBUSxJQUFJLFlBQVksRUFBZ0YsQ0FBQztRQUM3STs7Ozs7Ozs7Ozs7O1dBWUc7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlBQVksRUFBdVIsQ0FBQztRQUMvVTs7Ozs7Ozs7O1dBU0c7UUFDTyxvQkFBZSxHQUFRLElBQUksWUFBWSxFQUFvTixDQUFDO1FBQ3RROzs7Ozs7Ozs7V0FTRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQWdOLENBQUM7UUFDbFE7Ozs7Ozs7OztXQVNHO1FBQ08seUJBQW9CLEdBQVEsSUFBSSxZQUFZLEVBQTBLLENBQUM7UUFDak87Ozs7Ozs7V0FPRztRQUNPLHFCQUFnQixHQUFRLElBQUksWUFBWSxFQUFzSSxDQUFDO1FBQ3pMOzs7Ozs7OztXQVFHO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQStLLENBQUM7UUFDcE87Ozs7Ozs7O1dBUUc7UUFDTyxnQ0FBMkIsR0FBUSxJQUFJLFlBQVksRUFBcUksQ0FBQztRQUNuTTs7Ozs7O1dBTUc7UUFDTyw0QkFBdUIsR0FBUSxJQUFJLFlBQVksRUFBaUcsQ0FBQztRQUMzSjs7Ozs7OztXQU9HO1FBQ08sOEJBQXlCLEdBQVEsSUFBSSxZQUFZLEVBQTZJLENBQUM7UUFDek07Ozs7V0FJRztRQUNPLGFBQVEsR0FBUSxJQUFJLFlBQVksRUFBK0MsQ0FBQztRQUMxRjs7Ozs7V0FLRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQTZELENBQUM7UUFDNUc7Ozs7OztXQU1HO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUEyRixDQUFDO1FBQ3hJOzs7Ozs7O1dBT0c7UUFDTyxtQ0FBOEIsR0FBUSxJQUFJLFlBQVksRUFBcUgsQ0FBQztRQUN0TDs7Ozs7O1dBTUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBNEYsQ0FBQztRQUMvSTs7V0FFRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQy9FOzs7Ozs7V0FNRztRQUNPLHdCQUFtQixHQUFRLElBQUksWUFBWSxFQUE0RixDQUFDO1FBQ2xKOzs7OztXQUtHO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQW1HLENBQUM7UUFDM0o7Ozs7O1dBS0c7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBOEUsQ0FBQztRQUNqSTs7Ozs7OztXQU9HO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBc0csQ0FBQztRQUN4Sjs7Ozs7Ozs7O1dBU0c7UUFDTyxjQUFTLEdBQVEsSUFBSSxZQUFZLEVBQTRKLENBQUM7UUFDeE07Ozs7Ozs7Ozs7O1dBV0c7UUFDTyxlQUFVLEdBQVEsSUFBSSxZQUFZLEVBQTRKLENBQUM7UUFDek07Ozs7Ozs7V0FPRztRQUNPLDZCQUF3QixHQUFRLElBQUksWUFBWSxFQUF3SSxDQUFDO1FBQ25NOzs7Ozs7Ozs7Ozs7V0FZRztRQUNPLGdDQUEyQixHQUFRLElBQUksWUFBWSxFQUE4TixDQUFDO1FBQzVSOzs7Ozs7Ozs7Ozs7V0FZRztRQUNPLGtCQUFhLEdBQVEsSUFBSSxZQUFZLEVBQXdKLENBQUM7UUFDeE07Ozs7Ozs7V0FPRztRQUNPLHVCQUFrQixHQUFRLElBQUksWUFBWSxFQUFvRyxDQUFDO1FBQ3pKOzs7Ozs7O1dBT0c7UUFDTyx1QkFBa0IsR0FBUSxJQUFJLFlBQVksRUFBK0csQ0FBQztRQUNwSzs7Ozs7Ozs7Ozs7V0FXRztRQUNPLGtCQUFhLEdBQVEsSUFBSSxZQUFZLEVBQXFNLENBQUM7UUFDclA7Ozs7Ozs7V0FPRztRQUNPLGtCQUFhLEdBQVEsSUFBSSxZQUFZLEVBQTBGLENBQUM7UUFDMUk7Ozs7Ozs7Ozs7V0FVRztRQUNPLDJCQUFzQixHQUFRLElBQUksWUFBWSxFQUF5SSxDQUFDO1FBQ2xNOzs7Ozs7O1dBT0c7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBMEYsQ0FBQztRQUM3STs7Ozs7OztXQU9HO1FBQ08scUJBQWdCLEdBQVEsSUFBSSxZQUFZLEVBQWdILENBQUM7UUFDbks7Ozs7Ozs7O1dBUUc7UUFDTywyQkFBc0IsR0FBUSxJQUFJLFlBQVksRUFBNEcsQ0FBQztRQUNySzs7OztXQUlHO1FBQ08sV0FBTSxHQUFRLElBQUksWUFBWSxFQUFnRCxDQUFDO1FBQ3pGOzs7O1dBSUc7UUFDTyxlQUFVLEdBQVEsSUFBSSxZQUFZLEVBQWlELENBQUM7UUFDOUY7Ozs7V0FJRztRQUNPLGVBQVUsR0FBUSxJQUFJLFlBQVksRUFBbUQsQ0FBQztRQUNoRzs7OztXQUlHO1FBQ08sZ0JBQVcsR0FBUSxJQUFJLFlBQVksRUFBbUQsQ0FBQztRQUNqRzs7Ozs7O1dBTUc7UUFDTyxnQkFBVyxHQUFRLElBQUksWUFBWSxFQUFxRSxDQUFDO1FBQ25IOzs7Ozs7V0FNRztRQUNPLGVBQVUsR0FBUSxJQUFJLFlBQVksRUFBaUcsQ0FBQztRQUM5STs7Ozs7O1dBTUc7UUFDTyxtQkFBYyxHQUFRLElBQUksWUFBWSxFQUEwRixDQUFDO1FBQzNJOzs7Ozs7OztXQVFHO1FBQ08sWUFBTyxHQUFRLElBQUksWUFBWSxFQUFxRSxDQUFDO1FBQy9HOzs7Ozs7OztXQVFHO1FBQ08sWUFBTyxHQUFRLElBQUksWUFBWSxFQUE2SSxDQUFDO1FBQ3ZMOzs7OztXQUtHO1FBQ08sZ0JBQVcsR0FBUSxJQUFJLFlBQVksRUFBK0QsQ0FBQztRQUM3Rzs7Ozs7O1dBTUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBK0YsQ0FBQztRQUNsSjs7Ozs7O1dBTUc7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlBQVksRUFBK0YsQ0FBQztRQUN2Sjs7Ozs7O1dBTUc7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlBQVksRUFBK0YsQ0FBQztRQUN2Sjs7Ozs7O1dBTUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBK0YsQ0FBQztRQUNsSjs7Ozs7Ozs7O1dBU0c7UUFDTyxtQkFBYyxHQUFRLElBQUksWUFBWSxFQUFnSyxDQUFDO1FBQ2pOOzs7Ozs7V0FNRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUFtRyxDQUFDO1FBQzNKOzs7O1dBSUc7UUFDTyxlQUFVLEdBQVEsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFDaEc7OztXQUdHO1FBQ08sZ0JBQVcsR0FBUSxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUNyRTs7Ozs7Ozs7V0FRRztRQUNPLGtCQUFhLEdBQVEsSUFBSSxZQUFZLEVBQWdILENBQUM7UUFDaEs7Ozs7Ozs7V0FPRztRQUNPLGdCQUFXLEdBQVEsSUFBSSxZQUFZLEVBQTRGLENBQUM7UUFDMUk7Ozs7V0FJRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDN0Y7Ozs7Ozs7V0FPRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQWdILENBQUM7UUFDL0o7Ozs7Ozs7O1dBUUc7UUFDTyxhQUFRLEdBQVEsSUFBSSxZQUFZLEVBQW9ILENBQUM7UUFDL0o7Ozs7Ozs7V0FPRztRQUNPLDhCQUF5QixHQUFRLElBQUksWUFBWSxFQUFtSCxDQUFDO1FBQy9LOzs7Ozs7OztXQVFHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBOEcsQ0FBQztRQUM3Sjs7OztXQUlHO1FBQ08sa0JBQWEsR0FBUSxJQUFJLFlBQVksRUFBK0MsQ0FBQztRQUMvRjs7Ozs7Ozs7O1dBU0c7UUFDTyxnQkFBVyxHQUFRLElBQUksWUFBWSxFQUEwRyxDQUFDO1FBQ3hKOzs7Ozs7OztXQVFHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBMEgsQ0FBQztRQUM1Szs7Ozs7OztXQU9HO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBMEcsQ0FBQztRQUM1Sjs7Ozs7Ozs7Ozs7V0FXRztRQUNPLDZCQUF3QixHQUFRLElBQUksWUFBWSxFQUE2TyxDQUFDO1FBQ3hTOzs7Ozs7OztXQVFHO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQTZJLENBQUM7UUFDbE07Ozs7Ozs7OztXQVNHO1FBQ08sdUJBQWtCLEdBQVEsSUFBSSxZQUFZLEVBQXFMLENBQUM7UUFDMU87Ozs7O1dBS0c7UUFDTyxhQUFRLEdBQVEsSUFBSSxZQUFZLEVBQWlFLENBQUM7UUFDNUc7Ozs7O1dBS0c7UUFDTyx3QkFBbUIsR0FBUSxJQUFJLFlBQVksRUFBaUcsQ0FBQztRQUN2Sjs7Ozs7Ozs7Ozs7O1dBWUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBMFAsQ0FBQztRQUM5Uzs7OztXQUlHO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQXVELENBQUM7UUFDL0c7Ozs7V0FJRztRQUNPLFdBQU0sR0FBUSxJQUFJLFlBQVksRUFBZ0QsQ0FBQztRQUN6Rjs7Ozs7Ozs7V0FRRztRQUNPLFlBQU8sR0FBUSxJQUFJLFlBQVksRUFBaUosQ0FBQztRQUMzTDs7Ozs7OztXQU9HO1FBQ08sNEJBQXVCLEdBQVEsSUFBSSxZQUFZLEVBQTBHLENBQUM7UUFDcEs7Ozs7OztXQU1HO1FBQ08sc0JBQWlCLEdBQVEsSUFBSSxZQUFZLEVBQWlGLENBQUM7UUFDckk7Ozs7OztXQU1HO1FBQ08sd0JBQW1CLEdBQVEsSUFBSSxZQUFZLEVBQWlGLENBQUM7UUFDdkk7Ozs7Ozs7V0FPRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUEwRyxDQUFDO1FBQ2xLOzs7OztXQUtHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBZ0YsQ0FBQztRQUNsSTs7Ozs7V0FLRztRQUNPLG1CQUFjLEdBQVEsSUFBSSxZQUFZLEVBQStFLENBQUM7UUFDaEk7Ozs7O1dBS0c7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBZ0UsQ0FBQztRQUNwSDs7Ozs7V0FLRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQWdFLENBQUM7UUFDbEg7Ozs7OztXQU1HO1FBQ08sZ0JBQVcsR0FBUSxJQUFJLFlBQVksRUFBeUYsQ0FBQztRQUN2STs7Ozs7O1dBTUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBeUYsQ0FBQztRQUM3STs7Ozs7O1dBTUc7UUFDTyxtQkFBYyxHQUFRLElBQUksWUFBWSxFQUF5RixDQUFDO1FBQzFJOzs7Ozs7Ozs7V0FTRztRQUNPLGVBQVUsR0FBUSxJQUFJLFlBQVksRUFBNkksQ0FBQztRQUMxTDs7Ozs7V0FLRztRQUNPLG9CQUFlLEdBQVEsSUFBSSxZQUFZLEVBQXlFLENBQUM7UUFDM0g7Ozs7OztXQU1HO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUEwRixDQUFDO1FBQ3ZJOzs7Ozs7V0FNRztRQUNPLHVCQUFrQixHQUFRLElBQUksWUFBWSxFQUFzRyxDQUFDO1FBQzNKOzs7Ozs7V0FNRztRQUNPLGtCQUFhLEdBQVEsSUFBSSxZQUFZLEVBQTRGLENBQUM7UUFDNUk7Ozs7OztXQU1HO1FBQ08sZ0JBQVcsR0FBUSxJQUFJLFlBQVksRUFBNEYsQ0FBQztRQUMxSTs7Ozs7Ozs7O1dBU0c7UUFDTyx5QkFBb0IsR0FBUSxJQUFJLFlBQVksRUFBaUosQ0FBQztRQUN4TTs7Ozs7OztXQU9HO1FBQ08sbUJBQWMsR0FBUSxJQUFJLFlBQVksRUFBZ0gsQ0FBQztRQUNqSzs7Ozs7OztXQU9HO1FBQ08sbUJBQWMsR0FBUSxJQUFJLFlBQVksRUFBNEcsQ0FBQztRQUM3Sjs7Ozs7O1dBTUc7UUFDTyxvQkFBZSxHQUFRLElBQUksWUFBWSxFQUF5RixDQUFDO1FBQzNJOzs7Ozs7V0FNRztRQUNPLG1CQUFjLEdBQVEsSUFBSSxZQUFZLEVBQXlGLENBQUM7UUFDMUk7Ozs7OztXQU1HO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBeUYsQ0FBQztRQUMzSTs7Ozs7O1dBTUc7UUFDTyxrQkFBYSxHQUFRLElBQUksWUFBWSxFQUF5RixDQUFDO1FBQ3pJOzs7Ozs7Ozs7O1dBVUc7UUFDTyw4QkFBeUIsR0FBUSxJQUFJLFlBQVksRUFBd0osQ0FBQztRQUNwTjs7Ozs7Ozs7OztXQVVHO1FBQ08sb0NBQStCLEdBQVEsSUFBSSxZQUFZLEVBQXdKLENBQUM7UUFDMU47Ozs7Ozs7Ozs7V0FVRztRQUNPLGlDQUE0QixHQUFRLElBQUksWUFBWSxFQUF3SixDQUFDO1FBQ3ZOOzs7Ozs7OztXQVFHO1FBQ08sd0JBQW1CLEdBQVEsSUFBSSxZQUFZLEVBQTJJLENBQUM7UUFDak07Ozs7OztXQU1HO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBdUcsQ0FBQztRQUN6Sjs7Ozs7O1dBTUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBbUcsQ0FBQztRQUN2Sjs7Ozs7Ozs7O1dBU0c7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBNkksQ0FBQztRQUNqTTs7Ozs7V0FLRztRQUNPLDJCQUFzQixHQUFRLElBQUksWUFBWSxFQUF5RSxDQUFDO1FBQ2xJOzs7Ozs7V0FNRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUEwRixDQUFDO1FBQzlJOzs7Ozs7OztXQVFHO1FBQ08sK0JBQTBCLEdBQVEsSUFBSSxZQUFZLEVBQTRILENBQUM7UUFDekw7Ozs7OztXQU1HO1FBQ08sMkJBQXNCLEdBQVEsSUFBSSxZQUFZLEVBQXdGLENBQUM7UUFDako7Ozs7Ozs7V0FPRztRQUNPLDZCQUF3QixHQUFRLElBQUksWUFBWSxFQUFpSSxDQUFDO1FBQzVMOzs7Ozs7O1dBT0c7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBcUUsQ0FBQztRQUN4SDs7Ozs7OztXQU9HO1FBQ08scUJBQWdCLEdBQVEsSUFBSSxZQUFZLEVBQStGLENBQUM7UUFDbEo7Ozs7Ozs7V0FPRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUFzSSxDQUFDO1FBQzlMOzs7Ozs7O1dBT0c7UUFDTyxnQ0FBMkIsR0FBUSxJQUFJLFlBQVksRUFBc0ksQ0FBQztRQUNwTTs7Ozs7OztXQU9HO1FBQ08sNkJBQXdCLEdBQVEsSUFBSSxZQUFZLEVBQXNJLENBQUM7UUFDak07Ozs7Ozs7Ozs7V0FVRztRQUNPLG1DQUE4QixHQUFRLElBQUksWUFBWSxFQUE4SSxDQUFDO1FBQy9NOzs7Ozs7O1dBT0c7UUFDTyw2QkFBd0IsR0FBUSxJQUFJLFlBQVksRUFBK0YsQ0FBQztRQUMxSjs7Ozs7OztXQU9HO1FBQ08sNkJBQXdCLEdBQVEsSUFBSSxZQUFZLEVBQXFILENBQUM7UUFDaEw7Ozs7O1dBS0c7UUFDTyw0QkFBdUIsR0FBUSxJQUFJLFlBQVksRUFBdUYsQ0FBQztRQUNqSjs7Ozs7Ozs7OztXQVVHO1FBQ08sNkJBQXdCLEdBQVEsSUFBSSxZQUFZLEVBQW9ILENBQUM7UUFDL0s7Ozs7OztXQU1HO1FBQ08sMkJBQXNCLEdBQVEsSUFBSSxZQUFZLEVBQW9HLENBQUM7UUFDN0o7Ozs7OztXQU1HO1FBQ08saUNBQTRCLEdBQVEsSUFBSSxZQUFZLEVBQW9HLENBQUM7UUFDbks7Ozs7OztXQU1HO1FBQ08sOEJBQXlCLEdBQVEsSUFBSSxZQUFZLEVBQW9HLENBQUM7UUFDaEs7Ozs7Ozs7V0FPRztRQUNPLGtCQUFhLEdBQVEsSUFBSSxZQUFZLEVBQW9ILENBQUM7UUFDcEs7Ozs7O1dBS0c7UUFDTyxpQkFBWSxHQUFRLElBQUksWUFBWSxFQUFrRSxDQUFDO1FBQ2pIOzs7OztXQUtHO1FBQ08sZ0JBQVcsR0FBUSxJQUFJLFlBQVksRUFBMEQsQ0FBQztRQUN4Rzs7Ozs7O1dBTUc7UUFDTyx3QkFBbUIsR0FBUSxJQUFJLFlBQVksRUFBcUQsQ0FBQztRQUMzRzs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBaUQsQ0FBQztRQUNoRzs7V0FFRztRQUNPLGNBQVMsR0FBUSxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUNuRTs7Ozs7Ozs7Ozs7OztXQWFHO1FBQ08sNkJBQXdCLEdBQVEsSUFBSSxZQUFZLEVBQXFJLENBQUM7UUFsaUY1TCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUM5QixDQUFDO0lBbWlGRDs7T0FFRztJQUNILFFBQVE7UUFDSixNQUNJLEVBQUUsR0FBRyxJQUFJLEVBQ1QsRUFDSSxVQUFVLEVBQ1YsYUFBYSxFQUNoQixHQUFHLEVBQUUsRUFDTixFQUNJLGFBQWEsRUFDYixZQUFZLEVBQ1osY0FBYyxFQUNkLGFBQWEsRUFDaEIsR0FBRyx5QkFBeUIsQ0FBQztRQUVsQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RCxhQUFhO1lBQ2IsYUFBYSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN2QyxhQUFhLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzFEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxhQUFhO1FBQ2IsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0YsTUFDSSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDMUUsU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTVELGFBQWE7WUFDYixhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxhQUFhO2dCQUNiLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLHNHQUFzRztnQkFDdEcsdUJBQXVCO2dCQUN2QixPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDekIsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFFSCx3RkFBd0Y7UUFDeEYsTUFDSSxjQUFjLEdBQUc7WUFDYixPQUFPO1lBQ1AsVUFBVTtZQUNWLGFBQWE7WUFDYixjQUFjO1lBQ2QsYUFBYTtTQUNoQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsSUFBSSxZQUFZLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLFlBQVksVUFBVSxFQUFFO2dCQUMzRiwrREFBK0Q7Z0JBQy9ELGFBQWEsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQzthQUNyRDtpQkFDSTtnQkFDRCxhQUFhLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7YUFDbEQ7U0FDSjthQUNJO1lBQ0QsYUFBYSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztTQUNuRTtRQUVELGFBQWE7UUFDYixFQUFFLENBQUMsUUFBUSxHQUFHLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTFHLG1FQUFtRTtRQUNuRSxhQUFhO1FBQ2IsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUN2RSxHQUFHO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixNQUNJLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxFQUNuQixFQUFFLFlBQVksRUFBRSxHQUFHLHlCQUF5QixDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPO1NBQ1Y7UUFDRCwyQkFBMkI7UUFDM0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQy9DLE1BQ0ksUUFBUSxHQUFJLE1BQXVCLENBQUMsWUFBWSxFQUNoRCxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFDbkIsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsR0FBRyx5QkFBeUIsQ0FBQztZQUNyRSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzdCLGFBQWEsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzlELElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNuQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUMxRDthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1AsYUFBYTtRQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQzs7QUE5NUdhLHVDQUFhLEdBQUcsU0FBUyxDQUFDO0FBRTFCLHNDQUFZLEdBQUcsV0FBVyxDQUFDO0FBRTFCLHVDQUFhLEdBQWE7SUFDckMsNkJBQTZCO0lBQzdCLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QiwwQkFBMEI7SUFDMUIsd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2Qix1QkFBdUI7SUFDdkIseUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2Qix5QkFBeUI7SUFDekIsNEJBQTRCO0lBQzVCLHNCQUFzQjtJQUN0QixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2Qiw4QkFBOEI7SUFDOUIsa0NBQWtDO0lBQ2xDLDBCQUEwQjtJQUMxQix3QkFBd0I7SUFDeEIsNEJBQTRCO0lBQzVCLHdCQUF3QjtJQUN4QixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLDRCQUE0QjtJQUM1QixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixxQkFBcUI7SUFDckIsNkJBQTZCO0lBQzdCLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIsb0NBQW9DO0lBQ3BDLHFCQUFxQjtJQUNyQiw2QkFBNkI7SUFDN0Isd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2QixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLHNCQUFzQjtJQUN0QixxQkFBcUI7SUFDckIseUJBQXlCO0lBQ3pCLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIseUJBQXlCO0lBQ3pCLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsdUJBQXVCO0lBQ3ZCLHNCQUFzQjtJQUN0QixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLDBCQUEwQjtJQUMxQixrQkFBa0I7SUFDbEIsc0JBQXNCO0lBQ3RCLG9CQUFvQjtJQUNwQiw0QkFBNEI7SUFDNUIsa0JBQWtCO0lBQ2xCLHlCQUF5QjtJQUN6QixpQ0FBaUM7SUFDakMsMkJBQTJCO0lBQzNCLG1DQUFtQztJQUNuQyxxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLHlCQUF5QjtJQUN6QixRQUFRO0lBQ1IsNEJBQTRCO0lBQzVCLDhCQUE4QjtJQUM5Qix5QkFBeUI7SUFDekIsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLHlCQUF5QjtJQUN6Qiw2QkFBNkI7SUFDN0Isd0JBQXdCO0lBQ3hCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLGdDQUFnQztJQUNoQyw2QkFBNkI7SUFDN0IsV0FBVztJQUNYLG9CQUFvQjtJQUNwQixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsNEJBQTRCO0lBQzVCLHVCQUF1QjtJQUN2QixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLHNCQUFzQjtJQUN0QixrQkFBa0I7SUFDbEIsb0JBQW9CO0lBQ3BCLDZCQUE2QjtJQUM3Qix5QkFBeUI7SUFDekIsMkJBQTJCO0lBQzNCLFVBQVU7SUFDVixjQUFjO0lBQ2QsWUFBWTtJQUNaLGdDQUFnQztJQUNoQyxrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLHFCQUFxQjtJQUNyQix1QkFBdUI7SUFDdkIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsWUFBWTtJQUNaLDBCQUEwQjtJQUMxQiw2QkFBNkI7SUFDN0IsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIsZUFBZTtJQUNmLGVBQWU7SUFDZix3QkFBd0I7SUFDeEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsUUFBUTtJQUNSLFlBQVk7SUFDWixZQUFZO0lBQ1osYUFBYTtJQUNiLGFBQWE7SUFDYixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxTQUFTO0lBQ1QsYUFBYTtJQUNiLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsdUJBQXVCO0lBQ3ZCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsdUJBQXVCO0lBQ3ZCLFlBQVk7SUFDWixhQUFhO0lBQ2IsZUFBZTtJQUNmLGFBQWE7SUFDYixjQUFjO0lBQ2QsY0FBYztJQUNkLFVBQVU7SUFDViwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQiwwQkFBMEI7SUFDMUIsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQixVQUFVO0lBQ1YscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsUUFBUTtJQUNSLFNBQVM7SUFDVCx5QkFBeUI7SUFDekIsbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQix1QkFBdUI7SUFDdkIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsWUFBWTtJQUNaLG9CQUFvQjtJQUNwQixlQUFlO0lBQ2YsYUFBYTtJQUNiLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZiwyQkFBMkI7SUFDM0IsaUNBQWlDO0lBQ2pDLDhCQUE4QjtJQUM5QixxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQiw0QkFBNEI7SUFDNUIsd0JBQXdCO0lBQ3hCLDBCQUEwQjtJQUMxQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLHVCQUF1QjtJQUN2Qiw2QkFBNkI7SUFDN0IsMEJBQTBCO0lBQzFCLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLHlCQUF5QjtJQUN6QiwwQkFBMEI7SUFDMUIsd0JBQXdCO0lBQ3hCLDhCQUE4QjtJQUM5QiwyQkFBMkI7SUFDM0IsZUFBZTtJQUNmLGNBQWM7SUFDZCxhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLGNBQWM7SUFDZCxXQUFXO0lBQ1gsMEJBQTBCO0NBQzdCLENBQUM7QUFFYSw2Q0FBbUIsR0FBYTtJQUMzQyxpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0QixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQixlQUFlO0lBQ2Ysd0JBQXdCO0lBQ3hCLDBCQUEwQjtJQUMxQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIscUJBQXFCO0lBQ3JCLHNCQUFzQjtJQUN0QixxQkFBcUI7SUFDckIsdUJBQXVCO0lBQ3ZCLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIsc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLGtCQUFrQjtJQUNsQixjQUFjO0lBQ2QscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QscUJBQXFCO0lBQ3JCLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIscUJBQXFCO0lBQ3JCLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsd0JBQXdCO0lBQ3hCLHNCQUFzQjtJQUN0QixlQUFlO0lBQ2YsYUFBYTtJQUNiLGNBQWM7SUFDZCxvQkFBb0I7SUFDcEIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLHVCQUF1QjtJQUN2QixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLDJCQUEyQjtJQUMzQixtQkFBbUI7SUFDbkIsd0JBQXdCO0lBQ3hCLDBCQUEwQjtJQUMxQixvQkFBb0I7SUFDcEIsMkJBQTJCO0lBQzNCLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsMEJBQTBCO0lBQzFCLGFBQWE7SUFDYixrQkFBa0I7SUFDbEIsaUJBQWlCO0NBQ3BCLENBQUM7QUFFYSx3Q0FBYyxHQUFhLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztJQUMzRixPQUFPO0lBQ1AsV0FBVztJQUNYLGFBQWE7SUFDYix1QkFBdUI7SUFDdkIscUJBQXFCO0lBQ3JCLHVCQUF1QjtJQUN2QixxQkFBcUI7SUFDckIsdUJBQXVCO0lBQ3ZCLFVBQVU7SUFDVixpQkFBaUI7SUFDakIsV0FBVztJQUNYLGFBQWE7SUFDYixvQkFBb0I7SUFDcEIsWUFBWTtJQUNaLFdBQVc7SUFDWCxNQUFNO0lBQ04sU0FBUztJQUNULGNBQWM7SUFDZCxZQUFZO0lBQ1osaUJBQWlCO0lBQ2pCLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsNkJBQTZCO0lBQzdCLGNBQWM7SUFDZCxLQUFLO0lBQ0wsV0FBVztJQUNYLGFBQWE7SUFDYixPQUFPO0lBQ1AsUUFBUTtJQUNSLGFBQWE7SUFDYixTQUFTO0lBQ1QsUUFBUTtJQUNSLG1CQUFtQjtJQUNuQix5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLHlCQUF5QjtJQUN6QiwyQkFBMkI7SUFDM0IsTUFBTTtJQUNOLFdBQVc7SUFDWCxTQUFTO0lBQ1QsZUFBZTtJQUNmLDBCQUEwQjtJQUMxQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLGNBQWM7SUFDZCw4QkFBOEI7SUFDOUIsVUFBVTtJQUNWLDRCQUE0QjtJQUM1Qiw0QkFBNEI7SUFDNUIsbUJBQW1CO0lBQ25CLHVDQUF1QztJQUN2QyxNQUFNO0lBQ04sUUFBUTtJQUNSLDBCQUEwQjtJQUMxQixtQkFBbUI7SUFDbkIsV0FBVztJQUNYLGlCQUFpQjtJQUNqQix1QkFBdUI7SUFDdkIsdUJBQXVCO0lBQ3ZCLGNBQWM7SUFDZCxxQkFBcUI7SUFDckIsNkJBQTZCO0lBQzdCLG9CQUFvQjtJQUNwQixTQUFTO0lBQ1QsWUFBWTtJQUNaLFlBQVk7SUFDWixXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsTUFBTTtJQUNOLFFBQVE7SUFDUixVQUFVO0lBQ1Ysa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsY0FBYztJQUNkLFFBQVE7SUFDUixRQUFRO0lBQ1IsUUFBUTtJQUNSLGFBQWE7SUFDYixhQUFhO0lBQ2IseUJBQXlCO0lBQ3pCLGNBQWM7SUFDZCxVQUFVO0lBQ1YsTUFBTTtJQUNOLElBQUk7SUFDSiwrQkFBK0I7SUFDL0Isc0JBQXNCO0lBQ3RCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsY0FBYztJQUNkLGFBQWE7SUFDYixRQUFRO0lBQ1IsZUFBZTtJQUNmLFdBQVc7SUFDWCxVQUFVO0lBQ1Ysa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixhQUFhO0lBQ2IsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixRQUFRO0lBQ1IsY0FBYztJQUNkLFFBQVE7SUFDUixTQUFTO0lBQ1QsV0FBVztJQUNYLGlCQUFpQjtJQUNqQixVQUFVO0lBQ1YsY0FBYztJQUNkLFNBQVM7SUFDVCxXQUFXO0lBQ1gsVUFBVTtJQUNWLGNBQWM7SUFDZCxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLE9BQU87SUFDUCxTQUFTO0lBQ1QsU0FBUztJQUNULDhCQUE4QjtJQUM5QixnQkFBZ0I7SUFDaEIsK0JBQStCO0lBQy9CLFNBQVM7SUFDVCx1QkFBdUI7SUFDdkIsU0FBUztJQUNULDBCQUEwQjtJQUMxQixVQUFVO0lBQ1YsNkJBQTZCO0lBQzdCLGtCQUFrQjtJQUNsQixXQUFXO0lBQ1gsV0FBVztJQUNYLDJCQUEyQjtJQUMzQix5QkFBeUI7SUFDekIsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsUUFBUTtJQUNSLGFBQWE7SUFDYixXQUFXO0lBQ1gsVUFBVTtJQUNWLEtBQUs7SUFDTCxxQ0FBcUM7SUFDckMsWUFBWTtJQUNaLGVBQWU7SUFDZixlQUFlO0lBQ2YsK0JBQStCO0lBQy9CLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHNCQUFzQjtJQUN0QixhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLE1BQU07SUFDTiw4QkFBOEI7SUFDOUIsTUFBTTtJQUNOLFdBQVc7SUFDWCxVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGVBQWU7SUFDZixPQUFPO0lBQ1AsUUFBUTtJQUNSLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2IsVUFBVTtJQUNWLEtBQUs7SUFDTCxhQUFhO0lBQ2IsY0FBYztJQUNkLE9BQU87SUFDUCxXQUFXO0lBQ1gsTUFBTTtJQUNOLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsY0FBYztJQUNkLFVBQVU7SUFDVixVQUFVO0lBQ1YsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixVQUFVO0lBQ1YsT0FBTztJQUNQLDBCQUEwQjtJQUMxQixPQUFPO0lBQ1AsaUJBQWlCO0lBQ2pCLFlBQVk7SUFDWixvQkFBb0I7SUFDcEIsSUFBSTtJQUNKLDhCQUE4QjtJQUM5QixZQUFZO0lBQ1osYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsUUFBUTtJQUNSLE9BQU87SUFDUCxhQUFhO0lBQ2IsMkJBQTJCO0lBQzNCLGtCQUFrQjtJQUNsQiwyQkFBMkI7Q0FDOUIsQ0FBQyxDQUFDO0FBRVksNENBQWtCLEdBQWE7SUFDMUMsT0FBTztJQUNQLGFBQWE7SUFDYix1QkFBdUI7SUFDdkIsdUJBQXVCO0lBQ3ZCLHFCQUFxQjtJQUNyQixpQkFBaUI7SUFDakIsV0FBVztJQUNYLG9CQUFvQjtJQUNwQixZQUFZO0lBQ1osTUFBTTtJQUNOLFNBQVM7SUFDVCxjQUFjO0lBQ2QsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsT0FBTztJQUNQLFFBQVE7SUFDUixtQkFBbUI7SUFDbkIseUJBQXlCO0lBQ3pCLGlCQUFpQjtJQUNqQiwyQkFBMkI7SUFDM0IsV0FBVztJQUNYLGVBQWU7SUFDZiwwQkFBMEI7SUFDMUIsbUJBQW1CO0lBQ25CLGNBQWM7SUFDZCw4QkFBOEI7SUFDOUIsNEJBQTRCO0lBQzVCLDRCQUE0QjtJQUM1Qix1Q0FBdUM7SUFDdkMsTUFBTTtJQUNOLFFBQVE7SUFDUiwwQkFBMEI7SUFDMUIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQix1QkFBdUI7SUFDdkIsY0FBYztJQUNkLHFCQUFxQjtJQUNyQiw2QkFBNkI7SUFDN0IsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1Isa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsY0FBYztJQUNkLFFBQVE7SUFDUix5QkFBeUI7SUFDekIsVUFBVTtJQUNWLE1BQU07SUFDTiwrQkFBK0I7SUFDL0Isc0JBQXNCO0lBQ3RCLFdBQVc7SUFDWCxVQUFVO0lBQ1Ysa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixhQUFhO0lBQ2Isb0JBQW9CO0lBQ3BCLGNBQWM7SUFDZCxRQUFRO0lBQ1IsU0FBUztJQUNULGlCQUFpQjtJQUNqQixTQUFTO0lBQ1QsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixPQUFPO0lBQ1AsU0FBUztJQUNULFNBQVM7SUFDVCw4QkFBOEI7SUFDOUIsK0JBQStCO0lBQy9CLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsa0JBQWtCO0lBQ2xCLFdBQVc7SUFDWCwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsUUFBUTtJQUNSLGFBQWE7SUFDYixxQ0FBcUM7SUFDckMsZUFBZTtJQUNmLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHNCQUFzQjtJQUN0Qiw4QkFBOEI7SUFDOUIsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixTQUFTO0lBQ1QsZUFBZTtJQUNmLGVBQWU7SUFDZixRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLFVBQVU7SUFDVixLQUFLO0lBQ0wsYUFBYTtJQUNiLGNBQWM7SUFDZCxNQUFNO0lBQ04sYUFBYTtJQUNiLGVBQWU7SUFDZixVQUFVO0lBQ1YsSUFBSTtJQUNKLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsUUFBUTtJQUNSLDJCQUEyQjtJQUMzQixrQkFBa0I7SUFDbEIsMkJBQTJCO0NBQzlCLENBQUM7QUFFYSxzQ0FBWSxHQUFhLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztJQUN6RixXQUFXO0lBQ1gscUJBQXFCO0lBQ3JCLHVCQUF1QjtJQUN2QixVQUFVO0lBQ1YsYUFBYTtJQUNiLFdBQVc7SUFDWCxzQkFBc0I7SUFDdEIsV0FBVztJQUNYLGlCQUFpQjtJQUNqQiw2QkFBNkI7SUFDN0IsY0FBYztJQUNkLEtBQUs7SUFDTCxXQUFXO0lBQ1gsUUFBUTtJQUNSLGFBQWE7SUFDYixTQUFTO0lBQ1QseUJBQXlCO0lBQ3pCLE1BQU07SUFDTixTQUFTO0lBQ1QsY0FBYztJQUNkLFVBQVU7SUFDVixtQkFBbUI7SUFDbkIsV0FBVztJQUNYLHVCQUF1QjtJQUN2QixvQkFBb0I7SUFDcEIsU0FBUztJQUNULFlBQVk7SUFDWixZQUFZO0lBQ1osV0FBVztJQUNYLFdBQVc7SUFDWCxNQUFNO0lBQ04sY0FBYztJQUNkLFVBQVU7SUFDVixZQUFZO0lBQ1osUUFBUTtJQUNSLFFBQVE7SUFDUixhQUFhO0lBQ2IsYUFBYTtJQUNiLGNBQWM7SUFDZCxJQUFJO0lBQ0osZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2QsYUFBYTtJQUNiLFFBQVE7SUFDUixlQUFlO0lBQ2YsZUFBZTtJQUNmLFFBQVE7SUFDUixXQUFXO0lBQ1gsVUFBVTtJQUNWLGNBQWM7SUFDZCxXQUFXO0lBQ1gsVUFBVTtJQUNWLGNBQWM7SUFDZCxlQUFlO0lBQ2YsUUFBUTtJQUNSLGdCQUFnQjtJQUNoQixTQUFTO0lBQ1QsU0FBUztJQUNULFVBQVU7SUFDViw2QkFBNkI7SUFDN0IsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsVUFBVTtJQUNWLEtBQUs7SUFDTCxZQUFZO0lBQ1osWUFBWTtJQUNaLCtCQUErQjtJQUMvQixXQUFXO0lBQ1gsU0FBUztJQUNULGNBQWM7SUFDZCxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2QsZUFBZTtJQUNmLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsTUFBTTtJQUNOLE1BQU07SUFDTixXQUFXO0lBQ1gsT0FBTztJQUNQLGVBQWU7SUFDZixPQUFPO0lBQ1AsYUFBYTtJQUNiLE9BQU87SUFDUCxXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsY0FBYztJQUNkLFVBQVU7SUFDVixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLFVBQVU7SUFDVixPQUFPO0lBQ1AsMEJBQTBCO0lBQzFCLE9BQU87SUFDUCxTQUFTO0lBQ1QsaUJBQWlCO0lBQ2pCLFlBQVk7SUFDWixvQkFBb0I7SUFDcEIsOEJBQThCO0lBQzlCLFlBQVk7SUFDWixhQUFhO0lBQ2IsT0FBTztJQUNQLGFBQWE7SUFDYixXQUFXO0NBQ2QsQ0FBQyxDQUFDO3NIQXB3Qk0seUJBQXlCOzBHQUF6Qix5QkFBeUIsa3dvQkFGdkIsRUFBRTsyRkFFSix5QkFBeUI7a0JBSnJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFHLG9CQUFvQjtvQkFDL0IsUUFBUSxFQUFHLEVBQUU7aUJBQ2hCO2lHQXd4QlksS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyxxQ0FBcUM7c0JBQTdDLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUtHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG1DQUFtQztzQkFBM0MsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBWUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBUUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQVVJLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFRRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBUUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQVlHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFRRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBU0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQVFHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFRRyxlQUFlO3NCQUF4QixNQUFNO2dCQVNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBUUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFRRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBY0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQU9HLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFTRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQVFHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFRRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBUUcsdUJBQXVCO3NCQUFoQyxNQUFNO2dCQVdHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFTRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBVUcsWUFBWTtzQkFBckIsTUFBTTtnQkFVRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBU0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQU9HLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFTRyxnQ0FBZ0M7c0JBQXpDLE1BQU07Z0JBUUcsd0JBQXdCO3NCQUFqQyxNQUFNO2dCQVVHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFVRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBUUcsc0JBQXNCO3NCQUEvQixNQUFNO2dCQU1HLGVBQWU7c0JBQXhCLE1BQU07Z0JBUUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQWFHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFjRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBY0csaUJBQWlCO3NCQUExQixNQUFNO2dCQVlHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFTRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBbUJHLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFVRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBU0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQVlHLGtDQUFrQztzQkFBM0MsTUFBTTtnQkFRRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBT0csMkJBQTJCO3NCQUFwQyxNQUFNO2dCQU9HLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFTRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBTUcsWUFBWTtzQkFBckIsTUFBTTtnQkFNRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBTUcsV0FBVztzQkFBcEIsTUFBTTtnQkFVRyxhQUFhO3NCQUF0QixNQUFNO2dCQU1HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFVRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBWUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQVVHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFVRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBU0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFRRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBUUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQWNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFRRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBTUcsWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQU1HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFNRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0csZUFBZTtzQkFBeEIsTUFBTTtnQkFVRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBUUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQWNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFhRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBV0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQU9HLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFpQkcsMEJBQTBCO3NCQUFuQyxNQUFNO2dCQVVHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFRRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBY0csK0JBQStCO3NCQUF4QyxNQUFNO2dCQVNHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFZRyxpQ0FBaUM7c0JBQTFDLE1BQU07Z0JBVUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQVFHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFRRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBU0csVUFBVTtzQkFBbkIsTUFBTTtnQkFXRyxXQUFXO3NCQUFwQixNQUFNO2dCQVdHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFXRyxjQUFjO3NCQUF2QixNQUFNO2dCQWFHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFVRyxjQUFjO3NCQUF2QixNQUFNO2dCQVVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBV0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQVVHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFVRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBV0csY0FBYztzQkFBdkIsTUFBTTtnQkFXRyxlQUFlO3NCQUF4QixNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBT0csY0FBYztzQkFBdkIsTUFBTTtnQkFZRyxZQUFZO3NCQUFyQixNQUFNO2dCQVFHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFhRyxZQUFZO3NCQUFyQixNQUFNO2dCQVFHLGNBQWM7c0JBQXZCLE1BQU07Z0JBUUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQVFHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFTRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBVUcsTUFBTTtzQkFBZixNQUFNO2dCQU1HLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFNRyw0QkFBNEI7c0JBQXJDLE1BQU07Z0JBT0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQWFHLFlBQVk7c0JBQXJCLE1BQU07Z0JBZ0JHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFJRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBUUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQVFHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFNRywyQkFBMkI7c0JBQXBDLE1BQU07Z0JBUUcsc0JBQXNCO3NCQUEvQixNQUFNO2dCQVFHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFRRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBUUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQVFHLDhCQUE4QjtzQkFBdkMsTUFBTTtnQkFRRywyQkFBMkI7c0JBQXBDLE1BQU07Z0JBTUcsU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBU0csZUFBZTtzQkFBeEIsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBU0csZUFBZTtzQkFBeEIsTUFBTTtnQkFNRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBUUcsMEJBQTBCO3NCQUFuQyxNQUFNO2dCQWNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFXRyxlQUFlO3NCQUF4QixNQUFNO2dCQVdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBV0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQVNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFVRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBVUcsMkJBQTJCO3NCQUFwQyxNQUFNO2dCQVFHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFTRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBTUcsUUFBUTtzQkFBakIsTUFBTTtnQkFPRyxZQUFZO3NCQUFyQixNQUFNO2dCQVFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBU0csOEJBQThCO3NCQUF2QyxNQUFNO2dCQVFHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFJRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBUUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQU9HLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFPRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBU0csZUFBZTtzQkFBeEIsTUFBTTtnQkFXRyxTQUFTO3NCQUFsQixNQUFNO2dCQWFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBU0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQWNHLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFjRyxhQUFhO3NCQUF0QixNQUFNO2dCQVNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFTRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBYUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFTRyxhQUFhO3NCQUF0QixNQUFNO2dCQVlHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFTRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBU0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVVHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBTUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxVQUFVO3NCQUFuQixNQUFNO2dCQU1HLFdBQVc7c0JBQXBCLE1BQU07Z0JBUUcsV0FBVztzQkFBcEIsTUFBTTtnQkFRRyxVQUFVO3NCQUFuQixNQUFNO2dCQVFHLGNBQWM7c0JBQXZCLE1BQU07Z0JBVUcsT0FBTztzQkFBaEIsTUFBTTtnQkFVRyxPQUFPO3NCQUFoQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBUUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVFHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFRRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBUUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVdHLGNBQWM7c0JBQXZCLE1BQU07Z0JBUUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFVRyxhQUFhO3NCQUF0QixNQUFNO2dCQVNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsWUFBWTtzQkFBckIsTUFBTTtnQkFTRyxZQUFZO3NCQUFyQixNQUFNO2dCQVVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBU0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQVVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBTUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFXRyxXQUFXO3NCQUFwQixNQUFNO2dCQVVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBU0csZUFBZTtzQkFBeEIsTUFBTTtnQkFhRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBVUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQVdHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPRyxRQUFRO3NCQUFqQixNQUFNO2dCQU9HLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFjRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBTUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQU1HLE1BQU07c0JBQWYsTUFBTTtnQkFVRyxPQUFPO3NCQUFoQixNQUFNO2dCQVNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFRRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBUUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQVNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFPRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU9HLGVBQWU7c0JBQXhCLE1BQU07Z0JBUUcsV0FBVztzQkFBcEIsTUFBTTtnQkFRRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBUUcsY0FBYztzQkFBdkIsTUFBTTtnQkFXRyxVQUFVO3NCQUFuQixNQUFNO2dCQU9HLGVBQWU7c0JBQXhCLE1BQU07Z0JBUUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFRRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBUUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFRRyxXQUFXO3NCQUFwQixNQUFNO2dCQVdHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFTRyxjQUFjO3NCQUF2QixNQUFNO2dCQVNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBUUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFRRyxjQUFjO3NCQUF2QixNQUFNO2dCQVFHLGVBQWU7c0JBQXhCLE1BQU07Z0JBUUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFZRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBWUcsK0JBQStCO3NCQUF4QyxNQUFNO2dCQVlHLDRCQUE0QjtzQkFBckMsTUFBTTtnQkFVRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBUUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFRRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBV0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU9HLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFRRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBVUcsMEJBQTBCO3NCQUFuQyxNQUFNO2dCQVFHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFTRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBU0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFTRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBU0csMkJBQTJCO3NCQUFwQyxNQUFNO2dCQVNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFZRyw4QkFBOEI7c0JBQXZDLE1BQU07Z0JBU0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQVNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFPRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBWUcsd0JBQXdCO3NCQUFqQyxNQUFNO2dCQVFHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFRRyw0QkFBNEI7c0JBQXJDLE1BQU07Z0JBUUcseUJBQXlCO3NCQUFsQyxNQUFNO2dCQVNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxXQUFXO3NCQUFwQixNQUFNO2dCQVFHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQUlHLFNBQVM7c0JBQWxCLE1BQU07Z0JBZUcsd0JBQXdCO3NCQUFqQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vKipcbiAqIEFuZ3VsYXIgd3JhcHBlciBmb3IgQnJ5bnR1bSBHYW50dEJhc2VcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgV3JhcHBlckhlbHBlciBmcm9tICcuL3dyYXBwZXIuaGVscGVyJztcblxuaW1wb3J0IHsgQWpheFN0b3JlLCBBamF4U3RvcmVDb25maWcsIEJhc2UsIEJyeW50dW1TY3JvbGxPcHRpb25zLCBDb250YWluZXIsIERvbUNsYXNzTGlzdCwgRG9tQ29uZmlnLCBEdXJhdGlvblVuaXQsIEZvcm11bGFQcm92aWRlckNvbmZpZywgS2V5TWFwQ29uZmlnLCBNYXNrLCBNYXNrQ29uZmlnLCBNZW51LCBNZW51SXRlbSwgTWVudUl0ZW1FbnRyeSwgTW9kZWwsIE1vZGVsQ29uZmlnLCBQYWdpbmdUb29sYmFyQ29uZmlnLCBQYW5lbCwgUGFuZWxDb2xsYXBzZXJDb25maWcsIFBhbmVsQ29sbGFwc2VyT3ZlcmxheUNvbmZpZywgUGFuZWxIZWFkZXIsIFBvcHVwLCBTY3JvbGxNYW5hZ2VyLCBTY3JvbGxNYW5hZ2VyQ29uZmlnLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFN0YXRlUHJvdmlkZXIsIFN0b3JlLCBTdG9yZUNvbmZpZywgVGFiQ29uZmlnLCBUb29sLCBUb29sQ29uZmlnLCBUb29sYmFyQ29uZmlnLCBUb29sYmFySXRlbXMsIFRvb2x0aXBDb25maWcsIFdpZGdldCB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5pbXBvcnQgeyBBSUZpbHRlciwgQUlGaWx0ZXJDb25maWcsIENlbGxDb3B5UGFzdGUsIENlbGxDb3B5UGFzdGVDb25maWcsIENlbGxFZGl0b3JDb250ZXh0LCBDZWxsTWVudSwgQ2VsbE1lbnVDb25maWcsIENlbGxUb29sdGlwLCBDZWxsVG9vbHRpcENvbmZpZywgQ2hhcnRzLCBDaGFydHNDb25maWcsIENvbHVtbiwgQ29sdW1uQXV0b1dpZHRoLCBDb2x1bW5BdXRvV2lkdGhDb25maWcsIENvbHVtbkRyYWdUb29sYmFyLCBDb2x1bW5EcmFnVG9vbGJhckNvbmZpZywgQ29sdW1uUGlja2VyLCBDb2x1bW5QaWNrZXJDb25maWcsIENvbHVtblJlbmFtZSwgQ29sdW1uUmVuYW1lQ29uZmlnLCBDb2x1bW5SZW9yZGVyLCBDb2x1bW5SZW9yZGVyQ29uZmlnLCBDb2x1bW5SZXNpemUsIENvbHVtblJlc2l6ZUNvbmZpZywgQ29sdW1uU3RvcmUsIENvbHVtblN0b3JlQ29uZmlnLCBFbXB0eVRleHREb21Db25maWcsIEV4Y2VsRXhwb3J0ZXIgYXMgR3JpZEV4Y2VsRXhwb3J0ZXIsIEV4Y2VsRXhwb3J0ZXJDb25maWcgYXMgR3JpZEV4Y2VsRXhwb3J0ZXJDb25maWcsIEV4cG9ydENvbmZpZywgRmlsZURyb3AsIEZpbGVEcm9wQ29uZmlnLCBGaWxsSGFuZGxlLCBGaWxsSGFuZGxlQ29uZmlnLCBGaWx0ZXIsIEZpbHRlckJhciwgRmlsdGVyQmFyQ29uZmlnLCBGaWx0ZXJDb25maWcsIEdyaWQsIEdyaWRCYXNlLCBHcmlkTG9jYXRpb24sIEdyaWRMb2NhdGlvbkNvbmZpZywgR3JpZFNlbGVjdGlvbk1vZGUsIEdyaWRTdGF0ZUluZm8sIEdyb3VwLCBHcm91cENvbmZpZywgR3JvdXBTdW1tYXJ5IGFzIEdyaWRHcm91cFN1bW1hcnksIEdyb3VwU3VtbWFyeUNvbmZpZyBhcyBHcmlkR3JvdXBTdW1tYXJ5Q29uZmlnLCBIZWFkZXJNZW51LCBIZWFkZXJNZW51Q29uZmlnLCBMb2NrUm93cyBhcyBHcmlkTG9ja1Jvd3MsIExvY2tSb3dzQ29uZmlnIGFzIEdyaWRMb2NrUm93c0NvbmZpZywgTWVyZ2VDZWxscywgTWVyZ2VDZWxsc0NvbmZpZywgUGluQ29sdW1ucywgUGluQ29sdW1uc0NvbmZpZywgUHJlc2VydmVTY3JvbGxPcHRpb25zLCBRdWlja0ZpbmQsIFF1aWNrRmluZENvbmZpZywgUmVjb3JkUG9zaXRpb25Db250ZXh0LCBSZWdpb25SZXNpemUsIFJlZ2lvblJlc2l6ZUNvbmZpZywgUmVzcG9uc2l2ZUxldmVsQ29uZmlnLCBSb3csIFJvd0NvcHlQYXN0ZSwgUm93Q29weVBhc3RlQ29uZmlnLCBSb3dFZGl0LCBSb3dFZGl0Q29uZmlnLCBSb3dFZGl0b3JDb250ZXh0LCBSb3dFeHBhbmRlciwgUm93RXhwYW5kZXJDb25maWcsIFJvd1Jlc2l6ZSBhcyBHcmlkUm93UmVzaXplLCBSb3dSZXNpemVDb25maWcgYXMgR3JpZFJvd1Jlc2l6ZUNvbmZpZywgU2VhcmNoLCBTZWFyY2hDb25maWcsIFNvcnQsIFNvcnRDb25maWcsIFNwbGl0IGFzIEdyaWRTcGxpdCwgU3BsaXRDb25maWcgYXMgR3JpZFNwbGl0Q29uZmlnLCBTdGlja3lDZWxscywgU3RpY2t5Q2VsbHNDb25maWcsIFN0cmlwZSwgU3RyaXBlQ29uZmlnLCBTdWJHcmlkLCBTdWJHcmlkQ29uZmlnLCBUcmVlLCBUcmVlQ29uZmlnLCBYTFNDb2x1bW4gfSBmcm9tICdAYnJ5bnR1bS9ncmlkLXRoaW4nO1xuaW1wb3J0IHsgQXNzaWdubWVudE1vZGVsIGFzIFNjaGVkdWxlckFzc2lnbm1lbnRNb2RlbCwgQ29sdW1uTGluZXMsIENvbHVtbkxpbmVzQ29uZmlnLCBEYXRlQ29uc3RyYWludCwgRGVwZW5kZW5jeUJhc2VNb2RlbCwgRGVwZW5kZW5jeUVkaXQgYXMgU2NoZWR1bGVyRGVwZW5kZW5jeUVkaXQsIERlcGVuZGVuY3lNb2RlbCBhcyBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwsIEV2ZW50Q29sb3IsIEV2ZW50RWRpdCwgRXZlbnRGaWx0ZXIsIEV2ZW50RmlsdGVyQ29uZmlnLCBFdmVudE1vZGVsIGFzIFNjaGVkdWxlckV2ZW50TW9kZWwsIEV2ZW50UmVzaXplRGF0YSwgSGVhZGVyWm9vbSwgSGVhZGVyWm9vbUNvbmZpZywgTm9uV29ya2luZ1RpbWUsIE5vbldvcmtpbmdUaW1lQ29uZmlnLCBQYW4sIFBhbkNvbmZpZywgUHJlc2V0U3RvcmUsIFJlY3VycmVuY2VDb25maXJtYXRpb25Qb3B1cCwgUmVjdXJyZW5jZUNvbmZpcm1hdGlvblBvcHVwQ29uZmlnLCBSZXNvdXJjZU1vZGVsIGFzIFNjaGVkdWxlclJlc291cmNlTW9kZWwsIFJvd1Jlb3JkZXIsIFJvd1Jlb3JkZXJDb25maWcsIFNjaGVkdWxlTWVudSwgU2NoZWR1bGVNZW51Q29uZmlnLCBTY2hlZHVsZVRvb2x0aXAsIFNjaGVkdWxlVG9vbHRpcENvbmZpZywgU2NoZWR1bGVyLCBUaW1lQXhpcywgVGltZUF4aXNDb2x1bW4gYXMgU2NoZWR1bGVyVGltZUF4aXNDb2x1bW4sIFRpbWVBeGlzQ29uZmlnLCBUaW1lQXhpc0hlYWRlck1lbnUsIFRpbWVBeGlzSGVhZGVyTWVudUNvbmZpZywgVGltZVJhbmdlcywgVGltZVJhbmdlc0NvbmZpZywgVGltZVNwYW4sIFRpbWVTcGFuQ29uZmlnLCBUaW1lbGluZUJhc2UsIFRpbWVsaW5lQ29udGV4dCwgVGltZWxpbmVTdGF0ZUluZm8sIFZlcnRpY2FsVGltZUF4aXNDb2x1bW4sIFZpZXdQcmVzZXQsIFZpZXdQcmVzZXRDb25maWcsIFZpc2libGVEYXRlIH0gZnJvbSAnQGJyeW50dW0vc2NoZWR1bGVyLXRoaW4nO1xuaW1wb3J0IHsgQ3ljbGVSZXNvbHV0aW9uUG9wdXAsIERlcGVuZGVuY3lFZGl0LCBEZXBlbmRlbmN5RWRpdENvbmZpZywgRXZlbnRNb2RlbCwgRXZlbnRTZWdtZW50cywgRXZlbnRTZWdtZW50c0NvbmZpZywgUGVyY2VudEJhciwgUGVyY2VudEJhckNvbmZpZywgUmVzb3VyY2VNb2RlbCBhcyBTY2hlZHVsZXJQcm9SZXNvdXJjZU1vZGVsLCBTY2hlZHVsZXJQcm8sIFNjaGVkdWxpbmdJc3N1ZVJlc29sdXRpb25Qb3B1cCwgVGFza0VkaXQgYXMgU2NoZWR1bGVyUHJvVGFza0VkaXQsIFRhc2tFZGl0b3JCYXNlLCBUaW1lU3BhbkhpZ2hsaWdodCwgVGltZVNwYW5IaWdobGlnaHRDb25maWcgfSBmcm9tICdAYnJ5bnR1bS9zY2hlZHVsZXJwcm8tdGhpbic7XG5pbXBvcnQgeyBBc3NpZ25tZW50TW9kZWwsIEFzc2lnbm1lbnRNb2RlbENvbmZpZywgQmFzZWxpbmVzLCBCYXNlbGluZXNDb25maWcsIENhbGVuZGFyTWFuYWdlclN0b3JlLCBDYWxlbmRhck1vZGVsLCBDYWxlbmRhck1vZGVsQ29uZmlnLCBDZWxsRWRpdCwgQ2VsbEVkaXRDb25maWcsIEdhbnR0Q29udGFpbmVySXRlbUNvbmZpZywgQ3JpdGljYWxQYXRocywgQ3JpdGljYWxQYXRoc0NvbmZpZywgRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmNpZXNDb25maWcsIERlcGVuZGVuY3lNb2RlbCwgRGVwZW5kZW5jeU1vZGVsQ29uZmlnLCBHYW50dCwgR2FudHRCYXNlLCBHYW50dEJhc2VMaXN0ZW5lcnMsIEdhbnR0Q29sdW1uQ29uZmlnLCBJbmRpY2F0b3JzLCBJbmRpY2F0b3JzQ29uZmlnLCBMYWJlbHMsIExhYmVsc0NvbmZpZywgTXNwRXhwb3J0LCBNc3BFeHBvcnRDb25maWcsIFBhcmVudEFyZWEsIFBhcmVudEFyZWFDb25maWcsIFBkZkV4cG9ydCwgUGRmRXhwb3J0Q29uZmlnLCBQcmludCwgUHJpbnRDb25maWcsIFByb2dyZXNzTGluZSwgUHJvZ3Jlc3NMaW5lQ29uZmlnLCBQcm9qZWN0RWRpdCwgUHJvamVjdEVkaXRDb25maWcsIFByb2plY3RFZGl0b3IsIFByb2plY3RMaW5lcywgUHJvamVjdExpbmVzQ29uZmlnLCBQcm9qZWN0TW9kZWwsIFByb2plY3RNb2RlbENvbmZpZywgUmVzb3VyY2VNb2RlbCwgUmVzb3VyY2VNb2RlbENvbmZpZywgUm9sbHVwcywgUm9sbHVwc0NvbmZpZywgU2Nyb2xsQnV0dG9ucywgU2Nyb2xsQnV0dG9uc0NvbmZpZywgU3VtbWFyeSwgU3VtbWFyeUNvbmZpZywgVGFza0NvcHlQYXN0ZSwgVGFza0NvcHlQYXN0ZUNvbmZpZywgVGFza0RyYWcsIFRhc2tEcmFnQ29uZmlnLCBUYXNrRHJhZ0NyZWF0ZSwgVGFza0RyYWdDcmVhdGVDb25maWcsIFRhc2tFZGl0LCBUYXNrRWRpdENvbmZpZywgVGFza01lbnUsIFRhc2tNZW51Q29uZmlnLCBUYXNrTW9kZWwsIFRhc2tNb2RlbENvbmZpZywgVGFza05vbldvcmtpbmdUaW1lLCBUYXNrTm9uV29ya2luZ1RpbWVDb25maWcsIFRhc2tSZXNpemUsIFRhc2tSZXNpemVDb25maWcsIFRhc2tSZXNpemVEYXRhLCBUYXNrU2VnbWVudERyYWcsIFRhc2tTZWdtZW50RHJhZ0NvbmZpZywgVGFza1NlZ21lbnRSZXNpemUsIFRhc2tTZWdtZW50UmVzaXplQ29uZmlnLCBUYXNrU3RvcmUsIFRhc2tTdG9yZUNvbmZpZywgVGFza1Rvb2x0aXAsIFRhc2tUb29sdGlwQ29uZmlnLCBUaW1lbGluZUNoYXJ0LCBUaW1lbGluZUNoYXJ0Q29uZmlnLCBUcmVlR3JvdXAsIFRyZWVHcm91cENvbmZpZywgVmVyc2lvbnMsIFZlcnNpb25zQ29uZmlnIH0gZnJvbSAnQGJyeW50dW0vZ2FudHQtdGhpbic7XG5cbmltcG9ydCB7IFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5cbmV4cG9ydCB0eXBlIEJyeW50dW1HYW50dEJhc2VQcm9wcyA9IHtcbiAgICAvLyBDb25maWdzXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYWRvcHQgYXMgdGhpcyBXaWRnZXQncyBlbmNhcHN1bGF0aW5nIGVsZW1lbnQuIFRoZSB3aWRnZXQnc1xuICAgICAqIGNvbnRlbnQgd2lsbCBiZSBwbGFjZWQgaW5zaWRlIHRoaXMgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctYWRvcHQpXG4gICAgICovXG4gICAgYWRvcHQgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2FsaWduLXNlbGZdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9hbGlnbi1zZWxmKSBzdHlsZS5cbiAgICAgKi9cbiAgICBhbGlnblNlbGYgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBhbGxvdyBjcmVhdGluZyBkZXBlbmRlbmNpZXNcbiAgICAgKi9cbiAgICBhbGxvd0NyZWF0ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCBpdCB0byBgdHJ1ZWAgdG8gYWxsb3cgZGVwZW5kZW5jeSBjcmVhdGlvbiBvbmx5IGZvciBwYXJlbnQgZXZlbnRzIChvbmx5IGFwcGxpZXMgdG8gU2NoZWR1bGVyIFBybyB1c2luZyB0aGUgYE5lc3RlZEV2ZW50c2AgZmVhdHVyZSkuIE5vcm1hbGx5IHRoZSBuZXN0ZWQgZXZlbnQgY29udGFpbmVyXG4gICAgICogaW5zaWRlIHBhcmVudCBldmVudHMgY2Fubm90IGJlIHNjcm9sbGVkIHdoZW4gdXNpbmcgZGVwZW5kZW5jaWVzLCBidXQgYnkgZW5hYmxpbmcgdGhpcyBzZXR0aW5nIGFuZCBsaW1pdGluZ1xuICAgICAqIHRvIHdoZXJlIGRlcGVuZGVuY2llcyBjYW4gYmUgZHJhd24gc2Nyb2xsaW5nIHdpbGwgYmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBhbGxvd0NyZWF0ZU9ubHlQYXJlbnQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBgZmFsc2VgIHRvIHJlcXVpcmUgYSBkcm9wIG9uIGEgdGFyZ2V0IGV2ZW50IGJhciBzaWRlIGNpcmNsZSB0byBkZWZpbmUgdGhlIGRlcGVuZGVuY3kgdHlwZS5cbiAgICAgKiBJZiBkcm9wcGVkIG9uIHRoZSBldmVudCBiYXIsIHRoZSBgZGVmYXVsdFZhbHVlYCBvZiB0aGUgRGVwZW5kZW5jeU1vZGVsIGB0eXBlYCBmaWVsZCB3aWxsIGJlIHVzZWQgdG9cbiAgICAgKiBkZXRlcm1pbmUgdGhlIHRhcmdldCB0YXNrIHNpZGUuXG4gICAgICovXG4gICAgYWxsb3dEcm9wT25FdmVudEJhciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYW5pbWF0ZSByb3cgcmVtb3ZhbHMgY2F1c2VkIGJ5IGZpbHRlcmluZy5cbiAgICAgKiBAZGVwcmVjYXRlZCA3LjAuMCBEZXByZWNhdGVkIGBhbmltYXRlRmlsdGVyUmVtb3ZhbHNgLiBVc2UgYHRyYW5zaXRpb24uZmlsdGVyUmVtb3ZhbGAgaW5zdGVhZFxuICAgICAqL1xuICAgIGFuaW1hdGVGaWx0ZXJSZW1vdmFscyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIHJlbW92aW5nIGFuZCBpbnNlcnRpbmcgcm93cyBzaG91bGQgYmUgYW5pbWF0ZWQuIFNldCB0byBgZmFsc2VgIHRvIHByZXZlbnQgdGhvc2UgYW5pbWF0aW9ucyxcbiAgICAgKiByZW1vdmluZyB0aGUgcmVsYXRlZCBkZWxheXMuXG4gICAgICogQGRlcHJlY2F0ZWQgNy4wLjAgRGVwcmVjYXRlZCBgYW5pbWF0ZVJlbW92aW5nUm93c2AuIFVzZSBgdHJhbnNpdGlvbi5yZW1vdmVSZWNvcmRgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlUmVtb3ZpbmdSb3dzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGUgW1RyZWVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1RyZWUpIGZlYXR1cmUgaXMgaW4gdXNlIGFuZCB0aGUgU3RvcmUgaXMgYSB0cmVlIHN0b3JlLCB0aGlzXG4gICAgICogY29uZmlnIG1heSBiZSBzZXQgdG8gYHRydWVgIHRvIHZpc3VhbGx5IGFuaW1hdGUgYnJhbmNoIG5vZGUgZXhwYW5kIGFuZCBjb2xsYXBzZSBvcGVyYXRpb25zLlxuICAgICAqICpUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU2NoZWR1bGVyIGFuZCBHYW50dCpcbiAgICAgKiBAZGVwcmVjYXRlZCA3LjAuMCBEZXByZWNhdGVkIGBhbmltYXRlVHJlZU5vZGVUb2dnbGVgLiBVc2UgYHRyYW5zaXRpb24udG9nZ2xlVHJlZU5vZGVgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlVHJlZU5vZGVUb2dnbGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciB0aGUgaWQgb2YgYW4gZWxlbWVudCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB0by4gQ2FuIGJlIGNvbmZpZ3VyZWQsIG9yIHNldCBvbmNlIGF0XG4gICAgICogcnVudGltZS4gVG8gYWNjZXNzIHRoZSBlbGVtZW50IG9mIGEgcmVuZGVyZWQgd2lkZ2V0LCBzZWUgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpLlxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctYXJpYUxhYmVsKVxuICAgICAqL1xuICAgIGFyaWFMYWJlbCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogSW5saW5lIGFzc2lnbm1lbnRzLCB3aWxsIGJlIGxvYWRlZCBpbnRvIHRoZSBiYWNraW5nIHByb2plY3QncyBBc3NpZ25tZW50U3RvcmUuXG4gICAgICovXG4gICAgYXNzaWdubWVudHMgPyA6IEFzc2lnbm1lbnRNb2RlbFtdfEFzc2lnbm1lbnRNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogWW91IGNhbiBzZXQgdGhpcyBvcHRpb24gdG8gYGZhbHNlYCB0byBtYWtlIHRoZSB0aW1lbGluZSBwYW5lbCBzdGFydCBhbmQgZW5kIG9uIHRoZSBleGFjdCBwcm92aWRlZFxuICAgICAqIFtzdGFydERhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvVGltZWxpbmVCYXNlI2NvbmZpZy1zdGFydERhdGUpL1tlbmREYXRlXSgjU2NoZWR1bGVyL3ZpZXcvVGltZWxpbmVCYXNlI2NvbmZpZy1lbmREYXRlKSB3L28gYWRqdXN0aW5nIHRoZW0uXG4gICAgICovXG4gICAgYXV0b0FkanVzdFRpbWVBeGlzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQXV0b21hdGljYWxseSBzZXQgZ3JpZHMgaGVpZ2h0IHRvIGZpdCBhbGwgcm93cyAobm8gc2Nyb2xsaW5nIGluIHRoZSBncmlkKS4gSW4gZ2VuZXJhbCB5b3Ugc2hvdWxkIGF2b2lkXG4gICAgICogdXNpbmcgYGF1dG9IZWlnaHQ6IHRydWVgLCBzaW5jZSBpdCB3aWxsIGJ5cGFzcyBHcmlkcyB2aXJ0dWFsIHJlbmRlcmluZyBhbmQgcmVuZGVyIGFsbCByb3dzIGF0IG9uY2UsIHdoaWNoXG4gICAgICogaW4gYSBsYXJnZXIgZ3JpZCBpcyByZWFsbHkgYmFkIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgKi9cbiAgICBhdXRvSGVpZ2h0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgaG93IG11Y2ggc3BhY2UgdG8gbGVhdmUgYmV0d2VlbiBzdGFja2VkIGV2ZW50IGJhcnMgaW4gcHguXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWJhck1hcmdpbilcbiAgICAgKi9cbiAgICBiYXJNYXJnaW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci4gQW5vdGhlciB3YXkgdG8gYWRkIGEgYmJhciBpcyB0byB1c2UgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctYmJhcilcbiAgICAgKi9cbiAgICBiYmFyID8gOiAoR2FudHRDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gdGhlIHBhbmVsJ3MgYm9keSBlbGVtZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1ib2R5Q2xzKVxuICAgICAqL1xuICAgIGJvZHlDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hlcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0ZSB3aGljaCBldmVudHMgc2hvdWxkIGJ1YmJsZSB1cCB0aGUgb3duZXJzaGlwXG4gICAgICogaGllcmFyY2h5IHdoZW4gdHJpZ2dlcmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBkZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBzdGFydCBhbmQgZW5kIGludmlzaWJsZSBwYXJ0cyBvZiB0aGUgdGltZXNwYW4gd2hlbiBbaW5maW5pdGVTY3JvbGxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVTY3JvbGwjY29uZmlnLWluZmluaXRlU2Nyb2xsKSBzZXQgdG8gYHRydWVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1idWZmZXJDb2VmKVxuICAgICAqL1xuICAgIGJ1ZmZlckNvZWYgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIGRlZmluZXMgdGhlIHNjcm9sbCBsaW1pdCwgd2hpY2gsIHdoZW4gZXhjZWVkZWQgd2lsbCBjYXVzZSBhIHRpbWVzcGFuIHNoaWZ0LlxuICAgICAqIFRoZSBsaW1pdCBpcyBjYWxjdWxhdGVkIGFzIHRoZSBgcGFuZWxXaWR0aCAqIFtidWZmZXJDb2VmXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lU2Nyb2xsI2NvbmZpZy1idWZmZXJDb2VmKSAqIGJ1ZmZlclRocmVzaG9sZGAuIER1cmluZyBzY3JvbGxpbmcsIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0IHNpZGVcbiAgICAgKiBoYXMgbGVzcyB0aGFuIHRoYXQgb2YgdGhlIHJlbmRlcmVkIGNvbnRlbnQgLSBhIHNoaWZ0IGlzIHRyaWdnZXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctYnVmZmVyVGhyZXNob2xkKVxuICAgICAqL1xuICAgIGJ1ZmZlclRocmVzaG9sZCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogSW5saW5lIGNhbGVuZGFycywgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgYmFja2luZyBwcm9qZWN0J3MgQ2FsZW5kYXJNYW5hZ2VyU3RvcmUuXG4gICAgICovXG4gICAgY2FsZW5kYXJzID8gOiBDYWxlbmRhck1vZGVsW118Q2FsZW5kYXJNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IGNhbGwgb25YWFggbWV0aG9kIG5hbWVzIChlLmcuIGBvblNob3dgLCBgb25DbGlja2ApLCBhcyBhbiBlYXN5IHdheSB0byBsaXN0ZW4gZm9yIGV2ZW50cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctY2FsbE9uRnVuY3Rpb25zKVxuICAgICAqL1xuICAgIGNhbGxPbkZ1bmN0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIGFuIGV2ZW50IGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlIGVycm9yIHByb3BhZ2F0ZXMgdXAgdGhlIHN0YWNrIGFuZCB0aGVcbiAgICAgKiBhcHBsaWNhdGlvbiBzdGF0ZSBpcyB1bmRlZmluZWQuIENvZGUgd2hpY2ggZm9sbG93cyB0aGUgZXZlbnQgaGFuZGxlciB3aWxsICpub3QqIGJlIGV4ZWN1dGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1jYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMpXG4gICAgICovXG4gICAgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gY3JvcCB0ZXh0IGluIGdyaWQgY2VsbHMgd2l0aG91dCBlbGxpcHNpcyAoLi4uKS4gV2hlbiBlbmFibGVkLCBjZWxscyBjb250YWluaW5nIHB1cmVcbiAgICAgKiB1c2UgYGRpc3BsYXkgOiBibG9ja2AsIGluc3RlYWQgb2YgYGRpc3BsYXkgOiBmbGV4YCB0byBhbGxvdyBlbGxpcHNpcyB0byB3b3JrLlxuICAgICAqIDxzdHJvbmc+Tk9URTwvc3Ryb25nPiBPbmx5IHN1cHBvcnRlZCBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgYDpoYXMoKWAgQ1NTIHNlbGVjdG9yXG4gICAgICovXG4gICAgY2VsbEVsbGlwc2lzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byBlbGVtZW50LlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1jbHMpXG4gICAgICovXG4gICAgY2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgcGFuZWwgaXMgY29sbGFwc2VkICh0aGUgYm9keSBvZiB0aGUgcGFuZWwgaXMgaGlkZGVuIHdoaWxlIG9ubHkgdGhlIGhlYWRlciBpc1xuICAgICAqIHZpc2libGUpLiBPbmx5IHZhbGlkIGlmIHRoZSBwYW5lbCBpcyBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKS5cbiAgICAgKi9cbiAgICBjb2xsYXBzZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBlbmFibGVzIGNvbGxhcHNpYmlsaXR5IGZvciB0aGUgcGFuZWwuIFNlZSBbY29sbGFwc2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzZWQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1jb2xsYXBzaWJsZSlcbiAgICAgKi9cbiAgICBjb2xsYXBzaWJsZSA/IDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWdcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1jb2xvcilcbiAgICAgKi9cbiAgICBjb2xvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciB3aGljaCBjb2x1bW4gdG8gc3RhcnQgaW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgY29sdW1uID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2hvdyBjb2x1bW4gbGluZXMuIEVuZCByZXN1bHQgbWlnaHQgYmUgb3ZlcnJ1bGVkIGJ5L2RpZmZlciBiZXR3ZWVuIHRoZW1lcy5cbiAgICAgKi9cbiAgICBjb2x1bW5MaW5lcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFjY2VwdHMgY29sdW1uIGRlZmluaXRpb25zIGZvciB0aGUgZ3JpZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoZXkgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZVxuICAgICAqIFtDb2x1bW5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uKSBpbnN0YW5jZXMgdGhhdCBhcmUgYWRkZWQgdG8gYSBbQ29sdW1uU3RvcmVdKCNHcmlkL2RhdGEvQ29sdW1uU3RvcmUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1jb2x1bW5zKVxuICAgICAqL1xuICAgIGNvbHVtbnMgPyA6IENvbHVtblN0b3JlfEdhbnR0Q29sdW1uQ29uZmlnW118Q29sdW1uU3RvcmVDb25maWdcbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gdGhlIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1jb250ZW50RWxlbWVudENscylcbiAgICAgKi9cbiAgICBjb250ZW50RWxlbWVudENscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoaWNoIGlzIHVzZWQgdG8gc2hvdyBjb250ZXh0IG1lbnVzLlxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogJ2NvbnRleHRtZW51JywgJ2NsaWNrJywgJ2RibGNsaWNrJy5cbiAgICAgKi9cbiAgICBjb250ZXh0TWVudVRyaWdnZXJFdmVudCA/IDogJ2NvbnRleHRtZW51J3wnY2xpY2snfCdkYmxjbGljaydcbiAgICAvKipcbiAgICAgKiBBIHRvb2x0aXAgY29uZmlnIG9iamVjdCB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZGVwZW5kZW5jeSBjcmVhdGlvbiBbVG9vbHRpcF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sdGlwKVxuICAgICAqL1xuICAgIGNyZWF0aW9uVG9vbHRpcCA/IDogVG9vbHRpcENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBnZW5lcmF0ZSB0aGUgSFRNTCBjb250ZW50cyBvZiB0aGUgZGVwZW5kZW5jeSBjcmVhdGlvbiB0b29sdGlwLlxuICAgICAqIFlvdSBjYW4gcmV0dXJuIGVpdGhlciBhbiBIVE1MIHN0cmluZyBvciBhIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRhdGEgRGF0YSBhYm91dCB0aGUgZGVwZW5kZW5jeSBiZWluZyBjcmVhdGVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGRhdGEuc291cmNlIFRoZSBmcm9tIGV2ZW50XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGRhdGEudGFyZ2V0IFRoZSB0YXJnZXQgZXZlbnRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YS5mcm9tU2lkZSBUaGUgZnJvbSBzaWRlIChzdGFydCwgZW5kLCB0b3AsIGJvdHRvbSlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YS50b1NpZGUgVGhlIHRhcmdldCBzaWRlIChzdGFydCwgZW5kLCB0b3AsIGJvdHRvbSlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRhdGEudmFsaWQgVGhlIHZhbGlkaXR5IG9mIHRoZSBkZXBlbmRlbmN5XG4gICAgICogQHJldHVybnMge3N0cmluZyxEb21Db25maWd9XG4gICAgICovXG4gICAgY3JlYXRpb25Ub29sdGlwVGVtcGxhdGUgPyA6IChkYXRhOiB7IHNvdXJjZTogVGltZVNwYW4sIHRhcmdldDogVGltZVNwYW4sIGZyb21TaWRlOiBzdHJpbmcsIHRvU2lkZTogc3RyaW5nLCB2YWxpZDogYm9vbGVhbiB9KSA9PiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogQ2xhc3MgaW1wbGVtZW50aW5nIHRoZSBwb3B1cCByZXNvbHZpbmcgKnNjaGVkdWxpbmcgY3ljbGVzKi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctY3ljbGVSZXNvbHV0aW9uUG9wdXBDbGFzcylcbiAgICAgKi9cbiAgICBjeWNsZVJlc29sdXRpb25Qb3B1cENsYXNzID8gOiB0eXBlb2YgQ3ljbGVSZXNvbHV0aW9uUG9wdXBcbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW50IHNob3J0Y3V0IHRvIHNldCBkYXRhIGluIGdyaWRzIHN0b3JlIGJvdGggZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBhdCBydW50aW1lLiBDYW4gYWxzbyBiZVxuICAgICAqIHVzZWQgdG8gcmV0cmlldmUgZGF0YSBhdCBydW50aW1lLCBhbHRob3VnaCB3ZSBkbyByZWNvbW1lbmQgaW50ZXJhY3Rpbmcgd2l0aCBHcmlkcyBzdG9yZSBpbnN0ZWFkIHVzaW5nXG4gICAgICogdGhlIFtzdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjcHJvcGVydHktc3RvcmUpIHByb3BlcnR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1kYXRhKVxuICAgICAqL1xuICAgIGRhdGEgPyA6IG9iamVjdFtdfE1vZGVsW118TW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBXaWRnZXQgY29uZmlndXJhdGlvbiBpcyB1c2VkIGluIHRoZSBHcmlkJ3MgUm93RXhwYW5kZXIgZmVhdHVyZSdzIGB3aWRnZXRgIGNvbmZpZywgcHJvdmlkZSB0aGVcbiAgICAgKiBmaWVsZCBvbiB0aGUgZXhwYW5kZWQgcmVjb3JkIHRvIHVzZSBmb3IgcG9wdWxhdGluZyB0aGlzIHdpZGdldCdzIHN0b3JlIChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICAgIGRhdGFGaWVsZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGFwcGx5IHRvIGVsZW1lbnRzIGRhdGFzZXQgKGVhY2gga2V5IHdpbGwgYmUgdXNlZCBhcyBhIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50KVxuICAgICAqL1xuICAgIGRhdGFzZXQgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICAvKipcbiAgICAgKiBSZWdpb24gdG8gd2hpY2ggY29sdW1ucyBhcmUgYWRkZWQgd2hlbiB0aGV5IGhhdmUgbm9uZSBzcGVjaWZpZWRcbiAgICAgKi9cbiAgICBkZWZhdWx0UmVnaW9uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgZmlsZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUgdG8gdXNlIHdoZW4gYSByZXNvdXJjZSBoYXMgbm8gaW1hZ2UsIG9yIGl0cyBpbWFnZSBjYW5ub3QgYmUgbG9hZGVkLlxuICAgICAqL1xuICAgIGRlZmF1bHRSZXNvdXJjZUltYWdlTmFtZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogSW5saW5lIGRlcGVuZGVuY2llcywgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgYmFja2luZyBwcm9qZWN0J3MgRGVwZW5kZW5jeVN0b3JlLlxuICAgICAqL1xuICAgIGRlcGVuZGVuY2llcyA/IDogRGVwZW5kZW5jeU1vZGVsW118RGVwZW5kZW5jeU1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBBIHRhc2sgZmllbGQgKGlkLCB3YnNDb2RlLCBzZXF1ZW5jZU51bWJlciBldGMpIHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4gZGlzcGxheWluZyBhbmQgZWRpdGluZyBsaW5rZWQgdGFza3MuXG4gICAgICovXG4gICAgZGVwZW5kZW5jeUlkRmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gZGVzdHJveSB0aGUgc3RvcmUgd2hlbiB0aGUgZ3JpZCBpcyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgZGVzdHJveVN0b3JlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgZm9yIENTUyBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aGVuIHVwZ3JhZGluZyB0byB2Ny4gUGVyZm9ybXMgdGhlIGZvbGxvd2luZyBjaGVja3M6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcmVhZE9ubHkpIGV4Y2VwdCBhIGRpc2FibGVkIHdpZGdldFxuICAgICAqIGNhbm5vdCBiZSBmb2N1c2VkLCB1c2VzIGEgZGlmZmVyZW50IHJlbmRpdGlvbiAodXN1YWxseSBncmV5aXNoKSBhbmQgZG9lcyBub3QgYWxsb3cgc2VsZWN0aW5nIGl0cyB2YWx1ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZGlzYWJsZWQpXG4gICAgICovXG4gICAgZGlzYWJsZWQgPyA6IGJvb2xlYW58J2luZXJ0J1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbm90IGdldCBhIHdhcm5pbmcgd2hlbiBjYWxsaW5nIFtnZXRTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZnVuY3Rpb24tZ2V0U3RhdGUpIHdoZW4gdGhlcmUgaXMgYSBjb2x1bW5cbiAgICAgKiBjb25maWd1cmVkIHdpdGhvdXQgYW4gYGlkYC4gQnV0IHRoZSByZWNvbW1lbmRlZCBhY3Rpb24gaXMgdG8gYWx3YXlzIGNvbmZpZ3VyZSBjb2x1bW5zIHdpdGggYW4gYGlkYCB3aGVuXG4gICAgICogdXNpbmcgc3RhdGVzLlxuICAgICAqL1xuICAgIGRpc2FibGVHcmlkQ29sdW1uSWRXYXJuaW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBub3QgZ2V0IGEgd2FybmluZyB3aGVuIHVzaW5nIGFub3RoZXIgYmFzZSBjbGFzcyB0aGFuIEdyaWRSb3dNb2RlbCBmb3IgeW91ciBncmlkIGRhdGEuIElmXG4gICAgICogeW91IGRvLCBhbmQgd291bGQgbGlrZSB0byB1c2UgdGhlIGZ1bGwgZmVhdHVyZSBzZXQgb2YgdGhlIGdyaWQgdGhlbiBpbmNsdWRlIHRoZSBmaWVsZHMgZnJvbSBHcmlkUm93TW9kZWxcbiAgICAgKiBpbiB5b3VyIG1vZGVsIGRlZmluaXRpb24uXG4gICAgICovXG4gICAgZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGhvdyBkYXRlcyB3aWxsIGJlIGZvcm1hdHRlZCBpbiB0b29sdGlwcyBldGMuIFRoaXMgY29uZmlnIGhhcyBwcmlvcml0eSBvdmVyIHNpbWlsYXIgY29uZmlnIG9uIHRoZVxuICAgICAqIHZpZXcgcHJlc2V0LiBGb3IgYWxsb3dlZCB2YWx1ZXMgc2VlIFtmb3JtYXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlciNmdW5jdGlvbi1mb3JtYXQtc3RhdGljKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZGlzcGxheURhdGVGb3JtYXQpXG4gICAgICovXG4gICAgZGlzcGxheURhdGVGb3JtYXQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzcGxheSBzcGVjaWFsIHBvcHVwcyBhbGxvd2luZyB1c2VyXG4gICAgICogdG8gcmVzb2x2ZSBbc2NoZWR1bGluZyBjb25mbGljdHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyUHJvL3dpZGdldC9TY2hlZHVsaW5nSXNzdWVSZXNvbHV0aW9uUG9wdXApLFxuICAgICAqIFtjeWNsZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyUHJvL3dpZGdldC9DeWNsZVJlc29sdXRpb25Qb3B1cCkgb3IgY2FsZW5kYXIgbWlzY29uZmlndXJhdGlvbnMuXG4gICAgICogVGhlIHBvcHVwIHdpbGwgc3VnZ2VzdCB1c2VyIHdheXMgdG8gcmVzb2x2ZSB0aGUgY29ycmVzcG9uZGluZyBjYXNlLlxuICAgICAqL1xuICAgIGRpc3BsYXlTY2hlZHVsaW5nSXNzdWVSZXNvbHV0aW9uUG9wdXAgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB0aGUgcGxhY2VtZW50IG9mIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgYWRkZWQgdG8gYSBbcGFuZWwncyBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwpXG4gICAgICogW3N0cmlwcyBjb2xsZWN0aW9uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLiBUeXBpY2FsIHZhbHVlcyBmb3IgdGhpcyBjb25maWcgYXJlIGAndG9wJ2AsXG4gICAgICogYCdib3R0b20nYCwgYCdsZWZ0J2AsIG9yIGAncmlnaHQnYCwgd2hpY2ggY2F1c2UgdGhlIHdpZGdldCB0byBiZSBwbGFjZWQgb24gdGhhdCBzaWRlIG9mIHRoZSBwYW5lbCdzXG4gICAgICogYm9keS4gU3VjaCB3aWRnZXRzIGFyZSBjYWxsZWQgXCJlZGdlIHN0cmlwc1wiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqIE1ha2UgdGhpcyBQYW5lbCBhIGRvY2tlZCBkcmF3ZXIgd2hpY2ggc2xpZGVzIG91dCBmcm9tIG9uZSBzaWRlIG9mIHRoZSBicm93c2VyIHZpZXdwb3J0IGJ5IGRlZmF1bHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWRyYXdlcilcbiAgICAgKiBAcGFyYW0geydzdGFydCcsJ2xlZnQnLCdlbmQnLCdyaWdodCcsJ3RvcCcsJ2JvdHRvbSd9IHNpZGUgVGhlIHNpZGUgb2YgdGhlIHZpZXdwb3J0IHRvIGRvY2sgdGhlIGRyYXdlciB0by4gICogYCdzdGFydCdgIG1lYW5zIHRoZSBgaW5saW5lLXN0YXJ0YCBzaWRlLiAqIGAnZW5kJ2AgbWVhbnMgdGhlIGBpbmxpbmUtZW5kYCBzaWRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nLG51bWJlcn0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgZHJhd2VyIGluIGl0cyBjb2xsYXBzaWJsZSBheGlzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5saW5lIElmIHVzaW5nIHRoZSBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgdG8gcGxhY2UgdGhlIGRyYXdlciBpbnNpZGUgYSBob3N0IHdpZGdldCwgdGhpcyBtYXkgYmUgc2V0IHRvIGB0cnVlYCB0byBtYWtlIHRoZSBkcmF3ZXIgaW5saW5lIHdpdGhpbiB0aGF0IGhvc3QuIE5vdGUgdGhhdCwgaWYgdXNpbmcgdGhpcywgdGhlIGxheW91dCBvZiB0aGUgaG9zdCBlbGVtZW50IG11c3QgaGF2ZSBgZmxleC1kaXJlY3Rpb25gIHNldCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixvYmplY3R9IGF1dG9DbG9zZSBTcGVjaWZpZXMgd2hhdCB1c2VyIGFjdGlvbnMgc2hvdWxkIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGRyYXdlci4gRGVmYXVsdHMgdG8gY2xvc2luZyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIgb3Igd2hlbiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gYXV0b0Nsb3NlLm1vdXNlZG93biBJZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLCB0aGUgZHJhd2VyIHdpbGwgYXV0b21hdGljYWxseSBiZSBoaWRkZW4uIElmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgaXQgaXMgdXNlZCBhcyBhIENTUyBzZWxlY3RvciB0byBmaWx0ZXIgY2xpY2tzIHdoaWNoIHNob3VsZCBjbG9zZSB0aGUgZHJhd2VyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixzdHJpbmd9IGF1dG9DbG9zZS5mb2N1c291dCBJZiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0b0Nsb3NlLm1vdXNlb3V0IEhpZGVzIHRoZSBkcmF3ZXIgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBkcmF3ZXIgYWZ0ZXIgdGhlIGBhdXRvQ2xvc2VEZWxheWAgcGVyaW9kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdXRvQ2xvc2VEZWxheSBXaGVuIHVzaW5nIGBtb3VzZW91dGAsIHRoaXMgaXMgdGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIGRyYXdlciA/IDogYm9vbGVhbnx7c2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U6IHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyfVxuICAgIC8qKlxuICAgICAqIERlY2ltYWwgcHJlY2lzaW9uIHVzZWQgd2hlbiBkaXNwbGF5aW5nIGR1cmF0aW9ucywgdXNlZCBieSB0b29sdGlwcyBhbmQgRHVyYXRpb25Db2x1bW4uXG4gICAgICogU3BlY2lmeSBgZmFsc2VgIHRvIHVzZSByYXcgdmFsdWVcbiAgICAgKi9cbiAgICBkdXJhdGlvbkRpc3BsYXlQcmVjaXNpb24gPyA6IG51bWJlcnxib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHdpZGdldC5cbiAgICAgKiBTZXQgYG51bGxgIHZhbHVlIHRvIGF0dHJpYnV0ZSB0byByZW1vdmUgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWVsZW1lbnRBdHRyaWJ1dGVzKVxuICAgICAqL1xuICAgIGVsZW1lbnRBdHRyaWJ1dGVzID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD5cbiAgICAvKipcbiAgICAgKiBUZXh0IG9yIEhUTUwsIG9yIGEgW0VtcHR5VGV4dERvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjdHlwZWRlZi1FbXB0eVRleHREb21Db25maWcpIGJsb2NrIHRvIGRpc3BsYXkgd2hlbiB0aGVyZSBpcyBubyBkYXRhIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWQuXG4gICAgICogV2hlbiB1c2luZyBtdWx0aXBsZSBHcmlkIHJlZ2lvbnMsIHByb3ZpZGUgdGhlIGByZWdpb25gIHByb3BlcnR5IHRvIGRlY2lkZSB3aGVyZSB0aGUgdGV4dCBpcyBzaG93bi5cbiAgICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzaG93biBpbiB0aGUgZmlyc3QgcmVnaW9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1lbXB0eVRleHQpXG4gICAgICovXG4gICAgZW1wdHlUZXh0ID8gOiBzdHJpbmd8RW1wdHlUZXh0RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3cgdXNpbmcgW0RlbGV0ZV0gYW5kIFtCYWNrc3BhY2VdIHRvIHJlbW92ZSBldmVudHMvYXNzaWdubWVudHNcbiAgICAgKi9cbiAgICBlbmFibGVEZWxldGVLZXkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCBpZiB5b3UgZG9uJ3Qgd2FudCBldmVudCBiYXIgRE9NIHVwZGF0ZXMgdG8gYW5pbWF0ZS5cbiAgICAgKiBAZGVwcmVjYXRlZCA3LjAuMCBEZXByZWNhdGVkIGBlbmFibGVFdmVudEFuaW1hdGlvbnNgLiBVc2UgYHRyYW5zaXRpb24uY2hhbmdlRXZlbnRgIGluc3RlYWRcbiAgICAgKi9cbiAgICBlbmFibGVFdmVudEFuaW1hdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHNob3dpbmcgb2NjdXJyZW5jZXMgb2YgcmVjdXJyaW5nIGV2ZW50cyBhY3Jvc3MgdGhlIHNjaGVkdWxlcidzIHRpbWUgYXhpcy4gSWYgeW91IHdhbnQgdG8gZGlzYWJsZVxuICAgICAqIHRoZSByZWN1cnJlbmNlIHBvcHVwLCB5b3UgY2FuIGNob29zZSBzZXQgdGhlIGBkZWZhdWx0QWN0aW9uYCB0byBgZnV0dXJlYCB0byBhZmZlY3QgYWxsIGZ1dHVyZVxuICAgICAqIG9jY3VycmVuY2VzLCBvciBgc2luZ2xlYCB0byBqdXN0IGFmZmVjdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGV2ZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1lbmFibGVSZWN1cnJpbmdFdmVudHMpXG4gICAgICovXG4gICAgZW5hYmxlUmVjdXJyaW5nRXZlbnRzID8gOiBib29sZWFufHtcbiAgICAgICAgZGVmYXVsdEFjdGlvbj86ICdzaW5nbGUnfCdmdXR1cmUnXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGB0cnVlYCB0byBhbGxvdyBlbGVtZW50cyB3aXRoaW4gY2VsbHMgdG8gYmUgc3R5bGVkIGFzIGBwb3NpdGlvbjogc3RpY2t5YC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZW5hYmxlU3RpY2t5KVxuICAgICAqL1xuICAgIGVuYWJsZVN0aWNreSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYWxsb3cgdGV4dCBzZWxlY3Rpb24gaW4gdGhlIGdyaWQgY2VsbHMuIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCB0aGVcbiAgICAgKiBgUm93UmVvcmRlcmAgZmVhdHVyZS5cbiAgICAgKi9cbiAgICBlbmFibGVUZXh0U2VsZWN0aW9uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0cnVlLCBzb21lIGZlYXR1cmVzIHdpbGwgc3RhcnQgYSBwcm9qZWN0IHRyYW5zYWN0aW9uLCBibG9ja2luZyB0aGUgcHJvamVjdCBxdWV1ZSwgc3VzcGVuZGluZ1xuICAgICAqIHN0b3JlIGV2ZW50cyBhbmQgcHJldmVudGluZyBVSSBmcm9tIHVwZGF0ZXMuIEl0IGJlaGF2ZXMgc2ltaWxhciB0b1xuICAgICAqIFtpbnN0YW50VXBkYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbiNjb25maWctaW5zdGFudFVwZGF0ZSkgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogU2V0IGBmYWxzZWAgdG8gbm90IHVzZSBwcm9qZWN0IHF1ZXVlLlxuICAgICAqL1xuICAgIGVuYWJsZVRyYW5zYWN0aW9uYWxGZWF0dXJlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbGlzdGVuIGZvciBDVFJMLVogKENNRC1aIG9uIE1hYyBPUykga2V5Ym9hcmQgZXZlbnQgYW5kIHRyaWdnZXIgdW5kbyAocmVkbyB3aGVuIFNISUZUIGlzXG4gICAgICogcHJlc3NlZCkuIE9ubHkgYXBwbGljYWJsZSB3aGVuIHVzaW5nIGEgW1N0YXRlVHJhY2tpbmdNYW5hZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvZGF0YS9zdG0vU3RhdGVUcmFja2luZ01hbmFnZXIpLlxuICAgICAqL1xuICAgIGVuYWJsZVVuZG9SZWRvS2V5cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBlbmQgZGF0ZSBvZiB0aGUgdGltZWxpbmUgKGlmIG5vdCBjb25maWd1cmUgd2l0aCBbaW5maW5pdGVTY3JvbGxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvVGltZWxpbmVCYXNlI2NvbmZpZy1pbmZpbml0ZVNjcm9sbCkpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1lbmREYXRlKVxuICAgICAqL1xuICAgIGVuZERhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGFzayBjb2xvciB1c2VkIGJ5IGRlZmF1bHQuIFRhc2tzIGNhbiBzcGVjaWZ5IHRoZWlyIG93biBbZXZlbnRDb2xvcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9UYXNrTW9kZWwjZmllbGQtZXZlbnRDb2xvciksXG4gICAgICogd2hpY2ggd2lsbCBvdmVycmlkZSB0aGlzIGNvbmZpZy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZXZlbnRDb2xvcilcbiAgICAgKi9cbiAgICBldmVudENvbG9yID8gOiBFdmVudENvbG9yXG4gICAgLyoqXG4gICAgICogRXZlbnQgc3R5bGUgdXNlZCBieSBkZWZhdWx0LiBFdmVudHMgYW5kIHJlc291cmNlcyBjYW4gc3BlY2lmeSB0aGVpciBvd24gc3R5bGUsIHdpdGggcHJpb3JpdHkgb3JkZXIgYmVpbmc6XG4gICAgICogRXZlbnQgLSZndDsgUmVzb3VyY2UgLSZndDsgU2NoZWR1bGVyIGRlZmF1bHQuIERldGVybWluZXMgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGV2ZW50IGJ5IGFzc2lnbmluZyBhIENTUyBjbGFzc1xuICAgICAqIHRvIGl0LiBBdmFpbGFibGUgc3R5bGVzIGFyZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZXZlbnRTdHlsZSlcbiAgICAgKi9cbiAgICBldmVudFN0eWxlID8gOiAndG9uYWwnfCdmaWxsZWQnfCdib3JkZXJlZCd8J3RyYWNlZCd8J291dGxpbmVkJ3wnaW5kZW50ZWQnfCdsaW5lJ3wnZGFzaGVkJ3wnbWluaW1hbCd8J3JvdW5kZWQnfCdjYWxlbmRhcid8J2ludGVyZGF5J3wnZ2FudHQnfG51bGxcbiAgICBleHRyYURhdGEgPyA6IGFueVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gc3RyZXRjaCB0aGUgbGFzdCBjb2x1bW4gaW4gYSBncmlkIHdpdGggYWxsIGZpeGVkIHdpZHRoIGNvbHVtbnNcbiAgICAgKiB0byBmaWxsIGV4dHJhIGF2YWlsYWJsZSBzcGFjZSBpZiB0aGUgZ3JpZCdzIHdpZHRoIGlzIHdpZGVyIHRoYW4gdGhlIHN1bSBvZiBhbGxcbiAgICAgKiBjb25maWd1cmVkIGNvbHVtbiB3aWR0aHMuXG4gICAgICovXG4gICAgZmlsbExhc3RDb2x1bW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBmb3JjZSByZW5kZXJlZCBldmVudHMvdGFza3MgdG8gZmlsbCBlbnRpcmUgdGlja3MuIFRoaXMgb25seSBhZmZlY3RzIHJlbmRlcmluZywgc3RhcnRcbiAgICAgKiBhbmQgZW5kIGRhdGVzIHJldGFpbiB0aGVpciB2YWx1ZSBvbiB0aGUgZGF0YSBsZXZlbC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZmlsbFRpY2tzKVxuICAgICAqL1xuICAgIGZpbGxUaWNrcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFVzZSBmaXhlZCByb3cgaGVpZ2h0LiBTZXR0aW5nIHRoaXMgdG8gYHRydWVgIHdpbGwgY29uZmlndXJlIHRoZSB1bmRlcmx5aW5nIFJvd01hbmFnZXIgdG8gdXNlIGZpeGVkIHJvd1xuICAgICAqIGhlaWdodCwgd2hpY2ggc2FjcmlmaWNlcyB0aGUgYWJpbGl0eSB0byB1c2Ugcm93cyB3aXRoIHZhcmlhYmxlIGhlaWdodCB0byBnYWluIGEgZnJhY3Rpb24gYmV0dGVyXG4gICAgICogcGVyZm9ybWFuY2UuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWZpeGVkUm93SGVpZ2h0KVxuICAgICAqL1xuICAgIGZpeGVkUm93SGVpZ2h0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbZmxleF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZsZXgpIHN0eWxlLlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYCZsdDtmbGV4LWdyb3cmZ3Q7ICZsdDtmbGV4LXNocmluayZndDsgJmx0O2ZsZXgtYmFzaXMmZ3Q7YCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHRoZSBgZmxleC1ncm93YCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmbGV4ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlnIG9iamVjdCBvZiBhIGZvb3Rlci4gTWF5IGNvbnRhaW4gYSBgZG9ja2AsIGBodG1sYCBhbmQgYSBgY2xzYCBwcm9wZXJ0eS4gQSBmb290ZXIgaXMgbm90IGEgd2lkZ2V0LFxuICAgICAqIGJ1dCByYXRoZXIgcGxhaW4gSFRNTCB0aGF0IGZvbGxvd3MgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGFuZWwncyBib2R5IGFuZCBbc3RyaXBzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1mb290ZXIpXG4gICAgICovXG4gICAgZm9vdGVyID8gOiB7XG4gICAgICAgIGRvY2s/OiAndG9wJ3wncmlnaHQnfCdib3R0b20nfCdsZWZ0J3wnc3RhcnQnfCdlbmQnXG4gICAgICAgIGh0bWw/OiBzdHJpbmdcbiAgICAgICAgY2xzPzogc3RyaW5nXG4gICAgfXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGZvcmNlIHRoZSB0aW1lIGNvbHVtbnMgdG8gZml0IHRvIHRoZSBhdmFpbGFibGUgc3BhY2UgKGhvcml6b250YWwgb3IgdmVydGljYWwgZGVwZW5kcyBvbiBtb2RlKS5cbiAgICAgKiBOb3RlIHRoYXQgc2V0dGluZyBbc3VwcHJlc3NGaXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvVGltZWxpbmVCYXNlI2NvbmZpZy1zdXBwcmVzc0ZpdCkgdG8gYHRydWVgLCB3aWxsIGRpc2FibGUgYGZvcmNlRml0YCBmdW5jdGlvbmFsaXR5LiBab29taW5nXG4gICAgICogY2Fubm90IGJlIHVzZWQgd2hlbiBgZm9yY2VGaXRgIGlzIHNldC5cbiAgICAgKi9cbiAgICBmb3JjZUZpdCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aGljaCBuYW1lcyBmb3JtdWxhIHByZWZpeGVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgY29sdW1ucyBjb25maWd1cmVkIHdpdGhcbiAgICAgKiBgZm9ybXVsYSA6IHRydWVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1mb3JtdWxhUHJvdmlkZXJzKVxuICAgICAqL1xuICAgIGZvcm11bGFQcm92aWRlcnMgPyA6IFJlY29yZDxzdHJpbmcsIEZvcm11bGFQcm92aWRlckNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBSZWZyZXNoIGVudGlyZSByb3cgd2hlbiBhIHJlY29yZCBjaGFuZ2VzIChgdHJ1ZWApIG9yLCBpZiBwb3NzaWJsZSwgb25seSB0aGUgY2VsbHMgYWZmZWN0ZWQgKGBmYWxzZWApLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1mdWxsUm93UmVmcmVzaClcbiAgICAgKi9cbiAgICBmdWxsUm93UmVmcmVzaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgZGF0ZXMgdGhhdCB3aWxsIGNvbnN0cmFpbiByZXNpemUgYW5kIGRyYWcgb3BlcmF0aW9ucy4gVGhlIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxuICAgICAqIHRhc2sgYmVpbmcgZHJhZ2dlZC5cbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gdGFza1JlY29yZCBUaGUgdGFzayByZWNvcmQgYmVpbmcgbW92ZWQgb3IgcmVzaXplZC5cbiAgICAgKiBAcmV0dXJucyB7RGF0ZUNvbnN0cmFpbnR9IENvbnN0cmFpbmluZyBvYmplY3QgY29udGFpbmluZyBgc3RhcnRgIGFuZCBgZW5kYCBjb25zdHJhaW50cy4gT21pdHRpbmcgZWl0aGVyIHdpbGwgbWVhbiB0aGF0IGVuZCBpcyBub3QgY29uc3RyYWluZWQuIFNvIHlvdSBjYW4gcHJldmVudCBhIHJlc2l6ZSBvciBtb3ZlIGZyb20gbW92aW5nICpiZWZvcmUqIGEgY2VydGFpbiB0aW1lIHdoaWxlIG5vdCBjb25zdHJhaW5pbmcgdGhlIGVuZCBkYXRlLlxuICAgICAqL1xuICAgIGdldERhdGVDb25zdHJhaW50cyA/IDogKHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCkgPT4gRGF0ZUNvbnN0cmFpbnRcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCByb3cgdG8gZGV0ZXJtaW5lIGl0cyBoZWlnaHQuIEl0IGlzIHBhc3NlZCBhIFtyZWNvcmRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9kYXRhL01vZGVsKSBhbmRcbiAgICAgKiBleHBlY3RlZCB0byByZXR1cm4gdGhlIGRlc2lyZWQgaGVpZ2h0IG9mIHRoYXQgcmVjb3JkcyByb3cuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIEdyaWRzXG4gICAgICogY29uZmlndXJlZCBbcm93SGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcm93SGVpZ2h0KSBpcyB1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1nZXRSb3dIZWlnaHQpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGdldFJvd0hlaWdodC5yZWNvcmQgUmVjb3JkIHRvIGRldGVybWluZSByb3cgaGVpZ2h0IGZvclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IERlc2lyZWQgcm93IGhlaWdodFxuICAgICAqL1xuICAgIGdldFJvd0hlaWdodCA/IDogKGdldFJvd0hlaWdodDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgY29uZmlnIFtvYmplY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjdHlwZWRlZi1QYW5lbEhlYWRlcikgZm9yIHRoZSBwYW5lbCdzIGhlYWRlciBvciBhIHN0cmluZyBpbiBwbGFjZSBvZiBhIGB0aXRsZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWhlYWRlcilcbiAgICAgKi9cbiAgICBoZWFkZXIgPyA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgaGVpZ2h0LCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS5oZWlnaHRgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIGhlaWdodCBzdHJpbmcgb3IgYSBudW1iZXIsXG4gICAgICogd2hpY2ggd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCBoZWlnaHQsIGJ1dCBpbiBzb21lXG4gICAgICogY2FzZXMgdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICBoZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgd2l0aCB0cnVlIHRvIG1ha2Ugd2lkZ2V0IGluaXRpYWxseSBoaWRkZW4uXG4gICAgICovXG4gICAgaGlkZGVuID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBoaWRlIHRoZSBmb290ZXIgZWxlbWVudHNcbiAgICAgKi9cbiAgICBoaWRlRm9vdGVycyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaGlkZSB0aGUgY29sdW1uIGhlYWRlciBlbGVtZW50c1xuICAgICAqL1xuICAgIGhpZGVIZWFkZXJzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBoaWRlIHRoZSBHcmlkJ3MgaG9yaXpvbnRhbCBzY3JvbGxiYXIocylcbiAgICAgKi9cbiAgICBoaWRlSG9yaXpvbnRhbFNjcm9sbGJhciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIHJvdyBob3ZlciBlZmZlY3QgaXMgbm90IHZpc2libGUgaW4gdGhlIFNjaGVkdWxlciBwYXJ0IG9mIHRoZSBncmlkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1oaWRlUm93SG92ZXIpXG4gICAgICovXG4gICAgaGlkZVJvd0hvdmVyID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBDU1MgY2xhc3MgdG8gYWRkIHRvIGhvdmVyZWQgcm93IGVsZW1lbnRzXG4gICAgICovXG4gICAgaG92ZXJDbHMgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIGljb24gdG8gc2hvdyBiZWZvcmUgdGhlIFt0aXRsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctdGl0bGUpLiBFaXRoZXIgcGFzcyBhIENTUyBjbGFzcyBhcyBhIHN0cmluZywgb3IgcGFzcyBhXG4gICAgICogW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9iamVjdCBkZXNjcmliaW5nIGFuIGVsZW1lbnQgdG8gcmVwcmVzZW50IHRoZSBpY29uLlxuICAgICAqL1xuICAgIGljb24gPyA6IHN0cmluZ3xEb21Db25maWdcbiAgICAvKipcbiAgICAgKiBXaWRnZXQgaWQsIGlmIG5vdCBzcGVjaWZpZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiBBbHNvIHVzZWQgZm9yIGxvb2t1cHMgdGhyb3VnaCBXaWRnZXQuZ2V0QnlJZFxuICAgICAqL1xuICAgIGlkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGlnbm9yZSByZWFjdGluZyB0byBET00gZXZlbnRzIChtb3VzZW92ZXIvbW91c2VvdXQgZXRjKSB3aGlsZSBzY3JvbGxpbmcuIFVzZWZ1bCBpZiB5b3VcbiAgICAgKiB3YW50IHRvIG1heGltaXplIHNjcm9sbCBwZXJmb3JtYW5jZS5cbiAgICAgKi9cbiAgICBpZ25vcmVEb21FdmVudHNXaGlsZVNjcm9sbGluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIHdpZGdldHMgcmVhZC1vbmx5IHN0YXRlIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWlnbm9yZVBhcmVudFJlYWRPbmx5KVxuICAgICAqL1xuICAgIGlnbm9yZVBhcmVudFJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGUgcGFuZWwgdGltZXNwYW4gZHVyaW5nIHNjcm9sbGluZyBpbiB0aGUgdGltZSBkaW1lbnNpb24sXG4gICAgICogd2hlbiB0aGUgc2Nyb2xsZXIgY29tZXMgY2xvc2UgdG8gdGhlIHN0YXJ0L2VuZCBlZGdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctaW5maW5pdGVTY3JvbGwpXG4gICAgICovXG4gICAgaW5maW5pdGVTY3JvbGwgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIGFsaWduIGlucHV0IGZpZWxkcyBvZiBjaGlsZCB3aWRnZXRzLiBCeSBkZWZhdWx0LCB0aGUgRmllbGQgaW5wdXQgZWxlbWVudCBpc1xuICAgICAqIHBsYWNlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGBsYWJlbGAuIElmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgaW5wdXQgZmllbGRzIGFsaWduZWQgdG8gdGhlXG4gICAgICogcmlnaHQsIHNldCB0aGlzIGNvbmZpZyB0byBgJ2VuZCdgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1pbnB1dEZpZWxkQWxpZ24pXG4gICAgICovXG4gICAgaW5wdXRGaWVsZEFsaWduID8gOiAnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gaW5zZXJ0IHRoaXMgd2lkZ2V0IGJlZm9yZS4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqL1xuICAgIGluc2VydEZpcnN0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZWUgW0tleWJvYXJkIHNob3J0Y3V0c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0I2tleWJvYXJkLXNob3J0Y3V0cykgZm9yIGRldGFpbHNcbiAgICAgKi9cbiAgICBrZXlNYXAgPyA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIHVzZSBzYW1lIGxhYmVsIHBsYWNlbWVudCBvbiBhbGwgY2hpbGQgd2lkZ2V0cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctbGFiZWxQb3NpdGlvbilcbiAgICAgKi9cbiAgICBsYWJlbFBvc2l0aW9uID8gOiAnYmVmb3JlJ3wnYWJvdmUnfCdhbGlnbi1iZWZvcmUnfCdhdXRvJ3xudWxsXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3RlbmVyIHNldCBmb3IgdGhpcyBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWxpc3RlbmVycylcbiAgICAgKi9cbiAgICBsaXN0ZW5lcnMgPyA6IEdhbnR0QmFzZUxpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdCwgb3IgYSBtZXNzYWdlIHRvIGJlIHNob3duIHdoZW4gYSBzdG9yZSBpcyBwZXJmb3JtaW5nIGEgcmVtb3RlXG4gICAgICogb3BlcmF0aW9uLCBvciBDcnVkIE1hbmFnZXIgaXMgbG9hZGluZyBkYXRhIGZyb20gdGhlIHNldmVyLiBTZXQgdG8gYG51bGxgIHRvIGRpc2FibGUgZGVmYXVsdCBsb2FkIG1hc2suXG4gICAgICovXG4gICAgbG9hZE1hc2sgPyA6IHN0cmluZ3xNYXNrQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBBIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QgdG8gYWRqdXN0IHRoZSBbbWFza0RlZmF1bHRzXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tYXNrRGVmYXVsdHMpXG4gICAgICogd2hlbiBkYXRhIGlzIGxvYWRpbmcuIFRoZSBtZXNzYWdlIGFuZCBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZyb20gdGhlXG4gICAgICogW2xvYWRNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvbWl4aW4vTG9hZE1hc2thYmxlI2NvbmZpZy1sb2FkTWFzaykgY29uZmlnIHRha2UgcHJpb3JpdHkgb3ZlciB0aGVzZSBvcHRpb25zLCBqdXN0IGFzIHRoZXkgZG9cbiAgICAgKiBmb3IgYG1hc2tEZWZhdWx0c2AsIHJlc3BlY3RpdmVseS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctbG9hZE1hc2tEZWZhdWx0cylcbiAgICAgKi9cbiAgICBsb2FkTWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0IHRvIGFkanVzdCB0aGUgW21hc2tEZWZhdWx0c10oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza0RlZmF1bHRzKVxuICAgICAqIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGxvYWRpbmcgZGF0YS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctbG9hZE1hc2tFcnJvcilcbiAgICAgKi9cbiAgICBsb2FkTWFza0Vycm9yID8gOiBNYXNrQ29uZmlnfE1hc2t8Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGltZSBpbiBtcyB1bnRpbCBhIGxvbmdwcmVzcyBpcyB0cmlnZ2VyZWRcbiAgICAgKi9cbiAgICBsb25nUHJlc3NUaW1lID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCwgZXZlbnRzIGFyZSBzaXplZCBhbmQgcG9zaXRpb25lZCBiYXNlZCBvbiByb3dIZWlnaHQsIHJlc291cmNlTWFyZ2luIGFuZCBiYXJNYXJnaW4gc2V0dGluZ3MuXG4gICAgICogU2V0IHRoaXMgdG8gYGZhbHNlYCBpZiB5b3Ugd2FudCB0byBjb250cm9sIGhlaWdodCBhbmQgdmVydGljYWwgcG9zaXRpb24gdXNpbmcgQ1NTIGluc3RlYWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLW1hbmFnZWRFdmVudFNpemluZylcbiAgICAgKi9cbiAgICBtYW5hZ2VkRXZlbnRTaXppbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBtYXJnaW4uIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYFRSQkxgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgcGl4ZWxzLlxuICAgICAqL1xuICAgIG1hcmdpbiA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEdyaWRzIGNoYW5nZSB0aGUgYG1hc2tEZWZhdWx0c2AgdG8gY292ZXIgb25seSB0aGVpciBgYm9keWAgZWxlbWVudC5cbiAgICAgKi9cbiAgICBtYXNrRGVmYXVsdHMgPyA6IE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFwcGx5IHRoZSBkZWZhdWx0IG1hc2sgdG8gdGhlIHdpZGdldC4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgdGhlIG1hc2sgbWVzc2FnZSBvciBhXG4gICAgICogW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdC5cbiAgICAgKi9cbiAgICBtYXNrZWQgPyA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBHZXQvc2V0IGVuZCBkYXRlIGxpbWl0IG9mIHRoZSB0aW1lbGluZS5cbiAgICAgKiBBY3Rpb25zIHN1Y2ggYXMgdGltZWxpbmUgc2Nyb2xsaW5nLCBhbGwgdHlwZXMgb2YgdGltZWxpbmUgem9vbXMgYW5kIHNoaWZ0c1xuICAgICAqIHdpbGwgcmVzcGVjdCB0aGlzIGxpbWl0LlxuICAgICAqL1xuICAgIG1heERhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtYXhIZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gdGltZSBheGlzIHVuaXQgdG8gZGlzcGxheSBub24td29ya2luZyByYW5nZXMgZm9yICgnaG91cicgb3IgJ2RheScgZXRjKS5cbiAgICAgKiBXaGVuIHpvb21pbmcgdG8gYSB2aWV3IHdpdGggYSBsYXJnZXIgdW5pdCwgbm8gbm9uLXdvcmtpbmcgdGltZSBlbGVtZW50cyB3aWxsIGJlIHJlbmRlcmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1tYXhUaW1lQXhpc1VuaXQpXG4gICAgICovXG4gICAgbWF4VGltZUF4aXNVbml0ID8gOiBEdXJhdGlvblVuaXRcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWF4V2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heFdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byB3aGljaCBbem9vbUluXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lWm9vbWFibGUjZnVuY3Rpb24tem9vbUluKSB3aWxsIHdvcmsuIERlZmF1bHRzIHRvIHRoZSBudW1iZXIgb2ZcbiAgICAgKiBbVmlld1ByZXNldHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ByZXNldC9WaWV3UHJlc2V0KSBhdmFpbGFibGUsIHNlZSBbcHJlc2V0c10oI1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lVmlld1ByZXNldHMjcHJvcGVydHktcHJlc2V0cylcbiAgICAgKiBmb3IgaW5mb3JtYXRpb24uIFVubGVzcyB5b3UgaGF2ZSBtb2RpZmllZCB0aGUgY29sbGVjdGlvbiBvZiBhdmFpbGFibGUgcHJlc2V0cywgdGhlIG1heCB6b29tIGxldmVsIGlzXG4gICAgICogbWlsbGlzZWNvbmRzLlxuICAgICAqL1xuICAgIG1heFpvb21MZXZlbCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogR2V0L3NldCBzdGFydCBkYXRlIGxpbWl0IG9mIHRoZSB0aW1lbGluZS5cbiAgICAgKiBBY3Rpb25zIHN1Y2ggYXMgdGltZWxpbmUgc2Nyb2xsaW5nLCBhbGwgdHlwZXMgb2YgdGltZWxpbmUgem9vbXMgYW5kIHNoaWZ0c1xuICAgICAqIHdpbGwgcmVzcGVjdCB0aGlzIGxpbWl0LlxuICAgICAqL1xuICAgIG1pbkRhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogR3JpZCdzIGBtaW4taGVpZ2h0YC4gRGVmYXVsdHMgdG8gYDEwZW1gIHRvIGJlIHN1cmUgdGhhdCB0aGUgR3JpZCBhbHdheXMgaGFzIGEgaGVpZ2h0IHdoZXJldmVyIGl0IGlzXG4gICAgICogaW5zZXJ0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLW1pbkhlaWdodClcbiAgICAgKi9cbiAgICBtaW5IZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWluV2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbldpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gem9vbSBsZXZlbCB0byB3aGljaCBbem9vbU91dF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9UaW1lbGluZVpvb21hYmxlI2Z1bmN0aW9uLXpvb21PdXQpIHdpbGwgd29yay4gRGVmYXVsdHMgdG8gMCAoeWVhciB0aWNrcylcbiAgICAgKi9cbiAgICBtaW5ab29tTGV2ZWwgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEdyaWQgbW9uaXRvcnMgd2luZG93IHJlc2l6ZSBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIG1vbml0b3JSZXNpemUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGEgc2V0IG9mIGBuYW1lOiB2YWx1ZWAgcHJvcGVydGllcyB0byBhcHBseSBvbiB0YXNrcyBjcmVhdGVkIHVzaW5nIHRoZSB0YXNrIGNvbnRleHQgbWVudS5cbiAgICAgKiBCZSBhd2FyZSB0aGF0IGBuYW1lYCB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQgc2luY2UgaXQncyBhdXRvIGdlbmVyYXRlZCBhbmQgbWF5IGJlIGNvbmZpZ3VyZWQgd2l0aCBsb2NhbGl6YXRpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLW5ld1Rhc2tEZWZhdWx0cylcbiAgICAgKiBAcmV0dXJucyB7R2FudHQubW9kZWwuVGFza01vZGVsQ29uZmlnLG9iamVjdH0gU2V0IG9mIHByb3BlcnRpZXMgdG8gYXBwbHkgb24gdGFza3MgY3JlYXRlZCB1c2luZyB0aGUgdGFzayBjb250ZXh0IG1lbnVcbiAgICAgKi9cbiAgICBuZXdUYXNrRGVmYXVsdHMgPyA6IFRhc2tNb2RlbENvbmZpZ3xvYmplY3R8KCgpID0+IFRhc2tNb2RlbENvbmZpZ3xvYmplY3QpXG4gICAgLyoqXG4gICAgICogVGhlIG93bmluZyBXaWRnZXQgb2YgdGhpcyBXaWRnZXQuIElmIHRoaXMgV2lkZ2V0IGlzIGRpcmVjdGx5IGNvbnRhaW5lZCAodGhhdCBpcywgaXQgaXMgb25lIG9mIHRoZVxuICAgICAqIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktaXRlbXMpIG9mIGEgQ29udGFpbmVyKSwgdGhpcyBjb25maWcgd2lsbCBiZSBpZ25vcmVkLiBJbiB0aGlzIGNhc2VcbiAgICAgKiB0aGUgb3duZXIgaXMgPHN0cm9uZz5hbHdheXM8L3N0cm9uZz4gdGhlIGVuY2Fwc3VsYXRpbmcgQ29udGFpbmVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1vd25lcilcbiAgICAgKi9cbiAgICBvd25lciA/IDogV2lkZ2V0fGFueVxuICAgIC8qKlxuICAgICAqIFBhcnRuZXJzIHRoaXMgVGltZWxpbmUgcGFuZWwgd2l0aCBhbm90aGVyIFRpbWVsaW5lIGluIG9yZGVyIHRvIHN5bmMgdGhlaXIgcmVnaW9uIHNpemVzIChzdWItZ3JpZHMgbGlrZSBsb2NrZWQsIG5vcm1hbCB3aWxsIGdldCB0aGUgc2FtZSB3aWR0aCksXG4gICAgICogc3RhcnQgYW5kIGVuZCBkYXRlcywgdmlldyBwcmVzZXQsIHpvb20gbGV2ZWwgYW5kIHNjcm9sbGluZyBwb3NpdGlvbi4gQWxsIHRoZXNlIHZhbHVlcyB3aWxsIGJlIHN5bmNlZCB3aXRoIHRoZSB0aW1lbGluZSBkZWZpbmVkIGFzIHRoZSBgcGFydG5lcmAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXBhcnRuZXIpXG4gICAgICovXG4gICAgcGFydG5lciA/IDogVGltZWxpbmVCYXNlXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBwbHVnaW5zIChhbiBhcnJheSBvZiBjbGFzc2VzKSBpbiBjb25maWdcbiAgICAgKi9cbiAgICBwbHVnaW5zID8gOiBGdW5jdGlvbltdXG4gICAgLyoqXG4gICAgICogVHJ1ZSB0byBwcmVzZXJ2ZSBmb2N1c2VkIGNlbGwgYWZ0ZXIgbG9hZGluZyBuZXcgZGF0YVxuICAgICAqL1xuICAgIHByZXNlcnZlRm9jdXNPbkRhdGFzZXRDaGFuZ2UgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmVzZXJ2ZSB0aGUgZ3JpZCdzIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiB3aGVuIGNoYW5nZXNldHMgYXJlIGFwcGxpZWQsIGFzIGluIHRoZSBjYXNlIG9mIHJlbW90ZVxuICAgICAqIGNoYW5nZXMsIG9yIHdoZW4gc3RvcmVzIGFyZSBjb25maWd1cmVkIHdpdGggW3N5bmNEYXRhT25Mb2FkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvZGF0YS9TdG9yZSNjb25maWctc3luY0RhdGFPbkxvYWQpLlxuICAgICAqL1xuICAgIHByZXNlcnZlU2Nyb2xsID8gOiBQcmVzZXJ2ZVNjcm9sbE9wdGlvbnN8Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIHByZXNlcnZlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiBhZnRlciBzdG9yZSBhY3Rpb25zIHRoYXQgdHJpZ2dlciBhIGByZWZyZXNoYCBldmVudCxcbiAgICAgKiBzdWNoIGFzIGxvYWRpbmcgbmV3IGRhdGEgYW5kIGZpbHRlcmluZy5cbiAgICAgKi9cbiAgICBwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIFtWaWV3UHJlc2V0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9wcmVzZXQvVmlld1ByZXNldCkgY29uZmlnIG9iamVjdHNcbiAgICAgKiB3aGljaCBkZXNjcmliZXMgdGhlIGF2YWlsYWJsZSB0aW1lbGluZSBsYXlvdXRzIGZvciB0aGlzIHNjaGVkdWxlci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctcHJlc2V0cylcbiAgICAgKi9cbiAgICBwcmVzZXRzID8gOiBWaWV3UHJlc2V0Q29uZmlnW11cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IHRvb2x0aXAgZnJvbSBiZWluZyBkaXNwbGF5ZWQgb24gdG91Y2ggZGV2aWNlcy4gVXNlZnVsIGZvciBleGFtcGxlIGZvciBidXR0b25zIHRoYXQgZGlzcGxheSBhXG4gICAgICogbWVudSBvbiBjbGljayBldGMsIHNpbmNlIHRoZSB0b29sdGlwIHdvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAqL1xuICAgIHByZXZlbnRUb29sdGlwT25Ub3VjaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgW1Byb2plY3RNb2RlbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwpIGluc3RhbmNlIG9yIGEgY29uZmlnIG9iamVjdC4gVGhlIHByb2plY3QgaG9sZHMgYWxsIEdhbnR0IGRhdGEuXG4gICAgICovXG4gICAgcHJvamVjdCA/IDogUHJvamVjdE1vZGVsfFByb2plY3RNb2RlbENvbmZpZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBY2NlcHRzIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1wcm9qZWN0UHJvZ3Jlc3NSZXBvcnRpbmcpXG4gICAgICovXG4gICAgcHJvamVjdFByb2dyZXNzUmVwb3J0aW5nID8gOiBzdHJpbmd8bnVsbFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gbWFrZSB0aGUgR2FudHQgcmVhZC1vbmx5LCBieSBkaXNhYmxpbmcgYW55IFVJcyBmb3IgbW9kaWZ5aW5nIGRhdGEuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXJlYWRPbmx5KVxuICAgICAqL1xuICAgIHJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgc2hvd24gd2hlbiBhIHJlY3VycmluZyBldmVudCBpcyBlZGl0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXJlY3VycmVuY2VDb25maXJtYXRpb25Qb3B1cClcbiAgICAgKi9cbiAgICByZWN1cnJlbmNlQ29uZmlybWF0aW9uUG9wdXAgPyA6IFJlY3VycmVuY2VDb25maXJtYXRpb25Qb3B1cENvbmZpZ3xSZWN1cnJlbmNlQ29uZmlybWF0aW9uUG9wdXBcbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgZGVmYXVsdCBgcmVuZGl0aW9uYCB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cywgb3IgYSBtYXAgb2YgcmVuZGl0aW9ucyBrZXllZCBieSBjaGlsZCB3aWRnZXRcbiAgICAgKiBgdHlwZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXJlbmRpdGlvbilcbiAgICAgKi9cbiAgICByZW5kaXRpb24gPyA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGxcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBwcm9wZXJ0eSB0byBhbGxvdyB0aGUgd2lkZ2V0L2NvbXBvbmVudCB0byBiZSByZXNpemVkLiBQcmVzc2luZyA8a2JkPlNoaWZ0PC9rYmQ+IHdoaWxlIHJlc2l6aW5nIHdpbGxcbiAgICAgKiBjb25zdHJhaW4gdGhlIGFzcGVjdCByYXRpby5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctcmVzaXphYmxlKVxuICAgICAqL1xuICAgIHJlc2l6YWJsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIG1pbldpZHRoPzogbnVtYmVyXG4gICAgICAgIG1heFdpZHRoPzogbnVtYmVyXG4gICAgICAgIG1pbkhlaWdodD86IG51bWJlclxuICAgICAgICBtYXhIZWlnaHQ/OiBudW1iZXJcbiAgICAgICAgaGFuZGxlcz86IG9iamVjdFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBvbmx5IG1lYXN1cmUgY2VsbCBjb250ZW50cyB3aGVuIGRvdWJsZS1jbGlja2luZyB0aGUgZWRnZSBiZXR3ZWVuIGNvbHVtbiBoZWFkZXJzLlxuICAgICAqL1xuICAgIHJlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgcGF0aCBmb3IgcmVzb3VyY2UgaW1hZ2VzLCB1c2VkIGJ5IHZhcmlvdXMgd2lkZ2V0cyBzdWNoIGFzIHRoZSByZXNvdXJjZSBhc3NpZ25tZW50IGNvbHVtbi5cbiAgICAgKiBAZGVwcmVjYXRlZCA3LjAgSW4gZmF2b3Igb2YgW3Jlc291cmNlSW1hZ2VQYXRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1yZXNvdXJjZUltYWdlUGF0aClcbiAgICAgKi9cbiAgICByZXNvdXJjZUltYWdlRm9sZGVyUGF0aCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIHBhdGggZm9yIHJlc291cmNlIGltYWdlcywgdXNlZCBieSB2YXJpb3VzIHdpZGdldHMgc3VjaCBhcyB0aGUgcmVzb3VyY2UgYXNzaWdubWVudCBjb2x1bW4uXG4gICAgICovXG4gICAgcmVzb3VyY2VJbWFnZVBhdGggPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIElubGluZSByZXNvdXJjZXMsIHdpbGwgYmUgbG9hZGVkIGludG8gdGhlIGJhY2tpbmcgcHJvamVjdCdzIFJlc291cmNlU3RvcmUuXG4gICAgICovXG4gICAgcmVzb3VyY2VzID8gOiBSZXNvdXJjZU1vZGVsW118UmVzb3VyY2VNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogXCJCcmVhayBwb2ludHNcIiBmb3Igd2hpY2ggcmVzcG9uc2l2ZSBjb25maWcgdG8gdXNlIGZvciBjb2x1bW5zIGFuZCBjc3MuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXJlc3BvbnNpdmVMZXZlbHMpXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZUxldmVscyA/IDogUmVjb3JkPHN0cmluZywgbnVtYmVyfHN0cmluZ3xSZXNwb25zaXZlTGV2ZWxDb25maWc+XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWZvY3VzRWxlbWVudCksIG9yIFtlbGVtZW50XSgjQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIHRhcHBlZCA8ZW0+aWYgdGhlXG4gICAgICogY3VycmVudCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzPC9lbT4uIE91dCBvZiB0aGUgYm94LCBvbmx5IHRoZSBNYXRlcmlhbCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1yaXBwbGUpXG4gICAgICovXG4gICAgcmlwcGxlID8gOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSByZW5kZXJpbmcgdGhpcyB3aWRnZXQgdG8gYSBzaGFkb3cgcm9vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgdGhpcyBjb25maWcgdG8gdGhlIHNoYWRvd1Jvb3QuIElmIG5vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgaXQgdG8gYGRvY3VtZW50LmJvZHlgXG4gICAgICovXG4gICAgcm9vdEVsZW1lbnQgPyA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnRcbiAgICAvKipcbiAgICAgKiBSb3cgaGVpZ2h0IGluIHBpeGVscy4gVGhpcyBhbGxvd3MgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciByb3dzIHRvIGJlIGNvbnRyb2xsZWQuIE5vdGUgdGhhdCBpdCBtYXkgYmVcbiAgICAgKiBvdmVycmlkZW4gYnkgc3BlY2lmeWluZyBhIFtyb3dIZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9kYXRhL0dyaWRSb3dNb2RlbCNmaWVsZC1yb3dIZWlnaHQpIG9uIGEgcGVyIHJlY29yZCBiYXNpcywgb3IgZnJvbVxuICAgICAqIGEgY29sdW1uIFtyZW5kZXJlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLXJlbmRlcmVyKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctcm93SGVpZ2h0KVxuICAgICAqL1xuICAgIHJvd0hlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgcm93IGxpbmVzLiBFbmQgcmVzdWx0IG1pZ2h0IGJlIG92ZXJydWxlZCBieS9kaWZmZXIgYmV0d2VlbiB0aGVtZXMuXG4gICAgICovXG4gICAgcm93TGluZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGB0cnVlYCB0byBtYWtlIHRoZSB3aWRnZXQncyBlbGVtZW50IHVzZSB0aGUgYGRpcmVjdGlvbjpydGxgIHN0eWxlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ2xhc3MgaW1wbGVtZW50aW5nIHRoZSBwb3B1cCByZXNvbHZpbmcgKnNjaGVkdWxpbmcgY29uZmxpY3RzKiBhbmQgKmNhbGVuZGFyIG1pc2NvbmZpZ3VyYXRpb25zKi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctc2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwQ2xhc3MpXG4gICAgICovXG4gICAgc2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwQ2xhc3MgPyA6IHR5cGVvZiBTY2hlZHVsaW5nSXNzdWVSZXNvbHV0aW9uUG9wdXBcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHdoZXRoZXIgdGhlIGdyaWQgaXMgc2Nyb2xsYWJsZSBpbiB0aGUgYFlgIGF4aXMuIFRoaXMgaXMgdXNlZCB0byBjb25maWd1cmUgYSBbU2Nyb2xsZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvdXRpbC9TY3JvbGxlcikuXG4gICAgICogU2VlIHRoZSBbc2Nyb2xsZXJDbGFzc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXNjcm9sbGVyQ2xhc3MpIGNvbmZpZyBvcHRpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXNjcm9sbGFibGUpXG4gICAgICovXG4gICAgc2Nyb2xsYWJsZSA/IDogYm9vbGVhbnxTY3JvbGxlckNvbmZpZ3xTY3JvbGxlclxuICAgIC8qKlxuICAgICAqIFRoZSBjbGFzcyB0byBpbnN0YW50aWF0ZSB0byB1c2UgYXMgdGhlIFtzY3JvbGxhYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc2Nyb2xsYWJsZSkuIERlZmF1bHRzIHRvIFtTY3JvbGxlcl0oI0NvcmUvaGVscGVyL3V0aWwvU2Nyb2xsZXIpLlxuICAgICAqL1xuICAgIHNjcm9sbGVyQ2xhc3MgPyA6IHR5cGVvZiBTY3JvbGxlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciB0aGUgW1Njcm9sbE1hbmFnZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS91dGlsL1Njcm9sbE1hbmFnZXIpIGNsYXNzIG9uIGluaXRpYWxpemF0aW9uLiBSZXR1cm5zIHRoZVxuICAgICAqIFtTY3JvbGxNYW5hZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvdXRpbC9TY3JvbGxNYW5hZ2VyKSBhdCBydW50aW1lLlxuICAgICAqL1xuICAgIHNjcm9sbE1hbmFnZXIgPyA6IFNjcm9sbE1hbmFnZXJDb25maWd8U2Nyb2xsTWFuYWdlclxuICAgIC8qKlxuICAgICAqIFRydWUgdG8gc2Nyb2xsIHRoZSB0YXNrIGJhciBpbnRvIHZpZXcgd2hlbiBjbGlja2luZyBhIGNlbGwsIHlvdSBjYW4gYWxzbyBwYXNzIGFcbiAgICAgKiBbc2Nyb2xsIGNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNmdW5jdGlvbi1zY3JvbGxUYXNrSW50b1ZpZXcpIG9iamVjdC5cbiAgICAgKi9cbiAgICBzY3JvbGxUYXNrSW50b1ZpZXdPbkNlbGxDbGljayA/IDogYm9vbGVhbnxCcnludHVtU2Nyb2xsT3B0aW9uc1xuICAgIC8qKlxuICAgICAqIFNlbGVjdGlvbiBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBjaGFuZ2UgdGhlc2UgcHJvcGVydGllcyB0byBjb250cm9sIGhvdyBzZWxlY3Rpb24gd29ya3MgYW5kIHdoYXQgY2FuIGJlXG4gICAgICogc2VsZWN0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXNlbGVjdGlvbk1vZGUpXG4gICAgICovXG4gICAgc2VsZWN0aW9uTW9kZSA/IDogR3JpZFNlbGVjdGlvbk1vZGVcbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gYHRydWVgIHRoaXMgd2lsbDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctc2hvd0Nvc3RDb250cm9scylcbiAgICAgKi9cbiAgICBzaG93Q29zdENvbnRyb2xzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogYGZhbHNlYCB0byBub3Qgc2hvdyBhIHRvb2x0aXAgd2hpbGUgY3JlYXRpbmcgYSBkZXBlbmRlbmN5XG4gICAgICovXG4gICAgc2hvd0NyZWF0aW9uVG9vbHRpcCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaGF2ZSB0aGUgZ3JpZCBzaG93IGEgcmVkIFwiY2hhbmdlZFwiIHRhZyBpbiBjZWxscyB3aG9zZVxuICAgICAqIGZpZWxkIHZhbHVlIGhhcyBjaGFuZ2VkIGFuZCBub3QgeWV0IGJlZW4gY29tbWl0dGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zaG93RGlydHkpXG4gICAgICovXG4gICAgc2hvd0RpcnR5ID8gOiBib29sZWFufHtcbiAgICAgICAgZHVyaW5nRWRpdD86IGJvb2xlYW5cbiAgICAgICAgbmV3UmVjb3JkPzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgdGhlIGxhZyBpbiB0aGUgdG9vbHRpcFxuICAgICAqL1xuICAgIHNob3dMYWdJblRvb2x0aXAgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBoaWRlIHJlY3VycmluZyBmaWVsZHMgaW4gZXZlbnQgZWRpdG9yLCBldmVuIGlmIHRoZVxuICAgICAqIFtSZWN1cnJpbmcgRXZlbnRzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1JlY3VycmluZ0V2ZW50cyNjb25maWctZW5hYmxlUmVjdXJyaW5nRXZlbnRzKSBpcyBgdHJ1ZWBcbiAgICAgKiBhbmQgYSByZWN1cnJpbmcgZXZlbnQgaXMgYmVpbmcgZWRpdGVkLlxuICAgICAqL1xuICAgIHNob3dSZWN1cnJpbmdVSSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBgdHJ1ZWAgdGhpcyB3aWxsIHNob3cgYSBjb2xvciBmaWVsZCBpbiB0aGUgW1Rhc2tFZGl0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza0VkaXQpIGVkaXRvciBhbmQgYWxzbyBhXG4gICAgICogcGlja2VyIGluIHRoZSBbVGFza01lbnVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrTWVudSkuIEJvdGggZW5hYmxlcyB0aGUgdXNlciB0byBjaG9vc2UgYSBjb2xvciB3aGljaCB3aWxsIGJlXG4gICAgICogYXBwbGllZCB0byB0aGUgdGFzayBiYXIncyBiYWNrZ3JvdW5kLiBTZWUgVGFza01vZGVsJ3MgW2V2ZW50Q29sb3JdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvVGFza01vZGVsI2ZpZWxkLWV2ZW50Q29sb3IpXG4gICAgICogY29uZmlnLlxuICAgICAqL1xuICAgIHNob3dUYXNrQ29sb3JQaWNrZXJzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBzaG93IGEgdG9vbHRpcCB3aGVuIGhvdmVyaW5nIGEgZGVwZW5kZW5jeSBsaW5lXG4gICAgICovXG4gICAgc2hvd1Rvb2x0aXAgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGFzIGBmYWxzZWAgdG8gbm90IHNob3cgdW5zY2hlZHVsZWQgdGFza3Mgb24gdGhlIEdhbnR0IGNoYXJ0LiBVbnNjaGVkdWxlZCB0YXNrcyB3aWxsIGJlIHJlbmRlcmVkIGFzXG4gICAgICogYW4gaWNvblxuICAgICAqL1xuICAgIHNob3dVbnNjaGVkdWxlZFRhc2tzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBzbmFwIHRvIHRoZSBjdXJyZW50IHRpbWUgcmVzb2x1dGlvbiBpbmNyZW1lbnQgd2hpbGUgaW50ZXJhY3Rpbmcgd2l0aCBzY2hlZHVsZWQgZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zbmFwKVxuICAgICAqL1xuICAgIHNuYXAgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBZmZlY3RzIGRyYWcgZHJvcCBhbmQgcmVzaXppbmcgb2YgZXZlbnRzIHdoZW4gW3NuYXBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVEYXRlTWFwcGVyI2NvbmZpZy1zbmFwKVxuICAgICAqIGlzIGVuYWJsZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXNuYXBSZWxhdGl2ZVRvRXZlbnRTdGFydERhdGUpXG4gICAgICovXG4gICAgc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgaG93IG1hbnkgY29sdW1ucyB0byBzcGFuIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIHNwYW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBzdGFydCBkYXRlIG9mIHRoZSB0aW1lbGluZSAoaWYgbm90IGNvbmZpZ3VyZSB3aXRoIFtpbmZpbml0ZVNjcm9sbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9UaW1lbGluZUJhc2UjY29uZmlnLWluZmluaXRlU2Nyb2xsKSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXN0YXJ0RGF0ZSlcbiAgICAgKi9cbiAgICBzdGFydERhdGUgPyA6IERhdGV8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhpcyB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXN0YXRlZnVsKVxuICAgICAqL1xuICAgIHN0YXRlZnVsID8gOiBib29sZWFufG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBldmVudHMgdGhhdCwgd2hlbiBmaXJlZCBieSB0aGlzIGNvbXBvbmVudCwgc2hvdWxkIHRyaWdnZXIgaXQgdG8gc2F2ZSBpdHMgc3RhdGUgYnkgY2FsbGluZ1xuICAgICAqIFtzYXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNmdW5jdGlvbi1zYXZlU3RhdGUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zdGF0ZWZ1bEV2ZW50cylcbiAgICAgKi9cbiAgICBzdGF0ZWZ1bEV2ZW50cyA/IDogb2JqZWN0fHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGtleSB0byB1c2Ugd2hlbiBzYXZpbmcgdGhpcyBvYmplY3QncyBzdGF0ZSBpbiB0aGUgW3N0YXRlUHJvdmlkZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVQcm92aWRlcikuIElmIHRoaXMgY29uZmlnIGlzXG4gICAgICogbm90IGFzc2lnbmVkLCBhbmQgW3N0YXRlZnVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjY29uZmlnLXN0YXRlZnVsKSBpcyBub3Qgc2V0IHRvIGBmYWxzZWAsIHRoZSBbaWRdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWlkKVxuICAgICAqIChpZiBleHBsaWNpdGx5IHNwZWNpZmllZCkgd2lsbCBiZSB1c2VkIGFzIHRoZSBgc3RhdGVJZGAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXN0YXRlSWQpXG4gICAgICovXG4gICAgc3RhdGVJZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGBTdGF0ZVByb3ZpZGVyYCB0byB1c2UgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGlzIG9iamVjdCdzIFtzdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI3Byb3BlcnR5LXN0YXRlKS4gQnkgZGVmYXVsdCwgYHN0YXRlYFxuICAgICAqIHdpbGwgYmUgc2F2ZWQgdXNpbmcgdGhlIFtkZWZhdWx0IHN0YXRlIHByb3ZpZGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvc3RhdGUvU3RhdGVQcm92aWRlciNwcm9wZXJ0eS1pbnN0YW5jZS1zdGF0aWMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zdGF0ZVByb3ZpZGVyKVxuICAgICAqL1xuICAgIHN0YXRlUHJvdmlkZXIgPyA6IFN0YXRlUHJvdmlkZXJcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGlzIHNldHRpbmdzIG9iamVjdCBjb250cm9scyBob3cgZ3JpZCBpcyByZXN0b3JlZCBmcm9tIHN0YXRlIGRhdGEuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXN0YXRlU2V0dGluZ3MpXG4gICAgICovXG4gICAgc3RhdGVTZXR0aW5ncyA/IDoge1xuICAgICAgICByZXN0b3JlVW5jb25maWd1cmVkQ29sdW1ucz86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiBzZXQsIHRoZSB0ZXh0IGluIHRoZSBtYWpvciB0aW1lIGF4aXMgaGVhZGVyIHN0aWNrcyBpbiB0aGUgc2Nyb2xsaW5nIHZpZXdwb3J0IGFzIGxvbmcgYXMgcG9zc2libGUuXG4gICAgICovXG4gICAgc3RpY2t5SGVhZGVycyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoYXQgaG9sZHMgcmVjb3JkcyB0byBkaXNwbGF5IGluIHRoZSBncmlkLCBvciBhIHN0b3JlIGNvbmZpZyBvYmplY3QuIElmIHRoZSBjb25maWd1cmF0aW9uIGNvbnRhaW5zXG4gICAgICogYSBgcmVhZFVybGAsIGFuIGBBamF4U3RvcmVgIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctc3RvcmUpXG4gICAgICovXG4gICAgc3RvcmUgPyA6IFN0b3JlfFN0b3JlQ29uZmlnfEFqYXhTdG9yZXxBamF4U3RvcmVDb25maWdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB3aWRnZXRzIGtleWVkIGJ5IG5hbWUuIEJ5IGRlZmF1bHQgKHdoZW4gbm8gYHR5cGVgIGlzIGdpdmVuKSwgc3RyaXBzIGFyZVxuICAgICAqIFt0b29sYmFyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKS4gSWYgeW91IHdhbnQgdG8gcGFzcyBhbiBhcnJheSwgeW91IGNhbiB1c2VcbiAgICAgKiB0aGUgdG9vbGJhcidzIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctc3RyaXBzKVxuICAgICAqL1xuICAgIHN0cmlwcyA/IDogUmVjb3JkPHN0cmluZywgR2FudHRDb250YWluZXJJdGVtQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHN1YiBncmlkIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyBrZXllZCBieSBhIGByZWdpb25gIHByb3BlcnR5LlxuICAgICAqIEJ5IGRlZmF1bHQsIGdyaWQgaGFzIGEgJ2xvY2tlZCcgcmVnaW9uIChpZiBjb25maWd1cmVkIHdpdGggbG9ja2VkIGNvbHVtbnMpIGFuZCBhICdub3JtYWwnIHJlZ2lvbi5cbiAgICAgKiBUaGUgJ25vcm1hbCcgcmVnaW9uIGRlZmF1bHRzIHRvIHVzZSBgZmxleDogMWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXN1YkdyaWRDb25maWdzKVxuICAgICAqL1xuICAgIHN1YkdyaWRDb25maWdzID8gOiBSZWNvcmQ8c3RyaW5nLCBTdWJHcmlkQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gcHJldmVudCBhdXRvIGNhbGN1bGF0aW5nIG9mIGEgbWluaW1hbCBbdGlja1NpemVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVFdmVudFJlbmRlcmluZyNwcm9wZXJ0eS10aWNrU2l6ZSlcbiAgICAgKiB0byBhbHdheXMgZml0IHRoZSBjb250ZW50IHRvIHRoZSBzY3JlZW4gc2l6ZS4gU2V0dGluZyB0aGlzIHByb3BlcnR5IG9uIGB0cnVlYCB3aWxsIGRpc2FibGUgW2ZvcmNlRml0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L1RpbWVsaW5lQmFzZSNjb25maWctZm9yY2VGaXQpIGJlaGF2aW91ci5cbiAgICAgKi9cbiAgICBzdXBwcmVzc0ZpdCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdCwgb3IgYSBtZXNzYWdlIHRvIGJlIHNob3duIHdoZW4gQ3J1ZCBNYW5hZ2VyXG4gICAgICogaXMgcGVyc2lzdGluZyBjaGFuZ2VzIG9uIHRoZSBzZXJ2ZXIuIFNldCB0byBgbnVsbGAgdG8gZGlzYWJsZSBkZWZhdWx0IHN5bmMgbWFzay5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctc3luY01hc2spXG4gICAgICovXG4gICAgc3luY01hc2sgPyA6IHN0cmluZ3xNYXNrQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBbdGFiXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYikgY3JlYXRlZCBmb3IgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBwbGFjZWQgaW4gYVxuICAgICAqIFtUYWJQYW5lbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgY29udGFpbmVyIGlzIHVzZWQgYXMgYSB0YWIgaW4gYSBUYWJQYW5lbCwgdGhlc2UgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZVxuICAgICAqIFtUYWJCYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiQmFyKSB3aGVuIHRoaXMgY29udGFpbmVyIGlzIHRoZSBhY3RpdmUgdGFiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy10YWJCYXJJdGVtcylcbiAgICAgKi9cbiAgICB0YWJCYXJJdGVtcyA/IDogVG9vbGJhckl0ZW1zW118V2lkZ2V0W11cbiAgICAvKipcbiAgICAgKiBBbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LCBidXQgcHJvdmlkZWQgc28gdGhhdCB5b3UgY2FuIG92ZXJyaWRlIGl0LiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBlYWNoIHRpbWVcbiAgICAgKiBhIHRhc2sgaXMgcmVuZGVyZWQgaW50byB0aGUgZ2FudHQgdG8gcmVuZGVyIHRoZSBjb250ZW50cyBvZiB0aGUgdGFzay5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdGFza1JlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byByZW5kZXIgYSBUYXNrLlxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBkZXRhaWwudGFza1JlY29yZCBUaGUgdGFzayByZWNvcmQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhIEFuIG9iamVjdCBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgdGhlIHRhc2sgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSB7Q29yZS5oZWxwZXIudXRpbC5Eb21DbGFzc0xpc3Qsc3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS5jbHMgQW4gb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIHJlcHJlc2VudCB0aGUgQ1NTIGNsYXNzIG5hbWVzIHRvIGJlIGFkZGVkIHRvIHRoZSB0YXNrcydzIGVsZW1lbnQuIFNldCBhIHByb3BlcnR5J3MgdmFsdWUgdG8gdHJ1dGh5IG9yIGZhbHN5IHRvIGFkZCBvciByZW1vdmUgdGhlIGNsYXNzIG5hbWUgYmFzZWQgb24gdGhlIHByb3BlcnR5IG5hbWUuIFVzaW5nIHRoaXMgdGVjaG5pcXVlLCB5b3UgZG8gbm90IGhhdmUgdG8ga25vdyB3aGV0aGVyIHRoZSBjbGFzcyBpcyBhbHJlYWR5IHRoZXJlLCBvciBkZWFsIHdpdGggY29uY2F0ZW5hdGlvbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBkZXRhaWwucmVuZGVyRGF0YS5zdHlsZSBJbmxpbmUgc3R5bGVzIGZvciB0aGUgdGFzayBiYXIgRE9NIGVsZW1lbnQuIFVzZSBlaXRoZXIgJ2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrJyBvciB7IGJvcmRlcjogJzFweCBzb2xpZCBibGFjaycgfVxuICAgICAqIEBwYXJhbSB7Q29yZS5oZWxwZXIudXRpbC5Eb21DbGFzc0xpc3Qsc3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS53cmFwcGVyQ2xzIEFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyByZXByZXNlbnQgdGhlIENTUyBjbGFzcyBuYW1lcyB0byBiZSBhZGRlZCB0byB0aGUgZXZlbnQgd3JhcHBlciBlbGVtZW50LiBTZXQgYSBwcm9wZXJ0eSdzIHZhbHVlIHRvIHRydXRoeSBvciBmYWxzeSB0byBhZGQgb3IgcmVtb3ZlIHRoZSBjbGFzcyBuYW1lIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eSBuYW1lLiBVc2luZyB0aGlzIHRlY2huaXF1ZSwgeW91IGRvIG5vdCBoYXZlIHRvIGtub3cgd2hldGhlciB0aGUgY2xhc3MgaXMgYWxyZWFkeSB0aGVyZSwgb3IgZGVhbCB3aXRoIGNvbmNhdGVuYXRpb24uXG4gICAgICogQHBhcmFtIHtDb3JlLmhlbHBlci51dGlsLkRvbUNsYXNzTGlzdCxzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLmljb25DbHMgQW4gb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIHJlcHJlc2VudCB0aGUgQ1NTIGNsYXNzIG5hbWVzIHRvIGJlIGFkZGVkIHRvIGEgdGFzayBpY29uIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW5bXSxUaW1lU3BhbkNvbmZpZ1tdfSBpbmRpY2F0b3JzIEFuIGFycmF5IHRoYXQgY2FuIGJlIHBvcHVsYXRlZCB3aXRoIFRpbWVTcGFuIHJlY29yZHMgb3IgdGhlaXIgY29uZmlnIG9iamVjdHMgdG8gaGF2ZSB0aGVtIHJlbmRlcmVkIGluIHRoZSB0YXNrIHJvd1xuICAgICAqIEByZXR1cm5zIHtzdHJpbmcsRG9tQ29uZmlnLERvbUNvbmZpZ1tdfSBBIHNpbXBsZSBzdHJpbmcsIG9yIGEgRG9tQ29uZmlnIG9iamVjdCBkZWZpbmluZyB0aGUgYWN0dWFsIEhUTUxcbiAgICAgKi9cbiAgICB0YXNrUmVuZGVyZXIgPyA6IChkZXRhaWw6IHsgdGFza1JlY29yZDogVGFza01vZGVsLCByZW5kZXJEYXRhOiB7IGNsczogRG9tQ2xhc3NMaXN0fHN0cmluZywgc3R5bGU6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCB3cmFwcGVyQ2xzOiBEb21DbGFzc0xpc3R8c3RyaW5nLCBpY29uQ2xzOiBEb21DbGFzc0xpc3R8c3RyaW5nIH0gfSwgaW5kaWNhdG9yczogVGltZVNwYW5bXXxUaW1lU3BhbkNvbmZpZ1tdKSA9PiBzdHJpbmd8RG9tQ29uZmlnfERvbUNvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogSW5saW5lIHRhc2tzLCB3aWxsIGJlIGxvYWRlZCBpbnRvIGFuIGludGVybmFsbHkgY3JlYXRlZCBUYXNrU3RvcmUuXG4gICAgICovXG4gICAgdGFza3MgPyA6IFRhc2tNb2RlbFtdfFRhc2tNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIFtUYXNrU3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZGF0YS9UYXNrU3RvcmUpIGhvbGRpbmcgdGhlIHRhc2tzIHRvIGJlIHJlbmRlcmVkIGludG8gdGhlIEdhbnR0LlxuICAgICAqL1xuICAgIHRhc2tTdG9yZSA/IDogVGFza1N0b3JlfFRhc2tTdG9yZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci5cbiAgICAgKiBUaGlzIGNyZWF0ZXMgYSB0b29sYmFyIGRvY2tlZCB0byB0aGUgdG9wIG9mIHRoZSBwYW5lbCBpbW1lZGlhdGVseSBiZWxvdyB0aGUgaGVhZGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy10YmFyKVxuICAgICAqL1xuICAgIHRiYXIgPyA6IChHYW50dENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQ1NTIGNsYXNzIHVzZWQgZm9yIHRlcm1pbmFsc1xuICAgICAqL1xuICAgIHRlcm1pbmFsQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBEZWxheSBpbiBtcyBiZWZvcmUgaGlkaW5nIHRoZSB0ZXJtaW5hbHMgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGFuIGV2ZW50IGJhciBvciB0ZXJtaW5hbC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdGVybWluYWxIaWRlRGVsYXkpXG4gICAgICovXG4gICAgdGVybWluYWxIaWRlRGVsYXkgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRlcm1pbmFsIG9mZnNldCBmcm9tIHRoZWlyIGluaXRpYWwgcG9zaXRpb24sIGluIHB4LiBQb3NpdGl2ZSB2YWx1ZXMgbW92ZSB0ZXJtaW5hbHMgZnVydGhlciBhd2F5IGZyb20gdGhlXG4gICAgICogZXZlbnQgYmFyLCBuZWdhdGl2ZSB2YWx1ZXMgaW5zaWRlIHRoZSBldmVudCBiYXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRlcm1pbmFsT2Zmc2V0KVxuICAgICAqL1xuICAgIHRlcm1pbmFsT2Zmc2V0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBEZWxheSBpbiBtcyBiZWZvcmUgc2hvd2luZyB0aGUgdGVybWluYWxzIHdoZW4gaG92ZXJpbmcgb3ZlciBhbiBldmVudCBiYXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRlcm1pbmFsU2hvd0RlbGF5KVxuICAgICAqL1xuICAgIHRlcm1pbmFsU2hvd0RlbGF5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaGVyZSAob24gZXZlbnQgYmFyIGVkZ2VzKSB0byBkaXNwbGF5IHRlcm1pbmFscy4gVGhlIHNpZGVzIGFyZSBgJ3N0YXJ0J2AsIGAndG9wJ2AsXG4gICAgICogYCdlbmQnYCBhbmQgYCdib3R0b20nYFxuICAgICAqL1xuICAgIHRlcm1pbmFsU2lkZXMgPyA6IHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogVGVybWluYWwgZGlhbWV0ZXIgaW4gcHgsIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBDU1MgdmFsdWUgZm9yIGl0ICh3aGljaCBtaWdodCBkZXBlbmQgb24gdGhlbWUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy10ZXJtaW5hbFNpemUpXG4gICAgICovXG4gICAgdGVybWluYWxTaXplID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoL2hlaWdodCAoZGVwZW5kaW5nIG9uIHZlcnRpY2FsIC8gaG9yaXpvbnRhbCBtb2RlKSBvZiBhbGwgdGhlIHRpbWUgY29sdW1ucy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdGlja1NpemUpXG4gICAgICovXG4gICAgdGlja1NpemUgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgW1RpbWVBeGlzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9kYXRhL1RpbWVBeGlzKSBjb25maWcgb2JqZWN0IG9yIGluc3RhbmNlLCB1c2VkIHRvIGNyZWF0ZSBhIGJhY2tpbmcgZGF0YSBzdG9yZSBvZlxuICAgICAqICd0aWNrcycgcHJvdmlkaW5nIHRoZSBpbnB1dCBkYXRlIGRhdGEgZm9yIHRoZSB0aW1lIGF4aXMgb2YgdGltZWxpbmUgcGFuZWwuIENyZWF0ZWQgYXV0b21hdGljYWxseSBpZiBub25lXG4gICAgICogc3VwcGxpZWQuXG4gICAgICovXG4gICAgdGltZUF4aXMgPyA6IFRpbWVBeGlzQ29uZmlnfFRpbWVBeGlzXG4gICAgLyoqXG4gICAgICogSW5saW5lIHRpbWUgcmFuZ2VzLCB3aWxsIGJlIGxvYWRlZCBpbnRvIHRoZSBiYWNraW5nIHByb2plY3QncyB0aW1lIHJhbmdlIHN0b3JlLlxuICAgICAqL1xuICAgIHRpbWVSYW5nZXMgPyA6IFRpbWVTcGFuW118VGltZVNwYW5Db25maWdbXVxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgY3VycmVudCB0aW1lIHJlc29sdXRpb24gb2JqZWN0LCB3aGljaCBjb250YWlucyBhIHVuaXQgaWRlbnRpZmllciBhbmQgYW4gaW5jcmVtZW50IGNvdW50XG4gICAgICogYHsgdW5pdCwgaW5jcmVtZW50IH1gLiBUaGlzIHZhbHVlIG1lYW5zIG1pbmltYWwgdGFzayBkdXJhdGlvbiB5b3UgY2FuIGNyZWF0ZSB1c2luZyBVSS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdGltZVJlc29sdXRpb24pXG4gICAgICovXG4gICAgdGltZVJlc29sdXRpb24gPyA6IHtcbiAgICAgICAgaW5jcmVtZW50PzogbnVtYmVyXG4gICAgICAgIHVuaXQ/OiBEdXJhdGlvblVuaXRcbiAgICB9fG51bWJlclxuICAgIC8qKlxuICAgICAqIFNldCB0byBhIHRpbWUgem9uZSBvciBhIFVUQyBvZmZzZXQuIFRoaXMgd2lsbCBzZXQgdGhlIHByb2plY3RzXG4gICAgICogW3RpbWVab25lXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9Qcm9qZWN0TW9kZWwjY29uZmlnLXRpbWVab25lKSBjb25maWcgYWNjb3JkaW5nbHkuIEFzIHRoaXMgY29uZmlnIGlzIG9ubHkgYSByZWZlcmVyLFxuICAgICAqIHBsZWFzZSBzZWUgcHJvamVjdCdzIGNvbmZpZyBbZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy10aW1lWm9uZSkgZm9yIG1vcmVcbiAgICAgKiBpbmZvcm1hdGlvbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdGltZVpvbmUpXG4gICAgICovXG4gICAgdGltZVpvbmUgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIHRpdGxlIHRvIGRpc3BsYXkgaW4gdGhlIGhlYWRlciBvciBvd25pbmcgVGFiUGFuZWwuIENhdXNlcyBjcmVhdGlvbiBhbmQgZG9ja2luZyBvZiBhIGhlYWRlclxuICAgICAqIHRvIHRoZSB0b3AgaWYgbm8gaGVhZGVyIGlzIGNvbmZpZ3VyZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRpdGxlKVxuICAgICAqL1xuICAgIHRpdGxlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUcnVlIHRvIHRvZ2dsZSB0aGUgY29sbGFwc2VkL2V4cGFuZGVkIHN0YXRlIHdoZW4gY2xpY2tpbmcgYSBwYXJlbnQgdGFzayBiYXIuXG4gICAgICovXG4gICAgdG9nZ2xlUGFyZW50VGFza3NPbkNsaWNrID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIFt0b29sc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sKSB0byBhZGQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgYHRpdGxlYCBpbiB0aGUgUGFuZWwgaGVhZGVyLiBFYWNoXG4gICAgICogcHJvcGVydHkgbmFtZSBpcyB0aGUgcmVmZXJlbmNlIGJ5IHdoaWNoIGFuIGluc3RhbnRpYXRlZCB0b29sIG1heSBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgbGl2ZVxuICAgICAqIGBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vVG9vbGFibGUjcHJvcGVydHktdG9vbHMpYCBwcm9wZXJ0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdG9vbHMpXG4gICAgICovXG4gICAgdG9vbHMgPyA6IFJlY29yZDxzdHJpbmcsIFRvb2xDb25maWc+fG51bGxcbiAgICAvKipcbiAgICAgKiBBIHRlbXBsYXRlIGZ1bmN0aW9uIGFsbG93aW5nIHlvdSB0byBjb25maWd1cmUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0b29sdGlwIHNob3duIHdoZW4gaG92ZXJpbmcgYVxuICAgICAqIGRlcGVuZGVuY3kgbGluZS4gWW91IGNhbiByZXR1cm4gZWl0aGVyIGFuIEhUTUwgc3RyaW5nIG9yIGEgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5EZXBlbmRlbmN5QmFzZU1vZGVsfSBkZXBlbmRlbmN5IFRoZSBkZXBlbmRlbmN5IHJlY29yZFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmcsRG9tQ29uZmlnfVxuICAgICAqL1xuICAgIHRvb2x0aXBUZW1wbGF0ZSA/IDogKGRlcGVuZGVuY3k6IERlcGVuZGVuY3lCYXNlTW9kZWwpID0+IHN0cmluZ3xEb21Db25maWdcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgVUkgdHJhbnNpdGlvbnMgZm9yIHZhcmlvdXMgYWN0aW9ucyBpbiB0aGUgZ3JpZC5cbiAgICAgKi9cbiAgICB0cmFuc2l0aW9uID8gOiB7XG4gICAgICAgIGluc2VydFJlY29yZD86IGJvb2xlYW5cbiAgICAgICAgcmVtb3ZlUmVjb3JkPzogYm9vbGVhblxuICAgICAgICB0b2dnbGVDb2x1bW4/OiBib29sZWFuXG4gICAgICAgIGV4cGFuZENvbGxhcHNlQ29sdW1uPzogYm9vbGVhblxuICAgICAgICB0b2dnbGVSZWdpb24/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZVRyZWVOb2RlPzogYm9vbGVhblxuICAgICAgICB0b2dnbGVHcm91cD86IGJvb2xlYW5cbiAgICAgICAgZmlsdGVyUmVtb3ZhbD86IGJvb2xlYW5cbiAgICAgICAgcmVtb3ZlRXZlbnQ/OiBib29sZWFuXG4gICAgICAgIGNoYW5nZUV2ZW50PzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbmltYXRpb24gdHJhbnNpdGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gICAgICovXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXVpKVxuICAgICAqL1xuICAgIHVpID8gOiAncGxhaW4nfCd0b29sYmFyJ3xzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGRheSBvZiB3ZWVrIGFuZCB3ZWVrIG9mIG1vbnRoIG9mIHRoZSBldmVudCdzIHN0YXJ0IGRhdGUgYXJlIHVzZWQgdG8gY3JlYXRlXG4gICAgICogaGVscGZ1bCBjb250ZXh0dWFsIHJlY3VycmVuY2UgdHlwZXMgd2hlbiBlZGl0aW5nIGEgbm9uLXJlY3VycmluZyBldmVudCByZWNvcmQgYW5kIGNob29zaW5nXG4gICAgICogYW4gaW5pdGlhbCByZWN1cnJlbmNlIHR5cGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXVzZUNvbnRleHR1YWxSZWN1cnJlbmNlUnVsZXMpXG4gICAgICovXG4gICAgdXNlQ29udGV4dHVhbFJlY3VycmVuY2VSdWxlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIGtleSB1c2VkIHRvIGxvb2t1cCBhIHByZWRlZmluZWQgW1ZpZXdQcmVzZXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ByZXNldC9WaWV3UHJlc2V0KSAoZS5nLiAnd2Vla0FuZERheScsICdob3VyQW5kRGF5JyksXG4gICAgICogbWFuYWdlZCBieSBbUHJlc2V0TWFuYWdlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvcHJlc2V0L1ByZXNldE1hbmFnZXIpLiBTZWUgW1ByZXNldE1hbmFnZXJdKCNTY2hlZHVsZXIvcHJlc2V0L1ByZXNldE1hbmFnZXIpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqIE9yIGEgY29uZmlnIG9iamVjdCBmb3IgYSB2aWV3UHJlc2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy12aWV3UHJlc2V0KVxuICAgICAqL1xuICAgIHZpZXdQcmVzZXQgPyA6IHN0cmluZ3xWaWV3UHJlc2V0Q29uZmlnXG4gICAgLyoqXG4gICAgICogQSBkYXRlIHRvIGJyaW5nIGludG8gdmlldyBpbml0aWFsbHkgb24gdGhlIHNjcm9sbGFibGUgdGltZWxpbmUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXZpc2libGVEYXRlKVxuICAgICAqL1xuICAgIHZpc2libGVEYXRlID8gOiBEYXRlfFZpc2libGVEYXRlXG4gICAgLyoqXG4gICAgICogSW50ZWdlciBudW1iZXIgaW5kaWNhdGluZyB0aGUgc2l6ZSBvZiB0aW1lc3BhbiBkdXJpbmcgem9vbWluZy4gV2hlbiB6b29taW5nLCB0aGUgdGltZXNwYW4gaXMgYWRqdXN0ZWQgdG8gbWFrZVxuICAgICAqIHRoZSBzY3JvbGxpbmcgYXJlYSBgdmlzaWJsZVpvb21GYWN0b3JgIHRpbWVzIHdpZGVyIHRoYW4gdGhlIHRpbWVsaW5lIGFyZWEgaXRzZWxmLiBVc2VkIGluXG4gICAgICogW3pvb21Ub1NwYW5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVab29tYWJsZSNmdW5jdGlvbi16b29tVG9TcGFuKSBhbmQgW3pvb21Ub0xldmVsXSgjU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVab29tYWJsZSNmdW5jdGlvbi16b29tVG9MZXZlbCkgZnVuY3Rpb25zLlxuICAgICAqL1xuICAgIHZpc2libGVab29tRmFjdG9yID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIHZhbGlkIEpTIGRheSBpbmRleCBiZXR3ZWVuIDAtNiAoMDogU3VuZGF5LCAxOiBNb25kYXkgZXRjLikgdG8gYmUgY29uc2lkZXJlZCB0aGUgc3RhcnQgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAqIFdoZW4gb21pdHRlZCwgdGhlIHdlZWsgc3RhcnQgZGF5IGlzIHJldHJpZXZlZCBmcm9tIHRoZSBhY3RpdmUgbG9jYWxlIGNsYXNzLlxuICAgICAqL1xuICAgIHdlZWtTdGFydERheSA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQSB3aWRnZXRzIHdlaWdodCBkZXRlcm1pbmVzIGl0cyBwb3NpdGlvbiBhbW9uZyBzaWJsaW5ncyB3aGVuIGFkZGVkIHRvIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLlxuICAgICAqIEhpZ2hlciB3ZWlnaHRzIGdvIGZ1cnRoZXIgZG93bi5cbiAgICAgKi9cbiAgICB3ZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIHdpZHRoLCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS53aWR0aGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgd2lkdGggc3RyaW5nIG9yIGEgbnVtYmVyLCB3aGljaFxuICAgICAqIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgd2lkdGgsIGJ1dCBpbiBzb21lIGNhc2VzXG4gICAgICogdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICB3aWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aXRoIGZvcm1hdCBgeyBmcm9tRGF5LCB0b0RheSwgZnJvbUhvdXIsIHRvSG91ciB9YCB0aGF0IGRlc2NyaWJlcyB0aGUgd29ya2luZyBkYXlzIGFuZCBob3Vycy5cbiAgICAgKiBUaGlzIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgVGltZUF4aXMgW2luY2x1ZGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2RhdGEvVGltZUF4aXMjY29uZmlnLWluY2x1ZGUpIHByb3BlcnR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy13b3JraW5nVGltZSlcbiAgICAgKi9cbiAgICB3b3JraW5nVGltZSA/IDoge1xuICAgICAgICBmcm9tRGF5PzogbnVtYmVyXG4gICAgICAgIHRvRGF5PzogbnVtYmVyXG4gICAgICAgIGZyb21Ib3VyPzogbnVtYmVyXG4gICAgICAgIHRvSG91cj86IG51bWJlclxuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBvcmlnaW5hbGx5IHJlbmRlcmVkIHRpbWVzcGFuIHNob3VsZCBiZSBwcmVzZXJ2ZWQgd2hpbGUgem9vbWluZy4gQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIGBmYWxzZWAsXG4gICAgICogbWVhbmluZyB0aGUgdGltZWxpbmUgcGFuZWwgd2lsbCBhZGp1c3QgdGhlIGN1cnJlbnRseSByZW5kZXJlZCB0aW1lc3BhbiB0byBsaW1pdCB0aGUgYW1vdW50IG9mIEhUTUwgY29udGVudCB0b1xuICAgICAqIHJlbmRlci4gV2hlbiBzZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGB0cnVlYCwgYmUgY2FyZWZ1bCBub3QgdG8gYWxsb3cgdG8gem9vbSBhIGJpZyB0aW1lc3BhbiBpbiBzZWNvbmRzXG4gICAgICogcmVzb2x1dGlvbiBmb3IgZXhhbXBsZS4gVGhhdCB3aWxsIGNhdXNlIDxzdHJvbmc+YSBsb3Q8L3N0cm9uZz4gb2YgSFRNTCBjb250ZW50IHRvIGJlIHJlbmRlcmVkIGFuZCBhZmZlY3QgcGVyZm9ybWFuY2UuIFlvdVxuICAgICAqIGNhbiB1c2UgW21pblpvb21MZXZlbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9UaW1lbGluZVpvb21hYmxlI2NvbmZpZy1taW5ab29tTGV2ZWwpIGFuZCBbbWF4Wm9vbUxldmVsXSgjU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVab29tYWJsZSNjb25maWctbWF4Wm9vbUxldmVsKSBjb25maWcgb3B0aW9ucyBmb3IgdGhhdC5cbiAgICAgKi9cbiAgICB6b29tS2VlcHNPcmlnaW5hbFRpbWVzcGFuID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgeW91IGNhbiB6b29tIGluIGFuZCBvdXQgb24gdGhlIHRpbWUgYXhpcyB1c2luZyBDVFJMLWtleSArIG1vdXNlIHdoZWVsLlxuICAgICAqL1xuICAgIHpvb21Pbk1vdXNlV2hlZWwgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUcnVlIHRvIHpvb20gdG8gdGltZSBzcGFuIHdoZW4gZG91YmxlLWNsaWNraW5nIGEgdGltZSBheGlzIGNlbGwuXG4gICAgICovXG4gICAgem9vbU9uVGltZUF4aXNEb3VibGVDbGljayA/IDogYm9vbGVhblxuXG4gICAgLy8gRmVhdHVyZXNcbiAgICAvKipcbiAgICAgKiBBSS1wb3dlcmVkIGZpbHRlciBmZWF0dXJlIGZvciBHcmlkLiBBbGxvd3MgdXNlcnMgdG8gdHlwZSBuYXR1cmFsIGxhbmd1YWdlIHF1ZXJpZXMgdG8gZmlsdGVyIGdyaWQgZGF0YS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvYWkvQUlGaWx0ZXIpXG4gICAgICovXG4gICAgYWlGaWx0ZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QUlGaWx0ZXJ8QUlGaWx0ZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIFt0YXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Rhc2tNb2RlbCkncyBbYmFzZWxpbmVzXSgjR2FudHQvbW9kZWwvVGFza01vZGVsI2ZpZWxkLWJhc2VsaW5lcykgYmVsb3cgdGhlIHRhc2tzIGluIHRoZVxuICAgICAqIHRpbWVsaW5lLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvQmFzZWxpbmVzKVxuICAgICAqL1xuICAgIGJhc2VsaW5lc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xCYXNlbGluZXN8QmFzZWxpbmVzQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzaW5nIGBbQ3RybC9DTUQgKyBDXWAsIGBbQ3RybC9DTUQgKyBYXWAgYW5kIGBbQ3RybC9DTUQgKyBWXWAgdG8gY3V0LCBjb3B5IGFuZCBwYXN0ZSBjZWxsIG9yIGNlbGwgcmFuZ2VzLiBBbHNvXG4gICAgICogbWFrZXMgY3V0LCBjb3B5IGFuZCBwYXN0ZSBhY3Rpb25zIGF2YWlsYWJsZSB2aWEgdGhlIGNlbGwgY29udGV4dCBtZW51LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsQ29weVBhc3RlKVxuICAgICAqL1xuICAgIGNlbGxDb3B5UGFzdGVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbENvcHlQYXN0ZXxDZWxsQ29weVBhc3RlQ29uZmlnXG4gICAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgW0NlbGxFZGl0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsRWRpdCkgdG8gZW5jYXBzdWxhdGUgR2FudHQgZnVuY3Rpb25hbGl0eS4gVGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYnkgPGI+ZGVmYXVsdDwvYj5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL0NlbGxFZGl0KVxuICAgICAqL1xuICAgIGNlbGxFZGl0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxFZGl0fENlbGxFZGl0Q29uZmlnXG4gICAgLyoqXG4gICAgICogUmlnaHQgY2xpY2sgdG8gZGlzcGxheSBjb250ZXh0IG1lbnUgZm9yIGNlbGxzLiBUbyBpbnZva2UgdGhlIGNlbGwgbWVudSBpbiBhIGtleWJvYXJkLWFjY2Vzc2libGUgbWFubmVyLCB1c2UgdGhlXG4gICAgICogYFNQQUNFYCBrZXkgd2hlbiB0aGUgY2VsbCBpcyBmb2N1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsTWVudSlcbiAgICAgKi9cbiAgICBjZWxsTWVudUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsTWVudXxDZWxsTWVudUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgdG9vbHRpcCB3aGVuIGhvdmVyaW5nIGNlbGxzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsVG9vbHRpcClcbiAgICAgKi9cbiAgICBjZWxsVG9vbHRpcEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsVG9vbHRpcHxDZWxsVG9vbHRpcENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFkZHMgaW50ZXJhY3RpdmUgY2hhcnRpbmcgdG8gYSBHcmlkLiBbQ2hhcnRzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NoYXJ0L3dpZGdldC9DaGFydCkgY2FuIGJlIGNyZWF0ZWQgZnJvbSBhIHNlbGVjdGlvbiBvZiBHcmlkIGRhdGFcbiAgICAgKiBhbmQgdXBkYXRlZCBpbiByZWFsdGltZSBhcyBkYXRhIGNoYW5nZXMuIFN1cHBvcnRzIG1hbnkgY29tbW9uIGNoYXJ0IHR5cGVzIHdpdGggZXh0ZW5zaXZlIHN0eWxpbmcgYW5kIGN1c3RvbWl6YXRpb25cbiAgICAgKiBvcHRpb25zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DaGFydHMpXG4gICAgICovXG4gICAgY2hhcnRzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENoYXJ0c3xDaGFydHNDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBbYXV0b1dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbiNjb25maWctYXV0b1dpZHRoKSBjb25maWcgZm9yIGEgZ3JpZCdzIGNvbHVtbnMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtbkF1dG9XaWR0aClcbiAgICAgKi9cbiAgICBjb2x1bW5BdXRvV2lkdGhGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uQXV0b1dpZHRofENvbHVtbkF1dG9XaWR0aENvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgdG9vbGJhciB3aGlsZSBkcmFnZ2luZyBjb2x1bW4gaGVhZGVycy4gRHJvcCBvbiBhIGJ1dHRvbiBpbiB0aGUgdG9vbGJhciB0byBhY3RpdmF0ZSBhIGNlcnRhaW4gZnVuY3Rpb24sXG4gICAgICogZm9yIGV4YW1wbGUgdG8gZ3JvdXAgYnkgdGhhdCBjb2x1bW4uIFRoaXMgZmVhdHVyZSBzaW1wbGlmaWVzIGNlcnRhaW4gb3BlcmF0aW9ucyBvbiB0b3VjaCBkZXZpY2VzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Db2x1bW5EcmFnVG9vbGJhcilcbiAgICAgKi9cbiAgICBjb2x1bW5EcmFnVG9vbGJhckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5EcmFnVG9vbGJhcnxDb2x1bW5EcmFnVG9vbGJhckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGNvbHVtbiBsaW5lcyBmb3IgdGlja3MsIHdpdGggYSBkaWZmZXJlbnQgc3R5bGluZyBmb3IgbWFqb3IgdGlja3MgKGJ5IGRlZmF1bHQgdGhleSBhcmUgZGFya2VyKS4gSWYgdGhpc1xuICAgICAqIGZlYXR1cmUgaXMgZGlzYWJsZWQsIG5vIGxpbmVzIGFyZSBzaG93bi4gSWYgaXQncyBlbmFibGVkLCBsaW5lIGFyZSBzaG93biBmb3IgdGhlIHRpY2sgbGV2ZWwgd2hpY2ggaXMgc2V0IGluIGN1cnJlbnRcbiAgICAgKiBWaWV3UHJlc2V0LiBQbGVhc2Ugc2VlIFtjb2x1bW5MaW5lc0Zvcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvcHJlc2V0L1ZpZXdQcmVzZXQjZmllbGQtY29sdW1uTGluZXNGb3IpIGNvbmZpZyBmb3IgZGV0YWlscy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZmVhdHVyZS9Db2x1bW5MaW5lcylcbiAgICAgKi9cbiAgICBjb2x1bW5MaW5lc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5MaW5lc3xDb2x1bW5MaW5lc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgY29sdW1uIHBpY2tlciAodG8gc2hvdy9oaWRlIGNvbHVtbnMpIGluIHRoZSBoZWFkZXIgY29udGV4dCBtZW51LiBDb2x1bW5zIGNhbiBiZSBkaXNwbGF5ZWQgaW4gc3ViIG1lbnVzXG4gICAgICogYnkgcmVnaW9uIG9yIHRhZy4gR3JvdXBlZCBoZWFkZXJzIGFyZSBkaXNwbGF5ZWQgYXMgbWVudSBoaWVyYXJjaGllcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUGlja2VyKVxuICAgICAqL1xuICAgIGNvbHVtblBpY2tlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5QaWNrZXJ8Q29sdW1uUGlja2VyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVuYW1lIGNvbHVtbnMgYnkgZWl0aGVyIHJpZ2h0LWNsaWNraW5nIGNvbHVtbiBoZWFkZXIgb3IgdXNpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIHdoZW4gY29sdW1uIGhlYWRlclxuICAgICAqIGlzIGZvY3VzZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtblJlbmFtZSlcbiAgICAgKi9cbiAgICBjb2x1bW5SZW5hbWVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUmVuYW1lfENvbHVtblJlbmFtZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyB1c2VyIHRvIHJlb3JkZXIgY29sdW1ucyBieSBkcmFnZ2luZyBoZWFkZXJzLiBUbyBnZXQgbm90aWZpZWQgYWJvdXQgY29sdW1uIHJlb3JkZXIgbGlzdGVuIHRvIGBjaGFuZ2VgIGV2ZW50XG4gICAgICogb24gW2NvbHVtbnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9kYXRhL0NvbHVtblN0b3JlKSBzdG9yZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUmVvcmRlcilcbiAgICAgKi9cbiAgICBjb2x1bW5SZW9yZGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlb3JkZXJ8Q29sdW1uUmVvcmRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdXNlciB0byByZXNpemUgY29sdW1ucyBieSBkcmFnZ2luZyBhIGhhbmRsZSBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBoZWFkZXIuIFRvIGdldCBub3RpZmllZCBhYm91dCBjb2x1bW5cbiAgICAgKiByZXNpemUgbGlzdGVuIHRvIGBjaGFuZ2VgIGV2ZW50IG9uIFtjb2x1bW5zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZGF0YS9Db2x1bW5TdG9yZSkgc3RvcmUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtblJlc2l6ZSlcbiAgICAgKi9cbiAgICBjb2x1bW5SZXNpemVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUmVzaXplfENvbHVtblJlc2l6ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBoaWdobGlnaHRzIHRoZSBwcm9qZWN0ICpjcml0aWNhbCBwYXRocyouXG4gICAgICogRXZlcnkgdGFzayBpcyBpbXBvcnRhbnQsIGJ1dCBvbmx5IHNvbWUgb2YgdGhlbSBhcmUgY3JpdGljYWwuXG4gICAgICogVGhlIGNyaXRpY2FsIHBhdGggaXMgYSBjaGFpbiBvZiBsaW5rZWQgdGFza3MgdGhhdCBkaXJlY3RseSBhZmZlY3RzIHRoZSBwcm9qZWN0IGZpbmlzaCBkYXRlLlxuICAgICAqIElmIGFueSB0YXNrIG9uIHRoZSBjcml0aWNhbCBwYXRoIGlzIGxhdGUsIHRoZSB3aG9sZSBwcm9qZWN0IGlzIGxhdGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9Dcml0aWNhbFBhdGhzKVxuICAgICAqL1xuICAgIGNyaXRpY2FsUGF0aHNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q3JpdGljYWxQYXRoc3xDcml0aWNhbFBhdGhzQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGRyYXdzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRhc2tzLiBVc2VzIGEgZGVwZW5kZW5jeVxuICAgICAqIFtzdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9Qcm9qZWN0TW9kZWwjcHJvcGVydHktZGVwZW5kZW5jeVN0b3JlKSB0byBkZXRlcm1pbmUgd2hpY2ggZGVwZW5kZW5jaWVzIHRvIGRyYXcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9EZXBlbmRlbmNpZXMpXG4gICAgICovXG4gICAgZGVwZW5kZW5jaWVzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfERlcGVuZGVuY2llc3xEZXBlbmRlbmNpZXNDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgZGlzcGxheXMgYSBwb3B1cCBjb250YWluaW5nIGZpZWxkcyBmb3IgZWRpdGluZyBkZXBlbmRlbmN5IGRhdGEuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyUHJvL2ZlYXR1cmUvRGVwZW5kZW5jeUVkaXQpXG4gICAgICovXG4gICAgZGVwZW5kZW5jeUVkaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RGVwZW5kZW5jeUVkaXR8RGVwZW5kZW5jeUVkaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBBZGRzIGV2ZW50IGZpbHRlciBtZW51IGl0ZW1zIHRvIHRoZSB0aW1lbGluZSBoZWFkZXIgY29udGV4dCBtZW51LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL0V2ZW50RmlsdGVyKVxuICAgICAqL1xuICAgIGV2ZW50RmlsdGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEV2ZW50RmlsdGVyfEV2ZW50RmlsdGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIHByb3ZpZGVzIHNlZ21lbnRlZCBldmVudHMgc3VwcG9ydC4gSXQgaW1wbGVtZW50cyByZW5kZXJpbmcgb2Ygc3VjaCBldmVudHMgYW5kIGFsc28gYWRkcyBhIGVudHJpZXMgdG8gdGhlXG4gICAgICogZXZlbnQgY29udGV4dCBtZW51IGFsbG93aW5nIHRvIHNwbGl0IHRoZSBzZWxlY3RlZCBldmVudCBhbmQgcmVuYW1lIHNlZ21lbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlclByby9mZWF0dXJlL0V2ZW50U2VnbWVudHMpXG4gICAgICovXG4gICAgZXZlbnRTZWdtZW50c0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xFdmVudFNlZ21lbnRzfEV2ZW50U2VnbWVudHNDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgdGhhdCBhbGxvd3MgZXhwb3J0aW5nIEdyaWQgZGF0YSB0byBFeGNlbCBvciBDU1Ygd2l0aG91dCBpbnZvbHZpbmcgdGhlIHNlcnZlci4gSXQgdXNlc1xuICAgICAqIFtUYWJsZUV4cG9ydGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvdXRpbC9UYWJsZUV4cG9ydGVyKSBjbGFzcyBhcyBkYXRhIHByb3ZpZGVyLCAzcmQgcGFydHkgcHJvdmlkZXIgdG8gZ2VuZXJhdGUgWExTIGZpbGVzLCBhbmRcbiAgICAgKiBbTWljcm9zb2Z0IFhNTCBzcGVjaWZpY2F0aW9uXShodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L29mZmljZS9kb2N1bWVudGZvcm1hdC5vcGVueG1sLnNwcmVhZHNoZWV0LmFzcHgpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9leHBlcmltZW50YWwvRXhjZWxFeHBvcnRlcilcbiAgICAgKi9cbiAgICBleGNlbEV4cG9ydGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRFeGNlbEV4cG9ydGVyfEdyaWRFeGNlbEV4cG9ydGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBsZXRzIHVzZXJzIGRyb3AgZmlsZXMgb24gYSBXaWRnZXQuIFRoZSB3aWRnZXQgZmlyZXMgYW4gZXZlbnQgd2hlbiBhIGZpbGUgaXMgZHJvcHBlZCBvbnRvIGl0LlxuICAgICAqIEluIHRoZSBldmVudCwgeW91IGdldCBhY2Nlc3MgdG8gdGhlIHJhdyBmaWxlcyBhcyBzdHJpbmdzLCB0aGF0IHdlcmUgcGFyc2VkIGJ5IGNhbGxpbmcgYHJlYWRBc0JpbmFyeVN0cmluZ2AuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2V4cGVyaW1lbnRhbC9GaWxlRHJvcClcbiAgICAgKi9cbiAgICBmaWxlRHJvcEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWxlRHJvcHxGaWxlRHJvcENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBhZGRzIGEgZmlsbCBoYW5kbGUgdG8gYSBHcmlkIHJhbmdlIHNlbGVjdGlvbiwgd2hpY2ggd2hlbiBkcmFnZ2VkLCBmaWxscyB0aGUgY2VsbHMgYmVpbmcgZHJhZ2dlZCBvdmVyXG4gICAgICogd2l0aCB2YWx1ZXMgYmFzZWQgb24gdGhlIHZhbHVlcyBpbiB0aGUgb3JpZ2luYWwgc2VsZWN0ZWQgcmFuZ2UuIFRoaXMgaXMgc2ltaWxhciB0byBmdW5jdGlvbmFsaXR5IG5vcm1hbGx5IHNlZW4gaW5cbiAgICAgKiB2YXJpb3VzIHNwcmVhZHNoZWV0IGFwcGxpY2F0aW9ucy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvRmlsbEhhbmRsZSlcbiAgICAgKi9cbiAgICBmaWxsSGFuZGxlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbGxIYW5kbGV8RmlsbEhhbmRsZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBhbGxvd3MgZmlsdGVyaW5nIG9mIHRoZSBncmlkIGJ5IHNldHRpbmdzIGZpbHRlcnMgb24gY29sdW1ucy4gVGhlIGFjdHVhbCBmaWx0ZXJpbmcgaXMgZG9uZSBieSB0aGUgc3RvcmUuXG4gICAgICogRm9yIGluZm8gb24gcHJvZ3JhbW1hdGljYWxseSBoYW5kbGluZyBmaWx0ZXJzLCBzZWUgW1N0b3JlRmlsdGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvZGF0YS9taXhpbi9TdG9yZUZpbHRlcikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbHRlcilcbiAgICAgKi9cbiAgICBmaWx0ZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyfEZpbHRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBhbGxvd3MgZmlsdGVyaW5nIG9mIHRoZSBncmlkIGJ5IGVudGVyaW5nIGZpbHRlcnMgb24gY29sdW1uIGhlYWRlcnMuXG4gICAgICogVGhlIGFjdHVhbCBmaWx0ZXJpbmcgaXMgZG9uZSBieSB0aGUgc3RvcmUuXG4gICAgICogRm9yIGluZm8gb24gcHJvZ3JhbW1hdGljYWxseSBoYW5kbGluZyBmaWx0ZXJzLCBzZWUgW1N0b3JlRmlsdGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvZGF0YS9taXhpbi9TdG9yZUZpbHRlcikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbHRlckJhcilcbiAgICAgKi9cbiAgICBmaWx0ZXJCYXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyQmFyfEZpbHRlckJhckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgcmVuZGVyaW5nIGFuZCBoYW5kbGluZyBvZiByb3cgZ3JvdXBzLiBUaGUgYWN0dWFsIGdyb3VwaW5nIGlzIGRvbmUgaW4gdGhlIHN0b3JlLCBidXQgdHJpZ2dlcmVkIGJ5XG4gICAgICogPGtiZD5zaGlmdDwva2JkPiArIGNsaWNraW5nIGhlYWRlcnMsIG9yIGJ5IHVzaW5nIHRoZSBjb250ZXh0IG1lbnUsIG9yIGJ5IHVzaW5nIHR3byBmaW5nZXIgdGFwIChvbmUgb24gaGVhZGVyLFxuICAgICAqIG9uZSBhbnl3aGVyZSBvbiBncmlkKS4gVXNlIDxrYmQ+c2hpZnQ8L2tiZD4gKyA8a2JkPmFsdDwva2JkPiArIGNsaWNrLCBvciB0aGUgY29udGV4dCBtZW51LCB0byByZW1vdmUgYSBjb2x1bW5cbiAgICAgKiBncm91cGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Hcm91cClcbiAgICAgKi9cbiAgICBncm91cEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcm91cHxHcm91cENvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgc3VtbWFyeSByb3cgYXMgYSBncm91cCBmb290ZXIgaW4gYSBncm91cGVkIGdyaWQuIFVzZXMgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIGNvbHVtbnMgYXNcbiAgICAgKiBbU3VtbWFyeV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3VtbWFyeSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0dyb3VwU3VtbWFyeSlcbiAgICAgKi9cbiAgICBncm91cFN1bW1hcnlGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JpZEdyb3VwU3VtbWFyeXxHcmlkR3JvdXBTdW1tYXJ5Q29uZmlnXG4gICAgLyoqXG4gICAgICogUmlnaHQgY2xpY2sgY29sdW1uIGhlYWRlciBvciBmb2N1cyBpdCBhbmQgcHJlc3MgU1BBQ0Uga2V5IHRvIHNob3cgdGhlIGNvbnRleHQgbWVudSBmb3IgaGVhZGVycy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvSGVhZGVyTWVudSlcbiAgICAgKi9cbiAgICBoZWFkZXJNZW51RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlck1lbnV8SGVhZGVyTWVudUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdXNlcnMgdG8gY2xpY2sgYW5kIGRyYWcgdG8gem9vbSB0byBhIGRhdGUgcmFuZ2UgaW4gU2NoZWR1bGVyJ3MgaGVhZGVyIHRpbWUgYXhpcy4gT25seSBzdXBwb3J0ZWQgaW4gaG9yaXpvbnRhbFxuICAgICAqIG1vZGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvSGVhZGVyWm9vbSlcbiAgICAgKi9cbiAgICBoZWFkZXJab29tRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlclpvb218SGVhZGVyWm9vbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBJbmRpY2F0b3JzIGZlYXR1cmUgZGlzcGxheXMgaW5kaWNhdG9ycyAoaWNvbnMpIGZvciBkaWZmZXJlbnQgZGF0ZXMgcmVsYXRlZCB0byBhIHRhc2sgaW4gaXRzIHJvdy4gSG92ZXJpbmcgYW5cbiAgICAgKiBpbmRpY2F0b3Igd2lsbCBzaG93IGEgdG9vbHRpcCB3aXRoIGl0cyBuYW1lIGFuZCBkYXRlKHMpLiBUaGUgb3duaW5nIHRhc2sgYGlkYCBpcyBlbWJlZGRlZCBpbiB0aGUgaW5kaWNhdG9yIGVsZW1lbnRcbiAgICAgKiBkYXRhc2V0IGFzIGB0YXNrUmVjb3JkSWRgIHdoaWNoIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gaGF2ZSBjdXN0b20gYWN0aW9ucyB3aGVuIGNsaWNraW5nIChzaG93aW5nIGEgbWVudSBmb3IgZXhhbXBsZSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9JbmRpY2F0b3JzKVxuICAgICAqL1xuICAgIGluZGljYXRvcnNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8SW5kaWNhdG9yc3xJbmRpY2F0b3JzQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBmZWF0dXJlIHRoYXQgbGV0cyB5b3UgZGlzcGxheSBhIGxhYmVsIG9uIGVhY2ggc2lkZSBvZiBhIEdhbnR0IHRhc2sgYmFyLiBTZWVcbiAgICAgKiBbTGFiZWxzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL0xhYmVscykgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9MYWJlbHMpXG4gICAgICovXG4gICAgbGFiZWxzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfExhYmVsc3xMYWJlbHNDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIHJlY29yZHMgd2hpY2ggc2F0aXNmeSBhIGNlcnRhaW4gY29uZGl0aW9uIHRvIGJlIGxvY2tlZCBhdCB0aGUgdG9wIG9mIHRoZSBncmlkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Mb2NrUm93cylcbiAgICAgKi9cbiAgICBsb2NrUm93c0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcmlkTG9ja1Jvd3N8R3JpZExvY2tSb3dzQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIG1lcmdlcyBjZWxscyB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWUgaW4gc29ydGVkIChvciBbb3B0aW9uYWxseV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvTWVyZ2VDZWxscyNjb25maWctc29ydGVkT25seSkgYW55KSBjb2x1bW5zXG4gICAgICogY29uZmlndXJlZCB0byBbbWVyZ2VDZWxsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1lcmdlQ2VsbHMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9NZXJnZUNlbGxzKVxuICAgICAqL1xuICAgIG1lcmdlQ2VsbHNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TWVyZ2VDZWxsc3xNZXJnZUNlbGxzQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBmZWF0dXJlIHRoYXQgYWxsb3dzIGV4cG9ydGluZyBHYW50dCB0byBNaWNyb3NvZnQgUHJvamVjdCB3aXRob3V0IGludm9sdmluZyBhIHNlcnZlci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL2V4cG9ydC9Nc3BFeHBvcnQpXG4gICAgICovXG4gICAgbXNwRXhwb3J0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfE1zcEV4cG9ydHxNc3BFeHBvcnRDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIHN0eWxpbmcgb2Ygd2Vla2VuZHMgKGFuZCBvdGhlciBub24td29ya2luZyB0aW1lKSBieSBhZGRpbmcgdGltZVJhbmdlcyBmb3IgdGhvc2UgZGF5cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZmVhdHVyZS9Ob25Xb3JraW5nVGltZSlcbiAgICAgKi9cbiAgICBub25Xb3JraW5nVGltZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xOb25Xb3JraW5nVGltZXxOb25Xb3JraW5nVGltZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBzY2hlZHVsZXIncyB0aW1lbGluZSBwYW5uYWJsZSBieSBkcmFnZ2luZyB3aXRoIHRoZSBtb3VzZS4gVHJ5IGl0IG91dCBpbiB0aGUgZGVtbyBiZWxvdy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZmVhdHVyZS9QYW4pXG4gICAgICovXG4gICAgcGFuRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBhbnxQYW5Db25maWdcbiAgICAvKipcbiAgICAgKiBIaWdobGlnaHRzIHRoZSBhcmVhIGVuY2Fwc3VsYXRpbmcgYWxsIGNoaWxkIHRhc2tzIG9mIGEgcGFyZW50IHRhc2sgaW4gYSBzZW1pLXRyYW5zcGFyZW50IGxheWVyLiBZb3UgY2FuIHN0eWxlXG4gICAgICogdGhlc2UgbGF5ZXIgZWxlbWVudHMgdXNpbmcgdGhlIGBiLXBhcmVudC1hcmVhYCBDU1MgY2xhc3MuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9QYXJlbnRBcmVhKVxuICAgICAqL1xuICAgIHBhcmVudEFyZWFGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UGFyZW50QXJlYXxQYXJlbnRBcmVhQ29uZmlnXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIFBERi9QTkcgZmlsZXMgZnJvbSB0aGUgR2FudHQgY29tcG9uZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvZXhwb3J0L1BkZkV4cG9ydClcbiAgICAgKi9cbiAgICBwZGZFeHBvcnRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UGRmRXhwb3J0fFBkZkV4cG9ydENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSB2aXN1YWxpemVzIHRoZSBbcGVyY2VudERvbmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyUHJvL21vZGVsL21peGluL1BlcmNlbnREb25lTWl4aW4jZmllbGQtcGVyY2VudERvbmUpIGZpZWxkIGFzIGFcbiAgICAgKiBwcm9ncmVzcyBiYXIgb24gdGhlIGV2ZW50IGVsZW1lbnRzLiBFYWNoIHByb2dyZXNzIGJhciBhbHNvIG9wdGlvbmFsbHkgaGFzIGEgZHJhZyBoYW5kbGUgd2hpY2ggdXNlcnMgY2FuIGRyYWcgY2FuXG4gICAgICogY2hhbmdlIHRoZSB2YWx1ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXJQcm8vZmVhdHVyZS9QZXJjZW50QmFyKVxuICAgICAqL1xuICAgIHBlcmNlbnRCYXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UGVyY2VudEJhcnxQZXJjZW50QmFyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHBpbm5pbmcgY29sdW1ucyB0byB0aGUgc3RhcnQgb3IgZW5kIHJlZ2lvbiBvZiB0aGUgZ3JpZCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHN1YkdyaWQgY29uZmlndXJhdGlvbnMuXG4gICAgICogV2hlbiBwaW5uaW5nIHRvIGEgcmVnaW9uIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LCB0aGUgZmVhdHVyZSBjcmVhdGVzIHRoZSByZXF1aXJlZCBzdWJHcmlkIG9uIHRoZSBmbHkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1BpbkNvbHVtbnMpXG4gICAgICovXG4gICAgcGluQ29sdW1uc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQaW5Db2x1bW5zfFBpbkNvbHVtbnNDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgcHJpbnRpbmcgR2FudHQgY29udGVudHMgdXNpbmcgYnJvd3NlciBwcmludCBkaWFsb2cuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9leHBvcnQvUHJpbnQpXG4gICAgICovXG4gICAgcHJpbnRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UHJpbnR8UHJpbnRDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgZHJhd3MgcHJvamVjdCBwcm9ncmVzcyBsaW5lIHdpdGggU1ZHIGxpbmVzLiBSZXF1aXJlcyBbUGVyY2VudEJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXJQcm8vZmVhdHVyZS9QZXJjZW50QmFyKSB0byBiZSBlbmFibGVkICh3aGljaFxuICAgICAqIGJ5IGRlZmF1bHQsIGl0IGlzKVxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvUHJvZ3Jlc3NMaW5lKVxuICAgICAqL1xuICAgIHByb2dyZXNzTGluZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcm9ncmVzc0xpbmV8UHJvZ3Jlc3NMaW5lQ29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IGRpc3BsYXlzIHRoZSBbcHJvamVjdCBlZGl0b3JdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvd2lkZ2V0L1Byb2plY3RFZGl0b3IpIGFsbG93aW5nIHVzZXJzIHRvIGVkaXRcbiAgICAgKiB0aGUgcHJvamVjdCBzZXR0aW5ncy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Byb2plY3RFZGl0KVxuICAgICAqL1xuICAgIHByb2plY3RFZGl0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFByb2plY3RFZGl0fFByb2plY3RFZGl0Q29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGRyYXdzIHRoZSB2ZXJ0aWNhbCBsaW5lcyBpbiB0aGUgc2NoZWR1bGUgYXJlYSwgaW5kaWNhdGluZyBwcm9qZWN0IHN0YXJ0L2VuZCBkYXRlc1xuICAgICAqIGFuZCBhbHNvIGl0cyBbc3RhdHVzIGRhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI2ZpZWxkLXN0YXR1c0RhdGUpLiBUaGUgbGF0dGVyIGNhbiBiZSBkaXNhYmxlZFxuICAgICAqIHdpdGggdGhlIFtzaG93U3RhdHVzRGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Byb2plY3RMaW5lcyNjb25maWctc2hvd1N0YXR1c0RhdGUpIGNvbmZpZy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Byb2plY3RMaW5lcylcbiAgICAgKi9cbiAgICBwcm9qZWN0TGluZXNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UHJvamVjdExpbmVzfFByb2plY3RMaW5lc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VhcmNoIGluIGEgY29sdW1uIGJ5IGZvY3VzaW5nIGEgY2VsbCBhbmQgdHlwaW5nLiBOYXZpZ2F0ZSBiZXR3ZWVuIGhpdHMgdXNpbmcgdGhlXG4gICAgICoga2V5Ym9hcmQsIFtmM10gb3IgW2N0cmxdL1tjbWRdICsgW2ddIG1vdmVzIHRvIG5leHQsIGFsc28gcHJlc3NpbmcgW3NoaWZ0XSBtb3ZlcyB0byBwcmV2aW91cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUXVpY2tGaW5kKVxuICAgICAqL1xuICAgIHF1aWNrRmluZEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xRdWlja0ZpbmR8UXVpY2tGaW5kQ29uZmlnXG4gICAgLyoqXG4gICAgICogTWFrZXMgdGhlIHNwbGl0dGVyIGJldHdlZW4gZ3JpZCBbc2VjdGlvbnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC92aWV3L1N1YkdyaWQpIGRyYWdnYWJsZSwgdG8gbGV0IHVzZXJzIHJlc2l6ZSwgYW5kXG4gICAgICogY29sbGFwc2UvZXhwYW5kIHRoZSBzZWN0aW9ucy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUmVnaW9uUmVzaXplKVxuICAgICAqL1xuICAgIHJlZ2lvblJlc2l6ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSZWdpb25SZXNpemV8UmVnaW9uUmVzaXplQ29uZmlnXG4gICAgLyoqXG4gICAgICogSWYgdGhlIHRhc2sncyBbcm9sbHVwXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Rhc2tNb2RlbCNmaWVsZC1yb2xsdXApIGRhdGEgZmllbGQgaXMgc2V0IHRvIGB0cnVlYCwgaXQgZGlzcGxheXMgYSBzbWFsbCBiYXIgb3IgZGlhbW9uZCBiZWxvdyBpdHMgc3VtbWFyeSB0YXNrIGluIHRoZSB0aW1lbGluZS5cbiAgICAgKiBFYWNoIG9mIHRoZSByb2xsdXAgZWxlbWVudHMgc2hvdyBhIHRvb2x0aXAgd2hlbiBob3ZlcmluZyBpdCB3aXRoIGRldGFpbHMgb2YgdGhlIHRhc2suXG4gICAgICogVGhlIHRvb2x0aXAgY29udGVudCBpcyBjdXN0b21pemFibGUsIHNlZSBbdGVtcGxhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9Sb2xsdXBzI2NvbmZpZy10ZW1wbGF0ZSkgY29uZmlnIGZvciBkZXRhaWxzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvUm9sbHVwcylcbiAgICAgKi9cbiAgICByb2xsdXBzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvbGx1cHN8Um9sbHVwc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93IHVzaW5nIFtDdHJsL0NNRCArIEMvWF0gYW5kIFtDdHJsL0NNRCArIFZdIHRvIGNvcHkvY3V0LWFuZC1wYXN0ZSByb3dzLiBBbHNvIG1ha2VzIGN1dCwgY29weSBhbmQgcGFzdGUgYWN0aW9uc1xuICAgICAqIGF2YWlsYWJsZSB2aWEgdGhlIGNlbGwgY29udGV4dCBtZW51LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dDb3B5UGFzdGUpXG4gICAgICovXG4gICAgcm93Q29weVBhc3RlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0NvcHlQYXN0ZXxSb3dDb3B5UGFzdGVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIGVkaXRpbmcgb2YgZW50aXJlIHJvd3MgaW4gYSBncmlkIGluIGEgZG9ja2VkIHBhbmVsIHdoaWNoIGJ5IGRlZmF1bHQgc2xpZGVzIG91dCBmcm9tIHRoZSByaWdodC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUm93RWRpdClcbiAgICAgKi9cbiAgICByb3dFZGl0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0VkaXR8Um93RWRpdENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZXhwYW5kaW5nIG9mIEdyaWQgcm93cyBieSBlaXRoZXIgcm93IGNsaWNrIG9yIGRvdWJsZSBjbGljaywgb3IgYnkgYWRkaW5nIGEgc2VwYXJhdGUgR3JpZCBjb2x1bW4gd2hpY2ggcmVuZGVyc1xuICAgICAqIGEgYnV0dG9uIHRoYXQgZXhwYW5kcyBvciBjb2xsYXBzZXMgdGhlIHJvdy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUm93RXhwYW5kZXIpXG4gICAgICovXG4gICAgcm93RXhwYW5kZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93RXhwYW5kZXJ8Um93RXhwYW5kZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBwcm9qZWN0IHRyYW5zYWN0aW9ucyBhbmQgdXNlZCBieSBkZWZhdWx0IGluIEdhbnR0LiBGb3IgZ2VuZXJhbCBSb3dSZW9yZGVyIGZlYXR1cmVcbiAgICAgKiBkb2N1bWVudGF0aW9uIHNlZSBbUm93UmVvcmRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUm93UmVvcmRlcikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvUm93UmVvcmRlcilcbiAgICAgKi9cbiAgICByb3dSZW9yZGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd1Jlb3JkZXJ8Um93UmVvcmRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdXNlciB0byBjaGFuZ2Ugcm93IGhlaWdodCBieSBkcmFnZ2luZyB0aGUgYm90dG9tIHJvdyBib3JkZXIuIEFmdGVyIGEgcmVzaXplIG9wZXJhdGlvbiwgdGhlIFtyb3dIZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9kYXRhL0dyaWRSb3dNb2RlbCNmaWVsZC1yb3dIZWlnaHQpXG4gICAgICogZmllbGQgb2YgdGhlIHJlY29yZCBpcyB1cGRhdGVkICh3aGVuIFthcHBseVRvQWxsUm93c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUm93UmVzaXplI2NvbmZpZy1hcHBseVRvQWxsUm93cykgaXMgYGZhbHNlYCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd1Jlc2l6ZSlcbiAgICAgKi9cbiAgICByb3dSZXNpemVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JpZFJvd1Jlc2l6ZXxHcmlkUm93UmVzaXplQ29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb250ZXh0IG1lbnUgZm9yIGVtcHR5IHBhcnRzIG9mIHRoZSBzY2hlZHVsZS4gSXRlbXMgYXJlIHBvcHVsYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2VcbiAgICAgKiBieSBjb25maWd1cmF0aW9ucyBvZiB0aGlzIEZlYXR1cmUsIHRoZW4gYnkgb3RoZXIgZmVhdHVyZXMgYW5kL29yIGFwcGxpY2F0aW9uIGNvZGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvU2NoZWR1bGVNZW51KVxuICAgICAqL1xuICAgIHNjaGVkdWxlTWVudUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTY2hlZHVsZU1lbnV8U2NoZWR1bGVNZW51Q29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IGRpc3BsYXlzIGEgdG9vbHRpcCBjb250YWluaW5nIHRoZSB0aW1lIGF0IHRoZSBtb3VzZSBwb3NpdGlvbiB3aGVuIGhvdmVyaW5nIGVtcHR5IHBhcnRzIG9mIHRoZSBzY2hlZHVsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZmVhdHVyZS9TY2hlZHVsZVRvb2x0aXApXG4gICAgICovXG4gICAgc2NoZWR1bGVUb29sdGlwRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNjaGVkdWxlVG9vbHRpcHxTY2hlZHVsZVRvb2x0aXBDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgaW5qZWN0cyBidXR0b25zIGluIGVhY2ggcm93IHRoYXQgc2Nyb2xscyB0aGUgdGFzayBiYXIgaW50byB2aWV3LiBJdCBjYW4gb3B0aW9uYWxseSBzaG93IGEgbGFiZWwgYWxvbmdcbiAgICAgKiB3aXRoIHRoZSBidXR0b24sIHVzaW5nIHRoZSBbbGFiZWxSZW5kZXJlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Njcm9sbEJ1dHRvbnMjY29uZmlnLWxhYmVsUmVuZGVyZXIpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvU2Nyb2xsQnV0dG9ucylcbiAgICAgKi9cbiAgICBzY3JvbGxCdXR0b25zRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNjcm9sbEJ1dHRvbnN8U2Nyb2xsQnV0dG9uc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIDxkaXYgY2xhc3M9XCJleHRlcm5hbC1leGFtcGxlIHZlcnRpY2FsXCIgZGF0YS1maWxlPVwiR3JpZC9mZWF0dXJlL1NlYXJjaC5qc1wiPjwvZGl2PlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TZWFyY2gpXG4gICAgICovXG4gICAgc2VhcmNoRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNlYXJjaHxTZWFyY2hDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3Mgc29ydGluZyBvZiBncmlkIGJ5IGNsaWNraW5nIChvciB0YXBwaW5nKSBoZWFkZXJzLCBhbHNvIGRpc3BsYXlzIHdoaWNoIGNvbHVtbnMgZ3JpZCBpcyBzb3J0ZWQgYnkgKG51bWJlcmVkIGlmXG4gICAgICogdXNpbmcgbXVsdGlzb3J0KS4gVXNlIG1vZGlmaWVyIGtleXMgZm9yIG11bHRpc29ydGluZzogW0N0cmwvQ01EICsgY2xpY2tdIHRvIGFkZCBzb3J0ZXIsIFtDdHJsL0NNRCArIEFsdCArIGNsaWNrXSB0byByZW1vdmUgc29ydGVyLlxuICAgICAqIFRoZSBhY3R1YWwgc29ydGluZyBpcyBkb25lIGJ5IHRoZSBzdG9yZSwgc2VlIFtTdG9yZS5zb3J0KCldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9kYXRhL21peGluL1N0b3JlU29ydCNmdW5jdGlvbi1zb3J0KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU29ydClcbiAgICAgKi9cbiAgICBzb3J0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNvcnR8U29ydENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBhbGxvd3Mgc3BsaXR0aW5nIHRoZSBHcmlkIGludG8gbXVsdGlwbGUgdmlld3MsIGVpdGhlciBieSB1c2luZyB0aGUgY2VsbCBjb250ZXh0IG1lbnUsIG9yXG4gICAgICogcHJvZ3JhbW1hdGljYWxseSBieSBjYWxsaW5nIFtzcGxpdCgpXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TcGxpdCNmdW5jdGlvbi1zcGxpdCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1NwbGl0KVxuICAgICAqL1xuICAgIHNwbGl0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRTcGxpdHxHcmlkU3BsaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgd2hpY2ggcGlucyBjb25maWd1cmFibGUgY29udGVudCBmcm9tIGEgZ3JpZCByb3cgdG8gdGhlIHRvcCBvZiB0aGUgZ3JpZFxuICAgICAqIHdoaWxlIHRoZSByb3cgc2Nyb2xscyBvZmYgdGhlIHRvcCBidXQgaXMgc3RpbGwgdmlzaWJsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3RpY2t5Q2VsbHMpXG4gICAgICovXG4gICAgc3RpY2t5Q2VsbHNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RpY2t5Q2VsbHN8U3RpY2t5Q2VsbHNDb25maWdcbiAgICAvKipcbiAgICAgKiBTdHJpcGVzIHJvd3MgYnkgYWRkaW5nIGFsdGVybmF0aW5nIENTUyBjbGFzc2VzIHRvIGFsbCByb3cgZWxlbWVudHMgKGBiLWV2ZW5gIGFuZCBgYi1vZGRgKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3RyaXBlKVxuICAgICAqL1xuICAgIHN0cmlwZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdHJpcGV8U3RyaXBlQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBmZWF0dXJlIGRpc3BsYXlpbmcgYSBzdW1tYXJ5IGJhciBpbiB0aGUgZ3JpZCBmb290ZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9TdW1tYXJ5KVxuICAgICAqL1xuICAgIHN1bW1hcnlGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3VtbWFyeXxTdW1tYXJ5Q29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3cgdXNpbmcgPGtiZD5DdHJsPC9rYmQ+LzxrYmQ+Q01EPC9rYmQ+ICsgPGtiZD5DPC9rYmQ+LzxrYmQ+WDwva2JkPiBhbmQgPGtiZD5DdHJsPC9rYmQ+LzxrYmQ+Q01EPC9rYmQ+ICtcbiAgICAgKiA8a2JkPlY8L2tiZD4gdG8gY29weS9jdXQgYW5kIHBhc3RlIHRhc2tzLiBZb3UgY2FuIGNvbmZpZ3VyZSBob3cgYSBuZXdseSBwYXN0ZWQgcmVjb3JkIGlzIG5hbWVkIHVzaW5nXG4gICAgICogW2dlbmVyYXRlTmV3TmFtZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tDb3B5UGFzdGUjY29uZmlnLWdlbmVyYXRlTmV3TmFtZSlcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tDb3B5UGFzdGUpXG4gICAgICovXG4gICAgdGFza0NvcHlQYXN0ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrQ29weVBhc3RlfFRhc2tDb3B5UGFzdGVDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdXNlciB0byBkcmFnIGFuZCBkcm9wIHRhc2tzIHdpdGhpbiBHYW50dCwgdG8gY2hhbmdlIHRoZWlyIHN0YXJ0IGRhdGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrRHJhZylcbiAgICAgKi9cbiAgICB0YXNrRHJhZ0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrRHJhZ3xUYXNrRHJhZ0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZmVhdHVyZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBzY2hlZHVsZSB0YXNrcyBieSBkcmFnZ2luZyBpbiB0aGUgZW1wdHkgcGFydHMgb2YgdGhlIGdhbnR0IHRpbWVsaW5lIHJvdy4gTm90ZSwgdGhpcyBmZWF0dXJlIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgdW5zY2hlZHVsZWQgdGFza3MuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrRHJhZ0NyZWF0ZSlcbiAgICAgKi9cbiAgICB0YXNrRHJhZ0NyZWF0ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrRHJhZ0NyZWF0ZXxUYXNrRHJhZ0NyZWF0ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBhbGxvd3MgZWRpdGluZyB0YXNrcyB1c2luZyBhIFtUYXNrRWRpdG9yXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3dpZGdldC9UYXNrRWRpdG9yKSwgYSBwb3B1cCB3aXRoIGZpZWxkcyBmb3IgZWRpdGluZyB0YXNrIGRhdGEuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrRWRpdClcbiAgICAgKi9cbiAgICB0YXNrRWRpdEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrRWRpdHxUYXNrRWRpdENvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgY29udGV4dCBtZW51IGZvciB0YXNrcy4gSXRlbXMgYXJlIHBvcHVsYXRlZCBieSBvdGhlciBmZWF0dXJlcyBhbmQvb3IgYXBwbGljYXRpb24gY29kZS5cbiAgICAgKiBDb25maWd1cmUgaXQgd2l0aCBgZmFsc2VgIHRvIGRpc2FibGUgaXQgY29tcGxldGVseS4gSWYgZW5hYmxlZCwgW0NlbGxNZW51XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsTWVudSkgZmVhdHVyZVxuICAgICAqIGlzIG5vdCBhdmFpbGFibGUuIENlbGwgY29udGV4dCBtZW51IGl0ZW1zIGFyZSBoYW5kbGVkIGJ5IHRoaXMgZmVhdHVyZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tNZW51KVxuICAgICAqL1xuICAgIHRhc2tNZW51RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRhc2tNZW51fFRhc2tNZW51Q29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSBoaWdobGlnaHRpbmcgdGhlIG5vbi13b3JraW5nIHRpbWUgaW50ZXJ2YWxzIGZvciB0YXNrcywgYmFzZWQgb24gdGhlaXIgW2NhbGVuZGFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Rhc2tNb2RlbCNmaWVsZC1jYWxlbmRhcikuXG4gICAgICogSWYgYSB0YXNrIGhhcyBubyBjYWxlbmRhciBkZWZpbmVkLCB0aGUgcHJvamVjdCdzIGNhbGVuZGFyIHdpbGwgYmUgdXNlZC4gVGhlIG5vbi13b3JraW5nIHRpbWUgaW50ZXJ2YWwgY2FuIGFsc28gYmVcbiAgICAgKiByZWN1cnJpbmcuIFlvdSBjYW4gZmluZCBhIGxpdmUgZXhhbXBsZSBzaG93aW5nIGhvdyB0byBhY2hpZXZlIHRoaXMgaW4gdGhlIFtUYXNrIENhbGVuZGFycyBEZW1vXSguLi9leGFtcGxlcy9jYWxlbmRhcnMvKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tOb25Xb3JraW5nVGltZSlcbiAgICAgKi9cbiAgICB0YXNrTm9uV29ya2luZ1RpbWVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza05vbldvcmtpbmdUaW1lfFRhc2tOb25Xb3JraW5nVGltZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBhbGxvd3MgcmVzaXppbmcgYSB0YXNrIGJ5IGRyYWdnaW5nIGl0cyBlbmQgZGF0ZS4gUmVzaXppbmcgYSB0YXNrIGJ5IGRyYWdnaW5nIGl0cyBzdGFydCBkYXRlIGlzIG5vdCBhbGxvd2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza1Jlc2l6ZSlcbiAgICAgKi9cbiAgICB0YXNrUmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRhc2tSZXNpemV8VGFza1Jlc2l6ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyB1c2VyIHRvIGRyYWcgYW5kIGRyb3AgdGFzayBzZWdtZW50cywgdG8gY2hhbmdlIHRoZWlyIHN0YXJ0IGRhdGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrU2VnbWVudERyYWcpXG4gICAgICovXG4gICAgdGFza1NlZ21lbnREcmFnRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRhc2tTZWdtZW50RHJhZ3xUYXNrU2VnbWVudERyYWdDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIHJlc2l6aW5nIGEgdGFzayBzZWdtZW50IGJ5IGRyYWdnaW5nIGl0cyBlbmQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrU2VnbWVudFJlc2l6ZSlcbiAgICAgKi9cbiAgICB0YXNrU2VnbWVudFJlc2l6ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrU2VnbWVudFJlc2l6ZXxUYXNrU2VnbWVudFJlc2l6ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBkaXNwbGF5cyBhIHRhc2sgdG9vbHRpcCBvbiBtb3VzZSBob3Zlci4gVGhlIHRlbXBsYXRlIG9mIHRoZSB0b29sdGlwIGlzIGN1c3RvbWl6YWJsZVxuICAgICAqIHdpdGggdGhlIFt0ZW1wbGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tUb29sdGlwI2NvbmZpZy10ZW1wbGF0ZSkgZnVuY3Rpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrVG9vbHRpcClcbiAgICAgKi9cbiAgICB0YXNrVG9vbHRpcEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrVG9vbHRpcHxUYXNrVG9vbHRpcENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFkZHMgc2NoZWR1bGVyIHNwZWNpZmljIG1lbnUgaXRlbXMgdG8gdGhlIHRpbWVsaW5lIGhlYWRlciBjb250ZXh0IG1lbnUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvVGltZUF4aXNIZWFkZXJNZW51KVxuICAgICAqL1xuICAgIHRpbWVBeGlzSGVhZGVyTWVudUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUaW1lQXhpc0hlYWRlck1lbnV8VGltZUF4aXNIZWFkZXJNZW51Q29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGFsbG93cyBkcmF3aW5nIGxpbmUgY2hhcnRzIG9uIHRvcCBvZiB0aGUgdGltZWxpbmUgYXJlYS4gRmVhdHVyZSBjb25zaXN0cyBvZiB0d28gcGFydHM6IGNoYXJ0IGFuZFxuICAgICAqIGRhdGEgcHJvdmlkZXJzLiBDaGFydCBwcm92aWRlciBpcyByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIHRoZSBjaGFydCwgd2hpbGUgZGF0YSBwcm92aWRlciBpcyByZXNwb25zaWJsZVxuICAgICAqIGZvciBwcm92aWRpbmcgZGF0YSBmb3IgdGhlIGNoYXJ0LiBGZWF0dXJlIGl0c2VsZiBtYW5hZ2VzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZW0sIGFuZCB0cmFja3MgbGlmZWN5Y2xlIGV2ZW50c1xuICAgICAqIG9mIHRoZSBHYW50dCBjaGFydC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1RpbWVsaW5lQ2hhcnQpXG4gICAgICovXG4gICAgdGltZWxpbmVDaGFydEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUaW1lbGluZUNoYXJ0fFRpbWVsaW5lQ2hhcnRDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgcmVuZGVycyBnbG9iYWwgcmFuZ2VzIG9mIHRpbWUgaW4gdGhlIHRpbWVsaW5lLiBVc2UgdGhpcyBmZWF0dXJlIHRvIHZpc3VhbGl6ZSBhIGByYW5nZWAgbGlrZSBhIDEgaHIgbHVuY2hcbiAgICAgKiBvciBzb21lIGltcG9ydGFudCBwb2ludCBpbiB0aW1lIChhIGBsaW5lYCwgaS5lLiBhIHJhbmdlIHdpdGggMCBkdXJhdGlvbikuIFRoaXMgZmVhdHVyZSBjYW4gYWxzbyBzaG93IGEgY3VycmVudCB0aW1lXG4gICAgICogaW5kaWNhdG9yIGlmIHlvdSBzZXQgW3Nob3dDdXJyZW50VGltZUxpbmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvVGltZVJhbmdlcyNjb25maWctc2hvd0N1cnJlbnRUaW1lTGluZSkgdG8gdHJ1ZS4gVG8gc3R5bGUgdGhlIHJlbmRlcmVkIGVsZW1lbnRzLCB1c2UgdGhlXG4gICAgICogW2Nsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvVGltZVNwYW4jZmllbGQtY2xzKSBmaWVsZCBvZiB0aGUgYFRpbWVTcGFuYCBjbGFzcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZmVhdHVyZS9UaW1lUmFuZ2VzKVxuICAgICAqL1xuICAgIHRpbWVSYW5nZXNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGltZVJhbmdlc3xUaW1lUmFuZ2VzQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGV4cG9zZXMgbWV0aG9kcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hpY2ggeW91IGNhbiB1c2UgdG8gaGlnaGxpZ2h0IG9uZSBvciBtdWx0aXBsZSB0aW1lIHNwYW5zXG4gICAgICogaW4gdGhlIHNjaGVkdWxlLiBQbGVhc2Ugc2VlIFtoaWdobGlnaHRUaW1lU3Bhbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXJQcm8vZmVhdHVyZS9UaW1lU3BhbkhpZ2hsaWdodCNmdW5jdGlvbi1oaWdobGlnaHRUaW1lU3BhbikgYW5kIFtoaWdobGlnaHRUaW1lU3BhbnNdKCNTY2hlZHVsZXJQcm8vZmVhdHVyZS9UaW1lU3BhbkhpZ2hsaWdodCNmdW5jdGlvbi1oaWdobGlnaHRUaW1lU3BhbnMpIHRvIGxlYXJuXG4gICAgICogbW9yZSBvciB0cnkgdGhlIGRlbW8gYmVsb3c6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyUHJvL2ZlYXR1cmUvVGltZVNwYW5IaWdobGlnaHQpXG4gICAgICovXG4gICAgdGltZVNwYW5IaWdobGlnaHRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGltZVNwYW5IaWdobGlnaHR8VGltZVNwYW5IaWdobGlnaHRDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgbWFrZXMgdGhlIGdyaWQgd29yayBtb3JlIGxpa2UgYSB0cmVlLiBJbmNsdWRlZCBieSBkZWZhdWx0IGluIFtUcmVlR3JpZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQpLiBSZXF1aXJlc1xuICAgICAqIGV4YWN0bHkgb25lIFtUcmVlQ29sdW1uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvY29sdW1uL1RyZWVDb2x1bW4pIGFtb25nIGdyaWRzIGNvbHVtbnMuIFRoYXQgY29sdW1uIHdpbGwgaGF2ZSBpdHMgcmVuZGVyZXIgcmVwbGFjZWQgd2l0aCBhXG4gICAgICogdHJlZSByZW5kZXJlciB0aGF0IGFkZHMgcGFkZGluZyBhbmQgaWNvbiB0byBnaXZlIHRoZSBhcHBlYXJhbmNlIG9mIGEgdHJlZS4gVGhlIG9yaWdpbmFsIHJlbmRlcmVyIGlzIHByZXNlcnZlZCBhbmRcbiAgICAgKiBhbHNvIGNhbGxlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvVHJlZSlcbiAgICAgKi9cbiAgICB0cmVlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWV8VHJlZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEV4dGVuZHMgR3JpZCdzIFtUcmVlR3JvdXBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1RyZWVHcm91cCkgKGZvbGxvdyB0aGUgbGluayBmb3IgbW9yZSBpbmZvKSBmZWF0dXJlIHRvIGVuYWJsZSB1c2luZyBpdCB3aXRoIEdhbnR0LlxuICAgICAqIEFsbG93cyBnZW5lcmF0aW5nIGEgbmV3IHRhc2sgdHJlZSB3aGVyZSBwYXJlbnRzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZXMgb2Ygc3BlY2lmaWVkIHRhc2sgZmllbGRzL2Z1bmN0aW9uczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1RyZWVHcm91cClcbiAgICAgKi9cbiAgICB0cmVlR3JvdXBGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VHJlZUdyb3VwfFRyZWVHcm91cENvbmZpZ1xuICAgIC8qKlxuICAgICAqIENhcHR1cmVzIHZlcnNpb25zIChzbmFwc2hvdHMpIG9mIHRoZSBhY3RpdmUgcHJvamVjdCwgaW5jbHVkaW5nIGEgZGV0YWlsZWQgbG9nIG9mIHRoZSBjaGFuZ2VzIG5ldyBpbiBlYWNoIHZlcnNpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9WZXJzaW9ucylcbiAgICAgKi9cbiAgICB2ZXJzaW9uc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xWZXJzaW9uc3xWZXJzaW9uc0NvbmZpZ1xuXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yIDogJ2JyeW50dW0tZ2FudHQtYmFzZScsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtR2FudHRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZUNsYXNzID0gR2FudHRCYXNlO1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZU5hbWUgPSAnR2FudHRCYXNlJztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25BZnRlckRlcGVuZGVuY3lDcmVhdGVEcm9wJyxcbiAgICAgICAgJ29uQWZ0ZXJEZXBlbmRlbmN5U2F2ZScsXG4gICAgICAgICdvbkFmdGVyRHJhZ0NyZWF0ZScsXG4gICAgICAgICdvbkFmdGVyRXZlbnRFZGl0JyxcbiAgICAgICAgJ29uQWZ0ZXJFdmVudFNhdmUnLFxuICAgICAgICAnb25BZnRlclByb2plY3RFZGl0JyxcbiAgICAgICAgJ29uQWZ0ZXJQcm9qZWN0U2F2ZScsXG4gICAgICAgICdvbkFmdGVyVGFza0Ryb3AnLFxuICAgICAgICAnb25BZnRlclRhc2tFZGl0JyxcbiAgICAgICAgJ29uQWZ0ZXJUYXNrU2F2ZScsXG4gICAgICAgICdvbkFmdGVyVGFza1NlZ21lbnREcm9wJyxcbiAgICAgICAgJ29uQmVmb3JlQXNzaWdubWVudERlbGV0ZScsXG4gICAgICAgICdvbkJlZm9yZUNhbmNlbENlbGxFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlQ2FuY2VsUm93RWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUNlbGxFZGl0U3RhcnQnLFxuICAgICAgICAnb25CZWZvcmVDZWxsUmFuZ2VEZWxldGUnLFxuICAgICAgICAnb25CZWZvcmVDZWxsUmFuZ2VFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uRHJvcEZpbmFsaXplJyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uUmVzaXplJyxcbiAgICAgICAgJ29uQmVmb3JlQ29weScsXG4gICAgICAgICdvbkJlZm9yZUNTVkV4cG9ydCcsXG4gICAgICAgICdvbkJlZm9yZURlcGVuZGVuY3lBZGQnLFxuICAgICAgICAnb25CZWZvcmVEZXBlbmRlbmN5Q3JlYXRlRHJhZycsXG4gICAgICAgICdvbkJlZm9yZURlcGVuZGVuY3lDcmVhdGVGaW5hbGl6ZScsXG4gICAgICAgICdvbkJlZm9yZURlcGVuZGVuY3lEZWxldGUnLFxuICAgICAgICAnb25CZWZvcmVEZXBlbmRlbmN5RWRpdCcsXG4gICAgICAgICdvbkJlZm9yZURlcGVuZGVuY3lFZGl0U2hvdycsXG4gICAgICAgICdvbkJlZm9yZURlcGVuZGVuY3lTYXZlJyxcbiAgICAgICAgJ29uQmVmb3JlRGVzdHJveScsXG4gICAgICAgICdvbkJlZm9yZURyYWdDcmVhdGUnLFxuICAgICAgICAnb25CZWZvcmVEcmFnQ3JlYXRlRmluYWxpemUnLFxuICAgICAgICAnb25CZWZvcmVFdmVudERlbGV0ZScsXG4gICAgICAgICdvbkJlZm9yZUV2ZW50RWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUV2ZW50RWRpdFNob3cnLFxuICAgICAgICAnb25CZWZvcmVFdmVudFJlc2l6ZScsXG4gICAgICAgICdvbkJlZm9yZUV2ZW50UmVzaXplRmluYWxpemUnLFxuICAgICAgICAnb25CZWZvcmVFdmVudFNhdmUnLFxuICAgICAgICAnb25CZWZvcmVFdmVudFNlZ21lbnRSZXNpemUnLFxuICAgICAgICAnb25CZWZvcmVFdmVudFNlZ21lbnRSZXNpemVGaW5hbGl6ZScsXG4gICAgICAgICdvbkJlZm9yZUV4Y2VsRXhwb3J0JyxcbiAgICAgICAgJ29uQmVmb3JlRmlsbEhhbmRsZURyYWdTdGFydCcsXG4gICAgICAgICdvbkJlZm9yZUZpbmlzaENlbGxFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlRmluaXNoUm93RWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUhpZGUnLFxuICAgICAgICAnb25CZWZvcmVNc3BFeHBvcnQnLFxuICAgICAgICAnb25CZWZvcmVQYW4nLFxuICAgICAgICAnb25CZWZvcmVQYXN0ZScsXG4gICAgICAgICdvbkJlZm9yZVBkZkV4cG9ydCcsXG4gICAgICAgICdvbkJlZm9yZVByZXNldENoYW5nZScsXG4gICAgICAgICdvbkJlZm9yZVByb2plY3RFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlUHJvamVjdEVkaXRTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlUHJvamVjdFNhdmUnLFxuICAgICAgICAnb25CZWZvcmVSZW5kZXJSb3cnLFxuICAgICAgICAnb25CZWZvcmVSZW5kZXJSb3dzJyxcbiAgICAgICAgJ29uQmVmb3JlUm93Q29sbGFwc2UnLFxuICAgICAgICAnb25CZWZvcmVSb3dFeHBhbmQnLFxuICAgICAgICAnb25CZWZvcmVTZWxlY3Rpb25DaGFuZ2UnLFxuICAgICAgICAnb25CZWZvcmVTZXRSZWNvcmQnLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlU2hvd1Rlcm1pbmFscycsXG4gICAgICAgICdvbkJlZm9yZVN0YXJ0Um93RWRpdCcsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlQXBwbHknLFxuICAgICAgICAnb25CZWZvcmVTdGF0ZVNhdmUnLFxuICAgICAgICAnb25CZWZvcmVUYXNrQWRkJyxcbiAgICAgICAgJ29uQmVmb3JlVGFza0RlbGV0ZScsXG4gICAgICAgICdvbkJlZm9yZVRhc2tEcmFnJyxcbiAgICAgICAgJ29uQmVmb3JlVGFza0Ryb3BGaW5hbGl6ZScsXG4gICAgICAgICdvbkJlZm9yZVRhc2tFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlVGFza0VkaXRTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlVGFza1Jlc2l6ZScsXG4gICAgICAgICdvbkJlZm9yZVRhc2tSZXNpemVGaW5hbGl6ZScsXG4gICAgICAgICdvbkJlZm9yZVRhc2tTYXZlJyxcbiAgICAgICAgJ29uQmVmb3JlVGFza1NlZ21lbnREcmFnJyxcbiAgICAgICAgJ29uQmVmb3JlVGFza1NlZ21lbnREcm9wRmluYWxpemUnLFxuICAgICAgICAnb25CZWZvcmVUYXNrU2VnbWVudFJlc2l6ZScsXG4gICAgICAgICdvbkJlZm9yZVRhc2tTZWdtZW50UmVzaXplRmluYWxpemUnLFxuICAgICAgICAnb25CZWZvcmVUb2dnbGVHcm91cCcsXG4gICAgICAgICdvbkJlZm9yZVRvZ2dsZU5vZGUnLFxuICAgICAgICAnb25DYW5jZWxDZWxsRWRpdCcsXG4gICAgICAgICdvbkNhdGNoQWxsJyxcbiAgICAgICAgJ29uQ2VsbENsaWNrJyxcbiAgICAgICAgJ29uQ2VsbENvbnRleHRNZW51JyxcbiAgICAgICAgJ29uQ2VsbERibENsaWNrJyxcbiAgICAgICAgJ29uQ2VsbE1lbnVCZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQ2VsbE1lbnVJdGVtJyxcbiAgICAgICAgJ29uQ2VsbE1lbnVTaG93JyxcbiAgICAgICAgJ29uQ2VsbE1lbnVUb2dnbGVJdGVtJyxcbiAgICAgICAgJ29uQ2VsbE1vdXNlRW50ZXInLFxuICAgICAgICAnb25DZWxsTW91c2VMZWF2ZScsXG4gICAgICAgICdvbkNlbGxNb3VzZU91dCcsXG4gICAgICAgICdvbkNlbGxNb3VzZU92ZXInLFxuICAgICAgICAnb25Db2xsYXBzZScsXG4gICAgICAgICdvbkNvbGxhcHNlTm9kZScsXG4gICAgICAgICdvbkNvbHVtbkRyYWcnLFxuICAgICAgICAnb25Db2x1bW5EcmFnU3RhcnQnLFxuICAgICAgICAnb25Db2x1bW5Ecm9wJyxcbiAgICAgICAgJ29uQ29sdW1uUmVzaXplJyxcbiAgICAgICAgJ29uQ29sdW1uUmVzaXplU3RhcnQnLFxuICAgICAgICAnb25Db250ZXh0TWVudUl0ZW0nLFxuICAgICAgICAnb25Db250ZXh0TWVudVRvZ2dsZUl0ZW0nLFxuICAgICAgICAnb25Db3B5JyxcbiAgICAgICAgJ29uQ3JpdGljYWxQYXRoc0hpZ2hsaWdodGVkJyxcbiAgICAgICAgJ29uQ3JpdGljYWxQYXRoc1VuaGlnaGxpZ2h0ZWQnLFxuICAgICAgICAnb25DdXJyZW50VGltZWxpbmVVcGRhdGUnLFxuICAgICAgICAnb25EYXRhQ2hhbmdlJyxcbiAgICAgICAgJ29uRGF0ZVJhbmdlQ2hhbmdlJyxcbiAgICAgICAgJ29uRGVwZW5kZW5jaWVzRHJhd24nLFxuICAgICAgICAnb25EZXBlbmRlbmN5Q2xpY2snLFxuICAgICAgICAnb25EZXBlbmRlbmN5Q29udGV4dE1lbnUnLFxuICAgICAgICAnb25EZXBlbmRlbmN5Q3JlYXRlRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uRGVwZW5kZW5jeUNyZWF0ZURyb3AnLFxuICAgICAgICAnb25EZXBlbmRlbmN5RGJsQ2xpY2snLFxuICAgICAgICAnb25EZXBlbmRlbmN5TW91c2VPdXQnLFxuICAgICAgICAnb25EZXBlbmRlbmN5TW91c2VPdmVyJyxcbiAgICAgICAgJ29uRGVwZW5kZW5jeVZhbGlkYXRpb25Db21wbGV0ZScsXG4gICAgICAgICdvbkRlcGVuZGVuY3lWYWxpZGF0aW9uU3RhcnQnLFxuICAgICAgICAnb25EZXN0cm95JyxcbiAgICAgICAgJ29uRGlydHlTdGF0ZUNoYW5nZScsXG4gICAgICAgICdvbkRyYWdDcmVhdGVFbmQnLFxuICAgICAgICAnb25EcmFnQ3JlYXRlU3RhcnQnLFxuICAgICAgICAnb25EcmFnU2VsZWN0aW5nJyxcbiAgICAgICAgJ29uRWxlbWVudENyZWF0ZWQnLFxuICAgICAgICAnb25FdmVudEVkaXRCZWZvcmVTZXRSZWNvcmQnLFxuICAgICAgICAnb25FdmVudE1lbnVCZWZvcmVTaG93JyxcbiAgICAgICAgJ29uRXZlbnRNZW51SXRlbScsXG4gICAgICAgICdvbkV2ZW50TWVudVNob3cnLFxuICAgICAgICAnb25FdmVudFBhcnRpYWxSZXNpemUnLFxuICAgICAgICAnb25FdmVudFJlc2l6ZUVuZCcsXG4gICAgICAgICdvbkV2ZW50UmVzaXplU3RhcnQnLFxuICAgICAgICAnb25FdmVudFNlZ21lbnRQYXJ0aWFsUmVzaXplJyxcbiAgICAgICAgJ29uRXZlbnRTZWdtZW50UmVzaXplRW5kJyxcbiAgICAgICAgJ29uRXZlbnRTZWdtZW50UmVzaXplU3RhcnQnLFxuICAgICAgICAnb25FeHBhbmQnLFxuICAgICAgICAnb25FeHBhbmROb2RlJyxcbiAgICAgICAgJ29uRmlsZURyb3AnLFxuICAgICAgICAnb25GaWxsSGFuZGxlQmVmb3JlRHJhZ0ZpbmFsaXplJyxcbiAgICAgICAgJ29uRmlsbEhhbmRsZURyYWcnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZ0Fib3J0JyxcbiAgICAgICAgJ29uRmlsbEhhbmRsZURyYWdFbmQnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uRmluaXNoQ2VsbEVkaXQnLFxuICAgICAgICAnb25GaW5pc2hSb3dFZGl0JyxcbiAgICAgICAgJ29uRm9jdXNJbicsXG4gICAgICAgICdvbkZvY3VzT3V0JyxcbiAgICAgICAgJ29uR3JpZFJvd0JlZm9yZURyYWdTdGFydCcsXG4gICAgICAgICdvbkdyaWRSb3dCZWZvcmVEcm9wRmluYWxpemUnLFxuICAgICAgICAnb25HcmlkUm93RHJhZycsXG4gICAgICAgICdvbkdyaWRSb3dEcmFnQWJvcnQnLFxuICAgICAgICAnb25HcmlkUm93RHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uR3JpZFJvd0Ryb3AnLFxuICAgICAgICAnb25IZWFkZXJDbGljaycsXG4gICAgICAgICdvbkhlYWRlck1lbnVCZWZvcmVTaG93JyxcbiAgICAgICAgJ29uSGVhZGVyTWVudUl0ZW0nLFxuICAgICAgICAnb25IZWFkZXJNZW51U2hvdycsXG4gICAgICAgICdvbkhlYWRlck1lbnVUb2dnbGVJdGVtJyxcbiAgICAgICAgJ29uSGlkZScsXG4gICAgICAgICdvbkxvY2tSb3dzJyxcbiAgICAgICAgJ29uTW91c2VPdXQnLFxuICAgICAgICAnb25Nb3VzZU92ZXInLFxuICAgICAgICAnb25Nc3BFeHBvcnQnLFxuICAgICAgICAnb25OYXZpZ2F0ZScsXG4gICAgICAgICdvbk5vWm9vbUNoYW5nZScsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUGFzdGUnLFxuICAgICAgICAnb25QZGZFeHBvcnQnLFxuICAgICAgICAnb25QZXJjZW50QmFyRHJhZycsXG4gICAgICAgICdvblBlcmNlbnRCYXJEcmFnQWJvcnQnLFxuICAgICAgICAnb25QZXJjZW50QmFyRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uUGVyY2VudEJhckRyb3AnLFxuICAgICAgICAnb25QcmVzZXRDaGFuZ2UnLFxuICAgICAgICAnb25Qcm9qZWN0RWRpdENhbmNlbGVkJyxcbiAgICAgICAgJ29uUmVhZE9ubHknLFxuICAgICAgICAnb25SZWNvbXBvc2UnLFxuICAgICAgICAnb25SZWxlYXNlVGFzaycsXG4gICAgICAgICdvblJlbmRlclJvdycsXG4gICAgICAgICdvblJlbmRlclJvd3MnLFxuICAgICAgICAnb25SZW5kZXJUYXNrJyxcbiAgICAgICAgJ29uUmVzaXplJyxcbiAgICAgICAgJ29uUmVzb3VyY2VBc3NpZ25tZW50Q2xpY2snLFxuICAgICAgICAnb25SZXNwb25zaXZlJyxcbiAgICAgICAgJ29uUm93Q29sbGFwc2UnLFxuICAgICAgICAnb25Sb3dFeHBhbmQnLFxuICAgICAgICAnb25Sb3dNb3VzZUVudGVyJyxcbiAgICAgICAgJ29uUm93TW91c2VMZWF2ZScsXG4gICAgICAgICdvblNjaGVkdWxlTWVudUJlZm9yZVNob3cnLFxuICAgICAgICAnb25TY2hlZHVsZU1lbnVJdGVtJyxcbiAgICAgICAgJ29uU2NoZWR1bGVNZW51U2hvdycsXG4gICAgICAgICdvblNjcm9sbCcsXG4gICAgICAgICdvblNjcm9sbEJ1dHRvbkNsaWNrJyxcbiAgICAgICAgJ29uU2VsZWN0aW9uQ2hhbmdlJyxcbiAgICAgICAgJ29uU2VsZWN0aW9uTW9kZUNoYW5nZScsXG4gICAgICAgICdvblNob3cnLFxuICAgICAgICAnb25TcGxpdCcsXG4gICAgICAgICdvblNwbGl0dGVyQ29sbGFwc2VDbGljaycsXG4gICAgICAgICdvblNwbGl0dGVyRHJhZ0VuZCcsXG4gICAgICAgICdvblNwbGl0dGVyRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uU3BsaXR0ZXJFeHBhbmRDbGljaycsXG4gICAgICAgICdvblN0YXJ0Q2VsbEVkaXQnLFxuICAgICAgICAnb25TdGFydFJvd0VkaXQnLFxuICAgICAgICAnb25TdWJHcmlkQ29sbGFwc2UnLFxuICAgICAgICAnb25TdWJHcmlkRXhwYW5kJyxcbiAgICAgICAgJ29uVGFza0NsaWNrJyxcbiAgICAgICAgJ29uVGFza0NvbnRleHRNZW51JyxcbiAgICAgICAgJ29uVGFza0RibENsaWNrJyxcbiAgICAgICAgJ29uVGFza0RyYWcnLFxuICAgICAgICAnb25UYXNrRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uVGFza0Ryb3AnLFxuICAgICAgICAnb25UYXNrRWRpdENhbmNlbGVkJyxcbiAgICAgICAgJ29uVGFza0tleURvd24nLFxuICAgICAgICAnb25UYXNrS2V5VXAnLFxuICAgICAgICAnb25UYXNrTWVudUJlZm9yZVNob3cnLFxuICAgICAgICAnb25UYXNrTWVudUl0ZW0nLFxuICAgICAgICAnb25UYXNrTWVudVNob3cnLFxuICAgICAgICAnb25UYXNrTW91c2VEb3duJyxcbiAgICAgICAgJ29uVGFza01vdXNlT3V0JyxcbiAgICAgICAgJ29uVGFza01vdXNlT3ZlcicsXG4gICAgICAgICdvblRhc2tNb3VzZVVwJyxcbiAgICAgICAgJ29uVGFza05vbldvcmtpbmdUaW1lQ2xpY2snLFxuICAgICAgICAnb25UYXNrTm9uV29ya2luZ1RpbWVDb250ZXh0TWVudScsXG4gICAgICAgICdvblRhc2tOb25Xb3JraW5nVGltZURibENsaWNrJyxcbiAgICAgICAgJ29uVGFza1BhcnRpYWxSZXNpemUnLFxuICAgICAgICAnb25UYXNrUmVzaXplRW5kJyxcbiAgICAgICAgJ29uVGFza1Jlc2l6ZVN0YXJ0JyxcbiAgICAgICAgJ29uVGFza1NlZ21lbnREcmFnJyxcbiAgICAgICAgJ29uVGFza1NlZ21lbnREcmFnU3RhcnQnLFxuICAgICAgICAnb25UYXNrU2VnbWVudERyb3AnLFxuICAgICAgICAnb25UYXNrU2VnbWVudFBhcnRpYWxSZXNpemUnLFxuICAgICAgICAnb25UYXNrU2VnbWVudFJlc2l6ZUVuZCcsXG4gICAgICAgICdvblRhc2tTZWdtZW50UmVzaXplU3RhcnQnLFxuICAgICAgICAnb25UaWNrU2l6ZUNoYW5nZScsXG4gICAgICAgICdvblRpbWVBeGlzQ2hhbmdlJyxcbiAgICAgICAgJ29uVGltZUF4aXNIZWFkZXJDbGljaycsXG4gICAgICAgICdvblRpbWVBeGlzSGVhZGVyQ29udGV4dE1lbnUnLFxuICAgICAgICAnb25UaW1lQXhpc0hlYWRlckRibENsaWNrJyxcbiAgICAgICAgJ29uVGltZUF4aXNIZWFkZXJNZW51QmVmb3JlU2hvdycsXG4gICAgICAgICdvblRpbWVBeGlzSGVhZGVyTWVudUl0ZW0nLFxuICAgICAgICAnb25UaW1lQXhpc0hlYWRlck1lbnVTaG93JyxcbiAgICAgICAgJ29uVGltZWxpbmVDb250ZXh0Q2hhbmdlJyxcbiAgICAgICAgJ29uVGltZWxpbmVWaWV3cG9ydFJlc2l6ZScsXG4gICAgICAgICdvblRpbWVSYW5nZUhlYWRlckNsaWNrJyxcbiAgICAgICAgJ29uVGltZVJhbmdlSGVhZGVyQ29udGV4dE1lbnUnLFxuICAgICAgICAnb25UaW1lUmFuZ2VIZWFkZXJEYmxDbGljaycsXG4gICAgICAgICdvblRvZ2dsZUdyb3VwJyxcbiAgICAgICAgJ29uVG9nZ2xlTm9kZScsXG4gICAgICAgICdvblRvb2xDbGljaycsXG4gICAgICAgICdvblRyYW5zYWN0aW9uQ2hhbmdlJyxcbiAgICAgICAgJ29uVW5sb2NrUm93cycsXG4gICAgICAgICdvblVuc3BsaXQnLFxuICAgICAgICAnb25WaXNpYmxlRGF0ZVJhbmdlQ2hhbmdlJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2FpRmlsdGVyRmVhdHVyZScsXG4gICAgICAgICdiYXNlbGluZXNGZWF0dXJlJyxcbiAgICAgICAgJ2NlbGxDb3B5UGFzdGVGZWF0dXJlJyxcbiAgICAgICAgJ2NlbGxFZGl0RmVhdHVyZScsXG4gICAgICAgICdjZWxsTWVudUZlYXR1cmUnLFxuICAgICAgICAnY2VsbFRvb2x0aXBGZWF0dXJlJyxcbiAgICAgICAgJ2NoYXJ0c0ZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uQXV0b1dpZHRoRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5EcmFnVG9vbGJhckZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uTGluZXNGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtblBpY2tlckZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVuYW1lRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5SZW9yZGVyRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5SZXNpemVGZWF0dXJlJyxcbiAgICAgICAgJ2NyaXRpY2FsUGF0aHNGZWF0dXJlJyxcbiAgICAgICAgJ2RlcGVuZGVuY2llc0ZlYXR1cmUnLFxuICAgICAgICAnZGVwZW5kZW5jeUVkaXRGZWF0dXJlJyxcbiAgICAgICAgJ2V2ZW50RmlsdGVyRmVhdHVyZScsXG4gICAgICAgICdldmVudFNlZ21lbnRzRmVhdHVyZScsXG4gICAgICAgICdleGNlbEV4cG9ydGVyRmVhdHVyZScsXG4gICAgICAgICdmaWxlRHJvcEZlYXR1cmUnLFxuICAgICAgICAnZmlsbEhhbmRsZUZlYXR1cmUnLFxuICAgICAgICAnZmlsdGVyRmVhdHVyZScsXG4gICAgICAgICdmaWx0ZXJCYXJGZWF0dXJlJyxcbiAgICAgICAgJ2dyb3VwRmVhdHVyZScsXG4gICAgICAgICdncm91cFN1bW1hcnlGZWF0dXJlJyxcbiAgICAgICAgJ2hlYWRlck1lbnVGZWF0dXJlJyxcbiAgICAgICAgJ2hlYWRlclpvb21GZWF0dXJlJyxcbiAgICAgICAgJ2luZGljYXRvcnNGZWF0dXJlJyxcbiAgICAgICAgJ2xhYmVsc0ZlYXR1cmUnLFxuICAgICAgICAnbG9ja1Jvd3NGZWF0dXJlJyxcbiAgICAgICAgJ21lcmdlQ2VsbHNGZWF0dXJlJyxcbiAgICAgICAgJ21zcEV4cG9ydEZlYXR1cmUnLFxuICAgICAgICAnbm9uV29ya2luZ1RpbWVGZWF0dXJlJyxcbiAgICAgICAgJ3BhbkZlYXR1cmUnLFxuICAgICAgICAncGFyZW50QXJlYUZlYXR1cmUnLFxuICAgICAgICAncGRmRXhwb3J0RmVhdHVyZScsXG4gICAgICAgICdwZXJjZW50QmFyRmVhdHVyZScsXG4gICAgICAgICdwaW5Db2x1bW5zRmVhdHVyZScsXG4gICAgICAgICdwcmludEZlYXR1cmUnLFxuICAgICAgICAncHJvZ3Jlc3NMaW5lRmVhdHVyZScsXG4gICAgICAgICdwcm9qZWN0RWRpdEZlYXR1cmUnLFxuICAgICAgICAncHJvamVjdExpbmVzRmVhdHVyZScsXG4gICAgICAgICdxdWlja0ZpbmRGZWF0dXJlJyxcbiAgICAgICAgJ3JlZ2lvblJlc2l6ZUZlYXR1cmUnLFxuICAgICAgICAncm9sbHVwc0ZlYXR1cmUnLFxuICAgICAgICAncm93Q29weVBhc3RlRmVhdHVyZScsXG4gICAgICAgICdyb3dFZGl0RmVhdHVyZScsXG4gICAgICAgICdyb3dFeHBhbmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVzaXplRmVhdHVyZScsXG4gICAgICAgICdzY2hlZHVsZU1lbnVGZWF0dXJlJyxcbiAgICAgICAgJ3NjaGVkdWxlVG9vbHRpcEZlYXR1cmUnLFxuICAgICAgICAnc2Nyb2xsQnV0dG9uc0ZlYXR1cmUnLFxuICAgICAgICAnc2VhcmNoRmVhdHVyZScsXG4gICAgICAgICdzb3J0RmVhdHVyZScsXG4gICAgICAgICdzcGxpdEZlYXR1cmUnLFxuICAgICAgICAnc3RpY2t5Q2VsbHNGZWF0dXJlJyxcbiAgICAgICAgJ3N0cmlwZUZlYXR1cmUnLFxuICAgICAgICAnc3VtbWFyeUZlYXR1cmUnLFxuICAgICAgICAndGFza0NvcHlQYXN0ZUZlYXR1cmUnLFxuICAgICAgICAndGFza0RyYWdGZWF0dXJlJyxcbiAgICAgICAgJ3Rhc2tEcmFnQ3JlYXRlRmVhdHVyZScsXG4gICAgICAgICd0YXNrRWRpdEZlYXR1cmUnLFxuICAgICAgICAndGFza01lbnVGZWF0dXJlJyxcbiAgICAgICAgJ3Rhc2tOb25Xb3JraW5nVGltZUZlYXR1cmUnLFxuICAgICAgICAndGFza1Jlc2l6ZUZlYXR1cmUnLFxuICAgICAgICAndGFza1NlZ21lbnREcmFnRmVhdHVyZScsXG4gICAgICAgICd0YXNrU2VnbWVudFJlc2l6ZUZlYXR1cmUnLFxuICAgICAgICAndGFza1Rvb2x0aXBGZWF0dXJlJyxcbiAgICAgICAgJ3RpbWVBeGlzSGVhZGVyTWVudUZlYXR1cmUnLFxuICAgICAgICAndGltZWxpbmVDaGFydEZlYXR1cmUnLFxuICAgICAgICAndGltZVJhbmdlc0ZlYXR1cmUnLFxuICAgICAgICAndGltZVNwYW5IaWdobGlnaHRGZWF0dXJlJyxcbiAgICAgICAgJ3RyZWVGZWF0dXJlJyxcbiAgICAgICAgJ3RyZWVHcm91cEZlYXR1cmUnLFxuICAgICAgICAndmVyc2lvbnNGZWF0dXJlJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtR2FudHRCYXNlQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbGxvd0NyZWF0ZScsXG4gICAgICAgICdhbGxvd0NyZWF0ZU9ubHlQYXJlbnQnLFxuICAgICAgICAnYWxsb3dEcm9wT25FdmVudEJhcicsXG4gICAgICAgICdhbmltYXRlRmlsdGVyUmVtb3ZhbHMnLFxuICAgICAgICAnYW5pbWF0ZVJlbW92aW5nUm93cycsXG4gICAgICAgICdhbmltYXRlVHJlZU5vZGVUb2dnbGUnLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdhc3NpZ25tZW50cycsXG4gICAgICAgICdhdXRvQWRqdXN0VGltZUF4aXMnLFxuICAgICAgICAnYXV0b0hlaWdodCcsXG4gICAgICAgICdiYXJNYXJnaW4nLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdidWZmZXJDb2VmJyxcbiAgICAgICAgJ2J1ZmZlclRocmVzaG9sZCcsXG4gICAgICAgICdjYWxlbmRhcnMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZWxsRWxsaXBzaXMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29sdW1uTGluZXMnLFxuICAgICAgICAnY29sdW1ucycsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQnLFxuICAgICAgICAnY3JlYXRpb25Ub29sdGlwJyxcbiAgICAgICAgJ2NyZWF0aW9uVG9vbHRpcFRlbXBsYXRlJyxcbiAgICAgICAgJ2N5Y2xlUmVzb2x1dGlvblBvcHVwQ2xhc3MnLFxuICAgICAgICAnZGF0YScsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkZWZhdWx0UmVnaW9uJyxcbiAgICAgICAgJ2RlZmF1bHRSZXNvdXJjZUltYWdlTmFtZScsXG4gICAgICAgICdkZXBlbmRlbmNpZXMnLFxuICAgICAgICAnZGVwZW5kZW5jeUlkRmllbGQnLFxuICAgICAgICAnZGVzdHJveVN0b3JlJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZGlzYWJsZUdyaWRDb2x1bW5JZFdhcm5pbmcnLFxuICAgICAgICAnZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcnLFxuICAgICAgICAnZGlzcGxheURhdGVGb3JtYXQnLFxuICAgICAgICAnZGlzcGxheVNjaGVkdWxpbmdJc3N1ZVJlc29sdXRpb25Qb3B1cCcsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYXdlcicsXG4gICAgICAgICdkdXJhdGlvbkRpc3BsYXlQcmVjaXNpb24nLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW1wdHlUZXh0JyxcbiAgICAgICAgJ2VuYWJsZURlbGV0ZUtleScsXG4gICAgICAgICdlbmFibGVFdmVudEFuaW1hdGlvbnMnLFxuICAgICAgICAnZW5hYmxlUmVjdXJyaW5nRXZlbnRzJyxcbiAgICAgICAgJ2VuYWJsZVN0aWNreScsXG4gICAgICAgICdlbmFibGVUZXh0U2VsZWN0aW9uJyxcbiAgICAgICAgJ2VuYWJsZVRyYW5zYWN0aW9uYWxGZWF0dXJlcycsXG4gICAgICAgICdlbmFibGVVbmRvUmVkb0tleXMnLFxuICAgICAgICAnZW5kRGF0ZScsXG4gICAgICAgICdldmVudENvbG9yJyxcbiAgICAgICAgJ2V2ZW50U3R5bGUnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbGxMYXN0Q29sdW1uJyxcbiAgICAgICAgJ2ZpbGxUaWNrcycsXG4gICAgICAgICdmaXhlZFJvd0hlaWdodCcsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2Zvb3RlcicsXG4gICAgICAgICdmb3JjZUZpdCcsXG4gICAgICAgICdmb3JtdWxhUHJvdmlkZXJzJyxcbiAgICAgICAgJ2Z1bGxSb3dSZWZyZXNoJyxcbiAgICAgICAgJ2dldERhdGVDb25zdHJhaW50cycsXG4gICAgICAgICdnZXRSb3dIZWlnaHQnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUZvb3RlcnMnLFxuICAgICAgICAnaGlkZUhlYWRlcnMnLFxuICAgICAgICAnaGlkZUhvcml6b250YWxTY3JvbGxiYXInLFxuICAgICAgICAnaGlkZVJvd0hvdmVyJyxcbiAgICAgICAgJ2hvdmVyQ2xzJyxcbiAgICAgICAgJ2ljb24nLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaWdub3JlRG9tRXZlbnRzV2hpbGVTY3JvbGxpbmcnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5maW5pdGVTY3JvbGwnLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9hZE1hc2snLFxuICAgICAgICAnbG9hZE1hc2tEZWZhdWx0cycsXG4gICAgICAgICdsb2FkTWFza0Vycm9yJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvbmdQcmVzc1RpbWUnLFxuICAgICAgICAnbWFuYWdlZEV2ZW50U2l6aW5nJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heERhdGUnLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heFRpbWVBeGlzVW5pdCcsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtYXhab29tTGV2ZWwnLFxuICAgICAgICAnbWluRGF0ZScsXG4gICAgICAgICdtaW5IZWlnaHQnLFxuICAgICAgICAnbWluV2lkdGgnLFxuICAgICAgICAnbWluWm9vbUxldmVsJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnbmV3VGFza0RlZmF1bHRzJyxcbiAgICAgICAgJ293bmVyJyxcbiAgICAgICAgJ3BhcnRuZXInLFxuICAgICAgICAncGx1Z2lucycsXG4gICAgICAgICdwcmVzZXJ2ZUZvY3VzT25EYXRhc2V0Q2hhbmdlJyxcbiAgICAgICAgJ3ByZXNlcnZlU2Nyb2xsJyxcbiAgICAgICAgJ3ByZXNlcnZlU2Nyb2xsT25EYXRhc2V0Q2hhbmdlJyxcbiAgICAgICAgJ3ByZXNldHMnLFxuICAgICAgICAncHJldmVudFRvb2x0aXBPblRvdWNoJyxcbiAgICAgICAgJ3Byb2plY3QnLFxuICAgICAgICAncHJvamVjdFByb2dyZXNzUmVwb3J0aW5nJyxcbiAgICAgICAgJ3JlYWRPbmx5JyxcbiAgICAgICAgJ3JlY3VycmVuY2VDb25maXJtYXRpb25Qb3B1cCcsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdyZXNpemFibGUnLFxuICAgICAgICAncmVzaXplVG9GaXRJbmNsdWRlc0hlYWRlcicsXG4gICAgICAgICdyZXNvdXJjZUltYWdlRm9sZGVyUGF0aCcsXG4gICAgICAgICdyZXNvdXJjZUltYWdlUGF0aCcsXG4gICAgICAgICdyZXNvdXJjZXMnLFxuICAgICAgICAncmVzcG9uc2l2ZUxldmVscycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAncm93SGVpZ2h0JyxcbiAgICAgICAgJ3Jvd0xpbmVzJyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY2hlZHVsaW5nSXNzdWVSZXNvbHV0aW9uUG9wdXBDbGFzcycsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3Njcm9sbGVyQ2xhc3MnLFxuICAgICAgICAnc2Nyb2xsTWFuYWdlcicsXG4gICAgICAgICdzY3JvbGxUYXNrSW50b1ZpZXdPbkNlbGxDbGljaycsXG4gICAgICAgICdzZWxlY3Rpb25Nb2RlJyxcbiAgICAgICAgJ3Nob3dDb3N0Q29udHJvbHMnLFxuICAgICAgICAnc2hvd0NyZWF0aW9uVG9vbHRpcCcsXG4gICAgICAgICdzaG93RGlydHknLFxuICAgICAgICAnc2hvd0xhZ0luVG9vbHRpcCcsXG4gICAgICAgICdzaG93UmVjdXJyaW5nVUknLFxuICAgICAgICAnc2hvd1Rhc2tDb2xvclBpY2tlcnMnLFxuICAgICAgICAnc2hvd1Rvb2x0aXAnLFxuICAgICAgICAnc2hvd1Vuc2NoZWR1bGVkVGFza3MnLFxuICAgICAgICAnc25hcCcsXG4gICAgICAgICdzbmFwUmVsYXRpdmVUb0V2ZW50U3RhcnREYXRlJyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAnc3RhcnREYXRlJyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlSWQnLFxuICAgICAgICAnc3RhdGVQcm92aWRlcicsXG4gICAgICAgICdzdGF0ZVNldHRpbmdzJyxcbiAgICAgICAgJ3N0aWNreUhlYWRlcnMnLFxuICAgICAgICAnc3RvcmUnLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3N1YkdyaWRDb25maWdzJyxcbiAgICAgICAgJ3N1cHByZXNzRml0JyxcbiAgICAgICAgJ3N5bmNNYXNrJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YXNrUmVuZGVyZXInLFxuICAgICAgICAndGFza3MnLFxuICAgICAgICAndGFza1N0b3JlJyxcbiAgICAgICAgJ3RiYXInLFxuICAgICAgICAndGVybWluYWxDbHMnLFxuICAgICAgICAndGVybWluYWxIaWRlRGVsYXknLFxuICAgICAgICAndGVybWluYWxPZmZzZXQnLFxuICAgICAgICAndGVybWluYWxTaG93RGVsYXknLFxuICAgICAgICAndGVybWluYWxTaWRlcycsXG4gICAgICAgICd0ZXJtaW5hbFNpemUnLFxuICAgICAgICAndGlja1NpemUnLFxuICAgICAgICAndGltZUF4aXMnLFxuICAgICAgICAndGltZVJhbmdlcycsXG4gICAgICAgICd0aW1lUmVzb2x1dGlvbicsXG4gICAgICAgICd0aW1lWm9uZScsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0b2dnbGVQYXJlbnRUYXNrc09uQ2xpY2snLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndG9vbHRpcFRlbXBsYXRlJyxcbiAgICAgICAgJ3RyYW5zaXRpb24nLFxuICAgICAgICAndHJhbnNpdGlvbkR1cmF0aW9uJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3VzZUNvbnRleHR1YWxSZWN1cnJlbmNlUnVsZXMnLFxuICAgICAgICAndmlld1ByZXNldCcsXG4gICAgICAgICd2aXNpYmxlRGF0ZScsXG4gICAgICAgICd2aXNpYmxlWm9vbUZhY3RvcicsXG4gICAgICAgICd3ZWVrU3RhcnREYXknLFxuICAgICAgICAnd2VpZ2h0JyxcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgJ3dvcmtpbmdUaW1lJyxcbiAgICAgICAgJ3pvb21LZWVwc09yaWdpbmFsVGltZXNwYW4nLFxuICAgICAgICAnem9vbU9uTW91c2VXaGVlbCcsXG4gICAgICAgICd6b29tT25UaW1lQXhpc0RvdWJsZUNsaWNrJ1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsbG93Q3JlYXRlJyxcbiAgICAgICAgJ2FsbG93Q3JlYXRlT25seVBhcmVudCcsXG4gICAgICAgICdhbmltYXRlRmlsdGVyUmVtb3ZhbHMnLFxuICAgICAgICAnYW5pbWF0ZVJlbW92aW5nUm93cycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9BZGp1c3RUaW1lQXhpcycsXG4gICAgICAgICdhdXRvSGVpZ2h0JyxcbiAgICAgICAgJ2JiYXInLFxuICAgICAgICAnYm9keUNscycsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnYnVmZmVyQ29lZicsXG4gICAgICAgICdidWZmZXJUaHJlc2hvbGQnLFxuICAgICAgICAnY29sbGFwc2libGUnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2NvbnRleHRNZW51VHJpZ2dlckV2ZW50JyxcbiAgICAgICAgJ2NyZWF0aW9uVG9vbHRpcCcsXG4gICAgICAgICdjeWNsZVJlc29sdXRpb25Qb3B1cENsYXNzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkZWZhdWx0UmVnaW9uJyxcbiAgICAgICAgJ2RlZmF1bHRSZXNvdXJjZUltYWdlTmFtZScsXG4gICAgICAgICdkZXBlbmRlbmN5SWRGaWVsZCcsXG4gICAgICAgICdkZXN0cm95U3RvcmUnLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkaXNhYmxlR3JpZENvbHVtbklkV2FybmluZycsXG4gICAgICAgICdkaXNhYmxlR3JpZFJvd01vZGVsV2FybmluZycsXG4gICAgICAgICdkaXNwbGF5U2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhd2VyJyxcbiAgICAgICAgJ2R1cmF0aW9uRGlzcGxheVByZWNpc2lvbicsXG4gICAgICAgICdlbGVtZW50QXR0cmlidXRlcycsXG4gICAgICAgICdlbmFibGVEZWxldGVLZXknLFxuICAgICAgICAnZW5hYmxlUmVjdXJyaW5nRXZlbnRzJyxcbiAgICAgICAgJ2VuYWJsZVN0aWNreScsXG4gICAgICAgICdlbmFibGVUZXh0U2VsZWN0aW9uJyxcbiAgICAgICAgJ2VuYWJsZVRyYW5zYWN0aW9uYWxGZWF0dXJlcycsXG4gICAgICAgICdmaWxsTGFzdENvbHVtbicsXG4gICAgICAgICdmaXhlZFJvd0hlaWdodCcsXG4gICAgICAgICdmb290ZXInLFxuICAgICAgICAnZm9ybXVsYVByb3ZpZGVycycsXG4gICAgICAgICdmdWxsUm93UmVmcmVzaCcsXG4gICAgICAgICdnZXREYXRlQ29uc3RyYWludHMnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoaWRlSG9yaXpvbnRhbFNjcm9sbGJhcicsXG4gICAgICAgICdob3ZlckNscycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZURvbUV2ZW50c1doaWxlU2Nyb2xsaW5nJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2FkTWFzaycsXG4gICAgICAgICdsb2FkTWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ2xvYWRNYXNrRXJyb3InLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbWFuYWdlZEV2ZW50U2l6aW5nJyxcbiAgICAgICAgJ21hc2tEZWZhdWx0cycsXG4gICAgICAgICdtYXNrZWQnLFxuICAgICAgICAnbWF4RGF0ZScsXG4gICAgICAgICdtYXhUaW1lQXhpc1VuaXQnLFxuICAgICAgICAnbWluRGF0ZScsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ25ld1Rhc2tEZWZhdWx0cycsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwYXJ0bmVyJyxcbiAgICAgICAgJ3BsdWdpbnMnLFxuICAgICAgICAncHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncHJvamVjdFByb2dyZXNzUmVwb3J0aW5nJyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmVzaXphYmxlJyxcbiAgICAgICAgJ3Jlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXInLFxuICAgICAgICAncmVzb3VyY2VJbWFnZUZvbGRlclBhdGgnLFxuICAgICAgICAncmVzb3VyY2VJbWFnZVBhdGgnLFxuICAgICAgICAncmVzcG9uc2l2ZUxldmVscycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAnc2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwQ2xhc3MnLFxuICAgICAgICAnc2Nyb2xsZXJDbGFzcycsXG4gICAgICAgICdzY3JvbGxNYW5hZ2VyJyxcbiAgICAgICAgJ3Nob3dDb3N0Q29udHJvbHMnLFxuICAgICAgICAnc2hvd0NyZWF0aW9uVG9vbHRpcCcsXG4gICAgICAgICdzaG93RGlydHknLFxuICAgICAgICAnc2hvd0xhZ0luVG9vbHRpcCcsXG4gICAgICAgICdzaG93UmVjdXJyaW5nVUknLFxuICAgICAgICAnc2hvd1Rhc2tDb2xvclBpY2tlcnMnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RpY2t5SGVhZGVycycsXG4gICAgICAgICdzdHJpcHMnLFxuICAgICAgICAnc3ViR3JpZENvbmZpZ3MnLFxuICAgICAgICAnc3luY01hc2snLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkJhckl0ZW1zJyxcbiAgICAgICAgJ3Rhc2tSZW5kZXJlcicsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3Rlcm1pbmFsQ2xzJyxcbiAgICAgICAgJ3Rlcm1pbmFsU2lkZXMnLFxuICAgICAgICAndGltZUF4aXMnLFxuICAgICAgICAndWknLFxuICAgICAgICAndmlzaWJsZVpvb21GYWN0b3InLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd6b29tS2VlcHNPcmlnaW5hbFRpbWVzcGFuJyxcbiAgICAgICAgJ3pvb21Pbk1vdXNlV2hlZWwnLFxuICAgICAgICAnem9vbU9uVGltZUF4aXNEb3VibGVDbGljaydcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bVByb3BzOiBzdHJpbmdbXSA9IEJyeW50dW1HYW50dEJhc2VDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FsbG93RHJvcE9uRXZlbnRCYXInLFxuICAgICAgICAnYW5pbWF0ZVRyZWVOb2RlVG9nZ2xlJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2Fzc2lnbm1lbnRzJyxcbiAgICAgICAgJ2Jhck1hcmdpbicsXG4gICAgICAgICdjYWxlbmRhck1hbmFnZXJTdG9yZScsXG4gICAgICAgICdjYWxlbmRhcnMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZWxsRWxsaXBzaXMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29sdW1uTGluZXMnLFxuICAgICAgICAnY29sdW1ucycsXG4gICAgICAgICdjcmVhdGlvblRvb2x0aXBUZW1wbGF0ZScsXG4gICAgICAgICdkYXRhJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2Rpc3BsYXlEYXRlRm9ybWF0JyxcbiAgICAgICAgJ2VtcHR5VGV4dCcsXG4gICAgICAgICdlbmFibGVFdmVudEFuaW1hdGlvbnMnLFxuICAgICAgICAnZW5hYmxlVW5kb1JlZG9LZXlzJyxcbiAgICAgICAgJ2VuZERhdGUnLFxuICAgICAgICAnZXZlbnRDb2xvcicsXG4gICAgICAgICdldmVudFN0eWxlJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmaWxsVGlja3MnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmb2N1c1Zpc2libGUnLFxuICAgICAgICAnZm9yY2VGaXQnLFxuICAgICAgICAnaGFzQ2hhbmdlcycsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVGb290ZXJzJyxcbiAgICAgICAgJ2hpZGVIZWFkZXJzJyxcbiAgICAgICAgJ2hpZGVSb3dIb3ZlcicsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpbmZpbml0ZVNjcm9sbCcsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xvbmdQcmVzc1RpbWUnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtYXhab29tTGV2ZWwnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21pblpvb21MZXZlbCcsXG4gICAgICAgICdvcmlnaW5hbFN0b3JlJyxcbiAgICAgICAgJ3BhcmVudCcsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbCcsXG4gICAgICAgICdwcmVzZXRzJyxcbiAgICAgICAgJ3Byb2plY3QnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVjdXJyZW5jZUNvbmZpcm1hdGlvblBvcHVwJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdyZXNvdXJjZXMnLFxuICAgICAgICAncm93SGVpZ2h0JyxcbiAgICAgICAgJ3Jvd0xpbmVzJyxcbiAgICAgICAgJ3J0bCcsXG4gICAgICAgICdzY3JvbGxhYmxlJyxcbiAgICAgICAgJ3Njcm9sbExlZnQnLFxuICAgICAgICAnc2Nyb2xsVGFza0ludG9WaWV3T25DZWxsQ2xpY2snLFxuICAgICAgICAnc2Nyb2xsVG9wJyxcbiAgICAgICAgJ3Njcm9sbFgnLFxuICAgICAgICAnc2VsZWN0ZWRDZWxsJyxcbiAgICAgICAgJ3NlbGVjdGVkQ2VsbHMnLFxuICAgICAgICAnc2VsZWN0ZWRSZWNvcmQnLFxuICAgICAgICAnc2VsZWN0ZWRSZWNvcmRzJyxcbiAgICAgICAgJ3NlbGVjdGVkUm93cycsXG4gICAgICAgICdzZWxlY3Rpb25Nb2RlJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwJyxcbiAgICAgICAgJ3Nob3dVbnNjaGVkdWxlZFRhc2tzJyxcbiAgICAgICAgJ3NuYXAnLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdGFydERhdGUnLFxuICAgICAgICAnc3RhdGUnLFxuICAgICAgICAnc3RhdGVTZXR0aW5ncycsXG4gICAgICAgICdzdG9yZScsXG4gICAgICAgICdzdXBwcmVzc0ZpdCcsXG4gICAgICAgICd0YXNrcycsXG4gICAgICAgICd0YXNrU3RvcmUnLFxuICAgICAgICAndGVybWluYWxIaWRlRGVsYXknLFxuICAgICAgICAndGVybWluYWxPZmZzZXQnLFxuICAgICAgICAndGVybWluYWxTaG93RGVsYXknLFxuICAgICAgICAndGVybWluYWxTaXplJyxcbiAgICAgICAgJ3RpY2tTaXplJyxcbiAgICAgICAgJ3RpbWVSYW5nZXMnLFxuICAgICAgICAndGltZVJlc29sdXRpb24nLFxuICAgICAgICAndGltZVpvbmUnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9nZ2xlUGFyZW50VGFza3NPbkNsaWNrJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndG9vbHRpcFRlbXBsYXRlJyxcbiAgICAgICAgJ3RyYW5zaXRpb24nLFxuICAgICAgICAndHJhbnNpdGlvbkR1cmF0aW9uJyxcbiAgICAgICAgJ3VzZUNvbnRleHR1YWxSZWN1cnJlbmNlUnVsZXMnLFxuICAgICAgICAndmlld1ByZXNldCcsXG4gICAgICAgICd2aXNpYmxlRGF0ZScsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd3b3JraW5nVGltZScsXG4gICAgICAgICd6b29tTGV2ZWwnXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICAgcHVibGljIGluc3RhbmNlITogR2FudHRCYXNlO1xuXG4gICAgcHJpdmF0ZSBicnludHVtQ29uZmlnID0ge1xuICAgICAgICBhZG9wdCAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhcHBlbmRUbyAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBocmVmICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhbmd1bGFyQ29tcG9uZW50IDogdGhpcyxcbiAgICAgICAgZmVhdHVyZXMgICAgICAgICA6IHt9LFxuICAgICAgICBsaXN0ZW5lcnMgICAgICAgIDoge31cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3Mgb25seVxuICAgIEBJbnB1dCgpIGFkb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhbGxvd0NyZWF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFsbG93Q3JlYXRlT25seVBhcmVudCAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYW5pbWF0ZUZpbHRlclJlbW92YWxzICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbmltYXRlUmVtb3ZpbmdSb3dzICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFyaWFEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcmlhTGFiZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b0FkanVzdFRpbWVBeGlzICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhdXRvSGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGJiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChHYW50dENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIGJvZHlDbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGJ1ZmZlckNvZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBidWZmZXJUaHJlc2hvbGQgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgY29sbGFwc2libGUgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWc7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb250ZW50RWxlbWVudENscyAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbnRleHRNZW51VHJpZ2dlckV2ZW50ICAgICAgICAgICAgICAgISA6ICdjb250ZXh0bWVudSd8J2NsaWNrJ3wnZGJsY2xpY2snO1xuICAgIEBJbnB1dCgpIGNyZWF0aW9uVG9vbHRpcCAgICAgICAgICAgICAgICAgICAgICAgISA6IFRvb2x0aXBDb25maWc7XG4gICAgQElucHV0KCkgY3ljbGVSZXNvbHV0aW9uUG9wdXBDbGFzcyAgICAgICAgICAgICAhIDogdHlwZW9mIEN5Y2xlUmVzb2x1dGlvblBvcHVwO1xuICAgIEBJbnB1dCgpIGRhdGFGaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0UmVnaW9uICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdFJlc291cmNlSW1hZ2VOYW1lICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlcGVuZGVuY3lJZEZpZWxkICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZXN0cm95U3RvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZUdyaWRDb2x1bW5JZFdhcm5pbmcgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlR3JpZFJvd01vZGVsV2FybmluZyAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRpc3BsYXlTY2hlZHVsaW5nSXNzdWVSZXNvbHV0aW9uUG9wdXAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYXdlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e3NpZGU/OiAnc3RhcnQnfCdsZWZ0J3wnZW5kJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nLCBzaXplPzogc3RyaW5nfG51bWJlciwgaW5saW5lPzogYm9vbGVhbiwgYXV0b0Nsb3NlOiB7IG1vdXNlZG93bj86IGJvb2xlYW58c3RyaW5nLCBmb2N1c291dD86IGJvb2xlYW58c3RyaW5nLCBtb3VzZW91dD86IHN0cmluZyB9LCBhdXRvQ2xvc2VEZWxheT86IG51bWJlcn07XG4gICAgQElucHV0KCkgZHVyYXRpb25EaXNwbGF5UHJlY2lzaW9uICAgICAgICAgICAgICAhIDogbnVtYmVyfGJvb2xlYW47XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGVuYWJsZURlbGV0ZUtleSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZW5hYmxlUmVjdXJyaW5nRXZlbnRzICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGRlZmF1bHRBY3Rpb24/OiAnc2luZ2xlJ3wnZnV0dXJlJ1xuICAgIH07XG4gICAgQElucHV0KCkgZW5hYmxlU3RpY2t5ICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlbmFibGVUZXh0U2VsZWN0aW9uICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGVuYWJsZVRyYW5zYWN0aW9uYWxGZWF0dXJlcyAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZmlsbExhc3RDb2x1bW4gICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmaXhlZFJvd0hlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZvb3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHtcbiAgICAgICAgZG9jaz86ICd0b3AnfCdyaWdodCd8J2JvdHRvbSd8J2xlZnQnfCdzdGFydCd8J2VuZCdcbiAgICAgICAgaHRtbD86IHN0cmluZ1xuICAgICAgICBjbHM/OiBzdHJpbmdcbiAgICB9fHN0cmluZztcbiAgICBASW5wdXQoKSBmb3JtdWxhUHJvdmlkZXJzICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBGb3JtdWxhUHJvdmlkZXJDb25maWc+O1xuICAgIEBJbnB1dCgpIGZ1bGxSb3dSZWZyZXNoICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZ2V0RGF0ZUNvbnN0cmFpbnRzICAgICAgICAgICAgICAgICAgICAhIDogKHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCkgPT4gRGF0ZUNvbnN0cmFpbnQ7XG4gICAgQElucHV0KCkgZ2V0Um93SGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogKGdldFJvd0hlaWdodDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IG51bWJlcjtcbiAgICBASW5wdXQoKSBoZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8Ym9vbGVhbnxQYW5lbEhlYWRlcjtcbiAgICBASW5wdXQoKSBoaWRlSG9yaXpvbnRhbFNjcm9sbGJhciAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhvdmVyQ2xzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpY29uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8RG9tQ29uZmlnO1xuICAgIEBJbnB1dCgpIGlnbm9yZURvbUV2ZW50c1doaWxlU2Nyb2xsaW5nICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaWdub3JlUGFyZW50UmVhZE9ubHkgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsaXN0ZW5lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBHYW50dEJhc2VMaXN0ZW5lcnM7XG4gICAgQElucHV0KCkgbG9hZE1hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfE1hc2tDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSBsb2FkTWFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIGxvYWRNYXNrRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgISA6IE1hc2tDb25maWd8TWFza3xib29sZWFuO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbWFuYWdlZEV2ZW50U2l6aW5nICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBtYXNrRGVmYXVsdHMgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1hc2tlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWF4RGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogRGF0ZXxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4VGltZUF4aXNVbml0ICAgICAgICAgICAgICAgICAgICAgICAhIDogRHVyYXRpb25Vbml0O1xuICAgIEBJbnB1dCgpIG1pbkRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1vbml0b3JSZXNpemUgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbmV3VGFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAhIDogVGFza01vZGVsQ29uZmlnfG9iamVjdHwoKCkgPT4gVGFza01vZGVsQ29uZmlnfG9iamVjdCk7XG4gICAgQElucHV0KCkgb3duZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogV2lkZ2V0fGFueTtcbiAgICBASW5wdXQoKSBwYXJ0bmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBUaW1lbGluZUJhc2U7XG4gICAgQElucHV0KCkgcGx1Z2lucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogRnVuY3Rpb25bXTtcbiAgICBASW5wdXQoKSBwcmVzZXJ2ZUZvY3VzT25EYXRhc2V0Q2hhbmdlICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHByZXNlcnZlU2Nyb2xsT25EYXRhc2V0Q2hhbmdlICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcm9qZWN0UHJvZ3Jlc3NSZXBvcnRpbmcgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVsbDtcbiAgICBASW5wdXQoKSByZWxheVN0b3JlRXZlbnRzICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlc2l6YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBtaW5XaWR0aD86IG51bWJlclxuICAgICAgICBtYXhXaWR0aD86IG51bWJlclxuICAgICAgICBtaW5IZWlnaHQ/OiBudW1iZXJcbiAgICAgICAgbWF4SGVpZ2h0PzogbnVtYmVyXG4gICAgICAgIGhhbmRsZXM/OiBvYmplY3RcbiAgICB9O1xuICAgIEBJbnB1dCgpIHJlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXIgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVzb3VyY2VJbWFnZUZvbGRlclBhdGggICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJlc291cmNlSW1hZ2VQYXRoICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZXNwb25zaXZlTGV2ZWxzICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXJ8c3RyaW5nfFJlc3BvbnNpdmVMZXZlbENvbmZpZz47XG4gICAgQElucHV0KCkgcmlwcGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfTtcbiAgICBASW5wdXQoKSByb290RWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBTaGFkb3dSb290fEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIHNjaGVkdWxpbmdJc3N1ZVJlc29sdXRpb25Qb3B1cENsYXNzICAgISA6IHR5cGVvZiBTY2hlZHVsaW5nSXNzdWVSZXNvbHV0aW9uUG9wdXA7XG4gICAgQElucHV0KCkgc2Nyb2xsZXJDbGFzcyAgICAgICAgICAgICAgICAgICAgICAgICAhIDogdHlwZW9mIFNjcm9sbGVyO1xuICAgIEBJbnB1dCgpIHNjcm9sbE1hbmFnZXIgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFNjcm9sbE1hbmFnZXJDb25maWd8U2Nyb2xsTWFuYWdlcjtcbiAgICBASW5wdXQoKSBzaG93Q29zdENvbnRyb2xzICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dDcmVhdGlvblRvb2x0aXAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd0RpcnR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGR1cmluZ0VkaXQ/OiBib29sZWFuXG4gICAgICAgIG5ld1JlY29yZD86IGJvb2xlYW5cbiAgICB9O1xuICAgIEBJbnB1dCgpIHNob3dMYWdJblRvb2x0aXAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd1JlY3VycmluZ1VJICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93VGFza0NvbG9yUGlja2VycyAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNuYXBSZWxhdGl2ZVRvRXZlbnRTdGFydERhdGUgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3RhdGVmdWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3R8c3RyaW5nW107XG4gICAgQElucHV0KCkgc3RhdGVmdWxFdmVudHMgICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlSWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzdGF0ZVByb3ZpZGVyICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBTdGF0ZVByb3ZpZGVyO1xuICAgIEBJbnB1dCgpIHN0aWNreUhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3RyaXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgR2FudHRDb250YWluZXJJdGVtQ29uZmlnPjtcbiAgICBASW5wdXQoKSBzdWJHcmlkQ29uZmlncyAgICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBTdWJHcmlkQ29uZmlnPjtcbiAgICBASW5wdXQoKSBzeW5jTWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8TWFza0NvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIHRhYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkJhckl0ZW1zICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFRvb2xiYXJJdGVtc1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIHRhc2tSZW5kZXJlciAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChkZXRhaWw6IHsgdGFza1JlY29yZDogVGFza01vZGVsLCByZW5kZXJEYXRhOiB7IGNsczogRG9tQ2xhc3NMaXN0fHN0cmluZywgc3R5bGU6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCB3cmFwcGVyQ2xzOiBEb21DbGFzc0xpc3R8c3RyaW5nLCBpY29uQ2xzOiBEb21DbGFzc0xpc3R8c3RyaW5nIH0gfSwgaW5kaWNhdG9yczogVGltZVNwYW5bXXxUaW1lU3BhbkNvbmZpZ1tdKSA9PiBzdHJpbmd8RG9tQ29uZmlnfERvbUNvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIHRiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChHYW50dENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIHRlcm1pbmFsQ2xzICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0ZXJtaW5hbFNpZGVzICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSB0aW1lQXhpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBUaW1lQXhpc0NvbmZpZ3xUaW1lQXhpcztcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAncGxhaW4nfCd0b29sYmFyJ3xzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHZpc2libGVab29tRmFjdG9yICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB3ZWVrU3RhcnREYXkgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgd2VpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHpvb21LZWVwc09yaWdpbmFsVGltZXNwYW4gICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgem9vbU9uTW91c2VXaGVlbCAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB6b29tT25UaW1lQXhpc0RvdWJsZUNsaWNrICAgICAgICAgICAgICEgOiBib29sZWFuO1xuXG4gICAgLy8gQ29uZmlncyBhbmQgcHJvcGVydGllc1xuICAgIEBJbnB1dCgpIGFsaWduU2VsZiAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYWxsb3dEcm9wT25FdmVudEJhciAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYW5pbWF0ZVRyZWVOb2RlVG9nZ2xlICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXBwZW5kVG8gICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhc3NpZ25tZW50cyAgICAgICAgICAgICAgICAgICAhIDogQXNzaWdubWVudE1vZGVsW118QXNzaWdubWVudE1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgYmFyTWFyZ2luICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBjYWxlbmRhcnMgICAgICAgICAgICAgICAgICAgICAhIDogQ2FsZW5kYXJNb2RlbFtdfENhbGVuZGFyTW9kZWxDb25maWdbXTtcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjZWxsRWxsaXBzaXMgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2xsYXBzZWQgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb2x1bW4gICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNvbHVtbkxpbmVzICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbHVtbnMgICAgICAgICAgICAgICAgICAgICAgICEgOiBDb2x1bW5TdG9yZXxHYW50dENvbHVtbkNvbmZpZ1tdfENvbHVtblN0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNyZWF0aW9uVG9vbHRpcFRlbXBsYXRlICAgICAgICEgOiAoZGF0YTogeyBzb3VyY2U6IFRpbWVTcGFuLCB0YXJnZXQ6IFRpbWVTcGFuLCBmcm9tU2lkZTogc3RyaW5nLCB0b1NpZGU6IHN0cmluZywgdmFsaWQ6IGJvb2xlYW4gfSkgPT4gc3RyaW5nfERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0W118TW9kZWxbXXxNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIGRhdGFzZXQgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8UmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBkZXBlbmRlbmNpZXMgICAgICAgICAgICAgICAgICAhIDogRGVwZW5kZW5jeU1vZGVsW118RGVwZW5kZW5jeU1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J2luZXJ0JztcbiAgICBASW5wdXQoKSBkaXNwbGF5RGF0ZUZvcm1hdCAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVtcHR5VGV4dCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8RW1wdHlUZXh0RG9tQ29uZmlnO1xuICAgIEBJbnB1dCgpIGVuYWJsZUV2ZW50QW5pbWF0aW9ucyAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGVuYWJsZVVuZG9SZWRvS2V5cyAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGVuZERhdGUgICAgICAgICAgICAgICAgICAgICAgICEgOiBEYXRlfHN0cmluZztcbiAgICBASW5wdXQoKSBldmVudENvbG9yICAgICAgICAgICAgICAgICAgICAhIDogRXZlbnRDb2xvcjtcbiAgICBASW5wdXQoKSBldmVudFN0eWxlICAgICAgICAgICAgICAgICAgICAhIDogJ3RvbmFsJ3wnZmlsbGVkJ3wnYm9yZGVyZWQnfCd0cmFjZWQnfCdvdXRsaW5lZCd8J2luZGVudGVkJ3wnbGluZSd8J2Rhc2hlZCd8J21pbmltYWwnfCdyb3VuZGVkJ3wnY2FsZW5kYXInfCdpbnRlcmRheSd8J2dhbnR0J3xudWxsO1xuICAgIEBJbnB1dCgpIGV4dHJhRGF0YSAgICAgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgZmlsbFRpY2tzICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZmxleCAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgZm9yY2VGaXQgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGlkZGVuICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUZvb3RlcnMgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUhlYWRlcnMgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZVJvd0hvdmVyICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbmZpbml0ZVNjcm9sbCAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpbnB1dEZpZWxkQWxpZ24gICAgICAgICAgICAgICAhIDogJ3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSBpbnNlcnRCZWZvcmUgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEZpcnN0ICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkga2V5TWFwICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz47XG4gICAgQElucHV0KCkgbGFiZWxQb3NpdGlvbiAgICAgICAgICAgICAgICAgISA6ICdiZWZvcmUnfCdhYm92ZSd8J2FsaWduLWJlZm9yZSd8J2F1dG8nfG51bGw7XG4gICAgQElucHV0KCkgbG9uZ1ByZXNzVGltZSAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXJnaW4gICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhIZWlnaHQgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhXaWR0aCAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhab29tTGV2ZWwgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pblpvb21MZXZlbCAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHJlc2VydmVTY3JvbGwgICAgICAgICAgICAgICAgISA6IFByZXNlcnZlU2Nyb2xsT3B0aW9uc3xib29sZWFuO1xuICAgIEBJbnB1dCgpIHByZXNldHMgICAgICAgICAgICAgICAgICAgICAgICEgOiBQcmVzZXRTdG9yZXxWaWV3UHJlc2V0Q29uZmlnW107XG4gICAgQElucHV0KCkgcHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgISA6IFByb2plY3RNb2RlbHxQcm9qZWN0TW9kZWxDb25maWd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlY3VycmVuY2VDb25maXJtYXRpb25Qb3B1cCAgICEgOiBSZWN1cnJlbmNlQ29uZmlybWF0aW9uUG9wdXBDb25maWd8UmVjdXJyZW5jZUNvbmZpcm1hdGlvblBvcHVwO1xuICAgIEBJbnB1dCgpIHJlbmRpdGlvbiAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPnxudWxsO1xuICAgIEBJbnB1dCgpIHJlc291cmNlcyAgICAgICAgICAgICAgICAgICAgICEgOiBSZXNvdXJjZU1vZGVsW118UmVzb3VyY2VNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIHJvd0hlaWdodCAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgcm93TGluZXMgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcnRsICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2Nyb2xsYWJsZSAgICAgICAgICAgICAgICAgICAgISA6IFNjcm9sbGVyfGJvb2xlYW58U2Nyb2xsZXJDb25maWc7XG4gICAgQElucHV0KCkgc2Nyb2xsVGFza0ludG9WaWV3T25DZWxsQ2xpY2sgISA6IGJvb2xlYW58QnJ5bnR1bVNjcm9sbE9wdGlvbnM7XG4gICAgQElucHV0KCkgc2VsZWN0aW9uTW9kZSAgICAgICAgICAgICAgICAgISA6IEdyaWRTZWxlY3Rpb25Nb2RlO1xuICAgIEBJbnB1dCgpIHNob3dUb29sdGlwICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dVbnNjaGVkdWxlZFRhc2tzICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNuYXAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNwYW4gICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc3RhcnREYXRlICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHN0YXRlU2V0dGluZ3MgICAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIHJlc3RvcmVVbmNvbmZpZ3VyZWRDb2x1bW5zPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgc3RvcmUgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFN0b3JlfFN0b3JlQ29uZmlnfEFqYXhTdG9yZXxBamF4U3RvcmVDb25maWc7XG4gICAgQElucHV0KCkgc3VwcHJlc3NGaXQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdGFza3MgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFRhc2tNb2RlbFtdfFRhc2tNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIHRhc2tTdG9yZSAgICAgICAgICAgICAgICAgICAgICEgOiBUYXNrU3RvcmV8VGFza1N0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRlcm1pbmFsSGlkZURlbGF5ICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgdGVybWluYWxPZmZzZXQgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0ZXJtaW5hbFNob3dEZWxheSAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHRlcm1pbmFsU2l6ZSAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHRpY2tTaXplICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgdGltZVJhbmdlcyAgICAgICAgICAgICAgICAgICAgISA6IFRpbWVTcGFuW118VGltZVNwYW5Db25maWdbXTtcbiAgICBASW5wdXQoKSB0aW1lUmVzb2x1dGlvbiAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBpbmNyZW1lbnQ/OiBudW1iZXJcbiAgICAgICAgdW5pdD86IER1cmF0aW9uVW5pdFxuICAgIH18bnVtYmVyO1xuICAgIEBJbnB1dCgpIHRpbWVab25lICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIHRpdGxlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdG9nZ2xlUGFyZW50VGFza3NPbkNsaWNrICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdG9vbHMgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIFRvb2x8VG9vbENvbmZpZz58bnVsbHxSZWNvcmQ8c3RyaW5nLCBUb29sPnxSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPjtcbiAgICBASW5wdXQoKSB0b29sdGlwVGVtcGxhdGUgICAgICAgICAgICAgICAhIDogKGRlcGVuZGVuY3k6IERlcGVuZGVuY3lCYXNlTW9kZWwpID0+IHN0cmluZ3xEb21Db25maWc7XG4gICAgQElucHV0KCkgdHJhbnNpdGlvbiAgICAgICAgICAgICAgICAgICAgISA6IHtcbiAgICAgICAgaW5zZXJ0UmVjb3JkPzogYm9vbGVhblxuICAgICAgICByZW1vdmVSZWNvcmQ/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZUNvbHVtbj86IGJvb2xlYW5cbiAgICAgICAgZXhwYW5kQ29sbGFwc2VDb2x1bW4/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZVJlZ2lvbj86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlVHJlZU5vZGU/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZUdyb3VwPzogYm9vbGVhblxuICAgICAgICBmaWx0ZXJSZW1vdmFsPzogYm9vbGVhblxuICAgICAgICByZW1vdmVFdmVudD86IGJvb2xlYW5cbiAgICAgICAgY2hhbmdlRXZlbnQ/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uRHVyYXRpb24gICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHVzZUNvbnRleHR1YWxSZWN1cnJlbmNlUnVsZXMgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHZpZXdQcmVzZXQgICAgICAgICAgICAgICAgICAgICEgOiBWaWV3UHJlc2V0fFZpZXdQcmVzZXRDb25maWd8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHZpc2libGVEYXRlICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8RGF0ZXxWaXNpYmxlRGF0ZTtcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSB3b3JraW5nVGltZSAgICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBmcm9tRGF5PzogbnVtYmVyXG4gICAgICAgIHRvRGF5PzogbnVtYmVyXG4gICAgICAgIGZyb21Ib3VyPzogbnVtYmVyXG4gICAgICAgIHRvSG91cj86IG51bWJlclxuICAgIH07XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBjYWxlbmRhck1hbmFnZXJTdG9yZSAhIDogQ2FsZW5kYXJNYW5hZ2VyU3RvcmU7XG4gICAgQElucHV0KCkgZm9jdXNWaXNpYmxlICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGFzQ2hhbmdlcyAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgb3JpZ2luYWxTdG9yZSAgICAgICAgISA6IFN0b3JlO1xuICAgIEBJbnB1dCgpIHBhcmVudCAgICAgICAgICAgICAgICEgOiBXaWRnZXQ7XG4gICAgQElucHV0KCkgc2Nyb2xsTGVmdCAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzY3JvbGxUb3AgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHNjcm9sbFggICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRDZWxsICAgICAgICAgISA6IEdyaWRMb2NhdGlvbnxHcmlkTG9jYXRpb25Db25maWc7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRDZWxscyAgICAgICAgISA6IEdyaWRMb2NhdGlvbltdfEdyaWRMb2NhdGlvbkNvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkUmVjb3JkICAgICAgICEgOiBNb2RlbDtcbiAgICBASW5wdXQoKSBzZWxlY3RlZFJlY29yZHMgICAgICAhIDogTW9kZWxbXXxudW1iZXJbXTtcbiAgICBASW5wdXQoKSBzZWxlY3RlZFJvd3MgICAgICAgICAhIDogTW9kZWxbXXxudW1iZXJbXTtcbiAgICBASW5wdXQoKSBzdGF0ZSAgICAgICAgICAgICAgICAhIDogVGltZWxpbmVTdGF0ZUluZm87XG4gICAgQElucHV0KCkgdG9vbHRpcCAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnO1xuICAgIEBJbnB1dCgpIHpvb21MZXZlbCAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBGZWF0dXJlc1xuICAgIEBJbnB1dCgpIGFpRmlsdGVyRmVhdHVyZSAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QUlGaWx0ZXJ8QUlGaWx0ZXJDb25maWc7XG4gICAgQElucHV0KCkgYmFzZWxpbmVzRmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xCYXNlbGluZXN8QmFzZWxpbmVzQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNlbGxDb3B5UGFzdGVGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbENvcHlQYXN0ZXxDZWxsQ29weVBhc3RlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNlbGxFZGl0RmVhdHVyZSAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbEVkaXR8Q2VsbEVkaXRDb25maWc7XG4gICAgQElucHV0KCkgY2VsbE1lbnVGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsTWVudXxDZWxsTWVudUNvbmZpZztcbiAgICBASW5wdXQoKSBjZWxsVG9vbHRpcEZlYXR1cmUgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxUb29sdGlwfENlbGxUb29sdGlwQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNoYXJ0c0ZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2hhcnRzfENoYXJ0c0NvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5BdXRvV2lkdGhGZWF0dXJlICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtbkF1dG9XaWR0aHxDb2x1bW5BdXRvV2lkdGhDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uRHJhZ1Rvb2xiYXJGZWF0dXJlICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5EcmFnVG9vbGJhcnxDb2x1bW5EcmFnVG9vbGJhckNvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5MaW5lc0ZlYXR1cmUgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtbkxpbmVzfENvbHVtbkxpbmVzQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbHVtblBpY2tlckZlYXR1cmUgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUGlja2VyfENvbHVtblBpY2tlckNvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5SZW5hbWVGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlbmFtZXxDb2x1bW5SZW5hbWVDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUmVvcmRlckZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZW9yZGVyfENvbHVtblJlb3JkZXJDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUmVzaXplRmVhdHVyZSAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZXNpemV8Q29sdW1uUmVzaXplQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNyaXRpY2FsUGF0aHNGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q3JpdGljYWxQYXRoc3xDcml0aWNhbFBhdGhzQ29uZmlnO1xuICAgIEBJbnB1dCgpIGRlcGVuZGVuY2llc0ZlYXR1cmUgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RGVwZW5kZW5jaWVzfERlcGVuZGVuY2llc0NvbmZpZztcbiAgICBASW5wdXQoKSBkZXBlbmRlbmN5RWRpdEZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfERlcGVuZGVuY3lFZGl0fERlcGVuZGVuY3lFZGl0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGV2ZW50RmlsdGVyRmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RXZlbnRGaWx0ZXJ8RXZlbnRGaWx0ZXJDb25maWc7XG4gICAgQElucHV0KCkgZXZlbnRTZWdtZW50c0ZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xFdmVudFNlZ21lbnRzfEV2ZW50U2VnbWVudHNDb25maWc7XG4gICAgQElucHV0KCkgZXhjZWxFeHBvcnRlckZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcmlkRXhjZWxFeHBvcnRlcnxHcmlkRXhjZWxFeHBvcnRlckNvbmZpZztcbiAgICBASW5wdXQoKSBmaWxlRHJvcEZlYXR1cmUgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbGVEcm9wfEZpbGVEcm9wQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbGxIYW5kbGVGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsbEhhbmRsZXxGaWxsSGFuZGxlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbHRlckZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyfEZpbHRlckNvbmZpZztcbiAgICBASW5wdXQoKSBmaWx0ZXJCYXJGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbHRlckJhcnxGaWx0ZXJCYXJDb25maWc7XG4gICAgQElucHV0KCkgZ3JvdXBGZWF0dXJlICAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcm91cHxHcm91cENvbmZpZztcbiAgICBASW5wdXQoKSBncm91cFN1bW1hcnlGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRHcm91cFN1bW1hcnl8R3JpZEdyb3VwU3VtbWFyeUNvbmZpZztcbiAgICBASW5wdXQoKSBoZWFkZXJNZW51RmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlck1lbnV8SGVhZGVyTWVudUNvbmZpZztcbiAgICBASW5wdXQoKSBoZWFkZXJab29tRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlclpvb218SGVhZGVyWm9vbUNvbmZpZztcbiAgICBASW5wdXQoKSBpbmRpY2F0b3JzRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEluZGljYXRvcnN8SW5kaWNhdG9yc0NvbmZpZztcbiAgICBASW5wdXQoKSBsYWJlbHNGZWF0dXJlICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfExhYmVsc3xMYWJlbHNDb25maWc7XG4gICAgQElucHV0KCkgbG9ja1Jvd3NGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcmlkTG9ja1Jvd3N8R3JpZExvY2tSb3dzQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1lcmdlQ2VsbHNGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TWVyZ2VDZWxsc3xNZXJnZUNlbGxzQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1zcEV4cG9ydEZlYXR1cmUgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TXNwRXhwb3J0fE1zcEV4cG9ydENvbmZpZztcbiAgICBASW5wdXQoKSBub25Xb3JraW5nVGltZUZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfE5vbldvcmtpbmdUaW1lfE5vbldvcmtpbmdUaW1lQ29uZmlnO1xuICAgIEBJbnB1dCgpIHBhbkZlYXR1cmUgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UGFufFBhbkNvbmZpZztcbiAgICBASW5wdXQoKSBwYXJlbnRBcmVhRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBhcmVudEFyZWF8UGFyZW50QXJlYUNvbmZpZztcbiAgICBASW5wdXQoKSBwZGZFeHBvcnRGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBkZkV4cG9ydHxQZGZFeHBvcnRDb25maWc7XG4gICAgQElucHV0KCkgcGVyY2VudEJhckZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQZXJjZW50QmFyfFBlcmNlbnRCYXJDb25maWc7XG4gICAgQElucHV0KCkgcGluQ29sdW1uc0ZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQaW5Db2x1bW5zfFBpbkNvbHVtbnNDb25maWc7XG4gICAgQElucHV0KCkgcHJpbnRGZWF0dXJlICAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcmludHxQcmludENvbmZpZztcbiAgICBASW5wdXQoKSBwcm9ncmVzc0xpbmVGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFByb2dyZXNzTGluZXxQcm9ncmVzc0xpbmVDb25maWc7XG4gICAgQElucHV0KCkgcHJvamVjdEVkaXRGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcm9qZWN0RWRpdHxQcm9qZWN0RWRpdENvbmZpZztcbiAgICBASW5wdXQoKSBwcm9qZWN0TGluZXNGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFByb2plY3RMaW5lc3xQcm9qZWN0TGluZXNDb25maWc7XG4gICAgQElucHV0KCkgcXVpY2tGaW5kRmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xRdWlja0ZpbmR8UXVpY2tGaW5kQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJlZ2lvblJlc2l6ZUZlYXR1cmUgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UmVnaW9uUmVzaXplfFJlZ2lvblJlc2l6ZUNvbmZpZztcbiAgICBASW5wdXQoKSByb2xsdXBzRmVhdHVyZSAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvbGx1cHN8Um9sbHVwc0NvbmZpZztcbiAgICBASW5wdXQoKSByb3dDb3B5UGFzdGVGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0NvcHlQYXN0ZXxSb3dDb3B5UGFzdGVDb25maWc7XG4gICAgQElucHV0KCkgcm93RWRpdEZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dFZGl0fFJvd0VkaXRDb25maWc7XG4gICAgQElucHV0KCkgcm93RXhwYW5kZXJGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dFeHBhbmRlcnxSb3dFeHBhbmRlckNvbmZpZztcbiAgICBASW5wdXQoKSByb3dSZW9yZGVyRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd1Jlb3JkZXJ8Um93UmVvcmRlckNvbmZpZztcbiAgICBASW5wdXQoKSByb3dSZXNpemVGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRSb3dSZXNpemV8R3JpZFJvd1Jlc2l6ZUNvbmZpZztcbiAgICBASW5wdXQoKSBzY2hlZHVsZU1lbnVGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNjaGVkdWxlTWVudXxTY2hlZHVsZU1lbnVDb25maWc7XG4gICAgQElucHV0KCkgc2NoZWR1bGVUb29sdGlwRmVhdHVyZSAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTY2hlZHVsZVRvb2x0aXB8U2NoZWR1bGVUb29sdGlwQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNjcm9sbEJ1dHRvbnNGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U2Nyb2xsQnV0dG9uc3xTY3JvbGxCdXR0b25zQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNlYXJjaEZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U2VhcmNofFNlYXJjaENvbmZpZztcbiAgICBASW5wdXQoKSBzb3J0RmVhdHVyZSAgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNvcnR8U29ydENvbmZpZztcbiAgICBASW5wdXQoKSBzcGxpdEZlYXR1cmUgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRTcGxpdHxHcmlkU3BsaXRDb25maWc7XG4gICAgQElucHV0KCkgc3RpY2t5Q2VsbHNGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdGlja3lDZWxsc3xTdGlja3lDZWxsc0NvbmZpZztcbiAgICBASW5wdXQoKSBzdHJpcGVGZWF0dXJlICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN0cmlwZXxTdHJpcGVDb25maWc7XG4gICAgQElucHV0KCkgc3VtbWFyeUZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdW1tYXJ5fFN1bW1hcnlDb25maWc7XG4gICAgQElucHV0KCkgdGFza0NvcHlQYXN0ZUZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrQ29weVBhc3RlfFRhc2tDb3B5UGFzdGVDb25maWc7XG4gICAgQElucHV0KCkgdGFza0RyYWdGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrRHJhZ3xUYXNrRHJhZ0NvbmZpZztcbiAgICBASW5wdXQoKSB0YXNrRHJhZ0NyZWF0ZUZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRhc2tEcmFnQ3JlYXRlfFRhc2tEcmFnQ3JlYXRlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhc2tFZGl0RmVhdHVyZSAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza0VkaXR8VGFza0VkaXRDb25maWc7XG4gICAgQElucHV0KCkgdGFza01lbnVGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrTWVudXxUYXNrTWVudUNvbmZpZztcbiAgICBASW5wdXQoKSB0YXNrTm9uV29ya2luZ1RpbWVGZWF0dXJlICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRhc2tOb25Xb3JraW5nVGltZXxUYXNrTm9uV29ya2luZ1RpbWVDb25maWc7XG4gICAgQElucHV0KCkgdGFza1Jlc2l6ZUZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrUmVzaXplfFRhc2tSZXNpemVDb25maWc7XG4gICAgQElucHV0KCkgdGFza1NlZ21lbnREcmFnRmVhdHVyZSAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrU2VnbWVudERyYWd8VGFza1NlZ21lbnREcmFnQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhc2tTZWdtZW50UmVzaXplRmVhdHVyZSAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza1NlZ21lbnRSZXNpemV8VGFza1NlZ21lbnRSZXNpemVDb25maWc7XG4gICAgQElucHV0KCkgdGFza1Rvb2x0aXBGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrVG9vbHRpcHxUYXNrVG9vbHRpcENvbmZpZztcbiAgICBASW5wdXQoKSB0aW1lQXhpc0hlYWRlck1lbnVGZWF0dXJlICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRpbWVBeGlzSGVhZGVyTWVudXxUaW1lQXhpc0hlYWRlck1lbnVDb25maWc7XG4gICAgQElucHV0KCkgdGltZWxpbmVDaGFydEZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUaW1lbGluZUNoYXJ0fFRpbWVsaW5lQ2hhcnRDb25maWc7XG4gICAgQElucHV0KCkgdGltZVJhbmdlc0ZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUaW1lUmFuZ2VzfFRpbWVSYW5nZXNDb25maWc7XG4gICAgQElucHV0KCkgdGltZVNwYW5IaWdobGlnaHRGZWF0dXJlICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUaW1lU3BhbkhpZ2hsaWdodHxUaW1lU3BhbkhpZ2hsaWdodENvbmZpZztcbiAgICBASW5wdXQoKSB0cmVlRmVhdHVyZSAgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWV8VHJlZUNvbmZpZztcbiAgICBASW5wdXQoKSB0cmVlR3JvdXBGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWVHcm91cHxUcmVlR3JvdXBDb25maWc7XG4gICAgQElucHV0KCkgdmVyc2lvbnNGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xWZXJzaW9uc3xWZXJzaW9uc0NvbmZpZztcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IGFmdGVyIGEgZGVwZW5kZW5jeSBkcmFnIGNyZWF0aW9uIG9wZXJhdGlvbiBmaW5pc2hlZCwgbm8gbWF0dGVyIHRvIG91dGNvbWVcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGV2ZW50LnNvdXJjZSBUaGUgc291cmNlIHRhc2tcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgdGFza1xuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkRlcGVuZGVuY3lCYXNlTW9kZWx9IGV2ZW50LmRlcGVuZGVuY3kgVGhlIGNyZWF0ZWQgZGVwZW5kZW5jeVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkFmdGVyRGVwZW5kZW5jeUNyZWF0ZURyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuLCB0YXJnZXQ6IFRpbWVTcGFuLCBkZXBlbmRlbmN5OiBEZXBlbmRlbmN5QmFzZU1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYWZ0ZXIgYSBkZXBlbmRlbmN5IGlzIHN1Y2Nlc3NmdWxseSBzYXZlZCB1c2luZyB0aGVcbiAgICAgKiBkZXBlbmRlbmN5IGVkaXQgcG9wdXBcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyIGluc3RhbmNlIG9yIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsfSBldmVudC5kZXBlbmRlbmN5UmVjb3JkIFRoZSBkZXBlbmRlbmN5IGFib3V0IHRvIGJlIHNhdmVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJEZXBlbmRlbmN5U2F2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYXQgdGhlIGVuZCBvZiB0aGUgZHJhZyBjcmVhdGUgZ2VzdHVyZSB3aGV0aGVyIG9yIG5vdFxuICAgICAqIGEgdGFzayB3YXMgc2NoZWR1bGVkIGJ5IHRoZSBnZXN0dXJlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnByb3h5RWxlbWVudCBUaGUgZWxlbWVudCBzaG93aW5nIHRoZSBkcmFnIGNyZWF0aW9uIHpvbmUuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJEcmFnQ3JlYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgcHJveHlFbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgYWZ0ZXIgZWRpdG9yIGlzIGNsb3NlZCBieSBhbnkgYWN0aW9uIC0gc2F2ZSwgZGVsZXRlIG9yIGNhbmNlbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXJcbiAgICAgKiBAcGFyYW0geydzYXZlJywnZGVsZXRlJywnY2FuY2VsJ30gZXZlbnQuYWN0aW9uIFRoZSBhY3Rpb24gdGhhdCB3YXMgdGFrZW4gdG8gZW5kIHRoZSBlZGl0LiBPbmUgb2YgJ3NhdmUnLCAnZGVsZXRlJyBvciAnY2FuY2VsJ1xuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmZlYXR1cmUuRXZlbnRFZGl0fSBldmVudC5ldmVudEVkaXQgVGhlIGV2ZW50RWRpdCBmZWF0dXJlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgVGhlIHJlY29yZCB0aGF0IGhhcyBiZWVuIGVkaXRlZC5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJSZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBUaGUgUmVzb3VyY2UgcmVjb3JkIGZvciB0aGUgZXZlbnQuIElmIHRoZSBldmVudCBpcyBiZWluZyBjcmVhdGVkLCBpdCB3aWxsIG5vdCBjb250YWluIGEgcmVzb3VyY2UsIHNvIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcmVzb3VyY2UgdGhlIGV2ZW50IGlzIGJlaW5nIGNyZWF0ZWQgZm9yLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmV2ZW50RWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCByZXByZXNlbnRzIHRoZSBldmVudCBpbiB0aGUgc2NoZWR1bGVyIGRpc3BsYXkuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Qb3B1cH0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3JcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BZnRlckV2ZW50RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBhY3Rpb246ICdzYXZlJ3wnZGVsZXRlJ3wnY2FuY2VsJywgZXZlbnRFZGl0OiBFdmVudEVkaXQsIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgZWRpdG9yOiBQb3B1cCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGluc3RhbmNlIGFmdGVyIGFuIGV2ZW50IHJlY29yZCBpcyBzYXZlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby52aWV3LlNjaGVkdWxlclByb30gZXZlbnQuc291cmNlIFRoZSBTY2hlZHVsZXIgUHJvIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgVGhlIGV2ZW50IHJlY29yZCBhYm91dCB0byBiZSBzYXZlZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLndpZGdldC5UYXNrRWRpdG9yQmFzZX0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3Igd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJFdmVudFNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIGVkaXRvcjogVGFza0VkaXRvckJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgd2lkZ2V0IGluc3RhbmNlIGFmdGVyIHByb2plY3QgZWRpdGluZyBpcyBmaW5pc2hlZCBieSBhcHBseWluZyBjaGFuZ2VzIG9yXG4gICAgICogY2FuY2VsbGluZyB0aGVtLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlByb2plY3RNb2RlbH0gZXZlbnQucHJvamVjdFJlY29yZCBUaGUgZWRpdGVkIHByb2plY3QgcmVjb3JkXG4gICAgICogQHBhcmFtIHtHYW50dC53aWRnZXQuUHJvamVjdEVkaXRvcn0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3Igd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJQcm9qZWN0RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHByb2plY3RSZWNvcmQ6IFByb2plY3RNb2RlbCwgZWRpdG9yOiBQcm9qZWN0RWRpdG9yIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdpZGdldCBpbnN0YW5jZSBhZnRlciBhIHByb2plY3QgaXMgc2F2ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5Qcm9qZWN0TW9kZWx9IGV2ZW50LnByb2plY3RSZWNvcmQgVGhlIHByb2plY3QgYWJvdXQgdG8gYmUgc2F2ZWRcbiAgICAgKiBAcGFyYW0ge0dhbnR0LndpZGdldC5Qcm9qZWN0RWRpdG9yfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvciB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BZnRlclByb2plY3RTYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgcHJvamVjdFJlY29yZDogUHJvamVjdE1vZGVsLCBlZGl0b3I6IFByb2plY3RFZGl0b3IgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYWZ0ZXIgYSB0YXNrIGRyb3AsIHJlZ2FyZGxlc3MgaWYgdGhlIGRyb3AgdmFsaWRpdHlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbFtdfSBldmVudC50YXNrUmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudmFsaWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BZnRlclRhc2tEcm9wOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZHM6IFRhc2tNb2RlbFtdLCB2YWxpZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGluc3RhbmNlIGFmdGVyIHRhc2sgZWRpdGluZyBpcyBmaW5pc2hlZCBieSBhcHBseWluZyBjaGFuZ2VzLCBjYW5jZWxsaW5nIHRoZW1cbiAgICAgKiBvciBkZWxldGluZyB0aGUgdGFzayByZWNvcmQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC50YXNrUmVjb3JkIFRhc2sgcmVjb3JkIHVzZWQgaW4gdGhlIHRhc2sgZWRpdG9yXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ud2lkZ2V0LlRhc2tFZGl0b3JCYXNlfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvciB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BZnRlclRhc2tFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXJQcm8sIHRhc2tSZWNvcmQ6IEV2ZW50TW9kZWwsIGVkaXRvcjogVGFza0VkaXRvckJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBpbnN0YW5jZSBhZnRlciBhIHRhc2sgaXMgc2F2ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8udmlldy5TY2hlZHVsZXJQcm99IGV2ZW50LnNvdXJjZSBUaGUgU2NoZWR1bGVyIFBybyBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIHRhc2sgYWJvdXQgdG8gYmUgc2F2ZWRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby53aWRnZXQuVGFza0VkaXRvckJhc2V9IGV2ZW50LmVkaXRvciBUaGUgZWRpdG9yIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkFmdGVyVGFza1NhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgdGFza1JlY29yZDogRXZlbnRNb2RlbCwgZWRpdG9yOiBUYXNrRWRpdG9yQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBhZnRlciBhIHRhc2sgZHJvcCwgcmVnYXJkbGVzcyBpZiB0aGUgZHJvcCB2YWxpZGl0eVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsW119IGV2ZW50LnRhc2tSZWNvcmRzIERyb3BwZWQgc2VnbWVudHNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbGlkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJUYXNrU2VnbWVudERyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkczogVGFza01vZGVsW10sIHZhbGlkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYW4gYXNzaWdubWVudCBpcyByZW1vdmVkLiBDYW4gYmUgdHJpZ2dlcmVkIGJ5IHVzZXIgcHJlc3NpbmcgW0RFTEVURV0gb3IgW0JBQ0tTUEFDRV0gb3JcbiAgICAgKiBieSB0aGUgZXZlbnQgZWRpdG9yLiBDYW4gZm9yIGV4YW1wbGUgYmUgdXNlZCB0byBkaXNwbGF5IGEgY3VzdG9tIGRpYWxvZyB0byBjb25maXJtIGRlbGV0aW9uLCBpbiB3aGljaFxuICAgICAqIGNhc2UgcmVjb3JkcyBzaG91bGQgYmUgXCJtYW51YWxseVwiIHJlbW92ZWQgYWZ0ZXIgY29uZmlybWF0aW9uOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZUFzc2lnbm1lbnREZWxldGUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckFzc2lnbm1lbnRNb2RlbFtdfSBldmVudC5hc3NpZ25tZW50UmVjb3JkcyBUaGUgYXNzaWdubWVudCByZWNvcmRzIGFib3V0IHRvIGJlIGRlbGV0ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dCBBZGRpdGlvbmFsIHJlbW92YWwgY29udGV4dDpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBldmVudC5jb250ZXh0LmZpbmFsaXplIEZ1bmN0aW9uIHRvIGNhbGwgdG8gZmluYWxpemUgdGhlIHJlbW92YWwuIFVzZWQgdG8gYXN5bmNocm9ub3VzbHkgZGVjaWRlIHRvIHJlbW92ZSB0aGUgcmVjb3JkcyBvciBub3QuIFByb3ZpZGUgYGZhbHNlYCB0byB0aGUgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgcmVtb3ZhbC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQuZmluYWxpemUucmVtb3ZlUmVjb3JkcyBQcm92aWRlIGBmYWxzZWAgdG8gdGhlIGZ1bmN0aW9uIHRvIHByZXZlbnQgdGhlIHJlbW92YWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQXNzaWdubWVudERlbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBhc3NpZ25tZW50UmVjb3JkczogU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsW10sIGNvbnRleHQ6IHsgZmluYWxpemU6IHsgcmVtb3ZlUmVjb3Jkcz86IGJvb2xlYW4gfSB9IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgY2VsbCBlZGl0aW5nIGlzIGNhbmNlbGVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGNhbmNlbGxhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2FuY2VsQ2VsbEVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGVkaXRvckNvbnRleHQ6IEdyaWRMb2NhdGlvbiB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIHJvdyBlZGl0aW5nIGlzIGNhbmNlbGVkLCByZXR1cm4gZmFsc2UgdG8gc2lnbmFsIHRoYXQgdGhlIHZhbHVlIGlzIGludmFsaWQgYW5kIGVkaXRpbmcgc2hvdWxkIG5vdCBiZSBmaW5hbGl6ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlQ2FuY2VsUm93RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUYXJnZXQgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDYW5jZWxSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgZWRpdGluZyBzdGFydHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZWRpdGluZ1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q2VsbEVkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2VsbEVkaXRTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGRlbGV0aW5nIGEgcmFuZ2Ugb2Ygc2VsZWN0ZWQgY2VsbCB2YWx1ZXMgYnkgcHJlc3NpbmcgYEJhY2tzcGFjZWAgb3IgYERlbGBcbiAgICAgKiBidXR0b25zIHdoaWxlIFthdXRvRWRpdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbEVkaXQjY29uZmlnLWF1dG9FZGl0KSBpcyBzZXQgdG8gYHRydWVgLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGVkaXRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHsoR3JpZC51dGlsLkdyaWRMb2NhdGlvbnxDb3JlLmRhdGEuTW9kZWwpW119IGV2ZW50LmdyaWRTZWxlY3Rpb24gQW4gYXJyYXkgb2YgY2VsbCBzZWxlY3RvcnMgb3IgcmVjb3JkcyB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2YWx1ZXMgZGVsZXRlZCAodGhlIHJlY29yZHMgdGhlbXNlbHZlcyB3aWxsIG5vdCBnZXQgZGVsZXRlZCwgb25seSB2aXNpYmxlIGNvbHVtbiB2YWx1ZXMpLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNlbGxSYW5nZURlbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZ3JpZFNlbGVjdGlvbjogKEdyaWRMb2NhdGlvbnxNb2RlbClbXSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGZvciBlYWNoIHNlbGVjdGVkIHJlY29yZCBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGVkaXRpbmcgYSByYW5nZSBvZiBzZWxlY3RlZCBjZWxsIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIEN1cnJlbnQgc2VsZWN0ZWQgcmVjb3JkIGZyb20gdGhlIHJhbmdlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmZpZWxkIFRoZSBmaWVsZCBiZWluZyBjaGFuZ2VkXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50LnZhbHVlIFRoZSB2YWx1ZSBiZWluZyBzZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDZWxsUmFuZ2VFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCwgZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgcHJpb3IgdG8gc3RhcnRpbmcgYSBjb2x1bW4gZHJhZyBnZXN0dXJlLiBUaGUgZHJhZyBpcyBjYW5jZWxlZCBpZiBhIGxpc3RlbmVyIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGRyYWdnZWQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtbkRyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGV2ZW50OiBFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiBpcyBkcm9wcGVkLCBhbmQgeW91IGNhbiByZXR1cm4gZmFsc2UgZnJvbSBhIGxpc3RlbmVyIHRvIGFib3J0IHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuaW5zZXJ0QmVmb3JlIFRoZSBjb2x1bW4gYmVmb3JlIHdoaWNoIHRoZSBkcmFnZ2VkIGNvbHVtbiB3aWxsIGJlIGluc2VydGVkLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5uZXdQYXJlbnQgVGhlIG5ldyBwYXJlbnQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5yZWdpb24gVGhlIHJlZ2lvbiB3aGVyZSB0aGUgY29sdW1uIHdhcyBkcm9wcGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtbkRyb3BGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGluc2VydEJlZm9yZTogQ29sdW1uLCBuZXdQYXJlbnQ6IENvbHVtbiwgZXZlbnQ6IEV2ZW50LCByZWdpb246IHN0cmluZyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgcHJpb3IgdG8gc3RhcnRpbmcgYSBjb2x1bW4gcmVzaXplIGdlc3R1cmUuIFRoZSByZXNpemUgaXMgY2FuY2VsZWQgaWYgYSBsaXN0ZW5lciByZXR1cm5zXG4gICAgICogYGZhbHNlYC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDb2x1bW5SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBkb21FdmVudDogRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGEgY29weSBhY3Rpb24gaXMgcGVyZm9ybWVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbHMgVGhlIGNlbGxzIGFib3V0IHRvIGJlIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZGF0YSBUaGUgc3RyaW5nIGRhdGEgYWJvdXQgdG8gYmUgY29waWVkIG9yIGN1dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuaXNDdXQgYHRydWVgIGlmIHRoaXMgaXMgYSBjdXQgYWN0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmVudGl0eU5hbWUgJ2NlbGwnIHRvIGRpc3Rpbmd1aXNoIHRoaXMgZXZlbnQgZnJvbSBvdGhlciBiZWZvcmVDb3B5IGV2ZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvcHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNlbGxzOiBHcmlkTG9jYXRpb25bXSwgZGF0YTogc3RyaW5nLCBpc0N1dDogYm9vbGVhbiwgZW50aXR5TmFtZTogc3RyaW5nIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBDU1YgZXhwb3J0IHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIHRoZSBleHBvcnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RXhwb3J0Q29uZmlnfSBldmVudC5jb25maWcgRXhwb3J0IGNvbmZpZ1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1uW119IGV2ZW50LmNvbHVtbnMgQW4gYXJyYXkgb2YgY29sdW1ucyB0byBleHBvcnRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5yb3dzIEFuIGFycmF5IG9mIHJlY29yZHMgdG8gZXhwb3J0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmxpbmVEZWxpbWl0ZXIgVGhlIENTViBkZWxpbWl0ZXIgdG8gc2VwYXJhdGUgbGluZXNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY29sdW1uRGVsaW1pdGVyIFRoZSBDU1YgZGVsaW1pdGVyIHRvIHNlcGFyYXRlIHZhbHVlcyBvbiBvbmUgbGluZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNTVkV4cG9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNvbmZpZzogRXhwb3J0Q29uZmlnLCBjb2x1bW5zOiBDb2x1bW5bXSwgcm93czogTW9kZWxbXSwgbGluZURlbGltaXRlcjogc3RyaW5nLCBjb2x1bW5EZWxpbWl0ZXI6IHN0cmluZyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBiZWZvcmUgYSBkZXBlbmRlbmN5IGlzIGFkZGVkIGZyb20gdGhlIGRlcGVuZGVuY3lcbiAgICAgKiBlZGl0IHBvcHVwXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlciBvciBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmZlYXR1cmUuU2NoZWR1bGVyRGVwZW5kZW5jeUVkaXR9IGV2ZW50LmRlcGVuZGVuY3lFZGl0IFRoZSBkZXBlbmRlbmN5IGVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVJlY29yZCBUaGUgZGVwZW5kZW5jeSBhYm91dCB0byBiZSBhZGRlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlcGVuZGVuY3lBZGQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeUVkaXQ6IFNjaGVkdWxlckRlcGVuZGVuY3lFZGl0LCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlci9HYW50dCBiZWZvcmUgYSBkZXBlbmRlbmN5IGNyZWF0aW9uIGRyYWcgb3BlcmF0aW9uIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG9cbiAgICAgKiBwcmV2ZW50IGl0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC5zb3VyY2UgVGhlIHNvdXJjZSB0YXNrXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVwZW5kZW5jeUNyZWF0ZURyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBTY2hlZHVsZXIvR2FudHQgd2hlbiBhIGRlcGVuZGVuY3kgZHJhZyBjcmVhdGlvbiBvcGVyYXRpb24gaXMgYWJvdXQgdG8gZmluYWxpemVcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGV2ZW50LnNvdXJjZSBUaGUgc291cmNlIHRhc2tcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgdGFza1xuICAgICAqIEBwYXJhbSB7J3N0YXJ0JywnZW5kJywndG9wJywnYm90dG9tJ30gZXZlbnQuZnJvbVNpZGUgVGhlIGZyb20gc2lkZSAoc3RhcnQgLyBlbmQgLyB0b3AgLyBib3R0b20pXG4gICAgICogQHBhcmFtIHsnc3RhcnQnLCdlbmQnLCd0b3AnLCdib3R0b20nfSBldmVudC50b1NpZGUgVGhlIHRvIHNpZGUgKHN0YXJ0IC8gZW5kIC8gdG9wIC8gYm90dG9tKVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlcGVuZGVuY3lDcmVhdGVGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVGltZVNwYW4sIHRhcmdldDogVGltZVNwYW4sIGZyb21TaWRlOiAnc3RhcnQnfCdlbmQnfCd0b3AnfCdib3R0b20nLCB0b1NpZGU6ICdzdGFydCd8J2VuZCd8J3RvcCd8J2JvdHRvbScgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYmVmb3JlIGEgZGVwZW5kZW5jeSBpcyBkZWxldGVkIGZyb20gdGhlIGRlcGVuZGVuY3lcbiAgICAgKiBlZGl0IHBvcHVwLCBvciB3aGVuIGNsaWNraW5nIHRoZSBkZWxldGUgaWNvbiBvbiBhIHNlbGVjdGVkIGRlcGVuZGVuY3kgbGluZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsfSBldmVudC5kZXBlbmRlbmN5UmVjb3JkIFRoZSBkZXBlbmRlbmN5IHJlY29yZCBhYm91dCB0byBiZSBkZWxldGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVwZW5kZW5jeURlbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYmVmb3JlIGFuIGRlcGVuZGVuY3kgaXMgZGlzcGxheWVkIGluIHRoZSBlZGl0b3IuXG4gICAgICogVGhpcyBtYXkgYmUgbGlzdGVuZWQgZm9yIHRvIGFsbG93IGFuIGFwcGxpY2F0aW9uIHRvIHRha2Ugb3ZlciBkZXBlbmRlbmN5IGVkaXRpbmcgZHV0aWVzLiBSZXR1cm4gYGZhbHNlYCB0b1xuICAgICAqIHN0b3AgdGhlIGRlZmF1bHQgZWRpdGluZyBVSSBmcm9tIGJlaW5nIHNob3duIG9yIGEgYFByb21pc2VgIHlpZWxkaW5nIGB0cnVlYCBvciBgZmFsc2VgIGZvciBhc3luYyB2ZXRvaW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXIgb3IgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5mZWF0dXJlLlNjaGVkdWxlckRlcGVuZGVuY3lFZGl0fSBldmVudC5kZXBlbmRlbmN5RWRpdCBUaGUgZGVwZW5kZW5jeUVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVJlY29yZCBUaGUgcmVjb3JkIGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBlZGl0b3IuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVwZW5kZW5jeUVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeUVkaXQ6IFNjaGVkdWxlckRlcGVuZGVuY3lFZGl0LCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiB0aGUgZWRpdG9yIGZvciBhIGRlcGVuZGVuY3kgaXMgYXZhaWxhYmxlLCBidXQgYmVmb3JlIGl0IGlzIHNob3duLiBBbGxvd3NcbiAgICAgKiBtYW5pcHVsYXRpbmcgZmllbGRzIGJlZm9yZSB0aGUgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXIgb3IgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5mZWF0dXJlLlNjaGVkdWxlckRlcGVuZGVuY3lFZGl0fSBldmVudC5kZXBlbmRlbmN5RWRpdCBUaGUgZGVwZW5kZW5jeUVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVJlY29yZCBUaGUgcmVjb3JkIGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Qb3B1cH0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3IgcG9wdXBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXBlbmRlbmN5RWRpdFNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeUVkaXQ6IFNjaGVkdWxlckRlcGVuZGVuY3lFZGl0LCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwsIGVkaXRvcjogUG9wdXAgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBiZWZvcmUgYSBkZXBlbmRlbmN5IGlzIHNhdmVkIHVzaW5nIHRoZSBkZXBlbmRlbmN5IGVkaXQgcG9wdXBcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyIG9yIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsfSBldmVudC5kZXBlbmRlbmN5UmVjb3JkIFRoZSBkZXBlbmRlbmN5IGFib3V0IHRvIGJlIHNhdmVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnZhbHVlcyBUaGUgbmV3IHZhbHVlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlcGVuZGVuY3lTYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRlcGVuZGVuY3lSZWNvcmQ6IFNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbCwgdmFsdWVzOiBvYmplY3QgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZHJhZyBnZXN0dXJlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmRcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmRhdGUgVGhlIGRhdGV0aW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJhZyBzdGFydCBwb2ludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEcmFnQ3JlYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBkYXRlOiBEYXRlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHRvIGFsbG93IGltcGxlbWVudGVyIHRvIHByZXZlbnQgaW1tZWRpYXRlIGZpbmFsaXphdGlvbiBieSBzZXR0aW5nIGBkYXRhLmNvbnRleHQuYXN5bmMgPSB0cnVlYFxuICAgICAqIGluIHRoZSBsaXN0ZW5lciwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBwb3B1cCBldGNcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVEcmFnQ3JlYXRlRmluYWxpemUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnByb3h5RWxlbWVudCBQcm94eSBlbGVtZW50LCByZXByZXNlbnRpbmcgZnV0dXJlIGV2ZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQuYXN5bmMgU2V0IHRydWUgdG8gaGFuZGxlIGRyYWcgY3JlYXRlIGFzeW5jaHJvbm91c2x5IChlLmcuIHRvIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uKVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LmNvbnRleHQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSBkcmFnIGNyZWF0ZS4gVGhpcyBtZXRob2QgYWNjZXB0cyBvbmUgYXJndW1lbnQ6IHBhc3MgdHJ1ZSB0byB1cGRhdGUgcmVjb3Jkcywgb3IgZmFsc2UsIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRHJhZ0NyZWF0ZUZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgcHJveHlFbGVtZW50OiBIVE1MRWxlbWVudCwgY29udGV4dDogeyBhc3luYzogYm9vbGVhbiwgZmluYWxpemU6IEZ1bmN0aW9uIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhbiBldmVudCBpcyByZW1vdmVkLiBDYW4gYmUgdHJpZ2dlcmVkIGJ5IHVzZXIgcHJlc3NpbmcgW0RFTEVURV0gb3IgW0JBQ0tTUEFDRV0gb3IgYnkgdGhlXG4gICAgICogZXZlbnQgZWRpdG9yLiBSZXR1cm4gYGZhbHNlYCB0byBpbW1lZGlhdGVseSB2ZXRvIHRoZSByZW1vdmFsIChvciBhIGBQcm9taXNlYCB5aWVsZGluZyBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGZvciBhc3luYyB2ZXRvaW5nKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVFdmVudERlbGV0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXIsYW55fSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWxbXX0gZXZlbnQuZXZlbnRSZWNvcmRzIFRoZSByZWNvcmRzIGFib3V0IHRvIGJlIGRlbGV0ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dCBBZGRpdGlvbmFsIHJlbW92YWwgY29udGV4dDpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBldmVudC5jb250ZXh0LmZpbmFsaXplIEZ1bmN0aW9uIHRvIGNhbGwgdG8gZmluYWxpemUgdGhlIHJlbW92YWwuIFVzZWQgdG8gYXN5bmNocm9ub3VzbHkgZGVjaWRlIHRvIHJlbW92ZSB0aGUgcmVjb3JkcyBvciBub3QuIFByb3ZpZGUgYGZhbHNlYCB0byB0aGUgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgcmVtb3ZhbC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQuZmluYWxpemUucmVtb3ZlUmVjb3JkcyBQcm92aWRlIGBmYWxzZWAgdG8gdGhlIGZ1bmN0aW9uIHRvIHByZXZlbnQgdGhlIHJlbW92YWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRXZlbnREZWxldGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlcnxhbnksIGV2ZW50UmVjb3JkczogU2NoZWR1bGVyRXZlbnRNb2RlbFtdLCBjb250ZXh0OiB7IGZpbmFsaXplOiB7IHJlbW92ZVJlY29yZHM/OiBib29sZWFuIH0gfSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIGJlZm9yZSBhbiBldmVudCBpcyBkaXNwbGF5ZWQgaW4gYW4gZWRpdG9yLlxuICAgICAqIFRoaXMgbWF5IGJlIGxpc3RlbmVkIGZvciB0byBhbGxvdyBhbiBhcHBsaWNhdGlvbiB0byB0YWtlIG92ZXIgZXZlbnQgZWRpdGluZyBkdXRpZXMuIFJldHVybmluZyBgZmFsc2VgXG4gICAgICogc3RvcHMgdGhlIGRlZmF1bHQgZWRpdGluZyBVSSBmcm9tIGJlaW5nIHNob3duLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZUV2ZW50RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuZmVhdHVyZS5FdmVudEVkaXR9IGV2ZW50LmV2ZW50RWRpdCBUaGUgZXZlbnRFZGl0IGZlYXR1cmVcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJFdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBUaGUgcmVjb3JkIGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBldmVudCBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgVGhlIFJlc291cmNlIHJlY29yZCBmb3IgdGhlIGV2ZW50LiBJZiB0aGUgZXZlbnQgaXMgYmVpbmcgY3JlYXRlZCwgaXQgd2lsbCBub3QgY29udGFpbiBhIHJlc291cmNlLCBzbyB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHJlc291cmNlIHRoZSBldmVudCBpcyBiZWluZyBjcmVhdGVkIGZvci5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5ldmVudEVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggcmVwcmVzZW50cyB0aGUgZXZlbnQgaW4gdGhlIHNjaGVkdWxlciBkaXNwbGF5LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV2ZW50RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBldmVudEVkaXQ6IEV2ZW50RWRpdCwgZXZlbnRSZWNvcmQ6IFNjaGVkdWxlckV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBTY2hlZHVsZXJSZXNvdXJjZU1vZGVsLCBldmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgd2hlbiB0aGUgZWRpdG9yIGZvciBhbiBldmVudCBpcyBhdmFpbGFibGUgYnV0IGJlZm9yZSBpdCBpcyBwb3B1bGF0ZWQgd2l0aFxuICAgICAqIGRhdGEgYW5kIHNob3duLiBBbGxvd3MgbWFuaXB1bGF0aW5nIGZpZWxkcyBldGMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmZlYXR1cmUuRXZlbnRFZGl0fSBldmVudC5ldmVudEVkaXQgVGhlIGV2ZW50RWRpdCBmZWF0dXJlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgVGhlIHJlY29yZCBhYm91dCB0byBiZSBzaG93biBpbiB0aGUgZXZlbnQgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlclJlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkIFRoZSBSZXNvdXJjZSByZWNvcmQgZm9yIHRoZSBldmVudC4gSWYgdGhlIGV2ZW50IGlzIGJlaW5nIGNyZWF0ZWQsIGl0IHdpbGwgbm90IGNvbnRhaW4gYSByZXNvdXJjZSwgc28gdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSByZXNvdXJjZSB0aGUgZXZlbnQgaXMgYmVpbmcgY3JlYXRlZCBmb3IuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZXZlbnRFbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIHJlcHJlc2VudHMgdGhlIGV2ZW50IGluIHRoZSBzY2hlZHVsZXIgZGlzcGxheS5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlBvcHVwfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV2ZW50RWRpdFNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZXZlbnRFZGl0OiBFdmVudEVkaXQsIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgZWRpdG9yOiBQb3B1cCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgYmVmb3JlIHJlc2l6aW5nIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIEV2ZW50IHJlY29yZCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkIHRoZSByZXNpemUgc3RhcnRzIHdpdGhpblxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV2ZW50UmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciB0byBhbGxvdyBpbXBsZW1lbnRlciB0byBwcmV2ZW50IGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gYnkgcmV0dXJuaW5nIGEgcHJvbWlzZVxuICAgICAqIGluIHRoZSBsaXN0ZW5lciwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBwb3B1cCBldGNcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVFdmVudFJlc2l6ZUZpbmFsaXplKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0IFtERVBSRUNBVEVEXSBkZS1uZXN0ZWQgdG8gb3V0ZXIgcGFyYW1zIG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIEV2ZW50IHJlY29yZCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgTmV3IHN0YXJ0RGF0ZSAoY2hhbmdlZCBpZiByZXNpemluZyBzdGFydCBzaWRlKVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZW5kRGF0ZSBOZXcgZW5kRGF0ZSAoY2hhbmdlZCBpZiByZXNpemluZyBlbmQgc2lkZSlcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm9yaWdpbmFsU3RhcnREYXRlIFN0YXJ0IGRhdGUgYmVmb3JlIHJlc2l6ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQub3JpZ2luYWxFbmREYXRlIEVuZCBkYXRlIGJlZm9yZSByZXNpemVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmFzeW5jIFNldCB0cnVlIHRvIGhhbmRsZSByZXNpemUgYXN5bmNocm9ub3VzbHkgKGUuZy4gdG8gd2FpdCBmb3IgdXNlciBjb25maXJtYXRpb24pXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXZlbnQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSByZXNpemUuIFRoaXMgbWV0aG9kIGFjY2VwdHMgb25lIGFyZ3VtZW50OiBwYXNzIGB0cnVlYCB0byB1cGRhdGUgcmVjb3Jkcywgb3IgYGZhbHNlYCwgdG8gaWdub3JlIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICogQHBhcmFtIHtFdmVudFJlc2l6ZURhdGFbXX0gZXZlbnQucmVzaXplRGF0YSBEYXRhIG9mIGFsbCBldmVudHMgdGhhdCBhcmUgYmVpbmcgcmVzaXplZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV2ZW50UmVzaXplRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgY29udGV4dDogb2JqZWN0LCBldmVudFJlY29yZDogU2NoZWR1bGVyRXZlbnRNb2RlbCwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBvcmlnaW5hbFN0YXJ0RGF0ZTogRGF0ZSwgb3JpZ2luYWxFbmREYXRlOiBEYXRlLCBhc3luYzogYm9vbGVhbiwgZmluYWxpemU6IEZ1bmN0aW9uLCBldmVudDogRXZlbnQsIHJlc2l6ZURhdGE6IEV2ZW50UmVzaXplRGF0YVtdIH0pID0+IFByb21pc2U8dm9pZD4pfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgaW5zdGFuY2UgYmVmb3JlIGFuIGV2ZW50IHJlY29yZCBpcyBzYXZlZCwgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBpdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVFdmVudFNhdmUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBUaGUgZXZlbnQgcmVjb3JkIGFib3V0IHRvIGJlIHNhdmVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ud2lkZ2V0LlRhc2tFZGl0b3JCYXNlfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvciB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVFdmVudFNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIGVkaXRvcjogVGFza0VkaXRvckJhc2UgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBQcm8gYmVmb3JlIHJlc2l6aW5nIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby52aWV3LlNjaGVkdWxlclByb30gZXZlbnQuc291cmNlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBTZWdtZW50IGJlaW5nIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5TY2hlZHVsZXJQcm9SZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBSZXNvdXJjZSByZWNvcmQgdGhlIHJlc2l6ZSBzdGFydHMgd2l0aGluXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRXZlbnRTZWdtZW50UmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXJQcm8sIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUHJvUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBQcm8gdG8gYWxsb3cgaW1wbGVtZW50ZXIgdG8gcHJldmVudCBpbW1lZGlhdGUgZmluYWxpemF0aW9uIGJ5IHNldHRpbmdcbiAgICAgKiBgZGF0YS5jb250ZXh0LmFzeW5jID0gdHJ1ZWAgaW4gdGhlIGxpc3RlbmVyLCB0byBzaG93IGEgY29uZmlybWF0aW9uIHBvcHVwIGV0Y1xuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZUV2ZW50U2VnbWVudFJlc2l6ZUZpbmFsaXplKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby52aWV3LlNjaGVkdWxlclByb30gZXZlbnQuc291cmNlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC5hc3luYyBTZXQgdHJ1ZSB0byBoYW5kbGUgcmVzaXplIGFzeW5jaHJvbm91c2x5IChlLmcuIHRvIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uKVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LmNvbnRleHQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSByZXNpemUuIFRoaXMgbWV0aG9kIGFjY2VwdHMgb25lIGFyZ3VtZW50OiBwYXNzIGB0cnVlYCB0byB1cGRhdGUgcmVjb3Jkcywgb3IgYGZhbHNlYCwgdG8gaWdub3JlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVFdmVudFNlZ21lbnRSZXNpemVGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvLCBjb250ZXh0OiB7IGFzeW5jOiBib29sZWFuLCBmaW5hbGl6ZTogRnVuY3Rpb24gfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBFeGNlbCBleHBvcnQgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGV4cG9ydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFeHBvcnRDb25maWd9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICogQHBhcmFtIHtYTFNDb2x1bW5bXX0gZXZlbnQuY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW5zIHRvIGV4cG9ydFxuICAgICAqIEBwYXJhbSB7YW55W11bXX0gZXZlbnQucm93cyBBbiBhcnJheSBvZiByZWNvcmRzIHRvIGV4cG9ydFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV4Y2VsRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY29uZmlnOiBFeHBvcnRDb25maWcsIGNvbHVtbnM6IFhMU0NvbHVtbltdLCByb3dzOiBhbnlbXSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBkcmFnZ2luZyBvZiB0aGUgRmlsbEhhbmRsZSBzdGFydHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGRyYWcgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmNlbGwgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbHVtbiAvIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVGaWxsSGFuZGxlRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2VsbDogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIGNlbGwgZWRpdGluZyBpcyBmaW5pc2hlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVGaW5pc2hDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSByb3cgZWRpdGluZyBpcyBmaW5pc2hlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZUZpbmlzaFJvd0VkaXQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRmluaXNoUm93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYmVmb3JlIGV4cG9ydCBzdGFydHMuIFJldHVybiBgZmFsc2VgIHRvIGNhbmNlbCB0aGUgZXhwb3J0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29uZmlnIEV4cG9ydCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVNc3BFeHBvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjb25maWc6IG9iamVjdCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBiZWZvcmUgcGFuIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUGFuOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZXZlbnQ6IEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBhIHBhc3RlIGFjdGlvbiBpcyBwZXJmb3JtZWQsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5jbGlwYm9hcmREYXRhIFRoZSBjbGlwYm9hcmREYXRhIGFib3V0IHRvIGJlIHBhc3RlZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudGFyZ2V0Q2VsbCBUaGUgY2VsbCBmcm9tIHdoaWNoIHRoZSBwYXN0ZSB3aWxsIGJlIHN0YXJ0ZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIGJlZm9yZVBhc3RlIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC50ZXh0IFRoZSByYXcgdGV4dCBmcm9tIGNsaXBib2FyZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVBhc3RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjbGlwYm9hcmREYXRhOiBzdHJpbmcsIHRhcmdldENlbGw6IEdyaWRMb2NhdGlvbiwgZW50aXR5TmFtZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGV4cG9ydCBzdGFydGVkLiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGV4cG9ydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUGRmRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY29uZmlnOiBvYmplY3QgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhlIFt2aWV3UHJlc2V0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lVmlld1ByZXNldHMjY29uZmlnLXZpZXdQcmVzZXQpIGlzIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhpcyBTY2hlZHVsZXIgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgVGhlIG5ldyBzdGFydCBkYXRlIG9mIHRoZSB0aW1lbGluZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmVuZERhdGUgVGhlIG5ldyBlbmQgZGF0ZSBvZiB0aGUgdGltZWxpbmUuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIucHJlc2V0LlZpZXdQcmVzZXR9IGV2ZW50LmZyb20gVGhlIG91dGdvaW5nIFZpZXdQcmVzZXQuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIucHJlc2V0LlZpZXdQcmVzZXR9IGV2ZW50LnRvIFRoZSBWaWV3UHJlc2V0IGJlaW5nIHN3aXRjaGVkIHRvLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVByZXNldENoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUsIGZyb206IFZpZXdQcmVzZXQsIHRvOiBWaWV3UHJlc2V0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB3aWRnZXQgaW5zdGFuY2UgYmVmb3JlIGEgcHJvamVjdCBpcyBkaXNwbGF5ZWQgaW4gdGhlIGVkaXRvci5cbiAgICAgKiBUaGlzIG1heSBiZSBsaXN0ZW5lZCB0byBpbiBvcmRlciB0byB0YWtlIG92ZXIgdGhlIHByb2plY3QgZWRpdGluZyBmbG93LiBSZXR1cm5pbmcgYGZhbHNlYFxuICAgICAqIHN0b3BzIHRoZSBkZWZhdWx0IGVkaXRpbmcgVUkgZnJvbSBiZWluZyBzaG93bi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVQcm9qZWN0RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5mZWF0dXJlLlByb2plY3RFZGl0fSBldmVudC5wcm9qZWN0RWRpdCBUaGUgcHJvamVjdEVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuUHJvamVjdE1vZGVsfSBldmVudC5wcm9qZWN0UmVjb3JkIFRoZSBwcm9qZWN0IGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBlZGl0b3IuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUHJvamVjdEVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBwcm9qZWN0RWRpdDogUHJvamVjdEVkaXQsIHByb2plY3RSZWNvcmQ6IFByb2plY3RNb2RlbCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgd2lkZ2V0IHdoZW4gdGhlIGVkaXRvciBmb3IgYSBwcm9qZWN0IGlzIGF2YWlsYWJsZSBidXRcbiAgICAgKiBiZWZvcmUgaXQgaXMgc2hvd24uIEFsbG93cyBtYW5pcHVsYXRpbmcgZmllbGRzIGV0Yy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5mZWF0dXJlLlByb2plY3RFZGl0fSBldmVudC5wcm9qZWN0RWRpdCBUaGUgcHJvamVjdEVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuUHJvamVjdE1vZGVsfSBldmVudC5wcm9qZWN0UmVjb3JkIFRoZSBwcm9qZWN0IGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtHYW50dC53aWRnZXQuUHJvamVjdEVkaXRvcn0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3JcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVQcm9qZWN0RWRpdFNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBwcm9qZWN0RWRpdDogUHJvamVjdEVkaXQsIHByb2plY3RSZWNvcmQ6IFByb2plY3RNb2RlbCwgZWRpdG9yOiBQcm9qZWN0RWRpdG9yIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdpZGdldCBpbnN0YW5jZSBiZWZvcmUgYSBwcm9qZWN0IGlzIHNhdmVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGl0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZVByb2plY3RTYXZlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlByb2plY3RNb2RlbH0gZXZlbnQucHJvamVjdFJlY29yZCBUaGUgcHJvamVjdCBhYm91dCB0byBiZSBzYXZlZFxuICAgICAqIEBwYXJhbSB7R2FudHQud2lkZ2V0LlByb2plY3RFZGl0b3J9IGV2ZW50LmVkaXRvciBUaGUgZWRpdG9yIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVByb2plY3RTYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgcHJvamVjdFJlY29yZDogUHJvamVjdE1vZGVsLCBlZGl0b3I6IFByb2plY3RFZGl0b3IgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYSByb3cgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLnJvdy5Sb3d9IGV2ZW50LnJvdyBUaGUgcm93IGFib3V0IHRvIGJlIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCBmb3IgdGhlIHJvdy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQucmVjb3JkSW5kZXggVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHJlY29yZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSZW5kZXJSb3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJvdzogUm93LCByZWNvcmQ6IE1vZGVsLCByZWNvcmRJbmRleDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcmlkIHJvd3MgYXJlIGFib3V0IHRvIGJlIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGlzIGdyaWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUmVuZGVyUm93czogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBiZWZvcmUgcm93IGNvbGxhcHNlIGlzIHN0YXJ0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlUm93Q29sbGFwc2UpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUm93Q29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBiZWZvcmUgcm93IGV4cGFuZCBpcyBzdGFydGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZVJvd0V4cGFuZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSb3dFeHBhbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4gUmV0dXJuaW5nIGBmYWxzZWAgZnJvbSBhIGxpc3RlbmVyIHByZXZlbnRzIHRoZSBjaGFuZ2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmFjdGlvbiBgJ3NlbGVjdCdgL2AnZGVzZWxlY3QnYFxuICAgICAqIEBwYXJhbSB7J3JvdycsJ2NlbGwnfSBldmVudC5tb2RlIGAncm93J2AvYCdjZWxsJ2BcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5kZXNlbGVjdGVkIFRoZSByZWNvcmRzIHRvIGJlIGRlc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0ZWQgVGhlIHJlY29yZHMgdG8gYmUgc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0aW9uIFRoZSByZWNvcmRzIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgYmVmb3JlIGFwcGx5aW5nIGBzZWxlY3RlZGAgYW5kIGBkZXNlbGVjdGVkYFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5kZXNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHRvIGJlIGRlc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LnNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHRvIGJlIHNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5jZWxsU2VsZWN0aW9uIFRoZSBjZWxscyBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGJlZm9yZSBhcHBseWluZyBgc2VsZWN0ZWRDZWxsc2AgYW5kIGBkZXNlbGVjdGVkQ2VsbHNgXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2VsZWN0aW9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgYWN0aW9uOiBzdHJpbmcsIG1vZGU6ICdyb3cnfCdjZWxsJywgc291cmNlOiBHcmlkLCBkZXNlbGVjdGVkOiBNb2RlbFtdLCBzZWxlY3RlZDogTW9kZWxbXSwgc2VsZWN0aW9uOiBNb2RlbFtdLCBkZXNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbltdLCBzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25bXSwgY2VsbFNlbGVjdGlvbjogR3JpZExvY2F0aW9uW10gfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhpcyBjb250YWluZXIgd2lsbCBsb2FkIHJlY29yZCB2YWx1ZXMgaW50byBpdHMgY2hpbGQgZmllbGRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VcbiAgICAgKiB3YW50IHRvIG1vZGlmeSB0aGUgVUkgYmVmb3JlIGRhdGEgaXMgbG9hZGVkIChlLmcuIHNldCBzb21lIGlucHV0IGZpZWxkIHRvIGJlIHJlYWRvbmx5KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBjb250YWluZXJcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTZXRSZWNvcmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBzaG93bi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldCxhbnl9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHNob3duXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0fGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IGJlZm9yZSBzaG93aW5nIGRlcGVuZGVuY3kgdGVybWluYWxzIG9uIGEgdGFzayBvciBldmVudC4gUmV0dXJuIGBmYWxzZWAgdG9cbiAgICAgKiBwcmV2ZW50IGl0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC5zb3VyY2UgVGhlIGhvdmVyZWQgdGFza1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNob3dUZXJtaW5hbHM6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBlZGl0aW5nIHN0YXJ0cywgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBlZGl0aW5nXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXJ0Um93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIHRoZSBzb3VyY2UuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWRTdGF0ZUluZm99IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZUFwcGx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc3RhdGU6IEdyaWRTdGF0ZUluZm8gfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgc3RhdGUgaXMgc2F2ZWQgYnkgdGhlIFN0YXRlUHJvdmlkZXIuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWRTdGF0ZUluZm99IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZVNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogR3JpZFN0YXRlSW5mbyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYWRkaW5nIGEgdGFzayBmcm9tIHRoZSBVSSB0byBhbGxvdyBkYXRhIG11dGF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgdGFza1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tBZGQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBiZWZvcmUgYSB0YXNrIGlzIGRlbGV0ZWQsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza0RlbGV0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8udmlldy5TY2hlZHVsZXJQcm99IGV2ZW50LnNvdXJjZSBUaGUgU2NoZWR1bGVyIFBybyBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSByZWNvcmQgYWJvdXQgdG8gYmUgZGVsZXRlZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLndpZGdldC5UYXNrRWRpdG9yQmFzZX0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3Igd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza0RlbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvLCB0YXNrUmVjb3JkOiBFdmVudE1vZGVsLCBlZGl0b3I6IFRhc2tFZGl0b3JCYXNlIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBiZWZvcmUgdGFzayBkcmFnZ2luZyBzdGFydHMuIFJldHVybiBmYWxzZSB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVUYXNrRHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB0byBhbGxvdyBpbXBsZW1lbnRlciB0byBwcmV2ZW50IGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gYnkgc2V0dGluZyBgZGF0YS5jb250ZXh0LmFzeW5jID0gdHJ1ZWBcbiAgICAgKiBpbiB0aGUgbGlzdGVuZXIsIHRvIHNob3cgYSBjb25maXJtYXRpb24gcG9wdXAgZXRjXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza0Ryb3BGaW5hbGl6ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsW119IGV2ZW50LmNvbnRleHQudGFza1JlY29yZHMgVGhlIGRyYWdnZWQgdGFzayByZWNvcmRzXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LnZhbGlkIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gbWFyayB0aGUgZHJvcCBhcyBpbnZhbGlkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LmFzeW5jIFNldCB0cnVlIHRvIGhhbmRsZSBkcmFnZHJvcCBhc3luY2hyb25vdXNseSAoZS5nLiB0byB3YWl0IGZvciB1c2VyIGNvbmZpcm1hdGlvbilcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBldmVudC5jb250ZXh0LmZpbmFsaXplIENhbGwgdGhpcyBtZXRob2QgdG8gZmluYWxpemUgZHJhZ2Ryb3AuIFRoaXMgbWV0aG9kIGFjY2VwdHMgb25lIGFyZ3VtZW50OiBwYXNzIHRydWUgdG8gdXBkYXRlIHJlY29yZHMsIG9yIGZhbHNlLCB0byBpZ25vcmUgY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tEcm9wRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBjb250ZXh0OiB7IHRhc2tSZWNvcmRzOiBUYXNrTW9kZWxbXSwgdmFsaWQ6IGJvb2xlYW4sIGFzeW5jOiBib29sZWFuLCBmaW5hbGl6ZTogRnVuY3Rpb24gfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGluc3RhbmNlIGJlZm9yZSBhIHRhc2sgaXMgZGlzcGxheWVkIGluIHRoZSBlZGl0b3IuXG4gICAgICogVGhpcyBtYXkgYmUgbGlzdGVuZWQgdG8gaW4gb3JkZXIgdG8gdGFrZSBvdmVyIHRoZSB0YXNrIGVkaXRpbmcgZmxvdy4gUmV0dXJuaW5nIGBmYWxzZWBcbiAgICAgKiBzdG9wcyB0aGUgZGVmYXVsdCBlZGl0aW5nIFVJIGZyb20gYmVpbmcgc2hvd24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza0VkaXQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5mZWF0dXJlLlNjaGVkdWxlclByb1Rhc2tFZGl0fSBldmVudC50YXNrRWRpdCBUaGUgdGFza0VkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIHRhc2sgYWJvdXQgdG8gYmUgc2hvd24gaW4gdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXNrRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCByZXByZXNlbnRzIHRoZSB0YXNrXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza0VkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgdGFza0VkaXQ6IFNjaGVkdWxlclByb1Rhc2tFZGl0LCB0YXNrUmVjb3JkOiBFdmVudE1vZGVsLCB0YXNrRWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiB0aGUgZWRpdG9yIGZvciBhbiBldmVudCBpcyBhdmFpbGFibGUgYnV0IGJlZm9yZSBpdCBpcyBzaG93bi4gQWxsb3dzXG4gICAgICogbWFuaXB1bGF0aW5nIGZpZWxkcyBldGMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlclBybyBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLmZlYXR1cmUuU2NoZWR1bGVyUHJvVGFza0VkaXR9IGV2ZW50LnRhc2tFZGl0IFRoZSB0YXNrRWRpdCBmZWF0dXJlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgdGFzayBhYm91dCB0byBiZSBzaG93biBpbiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmV2ZW50RWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCByZXByZXNlbnRzIHRoZSB0YXNrXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ud2lkZ2V0LlRhc2tFZGl0b3JCYXNlfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tFZGl0U2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvLCB0YXNrRWRpdDogU2NoZWR1bGVyUHJvVGFza0VkaXQsIHRhc2tSZWNvcmQ6IEV2ZW50TW9kZWwsIGV2ZW50RWxlbWVudDogSFRNTEVsZW1lbnQsIGVkaXRvcjogVGFza0VkaXRvckJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYmVmb3JlIHJlc2l6aW5nIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza1Jlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB0byBhbGxvdyBpbXBsZW1lbnRlciB0byBwcmV2ZW50IGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gYnkgc2V0dGluZ1xuICAgICAqIGBkYXRhLmNvbnRleHQuYXN5bmMgPSB0cnVlYCBpbiB0aGUgbGlzdGVuZXIsIHRvIHNob3cgYSBjb25maXJtYXRpb24gcG9wdXAgZXRjLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZVRhc2tSZXNpemVGaW5hbGl6ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmRcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5jb250ZXh0LmVuZERhdGUgTmV3IGVuZERhdGVcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmNvbnRleHQub3JpZ2luYWxFbmREYXRlIEVuZCBkYXRlIGJlZm9yZSByZXNpemVcbiAgICAgKiBAcGFyYW0ge1Rhc2tSZXNpemVEYXRhW119IGV2ZW50LmNvbnRleHQucmVzaXplRGF0YSBSZXNpemUgZGF0YSBmb3Igc2VsZWN0ZWQgdGFza3MuIE9ubHkgYXZhaWxhYmxlIHdoZW4gW3Jlc2l6ZVNlbGVjdGVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza1Jlc2l6ZSNjb25maWctcmVzaXplU2VsZWN0ZWQpIGlzIGB0cnVlYC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LmFzeW5jIFNldCB0cnVlIHRvIGhhbmRsZSByZXNpemUgYXN5bmNocm9ub3VzbHkgKGUuZy4gdG8gd2FpdCBmb3IgdXNlciBjb25maXJtYXRpb24pXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXZlbnQuY29udGV4dC5maW5hbGl6ZSBDYWxsIHRoaXMgbWV0aG9kIHRvIGZpbmFsaXplIHJlc2l6ZS4gVGhpcyBtZXRob2QgYWNjZXB0cyBvbmUgYXJndW1lbnQ6IHBhc3MgdHJ1ZSB0byB1cGRhdGUgcmVjb3Jkcywgb3IgZmFsc2UsIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza1Jlc2l6ZUZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgdGFza1JlY29yZDogVGFza01vZGVsLCBzb3VyY2U6IEdhbnR0LCBjb250ZXh0OiB7IGVuZERhdGU6IERhdGUsIG9yaWdpbmFsRW5kRGF0ZTogRGF0ZSwgcmVzaXplRGF0YTogVGFza1Jlc2l6ZURhdGFbXSwgYXN5bmM6IGJvb2xlYW4sIGZpbmFsaXplOiBGdW5jdGlvbiB9LCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBpbnN0YW5jZSBiZWZvcmUgYSB0YXNrIGlzIHNhdmVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGl0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZVRhc2tTYXZlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby52aWV3LlNjaGVkdWxlclByb30gZXZlbnQuc291cmNlIFRoZSBTY2hlZHVsZXIgUHJvIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgdGFzayBhYm91dCB0byBiZSBzYXZlZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLndpZGdldC5UYXNrRWRpdG9yQmFzZX0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3Igd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza1NhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgdGFza1JlY29yZDogRXZlbnRNb2RlbCwgZWRpdG9yOiBUYXNrRWRpdG9yQmFzZSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYmVmb3JlIHNlZ21lbnQgZHJhZ2dpbmcgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIHNlZ21lbnQgYWJvdXQgdG8gYmUgZHJhZ2dlZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tTZWdtZW50RHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB0byBhbGxvdyBpbXBsZW1lbnRlciB0byBwcmV2ZW50IGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gYnkgc2V0dGluZyBgZGF0YS5jb250ZXh0LmFzeW5jID0gdHJ1ZWBcbiAgICAgKiBpbiB0aGUgbGlzdGVuZXIsIHRvIHNob3cgYSBjb25maXJtYXRpb24gcG9wdXAgZXRjXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza1NlZ21lbnREcm9wRmluYWxpemUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbFtdfSBldmVudC5jb250ZXh0LnRhc2tSZWNvcmRzIERyYWdnZWQgc2VnbWVudHNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBtYXJrIHRoZSBkcm9wIGFzIGludmFsaWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQuYXN5bmMgU2V0IHRydWUgdG8gaGFuZGxlIGRyYWdkcm9wIGFzeW5jaHJvbm91c2x5IChlLmcuIHRvIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uKVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LmNvbnRleHQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSBkcmFnZHJvcC4gVGhpcyBtZXRob2QgYWNjZXB0cyBvbmUgYXJndW1lbnQ6IHBhc3MgdHJ1ZSB0byB1cGRhdGUgcmVjb3Jkcywgb3IgZmFsc2UsIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza1NlZ21lbnREcm9wRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBjb250ZXh0OiB7IHRhc2tSZWNvcmRzOiBUYXNrTW9kZWxbXSwgdmFsaWQ6IGJvb2xlYW4sIGFzeW5jOiBib29sZWFuLCBmaW5hbGl6ZTogRnVuY3Rpb24gfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBHYW50dCBiZWZvcmUgcmVzaXppbmcgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgU2VnbWVudCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkIHRoZSByZXNpemUgc3RhcnRzIHdpdGhpblxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tTZWdtZW50UmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIEdhbnR0IHRvIGFsbG93IGltcGxlbWVudGVyIHRvIHByZXZlbnQgaW1tZWRpYXRlIGZpbmFsaXphdGlvbiBieSBzZXR0aW5nXG4gICAgICogYGRhdGEuY29udGV4dC5hc3luYyA9IHRydWVgIGluIHRoZSBsaXN0ZW5lciwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBwb3B1cCBldGMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza1NlZ21lbnRSZXNpemVGaW5hbGl6ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC5hc3luYyBTZXQgdHJ1ZSB0byBoYW5kbGUgcmVzaXplIGFzeW5jaHJvbm91c2x5IChlLmcuIHRvIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uKVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LmNvbnRleHQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSByZXNpemUuIFRoaXMgbWV0aG9kIGFjY2VwdHMgb25lIGFyZ3VtZW50OiBwYXNzIGB0cnVlYCB0byB1cGRhdGUgcmVjb3Jkcywgb3IgYGZhbHNlYCwgdG8gaWdub3JlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVUYXNrU2VnbWVudFJlc2l6ZUZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgY29udGV4dDogeyBhc3luYzogYm9vbGVhbiwgZmluYWxpemU6IEZ1bmN0aW9uIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBncm91cCBpcyBnb2luZyB0byBiZSBleHBhbmRlZCBvciBjb2xsYXBzZWQgdXNpbmcgdGhlIFVJLlxuICAgICAqIFJldHVybmluZyBgZmFsc2VgIGZyb20gYSBsaXN0ZW5lciBwcmV2ZW50cyB0aGUgb3BlcmF0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5ncm91cFJlY29yZCBbREVQUkVDQVRFRF0gVXNlIGBncm91cFJlY29yZHNgIHBhcmFtIGluc3RlYWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5ncm91cFJlY29yZHMgVGhlIGdyb3VwIHJlY29yZHMgYmVpbmcgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2UgQ29sbGFwc2VkICh0cnVlKSBvciBleHBhbmRlZCAoZmFsc2UpXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHVzZXIgaW50ZXJhY3Rpb24gZXZlbnQgKGVnIGEgYGNsaWNrYCBldmVudCkgaWYgdGhlIHRvZ2dsZSByZXF1ZXN0IHdhcyBpbnN0aWdhdGVkIGJ5IHVzZXIgaW50ZXJhY3Rpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVG9nZ2xlR3JvdXA6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncm91cFJlY29yZDogTW9kZWwsIGdyb3VwUmVjb3JkczogTW9kZWxbXSwgY29sbGFwc2U6IGJvb2xlYW4sIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBhIHBhcmVudCBub2RlIHJlY29yZCB0b2dnbGVzIGl0cyBjb2xsYXBzZWQgc3RhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIGJlaW5nIHRvZ2dsZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYmVpbmcgY29sbGFwc2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRvZ2dsZU5vZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbGxhcHNlOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBlZGl0aW5nIGlzIGNhbmNlbGxlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBJbmNsdWRlZCBpZiB0aGUgY2FuY2VsbGF0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYW5jZWxDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogR3JpZExvY2F0aW9uLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW55IG90aGVyIGV2ZW50IGlzIGZpcmVkIGZyb20gdGhlIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1jYXRjaEFsbClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9fSBldmVudC5ldmVudCBUaGUgT2JqZWN0IHRoYXQgY29udGFpbnMgZXZlbnQgZGV0YWlsc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5ldmVudC50eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCB3aGljaCBpcyBjYXVnaHQgYnkgdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2F0Y2hBbGw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDoge1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBjbGlja3MgaW4gYSBncmlkIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiB0byB3aGljaCB0aGUgY2VsbCBiZWxvbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIGFjdGl2YXRlcyBjb250ZXh0bWVudSBpbiBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxDb250ZXh0TWVudTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHVzZXIgZG91YmxlIGNsaWNrcyBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxEYmxDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgZ3JpZCBiZWZvcmUgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBjZWxsLlxuICAgICAqIEFsbG93cyBtYW5pcHVsYXRpb24gb2YgdGhlIGl0ZW1zIHRvIHNob3cgaW4gdGhlIHNhbWUgd2F5IGFzIGluIHRoZSBbcHJvY2Vzc0l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsTWVudSNjb25maWctcHJvY2Vzc0l0ZW1zKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1jZWxsTWVudUJlZm9yZVNob3cpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51QmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiwgcmVjb3JkOiBNb2RlbCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBncmlkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51SXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNvbHVtbjogQ29sdW1uLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgZ3JpZCBhZnRlciB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIGNlbGwuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51U2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIGdyaWQgd2hlbiBhIGNoZWNrIGl0ZW0gaXMgdG9nZ2xlZCBpbiB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hlY2tlZCBDaGVja2VkIG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51VG9nZ2xlSXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNvbHVtbjogQ29sdW1uLCByZWNvcmQ6IE1vZGVsLCBjaGVja2VkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYSBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIGhvdmVyZWQgY2VsbFxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBjdXJyZW50bHkgaG92ZXJlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTW91c2VFbnRlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgY2VsbCB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHJlcHJlc2VudGluZyB0aGUgY2VsbCB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50IHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1vdXNlTGVhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2Ugb3V0IG9mIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1vdXNlT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBtb3ZlcyB0aGUgbW91c2Ugb3ZlciBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNb3VzZU92ZXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIFBhbmVsIGlzIGNvbGxhcHNlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFBhbmVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgYSBwYXJlbnQgbm9kZSByZWNvcmQgaXMgY29sbGFwc2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCB3aGljaCBoYXMgYmVlbiBjb2xsYXBzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2VOb2RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjb2x1bW4gaXMgYmVpbmcgZHJhZ2dlZCwgYW5kIHlvdSBjYW4gc2V0IHRoZSBgdmFsaWRgIGZsYWcgb24gdGhlIGBjb250ZXh0YCBvYmplY3RcbiAgICAgKiB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkIG9yIG5vdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGRyYWdnZWQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5pbnNlcnRCZWZvcmUgVGhlIGNvbHVtbiBiZWZvcmUgd2hpY2ggdGhlIGRyYWdnZWQgY29sdW1uIHdpbGwgYmUgaW5zZXJ0ZWQgKGlmIG5vdCBsYXN0KS5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC52YWxpZCBTZXQgdGhpcyB0byBgdHJ1ZWAgb3IgYGZhbHNlYCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtbkRyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBpbnNlcnRCZWZvcmU6IENvbHVtbiwgZXZlbnQ6IEV2ZW50LCBjb250ZXh0OiB7IHZhbGlkOiBib29sZWFuIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiBkcmFnIGdlc3R1cmUgaGFzIHN0YXJ0ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5EcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgYWx3YXlzIGZpcmVkIGFmdGVyIGEgY29sdW1uIGlzIGRyb3BwZWQuIFRoZSBgdmFsaWRgIHBhcmFtIGlzIGB0cnVlYCBpZiB0aGUgb3BlcmF0aW9uIHdhcyBub3RcbiAgICAgKiB2ZXRvZWQgYW5kIHRoZSBjb2x1bW4gd2FzIG1vdmVkIGluIHRoZSBjb2x1bW4gc3RvcmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuaW5zZXJ0QmVmb3JlIFRoZSBjb2x1bW4gYmVmb3JlIHdoaWNoIHRoZSBkcmFnZ2VkIGNvbHVtbiB3aWxsIGJlIGluc2VydGVkLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5uZXdQYXJlbnQgVGhlIG5ldyBwYXJlbnQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudmFsaWQgYHRydWVgIGlmIHRoZSBvcGVyYXRpb24gd2FzIG5vdCB2ZXRvZWQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnJlZ2lvbiBUaGUgcmVnaW9uIHdoZXJlIHRoZSBjb2x1bW4gd2FzIGRyb3BwZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uRHJvcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGluc2VydEJlZm9yZTogQ29sdW1uLCBuZXdQYXJlbnQ6IENvbHVtbiwgdmFsaWQ6IGJvb2xlYW4sIGV2ZW50OiBFdmVudCwgcmVnaW9uOiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgcmVzaXplIGdlc3R1cmUgaXMgY29tcGxldGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSByZXNpemVkIGNvbHVtblxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjb2x1bW4gcmVzaXplIGdlc3R1cmUgc3RhcnRzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtblJlc2l6ZVN0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgd2lkZ2V0IHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSBvd25pbmcgd2lkZ2V0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db250ZXh0TWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyB3aWRnZXQgd2hlbiBhIGNoZWNrIGl0ZW0gaXMgdG9nZ2xlZCBpbiB0aGUgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSBvd25pbmcgd2lkZ2V0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoZWNrZWQgQ2hlY2tlZCBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db250ZXh0TWVudVRvZ2dsZUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNoZWNrZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBhZnRlciBhIGNvcHkgYWN0aW9uIGlzIHBlcmZvcm1lZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbHMgVGhlIGNlbGxzIGFib3V0IHRvIGJlIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY29waWVkRGF0YVN0cmluZyBUaGUgY29uY2F0ZW5hdGVkIGRhdGEgc3RyaW5nIHRoYXQgd2FzIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmlzQ3V0IGB0cnVlYCBpZiB0aGlzIHdhcyBhIGN1dCBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIGNvcHkgZXZlbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29weTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY2VsbHM6IEdyaWRMb2NhdGlvbltdLCBjb3BpZWREYXRhU3RyaW5nOiBzdHJpbmcsIGlzQ3V0OiBib29sZWFuLCBlbnRpdHlOYW1lOiBzdHJpbmcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gY3JpdGljYWwgcGF0aHMgZ2V0IGhpZ2hsaWdodGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWNyaXRpY2FsUGF0aHNIaWdobGlnaHRlZClcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Dcml0aWNhbFBhdGhzSGlnaGxpZ2h0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGNyaXRpY2FsIHBhdGhzIGdldCBoaWRkZW4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtY3JpdGljYWxQYXRoc1VuaGlnaGxpZ2h0ZWQpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ3JpdGljYWxQYXRoc1VuaGlnaGxpZ2h0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlci9HYW50dCB3aGVuIHRoZSBsaW5lIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgdGltZSBpcyB1cGRhdGVkIChzZWUgW2N1cnJlbnRUaW1lTGluZVVwZGF0ZUludGVydmFsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL1RpbWVSYW5nZXMjY29uZmlnLWN1cnJlbnRUaW1lTGluZVVwZGF0ZUludGVydmFsKSkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSBUaGUgY3VycmVudCBkYXRlXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ3VycmVudFRpbWVsaW5lVXBkYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRhdGU6IERhdGUgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZGF0YSBpbiB0aGUgc3RvcmUgY2hhbmdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1kYXRhQ2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duaW5nIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5TdG9yZX0gZXZlbnQuc3RvcmUgVGhlIG9yaWdpbmF0aW5nIHN0b3JlXG4gICAgICogQHBhcmFtIHsncmVtb3ZlJywncmVtb3ZlQWxsJywnYWRkJywnY2xlYXJjaGFuZ2VzJywnZmlsdGVyJywndXBkYXRlJywnZGF0YXNldCcsJ3JlcGxhY2UnfSBldmVudC5hY3Rpb24gTmFtZSBvZiBhY3Rpb24gd2hpY2ggdHJpZ2dlcmVkIHRoZSBjaGFuZ2UuIE1heSBiZSBvbmUgb2Y6ICAqIGAncmVtb3ZlJ2AgKiBgJ3JlbW92ZUFsbCdgICogYCdhZGQnYCAqIGAnY2xlYXJjaGFuZ2VzJ2AgKiBgJ2ZpbHRlcidgICogYCd1cGRhdGUnYCAqIGAnZGF0YXNldCdgICogYCdyZXBsYWNlJ2BcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIENoYW5nZWQgcmVjb3JkLCBmb3IgYWN0aW9ucyB0aGF0IGFmZmVjdHMgZXhhY3RseSBvbmUgcmVjb3JkIChgJ3VwZGF0ZSdgKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnJlY29yZHMgQ2hhbmdlZCByZWNvcmRzLCBwYXNzZWQgZm9yIGFsbCBhY3Rpb25zIGV4Y2VwdCBgJ3JlbW92ZUFsbCdgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNoYW5nZXMgUGFzc2VkIGZvciB0aGUgYCd1cGRhdGUnYCBhY3Rpb24sIGluZm8gb24gd2hpY2ggcmVjb3JkIGZpZWxkcyBjaGFuZ2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGF0YUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3RvcmU6IFN0b3JlLCBhY3Rpb246ICdyZW1vdmUnfCdyZW1vdmVBbGwnfCdhZGQnfCdjbGVhcmNoYW5nZXMnfCdmaWx0ZXInfCd1cGRhdGUnfCdkYXRhc2V0J3wncmVwbGFjZScsIHJlY29yZDogTW9kZWwsIHJlY29yZHM6IE1vZGVsW10sIGNoYW5nZXM6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgcmFuZ2Ugb2YgZGF0ZXMgZW5jYXBzdWxhdGVkIGJ5IHRoZSBVSSBjaGFuZ2VzLiBUaGlzIHdpbGwgYmUgd2hlblxuICAgICAqIG1vdmluZyBhIHZpZXcgaW4gdGltZSBieSByZWNvbmZpZ3VyaW5nIGl0cyBbdGltZUF4aXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvVGltZWxpbmVCYXNlI2NvbmZpZy10aW1lQXhpcykuIFRoaXMgd2lsbCBoYXBwZW5cbiAgICAgKiB3aGVuIHpvb21pbmcsIG9yIGNoYW5naW5nIFt2aWV3UHJlc2V0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L1RpbWVsaW5lQmFzZSNjb25maWctdmlld1ByZXNldCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtZGF0ZVJhbmdlQ2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlRpbWVsaW5lQmFzZX0gZXZlbnQuc291cmNlIFRoaXMgU2NoZWR1bGVyL0dhbnR0IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vbGQgVGhlIG9sZCBkYXRlIHJhbmdlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGQuc3RhcnREYXRlIHRoZSBvbGQgc3RhcnQgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm9sZC5lbmREYXRlIHRoZSBvbGQgZW5kIGRhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm5ldyBUaGUgbmV3IGRhdGUgcmFuZ2VcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm5ldy5zdGFydERhdGUgdGhlIG5ldyBzdGFydCBkYXRlLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQubmV3LmVuZERhdGUgdGhlIG5ldyBlbmQgZGF0ZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EYXRlUmFuZ2VDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVsaW5lQmFzZSwgb2xkOiB7IHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSB9LCBuZXc6IHsgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSByZW5kZXJlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlcGVuZGVuY2llc0RyYXduOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIvR2FudHQgd2hlbiBhIGNsaWNrIGlzIHJlZ2lzdGVyZWQgb24gYSBkZXBlbmRlbmN5IGxpbmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXBlbmRlbmN5Q2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeTogU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsLCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIvR2FudHQgd2hlbiBhIGNvbnRleHQgbWVudSBldmVudCBpcyByZWdpc3RlcmVkIG9uIGEgZGVwZW5kZW5jeSBsaW5lLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXJcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWx9IGV2ZW50LmRlcGVuZGVuY3lcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVwZW5kZW5jeUNvbnRleHRNZW51OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRlcGVuZGVuY3k6IFNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IHdoZW4gYSBkZXBlbmRlbmN5IGNyZWF0aW9uIGRyYWcgb3BlcmF0aW9uIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQuc291cmNlIFRoZSBzb3VyY2UgdGFza1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlcGVuZGVuY3lDcmVhdGVEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlci9HYW50dCB3aGVuIGEgZGVwZW5kZW5jeSBkcmFnIGNyZWF0aW9uIG9wZXJhdGlvbiBzdWNjZWVkc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQuc291cmNlIFRoZSBzb3VyY2UgdGFza1xuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC50YXJnZXQgVGhlIHRhcmdldCB0YXNrXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRGVwZW5kZW5jeUJhc2VNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeSBUaGUgY3JlYXRlZCBkZXBlbmRlbmN5XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVwZW5kZW5jeUNyZWF0ZURyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuLCB0YXJnZXQ6IFRpbWVTcGFuLCBkZXBlbmRlbmN5OiBEZXBlbmRlbmN5QmFzZU1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlci9HYW50dCB3aGVuIGEgZG91YmxlIGNsaWNrIGlzIHJlZ2lzdGVyZWQgb24gYSBkZXBlbmRlbmN5IGxpbmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXBlbmRlbmN5RGJsQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeTogU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsLCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIvR2FudHQgd2hlbiB0aGUgbW91c2UgbW92ZXMgb3V0IG9mIGEgZGVwZW5kZW5jeSBsaW5lLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXJcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWx9IGV2ZW50LmRlcGVuZGVuY3lcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVwZW5kZW5jeU1vdXNlT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRlcGVuZGVuY3k6IFNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IHdoZW4gdGhlIG1vdXNlIG1vdmVzIG92ZXIgYSBkZXBlbmRlbmN5IGxpbmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXBlbmRlbmN5TW91c2VPdmVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRlcGVuZGVuY3k6IFNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IHdoZW4gYXN5bmNocm9ub3VzIGRlcGVuZGVuY3kgdmFsaWRhdGlvbiBjb21wbGV0ZXNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGV2ZW50LnNvdXJjZSBUaGUgc291cmNlIHRhc2tcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgdGFza1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5kZXBlbmRlbmN5VHlwZSBUaGUgZGVwZW5kZW5jeSB0eXBlLCBzZWUgW1R5cGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL0RlcGVuZGVuY3lCYXNlTW9kZWwjcHJvcGVydHktVHlwZS1zdGF0aWMpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVwZW5kZW5jeVZhbGlkYXRpb25Db21wbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVGltZVNwYW4sIHRhcmdldDogVGltZVNwYW4sIGRlcGVuZGVuY3lUeXBlOiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IHdoZW4gYXN5bmNocm9ub3VzIGRlcGVuZGVuY3kgdmFsaWRhdGlvbiBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGV2ZW50LnNvdXJjZSBUaGUgc291cmNlIHRhc2tcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgdGFza1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5kZXBlbmRlbmN5VHlwZSBUaGUgZGVwZW5kZW5jeSB0eXBlLCBzZWUgW1R5cGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL0RlcGVuZGVuY3lCYXNlTW9kZWwjcHJvcGVydHktVHlwZS1zdGF0aWMpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVwZW5kZW5jeVZhbGlkYXRpb25TdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVGltZVNwYW4sIHRhcmdldDogVGltZVNwYW4sIGRlcGVuZGVuY3lUeXBlOiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBmaWVsZCBpcyBtdXRhdGVkIGFuZCB0aGUgc3RhdGUgb2YgdGhlIFtoYXNDaGFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1oYXNDaGFuZ2VzKSBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmRpcnR5IFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgQ29udGFpbmVyIC0gYHRydWVgIGlmIHRoZXJlIGFyZSBhbnkgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGluaXRpYWwgbG9hZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EaXJ0eVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIGRpcnR5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IGFmdGVyIHRoZSB0YXNrIGhhcyBiZWVuIHNjaGVkdWxlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGVuZGluZyBtb3VzZXVwIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnByb3h5RWxlbWVudCBUaGUgcHJveHkgZWxlbWVudCBzaG93aW5nIHRoZSBkcmFnIGNyZWF0aW9uIHpvbmUuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRHJhZ0NyZWF0ZUVuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQsIHByb3h5RWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYWZ0ZXIgdGhlIGRyYWcgc3RhcnQgaGFzIGNyZWF0ZWQgYSBwcm94eSBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnByb3h5RWxlbWVudCBUaGUgcHJveHkgcmVwcmVzZW50aW5nIHRoZSBuZXcgZXZlbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRHJhZ0NyZWF0ZVN0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgcHJveHlFbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hpbGUgZHJhZyBzZWxlY3RpbmcuIFVJIHdpbGwgdXBkYXRlIHdpdGggY3VycmVudCByYW5nZSwgYnV0IHRoZSBjZWxscyB3aWxsIG5vdCBiZSBzZWxlY3RlZCB1bnRpbFxuICAgICAqIG1vdXNlIHVwLiBUaGlzIGV2ZW50IGNhbiBiZSBsaXN0ZW5lZCBmb3IgdG8gcGVyZm9ybSBhY3Rpb25zIHdoaWxlIGRyYWcgc2VsZWN0aW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dyaWRMb2NhdGlvbkNvbmZpZ1tdLEdyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgZHJhZ2dlZCBvdmVyXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0ZWRSZWNvcmRzIFRoZSByZWNvcmRzIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGRyYWdnZWQgb3ZlclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRyYWdTZWxlY3Rpbmc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbkNvbmZpZ1tdfEdyaWRMb2NhdGlvbltdLCBzZWxlY3RlZFJlY29yZHM6IE1vZGVsW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0J3MgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudCBUaGUgV2lkZ2V0J3MgZWxlbWVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FbGVtZW50Q3JlYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhlIGVkaXRvciB3aWxsIGxvYWQgdGhlIGV2ZW50IHJlY29yZCBkYXRhIGludG8gaXRzIGlucHV0IGZpZWxkcy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91XG4gICAgICogd2FudCB0byBtb2RpZnkgdGhlIGZpZWxkcyBiZWZvcmUgZGF0YSBpcyBsb2FkZWQgKGUuZy4gc2V0IHNvbWUgaW5wdXQgZmllbGQgdG8gYmUgcmVhZG9ubHkpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGVkaXRvciB3aWRnZXRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJFdmVudE1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50RWRpdEJlZm9yZVNldFJlY29yZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ29udGFpbmVyLCByZWNvcmQ6IFNjaGVkdWxlckV2ZW50TW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIGFuIGV2ZW50LiBBbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBpdGVtc1xuICAgICAqIHRvIHNob3cgaW4gdGhlIHNhbWUgd2F5IGFzIGluIGBwcm9jZXNzSXRlbXNgLiBSZXR1cm5pbmcgYGZhbHNlYCBmcm9tIGEgbGlzdGVuZXIgcHJldmVudHMgdGhlIG1lbnUgZnJvbVxuICAgICAqIGJlaW5nIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJFdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBFdmVudCByZWNvcmQgZm9yIHdoaWNoIHRoZSBtZW51IHdhcyB0cmlnZ2VyZWRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJSZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBSZXNvdXJjZSByZWNvcmRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJBc3NpZ25tZW50TW9kZWx9IGV2ZW50LmFzc2lnbm1lbnRSZWNvcmQgQXNzaWdubWVudCByZWNvcmQsIGlmIGFzc2lnbm1lbnRzIGFyZSB1c2VkXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZXZlbnRFbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBQb2ludGVyIGV2ZW50IHdoaWNoIHRyaWdnZXJlZCB0aGUgY29udGV4dCBtZW51IChpZiBhbnkpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXZlbnRNZW51QmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgYXNzaWdubWVudFJlY29yZDogU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsLCBldmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudD86IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJBc3NpZ25tZW50TW9kZWx9IGV2ZW50LmFzc2lnbm1lbnRSZWNvcmQgQXNzaWdubWVudCByZWNvcmQsIGlmIGFzc2lnbm1lbnRzIGFyZSB1c2VkXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZXZlbnRFbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXZlbnRNZW51SXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBpdGVtOiBNZW51SXRlbSwgZXZlbnRSZWNvcmQ6IFNjaGVkdWxlckV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBTY2hlZHVsZXJSZXNvdXJjZU1vZGVsLCBhc3NpZ25tZW50UmVjb3JkOiBTY2hlZHVsZXJBc3NpZ25tZW50TW9kZWwsIGV2ZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgYWZ0ZXIgc2hvd2luZyB0aGUgY29udGV4dCBtZW51IGZvciBhbiBldmVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgRXZlbnQgcmVjb3JkIGZvciB3aGljaCB0aGUgbWVudSB3YXMgdHJpZ2dlcmVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsfSBldmVudC5hc3NpZ25tZW50UmVjb3JkIEFzc2lnbm1lbnQgcmVjb3JkLCBpZiBhc3NpZ25tZW50cyBhcmUgdXNlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmV2ZW50RWxlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50TWVudVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgbWVudTogTWVudSwgZXZlbnRSZWNvcmQ6IFNjaGVkdWxlckV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBTY2hlZHVsZXJSZXNvdXJjZU1vZGVsLCBhc3NpZ25tZW50UmVjb3JkOiBTY2hlZHVsZXJBc3NpZ25tZW50TW9kZWwsIGV2ZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9uIGVhY2ggcmVzaXplIG1vdmUgZXZlbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBTY2hlZHVsZXIgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJFdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBFdmVudCByZWNvcmQgYmVpbmcgcmVzaXplZFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuc3RhcnREYXRlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudFxuICAgICAqIEBwYXJhbSB7RXZlbnRSZXNpemVEYXRhW119IGV2ZW50LnJlc2l6ZURhdGEgUmVzaXplIGRhdGEgZm9yIHNlbGVjdGVkIGV2ZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50UGFydGlhbFJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBldmVudFJlY29yZDogU2NoZWR1bGVyRXZlbnRNb2RlbCwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBlbGVtZW50OiBIVE1MRWxlbWVudCwgcmVzaXplRGF0YTogRXZlbnRSZXNpemVEYXRhW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIGFmdGVyIHRoZSByZXNpemluZyBnZXN0dXJlIGhhcyBmaW5pc2hlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBTY2hlZHVsZXIgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoYW5nZWQgU2hvd3MgaWYgdGhlIHJlY29yZCBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHRoZSByZXNpemUgYWN0aW9uXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgRXZlbnQgcmVjb3JkIGJlaW5nIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50UmVzaXplRGF0YVtdfSBldmVudC5yZXNpemVEYXRhIFJlc2l6ZSBkYXRhIGZvciBzZWxlY3RlZCBldmVudHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudFJlc2l6ZUVuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBjaGFuZ2VkOiBib29sZWFuLCBldmVudFJlY29yZDogU2NoZWR1bGVyRXZlbnRNb2RlbCwgcmVzaXplRGF0YTogRXZlbnRSZXNpemVEYXRhW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIHdoZW4gZXZlbnQgcmVzaXppbmcgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgRXZlbnQgcmVjb3JkIGJlaW5nIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJSZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBSZXNvdXJjZSByZWNvcmQgdGhlIHJlc2l6ZSBzdGFydHMgd2l0aGluXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICogQHBhcmFtIHtFdmVudFJlc2l6ZURhdGFbXX0gZXZlbnQucmVzaXplRGF0YSBSZXNpemUgZGF0YSBmb3Igc2VsZWN0ZWQgZXZlbnRzLiBPbmx5IGF2YWlsYWJsZSB3aGVuIFtyZXNpemVTZWxlY3RlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZmVhdHVyZS9FdmVudFJlc2l6ZSNjb25maWctcmVzaXplU2VsZWN0ZWQpIGlzIGB0cnVlYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50UmVzaXplU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZXZlbnRSZWNvcmQ6IFNjaGVkdWxlckV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBTY2hlZHVsZXJSZXNvdXJjZU1vZGVsLCBldmVudDogTW91c2VFdmVudCwgcmVzaXplRGF0YTogRXZlbnRSZXNpemVEYXRhW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIFBybyBvbiBlYWNoIHNlZ21lbnQgcmVzaXplIG1vdmUgZXZlbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8udmlldy5TY2hlZHVsZXJQcm99IGV2ZW50LnNvdXJjZSBTY2hlZHVsZXIgUHJvIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgU2VnbWVudCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGVcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmVuZERhdGVcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5lbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXZlbnRTZWdtZW50UGFydGlhbFJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvLCBldmVudFJlY29yZDogRXZlbnRNb2RlbCwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgUHJvIGFmdGVyIHRoZSByZXNpemluZyBnZXN0dXJlIGhhcyBmaW5pc2hlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8udmlldy5TY2hlZHVsZXJQcm99IGV2ZW50LnNvdXJjZSBTY2hlZHVsZXIgUHJvIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGFuZ2VkIFNob3dzIGlmIHRoZSByZWNvcmQgaGFzIGJlZW4gY2hhbmdlZCBieSB0aGUgcmVzaXplIGFjdGlvblxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIFNlZ21lbnQgYmVpbmcgcmVzaXplZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50U2VnbWVudFJlc2l6ZUVuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvLCBjaGFuZ2VkOiBib29sZWFuLCBldmVudFJlY29yZDogRXZlbnRNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgUHJvIHdoZW4gc2VnbWVudCByZXNpemluZyBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8udmlldy5TY2hlZHVsZXJQcm99IGV2ZW50LnNvdXJjZSBTY2hlZHVsZXIgUHJvIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgU2VnbWVudCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuU2NoZWR1bGVyUHJvUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkIHRoZSByZXNpemUgc3RhcnRzIHdpdGhpblxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50U2VnbWVudFJlc2l6ZVN0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXJQcm8sIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUHJvUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBQYW5lbCBpcyBleHBhbmRlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQYW5lbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgYSBwYXJlbnQgbm9kZSByZWNvcmQgaXMgZXhwYW5kZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHdoaWNoIGhhcyBiZWVuIGV4cGFuZGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV4cGFuZE5vZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBmaWxlIGlzIGRyb3BwZWQgb24gdGhlIHdpZGdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgb3duaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0RhdGFUcmFuc2Zlckl0ZW19IGV2ZW50LmZpbGUgVGhlIGRyb3BwZWQgZmlsZSBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRHJhZ0V2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsZURyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGZpbGU6IERhdGFUcmFuc2Zlckl0ZW0sIGRvbUV2ZW50OiBEcmFnRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGUgRmlsbEhhbmRsZSBkcmFnZ2luZyBpcyBmaW5hbGl6ZWQgYW5kIHZhbHVlcyBhcmUgYXBwbGllZCB0byBjZWxscywgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGVcbiAgICAgKiBkcmFnIG9wZXJhdGlvbiBmcm9tIGFwcGx5aW5nIGRhdGEgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5mcm9tIFRoZSBmcm9tIGNlbGxcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRvIFRoZSB0byBjZWxsXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVCZWZvcmVEcmFnRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBmcm9tOiBHcmlkTG9jYXRpb24sIHRvOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hpbGUgZHJhZ2dpbmcgdGhlIEZpbGxIYW5kbGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZnJvbSBUaGUgZnJvbSBjZWxsXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50byBUaGUgdG8gY2VsbFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlRHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGZyb206IEdyaWRMb2NhdGlvbiwgdG86IEdyaWRMb2NhdGlvbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBGaWxsSGFuZGxlIGRyYWcgb3BlcmF0aW9uIGlzIGFib3J0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsbEhhbmRsZURyYWdBYm9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIGEgRmlsbEhhbmRsZSBkcmFnIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5mcm9tIFRoZSBmcm9tIGNlbGxcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRvIFRoZSB0byBjZWxsXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVEcmFnRW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZnJvbTogR3JpZExvY2F0aW9uLCB0bzogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBkcmFnZ2luZyBvZiB0aGUgRmlsbEhhbmRsZSBzdGFydHMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuY2VsbCBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sdW1uIC8gcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjZWxsOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gY2VsbCBlZGl0aW5nIGlzIGZpbmlzaGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge0NlbGxFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbmlzaENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIHJvdyBlZGl0aW5nIGlzIGZpbmlzaGVkLCByZXR1cm4gZmFsc2UgdG8gc2lnbmFsIHRoYXQgdGhlIHZhbHVlIGlzIGludmFsaWQgYW5kIGVkaXRpbmcgc2hvdWxkIG5vdCBiZSBmaW5hbGl6ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtZmluaXNoUm93RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUYXJnZXQgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaW5pc2hSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZW50ZXJzIHRoaXMgV2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNJbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBgYmx1cmAgZXZlbnQuXG4gICAgICogZm9jdXMgbW92aW5nIGZyb20gd2l0aGluIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUsIGV2ZW4gaWYgdGhlcmUgYXJlIGZsb2F0aW5nIHdpZGdldHNcbiAgICAgKiB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZXZlbnQuIFRoaXMgaXMgd2hlbiBmb2N1cyBleGl0cyB0aGlzIHdpZGdldCBjb21wbGV0ZWx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIGRyYWdnaW5nIHN0YXJ0cywgcmV0dXJuIGZhbHNlIHRvIHByZXZlbnQgdGhlIGRyYWcgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnQsVG91Y2hFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93QmVmb3JlRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyByZWNvcmRzOiBNb2RlbFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50fFRvdWNoRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhlIHJvdyBkcm9wIG9wZXJhdGlvbiBpcyBmaW5hbGl6ZWQuIFlvdSBjYW4gcmV0dXJuIGZhbHNlIHRvIGFib3J0IHRoZSBkcm9wIG9wZXJhdGlvbiwgb3IgYVxuICAgICAqIFByb21pc2UgeWllbGRpbmcgYHRydWVgIC8gYGZhbHNlYCB3aGljaCBhbGxvd3MgZm9yIGFzeW5jaHJvbm91cyBhYm9ydCAoZS5nLiBmaXJzdCBzaG93IHVzZXIgYSBjb25maXJtYXRpb24gZGlhbG9nKS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LnZhbGlkIFNldCB0aGlzIHRvIHRydWUgb3IgZmFsc2UgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiBpcyB2YWxpZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0Lmluc2VydEJlZm9yZSBUaGUgcmVjb3JkIHRvIGluc2VydCBiZWZvcmUgKGBudWxsYCBpZiBpbnNlcnRpbmcgYXQgbGFzdCBwb3NpdGlvbiBvZiBhIHBhcmVudCBub2RlKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0LnBhcmVudCBUaGUgcGFyZW50IHJlY29yZCBvZiB0aGUgY3VycmVudCBkcm9wIHBvc2l0aW9uIChvbmx5IGFwcGxpY2FibGUgZm9yIHRyZWVzKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7UmVjb3JkUG9zaXRpb25Db250ZXh0W119IGV2ZW50LmNvbnRleHQub2xkUG9zaXRpb25Db250ZXh0IEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXMgdHJlZSBwb3NpdGlvbi4gT2JqZWN0cyBjb250YWluIHRoZSBgcmVjb3JkYCwgYW5kIGl0cyBvcmlnaW5hbCBgcGFyZW50SW5kZXhgIGFuZCBgcGFyZW50SWRgIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93QmVmb3JlRHJvcEZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyB2YWxpZDogYm9vbGVhbiwgaW5zZXJ0QmVmb3JlOiBNb2RlbCwgcGFyZW50OiBNb2RlbCwgcmVjb3JkczogTW9kZWxbXSwgb2xkUG9zaXRpb25Db250ZXh0OiBSZWNvcmRQb3NpdGlvbkNvbnRleHRbXSB9LCBldmVudDogTW91c2VFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoaWxlIHRoZSByb3cgaXMgYmVpbmcgZHJhZ2dlZCwgaW4gdGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHlvdSBoYXZlIGFjY2VzcyB0byBgY29udGV4dC5pbnNlcnRCZWZvcmVgIGEgZ3JpZCAvXG4gICAgICogdHJlZSByZWNvcmQsIGFuZCBhZGRpdGlvbmFsbHkgYGNvbnRleHQucGFyZW50YCAoYSBUcmVlTm9kZSkgZm9yIHRyZWVzLiBZb3UgY2FuIHNpZ25hbCB0aGF0IHRoZSBkcm9wIHBvc2l0aW9uIGlzXG4gICAgICogdmFsaWQgb3IgaW52YWxpZCBieSBzZXR0aW5nIGBjb250ZXh0LnZhbGlkID0gZmFsc2U7YFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgU2V0IHRoaXMgdG8gdHJ1ZSBvciBmYWxzZSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0Lmluc2VydEJlZm9yZSBUaGUgcmVjb3JkIHRvIGluc2VydCBiZWZvcmUgKGBudWxsYCBpZiBpbnNlcnRpbmcgYXQgbGFzdCBwb3NpdGlvbiBvZiBhIHBhcmVudCBub2RlKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0LnBhcmVudCBUaGUgcGFyZW50IHJlY29yZCBvZiB0aGUgY3VycmVudCBkcm9wIHBvc2l0aW9uIChvbmx5IGFwcGxpY2FibGUgZm9yIHRyZWVzKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93RHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgdmFsaWQ6IGJvb2xlYW4sIGluc2VydEJlZm9yZTogTW9kZWwsIHBhcmVudDogTW9kZWwsIHJlY29yZHM6IE1vZGVsW10gfSwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSByb3cgZHJhZyBvcGVyYXRpb24gaXMgYWJvcnRlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0RyYWdBYm9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgcmVjb3JkczogTW9kZWxbXSB9LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBkcmFnZ2luZyBzdGFydHMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudCxUb3VjaEV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHJlY29yZHM6IE1vZGVsW10gfSwgZXZlbnQ6IE1vdXNlRXZlbnR8VG91Y2hFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgdGhlIHJvdyBkcm9wIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLCByZWdhcmRsZXNzIG9mIHZhbGlkaXR5XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC52YWxpZCB0cnVlIG9yIGZhbHNlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIHdhcyB2YWxpZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0Lmluc2VydEJlZm9yZSBUaGUgcmVjb3JkIHRvIGluc2VydCBiZWZvcmUgKGBudWxsYCBpZiBpbnNlcnRpbmcgYXQgbGFzdCBwb3NpdGlvbiBvZiBhIHBhcmVudCBub2RlKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0LnBhcmVudCBUaGUgcGFyZW50IHJlY29yZCBvZiB0aGUgY3VycmVudCBkcm9wIHBvc2l0aW9uIChvbmx5IGFwcGxpY2FibGUgZm9yIHRyZWVzKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7UmVjb3JkUG9zaXRpb25Db250ZXh0W119IGV2ZW50LmNvbnRleHQub2xkUG9zaXRpb25Db250ZXh0IEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXMgdHJlZSBwb3NpdGlvbi4gT2JqZWN0cyBjb250YWluIHRoZSByZWNvcmQsIGFuZCBpdHMgb3JpZ2luYWwgYHBhcmVudEluZGV4YCBhbmQgYHBhcmVudElkYCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0Ryb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHZhbGlkOiBib29sZWFuLCBpbnNlcnRCZWZvcmU6IE1vZGVsLCBwYXJlbnQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdLCBvbGRQb3NpdGlvbkNvbnRleHQ6IFJlY29yZFBvc2l0aW9uQ29udGV4dFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgZ3JpZCBoZWFkZXIgaXMgY2xpY2tlZCBvbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1oZWFkZXJDbGljaylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHRyaWdnZXJpbmcgRE9NIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBjbGlja2VkIG9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlckNsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZG9tRXZlbnQ6IEV2ZW50LCBjb2x1bW46IENvbHVtbiB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIGhlYWRlci5cbiAgICAgKiBBbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBpdGVtcyB0byBzaG93IGluIHRoZSBzYW1lIHdheSBhcyBpbiB0aGUgW3Byb2Nlc3NJdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvSGVhZGVyTWVudSNjb25maWctcHJvY2Vzc0l0ZW1zKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1oZWFkZXJNZW51QmVmb3JlU2hvdylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlck1lbnVCZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGNvbHVtbjogQ29sdW1uIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGluIHRoZSBoZWFkZXIgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyTWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjb2x1bW46IENvbHVtbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYWZ0ZXIgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBoZWFkZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlck1lbnVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGNvbHVtbjogQ29sdW1uIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGEgY2hlY2sgaXRlbSBpcyB0b2dnbGVkIGluIHRoZSBoZWFkZXIgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGVja2VkIENoZWNrZWQgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyTWVudVRvZ2dsZUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjb2x1bW46IENvbHVtbiwgY2hlY2tlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IHdhcyBoaWRkZW5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHJvdyBsb2NraW5nIGlzIGVuYWJsZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5jbG9uZSBUaGUgY3JlYXRlZCBjbG9uZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkxvY2tSb3dzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2xvbmU6IEdyaWRCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBNb3VzZSBtb3ZlZCBvdXQgZnJvbSBlbGVtZW50IGluIGdyaWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Nb3VzZU91dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBNb3VzZSBtb3ZlZCBpbiBvdmVyIGVsZW1lbnQgaW4gZ3JpZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk1vdXNlT3ZlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdoZW4gcHJvamVjdCBjb250ZW50IGlzIGV4cG9ydGVkXG4gICAgICogdG8gWE1MLCBiZWZvcmUgdGhlIFhNTCBpcyBkb3dubG9hZGVkIGJ5IHRoZSBicm93c2VyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29uZmlnIEV4cG9ydCBjb25maWdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZmlsZUNvbnRlbnQgRXhwb3J0ZWQgWE1MLWZpbGUgY29udGVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk1zcEV4cG9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNvbmZpZzogb2JqZWN0LCBmaWxlQ29udGVudDogc3RyaW5nIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgdXNlciBnZXN0dXJlIGNhdXNlcyB0aGUgYWN0aXZlIGl0ZW0gdG8gY2hhbmdlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudCB3aGljaCBpbnN0aWdhdGVkIG5hdmlnYXRpb24uIE1heSBiZSBhIGNsaWNrIG9yIGtleSBvciBmb2N1cyBldmVudC5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50LG51bGx9IGV2ZW50Lml0ZW0gVGhlIG5ld2x5IGFjdGl2ZSBpdGVtLCBvciBgbnVsbGAgaWYgZm9jdXMgbW92ZWQgb3V0LlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnQsbnVsbH0gZXZlbnQub2xkSXRlbSBUaGUgcHJldmlvdXNseSBhY3RpdmUgaXRlbSwgb3IgYG51bGxgIGlmIGZvY3VzIGlzIG1vdmluZyBpbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25OYXZpZ2F0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50OiBFdmVudCwgaXRlbTogSFRNTEVsZW1lbnR8bnVsbCwgb2xkSXRlbTogSFRNTEVsZW1lbnR8bnVsbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB0aGUgcmVxdWVzdGVkIGRhdGUgcmFuZ2UgY2Fubm90IGZpdCBpbnRvIGFueSB6b29tIGxldmVsIGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50IGxldmVsLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuY3VycmVudFpvb21MZXZlbCBUaGUgY3VycmVudCB6b29tIGxldmVsXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgVGhlIHJlcXVlc3RlZCBzdGFydCBkYXRlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlIFRoZSByZXF1ZXN0ZWQgZW5kIGRhdGVcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ob1pvb21DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjdXJyZW50Wm9vbUxldmVsOiBudW1iZXIsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSB3aWRnZXQgd2hpY2ggaGFkIGJlZW4gaW4gYSBub24tdmlzaWJsZSBzdGF0ZSBmb3IgYW55IHJlYXNvblxuICAgICAqIGFjaGlldmVzIHZpc2liaWxpdHkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtcGFpbnQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBwYWludGVkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuZmlyc3RQYWludCBgdHJ1ZWAgaWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFpbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGFpbnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZmlyc3RQYWludDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGFmdGVyIGEgcGFzdGUgYWN0aW9uIGlzIHBlcmZvcm1lZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY2xpcGJvYXJkRGF0YSBUaGUgY2xpcGJvYXJkRGF0YSB0aGF0IHdhcyBwYXN0ZWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5tb2RpZmllZFJlY29yZHMgVGhlIHJlY29yZHMgd2hpY2ggaGF2ZSBiZWVuIG1vZGlmaWVkIGR1ZSB0byB0aGUgcGFzdGUgYWN0aW9uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50YXJnZXRDZWxsIFRoZSBjZWxsIGZyb20gd2hpY2ggdGhlIHBhc3RlIHdpbGwgYmUgc3RhcnRlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5lbnRpdHlOYW1lICdjZWxsJyB0byBkaXN0aW5ndWlzaCB0aGlzIGV2ZW50IGZyb20gb3RoZXIgcGFzdGUgZXZlbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGFzdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNsaXBib2FyZERhdGE6IHN0cmluZywgbW9kaWZpZWRSZWNvcmRzOiBNb2RlbFtdLCB0YXJnZXRDZWxsOiBHcmlkTG9jYXRpb24sIGVudGl0eU5hbWU6IHN0cmluZyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gZXhwb3J0IGhhcyBmaW5pc2hlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1Jlc3BvbnNlfSBldmVudC5yZXNwb25zZSBPcHRpb25hbCByZXNwb25zZSwgaWYgcmVjZWl2ZWRcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBldmVudC5lcnJvciBPcHRpb25hbCBlcnJvciwgaWYgZXhjZXB0aW9uIG9jY3VycmVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGRmRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVzcG9uc2U/OiBhbnksIGVycm9yPzogRXJyb3IgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCB3aGVuIGRyYWdnaW5nIHRoZSBwZXJjZW50IGJhclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlRpbWVsaW5lQmFzZX0gZXZlbnQuc291cmNlIFNjaGVkdWxlclBybyBvciBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSB0YXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBlcmNlbnRCYXJEcmFnOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBUaW1lbGluZUJhc2UsIHRhc2tSZWNvcmQ6IE1vZGVsLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGlmIGEgcGVyY2VudCBiYXIgZHJhZy1kcm9wIG9wZXJhdGlvbiBpcyBhYm9ydGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuVGltZWxpbmVCYXNlfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyUHJvIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIHRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGVyY2VudEJhckRyYWdBYm9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVGltZWxpbmVCYXNlLCB0YXNrUmVjb3JkOiBNb2RlbCwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCB3aGVuIHBlcmNlbnQgYmFyIGRyYWdnaW5nIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlRpbWVsaW5lQmFzZX0gZXZlbnQuc291cmNlIFNjaGVkdWxlclBybyBvciBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSB0YXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBlcmNlbnRCYXJEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVsaW5lQmFzZSwgdGFza1JlY29yZDogTW9kZWwsIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiBkcm9wcGluZyB0aGUgcGVyY2VudCBiYXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5UaW1lbGluZUJhc2V9IGV2ZW50LnNvdXJjZSBTY2hlZHVsZXJQcm8gb3IgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgdGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IEJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QZXJjZW50QmFyRHJvcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVGltZWxpbmVCYXNlLCB0YXNrUmVjb3JkOiBNb2RlbCwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIHRoZSBbdmlld1ByZXNldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9UaW1lbGluZVZpZXdQcmVzZXRzI2NvbmZpZy12aWV3UHJlc2V0KSBoYXMgY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGlzIFNjaGVkdWxlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnN0YXJ0RGF0ZSBUaGUgbmV3IHN0YXJ0IGRhdGUgb2YgdGhlIHRpbWVsaW5lLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuY2VudGVyRGF0ZSBUaGUgbmV3IGNlbnRlciBkYXRlIG9mIHRoZSB0aW1lbGluZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmVuZERhdGUgVGhlIG5ldyBlbmQgZGF0ZSBvZiB0aGUgdGltZWxpbmUuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIucHJlc2V0LlZpZXdQcmVzZXR9IGV2ZW50LmZyb20gVGhlIG91dGdvaW5nIFZpZXdQcmVzZXQuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIucHJlc2V0LlZpZXdQcmVzZXR9IGV2ZW50LnRvIFRoZSBWaWV3UHJlc2V0IGJlaW5nIHN3aXRjaGVkIHRvLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblByZXNldENoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBzdGFydERhdGU6IERhdGUsIGNlbnRlckRhdGU6IERhdGUsIGVuZERhdGU6IERhdGUsIGZyb206IFZpZXdQcmVzZXQsIHRvOiBWaWV3UHJlc2V0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB3aWRnZXQgd2hlbiB0aGUgZWRpdG9yIGZvciBhIHByb2plY3QgaXMgY2FuY2VsZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuUHJvamVjdE1vZGVsfSBldmVudC5wcm9qZWN0UmVjb3JkIFRoZSBlZGl0ZWQgcHJvamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQud2lkZ2V0LlByb2plY3RFZGl0b3J9IGV2ZW50LmVkaXRvciBUaGUgZWRpdG9yXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUHJvamVjdEVkaXRDYW5jZWxlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHByb2plY3RSZWNvcmQ6IFByb2plY3RNb2RlbCwgZWRpdG9yOiBQcm9qZWN0RWRpdG9yIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgV2lkZ2V0J3MgcmVhZCBvbmx5IHN0YXRlIGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5yZWFkT25seSBSZWFkIG9ubHkgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVhZE9ubHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWFkT25seTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHdpZGdldCdzIGVsZW1lbnRzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQgZHVlIHRvIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNhbGxcbiAgICAgKiB0byBbcmVjb21wb3NlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1yZWNvbXBvc2UpLCBpZiB0aGlzIHJlc3VsdHMgaW4gc29tZSBjaGFuZ2UgdG8gdGhlIHdpZGdldCdzIHJlbmRlcmVkIERPTSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWNvbXBvc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUYXNrIGlzIHJlbGVhc2VkLCBubyBsb25nZXIgaW4gdmlldy9yZW1vdmVkLiBBIGdvb2Qgc3BvdCBmb3IgY2xlYW5pbmcgY3VzdG9tIHRoaW5ncyBhZGRlZCBpbiBhIGByZW5kZXJUYXNrYFxuICAgICAqIGxpc3RlbmVyIHVwLCBpZiBuZWVkZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5yZW5kZXJEYXRhIFRhc2sgcmVuZGVyIGRhdGFcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBSZW5kZXJlZCB0YXNrXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudCBUYXNrIGVsZW1lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWxlYXNlVGFzazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHJlbmRlckRhdGE6IG9iamVjdCwgdGFza1JlY29yZDogVGFza01vZGVsLCBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgYSByb3cgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLnJvdy5Sb3d9IGV2ZW50LnJvdyBUaGUgcm93IHRoYXQgaGFzIGJlZW4gcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIGZvciB0aGUgcm93LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5yZWNvcmRJbmRleCBUaGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgcmVjb3JkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlbmRlclJvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcm93OiBSb3csIHJlY29yZDogTW9kZWwsIHJlY29yZEluZGV4OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEdyaWQgcm93cyBoYXZlIGJlZW4gcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoaXMgZ3JpZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZW5kZXJSb3dzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUYXNrIGlzIHJlbmRlcmVkLCBpdHMgZWxlbWVudCBpcyBhdmFpbGFibGUgaW4gRE9NLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVuZGVyRGF0YSBUYXNrIHJlbmRlciBkYXRhXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgUmVuZGVyZWQgdGFza1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGFzayBlbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVuZGVyVGFzazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHJlbmRlckRhdGE6IG9iamVjdCwgdGFza1JlY29yZDogVGFza01vZGVsLCBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5jYXBzdWxhdGluZyBlbGVtZW50IG9mIGEgV2lkZ2V0IHJlc2l6ZXMgKm9ubHkgd2hlbiBbbW9uaXRvclJlc2l6ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1vbml0b3JSZXNpemUpIGlzIGB0cnVlYCouXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggVGhlIG5ldyB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5oZWlnaHQgVGhlIG5ldyBoZWlnaHRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkV2lkdGggVGhlIG9sZCB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRIZWlnaHQgVGhlIG9sZCBoZWlnaHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG9sZFdpZHRoOiBudW1iZXIsIG9sZEhlaWdodDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBjbGlja2luZyBhIHJlc291cmNlIGF2YXRhciBvciBjaGlwIGluIHRoZSBjZWxscyBvZiB0aGUgW1Jlc291cmNlQXNzaWdubWVudENvbHVtbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9jb2x1bW4vUmVzb3VyY2VBc3NpZ25tZW50Q29sdW1uKS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhpcyBHYW50dFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5SZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBSZXNvdXJjZSByZWNvcmRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzb3VyY2VBc3NpZ25tZW50Q2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIHJlc291cmNlUmVjb3JkOiBSZXNvdXJjZU1vZGVsLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEdyaWQgcmVzaXplIGxlYWQgdG8gYSBuZXcgcmVzcG9uc2l2ZSBsZXZlbCBiZWluZyBhcHBsaWVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgR3JpZCB0aGF0IHdhcyByZXNpemVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmxldmVsIE5ldyByZXNwb25zaXZlIGxldmVsIChzbWFsbCwgbGFyZ2UsIGV0YylcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggTmV3IHdpZHRoIGluIHB4XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm9sZExldmVsIE9sZCByZXNwb25zaXZlIGxldmVsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIE9sZCB3aWR0aCBpbiBweFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc3BvbnNpdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCBsZXZlbDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBvbGRMZXZlbDogc3RyaW5nLCBvbGRXaWR0aDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIHdoZW4gYSByb3cgaGFzIGZpbmlzaGVkIGNvbGxhcHNpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93Q29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIHdoZW4gYSByb3cgZXhwYW5kIGhhcyBmaW5pc2hlZCBleHBhbmRpbmcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtcm93RXhwYW5kKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5leHBhbmRlZEVsZW1lbnRzIEFuIG9iamVjdCB3aXRoIHRoZSBHcmlkIHJlZ2lvbiBuYW1lIGFzIHByb3BlcnR5IGFuZCB0aGUgZXhwYW5kZWQgYm9keSBlbGVtZW50IGFzIHZhbHVlXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LndpZGdldCBJbiBjYXNlIG9mIGV4cGFuZGluZyBhIFdpZGdldCwgdGhpcyB3aWxsIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW5jZSBjcmVhdGVkIGJ5IHRoZSBhY3R1YWwgZXhwYW5zaW9uLiBJZiB0aGVyZSBpcyBtdWx0aXBsZSBHcmlkIHJlZ2lvbnMsIHVzZSB0aGUgYHdpZGdldHNgIHBhcmFtIGluc3RlYWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LndpZGdldHMgSW4gY2FzZSBvZiBleHBhbmRpbmcgYSBXaWRnZXQsIHRoaXMgd2lsbCBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgR3JpZCByZWdpb24gbmFtZSBhcyBwcm9wZXJ0eSBhbmQgdGhlIHJlZmVyZW5jZSB0byB0aGUgd2lkZ2V0IGluc3RhbmNlIGNyZWF0ZWQgYnkgdGhlIGFjdHVhbCBleHBhbnNpb25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dFeHBhbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsLCBleHBhbmRlZEVsZW1lbnRzOiBvYmplY3QsIHdpZGdldDogV2lkZ2V0LCB3aWRnZXRzOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhIHJvd1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSBob3ZlcmVkIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBjdXJyZW50bHkgaG92ZXJlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dNb3VzZUVudGVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGEgcm93XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvdyB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50IHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93TW91c2VMZWF2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIHRoZSBzY2hlZHVsZS5cbiAgICAgKiBBbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBpdGVtcyB0byBzaG93IGluIHRoZSBzYW1lIHdheSBhcyBpbiBgcHJvY2Vzc0l0ZW1zYC4gUmV0dXJuaW5nIGBmYWxzZWAgZnJvbSBhIGxpc3RlbmVyXG4gICAgICogcHJldmVudHMgdGhlIG1lbnUgZnJvbSBiZWluZyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5kYXRlIENsaWNrZWQgZGF0ZSwgcm91bmRlZCBhY2NvcmRpbmcgdG8gdmlld1ByZXNldCdzIHNldHRpbmdzXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsfSBldmVudC5hc3NpZ25tZW50UmVjb3JkIEFzc2lnbm1lbnQgcmVjb3JkLCBpZiBhc3NpZ25tZW50cyBhcmUgdXNlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmV2ZW50RWxlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNjaGVkdWxlTWVudUJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZGF0ZTogRGF0ZSwgYXNzaWdubWVudFJlY29yZDogU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsLCBldmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGluIHRoZSBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmRcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmRhdGUgQ2xpY2tlZCBkYXRlLCByb3VuZGVkIGFjY29yZGluZyB0byB2aWV3UHJlc2V0J3Mgc2V0dGluZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5lbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2NoZWR1bGVNZW51SXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBpdGVtOiBNZW51SXRlbSwgcmVzb3VyY2VSZWNvcmQ6IFNjaGVkdWxlclJlc291cmNlTW9kZWwsIGRhdGU6IERhdGUsIGVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBhZnRlciBzaG93aW5nIHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSBzY2hlZHVsZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmRcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmRhdGUgQ2xpY2tlZCBkYXRlLCByb3VuZGVkIGFjY29yZGluZyB0byB2aWV3UHJlc2V0J3Mgc2V0dGluZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXRFbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2NoZWR1bGVNZW51U2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIG1lbnU6IE1lbnUsIHJlc291cmNlUmVjb3JkOiBTY2hlZHVsZXJSZXNvdXJjZU1vZGVsLCBkYXRlOiBEYXRlLCB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogR3JpZCBoYXMgc2Nyb2xsZWQgdmVydGljYWxseVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5zY3JvbGxUb3AgVGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TY3JvbGw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHNjcm9sbFRvcDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiBvd25lciB3aGVuIHRoZSBzY3JvbGwgYnV0dG9uIGlzIGNsaWNrZWQsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZGVmYXVsdCBzY3JvbGwgYmVoYXZpb3JcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgRE9NIGV2ZW50XG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIHRhc2sgcmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2Nyb2xsQnV0dG9uQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBkb21FdmVudDogRXZlbnQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoZSBzZWxlY3Rpb24gaGFzIGJlZW4gY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHsnc2VsZWN0JywnZGVzZWxlY3QnfSBldmVudC5hY3Rpb24gYCdzZWxlY3QnYC9gJ2Rlc2VsZWN0J2BcbiAgICAgKiBAcGFyYW0geydyb3cnLCdjZWxsJ30gZXZlbnQubW9kZSBgJ3JvdydgL2AnY2VsbCdgXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuZGVzZWxlY3RlZCBUaGUgcmVjb3JkcyBkZXNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGVkIFRoZSByZWNvcmRzIHNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGlvbiBUaGUgcmVjb3JkcyBpbiB0aGUgbmV3IHNlbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuZGVzZWxlY3RlZENlbGxzIFRoZSBjZWxscyBkZXNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5zZWxlY3RlZENlbGxzIFRoZSBjZWxscyBzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbFNlbGVjdGlvbiBUaGUgY2VsbHMgaW4gdGhlIG5ldyBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgYWN0aW9uOiAnc2VsZWN0J3wnZGVzZWxlY3QnLCBtb2RlOiAncm93J3wnY2VsbCcsIHNvdXJjZTogR3JpZCwgZGVzZWxlY3RlZDogTW9kZWxbXSwgc2VsZWN0ZWQ6IE1vZGVsW10sIHNlbGVjdGlvbjogTW9kZWxbXSwgZGVzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25bXSwgc2VsZWN0ZWRDZWxsczogR3JpZExvY2F0aW9uW10sIGNlbGxTZWxlY3Rpb246IEdyaWRMb2NhdGlvbltdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGUgc2VsZWN0aW9uTW9kZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5zZWxlY3Rpb25Nb2RlIFRoZSBuZXcgW3NlbGVjdGlvbk1vZGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC92aWV3L21peGluL0dyaWRTZWxlY3Rpb24jY29uZmlnLXNlbGVjdGlvbk1vZGUpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uTW9kZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNlbGVjdGlvbk1vZGU6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gc3BsaXR0aW5nIHRoZSBHcmlkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZVtdfSBldmVudC5zdWJWaWV3cyBUaGUgc3ViIHZpZXdzIGNyZWF0ZWQgYnkgdGhlIHNwbGl0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm9wdGlvbnMgVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBzcGxpdCBjYWxsXG4gICAgICogQHBhcmFtIHsnaG9yaXpvbnRhbCcsJ3ZlcnRpY2FsJywnYm90aCd9IGV2ZW50Lm9wdGlvbnMuZGlyZWN0aW9uIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHNwbGl0XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50Lm9wdGlvbnMuYXRDb2x1bW4gVGhlIGNvbHVtbiB0byBzcGxpdCBhdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5vcHRpb25zLmF0UmVjb3JkIFRoZSByZWNvcmQgdG8gc3BsaXQgYXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TcGxpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN1YlZpZXdzOiBHcmlkQmFzZVtdLCBvcHRpb25zOiB7IGRpcmVjdGlvbjogJ2hvcml6b250YWwnfCd2ZXJ0aWNhbCd8J2JvdGgnLCBhdENvbHVtbjogQ29sdW1uLCBhdFJlY29yZDogTW9kZWwgfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYnkgdGhlIEdyaWQgd2hlbiB0aGUgY29sbGFwc2UgaWNvbiBpcyBjbGlja2VkLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGNvbGxhcHNlIGFjdGlvbixcbiAgICAgKiBpZiB5b3Ugd2FudCB0byBpbXBsZW1lbnQgeW91ciBvd24gYmVoYXZpb3IuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzdWJncmlkXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TcGxpdHRlckNvbGxhcHNlQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHN1YkdyaWQ6IFN1YkdyaWQsIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIGFmdGVyIGEgc3ViLWdyaWQgaGFzIGJlZW4gcmVzaXplZCB1c2luZyB0aGUgc3BsaXR0ZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHJlc2l6ZWQgc3ViZ3JpZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXR0ZXJEcmFnRW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIHdoZW4gYSBzdWItZ3JpZCByZXNpemUgZ2VzdHVyZSBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YmdyaWQgYWJvdXQgdG8gYmUgcmVzaXplZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXR0ZXJEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHN1YkdyaWQ6IFN1YkdyaWQsIGRvbUV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYnkgdGhlIEdyaWQgd2hlbiB0aGUgZXhwYW5kIGljb24gaXMgY2xpY2tlZC4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBleHBhbmQgYWN0aW9uLFxuICAgICAqIGlmIHlvdSB3YW50IHRvIGltcGxlbWVudCB5b3VyIG93biBiZWhhdmlvci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YmdyaWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0dGVyRXhwYW5kQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHN1YkdyaWQ6IFN1YkdyaWQsIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TdGFydENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gZWRpdGluZyBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3RhcnRSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBSb3dFZGl0b3JDb250ZXh0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBhZnRlciBhIHN1YiBncmlkIGlzIGNvbGxhcHNlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YiBncmlkIGluc3RhbmNlXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3ViR3JpZENvbGxhcHNlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBhZnRlciBhIHN1YiBncmlkIGlzIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuU3ViR3JpZH0gZXZlbnQuc3ViR3JpZCBUaGUgc3ViIGdyaWQgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TdWJHcmlkRXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSBjbGljayBvbiBhIHRhc2sgYmFyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgVGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHJpZ2h0Y2xpY2sgKG9yIGxvbmcgcHJlc3Mgb24gYSB0b3VjaCBkZXZpY2UpIG9uIGEgdGFzay5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIFRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrQ29udGV4dE1lbnU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSBkb3VibGVjbGljayBvbiBhIHRhc2suXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza0RibENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB3aGlsZSBhIHRhc2sgaXMgYmVpbmcgZHJhZ2dlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsW119IGV2ZW50LnRhc2tSZWNvcmRzXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGVcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmVuZERhdGVcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuZHJhZ0RhdGFcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoYW5nZWQgYHRydWVgIGlmIHN0YXJ0RGF0ZSBoYXMgY2hhbmdlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrRHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmRzOiBUYXNrTW9kZWxbXSwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBkcmFnRGF0YTogb2JqZWN0LCBjaGFuZ2VkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdoZW4gdGFzayBkcmFnZ2luZyBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbFtdfSBldmVudC50YXNrUmVjb3Jkc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkczogVGFza01vZGVsW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYWZ0ZXIgYSB2YWxpZCB0YXNrIGRyb3BcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbFtdfSBldmVudC50YXNrUmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuaXNDb3B5XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza0Ryb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkczogVGFza01vZGVsW10sIGlzQ29weTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IHdoZW4gdGhlIGVkaXRvciBmb3IgYW4gZXZlbnQgaXMgY2FuY2VsZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC50YXNrUmVjb3JkIHRoZSB0YXNrIGFib3V0IHRoZSBzaG93biBpbiB0aGUgZWRpdG9yXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ud2lkZ2V0LlRhc2tFZGl0b3JCYXNlfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tFZGl0Q2FuY2VsZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgdGFza1JlY29yZDogRXZlbnRNb2RlbCwgZWRpdG9yOiBUYXNrRWRpdG9yQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSBrZXlkb3duIGV2ZW50IGlzIG9ic2VydmVkIGlmIHRoZXJlIGFyZSBzZWxlY3RlZCB0YXNrcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhpcyBHYW50dFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza0tleURvd246IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIGV2ZW50OiBLZXlib2FyZEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIGtleXVwIGV2ZW50IGlzIG9ic2VydmVkIGlmIHRoZXJlIGFyZSBzZWxlY3RlZCB0YXNrcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhpcyBHYW50dFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza0tleVVwOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBldmVudDogS2V5Ym9hcmRFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIHRhc2suIEFsbG93cyBtYW5pcHVsYXRpb24gb2YgdGhlIGl0ZW1zXG4gICAgICogdG8gc2hvdyBpbiB0aGUgc2FtZSB3YXkgYXMgaW4gYHByb2Nlc3NJdGVtc2AuIFJldHVybmluZyBmYWxzZSBmcm9tIGEgbGlzdGVuZXIgcHJldmVudHMgdGhlIG1lbnUgZnJvbVxuICAgICAqIGJlaW5nIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7TWVudUl0ZW1FbnRyeVtdfSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIEV2ZW50IHJlY29yZCBmb3Igd2hpY2ggdGhlIG1lbnUgd2FzIHRyaWdnZXJlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhc2tFbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza01lbnVCZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgaXRlbXM6IE1lbnVJdGVtRW50cnlbXSwgdGFza1JlY29yZDogVGFza01vZGVsLCB0YXNrRWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGluIHRoZSBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFza0VsZW1lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrTWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBpdGVtOiBNZW51SXRlbSwgdGFza1JlY29yZDogVGFza01vZGVsLCB0YXNrRWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBhZnRlciBzaG93aW5nIHRoZSBjb250ZXh0IG1lbnUgZm9yIGFuIGV2ZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgRXZlbnQgcmVjb3JkIGZvciB3aGljaCB0aGUgbWVudSB3YXMgdHJpZ2dlcmVkXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFza0VsZW1lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrTWVudVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBtZW51OiBNZW51LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIHRhc2tFbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgbW91c2Vkb3duIG9uIGEgdGFzayBiYXIuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza01vdXNlRG93bjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBmb3IgbW91c2VvdXQgZnJvbSBhIHRhc2suXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza01vdXNlT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgbW91c2VvdmVyIG9uIGEgdGFzay5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIFRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrTW91c2VPdmVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgbW91c2V1cCBvbiBhIHRhc2sgYmFyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgVGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tNb3VzZVVwOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gY2xpY2tpbmcgYSBub253b3JraW5nIHRpbWUgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgY2hhcnQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5pbnRlcnZhbCBUaGUgcmF3IGRhdGEgZGVzY3JpYmluZyB0aGUgbm9ud29ya2luZyB0aW1lIGludGVydmFsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmludGVydmFsLm5hbWUgVGhlIGludGVydmFsIG5hbWUgKGlmIGFueSlcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmludGVydmFsLnN0YXJ0RGF0ZSBUaGUgaW50ZXJ2YWwgc3RhcnQgZGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuaW50ZXJ2YWwuZW5kRGF0ZSBUaGUgaW50ZXJ2YWwgZW5kIGRhdGVcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IEJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrTm9uV29ya2luZ1RpbWVDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgaW50ZXJ2YWw6IHsgbmFtZTogc3RyaW5nLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUgfSwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIHJpZ2h0LWNsaWNraW5nIGEgbm9ud29ya2luZyB0aW1lIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGNoYXJ0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuaW50ZXJ2YWwgVGhlIHJhdyBkYXRhIGRlc2NyaWJpbmcgdGhlIG5vbndvcmtpbmcgdGltZSBpbnRlcnZhbFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5pbnRlcnZhbC5uYW1lIFRoZSBpbnRlcnZhbCBuYW1lIChpZiBhbnkpXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5pbnRlcnZhbC5zdGFydERhdGUgVGhlIGludGVydmFsIHN0YXJ0IGRhdGVcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmludGVydmFsLmVuZERhdGUgVGhlIGludGVydmFsIGVuZCBkYXRlXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza05vbldvcmtpbmdUaW1lQ29udGV4dE1lbnU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIGludGVydmFsOiB7IG5hbWU6IHN0cmluZywgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlIH0sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBkb3VibGUtY2xpY2tpbmcgYSBub253b3JraW5nIHRpbWUgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgY2hhcnQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5pbnRlcnZhbCBUaGUgcmF3IGRhdGEgZGVzY3JpYmluZyB0aGUgbm9ud29ya2luZyB0aW1lIGludGVydmFsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmludGVydmFsLm5hbWUgVGhlIGludGVydmFsIG5hbWUgKGlmIGFueSlcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmludGVydmFsLnN0YXJ0RGF0ZSBUaGUgaW50ZXJ2YWwgc3RhcnQgZGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuaW50ZXJ2YWwuZW5kRGF0ZSBUaGUgaW50ZXJ2YWwgZW5kIGRhdGVcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IEJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrTm9uV29ya2luZ1RpbWVEYmxDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgaW50ZXJ2YWw6IHsgbmFtZTogc3RyaW5nLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUgfSwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgb24gZWFjaCByZXNpemUgbW92ZSBldmVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1Rhc2tSZXNpemVEYXRhW119IGV2ZW50LnJlc2l6ZURhdGEgRGF0YSBmb3IgdGhlIHRhc2tzIHRoYXQgYXJlIGJlaW5nIHJlc2l6ZWQuIE9ubHkgYXZhaWxhYmxlIHdoZW4gW3Jlc2l6ZVNlbGVjdGVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza1Jlc2l6ZSNjb25maWctcmVzaXplU2VsZWN0ZWQpIGlzIGB0cnVlYC4gVGhlIG5lc3RlZCBwcm9wZXJ0aWVzIGFyZSBzYW1lIGFzIGBjb250ZXh0YFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRhc2sgcmVjb3JkIGJlaW5nIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnN0YXJ0RGF0ZSBOZXcgc3RhcnREYXRlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlIE5ldyBlbmREYXRlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tQYXJ0aWFsUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVzaXplRGF0YTogVGFza1Jlc2l6ZURhdGFbXSwgdGFza1JlY29yZDogVGFza01vZGVsLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUsIGVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IGFmdGVyIHRoZSByZXNpemluZyBnZXN0dXJlIGhhcyBmaW5pc2hlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGFuZ2VkXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmRcbiAgICAgKiBAcGFyYW0ge1Rhc2tSZXNpemVEYXRhW119IGV2ZW50LnJlc2l6ZURhdGEgUmVzaXplIGRhdGEgZm9yIHNlbGVjdGVkIHRhc2tzLiBPbmx5IGF2YWlsYWJsZSB3aGVuIFtyZXNpemVTZWxlY3RlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tSZXNpemUjY29uZmlnLXJlc2l6ZVNlbGVjdGVkKSBpcyBgdHJ1ZWBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrUmVzaXplRW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2hhbmdlZDogYm9vbGVhbiwgdGFza1JlY29yZDogVGFza01vZGVsLCByZXNpemVEYXRhOiBUYXNrUmVzaXplRGF0YVtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdoZW4gdGFzayByZXNpemluZyBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudFxuICAgICAqIEBwYXJhbSB7VGFza1Jlc2l6ZURhdGFbXX0gZXZlbnQucmVzaXplRGF0YSBSZXNpemUgZGF0YSBmb3Igc2VsZWN0ZWQgdGFza3MuIE9ubHkgYXZhaWxhYmxlIHdoZW4gW3Jlc2l6ZVNlbGVjdGVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza1Jlc2l6ZSNjb25maWctcmVzaXplU2VsZWN0ZWQpIGlzIGB0cnVlYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tSZXNpemVTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IEV2ZW50LCByZXNpemVEYXRhOiBUYXNrUmVzaXplRGF0YVtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdoaWxlIGEgc2VnbWVudCBpcyBiZWluZyBkcmFnZ2VkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWxbXX0gZXZlbnQudGFza1JlY29yZHMgRHJhZ2dlZCBzZWdtZW50c1xuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuc3RhcnREYXRlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmRyYWdEYXRhXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGFuZ2VkIGB0cnVlYCBpZiBzdGFydERhdGUgaGFzIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza1NlZ21lbnREcmFnOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZHM6IFRhc2tNb2RlbFtdLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUsIGRyYWdEYXRhOiBvYmplY3QsIGNoYW5nZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgd2hlbiBzZWdtZW50IGRyYWdnaW5nIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsW119IGV2ZW50LnRhc2tSZWNvcmRzIERyYWdnZWQgc2VnbWVudHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrU2VnbWVudERyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmRzOiBUYXNrTW9kZWxbXSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBhZnRlciBhIHZhbGlkIHRhc2sgZHJvcFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsW119IGV2ZW50LnRhc2tSZWNvcmRzIERyb3BwZWQgc2VnbWVudHNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmlzQ29weVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tTZWdtZW50RHJvcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmRzOiBUYXNrTW9kZWxbXSwgaXNDb3B5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IG9uIGVhY2ggcmVzaXplIG1vdmUgZXZlbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBTZWdtZW50IGJlaW5nIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnN0YXJ0RGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZW5kRGF0ZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrU2VnbWVudFBhcnRpYWxSZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYWZ0ZXIgdGhlIHJlc2l6aW5nIGdlc3R1cmUgaGFzIGZpbmlzaGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hhbmdlZCBTaG93cyBpZiB0aGUgcmVjb3JkIGhhcyBiZWVuIGNoYW5nZWQgYnkgdGhlIHJlc2l6ZSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBTZWdtZW50IGJlaW5nIHJlc2l6ZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrU2VnbWVudFJlc2l6ZUVuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIGNoYW5nZWQ6IGJvb2xlYW4sIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB3aGVuIGV2ZW50IHJlc2l6aW5nIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFNlZ21lbnQgYmVpbmcgcmVzaXplZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlclJlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkIFJlc291cmNlIHJlY29yZCB0aGUgcmVzaXplIHN0YXJ0cyB3aXRoaW5cbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IEJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrU2VnbWVudFJlc2l6ZVN0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRpY2sgc2l6ZSBjaGFuZ2VzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LXRpY2tTaXplQ2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoaXMgU2NoZWR1bGVyIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC50aWNrU2l6ZSBUaGUgdGljayBzaXplIGluIHBpeGVsc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpY2tTaXplQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIHRpY2tTaXplOiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHRpbWVheGlzIGhhcyBjaGFuZ2VkLCBmb3IgZXhhbXBsZSBieSB6b29taW5nIG9yIGNvbmZpZ3VyaW5nIGEgbmV3IHRpbWUgc3Bhbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGlzIFNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb25maWcgQ29uZmlnIG9iamVjdCB1c2VkIHRvIHJlY29uZmlndXJlIHRoZSB0aW1lIGF4aXMuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5jb25maWcuc3RhcnREYXRlIE5ldyBzdGFydCBkYXRlIChpZiBzdXBwbGllZClcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmNvbmZpZy5lbmREYXRlIE5ldyBlbmQgZGF0ZSAoaWYgc3VwcGxpZWQpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZUF4aXNDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgY29uZmlnOiB7IHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSB9IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBhZnRlciBhIGNsaWNrIG9uIGEgdGltZSBheGlzIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY29sdW1uLlNjaGVkdWxlclRpbWVBeGlzQ29sdW1uLFNjaGVkdWxlci5jb2x1bW4uVmVydGljYWxUaW1lQXhpc0NvbHVtbn0gZXZlbnQuc291cmNlIFRoZSBjb2x1bW4gb2JqZWN0XG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgVGhlIHN0YXJ0IGRhdGUgb2YgdGhlIGhlYWRlciBjZWxsXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlIFRoZSBlbmQgZGF0ZSBvZiB0aGUgaGVhZGVyIGNlbGxcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgZXZlbnQgb2JqZWN0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZUF4aXNIZWFkZXJDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyVGltZUF4aXNDb2x1bW58VmVydGljYWxUaW1lQXhpc0NvbHVtbiwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIGEgcmlnaHQgY2xpY2sgb24gYSB0aW1lIGF4aXMgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jb2x1bW4uU2NoZWR1bGVyVGltZUF4aXNDb2x1bW4sU2NoZWR1bGVyLmNvbHVtbi5WZXJ0aWNhbFRpbWVBeGlzQ29sdW1ufSBldmVudC5zb3VyY2UgVGhlIGNvbHVtbiBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnN0YXJ0RGF0ZSBUaGUgc3RhcnQgZGF0ZSBvZiB0aGUgaGVhZGVyIGNlbGxcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmVuZERhdGUgVGhlIGVuZCBkYXRlIG9mIHRoZSBoZWFkZXIgY2VsbFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBldmVudCBvYmplY3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaW1lQXhpc0hlYWRlckNvbnRleHRNZW51OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXJUaW1lQXhpc0NvbHVtbnxWZXJ0aWNhbFRpbWVBeGlzQ29sdW1uLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUsIGV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgYSBkb3VibGUgY2xpY2sgb24gYSB0aW1lIGF4aXMgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5jb2x1bW4uU2NoZWR1bGVyVGltZUF4aXNDb2x1bW4sU2NoZWR1bGVyLmNvbHVtbi5WZXJ0aWNhbFRpbWVBeGlzQ29sdW1ufSBldmVudC5zb3VyY2UgVGhlIGNvbHVtbiBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnN0YXJ0RGF0ZSBUaGUgc3RhcnQgZGF0ZSBvZiB0aGUgaGVhZGVyIGNlbGxcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmVuZERhdGUgVGhlIGVuZCBkYXRlIG9mIHRoZSBoZWFkZXIgY2VsbFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBldmVudCBvYmplY3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaW1lQXhpc0hlYWRlckRibENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXJUaW1lQXhpc0NvbHVtbnxWZXJ0aWNhbFRpbWVBeGlzQ29sdW1uLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUsIGV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIHRoZSB0aW1lIGF4aXMgaGVhZGVyLlxuICAgICAqIEFsbG93cyBtYW5pcHVsYXRpb24gb2YgdGhlIGl0ZW1zIHRvIHNob3cgaW4gdGhlIHNhbWUgd2F5IGFzIGluIHRoZSBbcHJvY2Vzc0l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL1RpbWVBeGlzSGVhZGVyTWVudSNjb25maWctcHJvY2Vzc0l0ZW1zKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC10aW1lQXhpc0hlYWRlck1lbnVCZWZvcmVTaG93KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXJcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+fSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGltZSBheGlzIGNvbHVtblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpbWVBeGlzSGVhZGVyTWVudUJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgaGVhZGVyIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRpbWUgYXhpcyBjb2x1bW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaW1lQXhpc0hlYWRlck1lbnVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjb2x1bW46IENvbHVtbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYWZ0ZXIgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBoZWFkZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRpbWUgYXhpcyBjb2x1bW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaW1lQXhpc0hlYWRlck1lbnVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIG1lbnU6IE1lbnUsIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5PiwgY29sdW1uOiBDb2x1bW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHBvaW50ZXItYWN0aXZhdGVkIFt0aW1lbGluZUNvbnRleHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVEb21FdmVudHMjcHJvcGVydHktdGltZWxpbmVDb250ZXh0KSBoYXMgY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudXRpbC5UaW1lbGluZUNvbnRleHR9IGV2ZW50Lm9sZENvbnRleHQgVGhlIHRpY2svcmVzb3VyY2UgY29udGV4dCBiZWluZyBkZWFjdGl2YXRlZC5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci51dGlsLlRpbWVsaW5lQ29udGV4dH0gZXZlbnQuY29udGV4dCBUaGUgdGljay9yZXNvdXJjZSBjb250ZXh0IGJlaW5nIGFjdGl2YXRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaW1lbGluZUNvbnRleHRDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBvbGRDb250ZXh0OiBUaW1lbGluZUNvbnRleHQsIGNvbnRleHQ6IFRpbWVsaW5lQ29udGV4dCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgKnNjaGVkdWxlciogdmlld3BvcnQgKG5vdCB0aGUgb3ZlcmFsbCBTY2hlZHVsZXIgZWxlbWVudCkgY2hhbmdlcyBzaXplLlxuICAgICAqIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBncmlkIGNoYW5nZXMgaGVpZ2h0LCBvciB3aGVuIHRoZSBzdWJncmlkIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGVcbiAgICAgKiBzY2hlZHVsZXIgY29sdW1uIGNoYW5nZXMgd2lkdGguXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBTY2hlZHVsZXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggVGhlIG5ldyB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5oZWlnaHQgVGhlIG5ldyBoZWlnaHRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkV2lkdGggVGhlIG9sZCB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRIZWlnaHQgVGhlIG9sZCBoZWlnaHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaW1lbGluZVZpZXdwb3J0UmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IHdoZW4gYSBjbGljayBoYXBwZW5zIG9uIGEgdGltZSByYW5nZSBoZWFkZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC50aW1lUmFuZ2VSZWNvcmQgVGhlIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpbWVSYW5nZUhlYWRlckNsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIHRpbWVSYW5nZVJlY29yZDogVGltZVNwYW4sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiBhIHJpZ2h0IGNsaWNrIGhhcHBlbnMgb24gYSB0aW1lIHJhbmdlIGhlYWRlciBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGV2ZW50LnRpbWVSYW5nZVJlY29yZCBUaGUgcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZVJhbmdlSGVhZGVyQ29udGV4dE1lbnU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgdGltZVJhbmdlUmVjb3JkOiBUaW1lU3BhbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCB3aGVuIGEgZG91YmxlIGNsaWNrIGhhcHBlbnMgb24gYSB0aW1lIHJhbmdlIGhlYWRlciBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGV2ZW50LnRpbWVSYW5nZVJlY29yZCBUaGUgcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZVJhbmdlSGVhZGVyRGJsQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgdGltZVJhbmdlUmVjb3JkOiBUaW1lU3BhbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gb25lIG9yIG1vcmUgZ3JvdXBzIGFyZSBleHBhbmRlZCBvciBjb2xsYXBzZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50Lmdyb3VwUmVjb3JkIFtERVBSRUNBVEVEXSBVc2UgYGdyb3VwUmVjb3Jkc2AgcGFyYW0gaW5zdGVhZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50Lmdyb3VwUmVjb3JkcyBUaGUgZ3JvdXAgcmVjb3JkcyBiZWluZyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBDb2xsYXBzZWQgKHRydWUpIG9yIGV4cGFuZGVkIChmYWxzZSlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmFsbFJlY29yZHMgVHJ1ZSBpZiB0aGlzIGV2ZW50IGlzIHBhcnQgb2YgdG9nZ2xpbmcgYWxsIGdyb3Vwc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRvZ2dsZUdyb3VwOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JvdXBSZWNvcmQ6IE1vZGVsLCBncm91cFJlY29yZHM6IE1vZGVsW10sIGNvbGxhcHNlOiBib29sZWFuLCBhbGxSZWNvcmRzPzogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgYSBwYXJlbnQgbm9kZSByZWNvcmQgdG9nZ2xlcyBpdHMgY29sbGFwc2VkIHN0YXRlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgYmVpbmcgdG9nZ2xlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbGxhcHNlIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBiZWluZyBjb2xsYXBzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVG9nZ2xlTm9kZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwsIGNvbGxhcHNlOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBBIGhlYWRlciBbdG9vbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctdG9vbHMpIGhhcyBiZWVuIGNsaWNrZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuVG9vbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Ub29sfSBldmVudC50b29sIFRoZSB0b29sIHdoaWNoIGlzIGJlaW5nIGNsaWNrZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVG9vbENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBUb29sLCB0b29sOiBUb29sIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiA8c3Ryb25nPk5vdGUgdGhhdCB0aGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgW1NjaGVkdWxlclByb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXJQcm8vdmlldy9TY2hlZHVsZXJQcm8pLjwvc3Ryb25nPlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LXRyYW5zYWN0aW9uQ2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50Lmhhc0NoYW5nZXMgV2hldGhlciBhbnkgY2hhbmdlcyBhcmUgcmVjb3JkZWQgdGhhdCBhcmUgbm90IHlldCBhdHRhY2hlZCB0byBhIHZlcnNpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVHJhbnNhY3Rpb25DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBoYXNDaGFuZ2VzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHJvdyBsb2NraW5nIGlzIGRpc2FibGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuY2xvbmUgVGhlIGxvY2tlZCBjbG9uZSB0aGF0IHdpbGwgYmUgZGVzdHJveWVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVW5sb2NrUm93czogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNsb25lOiBHcmlkQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB1bi1zcGxpdHRpbmcgdGhlIEdyaWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVW5zcGxpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIHJhbmdlIG9mIGRhdGVzIHZpc2libGUgd2l0aGluIHRoZSB2aWV3cG9ydCBjaGFuZ2VzLiBUaGlzIHdpbGwgYmUgd2hlblxuICAgICAqIHNjcm9sbGluZyBhbG9uZyBhIHRpbWUgYXhpcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC12aXNpYmxlRGF0ZVJhbmdlQ2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoaXMgU2NoZWR1bGVyIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vbGQgVGhlIG9sZCBkYXRlIHJhbmdlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGQuc3RhcnREYXRlIHRoZSBvbGQgc3RhcnQgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm9sZC5lbmREYXRlIHRoZSBvbGQgZW5kIGRhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm5ldyBUaGUgbmV3IGRhdGUgcmFuZ2VcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm5ldy5zdGFydERhdGUgdGhlIG5ldyBzdGFydCBkYXRlLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQubmV3LmVuZERhdGUgdGhlIG5ldyBlbmQgZGF0ZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25WaXNpYmxlRGF0ZVJhbmdlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIG9sZDogeyBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUgfSwgbmV3OiB7IHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSB9IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bmRlcmx5aW5nIHdpZGdldFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgbWUgPSB0aGlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ1xuICAgICAgICAgICAgfSA9IG1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VOYW1lLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdzLFxuICAgICAgICAgICAgICAgIGJyeW50dW1FdmVudHNcbiAgICAgICAgICAgIH0gPSBCcnludHVtR2FudHRCYXNlQ29tcG9uZW50O1xuXG4gICAgICAgIGJyeW50dW1Db25maWdzLmZpbHRlcihwcm9wID0+IHByb3AgaW4gdGhpcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoYnJ5bnR1bUNvbmZpZywgcHJvcCwgdGhpc1twcm9wXSk7XG4gICAgICAgICAgICBpZiAoWydmZWF0dXJlcycsICdjb25maWcnXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbmZpZ1Byb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYnJ5bnR1bUV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gdGhpc1tldmVudF0gJiYgdGhpc1tldmVudF0ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICB1bmNhcGl0YWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAoc3RyOiBzdHJpbmcpID0+IHVuY2FwaXRhbGl6ZShzdHIuc2xpY2UoMikpO1xuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBicnludHVtQ29uZmlnLmxpc3RlbmVyc1tldmVudE5hbWUoZXZlbnQpXSA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBtZVtldmVudF0uZW1pdChlKTtcbiAgICAgICAgICAgICAgICAvLyBFdmVudEVtaXR0ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcyBpbiB0aGUgbm9ybWFsIHdheSwgd29yayBhcm91bmQgaXQgYnkgc2V0dGluZyBgcmV0dXJuVmFsdWVgIGZsYWdcbiAgICAgICAgICAgICAgICAvLyBpbiBBbmd1bGFyIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGhhcyBubyBjb250YWluZXIgc3BlY2lmaWVkIGluIGNvbmZpZyB0aGVuIHVzZSBhZG9wdCB0byBXcmFwcGVyJ3MgZWxlbWVudFxuICAgICAgICBjb25zdFxuICAgICAgICAgICAgY29udGFpbmVyUGFyYW0gPSBbXG4gICAgICAgICAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAgICAgICAgICdpbnNlcnRBZnRlcicsXG4gICAgICAgICAgICAgICAgJ2luc2VydEJlZm9yZSdcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBdLmZpbmQocHJvcCA9PiBicnludHVtQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJQYXJhbSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlTmFtZSA9PT0gJ0J1dHRvbicgfHwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCkgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gQnV0dG9uIHNob3VsZCBhbHdheXMgYmUgPGE+IG9yIDxidXR0b24+IGluc2lkZSBvd25lciBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hcHBlbmRUbyA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYWRvcHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb250YWluZXIoaW5zdGFuY2VOYW1lLCBjb250YWluZXJQYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lLmluc3RhbmNlID0gaW5zdGFuY2VOYW1lID09PSAnV2lkZ2V0JyA/IFdpZGdldC5jcmVhdGUoYnJ5bnR1bUNvbmZpZykgOiBuZXcgaW5zdGFuY2VDbGFzcyhicnludHVtQ29uZmlnKTtcblxuICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgZ3JpZEluc3RhbmNlLCBzY2hlZHVsZXJJbnN0YW5jZSBldGMuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWVbU3RyaW5nSGVscGVyLnVuY2FwaXRhbGl6ZShpbnN0YW5jZU5hbWUpICsgJ0luc3RhbmNlJ10gPSBtZS5pbnN0YW5jZTtcbiAgICAgICAgLy8gXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICB7IGluc3RhbmNlTmFtZSB9ID0gQnJ5bnR1bUdhbnR0QmFzZUNvbXBvbmVudDtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgY2hhbmdlc1xuICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzKS5mb3JFYWNoKChbcHJvcCwgY2hhbmdlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IChjaGFuZ2UgYXMgU2ltcGxlQ2hhbmdlKS5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgICAgICB7IGJyeW50dW1Db25maWdzT25seSwgYnJ5bnR1bVByb3BzIH0gPSBCcnludHVtR2FudHRCYXNlQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
4223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1nYW50dC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudC9zcmMvbGliL2JyeW50dW0tZ2FudHQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0RBQXNEO0FBQ3REOztHQUVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBa0QsTUFBTSxlQUFlLENBQUM7QUFFbkksT0FBTyxhQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFFN0MsT0FBTyxFQUFtZSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUk3Z0IsT0FBTyxFQUF5UyxTQUFTLEVBQTg4QixNQUFNLHFCQUFxQixDQUFDO0FBRW55QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBOHdEbEQsTUFBTSxPQUFPLHlCQUF5QjtJQWt4QmxDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUFpV0Ysa0JBQWtCO1FBQ2xCOzs7Ozs7V0FNRztRQUNPLGdDQUEyQixHQUFRLElBQUksWUFBWSxFQUFxRyxDQUFDO1FBQ25LOzs7Ozs7V0FNRztRQUNPLDBCQUFxQixHQUFRLElBQUksWUFBWSxFQUErRixDQUFDO1FBQ3ZKOzs7Ozs7V0FNRztRQUNPLHNCQUFpQixHQUFRLElBQUksWUFBWSxFQUEwRSxDQUFDO1FBQzlIOzs7Ozs7Ozs7O1dBVUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJLFlBQVksRUFBK04sQ0FBQztRQUNsUjs7Ozs7O1dBTUc7UUFDTyxxQkFBZ0IsR0FBUSxJQUFJ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bkMsTUFBTTtnQkFRRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBU0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQVNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFTRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBU0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQVNHLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFTRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBWUcsOEJBQThCO3NCQUF2QyxNQUFNO2dCQVNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFTRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBT0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQVlHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFRRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBUUcsNEJBQTRCO3NCQUFyQyxNQUFNO2dCQVFHLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFTRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTTtnQkFRRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBTUcsWUFBWTtzQkFBckIsTUFBTTtnQkFJRyxTQUFTO3NCQUFsQixNQUFNO2dCQWVHLHdCQUF3QjtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBBbmd1bGFyIHdyYXBwZXIgZm9yIEJyeW50dW0gR2FudHRCYXNlXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IFdyYXBwZXJIZWxwZXIgZnJvbSAnLi93cmFwcGVyLmhlbHBlcic7XG5cbmltcG9ydCB7IEFqYXhTdG9yZSwgQWpheFN0b3JlQ29uZmlnLCBCYXNlLCBCcnludHVtU2Nyb2xsT3B0aW9ucywgQ29udGFpbmVyLCBEb21DbGFzc0xpc3QsIERvbUNvbmZpZywgRHVyYXRpb25Vbml0LCBGb3JtdWxhUHJvdmlkZXJDb25maWcsIEtleU1hcENvbmZpZywgTWFzaywgTWFza0NvbmZpZywgTWVudSwgTWVudUl0ZW0sIE1lbnVJdGVtRW50cnksIE1vZGVsLCBNb2RlbENvbmZpZywgUGFnaW5nVG9vbGJhckNvbmZpZywgUGFuZWwsIFBhbmVsQ29sbGFwc2VyQ29uZmlnLCBQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWcsIFBhbmVsSGVhZGVyLCBQb3B1cCwgU2Nyb2xsTWFuYWdlciwgU2Nyb2xsTWFuYWdlckNvbmZpZywgU2Nyb2xsZXIsIFNjcm9sbGVyQ29uZmlnLCBTdGF0ZVByb3ZpZGVyLCBTdG9yZSwgU3RvcmVDb25maWcsIFRhYkNvbmZpZywgVG9vbCwgVG9vbENvbmZpZywgVG9vbGJhckNvbmZpZywgVG9vbGJhckl0ZW1zLCBUb29sdGlwQ29uZmlnLCBXaWRnZXQgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuaW1wb3J0IHsgQUlGaWx0ZXIsIEFJRmlsdGVyQ29uZmlnLCBDZWxsQ29weVBhc3RlLCBDZWxsQ29weVBhc3RlQ29uZmlnLCBDZWxsRWRpdG9yQ29udGV4dCwgQ2VsbE1lbnUsIENlbGxNZW51Q29uZmlnLCBDZWxsVG9vbHRpcCwgQ2VsbFRvb2x0aXBDb25maWcsIENoYXJ0cywgQ2hhcnRzQ29uZmlnLCBDb2x1bW4sIENvbHVtbkF1dG9XaWR0aCwgQ29sdW1uQXV0b1dpZHRoQ29uZmlnLCBDb2x1bW5EcmFnVG9vbGJhciwgQ29sdW1uRHJhZ1Rvb2xiYXJDb25maWcsIENvbHVtblBpY2tlciwgQ29sdW1uUGlja2VyQ29uZmlnLCBDb2x1bW5SZW5hbWUsIENvbHVtblJlbmFtZUNvbmZpZywgQ29sdW1uUmVvcmRlciwgQ29sdW1uUmVvcmRlckNvbmZpZywgQ29sdW1uUmVzaXplLCBDb2x1bW5SZXNpemVDb25maWcsIENvbHVtblN0b3JlLCBDb2x1bW5TdG9yZUNvbmZpZywgRW1wdHlUZXh0RG9tQ29uZmlnLCBFeGNlbEV4cG9ydGVyIGFzIEdyaWRFeGNlbEV4cG9ydGVyLCBFeGNlbEV4cG9ydGVyQ29uZmlnIGFzIEdyaWRFeGNlbEV4cG9ydGVyQ29uZmlnLCBFeHBvcnRDb25maWcsIEZpbGVEcm9wLCBGaWxlRHJvcENvbmZpZywgRmlsbEhhbmRsZSwgRmlsbEhhbmRsZUNvbmZpZywgRmlsdGVyLCBGaWx0ZXJCYXIsIEZpbHRlckJhckNvbmZpZywgRmlsdGVyQ29uZmlnLCBHcmlkLCBHcmlkQmFzZSwgR3JpZExvY2F0aW9uLCBHcmlkTG9jYXRpb25Db25maWcsIEdyaWRTZWxlY3Rpb25Nb2RlLCBHcmlkU3RhdGVJbmZvLCBHcm91cCwgR3JvdXBDb25maWcsIEdyb3VwU3VtbWFyeSBhcyBHcmlkR3JvdXBTdW1tYXJ5LCBHcm91cFN1bW1hcnlDb25maWcgYXMgR3JpZEdyb3VwU3VtbWFyeUNvbmZpZywgSGVhZGVyTWVudSwgSGVhZGVyTWVudUNvbmZpZywgTG9ja1Jvd3MgYXMgR3JpZExvY2tSb3dzLCBMb2NrUm93c0NvbmZpZyBhcyBHcmlkTG9ja1Jvd3NDb25maWcsIE1lcmdlQ2VsbHMsIE1lcmdlQ2VsbHNDb25maWcsIFBpbkNvbHVtbnMsIFBpbkNvbHVtbnNDb25maWcsIFByZXNlcnZlU2Nyb2xsT3B0aW9ucywgUXVpY2tGaW5kLCBRdWlja0ZpbmRDb25maWcsIFJlY29yZFBvc2l0aW9uQ29udGV4dCwgUmVnaW9uUmVzaXplLCBSZWdpb25SZXNpemVDb25maWcsIFJlc3BvbnNpdmVMZXZlbENvbmZpZywgUm93LCBSb3dDb3B5UGFzdGUsIFJvd0NvcHlQYXN0ZUNvbmZpZywgUm93RWRpdCwgUm93RWRpdENvbmZpZywgUm93RWRpdG9yQ29udGV4dCwgUm93RXhwYW5kZXIsIFJvd0V4cGFuZGVyQ29uZmlnLCBSb3dSZXNpemUgYXMgR3JpZFJvd1Jlc2l6ZSwgUm93UmVzaXplQ29uZmlnIGFzIEdyaWRSb3dSZXNpemVDb25maWcsIFNlYXJjaCwgU2VhcmNoQ29uZmlnLCBTb3J0LCBTb3J0Q29uZmlnLCBTcGxpdCBhcyBHcmlkU3BsaXQsIFNwbGl0Q29uZmlnIGFzIEdyaWRTcGxpdENvbmZpZywgU3RpY2t5Q2VsbHMsIFN0aWNreUNlbGxzQ29uZmlnLCBTdHJpcGUsIFN0cmlwZUNvbmZpZywgU3ViR3JpZCwgU3ViR3JpZENvbmZpZywgVHJlZSwgVHJlZUNvbmZpZywgWExTQ29sdW1uIH0gZnJvbSAnQGJyeW50dW0vZ3JpZC10aGluJztcbmltcG9ydCB7IEFzc2lnbm1lbnRNb2RlbCBhcyBTY2hlZHVsZXJBc3NpZ25tZW50TW9kZWwsIENvbHVtbkxpbmVzLCBDb2x1bW5MaW5lc0NvbmZpZywgRGF0ZUNvbnN0cmFpbnQsIERlcGVuZGVuY3lCYXNlTW9kZWwsIERlcGVuZGVuY3lFZGl0IGFzIFNjaGVkdWxlckRlcGVuZGVuY3lFZGl0LCBEZXBlbmRlbmN5TW9kZWwgYXMgU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsLCBFdmVudENvbG9yLCBFdmVudEVkaXQsIEV2ZW50RmlsdGVyLCBFdmVudEZpbHRlckNvbmZpZywgRXZlbnRNb2RlbCBhcyBTY2hlZHVsZXJFdmVudE1vZGVsLCBFdmVudFJlc2l6ZURhdGEsIEhlYWRlclpvb20sIEhlYWRlclpvb21Db25maWcsIE5vbldvcmtpbmdUaW1lLCBOb25Xb3JraW5nVGltZUNvbmZpZywgUGFuLCBQYW5Db25maWcsIFByZXNldFN0b3JlLCBSZWN1cnJlbmNlQ29uZmlybWF0aW9uUG9wdXAsIFJlY3VycmVuY2VDb25maXJtYXRpb25Qb3B1cENvbmZpZywgUmVzb3VyY2VNb2RlbCBhcyBTY2hlZHVsZXJSZXNvdXJjZU1vZGVsLCBSb3dSZW9yZGVyLCBSb3dSZW9yZGVyQ29uZmlnLCBTY2hlZHVsZU1lbnUsIFNjaGVkdWxlTWVudUNvbmZpZywgU2NoZWR1bGVUb29sdGlwLCBTY2hlZHVsZVRvb2x0aXBDb25maWcsIFNjaGVkdWxlciwgVGltZUF4aXMsIFRpbWVBeGlzQ29sdW1uIGFzIFNjaGVkdWxlclRpbWVBeGlzQ29sdW1uLCBUaW1lQXhpc0NvbmZpZywgVGltZUF4aXNIZWFkZXJNZW51LCBUaW1lQXhpc0hlYWRlck1lbnVDb25maWcsIFRpbWVSYW5nZXMsIFRpbWVSYW5nZXNDb25maWcsIFRpbWVTcGFuLCBUaW1lU3BhbkNvbmZpZywgVGltZWxpbmVCYXNlLCBUaW1lbGluZUNvbnRleHQsIFRpbWVsaW5lU3RhdGVJbmZvLCBWZXJ0aWNhbFRpbWVBeGlzQ29sdW1uLCBWaWV3UHJlc2V0LCBWaWV3UHJlc2V0Q29uZmlnLCBWaXNpYmxlRGF0ZSB9IGZyb20gJ0BicnludHVtL3NjaGVkdWxlci10aGluJztcbmltcG9ydCB7IEN5Y2xlUmVzb2x1dGlvblBvcHVwLCBEZXBlbmRlbmN5RWRpdCwgRGVwZW5kZW5jeUVkaXRDb25maWcsIEV2ZW50TW9kZWwsIEV2ZW50U2VnbWVudHMsIEV2ZW50U2VnbWVudHNDb25maWcsIFBlcmNlbnRCYXIsIFBlcmNlbnRCYXJDb25maWcsIFJlc291cmNlTW9kZWwgYXMgU2NoZWR1bGVyUHJvUmVzb3VyY2VNb2RlbCwgU2NoZWR1bGVyUHJvLCBTY2hlZHVsaW5nSXNzdWVSZXNvbHV0aW9uUG9wdXAsIFRhc2tFZGl0IGFzIFNjaGVkdWxlclByb1Rhc2tFZGl0LCBUYXNrRWRpdG9yQmFzZSwgVGltZVNwYW5IaWdobGlnaHQsIFRpbWVTcGFuSGlnaGxpZ2h0Q29uZmlnIH0gZnJvbSAnQGJyeW50dW0vc2NoZWR1bGVycHJvLXRoaW4nO1xuaW1wb3J0IHsgQXNzaWdubWVudE1vZGVsLCBBc3NpZ25tZW50TW9kZWxDb25maWcsIEJhc2VsaW5lcywgQmFzZWxpbmVzQ29uZmlnLCBDYWxlbmRhck1hbmFnZXJTdG9yZSwgQ2FsZW5kYXJNb2RlbCwgQ2FsZW5kYXJNb2RlbENvbmZpZywgQ2VsbEVkaXQsIENlbGxFZGl0Q29uZmlnLCBHYW50dENvbnRhaW5lckl0ZW1Db25maWcsIENyaXRpY2FsUGF0aHMsIENyaXRpY2FsUGF0aHNDb25maWcsIERlcGVuZGVuY2llcywgRGVwZW5kZW5jaWVzQ29uZmlnLCBEZXBlbmRlbmN5TW9kZWwsIERlcGVuZGVuY3lNb2RlbENvbmZpZywgR2FudHQsIEdhbnR0QmFzZSwgR2FudHRCYXNlTGlzdGVuZXJzLCBHYW50dENvbHVtbkNvbmZpZywgSW5kaWNhdG9ycywgSW5kaWNhdG9yc0NvbmZpZywgTGFiZWxzLCBMYWJlbHNDb25maWcsIE1zcEV4cG9ydCwgTXNwRXhwb3J0Q29uZmlnLCBQYXJlbnRBcmVhLCBQYXJlbnRBcmVhQ29uZmlnLCBQZGZFeHBvcnQsIFBkZkV4cG9ydENvbmZpZywgUHJpbnQsIFByaW50Q29uZmlnLCBQcm9ncmVzc0xpbmUsIFByb2dyZXNzTGluZUNvbmZpZywgUHJvamVjdEVkaXQsIFByb2plY3RFZGl0Q29uZmlnLCBQcm9qZWN0RWRpdG9yLCBQcm9qZWN0TGluZXMsIFByb2plY3RMaW5lc0NvbmZpZywgUHJvamVjdE1vZGVsLCBQcm9qZWN0TW9kZWxDb25maWcsIFJlc291cmNlTW9kZWwsIFJlc291cmNlTW9kZWxDb25maWcsIFJvbGx1cHMsIFJvbGx1cHNDb25maWcsIFNjcm9sbEJ1dHRvbnMsIFNjcm9sbEJ1dHRvbnNDb25maWcsIFN1bW1hcnksIFN1bW1hcnlDb25maWcsIFRhc2tDb3B5UGFzdGUsIFRhc2tDb3B5UGFzdGVDb25maWcsIFRhc2tEcmFnLCBUYXNrRHJhZ0NvbmZpZywgVGFza0RyYWdDcmVhdGUsIFRhc2tEcmFnQ3JlYXRlQ29uZmlnLCBUYXNrRWRpdCwgVGFza0VkaXRDb25maWcsIFRhc2tNZW51LCBUYXNrTWVudUNvbmZpZywgVGFza01vZGVsLCBUYXNrTW9kZWxDb25maWcsIFRhc2tOb25Xb3JraW5nVGltZSwgVGFza05vbldvcmtpbmdUaW1lQ29uZmlnLCBUYXNrUmVzaXplLCBUYXNrUmVzaXplQ29uZmlnLCBUYXNrUmVzaXplRGF0YSwgVGFza1NlZ21lbnREcmFnLCBUYXNrU2VnbWVudERyYWdDb25maWcsIFRhc2tTZWdtZW50UmVzaXplLCBUYXNrU2VnbWVudFJlc2l6ZUNvbmZpZywgVGFza1N0b3JlLCBUYXNrU3RvcmVDb25maWcsIFRhc2tUb29sdGlwLCBUYXNrVG9vbHRpcENvbmZpZywgVGltZWxpbmVDaGFydCwgVGltZWxpbmVDaGFydENvbmZpZywgVHJlZUdyb3VwLCBUcmVlR3JvdXBDb25maWcsIFZlcnNpb25zLCBWZXJzaW9uc0NvbmZpZyB9IGZyb20gJ0BicnludHVtL2dhbnR0LXRoaW4nO1xuXG5pbXBvcnQgeyBTdHJpbmdIZWxwZXIgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuXG5leHBvcnQgdHlwZSBCcnludHVtR2FudHRCYXNlUHJvcHMgPSB7XG4gICAgLy8gQ29uZmlnc1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFkb3B0IGFzIHRoaXMgV2lkZ2V0J3MgZW5jYXBzdWxhdGluZyBlbGVtZW50LiBUaGUgd2lkZ2V0J3NcbiAgICAgKiBjb250ZW50IHdpbGwgYmUgcGxhY2VkIGluc2lkZSB0aGlzIGVsZW1lbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWFkb3B0KVxuICAgICAqL1xuICAgIGFkb3B0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgYWxsb3cgY3JlYXRpbmcgZGVwZW5kZW5jaWVzXG4gICAgICovXG4gICAgYWxsb3dDcmVhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgaXQgdG8gYHRydWVgIHRvIGFsbG93IGRlcGVuZGVuY3kgY3JlYXRpb24gb25seSBmb3IgcGFyZW50IGV2ZW50cyAob25seSBhcHBsaWVzIHRvIFNjaGVkdWxlciBQcm8gdXNpbmcgdGhlIGBOZXN0ZWRFdmVudHNgIGZlYXR1cmUpLiBOb3JtYWxseSB0aGUgbmVzdGVkIGV2ZW50IGNvbnRhaW5lclxuICAgICAqIGluc2lkZSBwYXJlbnQgZXZlbnRzIGNhbm5vdCBiZSBzY3JvbGxlZCB3aGVuIHVzaW5nIGRlcGVuZGVuY2llcywgYnV0IGJ5IGVuYWJsaW5nIHRoaXMgc2V0dGluZyBhbmQgbGltaXRpbmdcbiAgICAgKiB0byB3aGVyZSBkZXBlbmRlbmNpZXMgY2FuIGJlIGRyYXduIHNjcm9sbGluZyB3aWxsIGJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgYWxsb3dDcmVhdGVPbmx5UGFyZW50ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogYGZhbHNlYCB0byByZXF1aXJlIGEgZHJvcCBvbiBhIHRhcmdldCBldmVudCBiYXIgc2lkZSBjaXJjbGUgdG8gZGVmaW5lIHRoZSBkZXBlbmRlbmN5IHR5cGUuXG4gICAgICogSWYgZHJvcHBlZCBvbiB0aGUgZXZlbnQgYmFyLCB0aGUgYGRlZmF1bHRWYWx1ZWAgb2YgdGhlIERlcGVuZGVuY3lNb2RlbCBgdHlwZWAgZmllbGQgd2lsbCBiZSB1c2VkIHRvXG4gICAgICogZGV0ZXJtaW5lIHRoZSB0YXJnZXQgdGFzayBzaWRlLlxuICAgICAqL1xuICAgIGFsbG93RHJvcE9uRXZlbnRCYXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFuaW1hdGUgcm93IHJlbW92YWxzIGNhdXNlZCBieSBmaWx0ZXJpbmcuXG4gICAgICogQGRlcHJlY2F0ZWQgNy4wLjAgRGVwcmVjYXRlZCBgYW5pbWF0ZUZpbHRlclJlbW92YWxzYC4gVXNlIGB0cmFuc2l0aW9uLmZpbHRlclJlbW92YWxgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlRmlsdGVyUmVtb3ZhbHMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiByZW1vdmluZyBhbmQgaW5zZXJ0aW5nIHJvd3Mgc2hvdWxkIGJlIGFuaW1hdGVkLiBTZXQgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHRob3NlIGFuaW1hdGlvbnMsXG4gICAgICogcmVtb3ZpbmcgdGhlIHJlbGF0ZWQgZGVsYXlzLlxuICAgICAqIEBkZXByZWNhdGVkIDcuMC4wIERlcHJlY2F0ZWQgYGFuaW1hdGVSZW1vdmluZ1Jvd3NgLiBVc2UgYHRyYW5zaXRpb24ucmVtb3ZlUmVjb3JkYCBpbnN0ZWFkXG4gICAgICovXG4gICAgYW5pbWF0ZVJlbW92aW5nUm93cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIFtUcmVlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9UcmVlKSBmZWF0dXJlIGlzIGluIHVzZSBhbmQgdGhlIFN0b3JlIGlzIGEgdHJlZSBzdG9yZSwgdGhpc1xuICAgICAqIGNvbmZpZyBtYXkgYmUgc2V0IHRvIGB0cnVlYCB0byB2aXN1YWxseSBhbmltYXRlIGJyYW5jaCBub2RlIGV4cGFuZCBhbmQgY29sbGFwc2Ugb3BlcmF0aW9ucy5cbiAgICAgKiAqVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGluIFNjaGVkdWxlciBhbmQgR2FudHQqXG4gICAgICogQGRlcHJlY2F0ZWQgNy4wLjAgRGVwcmVjYXRlZCBgYW5pbWF0ZVRyZWVOb2RlVG9nZ2xlYC4gVXNlIGB0cmFuc2l0aW9uLnRvZ2dsZVRyZWVOb2RlYCBpbnN0ZWFkXG4gICAgICovXG4gICAgYW5pbWF0ZVRyZWVOb2RlVG9nZ2xlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgdGhlIGlkIG9mIGFuIGVsZW1lbnQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCdzIGVsZW1lbnQgdG8uIENhbiBiZSBjb25maWd1cmVkLCBvciBzZXQgb25jZSBhdFxuICAgICAqIHJ1bnRpbWUuIFRvIGFjY2VzcyB0aGUgZWxlbWVudCBvZiBhIHJlbmRlcmVkIHdpZGdldCwgc2VlIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KS5cbiAgICAgKi9cbiAgICBhcHBlbmRUbyA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3RcbiAgICAgKiBpbnRvIGFuIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSBsaW5rZWQgdXNpbmcgdGhlIGBhcmlhLWRlc2NyaWJlZGJ5YCBhdHRyaWJ1dGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWFyaWFEZXNjcmlwdGlvbilcbiAgICAgKi9cbiAgICBhcmlhRGVzY3JpcHRpb24gPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxpemFibGUgc3RyaW5nIChNYXkgY29udGFpbiBgJ0x7fSdgIHRva2VucyB3aGljaCByZXNvbHZlIGluIHRoZSBsb2NhbGUgZmlsZSkgdG8gaW5qZWN0IGFzXG4gICAgICogdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWFyaWFMYWJlbClcbiAgICAgKi9cbiAgICBhcmlhTGFiZWwgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIElubGluZSBhc3NpZ25tZW50cywgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgYmFja2luZyBwcm9qZWN0J3MgQXNzaWdubWVudFN0b3JlLlxuICAgICAqL1xuICAgIGFzc2lnbm1lbnRzID8gOiBBc3NpZ25tZW50TW9kZWxbXXxBc3NpZ25tZW50TW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgdG8gbWFrZSB0aGUgdGltZWxpbmUgcGFuZWwgc3RhcnQgYW5kIGVuZCBvbiB0aGUgZXhhY3QgcHJvdmlkZWRcbiAgICAgKiBbc3RhcnREYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L1RpbWVsaW5lQmFzZSNjb25maWctc3RhcnREYXRlKS9bZW5kRGF0ZV0oI1NjaGVkdWxlci92aWV3L1RpbWVsaW5lQmFzZSNjb25maWctZW5kRGF0ZSkgdy9vIGFkanVzdGluZyB0aGVtLlxuICAgICAqL1xuICAgIGF1dG9BZGp1c3RUaW1lQXhpcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEF1dG9tYXRpY2FsbHkgc2V0IGdyaWRzIGhlaWdodCB0byBmaXQgYWxsIHJvd3MgKG5vIHNjcm9sbGluZyBpbiB0aGUgZ3JpZCkuIEluIGdlbmVyYWwgeW91IHNob3VsZCBhdm9pZFxuICAgICAqIHVzaW5nIGBhdXRvSGVpZ2h0OiB0cnVlYCwgc2luY2UgaXQgd2lsbCBieXBhc3MgR3JpZHMgdmlydHVhbCByZW5kZXJpbmcgYW5kIHJlbmRlciBhbGwgcm93cyBhdCBvbmNlLCB3aGljaFxuICAgICAqIGluIGEgbGFyZ2VyIGdyaWQgaXMgcmVhbGx5IGJhZCBmb3IgcGVyZm9ybWFuY2UuXG4gICAgICovXG4gICAgYXV0b0hlaWdodCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGhvdyBtdWNoIHNwYWNlIHRvIGxlYXZlIGJldHdlZW4gc3RhY2tlZCBldmVudCBiYXJzIGluIHB4LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1iYXJNYXJnaW4pXG4gICAgICovXG4gICAgYmFyTWFyZ2luID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIENvbmZpZyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgW1Rvb2xiYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhciksXG4gICAgICogb3IgYXJyYXkgb2YgY29uZmlnIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBjaGlsZCBpdGVtcyBvZiBhIFRvb2xiYXIuIEFub3RoZXIgd2F5IHRvIGFkZCBhIGJiYXIgaXMgdG8gdXNlIFtzdHJpcHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWJiYXIpXG4gICAgICovXG4gICAgYmJhciA/IDogKEdhbnR0Q29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBwYW5lbCdzIGJvZHkgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctYm9keUNscylcbiAgICAgKi9cbiAgICBib2R5Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdoZXJlIHByb3BlcnR5IG5hbWVzIHdpdGggYSB0cnV0aHkgdmFsdWUgaW5kaWNhdGUgd2hpY2ggZXZlbnRzIHNob3VsZCBidWJibGUgdXAgdGhlIG93bmVyc2hpcFxuICAgICAqIGhpZXJhcmNoeSB3aGVuIHRyaWdnZXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctYnViYmxlRXZlbnRzKVxuICAgICAqL1xuICAgIGJ1YmJsZUV2ZW50cyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgZGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgc3RhcnQgYW5kIGVuZCBpbnZpc2libGUgcGFydHMgb2YgdGhlIHRpbWVzcGFuIHdoZW4gW2luZmluaXRlU2Nyb2xsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lU2Nyb2xsI2NvbmZpZy1pbmZpbml0ZVNjcm9sbCkgc2V0IHRvIGB0cnVlYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctYnVmZmVyQ29lZilcbiAgICAgKi9cbiAgICBidWZmZXJDb2VmID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBkZWZpbmVzIHRoZSBzY3JvbGwgbGltaXQsIHdoaWNoLCB3aGVuIGV4Y2VlZGVkIHdpbGwgY2F1c2UgYSB0aW1lc3BhbiBzaGlmdC5cbiAgICAgKiBUaGUgbGltaXQgaXMgY2FsY3VsYXRlZCBhcyB0aGUgYHBhbmVsV2lkdGggKiBbYnVmZmVyQ29lZl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9UaW1lbGluZVNjcm9sbCNjb25maWctYnVmZmVyQ29lZikgKiBidWZmZXJUaHJlc2hvbGRgLiBEdXJpbmcgc2Nyb2xsaW5nLCBpZiB0aGUgbGVmdCBvciByaWdodCBzaWRlXG4gICAgICogaGFzIGxlc3MgdGhhbiB0aGF0IG9mIHRoZSByZW5kZXJlZCBjb250ZW50IC0gYSBzaGlmdCBpcyB0cmlnZ2VyZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWJ1ZmZlclRocmVzaG9sZClcbiAgICAgKi9cbiAgICBidWZmZXJUaHJlc2hvbGQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIElubGluZSBjYWxlbmRhcnMsIHdpbGwgYmUgbG9hZGVkIGludG8gdGhlIGJhY2tpbmcgcHJvamVjdCdzIENhbGVuZGFyTWFuYWdlclN0b3JlLlxuICAgICAqL1xuICAgIGNhbGVuZGFycyA/IDogQ2FsZW5kYXJNb2RlbFtdfENhbGVuZGFyTW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBjYWxsIG9uWFhYIG1ldGhvZCBuYW1lcyAoZS5nLiBgb25TaG93YCwgYG9uQ2xpY2tgKSwgYXMgYW4gZWFzeSB3YXkgdG8gbGlzdGVuIGZvciBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWNhbGxPbkZ1bmN0aW9ucylcbiAgICAgKi9cbiAgICBjYWxsT25GdW5jdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBpZiBhbiBldmVudCBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24sIHRoZSBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBzdGFjayBhbmQgdGhlXG4gICAgICogYXBwbGljYXRpb24gc3RhdGUgaXMgdW5kZWZpbmVkLiBDb2RlIHdoaWNoIGZvbGxvd3MgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCAqbm90KiBiZSBleGVjdXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGNyb3AgdGV4dCBpbiBncmlkIGNlbGxzIHdpdGhvdXQgZWxsaXBzaXMgKC4uLikuIFdoZW4gZW5hYmxlZCwgY2VsbHMgY29udGFpbmluZyBwdXJlXG4gICAgICogdXNlIGBkaXNwbGF5IDogYmxvY2tgLCBpbnN0ZWFkIG9mIGBkaXNwbGF5IDogZmxleGAgdG8gYWxsb3cgZWxsaXBzaXMgdG8gd29yay5cbiAgICAgKiA8c3Ryb25nPk5PVEU8L3N0cm9uZz4gT25seSBzdXBwb3J0ZWQgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGA6aGFzKClgIENTUyBzZWxlY3RvclxuICAgICAqL1xuICAgIGNlbGxFbGxpcHNpcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gZWxlbWVudC5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctY2xzKVxuICAgICAqL1xuICAgIGNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHBhbmVsIGlzIGNvbGxhcHNlZCAodGhlIGJvZHkgb2YgdGhlIHBhbmVsIGlzIGhpZGRlbiB3aGlsZSBvbmx5IHRoZSBoZWFkZXIgaXNcbiAgICAgKiB2aXNpYmxlKS4gT25seSB2YWxpZCBpZiB0aGUgcGFuZWwgaXMgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkuXG4gICAgICovXG4gICAgY29sbGFwc2VkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgZW5hYmxlcyBjb2xsYXBzaWJpbGl0eSBmb3IgdGhlIHBhbmVsLiBTZWUgW2NvbGxhcHNlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2VkKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctY29sbGFwc2libGUpXG4gICAgICovXG4gICAgY29sbGFwc2libGUgPyA6IGJvb2xlYW58UGFuZWxDb2xsYXBzZXJDb25maWd8UGFuZWxDb2xsYXBzZXJPdmVybGF5Q29uZmlnXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgc3BlY2lmaWVkIGNvbG9yIHRvIHRoZSB3aWRnZXQsIGJ5IHNldHRpbmcgdGhlIGAtLWItcHJpbWFyeWAgQ1NTIHZhcmlhYmxlIGluIHRoZSB3aWRnZXRzXG4gICAgICogYHN0eWxlYCBibG9jay5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctY29sb3IpXG4gICAgICovXG4gICAgY29sb3IgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgd2hpY2ggY29sdW1uIHRvIHN0YXJ0IGluIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIGNvbHVtbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgY29sdW1uIGxpbmVzLiBFbmQgcmVzdWx0IG1pZ2h0IGJlIG92ZXJydWxlZCBieS9kaWZmZXIgYmV0d2VlbiB0aGVtZXMuXG4gICAgICovXG4gICAgY29sdW1uTGluZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBY2NlcHRzIGNvbHVtbiBkZWZpbml0aW9ucyBmb3IgdGhlIGdyaWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGV5IHdpbGwgYmUgdXNlZCB0byBjcmVhdGVcbiAgICAgKiBbQ29sdW1uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbikgaW5zdGFuY2VzIHRoYXQgYXJlIGFkZGVkIHRvIGEgW0NvbHVtblN0b3JlXSgjR3JpZC9kYXRhL0NvbHVtblN0b3JlKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctY29sdW1ucylcbiAgICAgKi9cbiAgICBjb2x1bW5zID8gOiBDb2x1bW5TdG9yZXxHYW50dENvbHVtbkNvbmZpZ1tdfENvbHVtblN0b3JlQ29uZmlnXG4gICAgY29uZmlnID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctY29udGVudEVsZW1lbnRDbHMpXG4gICAgICovXG4gICAgY29udGVudEVsZW1lbnRDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGljaCBpcyB1c2VkIHRvIHNob3cgY29udGV4dCBtZW51cy5cbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6ICdjb250ZXh0bWVudScsICdjbGljaycsICdkYmxjbGljaycuXG4gICAgICovXG4gICAgY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQgPyA6ICdjb250ZXh0bWVudSd8J2NsaWNrJ3wnZGJsY2xpY2snXG4gICAgLyoqXG4gICAgICogQSB0b29sdGlwIGNvbmZpZyBvYmplY3QgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGRlcGVuZGVuY3kgY3JlYXRpb24gW1Rvb2x0aXBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbHRpcClcbiAgICAgKi9cbiAgICBjcmVhdGlvblRvb2x0aXAgPyA6IFRvb2x0aXBDb25maWdcbiAgICAvKipcbiAgICAgKiBBIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gZ2VuZXJhdGUgdGhlIEhUTUwgY29udGVudHMgb2YgdGhlIGRlcGVuZGVuY3kgY3JlYXRpb24gdG9vbHRpcC5cbiAgICAgKiBZb3UgY2FuIHJldHVybiBlaXRoZXIgYW4gSFRNTCBzdHJpbmcgb3IgYSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIERhdGEgYWJvdXQgdGhlIGRlcGVuZGVuY3kgYmVpbmcgY3JlYXRlZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBkYXRhLnNvdXJjZSBUaGUgZnJvbSBldmVudFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBkYXRhLnRhcmdldCBUaGUgdGFyZ2V0IGV2ZW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEuZnJvbVNpZGUgVGhlIGZyb20gc2lkZSAoc3RhcnQsIGVuZCwgdG9wLCBib3R0b20pXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEudG9TaWRlIFRoZSB0YXJnZXQgc2lkZSAoc3RhcnQsIGVuZCwgdG9wLCBib3R0b20pXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkYXRhLnZhbGlkIFRoZSB2YWxpZGl0eSBvZiB0aGUgZGVwZW5kZW5jeVxuICAgICAqIEByZXR1cm5zIHtzdHJpbmcsRG9tQ29uZmlnfVxuICAgICAqL1xuICAgIGNyZWF0aW9uVG9vbHRpcFRlbXBsYXRlID8gOiAoZGF0YTogeyBzb3VyY2U6IFRpbWVTcGFuLCB0YXJnZXQ6IFRpbWVTcGFuLCBmcm9tU2lkZTogc3RyaW5nLCB0b1NpZGU6IHN0cmluZywgdmFsaWQ6IGJvb2xlYW4gfSkgPT4gc3RyaW5nfERvbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIENsYXNzIGltcGxlbWVudGluZyB0aGUgcG9wdXAgcmVzb2x2aW5nICpzY2hlZHVsaW5nIGN5Y2xlcyouXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWN5Y2xlUmVzb2x1dGlvblBvcHVwQ2xhc3MpXG4gICAgICovXG4gICAgY3ljbGVSZXNvbHV0aW9uUG9wdXBDbGFzcyA/IDogdHlwZW9mIEN5Y2xlUmVzb2x1dGlvblBvcHVwXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVudCBzaG9ydGN1dCB0byBzZXQgZGF0YSBpbiBncmlkcyBzdG9yZSBib3RoIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgYXQgcnVudGltZS4gQ2FuIGFsc28gYmVcbiAgICAgKiB1c2VkIHRvIHJldHJpZXZlIGRhdGEgYXQgcnVudGltZSwgYWx0aG91Z2ggd2UgZG8gcmVjb21tZW5kIGludGVyYWN0aW5nIHdpdGggR3JpZHMgc3RvcmUgaW5zdGVhZCB1c2luZ1xuICAgICAqIHRoZSBbc3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI3Byb3BlcnR5LXN0b3JlKSBwcm9wZXJ0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZGF0YSlcbiAgICAgKi9cbiAgICBkYXRhID8gOiBvYmplY3RbXXxNb2RlbFtdfE1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgV2lkZ2V0IGNvbmZpZ3VyYXRpb24gaXMgdXNlZCBpbiB0aGUgR3JpZCdzIFJvd0V4cGFuZGVyIGZlYXR1cmUncyBgd2lkZ2V0YCBjb25maWcsIHByb3ZpZGUgdGhlXG4gICAgICogZmllbGQgb24gdGhlIGV4cGFuZGVkIHJlY29yZCB0byB1c2UgZm9yIHBvcHVsYXRpbmcgdGhpcyB3aWRnZXQncyBzdG9yZSAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgICBkYXRhRmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBhcHBseSB0byBlbGVtZW50cyBkYXRhc2V0IChlYWNoIGtleSB3aWxsIGJlIHVzZWQgYXMgYSBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudClcbiAgICAgKi9cbiAgICBkYXRhc2V0ID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgLyoqXG4gICAgICogUmVnaW9uIHRvIHdoaWNoIGNvbHVtbnMgYXJlIGFkZGVkIHdoZW4gdGhleSBoYXZlIG5vbmUgc3BlY2lmaWVkXG4gICAgICovXG4gICAgZGVmYXVsdFJlZ2lvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGZpbGUgbmFtZSBvZiBhbiBpbWFnZSBmaWxlIHRvIHVzZSB3aGVuIGEgcmVzb3VyY2UgaGFzIG5vIGltYWdlLCBvciBpdHMgaW1hZ2UgY2Fubm90IGJlIGxvYWRlZC5cbiAgICAgKi9cbiAgICBkZWZhdWx0UmVzb3VyY2VJbWFnZU5hbWUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIElubGluZSBkZXBlbmRlbmNpZXMsIHdpbGwgYmUgbG9hZGVkIGludG8gdGhlIGJhY2tpbmcgcHJvamVjdCdzIERlcGVuZGVuY3lTdG9yZS5cbiAgICAgKi9cbiAgICBkZXBlbmRlbmNpZXMgPyA6IERlcGVuZGVuY3lNb2RlbFtdfERlcGVuZGVuY3lNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogQSB0YXNrIGZpZWxkIChpZCwgd2JzQ29kZSwgc2VxdWVuY2VOdW1iZXIgZXRjKSB0aGF0IHdpbGwgYmUgdXNlZCB3aGVuIGRpc3BsYXlpbmcgYW5kIGVkaXRpbmcgbGlua2VkIHRhc2tzLlxuICAgICAqL1xuICAgIGRlcGVuZGVuY3lJZEZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGRlc3Ryb3kgdGhlIHN0b3JlIHdoZW4gdGhlIGdyaWQgaXMgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIGRlc3Ryb3lTdG9yZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENoZWNrIGZvciBDU1MgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2hlbiB1cGdyYWRpbmcgdG8gdjcuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgY2hlY2tzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1kZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzKVxuICAgICAqL1xuICAgIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIG9yIGVuYWJsZSB0aGUgd2lkZ2V0LiBJdCBpcyBzaW1pbGFyIHRvIFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXJlYWRPbmx5KSBleGNlcHQgYSBkaXNhYmxlZCB3aWRnZXRcbiAgICAgKiBjYW5ub3QgYmUgZm9jdXNlZCwgdXNlcyBhIGRpZmZlcmVudCByZW5kaXRpb24gKHVzdWFsbHkgZ3JleWlzaCkgYW5kIGRvZXMgbm90IGFsbG93IHNlbGVjdGluZyBpdHMgdmFsdWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWRpc2FibGVkKVxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFufCdpbmVydCdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIG5vdCBnZXQgYSB3YXJuaW5nIHdoZW4gY2FsbGluZyBbZ2V0U3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2Z1bmN0aW9uLWdldFN0YXRlKSB3aGVuIHRoZXJlIGlzIGEgY29sdW1uXG4gICAgICogY29uZmlndXJlZCB3aXRob3V0IGFuIGBpZGAuIEJ1dCB0aGUgcmVjb21tZW5kZWQgYWN0aW9uIGlzIHRvIGFsd2F5cyBjb25maWd1cmUgY29sdW1ucyB3aXRoIGFuIGBpZGAgd2hlblxuICAgICAqIHVzaW5nIHN0YXRlcy5cbiAgICAgKi9cbiAgICBkaXNhYmxlR3JpZENvbHVtbklkV2FybmluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbm90IGdldCBhIHdhcm5pbmcgd2hlbiB1c2luZyBhbm90aGVyIGJhc2UgY2xhc3MgdGhhbiBHcmlkUm93TW9kZWwgZm9yIHlvdXIgZ3JpZCBkYXRhLiBJZlxuICAgICAqIHlvdSBkbywgYW5kIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBmdWxsIGZlYXR1cmUgc2V0IG9mIHRoZSBncmlkIHRoZW4gaW5jbHVkZSB0aGUgZmllbGRzIGZyb20gR3JpZFJvd01vZGVsXG4gICAgICogaW4geW91ciBtb2RlbCBkZWZpbml0aW9uLlxuICAgICAqL1xuICAgIGRpc2FibGVHcmlkUm93TW9kZWxXYXJuaW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBob3cgZGF0ZXMgd2lsbCBiZSBmb3JtYXR0ZWQgaW4gdG9vbHRpcHMgZXRjLiBUaGlzIGNvbmZpZyBoYXMgcHJpb3JpdHkgb3ZlciBzaW1pbGFyIGNvbmZpZyBvbiB0aGVcbiAgICAgKiB2aWV3IHByZXNldC4gRm9yIGFsbG93ZWQgdmFsdWVzIHNlZSBbZm9ybWF0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjZnVuY3Rpb24tZm9ybWF0LXN0YXRpYykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWRpc3BsYXlEYXRlRm9ybWF0KVxuICAgICAqL1xuICAgIGRpc3BsYXlEYXRlRm9ybWF0ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGRpc3BsYXkgc3BlY2lhbCBwb3B1cHMgYWxsb3dpbmcgdXNlclxuICAgICAqIHRvIHJlc29sdmUgW3NjaGVkdWxpbmcgY29uZmxpY3RzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlclByby93aWRnZXQvU2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwKSxcbiAgICAgKiBbY3ljbGVzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlclByby93aWRnZXQvQ3ljbGVSZXNvbHV0aW9uUG9wdXApIG9yIGNhbGVuZGFyIG1pc2NvbmZpZ3VyYXRpb25zLlxuICAgICAqIFRoZSBwb3B1cCB3aWxsIHN1Z2dlc3QgdXNlciB3YXlzIHRvIHJlc29sdmUgdGhlIGNvcnJlc3BvbmRpbmcgY2FzZS5cbiAgICAgKi9cbiAgICBkaXNwbGF5U2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgW3BhbmVsJ3MgXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsKVxuICAgICAqIFtzdHJpcHMgY29sbGVjdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZG9jaylcbiAgICAgKi9cbiAgICBkb2NrID8gOiAndG9wJ3wnYm90dG9tJ3wnbGVmdCd8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnfCdoZWFkZXInfCdwcmUtaGVhZGVyJ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBNYWtlIHRoaXMgUGFuZWwgYSBkb2NrZWQgZHJhd2VyIHdoaWNoIHNsaWRlcyBvdXQgZnJvbSBvbmUgc2lkZSBvZiB0aGUgYnJvd3NlciB2aWV3cG9ydCBieSBkZWZhdWx0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1kcmF3ZXIpXG4gICAgICogQHBhcmFtIHsnc3RhcnQnLCdsZWZ0JywnZW5kJywncmlnaHQnLCd0b3AnLCdib3R0b20nfSBzaWRlIFRoZSBzaWRlIG9mIHRoZSB2aWV3cG9ydCB0byBkb2NrIHRoZSBkcmF3ZXIgdG8uICAqIGAnc3RhcnQnYCBtZWFucyB0aGUgYGlubGluZS1zdGFydGAgc2lkZS4gKiBgJ2VuZCdgIG1lYW5zIHRoZSBgaW5saW5lLWVuZGAgc2lkZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyxudW1iZXJ9IHNpemUgVGhlIHNpemUgb2YgdGhlIGRyYXdlciBpbiBpdHMgY29sbGFwc2libGUgYXhpcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlubGluZSBJZiB1c2luZyB0aGUgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIHRvIHBsYWNlIHRoZSBkcmF3ZXIgaW5zaWRlIGEgaG9zdCB3aWRnZXQsIHRoaXMgbWF5IGJlIHNldCB0byBgdHJ1ZWAgdG8gbWFrZSB0aGUgZHJhd2VyIGlubGluZSB3aXRoaW4gdGhhdCBob3N0LiBOb3RlIHRoYXQsIGlmIHVzaW5nIHRoaXMsIHRoZSBsYXlvdXQgb2YgdGhlIGhvc3QgZWxlbWVudCBtdXN0IGhhdmUgYGZsZXgtZGlyZWN0aW9uYCBzZXQgYXBwcm9wcmlhdGVseS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sb2JqZWN0fSBhdXRvQ2xvc2UgU3BlY2lmaWVzIHdoYXQgdXNlciBhY3Rpb25zIHNob3VsZCBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBkcmF3ZXIuIERlZmF1bHRzIHRvIGNsb3Npbmcgd2hlbiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgZHJhd2VyIG9yIHdoZW4gZm9jdXMgbW92ZXMgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixzdHJpbmd9IGF1dG9DbG9zZS5tb3VzZWRvd24gSWYgdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGRyYXdlciwgdGhlIGRyYXdlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaGlkZGVuLiBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIGl0IGlzIHVzZWQgYXMgYSBDU1Mgc2VsZWN0b3IgdG8gZmlsdGVyIGNsaWNrcyB3aGljaCBzaG91bGQgY2xvc2UgdGhlIGRyYXdlci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sc3RyaW5nfSBhdXRvQ2xvc2UuZm9jdXNvdXQgSWYgZm9jdXMgbW92ZXMgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLCB0aGUgZHJhd2VyIHdpbGwgYXV0b21hdGljYWxseSBiZSBoaWRkZW4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dG9DbG9zZS5tb3VzZW91dCBIaWRlcyB0aGUgZHJhd2VyIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgZHJhd2VyIGFmdGVyIHRoZSBgYXV0b0Nsb3NlRGVsYXlgIHBlcmlvZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXV0b0Nsb3NlRGVsYXkgV2hlbiB1c2luZyBgbW91c2VvdXRgLCB0aGlzIGlzIHRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHNcbiAgICAgKi9cbiAgICBkcmF3ZXIgPyA6IGJvb2xlYW58e3NpZGU/OiAnc3RhcnQnfCdsZWZ0J3wnZW5kJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nLCBzaXplPzogc3RyaW5nfG51bWJlciwgaW5saW5lPzogYm9vbGVhbiwgYXV0b0Nsb3NlOiB7IG1vdXNlZG93bj86IGJvb2xlYW58c3RyaW5nLCBmb2N1c291dD86IGJvb2xlYW58c3RyaW5nLCBtb3VzZW91dD86IHN0cmluZyB9LCBhdXRvQ2xvc2VEZWxheT86IG51bWJlcn1cbiAgICAvKipcbiAgICAgKiBEZWNpbWFsIHByZWNpc2lvbiB1c2VkIHdoZW4gZGlzcGxheWluZyBkdXJhdGlvbnMsIHVzZWQgYnkgdG9vbHRpcHMgYW5kIER1cmF0aW9uQ29sdW1uLlxuICAgICAqIFNwZWNpZnkgYGZhbHNlYCB0byB1c2UgcmF3IHZhbHVlXG4gICAgICovXG4gICAgZHVyYXRpb25EaXNwbGF5UHJlY2lzaW9uID8gOiBudW1iZXJ8Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBzcGVjaWZ5aW5nIGF0dHJpYnV0ZXMgdG8gYXNzaWduIHRvIHRoZSByb290IGVsZW1lbnQgb2YgdGhpcyB3aWRnZXQuXG4gICAgICogU2V0IGBudWxsYCB2YWx1ZSB0byBhdHRyaWJ1dGUgdG8gcmVtb3ZlIGl0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1lbGVtZW50QXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBlbGVtZW50QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+XG4gICAgLyoqXG4gICAgICogVGV4dCBvciBIVE1MLCBvciBhIFtFbXB0eVRleHREb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI3R5cGVkZWYtRW1wdHlUZXh0RG9tQ29uZmlnKSBibG9jayB0byBkaXNwbGF5IHdoZW4gdGhlcmUgaXMgbm8gZGF0YSB0byBkaXNwbGF5IGluIHRoZSBncmlkLlxuICAgICAqIFdoZW4gdXNpbmcgbXVsdGlwbGUgR3JpZCByZWdpb25zLCBwcm92aWRlIHRoZSBgcmVnaW9uYCBwcm9wZXJ0eSB0byBkZWNpZGUgd2hlcmUgdGhlIHRleHQgaXMgc2hvd24uXG4gICAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2hvd24gaW4gdGhlIGZpcnN0IHJlZ2lvbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZW1wdHlUZXh0KVxuICAgICAqL1xuICAgIGVtcHR5VGV4dCA/IDogc3RyaW5nfEVtcHR5VGV4dERvbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93IHVzaW5nIFtEZWxldGVdIGFuZCBbQmFja3NwYWNlXSB0byByZW1vdmUgZXZlbnRzL2Fzc2lnbm1lbnRzXG4gICAgICovXG4gICAgZW5hYmxlRGVsZXRlS2V5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgaWYgeW91IGRvbid0IHdhbnQgZXZlbnQgYmFyIERPTSB1cGRhdGVzIHRvIGFuaW1hdGUuXG4gICAgICogQGRlcHJlY2F0ZWQgNy4wLjAgRGVwcmVjYXRlZCBgZW5hYmxlRXZlbnRBbmltYXRpb25zYC4gVXNlIGB0cmFuc2l0aW9uLmNoYW5nZUV2ZW50YCBpbnN0ZWFkXG4gICAgICovXG4gICAgZW5hYmxlRXZlbnRBbmltYXRpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBzaG93aW5nIG9jY3VycmVuY2VzIG9mIHJlY3VycmluZyBldmVudHMgYWNyb3NzIHRoZSBzY2hlZHVsZXIncyB0aW1lIGF4aXMuIElmIHlvdSB3YW50IHRvIGRpc2FibGVcbiAgICAgKiB0aGUgcmVjdXJyZW5jZSBwb3B1cCwgeW91IGNhbiBjaG9vc2Ugc2V0IHRoZSBgZGVmYXVsdEFjdGlvbmAgdG8gYGZ1dHVyZWAgdG8gYWZmZWN0IGFsbCBmdXR1cmVcbiAgICAgKiBvY2N1cnJlbmNlcywgb3IgYHNpbmdsZWAgdG8ganVzdCBhZmZlY3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBldmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZW5hYmxlUmVjdXJyaW5nRXZlbnRzKVxuICAgICAqL1xuICAgIGVuYWJsZVJlY3VycmluZ0V2ZW50cyA/IDogYm9vbGVhbnx7XG4gICAgICAgIGRlZmF1bHRBY3Rpb24/OiAnc2luZ2xlJ3wnZnV0dXJlJ1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgdHJ1ZWAgdG8gYWxsb3cgZWxlbWVudHMgd2l0aGluIGNlbGxzIHRvIGJlIHN0eWxlZCBhcyBgcG9zaXRpb246IHN0aWNreWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWVuYWJsZVN0aWNreSlcbiAgICAgKi9cbiAgICBlbmFibGVTdGlja3kgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFsbG93IHRleHQgc2VsZWN0aW9uIGluIHRoZSBncmlkIGNlbGxzLiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGggdGhlXG4gICAgICogYFJvd1Jlb3JkZXJgIGZlYXR1cmUuXG4gICAgICovXG4gICAgZW5hYmxlVGV4dFNlbGVjdGlvbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSwgc29tZSBmZWF0dXJlcyB3aWxsIHN0YXJ0IGEgcHJvamVjdCB0cmFuc2FjdGlvbiwgYmxvY2tpbmcgdGhlIHByb2plY3QgcXVldWUsIHN1c3BlbmRpbmdcbiAgICAgKiBzdG9yZSBldmVudHMgYW5kIHByZXZlbnRpbmcgVUkgZnJvbSB1cGRhdGVzLiBJdCBiZWhhdmVzIHNpbWlsYXIgdG9cbiAgICAgKiBbaW5zdGFudFVwZGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLWluc3RhbnRVcGRhdGUpIHNldCB0byBgZmFsc2VgLlxuICAgICAqIFNldCBgZmFsc2VgIHRvIG5vdCB1c2UgcHJvamVjdCBxdWV1ZS5cbiAgICAgKi9cbiAgICBlbmFibGVUcmFuc2FjdGlvbmFsRmVhdHVyZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGxpc3RlbiBmb3IgQ1RSTC1aIChDTUQtWiBvbiBNYWMgT1MpIGtleWJvYXJkIGV2ZW50IGFuZCB0cmlnZ2VyIHVuZG8gKHJlZG8gd2hlbiBTSElGVCBpc1xuICAgICAqIHByZXNzZWQpLiBPbmx5IGFwcGxpY2FibGUgd2hlbiB1c2luZyBhIFtTdGF0ZVRyYWNraW5nTWFuYWdlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2RhdGEvc3RtL1N0YXRlVHJhY2tpbmdNYW5hZ2VyKS5cbiAgICAgKi9cbiAgICBlbmFibGVVbmRvUmVkb0tleXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgZW5kIGRhdGUgb2YgdGhlIHRpbWVsaW5lIChpZiBub3QgY29uZmlndXJlIHdpdGggW2luZmluaXRlU2Nyb2xsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L1RpbWVsaW5lQmFzZSNjb25maWctaW5maW5pdGVTY3JvbGwpKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZW5kRGF0ZSlcbiAgICAgKi9cbiAgICBlbmREYXRlID8gOiBEYXRlfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRhc2sgY29sb3IgdXNlZCBieSBkZWZhdWx0LiBUYXNrcyBjYW4gc3BlY2lmeSB0aGVpciBvd24gW2V2ZW50Q29sb3JdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvVGFza01vZGVsI2ZpZWxkLWV2ZW50Q29sb3IpLFxuICAgICAqIHdoaWNoIHdpbGwgb3ZlcnJpZGUgdGhpcyBjb25maWcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWV2ZW50Q29sb3IpXG4gICAgICovXG4gICAgZXZlbnRDb2xvciA/IDogRXZlbnRDb2xvclxuICAgIC8qKlxuICAgICAqIEV2ZW50IHN0eWxlIHVzZWQgYnkgZGVmYXVsdC4gRXZlbnRzIGFuZCByZXNvdXJjZXMgY2FuIHNwZWNpZnkgdGhlaXIgb3duIHN0eWxlLCB3aXRoIHByaW9yaXR5IG9yZGVyIGJlaW5nOlxuICAgICAqIEV2ZW50IC0mZ3Q7IFJlc291cmNlIC0mZ3Q7IFNjaGVkdWxlciBkZWZhdWx0LiBEZXRlcm1pbmVzIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBldmVudCBieSBhc3NpZ25pbmcgYSBDU1MgY2xhc3NcbiAgICAgKiB0byBpdC4gQXZhaWxhYmxlIHN0eWxlcyBhcmU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWV2ZW50U3R5bGUpXG4gICAgICovXG4gICAgZXZlbnRTdHlsZSA/IDogJ3RvbmFsJ3wnZmlsbGVkJ3wnYm9yZGVyZWQnfCd0cmFjZWQnfCdvdXRsaW5lZCd8J2luZGVudGVkJ3wnbGluZSd8J2Rhc2hlZCd8J21pbmltYWwnfCdyb3VuZGVkJ3wnY2FsZW5kYXInfCdpbnRlcmRheSd8J2dhbnR0J3xudWxsXG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIHN0cmV0Y2ggdGhlIGxhc3QgY29sdW1uIGluIGEgZ3JpZCB3aXRoIGFsbCBmaXhlZCB3aWR0aCBjb2x1bW5zXG4gICAgICogdG8gZmlsbCBleHRyYSBhdmFpbGFibGUgc3BhY2UgaWYgdGhlIGdyaWQncyB3aWR0aCBpcyB3aWRlciB0aGFuIHRoZSBzdW0gb2YgYWxsXG4gICAgICogY29uZmlndXJlZCBjb2x1bW4gd2lkdGhzLlxuICAgICAqL1xuICAgIGZpbGxMYXN0Q29sdW1uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gZm9yY2UgcmVuZGVyZWQgZXZlbnRzL3Rhc2tzIHRvIGZpbGwgZW50aXJlIHRpY2tzLiBUaGlzIG9ubHkgYWZmZWN0cyByZW5kZXJpbmcsIHN0YXJ0XG4gICAgICogYW5kIGVuZCBkYXRlcyByZXRhaW4gdGhlaXIgdmFsdWUgb24gdGhlIGRhdGEgbGV2ZWwuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWZpbGxUaWNrcylcbiAgICAgKi9cbiAgICBmaWxsVGlja3MgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBVc2UgZml4ZWQgcm93IGhlaWdodC4gU2V0dGluZyB0aGlzIHRvIGB0cnVlYCB3aWxsIGNvbmZpZ3VyZSB0aGUgdW5kZXJseWluZyBSb3dNYW5hZ2VyIHRvIHVzZSBmaXhlZCByb3dcbiAgICAgKiBoZWlnaHQsIHdoaWNoIHNhY3JpZmljZXMgdGhlIGFiaWxpdHkgdG8gdXNlIHJvd3Mgd2l0aCB2YXJpYWJsZSBoZWlnaHQgdG8gZ2FpbiBhIGZyYWN0aW9uIGJldHRlclxuICAgICAqIHBlcmZvcm1hbmNlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1maXhlZFJvd0hlaWdodClcbiAgICAgKi9cbiAgICBmaXhlZFJvd0hlaWdodCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENvbmZpZyBvYmplY3Qgb2YgYSBmb290ZXIuIE1heSBjb250YWluIGEgYGRvY2tgLCBgaHRtbGAgYW5kIGEgYGNsc2AgcHJvcGVydHkuIEEgZm9vdGVyIGlzIG5vdCBhIHdpZGdldCxcbiAgICAgKiBidXQgcmF0aGVyIHBsYWluIEhUTUwgdGhhdCBmb2xsb3dzIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhbmVsJ3MgYm9keSBhbmQgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZm9vdGVyKVxuICAgICAqL1xuICAgIGZvb3RlciA/IDoge1xuICAgICAgICBkb2NrPzogJ3RvcCd8J3JpZ2h0J3wnYm90dG9tJ3wnbGVmdCd8J3N0YXJ0J3wnZW5kJ1xuICAgICAgICBodG1sPzogc3RyaW5nXG4gICAgICAgIGNscz86IHN0cmluZ1xuICAgIH18c3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBmb3JjZSB0aGUgdGltZSBjb2x1bW5zIHRvIGZpdCB0byB0aGUgYXZhaWxhYmxlIHNwYWNlIChob3Jpem9udGFsIG9yIHZlcnRpY2FsIGRlcGVuZHMgb24gbW9kZSkuXG4gICAgICogTm90ZSB0aGF0IHNldHRpbmcgW3N1cHByZXNzRml0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L1RpbWVsaW5lQmFzZSNjb25maWctc3VwcHJlc3NGaXQpIHRvIGB0cnVlYCwgd2lsbCBkaXNhYmxlIGBmb3JjZUZpdGAgZnVuY3Rpb25hbGl0eS4gWm9vbWluZ1xuICAgICAqIGNhbm5vdCBiZSB1c2VkIHdoZW4gYGZvcmNlRml0YCBpcyBzZXQuXG4gICAgICovXG4gICAgZm9yY2VGaXQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hpY2ggbmFtZXMgZm9ybXVsYSBwcmVmaXhlcyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGNvbHVtbnMgY29uZmlndXJlZCB3aXRoXG4gICAgICogYGZvcm11bGEgOiB0cnVlYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZm9ybXVsYVByb3ZpZGVycylcbiAgICAgKi9cbiAgICBmb3JtdWxhUHJvdmlkZXJzID8gOiBSZWNvcmQ8c3RyaW5nLCBGb3JtdWxhUHJvdmlkZXJDb25maWc+XG4gICAgLyoqXG4gICAgICogUmVmcmVzaCBlbnRpcmUgcm93IHdoZW4gYSByZWNvcmQgY2hhbmdlcyAoYHRydWVgKSBvciwgaWYgcG9zc2libGUsIG9ubHkgdGhlIGNlbGxzIGFmZmVjdGVkIChgZmFsc2VgKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZnVsbFJvd1JlZnJlc2gpXG4gICAgICovXG4gICAgZnVsbFJvd1JlZnJlc2ggPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGRhdGVzIHRoYXQgd2lsbCBjb25zdHJhaW4gcmVzaXplIGFuZCBkcmFnIG9wZXJhdGlvbnMuIFRoZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGVcbiAgICAgKiB0YXNrIGJlaW5nIGRyYWdnZWQuXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IHRhc2tSZWNvcmQgVGhlIHRhc2sgcmVjb3JkIGJlaW5nIG1vdmVkIG9yIHJlc2l6ZWQuXG4gICAgICogQHJldHVybnMge0RhdGVDb25zdHJhaW50fSBDb25zdHJhaW5pbmcgb2JqZWN0IGNvbnRhaW5pbmcgYHN0YXJ0YCBhbmQgYGVuZGAgY29uc3RyYWludHMuIE9taXR0aW5nIGVpdGhlciB3aWxsIG1lYW4gdGhhdCBlbmQgaXMgbm90IGNvbnN0cmFpbmVkLiBTbyB5b3UgY2FuIHByZXZlbnQgYSByZXNpemUgb3IgbW92ZSBmcm9tIG1vdmluZyAqYmVmb3JlKiBhIGNlcnRhaW4gdGltZSB3aGlsZSBub3QgY29uc3RyYWluaW5nIHRoZSBlbmQgZGF0ZS5cbiAgICAgKi9cbiAgICBnZXREYXRlQ29uc3RyYWludHMgPyA6ICh0YXNrUmVjb3JkOiBUYXNrTW9kZWwpID0+IERhdGVDb25zdHJhaW50XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggcm93IHRvIGRldGVybWluZSBpdHMgaGVpZ2h0LiBJdCBpcyBwYXNzZWQgYSBbcmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvZGF0YS9Nb2RlbCkgYW5kXG4gICAgICogZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSBkZXNpcmVkIGhlaWdodCBvZiB0aGF0IHJlY29yZHMgcm93LiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBHcmlkc1xuICAgICAqIGNvbmZpZ3VyZWQgW3Jvd0hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXJvd0hlaWdodCkgaXMgdXNlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctZ2V0Um93SGVpZ2h0KVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBnZXRSb3dIZWlnaHQucmVjb3JkIFJlY29yZCB0byBkZXRlcm1pbmUgcm93IGhlaWdodCBmb3JcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBEZXNpcmVkIHJvdyBoZWlnaHRcbiAgICAgKi9cbiAgICBnZXRSb3dIZWlnaHQgPyA6IChnZXRSb3dIZWlnaHQ6IHsgcmVjb3JkOiBNb2RlbCB9KSA9PiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBbb2JqZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI3R5cGVkZWYtUGFuZWxIZWFkZXIpIGZvciB0aGUgcGFuZWwncyBoZWFkZXIgb3IgYSBzdHJpbmcgaW4gcGxhY2Ugb2YgYSBgdGl0bGVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1oZWFkZXIpXG4gICAgICovXG4gICAgaGVhZGVyID8gOiBzdHJpbmd8Ym9vbGVhbnxQYW5lbEhlYWRlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIGhlaWdodCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUuaGVpZ2h0YC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCBoZWlnaHQgc3RyaW5nIG9yIGEgbnVtYmVyLFxuICAgICAqIHdoaWNoIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgaGVpZ2h0LCBidXQgaW4gc29tZVxuICAgICAqIGNhc2VzIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgaGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHdpdGggdHJ1ZSB0byBtYWtlIHdpZGdldCBpbml0aWFsbHkgaGlkZGVuLlxuICAgICAqL1xuICAgIGhpZGRlbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaGlkZSB0aGUgZm9vdGVyIGVsZW1lbnRzXG4gICAgICovXG4gICAgaGlkZUZvb3RlcnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGhpZGUgdGhlIGNvbHVtbiBoZWFkZXIgZWxlbWVudHNcbiAgICAgKi9cbiAgICBoaWRlSGVhZGVycyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaGlkZSB0aGUgR3JpZCdzIGhvcml6b250YWwgc2Nyb2xsYmFyKHMpXG4gICAgICovXG4gICAgaGlkZUhvcml6b250YWxTY3JvbGxiYXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0IHRoZSByb3cgaG92ZXIgZWZmZWN0IGlzIG5vdCB2aXNpYmxlIGluIHRoZSBTY2hlZHVsZXIgcGFydCBvZiB0aGUgZ3JpZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctaGlkZVJvd0hvdmVyKVxuICAgICAqL1xuICAgIGhpZGVSb3dIb3ZlciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgQ1NTIGNsYXNzIHRvIGFkZCB0byBob3ZlcmVkIHJvdyBlbGVtZW50c1xuICAgICAqL1xuICAgIGhvdmVyQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBpY29uIHRvIHNob3cgYmVmb3JlIHRoZSBbdGl0bGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXRpdGxlKS4gRWl0aGVyIHBhc3MgYSBDU1MgY2xhc3MgYXMgYSBzdHJpbmcsIG9yIHBhc3MgYVxuICAgICAqIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3QgZGVzY3JpYmluZyBhbiBlbGVtZW50IHRvIHJlcHJlc2VudCB0aGUgaWNvbi5cbiAgICAgKi9cbiAgICBpY29uID8gOiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBpZ25vcmUgcmVhY3RpbmcgdG8gRE9NIGV2ZW50cyAobW91c2VvdmVyL21vdXNlb3V0IGV0Yykgd2hpbGUgc2Nyb2xsaW5nLiBVc2VmdWwgaWYgeW91XG4gICAgICogd2FudCB0byBtYXhpbWl6ZSBzY3JvbGwgcGVyZm9ybWFuY2UuXG4gICAgICovXG4gICAgaWdub3JlRG9tRXZlbnRzV2hpbGVTY3JvbGxpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB3aWRnZXRzIHJlYWQtb25seSBzdGF0ZSBzaG91bGQgYmUgY29udHJvbGxlZCBieSBpdHMgcGFyZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1pZ25vcmVQYXJlbnRSZWFkT25seSlcbiAgICAgKi9cbiAgICBpZ25vcmVQYXJlbnRSZWFkT25seSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYXV0b21hdGljYWxseSBhZGp1c3QgdGhlIHBhbmVsIHRpbWVzcGFuIGR1cmluZyBzY3JvbGxpbmcgaW4gdGhlIHRpbWUgZGltZW5zaW9uLFxuICAgICAqIHdoZW4gdGhlIHNjcm9sbGVyIGNvbWVzIGNsb3NlIHRvIHRoZSBzdGFydC9lbmQgZWRnZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWluZmluaXRlU2Nyb2xsKVxuICAgICAqL1xuICAgIGluZmluaXRlU2Nyb2xsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byBhbGlnbiBpbnB1dCBmaWVsZHMgb2YgY2hpbGQgd2lkZ2V0cy4gQnkgZGVmYXVsdCwgdGhlIEZpZWxkIGlucHV0IGVsZW1lbnQgaXNcbiAgICAgKiBwbGFjZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBgbGFiZWxgLiBJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIGlucHV0IGZpZWxkcyBhbGlnbmVkIHRvIHRoZVxuICAgICAqIHJpZ2h0LCBzZXQgdGhpcyBjb25maWcgdG8gYCdlbmQnYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctaW5wdXRGaWVsZEFsaWduKVxuICAgICAqL1xuICAgIGlucHV0RmllbGRBbGlnbiA/IDogJ3N0YXJ0J3wnZW5kJ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGluc2VydCB0aGlzIHdpZGdldCBiZWZvcmUuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgaW5zZXJ0QmVmb3JlID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhcHBlbmQgdGhpcyB3aWRnZXQgZWxlbWVudCB0bywgYXMgYSBmaXJzdCBjaGlsZC4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRGaXJzdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogU2VlIFtLZXlib2FyZCBzaG9ydGN1dHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dCNrZXlib2FyZC1zaG9ydGN1dHMpIGZvciBkZXRhaWxzXG4gICAgICovXG4gICAga2V5TWFwID8gOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+XG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byB1c2Ugc2FtZSBsYWJlbCBwbGFjZW1lbnQgb24gYWxsIGNoaWxkIHdpZGdldHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWxhYmVsUG9zaXRpb24pXG4gICAgICovXG4gICAgbGFiZWxQb3NpdGlvbiA/IDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0ZW5lciBzZXQgZm9yIHRoaXMgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBHYW50dEJhc2VMaXN0ZW5lcnNcbiAgICAvKipcbiAgICAgKiBBIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QsIG9yIGEgbWVzc2FnZSB0byBiZSBzaG93biB3aGVuIGEgc3RvcmUgaXMgcGVyZm9ybWluZyBhIHJlbW90ZVxuICAgICAqIG9wZXJhdGlvbiwgb3IgQ3J1ZCBNYW5hZ2VyIGlzIGxvYWRpbmcgZGF0YSBmcm9tIHRoZSBzZXZlci4gU2V0IHRvIGBudWxsYCB0byBkaXNhYmxlIGRlZmF1bHQgbG9hZCBtYXNrLlxuICAgICAqL1xuICAgIGxvYWRNYXNrID8gOiBzdHJpbmd8TWFza0NvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0IHRvIGFkanVzdCB0aGUgW21hc2tEZWZhdWx0c10oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza0RlZmF1bHRzKVxuICAgICAqIHdoZW4gZGF0YSBpcyBsb2FkaW5nLiBUaGUgbWVzc2FnZSBhbmQgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmcm9tIHRoZVxuICAgICAqIFtsb2FkTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL21peGluL0xvYWRNYXNrYWJsZSNjb25maWctbG9hZE1hc2spIGNvbmZpZyB0YWtlIHByaW9yaXR5IG92ZXIgdGhlc2Ugb3B0aW9ucywganVzdCBhcyB0aGV5IGRvXG4gICAgICogZm9yIGBtYXNrRGVmYXVsdHNgLCByZXNwZWN0aXZlbHkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWxvYWRNYXNrRGVmYXVsdHMpXG4gICAgICovXG4gICAgbG9hZE1hc2tEZWZhdWx0cyA/IDogTWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdCB0byBhZGp1c3QgdGhlIFttYXNrRGVmYXVsdHNdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1hc2tEZWZhdWx0cylcbiAgICAgKiB3aGVuIGFuIGVycm9yIG9jY3VycyBsb2FkaW5nIGRhdGEuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLWxvYWRNYXNrRXJyb3IpXG4gICAgICovXG4gICAgbG9hZE1hc2tFcnJvciA/IDogTWFza0NvbmZpZ3xNYXNrfGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGxvY2FsaXphdGlvbiBvZiB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRpbWUgaW4gbXMgdW50aWwgYSBsb25ncHJlc3MgaXMgdHJpZ2dlcmVkXG4gICAgICovXG4gICAgbG9uZ1ByZXNzVGltZSA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAsIGV2ZW50cyBhcmUgc2l6ZWQgYW5kIHBvc2l0aW9uZWQgYmFzZWQgb24gcm93SGVpZ2h0LCByZXNvdXJjZU1hcmdpbiBhbmQgYmFyTWFyZ2luIHNldHRpbmdzLlxuICAgICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgaWYgeW91IHdhbnQgdG8gY29udHJvbCBoZWlnaHQgYW5kIHZlcnRpY2FsIHBvc2l0aW9uIHVzaW5nIENTUyBpbnN0ZWFkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1tYW5hZ2VkRXZlbnRTaXppbmcpXG4gICAgICovXG4gICAgbWFuYWdlZEV2ZW50U2l6aW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgbWFyZ2luLiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGBUUkJMYCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXJnaW4gPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBHcmlkcyBjaGFuZ2UgdGhlIGBtYXNrRGVmYXVsdHNgIHRvIGNvdmVyIG9ubHkgdGhlaXIgYGJvZHlgIGVsZW1lbnQuXG4gICAgICovXG4gICAgbWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhcHBseSB0aGUgZGVmYXVsdCBtYXNrIHRvIHRoZSB3aWRnZXQuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIHRoZSBtYXNrIG1lc3NhZ2Ugb3IgYVxuICAgICAqIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgbWFza2VkID8gOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogR2V0L3NldCBlbmQgZGF0ZSBsaW1pdCBvZiB0aGUgdGltZWxpbmUuXG4gICAgICogQWN0aW9ucyBzdWNoIGFzIHRpbWVsaW5lIHNjcm9sbGluZywgYWxsIHR5cGVzIG9mIHRpbWVsaW5lIHpvb21zIGFuZCBzaGlmdHNcbiAgICAgKiB3aWxsIHJlc3BlY3QgdGhpcyBsaW1pdC5cbiAgICAgKi9cbiAgICBtYXhEYXRlID8gOiBEYXRlfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWF4SGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWhlaWdodCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heEhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHRpbWUgYXhpcyB1bml0IHRvIGRpc3BsYXkgbm9uLXdvcmtpbmcgcmFuZ2VzIGZvciAoJ2hvdXInIG9yICdkYXknIGV0YykuXG4gICAgICogV2hlbiB6b29taW5nIHRvIGEgdmlldyB3aXRoIGEgbGFyZ2VyIHVuaXQsIG5vIG5vbi13b3JraW5nIHRpbWUgZWxlbWVudHMgd2lsbCBiZSByZW5kZXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctbWF4VGltZUF4aXNVbml0KVxuICAgICAqL1xuICAgIG1heFRpbWVBeGlzVW5pdCA/IDogRHVyYXRpb25Vbml0XG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1heFdpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gd2hpY2ggW3pvb21Jbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9UaW1lbGluZVpvb21hYmxlI2Z1bmN0aW9uLXpvb21Jbikgd2lsbCB3b3JrLiBEZWZhdWx0cyB0byB0aGUgbnVtYmVyIG9mXG4gICAgICogW1ZpZXdQcmVzZXRzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9wcmVzZXQvVmlld1ByZXNldCkgYXZhaWxhYmxlLCBzZWUgW3ByZXNldHNdKCNTY2hlZHVsZXIvdmlldy9taXhpbi9UaW1lbGluZVZpZXdQcmVzZXRzI3Byb3BlcnR5LXByZXNldHMpXG4gICAgICogZm9yIGluZm9ybWF0aW9uLiBVbmxlc3MgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGNvbGxlY3Rpb24gb2YgYXZhaWxhYmxlIHByZXNldHMsIHRoZSBtYXggem9vbSBsZXZlbCBpc1xuICAgICAqIG1pbGxpc2Vjb25kcy5cbiAgICAgKi9cbiAgICBtYXhab29tTGV2ZWwgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEdldC9zZXQgc3RhcnQgZGF0ZSBsaW1pdCBvZiB0aGUgdGltZWxpbmUuXG4gICAgICogQWN0aW9ucyBzdWNoIGFzIHRpbWVsaW5lIHNjcm9sbGluZywgYWxsIHR5cGVzIG9mIHRpbWVsaW5lIHpvb21zIGFuZCBzaGlmdHNcbiAgICAgKiB3aWxsIHJlc3BlY3QgdGhpcyBsaW1pdC5cbiAgICAgKi9cbiAgICBtaW5EYXRlID8gOiBEYXRlfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEdyaWQncyBgbWluLWhlaWdodGAuIERlZmF1bHRzIHRvIGAxMGVtYCB0byBiZSBzdXJlIHRoYXQgdGhlIEdyaWQgYWx3YXlzIGhhcyBhIGhlaWdodCB3aGVyZXZlciBpdCBpc1xuICAgICAqIGluc2VydGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1taW5IZWlnaHQpXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1pbldpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5XaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgdG8gd2hpY2ggW3pvb21PdXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVab29tYWJsZSNmdW5jdGlvbi16b29tT3V0KSB3aWxsIHdvcmsuIERlZmF1bHRzIHRvIDAgKHllYXIgdGlja3MpXG4gICAgICovXG4gICAgbWluWm9vbUxldmVsID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBHcmlkIG1vbml0b3JzIHdpbmRvdyByZXNpemUgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiBvciBhIHNldCBvZiBgbmFtZTogdmFsdWVgIHByb3BlcnRpZXMgdG8gYXBwbHkgb24gdGFza3MgY3JlYXRlZCB1c2luZyB0aGUgdGFzayBjb250ZXh0IG1lbnUuXG4gICAgICogQmUgYXdhcmUgdGhhdCBgbmFtZWAgdmFsdWUgd2lsbCBiZSBpZ25vcmVkIHNpbmNlIGl0J3MgYXV0byBnZW5lcmF0ZWQgYW5kIG1heSBiZSBjb25maWd1cmVkIHdpdGggbG9jYWxpemF0aW9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1uZXdUYXNrRGVmYXVsdHMpXG4gICAgICogQHJldHVybnMge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbENvbmZpZyxvYmplY3R9IFNldCBvZiBwcm9wZXJ0aWVzIHRvIGFwcGx5IG9uIHRhc2tzIGNyZWF0ZWQgdXNpbmcgdGhlIHRhc2sgY29udGV4dCBtZW51XG4gICAgICovXG4gICAgbmV3VGFza0RlZmF1bHRzID8gOiBUYXNrTW9kZWxDb25maWd8b2JqZWN0fCgoKSA9PiBUYXNrTW9kZWxDb25maWd8b2JqZWN0KVxuICAgIC8qKlxuICAgICAqIFRoZSBvd25pbmcgV2lkZ2V0IG9mIHRoaXMgV2lkZ2V0LiBJZiB0aGlzIFdpZGdldCBpcyBkaXJlY3RseSBjb250YWluZWQgKHRoYXQgaXMsIGl0IGlzIG9uZSBvZiB0aGVcbiAgICAgKiBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LWl0ZW1zKSBvZiBhIENvbnRhaW5lciksIHRoaXMgY29uZmlnIHdpbGwgYmUgaWdub3JlZC4gSW4gdGhpcyBjYXNlXG4gICAgICogdGhlIG93bmVyIGlzIDxzdHJvbmc+YWx3YXlzPC9zdHJvbmc+IHRoZSBlbmNhcHN1bGF0aW5nIENvbnRhaW5lci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctb3duZXIpXG4gICAgICovXG4gICAgb3duZXIgPyA6IFdpZGdldHxhbnlcbiAgICAvKipcbiAgICAgKiBQYXJ0bmVycyB0aGlzIFRpbWVsaW5lIHBhbmVsIHdpdGggYW5vdGhlciBUaW1lbGluZSBpbiBvcmRlciB0byBzeW5jIHRoZWlyIHJlZ2lvbiBzaXplcyAoc3ViLWdyaWRzIGxpa2UgbG9ja2VkLCBub3JtYWwgd2lsbCBnZXQgdGhlIHNhbWUgd2lkdGgpLFxuICAgICAqIHN0YXJ0IGFuZCBlbmQgZGF0ZXMsIHZpZXcgcHJlc2V0LCB6b29tIGxldmVsIGFuZCBzY3JvbGxpbmcgcG9zaXRpb24uIEFsbCB0aGVzZSB2YWx1ZXMgd2lsbCBiZSBzeW5jZWQgd2l0aCB0aGUgdGltZWxpbmUgZGVmaW5lZCBhcyB0aGUgYHBhcnRuZXJgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1wYXJ0bmVyKVxuICAgICAqL1xuICAgIHBhcnRuZXIgPyA6IFRpbWVsaW5lQmFzZVxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgcGx1Z2lucyAoYW4gYXJyYXkgb2YgY2xhc3NlcykgaW4gY29uZmlnXG4gICAgICovXG4gICAgcGx1Z2lucyA/IDogRnVuY3Rpb25bXVxuICAgIC8qKlxuICAgICAqIFRydWUgdG8gcHJlc2VydmUgZm9jdXNlZCBjZWxsIGFmdGVyIGxvYWRpbmcgbmV3IGRhdGFcbiAgICAgKi9cbiAgICBwcmVzZXJ2ZUZvY3VzT25EYXRhc2V0Q2hhbmdlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJlc2VydmUgdGhlIGdyaWQncyB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gd2hlbiBjaGFuZ2VzZXRzIGFyZSBhcHBsaWVkLCBhcyBpbiB0aGUgY2FzZSBvZiByZW1vdGVcbiAgICAgKiBjaGFuZ2VzLCBvciB3aGVuIHN0b3JlcyBhcmUgY29uZmlndXJlZCB3aXRoIFtzeW5jRGF0YU9uTG9hZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUjY29uZmlnLXN5bmNEYXRhT25Mb2FkKS5cbiAgICAgKi9cbiAgICBwcmVzZXJ2ZVNjcm9sbCA/IDogUHJlc2VydmVTY3JvbGxPcHRpb25zfGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBwcmVzZXJ2ZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gYWZ0ZXIgc3RvcmUgYWN0aW9ucyB0aGF0IHRyaWdnZXIgYSBgcmVmcmVzaGAgZXZlbnQsXG4gICAgICogc3VjaCBhcyBsb2FkaW5nIG5ldyBkYXRhIGFuZCBmaWx0ZXJpbmcuXG4gICAgICovXG4gICAgcHJlc2VydmVTY3JvbGxPbkRhdGFzZXRDaGFuZ2UgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBbVmlld1ByZXNldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvcHJlc2V0L1ZpZXdQcmVzZXQpIGNvbmZpZyBvYmplY3RzXG4gICAgICogd2hpY2ggZGVzY3JpYmVzIHRoZSBhdmFpbGFibGUgdGltZWxpbmUgbGF5b3V0cyBmb3IgdGhpcyBzY2hlZHVsZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXByZXNldHMpXG4gICAgICovXG4gICAgcHJlc2V0cyA/IDogVmlld1ByZXNldENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogUHJldmVudCB0b29sdGlwIGZyb20gYmVpbmcgZGlzcGxheWVkIG9uIHRvdWNoIGRldmljZXMuIFVzZWZ1bCBmb3IgZXhhbXBsZSBmb3IgYnV0dG9ucyB0aGF0IGRpc3BsYXkgYVxuICAgICAqIG1lbnUgb24gY2xpY2sgZXRjLCBzaW5jZSB0aGUgdG9vbHRpcCB3b3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgKi9cbiAgICBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIFtQcm9qZWN0TW9kZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsKSBpbnN0YW5jZSBvciBhIGNvbmZpZyBvYmplY3QuIFRoZSBwcm9qZWN0IGhvbGRzIGFsbCBHYW50dCBkYXRhLlxuICAgICAqL1xuICAgIHByb2plY3QgPyA6IFByb2plY3RNb2RlbHxQcm9qZWN0TW9kZWxDb25maWd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQWNjZXB0cyB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctcHJvamVjdFByb2dyZXNzUmVwb3J0aW5nKVxuICAgICAqL1xuICAgIHByb2plY3RQcm9ncmVzc1JlcG9ydGluZyA/IDogc3RyaW5nfG51bGxcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIG1ha2UgdGhlIEdhbnR0IHJlYWQtb25seSwgYnkgZGlzYWJsaW5nIGFueSBVSXMgZm9yIG1vZGlmeWluZyBkYXRhLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1yZWFkT25seSlcbiAgICAgKi9cbiAgICByZWFkT25seSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBjb25maXJtYXRpb24gZGlhbG9nIHNob3duIHdoZW4gYSByZWN1cnJpbmcgZXZlbnQgaXMgZWRpdGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1yZWN1cnJlbmNlQ29uZmlybWF0aW9uUG9wdXApXG4gICAgICovXG4gICAgcmVjdXJyZW5jZUNvbmZpcm1hdGlvblBvcHVwID8gOiBSZWN1cnJlbmNlQ29uZmlybWF0aW9uUG9wdXBDb25maWd8UmVjdXJyZW5jZUNvbmZpcm1hdGlvblBvcHVwXG4gICAgcmVsYXlTdG9yZUV2ZW50cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVpdGhlciBhIGRlZmF1bHQgYHJlbmRpdGlvbmAgdG8gYXBwbHkgdG8gYWxsIGNoaWxkIHdpZGdldHMsIG9yIGEgbWFwIG9mIHJlbmRpdGlvbnMga2V5ZWQgYnkgY2hpbGQgd2lkZ2V0XG4gICAgICogYHR5cGVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1yZW5kaXRpb24pXG4gICAgICovXG4gICAgcmVuZGl0aW9uID8gOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPnxudWxsXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHRoaXMgcHJvcGVydHkgdG8gYWxsb3cgdGhlIHdpZGdldC9jb21wb25lbnQgdG8gYmUgcmVzaXplZC4gUHJlc3NpbmcgPGtiZD5TaGlmdDwva2JkPiB3aGlsZSByZXNpemluZyB3aWxsXG4gICAgICogY29uc3RyYWluIHRoZSBhc3BlY3QgcmF0aW8uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXJlc2l6YWJsZSlcbiAgICAgKi9cbiAgICByZXNpemFibGUgPyA6IGJvb2xlYW58e1xuICAgICAgICBtaW5XaWR0aD86IG51bWJlclxuICAgICAgICBtYXhXaWR0aD86IG51bWJlclxuICAgICAgICBtaW5IZWlnaHQ/OiBudW1iZXJcbiAgICAgICAgbWF4SGVpZ2h0PzogbnVtYmVyXG4gICAgICAgIGhhbmRsZXM/OiBvYmplY3RcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gb25seSBtZWFzdXJlIGNlbGwgY29udGVudHMgd2hlbiBkb3VibGUtY2xpY2tpbmcgdGhlIGVkZ2UgYmV0d2VlbiBjb2x1bW4gaGVhZGVycy5cbiAgICAgKi9cbiAgICByZXNpemVUb0ZpdEluY2x1ZGVzSGVhZGVyID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIHBhdGggZm9yIHJlc291cmNlIGltYWdlcywgdXNlZCBieSB2YXJpb3VzIHdpZGdldHMgc3VjaCBhcyB0aGUgcmVzb3VyY2UgYXNzaWdubWVudCBjb2x1bW4uXG4gICAgICogQGRlcHJlY2F0ZWQgNy4wIEluIGZhdm9yIG9mIFtyZXNvdXJjZUltYWdlUGF0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctcmVzb3VyY2VJbWFnZVBhdGgpXG4gICAgICovXG4gICAgcmVzb3VyY2VJbWFnZUZvbGRlclBhdGggPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBwYXRoIGZvciByZXNvdXJjZSBpbWFnZXMsIHVzZWQgYnkgdmFyaW91cyB3aWRnZXRzIHN1Y2ggYXMgdGhlIHJlc291cmNlIGFzc2lnbm1lbnQgY29sdW1uLlxuICAgICAqL1xuICAgIHJlc291cmNlSW1hZ2VQYXRoID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBJbmxpbmUgcmVzb3VyY2VzLCB3aWxsIGJlIGxvYWRlZCBpbnRvIHRoZSBiYWNraW5nIHByb2plY3QncyBSZXNvdXJjZVN0b3JlLlxuICAgICAqL1xuICAgIHJlc291cmNlcyA/IDogUmVzb3VyY2VNb2RlbFtdfFJlc291cmNlTW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFwiQnJlYWsgcG9pbnRzXCIgZm9yIHdoaWNoIHJlc3BvbnNpdmUgY29uZmlnIHRvIHVzZSBmb3IgY29sdW1ucyBhbmQgY3NzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1yZXNwb25zaXZlTGV2ZWxzKVxuICAgICAqL1xuICAgIHJlc3BvbnNpdmVMZXZlbHMgPyA6IFJlY29yZDxzdHJpbmcsIG51bWJlcnxzdHJpbmd8UmVzcG9uc2l2ZUxldmVsQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaGF2ZSB0aGUgY29tcG9uZW50IGRpc3BsYXkgYSB0cmFuc2x1Y2VudCByaXBwbGUgd2hlbiBpdHNcbiAgICAgKiBbZm9jdXNFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1mb2N1c0VsZW1lbnQpLCBvciBbZWxlbWVudF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyB0YXBwZWQgPGVtPmlmIHRoZVxuICAgICAqIGN1cnJlbnQgdGhlbWUgc3VwcG9ydHMgcmlwcGxlczwvZW0+LiBPdXQgb2YgdGhlIGJveCwgb25seSB0aGUgTWF0ZXJpYWwgdGhlbWUgc3VwcG9ydHMgcmlwcGxlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctcmlwcGxlKVxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHlvdSBhcmUgcmVuZGVyaW5nIHRoaXMgd2lkZ2V0IHRvIGEgc2hhZG93IHJvb3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IHRoaXMgY29uZmlnIHRvIHRoZSBzaGFkb3dSb290LiBJZiBub3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IGl0IHRvIGBkb2N1bWVudC5ib2R5YFxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50ID8gOiBTaGFkb3dSb290fEhUTUxFbGVtZW50XG4gICAgLyoqXG4gICAgICogUm93IGhlaWdodCBpbiBwaXhlbHMuIFRoaXMgYWxsb3dzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3Igcm93cyB0byBiZSBjb250cm9sbGVkLiBOb3RlIHRoYXQgaXQgbWF5IGJlXG4gICAgICogb3ZlcnJpZGVuIGJ5IHNwZWNpZnlpbmcgYSBbcm93SGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZGF0YS9HcmlkUm93TW9kZWwjZmllbGQtcm93SGVpZ2h0KSBvbiBhIHBlciByZWNvcmQgYmFzaXMsIG9yIGZyb21cbiAgICAgKiBhIGNvbHVtbiBbcmVuZGVyZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uI2NvbmZpZy1yZW5kZXJlcikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXJvd0hlaWdodClcbiAgICAgKi9cbiAgICByb3dIZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBzaG93IHJvdyBsaW5lcy4gRW5kIHJlc3VsdCBtaWdodCBiZSBvdmVycnVsZWQgYnkvZGlmZmVyIGJldHdlZW4gdGhlbWVzLlxuICAgICAqL1xuICAgIHJvd0xpbmVzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBgdHJ1ZWAgdG8gbWFrZSB0aGUgd2lkZ2V0J3MgZWxlbWVudCB1c2UgdGhlIGBkaXJlY3Rpb246cnRsYCBzdHlsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctcnRsKVxuICAgICAqL1xuICAgIHJ0bCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENsYXNzIGltcGxlbWVudGluZyB0aGUgcG9wdXAgcmVzb2x2aW5nICpzY2hlZHVsaW5nIGNvbmZsaWN0cyogYW5kICpjYWxlbmRhciBtaXNjb25maWd1cmF0aW9ucyouXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXNjaGVkdWxpbmdJc3N1ZVJlc29sdXRpb25Qb3B1cENsYXNzKVxuICAgICAqL1xuICAgIHNjaGVkdWxpbmdJc3N1ZVJlc29sdXRpb25Qb3B1cENsYXNzID8gOiB0eXBlb2YgU2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB3aGV0aGVyIHRoZSBncmlkIGlzIHNjcm9sbGFibGUgaW4gdGhlIGBZYCBheGlzLiBUaGlzIGlzIHVzZWQgdG8gY29uZmlndXJlIGEgW1Njcm9sbGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvaGVscGVyL3V0aWwvU2Nyb2xsZXIpLlxuICAgICAqIFNlZSB0aGUgW3Njcm9sbGVyQ2xhc3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1zY3JvbGxlckNsYXNzKSBjb25maWcgb3B0aW9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zY3JvbGxhYmxlKVxuICAgICAqL1xuICAgIHNjcm9sbGFibGUgPyA6IGJvb2xlYW58U2Nyb2xsZXJDb25maWd8U2Nyb2xsZXJcbiAgICAvKipcbiAgICAgKiBUaGUgY2xhc3MgdG8gaW5zdGFudGlhdGUgdG8gdXNlIGFzIHRoZSBbc2Nyb2xsYWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXNjcm9sbGFibGUpLiBEZWZhdWx0cyB0byBbU2Nyb2xsZXJdKCNDb3JlL2hlbHBlci91dGlsL1Njcm9sbGVyKS5cbiAgICAgKi9cbiAgICBzY3JvbGxlckNsYXNzID8gOiB0eXBlb2YgU2Nyb2xsZXJcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgdGhlIFtTY3JvbGxNYW5hZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvdXRpbC9TY3JvbGxNYW5hZ2VyKSBjbGFzcyBvbiBpbml0aWFsaXphdGlvbi4gUmV0dXJucyB0aGVcbiAgICAgKiBbU2Nyb2xsTWFuYWdlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3V0aWwvU2Nyb2xsTWFuYWdlcikgYXQgcnVudGltZS5cbiAgICAgKi9cbiAgICBzY3JvbGxNYW5hZ2VyID8gOiBTY3JvbGxNYW5hZ2VyQ29uZmlnfFNjcm9sbE1hbmFnZXJcbiAgICAvKipcbiAgICAgKiBUcnVlIHRvIHNjcm9sbCB0aGUgdGFzayBiYXIgaW50byB2aWV3IHdoZW4gY2xpY2tpbmcgYSBjZWxsLCB5b3UgY2FuIGFsc28gcGFzcyBhXG4gICAgICogW3Njcm9sbCBjb25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZnVuY3Rpb24tc2Nyb2xsVGFza0ludG9WaWV3KSBvYmplY3QuXG4gICAgICovXG4gICAgc2Nyb2xsVGFza0ludG9WaWV3T25DZWxsQ2xpY2sgPyA6IGJvb2xlYW58QnJ5bnR1bVNjcm9sbE9wdGlvbnNcbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb24gY29uZmlndXJhdGlvbiBzZXR0aW5ncywgY2hhbmdlIHRoZXNlIHByb3BlcnRpZXMgdG8gY29udHJvbCBob3cgc2VsZWN0aW9uIHdvcmtzIGFuZCB3aGF0IGNhbiBiZVxuICAgICAqIHNlbGVjdGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zZWxlY3Rpb25Nb2RlKVxuICAgICAqL1xuICAgIHNlbGVjdGlvbk1vZGUgPyA6IEdyaWRTZWxlY3Rpb25Nb2RlXG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGB0cnVlYCB0aGlzIHdpbGw6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXNob3dDb3N0Q29udHJvbHMpXG4gICAgICovXG4gICAgc2hvd0Nvc3RDb250cm9scyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIGBmYWxzZWAgdG8gbm90IHNob3cgYSB0b29sdGlwIHdoaWxlIGNyZWF0aW5nIGEgZGVwZW5kZW5jeVxuICAgICAqL1xuICAgIHNob3dDcmVhdGlvblRvb2x0aXAgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhhdmUgdGhlIGdyaWQgc2hvdyBhIHJlZCBcImNoYW5nZWRcIiB0YWcgaW4gY2VsbHMgd2hvc2VcbiAgICAgKiBmaWVsZCB2YWx1ZSBoYXMgY2hhbmdlZCBhbmQgbm90IHlldCBiZWVuIGNvbW1pdHRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctc2hvd0RpcnR5KVxuICAgICAqL1xuICAgIHNob3dEaXJ0eSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGR1cmluZ0VkaXQ/OiBib29sZWFuXG4gICAgICAgIG5ld1JlY29yZD86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBzaG93IHRoZSBsYWcgaW4gdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgICBzaG93TGFnSW5Ub29sdGlwID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gaGlkZSByZWN1cnJpbmcgZmllbGRzIGluIGV2ZW50IGVkaXRvciwgZXZlbiBpZiB0aGVcbiAgICAgKiBbUmVjdXJyaW5nIEV2ZW50c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9SZWN1cnJpbmdFdmVudHMjY29uZmlnLWVuYWJsZVJlY3VycmluZ0V2ZW50cykgaXMgYHRydWVgXG4gICAgICogYW5kIGEgcmVjdXJyaW5nIGV2ZW50IGlzIGJlaW5nIGVkaXRlZC5cbiAgICAgKi9cbiAgICBzaG93UmVjdXJyaW5nVUkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gYHRydWVgIHRoaXMgd2lsbCBzaG93IGEgY29sb3IgZmllbGQgaW4gdGhlIFtUYXNrRWRpdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tFZGl0KSBlZGl0b3IgYW5kIGFsc28gYVxuICAgICAqIHBpY2tlciBpbiB0aGUgW1Rhc2tNZW51XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza01lbnUpLiBCb3RoIGVuYWJsZXMgdGhlIHVzZXIgdG8gY2hvb3NlIGEgY29sb3Igd2hpY2ggd2lsbCBiZVxuICAgICAqIGFwcGxpZWQgdG8gdGhlIHRhc2sgYmFyJ3MgYmFja2dyb3VuZC4gU2VlIFRhc2tNb2RlbCdzIFtldmVudENvbG9yXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Rhc2tNb2RlbCNmaWVsZC1ldmVudENvbG9yKVxuICAgICAqIGNvbmZpZy5cbiAgICAgKi9cbiAgICBzaG93VGFza0NvbG9yUGlja2VycyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gc2hvdyBhIHRvb2x0aXAgd2hlbiBob3ZlcmluZyBhIGRlcGVuZGVuY3kgbGluZVxuICAgICAqL1xuICAgIHNob3dUb29sdGlwID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhcyBgZmFsc2VgIHRvIG5vdCBzaG93IHVuc2NoZWR1bGVkIHRhc2tzIG9uIHRoZSBHYW50dCBjaGFydC4gVW5zY2hlZHVsZWQgdGFza3Mgd2lsbCBiZSByZW5kZXJlZCBhc1xuICAgICAqIGFuIGljb25cbiAgICAgKi9cbiAgICBzaG93VW5zY2hlZHVsZWRUYXNrcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gc25hcCB0byB0aGUgY3VycmVudCB0aW1lIHJlc29sdXRpb24gaW5jcmVtZW50IHdoaWxlIGludGVyYWN0aW5nIHdpdGggc2NoZWR1bGVkIGV2ZW50cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctc25hcClcbiAgICAgKi9cbiAgICBzbmFwID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQWZmZWN0cyBkcmFnIGRyb3AgYW5kIHJlc2l6aW5nIG9mIGV2ZW50cyB3aGVuIFtzbmFwXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lRGF0ZU1hcHBlciNjb25maWctc25hcClcbiAgICAgKiBpcyBlbmFibGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zbmFwUmVsYXRpdmVUb0V2ZW50U3RhcnREYXRlKVxuICAgICAqL1xuICAgIHNuYXBSZWxhdGl2ZVRvRXZlbnRTdGFydERhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIGhvdyBtYW55IGNvbHVtbnMgdG8gc3BhbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBzcGFuID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhcnQgZGF0ZSBvZiB0aGUgdGltZWxpbmUgKGlmIG5vdCBjb25maWd1cmUgd2l0aCBbaW5maW5pdGVTY3JvbGxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvVGltZWxpbmVCYXNlI2NvbmZpZy1pbmZpbml0ZVNjcm9sbCkpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zdGFydERhdGUpXG4gICAgICovXG4gICAgc3RhcnREYXRlID8gOiBEYXRlfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zdGF0ZWZ1bClcbiAgICAgKi9cbiAgICBzdGF0ZWZ1bCA/IDogYm9vbGVhbnxvYmplY3R8c3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnRzIHRoYXQsIHdoZW4gZmlyZWQgYnkgdGhpcyBjb21wb25lbnQsIHNob3VsZCB0cmlnZ2VyIGl0IHRvIHNhdmUgaXRzIHN0YXRlIGJ5IGNhbGxpbmdcbiAgICAgKiBbc2F2ZVN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjZnVuY3Rpb24tc2F2ZVN0YXRlKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctc3RhdGVmdWxFdmVudHMpXG4gICAgICovXG4gICAgc3RhdGVmdWxFdmVudHMgPyA6IG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgdG8gdXNlIHdoZW4gc2F2aW5nIHRoaXMgb2JqZWN0J3Mgc3RhdGUgaW4gdGhlIFtzdGF0ZVByb3ZpZGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjY29uZmlnLXN0YXRlUHJvdmlkZXIpLiBJZiB0aGlzIGNvbmZpZyBpc1xuICAgICAqIG5vdCBhc3NpZ25lZCwgYW5kIFtzdGF0ZWZ1bF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2NvbmZpZy1zdGF0ZWZ1bCkgaXMgbm90IHNldCB0byBgZmFsc2VgLCB0aGUgW2lkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1pZClcbiAgICAgKiAoaWYgZXhwbGljaXRseSBzcGVjaWZpZWQpIHdpbGwgYmUgdXNlZCBhcyB0aGUgYHN0YXRlSWRgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zdGF0ZUlkKVxuICAgICAqL1xuICAgIHN0YXRlSWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBgU3RhdGVQcm92aWRlcmAgdG8gdXNlIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhpcyBvYmplY3QncyBbc3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNwcm9wZXJ0eS1zdGF0ZSkuIEJ5IGRlZmF1bHQsIGBzdGF0ZWBcbiAgICAgKiB3aWxsIGJlIHNhdmVkIHVzaW5nIHRoZSBbZGVmYXVsdCBzdGF0ZSBwcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3N0YXRlL1N0YXRlUHJvdmlkZXIjcHJvcGVydHktaW5zdGFuY2Utc3RhdGljKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctc3RhdGVQcm92aWRlcilcbiAgICAgKi9cbiAgICBzdGF0ZVByb3ZpZGVyID8gOiBTdGF0ZVByb3ZpZGVyXG4gICAgLyoqXG4gICAgICogVGhlIHByb3BlcnRpZXMgb2YgdGhpcyBzZXR0aW5ncyBvYmplY3QgY29udHJvbHMgaG93IGdyaWQgaXMgcmVzdG9yZWQgZnJvbSBzdGF0ZSBkYXRhLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zdGF0ZVNldHRpbmdzKVxuICAgICAqL1xuICAgIHN0YXRlU2V0dGluZ3MgPyA6IHtcbiAgICAgICAgcmVzdG9yZVVuY29uZmlndXJlZENvbHVtbnM/OiBib29sZWFuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gc2V0LCB0aGUgdGV4dCBpbiB0aGUgbWFqb3IgdGltZSBheGlzIGhlYWRlciBzdGlja3MgaW4gdGhlIHNjcm9sbGluZyB2aWV3cG9ydCBhcyBsb25nIGFzIHBvc3NpYmxlLlxuICAgICAqL1xuICAgIHN0aWNreUhlYWRlcnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTdG9yZSB0aGF0IGhvbGRzIHJlY29yZHMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZCwgb3IgYSBzdG9yZSBjb25maWcgb2JqZWN0LiBJZiB0aGUgY29uZmlndXJhdGlvbiBjb250YWluc1xuICAgICAqIGEgYHJlYWRVcmxgLCBhbiBgQWpheFN0b3JlYCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXN0b3JlKVxuICAgICAqL1xuICAgIHN0b3JlID8gOiBTdG9yZXxTdG9yZUNvbmZpZ3xBamF4U3RvcmV8QWpheFN0b3JlQ29uZmlnXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgd2lkZ2V0cyBrZXllZCBieSBuYW1lLiBCeSBkZWZhdWx0ICh3aGVuIG5vIGB0eXBlYCBpcyBnaXZlbiksIHN0cmlwcyBhcmVcbiAgICAgKiBbdG9vbGJhcnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhcikuIElmIHlvdSB3YW50IHRvIHBhc3MgYW4gYXJyYXksIHlvdSBjYW4gdXNlXG4gICAgICogdGhlIHRvb2xiYXIncyBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXN0cmlwcylcbiAgICAgKi9cbiAgICBzdHJpcHMgPyA6IFJlY29yZDxzdHJpbmcsIEdhbnR0Q29udGFpbmVySXRlbUNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBzdWIgZ3JpZCBjb25maWd1cmF0aW9uIG9iamVjdHMga2V5ZWQgYnkgYSBgcmVnaW9uYCBwcm9wZXJ0eS5cbiAgICAgKiBCeSBkZWZhdWx0LCBncmlkIGhhcyBhICdsb2NrZWQnIHJlZ2lvbiAoaWYgY29uZmlndXJlZCB3aXRoIGxvY2tlZCBjb2x1bW5zKSBhbmQgYSAnbm9ybWFsJyByZWdpb24uXG4gICAgICogVGhlICdub3JtYWwnIHJlZ2lvbiBkZWZhdWx0cyB0byB1c2UgYGZsZXg6IDFgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy1zdWJHcmlkQ29uZmlncylcbiAgICAgKi9cbiAgICBzdWJHcmlkQ29uZmlncyA/IDogUmVjb3JkPHN0cmluZywgU3ViR3JpZENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIHByZXZlbnQgYXV0byBjYWxjdWxhdGluZyBvZiBhIG1pbmltYWwgW3RpY2tTaXplXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lRXZlbnRSZW5kZXJpbmcjcHJvcGVydHktdGlja1NpemUpXG4gICAgICogdG8gYWx3YXlzIGZpdCB0aGUgY29udGVudCB0byB0aGUgc2NyZWVuIHNpemUuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBvbiBgdHJ1ZWAgd2lsbCBkaXNhYmxlIFtmb3JjZUZpdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9UaW1lbGluZUJhc2UjY29uZmlnLWZvcmNlRml0KSBiZWhhdmlvdXIuXG4gICAgICovXG4gICAgc3VwcHJlc3NGaXQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QsIG9yIGEgbWVzc2FnZSB0byBiZSBzaG93biB3aGVuIENydWQgTWFuYWdlclxuICAgICAqIGlzIHBlcnNpc3RpbmcgY2hhbmdlcyBvbiB0aGUgc2VydmVyLiBTZXQgdG8gYG51bGxgIHRvIGRpc2FibGUgZGVmYXVsdCBzeW5jIG1hc2suXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXN5bmNNYXNrKVxuICAgICAqL1xuICAgIHN5bmNNYXNrID8gOiBzdHJpbmd8TWFza0NvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQSBjb25maWd1cmF0aW9uIGZvciB0aGUgW3RhYl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWIpIGNyZWF0ZWQgZm9yIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgcGxhY2VkIGluIGFcbiAgICAgKiBbVGFiUGFuZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiUGFuZWwpLiBGb3IgZXhhbXBsZSwgdGhpcyBjb25maWcgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgaWNvbiBvZiB0aGUgYHRhYmAgZm9yXG4gICAgICogdGhpcyB3aWRnZXQ6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRhYilcbiAgICAgKi9cbiAgICB0YWIgPyA6IGJvb2xlYW58VGFiQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGNvbnRhaW5lciBpcyB1c2VkIGFzIGEgdGFiIGluIGEgVGFiUGFuZWwsIHRoZXNlIGl0ZW1zIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgKiBbVGFiQmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYkJhcikgd2hlbiB0aGlzIGNvbnRhaW5lciBpcyB0aGUgYWN0aXZlIHRhYi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdGFiQmFySXRlbXMpXG4gICAgICovXG4gICAgdGFiQmFySXRlbXMgPyA6IFRvb2xiYXJJdGVtc1tdfFdpZGdldFtdXG4gICAgLyoqXG4gICAgICogQW4gZW1wdHkgZnVuY3Rpb24gYnkgZGVmYXVsdCwgYnV0IHByb3ZpZGVkIHNvIHRoYXQgeW91IGNhbiBvdmVycmlkZSBpdC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZWFjaCB0aW1lXG4gICAgICogYSB0YXNrIGlzIHJlbmRlcmVkIGludG8gdGhlIGdhbnR0IHRvIHJlbmRlciB0aGUgY29udGVudHMgb2YgdGhlIHRhc2suXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRhc2tSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcmVuZGVyIGEgVGFzay5cbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZGV0YWlsLnRhc2tSZWNvcmQgVGhlIHRhc2sgcmVjb3JkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YSBBbiBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSB0YXNrIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0ge0NvcmUuaGVscGVyLnV0aWwuRG9tQ2xhc3NMaXN0LHN0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuY2xzIEFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyByZXByZXNlbnQgdGhlIENTUyBjbGFzcyBuYW1lcyB0byBiZSBhZGRlZCB0byB0aGUgdGFza3MncyBlbGVtZW50LiBTZXQgYSBwcm9wZXJ0eSdzIHZhbHVlIHRvIHRydXRoeSBvciBmYWxzeSB0byBhZGQgb3IgcmVtb3ZlIHRoZSBjbGFzcyBuYW1lIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eSBuYW1lLiBVc2luZyB0aGlzIHRlY2huaXF1ZSwgeW91IGRvIG5vdCBoYXZlIHRvIGtub3cgd2hldGhlciB0aGUgY2xhc3MgaXMgYWxyZWFkeSB0aGVyZSwgb3IgZGVhbCB3aXRoIGNvbmNhdGVuYXRpb24uXG4gICAgICogQHBhcmFtIHtzdHJpbmcsUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gZGV0YWlsLnJlbmRlckRhdGEuc3R5bGUgSW5saW5lIHN0eWxlcyBmb3IgdGhlIHRhc2sgYmFyIERPTSBlbGVtZW50LiBVc2UgZWl0aGVyICdib3JkZXI6IDFweCBzb2xpZCBibGFjaycgb3IgeyBib3JkZXI6ICcxcHggc29saWQgYmxhY2snIH1cbiAgICAgKiBAcGFyYW0ge0NvcmUuaGVscGVyLnV0aWwuRG9tQ2xhc3NMaXN0LHN0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEud3JhcHBlckNscyBBbiBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgcmVwcmVzZW50IHRoZSBDU1MgY2xhc3MgbmFtZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGV2ZW50IHdyYXBwZXIgZWxlbWVudC4gU2V0IGEgcHJvcGVydHkncyB2YWx1ZSB0byB0cnV0aHkgb3IgZmFsc3kgdG8gYWRkIG9yIHJlbW92ZSB0aGUgY2xhc3MgbmFtZSBiYXNlZCBvbiB0aGUgcHJvcGVydHkgbmFtZS4gVXNpbmcgdGhpcyB0ZWNobmlxdWUsIHlvdSBkbyBub3QgaGF2ZSB0byBrbm93IHdoZXRoZXIgdGhlIGNsYXNzIGlzIGFscmVhZHkgdGhlcmUsIG9yIGRlYWwgd2l0aCBjb25jYXRlbmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29yZS5oZWxwZXIudXRpbC5Eb21DbGFzc0xpc3Qsc3RyaW5nfSBkZXRhaWwucmVuZGVyRGF0YS5pY29uQ2xzIEFuIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyByZXByZXNlbnQgdGhlIENTUyBjbGFzcyBuYW1lcyB0byBiZSBhZGRlZCB0byBhIHRhc2sgaWNvbiBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFuW10sVGltZVNwYW5Db25maWdbXX0gaW5kaWNhdG9ycyBBbiBhcnJheSB0aGF0IGNhbiBiZSBwb3B1bGF0ZWQgd2l0aCBUaW1lU3BhbiByZWNvcmRzIG9yIHRoZWlyIGNvbmZpZyBvYmplY3RzIHRvIGhhdmUgdGhlbSByZW5kZXJlZCBpbiB0aGUgdGFzayByb3dcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nLERvbUNvbmZpZyxEb21Db25maWdbXX0gQSBzaW1wbGUgc3RyaW5nLCBvciBhIERvbUNvbmZpZyBvYmplY3QgZGVmaW5pbmcgdGhlIGFjdHVhbCBIVE1MXG4gICAgICovXG4gICAgdGFza1JlbmRlcmVyID8gOiAoZGV0YWlsOiB7IHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgcmVuZGVyRGF0YTogeyBjbHM6IERvbUNsYXNzTGlzdHxzdHJpbmcsIHN0eWxlOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPiwgd3JhcHBlckNsczogRG9tQ2xhc3NMaXN0fHN0cmluZywgaWNvbkNsczogRG9tQ2xhc3NMaXN0fHN0cmluZyB9IH0sIGluZGljYXRvcnM6IFRpbWVTcGFuW118VGltZVNwYW5Db25maWdbXSkgPT4gc3RyaW5nfERvbUNvbmZpZ3xEb21Db25maWdbXVxuICAgIC8qKlxuICAgICAqIElubGluZSB0YXNrcywgd2lsbCBiZSBsb2FkZWQgaW50byBhbiBpbnRlcm5hbGx5IGNyZWF0ZWQgVGFza1N0b3JlLlxuICAgICAqL1xuICAgIHRhc2tzID8gOiBUYXNrTW9kZWxbXXxUYXNrTW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBbVGFza1N0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2RhdGEvVGFza1N0b3JlKSBob2xkaW5nIHRoZSB0YXNrcyB0byBiZSByZW5kZXJlZCBpbnRvIHRoZSBHYW50dC5cbiAgICAgKi9cbiAgICB0YXNrU3RvcmUgPyA6IFRhc2tTdG9yZXxUYXNrU3RvcmVDb25maWdcbiAgICAvKipcbiAgICAgKiBBIENvbmZpZyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgW1Rvb2xiYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhciksXG4gICAgICogb3IgYXJyYXkgb2YgY29uZmlnIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBjaGlsZCBpdGVtcyBvZiBhIFRvb2xiYXIuXG4gICAgICogVGhpcyBjcmVhdGVzIGEgdG9vbGJhciBkb2NrZWQgdG8gdGhlIHRvcCBvZiB0aGUgcGFuZWwgaW1tZWRpYXRlbHkgYmVsb3cgdGhlIGhlYWRlci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdGJhcilcbiAgICAgKi9cbiAgICB0YmFyID8gOiAoR2FudHRDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIENTUyBjbGFzcyB1c2VkIGZvciB0ZXJtaW5hbHNcbiAgICAgKi9cbiAgICB0ZXJtaW5hbENscyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGVsYXkgaW4gbXMgYmVmb3JlIGhpZGluZyB0aGUgdGVybWluYWxzIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhbiBldmVudCBiYXIgb3IgdGVybWluYWwuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRlcm1pbmFsSGlkZURlbGF5KVxuICAgICAqL1xuICAgIHRlcm1pbmFsSGlkZURlbGF5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUZXJtaW5hbCBvZmZzZXQgZnJvbSB0aGVpciBpbml0aWFsIHBvc2l0aW9uLCBpbiBweC4gUG9zaXRpdmUgdmFsdWVzIG1vdmUgdGVybWluYWxzIGZ1cnRoZXIgYXdheSBmcm9tIHRoZVxuICAgICAqIGV2ZW50IGJhciwgbmVnYXRpdmUgdmFsdWVzIGluc2lkZSB0aGUgZXZlbnQgYmFyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy10ZXJtaW5hbE9mZnNldClcbiAgICAgKi9cbiAgICB0ZXJtaW5hbE9mZnNldCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogRGVsYXkgaW4gbXMgYmVmb3JlIHNob3dpbmcgdGhlIHRlcm1pbmFscyB3aGVuIGhvdmVyaW5nIG92ZXIgYW4gZXZlbnQgYmFyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy10ZXJtaW5hbFNob3dEZWxheSlcbiAgICAgKi9cbiAgICB0ZXJtaW5hbFNob3dEZWxheSA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogV2hlcmUgKG9uIGV2ZW50IGJhciBlZGdlcykgdG8gZGlzcGxheSB0ZXJtaW5hbHMuIFRoZSBzaWRlcyBhcmUgYCdzdGFydCdgLCBgJ3RvcCdgLFxuICAgICAqIGAnZW5kJ2AgYW5kIGAnYm90dG9tJ2BcbiAgICAgKi9cbiAgICB0ZXJtaW5hbFNpZGVzID8gOiBzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRlcm1pbmFsIGRpYW1ldGVyIGluIHB4LCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgQ1NTIHZhbHVlIGZvciBpdCAod2hpY2ggbWlnaHQgZGVwZW5kIG9uIHRoZW1lKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdGVybWluYWxTaXplKVxuICAgICAqL1xuICAgIHRlcm1pbmFsU2l6ZSA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aC9oZWlnaHQgKGRlcGVuZGluZyBvbiB2ZXJ0aWNhbCAvIGhvcml6b250YWwgbW9kZSkgb2YgYWxsIHRoZSB0aW1lIGNvbHVtbnMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRpY2tTaXplKVxuICAgICAqL1xuICAgIHRpY2tTaXplID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIFtUaW1lQXhpc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZGF0YS9UaW1lQXhpcykgY29uZmlnIG9iamVjdCBvciBpbnN0YW5jZSwgdXNlZCB0byBjcmVhdGUgYSBiYWNraW5nIGRhdGEgc3RvcmUgb2ZcbiAgICAgKiAndGlja3MnIHByb3ZpZGluZyB0aGUgaW5wdXQgZGF0ZSBkYXRhIGZvciB0aGUgdGltZSBheGlzIG9mIHRpbWVsaW5lIHBhbmVsLiBDcmVhdGVkIGF1dG9tYXRpY2FsbHkgaWYgbm9uZVxuICAgICAqIHN1cHBsaWVkLlxuICAgICAqL1xuICAgIHRpbWVBeGlzID8gOiBUaW1lQXhpc0NvbmZpZ3xUaW1lQXhpc1xuICAgIC8qKlxuICAgICAqIElubGluZSB0aW1lIHJhbmdlcywgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgYmFja2luZyBwcm9qZWN0J3MgdGltZSByYW5nZSBzdG9yZS5cbiAgICAgKi9cbiAgICB0aW1lUmFuZ2VzID8gOiBUaW1lU3BhbltdfFRpbWVTcGFuQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIGN1cnJlbnQgdGltZSByZXNvbHV0aW9uIG9iamVjdCwgd2hpY2ggY29udGFpbnMgYSB1bml0IGlkZW50aWZpZXIgYW5kIGFuIGluY3JlbWVudCBjb3VudFxuICAgICAqIGB7IHVuaXQsIGluY3JlbWVudCB9YC4gVGhpcyB2YWx1ZSBtZWFucyBtaW5pbWFsIHRhc2sgZHVyYXRpb24geW91IGNhbiBjcmVhdGUgdXNpbmcgVUkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRpbWVSZXNvbHV0aW9uKVxuICAgICAqL1xuICAgIHRpbWVSZXNvbHV0aW9uID8gOiB7XG4gICAgICAgIGluY3JlbWVudD86IG51bWJlclxuICAgICAgICB1bml0PzogRHVyYXRpb25Vbml0XG4gICAgfXxudW1iZXJcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYSB0aW1lIHpvbmUgb3IgYSBVVEMgb2Zmc2V0LiBUaGlzIHdpbGwgc2V0IHRoZSBwcm9qZWN0c1xuICAgICAqIFt0aW1lWm9uZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvUHJvamVjdE1vZGVsI2NvbmZpZy10aW1lWm9uZSkgY29uZmlnIGFjY29yZGluZ2x5LiBBcyB0aGlzIGNvbmZpZyBpcyBvbmx5IGEgcmVmZXJlcixcbiAgICAgKiBwbGVhc2Ugc2VlIHByb2plY3QncyBjb25maWcgW2RvY3VtZW50YXRpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL1Byb2plY3RNb2RlbCNjb25maWctdGltZVpvbmUpIGZvciBtb3JlXG4gICAgICogaW5mb3JtYXRpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRpbWVab25lKVxuICAgICAqL1xuICAgIHRpbWVab25lID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQSB0aXRsZSB0byBkaXNwbGF5IGluIHRoZSBoZWFkZXIgb3Igb3duaW5nIFRhYlBhbmVsLiBDYXVzZXMgY3JlYXRpb24gYW5kIGRvY2tpbmcgb2YgYSBoZWFkZXJcbiAgICAgKiB0byB0aGUgdG9wIGlmIG5vIGhlYWRlciBpcyBjb25maWd1cmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy10aXRsZSlcbiAgICAgKi9cbiAgICB0aXRsZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVHJ1ZSB0byB0b2dnbGUgdGhlIGNvbGxhcHNlZC9leHBhbmRlZCBzdGF0ZSB3aGVuIGNsaWNraW5nIGEgcGFyZW50IHRhc2sgYmFyLlxuICAgICAqL1xuICAgIHRvZ2dsZVBhcmVudFRhc2tzT25DbGljayA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbCkgdG8gYWRkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGB0aXRsZWAgaW4gdGhlIFBhbmVsIGhlYWRlci4gRWFjaFxuICAgICAqIHByb3BlcnR5IG5hbWUgaXMgdGhlIHJlZmVyZW5jZSBieSB3aGljaCBhbiBpbnN0YW50aWF0ZWQgdG9vbCBtYXkgYmUgcmV0cmlldmVkIGZyb20gdGhlIGxpdmVcbiAgICAgKiBgW3Rvb2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Rvb2xhYmxlI3Byb3BlcnR5LXRvb2xzKWAgcHJvcGVydHkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjY29uZmlnLXRvb2xzKVxuICAgICAqL1xuICAgIHRvb2xzID8gOiBSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPnxudWxsXG4gICAgLyoqXG4gICAgICogQSB0ZW1wbGF0ZSBmdW5jdGlvbiBhbGxvd2luZyB5b3UgdG8gY29uZmlndXJlIHRoZSBjb250ZW50cyBvZiB0aGUgdG9vbHRpcCBzaG93biB3aGVuIGhvdmVyaW5nIGFcbiAgICAgKiBkZXBlbmRlbmN5IGxpbmUuIFlvdSBjYW4gcmV0dXJuIGVpdGhlciBhbiBIVE1MIHN0cmluZyBvciBhIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRGVwZW5kZW5jeUJhc2VNb2RlbH0gZGVwZW5kZW5jeSBUaGUgZGVwZW5kZW5jeSByZWNvcmRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nLERvbUNvbmZpZ31cbiAgICAgKi9cbiAgICB0b29sdGlwVGVtcGxhdGUgPyA6IChkZXBlbmRlbmN5OiBEZXBlbmRlbmN5QmFzZU1vZGVsKSA9PiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIFVJIHRyYW5zaXRpb25zIGZvciB2YXJpb3VzIGFjdGlvbnMgaW4gdGhlIGdyaWQuXG4gICAgICovXG4gICAgdHJhbnNpdGlvbiA/IDoge1xuICAgICAgICBpbnNlcnRSZWNvcmQ/OiBib29sZWFuXG4gICAgICAgIHJlbW92ZVJlY29yZD86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlQ29sdW1uPzogYm9vbGVhblxuICAgICAgICBleHBhbmRDb2xsYXBzZUNvbHVtbj86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlUmVnaW9uPzogYm9vbGVhblxuICAgICAgICB0b2dnbGVUcmVlTm9kZT86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlR3JvdXA/OiBib29sZWFuXG4gICAgICAgIGZpbHRlclJlbW92YWw/OiBib29sZWFuXG4gICAgICAgIHJlbW92ZUV2ZW50PzogYm9vbGVhblxuICAgICAgICBjaGFuZ2VFdmVudD86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQW5pbWF0aW9uIHRyYW5zaXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxuICAgICAqL1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzcyBuYW1lIHN1ZmZpeGVzIHRvIGFwcGx5IHRvIHRoZSBlbGVtZW50cyByZW5kZXJlZCBieSB0aGlzIHdpZGdldC4gVGhpcyBtYXkgYmUgc3BlY2lmaWVkXG4gICAgICogYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBhbiBhcnJheSBvZiBzdHJpbmdzLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXMgd2l0aCB0cnV0aHlcbiAgICAgKiB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy11aSlcbiAgICAgKi9cbiAgICB1aSA/IDogJ3BsYWluJ3wndG9vbGJhcid8c3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBkYXkgb2Ygd2VlayBhbmQgd2VlayBvZiBtb250aCBvZiB0aGUgZXZlbnQncyBzdGFydCBkYXRlIGFyZSB1c2VkIHRvIGNyZWF0ZVxuICAgICAqIGhlbHBmdWwgY29udGV4dHVhbCByZWN1cnJlbmNlIHR5cGVzIHdoZW4gZWRpdGluZyBhIG5vbi1yZWN1cnJpbmcgZXZlbnQgcmVjb3JkIGFuZCBjaG9vc2luZ1xuICAgICAqIGFuIGluaXRpYWwgcmVjdXJyZW5jZSB0eXBlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy11c2VDb250ZXh0dWFsUmVjdXJyZW5jZVJ1bGVzKVxuICAgICAqL1xuICAgIHVzZUNvbnRleHR1YWxSZWN1cnJlbmNlUnVsZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyBrZXkgdXNlZCB0byBsb29rdXAgYSBwcmVkZWZpbmVkIFtWaWV3UHJlc2V0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9wcmVzZXQvVmlld1ByZXNldCkgKGUuZy4gJ3dlZWtBbmREYXknLCAnaG91ckFuZERheScpLFxuICAgICAqIG1hbmFnZWQgYnkgW1ByZXNldE1hbmFnZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ByZXNldC9QcmVzZXRNYW5hZ2VyKS4gU2VlIFtQcmVzZXRNYW5hZ2VyXSgjU2NoZWR1bGVyL3ByZXNldC9QcmVzZXRNYW5hZ2VyKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKiBPciBhIGNvbmZpZyBvYmplY3QgZm9yIGEgdmlld1ByZXNldC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctdmlld1ByZXNldClcbiAgICAgKi9cbiAgICB2aWV3UHJlc2V0ID8gOiBzdHJpbmd8Vmlld1ByZXNldENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZGF0ZSB0byBicmluZyBpbnRvIHZpZXcgaW5pdGlhbGx5IG9uIHRoZSBzY3JvbGxhYmxlIHRpbWVsaW5lLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2NvbmZpZy12aXNpYmxlRGF0ZSlcbiAgICAgKi9cbiAgICB2aXNpYmxlRGF0ZSA/IDogRGF0ZXxWaXNpYmxlRGF0ZVxuICAgIC8qKlxuICAgICAqIEludGVnZXIgbnVtYmVyIGluZGljYXRpbmcgdGhlIHNpemUgb2YgdGltZXNwYW4gZHVyaW5nIHpvb21pbmcuIFdoZW4gem9vbWluZywgdGhlIHRpbWVzcGFuIGlzIGFkanVzdGVkIHRvIG1ha2VcbiAgICAgKiB0aGUgc2Nyb2xsaW5nIGFyZWEgYHZpc2libGVab29tRmFjdG9yYCB0aW1lcyB3aWRlciB0aGFuIHRoZSB0aW1lbGluZSBhcmVhIGl0c2VsZi4gVXNlZCBpblxuICAgICAqIFt6b29tVG9TcGFuXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lWm9vbWFibGUjZnVuY3Rpb24tem9vbVRvU3BhbikgYW5kIFt6b29tVG9MZXZlbF0oI1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lWm9vbWFibGUjZnVuY3Rpb24tem9vbVRvTGV2ZWwpIGZ1bmN0aW9ucy5cbiAgICAgKi9cbiAgICB2aXNpYmxlWm9vbUZhY3RvciA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQSB2YWxpZCBKUyBkYXkgaW5kZXggYmV0d2VlbiAwLTYgKDA6IFN1bmRheSwgMTogTW9uZGF5IGV0Yy4pIHRvIGJlIGNvbnNpZGVyZWQgdGhlIHN0YXJ0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgKiBXaGVuIG9taXR0ZWQsIHRoZSB3ZWVrIHN0YXJ0IGRheSBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgYWN0aXZlIGxvY2FsZSBjbGFzcy5cbiAgICAgKi9cbiAgICB3ZWVrU3RhcnREYXkgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgd2lkZ2V0cyB3ZWlnaHQgZGV0ZXJtaW5lcyBpdHMgcG9zaXRpb24gYW1vbmcgc2libGluZ3Mgd2hlbiBhZGRlZCB0byBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKS5cbiAgICAgKiBIaWdoZXIgd2VpZ2h0cyBnbyBmdXJ0aGVyIGRvd24uXG4gICAgICovXG4gICAgd2VpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyB3aWR0aCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUud2lkdGhgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIHdpZHRoIHN0cmluZyBvciBhIG51bWJlciwgd2hpY2hcbiAgICAgKiB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIHdpZHRoLCBidXQgaW4gc29tZSBjYXNlc1xuICAgICAqIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgd2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2l0aCBmb3JtYXQgYHsgZnJvbURheSwgdG9EYXksIGZyb21Ib3VyLCB0b0hvdXIgfWAgdGhhdCBkZXNjcmliZXMgdGhlIHdvcmtpbmcgZGF5cyBhbmQgaG91cnMuXG4gICAgICogVGhpcyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIHBvcHVsYXRlIFRpbWVBeGlzIFtpbmNsdWRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9kYXRhL1RpbWVBeGlzI2NvbmZpZy1pbmNsdWRlKSBwcm9wZXJ0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNjb25maWctd29ya2luZ1RpbWUpXG4gICAgICovXG4gICAgd29ya2luZ1RpbWUgPyA6IHtcbiAgICAgICAgZnJvbURheT86IG51bWJlclxuICAgICAgICB0b0RheT86IG51bWJlclxuICAgICAgICBmcm9tSG91cj86IG51bWJlclxuICAgICAgICB0b0hvdXI/OiBudW1iZXJcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgb3JpZ2luYWxseSByZW5kZXJlZCB0aW1lc3BhbiBzaG91bGQgYmUgcHJlc2VydmVkIHdoaWxlIHpvb21pbmcuIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byBgZmFsc2VgLFxuICAgICAqIG1lYW5pbmcgdGhlIHRpbWVsaW5lIHBhbmVsIHdpbGwgYWRqdXN0IHRoZSBjdXJyZW50bHkgcmVuZGVyZWQgdGltZXNwYW4gdG8gbGltaXQgdGhlIGFtb3VudCBvZiBIVE1MIGNvbnRlbnQgdG9cbiAgICAgKiByZW5kZXIuIFdoZW4gc2V0dGluZyB0aGlzIG9wdGlvbiB0byBgdHJ1ZWAsIGJlIGNhcmVmdWwgbm90IHRvIGFsbG93IHRvIHpvb20gYSBiaWcgdGltZXNwYW4gaW4gc2Vjb25kc1xuICAgICAqIHJlc29sdXRpb24gZm9yIGV4YW1wbGUuIFRoYXQgd2lsbCBjYXVzZSA8c3Ryb25nPmEgbG90PC9zdHJvbmc+IG9mIEhUTUwgY29udGVudCB0byBiZSByZW5kZXJlZCBhbmQgYWZmZWN0IHBlcmZvcm1hbmNlLiBZb3VcbiAgICAgKiBjYW4gdXNlIFttaW5ab29tTGV2ZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVab29tYWJsZSNjb25maWctbWluWm9vbUxldmVsKSBhbmQgW21heFpvb21MZXZlbF0oI1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lWm9vbWFibGUjY29uZmlnLW1heFpvb21MZXZlbCkgY29uZmlnIG9wdGlvbnMgZm9yIHRoYXQuXG4gICAgICovXG4gICAgem9vbUtlZXBzT3JpZ2luYWxUaW1lc3BhbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIElmIHRydWUsIHlvdSBjYW4gem9vbSBpbiBhbmQgb3V0IG9uIHRoZSB0aW1lIGF4aXMgdXNpbmcgQ1RSTC1rZXkgKyBtb3VzZSB3aGVlbC5cbiAgICAgKi9cbiAgICB6b29tT25Nb3VzZVdoZWVsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVHJ1ZSB0byB6b29tIHRvIHRpbWUgc3BhbiB3aGVuIGRvdWJsZS1jbGlja2luZyBhIHRpbWUgYXhpcyBjZWxsLlxuICAgICAqL1xuICAgIHpvb21PblRpbWVBeGlzRG91YmxlQ2xpY2sgPyA6IGJvb2xlYW5cblxuICAgIC8vIEZlYXR1cmVzXG4gICAgLyoqXG4gICAgICogQUktcG93ZXJlZCBmaWx0ZXIgZmVhdHVyZSBmb3IgR3JpZC4gQWxsb3dzIHVzZXJzIHRvIHR5cGUgbmF0dXJhbCBsYW5ndWFnZSBxdWVyaWVzIHRvIGZpbHRlciBncmlkIGRhdGEuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2FpL0FJRmlsdGVyKVxuICAgICAqL1xuICAgIGFpRmlsdGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEFJRmlsdGVyfEFJRmlsdGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBbdGFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9UYXNrTW9kZWwpJ3MgW2Jhc2VsaW5lc10oI0dhbnR0L21vZGVsL1Rhc2tNb2RlbCNmaWVsZC1iYXNlbGluZXMpIGJlbG93IHRoZSB0YXNrcyBpbiB0aGVcbiAgICAgKiB0aW1lbGluZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL0Jhc2VsaW5lcylcbiAgICAgKi9cbiAgICBiYXNlbGluZXNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QmFzZWxpbmVzfEJhc2VsaW5lc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyB1c2luZyBgW0N0cmwvQ01EICsgQ11gLCBgW0N0cmwvQ01EICsgWF1gIGFuZCBgW0N0cmwvQ01EICsgVl1gIHRvIGN1dCwgY29weSBhbmQgcGFzdGUgY2VsbCBvciBjZWxsIHJhbmdlcy4gQWxzb1xuICAgICAqIG1ha2VzIGN1dCwgY29weSBhbmQgcGFzdGUgYWN0aW9ucyBhdmFpbGFibGUgdmlhIHRoZSBjZWxsIGNvbnRleHQgbWVudS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbENvcHlQYXN0ZSlcbiAgICAgKi9cbiAgICBjZWxsQ29weVBhc3RlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxDb3B5UGFzdGV8Q2VsbENvcHlQYXN0ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIFtDZWxsRWRpdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbEVkaXQpIHRvIGVuY2Fwc3VsYXRlIEdhbnR0IGZ1bmN0aW9uYWxpdHkuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IDxiPmRlZmF1bHQ8L2I+XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9DZWxsRWRpdClcbiAgICAgKi9cbiAgICBjZWxsRWRpdEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsRWRpdHxDZWxsRWRpdENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFJpZ2h0IGNsaWNrIHRvIGRpc3BsYXkgY29udGV4dCBtZW51IGZvciBjZWxscy4gVG8gaW52b2tlIHRoZSBjZWxsIG1lbnUgaW4gYSBrZXlib2FyZC1hY2Nlc3NpYmxlIG1hbm5lciwgdXNlIHRoZVxuICAgICAqIGBTUEFDRWAga2V5IHdoZW4gdGhlIGNlbGwgaXMgZm9jdXNlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbE1lbnUpXG4gICAgICovXG4gICAgY2VsbE1lbnVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbE1lbnV8Q2VsbE1lbnVDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIHRvb2x0aXAgd2hlbiBob3ZlcmluZyBjZWxscy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbFRvb2x0aXApXG4gICAgICovXG4gICAgY2VsbFRvb2x0aXBGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbFRvb2x0aXB8Q2VsbFRvb2x0aXBDb25maWdcbiAgICAvKipcbiAgICAgKiBBZGRzIGludGVyYWN0aXZlIGNoYXJ0aW5nIHRvIGEgR3JpZC4gW0NoYXJ0c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9DaGFydC93aWRnZXQvQ2hhcnQpIGNhbiBiZSBjcmVhdGVkIGZyb20gYSBzZWxlY3Rpb24gb2YgR3JpZCBkYXRhXG4gICAgICogYW5kIHVwZGF0ZWQgaW4gcmVhbHRpbWUgYXMgZGF0YSBjaGFuZ2VzLiBTdXBwb3J0cyBtYW55IGNvbW1vbiBjaGFydCB0eXBlcyB3aXRoIGV4dGVuc2l2ZSBzdHlsaW5nIGFuZCBjdXN0b21pemF0aW9uXG4gICAgICogb3B0aW9ucy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2hhcnRzKVxuICAgICAqL1xuICAgIGNoYXJ0c0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDaGFydHN8Q2hhcnRzQ29uZmlnXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgW2F1dG9XaWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLWF1dG9XaWR0aCkgY29uZmlnIGZvciBhIGdyaWQncyBjb2x1bW5zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Db2x1bW5BdXRvV2lkdGgpXG4gICAgICovXG4gICAgY29sdW1uQXV0b1dpZHRoRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtbkF1dG9XaWR0aHxDb2x1bW5BdXRvV2lkdGhDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIHRvb2xiYXIgd2hpbGUgZHJhZ2dpbmcgY29sdW1uIGhlYWRlcnMuIERyb3Agb24gYSBidXR0b24gaW4gdGhlIHRvb2xiYXIgdG8gYWN0aXZhdGUgYSBjZXJ0YWluIGZ1bmN0aW9uLFxuICAgICAqIGZvciBleGFtcGxlIHRvIGdyb3VwIGJ5IHRoYXQgY29sdW1uLiBUaGlzIGZlYXR1cmUgc2ltcGxpZmllcyBjZXJ0YWluIG9wZXJhdGlvbnMgb24gdG91Y2ggZGV2aWNlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uRHJhZ1Rvb2xiYXIpXG4gICAgICovXG4gICAgY29sdW1uRHJhZ1Rvb2xiYXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uRHJhZ1Rvb2xiYXJ8Q29sdW1uRHJhZ1Rvb2xiYXJDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBjb2x1bW4gbGluZXMgZm9yIHRpY2tzLCB3aXRoIGEgZGlmZmVyZW50IHN0eWxpbmcgZm9yIG1ham9yIHRpY2tzIChieSBkZWZhdWx0IHRoZXkgYXJlIGRhcmtlcikuIElmIHRoaXNcbiAgICAgKiBmZWF0dXJlIGlzIGRpc2FibGVkLCBubyBsaW5lcyBhcmUgc2hvd24uIElmIGl0J3MgZW5hYmxlZCwgbGluZSBhcmUgc2hvd24gZm9yIHRoZSB0aWNrIGxldmVsIHdoaWNoIGlzIHNldCBpbiBjdXJyZW50XG4gICAgICogVmlld1ByZXNldC4gUGxlYXNlIHNlZSBbY29sdW1uTGluZXNGb3JdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ByZXNldC9WaWV3UHJlc2V0I2ZpZWxkLWNvbHVtbkxpbmVzRm9yKSBjb25maWcgZm9yIGRldGFpbHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvQ29sdW1uTGluZXMpXG4gICAgICovXG4gICAgY29sdW1uTGluZXNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uTGluZXN8Q29sdW1uTGluZXNDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbHVtbiBwaWNrZXIgKHRvIHNob3cvaGlkZSBjb2x1bW5zKSBpbiB0aGUgaGVhZGVyIGNvbnRleHQgbWVudS4gQ29sdW1ucyBjYW4gYmUgZGlzcGxheWVkIGluIHN1YiBtZW51c1xuICAgICAqIGJ5IHJlZ2lvbiBvciB0YWcuIEdyb3VwZWQgaGVhZGVycyBhcmUgZGlzcGxheWVkIGFzIG1lbnUgaGllcmFyY2hpZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtblBpY2tlcilcbiAgICAgKi9cbiAgICBjb2x1bW5QaWNrZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUGlja2VyfENvbHVtblBpY2tlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyB1c2VyIHRvIHJlbmFtZSBjb2x1bW5zIGJ5IGVpdGhlciByaWdodC1jbGlja2luZyBjb2x1bW4gaGVhZGVyIG9yIHVzaW5nIGtleWJvYXJkIHNob3J0Y3V0cyB3aGVuIGNvbHVtbiBoZWFkZXJcbiAgICAgKiBpcyBmb2N1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Db2x1bW5SZW5hbWUpXG4gICAgICovXG4gICAgY29sdW1uUmVuYW1lRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlbmFtZXxDb2x1bW5SZW5hbWVDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdXNlciB0byByZW9yZGVyIGNvbHVtbnMgYnkgZHJhZ2dpbmcgaGVhZGVycy4gVG8gZ2V0IG5vdGlmaWVkIGFib3V0IGNvbHVtbiByZW9yZGVyIGxpc3RlbiB0byBgY2hhbmdlYCBldmVudFxuICAgICAqIG9uIFtjb2x1bW5zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZGF0YS9Db2x1bW5TdG9yZSkgc3RvcmUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtblJlb3JkZXIpXG4gICAgICovXG4gICAgY29sdW1uUmVvcmRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZW9yZGVyfENvbHVtblJlb3JkZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVzZXIgdG8gcmVzaXplIGNvbHVtbnMgYnkgZHJhZ2dpbmcgYSBoYW5kbGUgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgaGVhZGVyLiBUbyBnZXQgbm90aWZpZWQgYWJvdXQgY29sdW1uXG4gICAgICogcmVzaXplIGxpc3RlbiB0byBgY2hhbmdlYCBldmVudCBvbiBbY29sdW1uc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2RhdGEvQ29sdW1uU3RvcmUpIHN0b3JlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Db2x1bW5SZXNpemUpXG4gICAgICovXG4gICAgY29sdW1uUmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlc2l6ZXxDb2x1bW5SZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgaGlnaGxpZ2h0cyB0aGUgcHJvamVjdCAqY3JpdGljYWwgcGF0aHMqLlxuICAgICAqIEV2ZXJ5IHRhc2sgaXMgaW1wb3J0YW50LCBidXQgb25seSBzb21lIG9mIHRoZW0gYXJlIGNyaXRpY2FsLlxuICAgICAqIFRoZSBjcml0aWNhbCBwYXRoIGlzIGEgY2hhaW4gb2YgbGlua2VkIHRhc2tzIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyB0aGUgcHJvamVjdCBmaW5pc2ggZGF0ZS5cbiAgICAgKiBJZiBhbnkgdGFzayBvbiB0aGUgY3JpdGljYWwgcGF0aCBpcyBsYXRlLCB0aGUgd2hvbGUgcHJvamVjdCBpcyBsYXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvQ3JpdGljYWxQYXRocylcbiAgICAgKi9cbiAgICBjcml0aWNhbFBhdGhzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENyaXRpY2FsUGF0aHN8Q3JpdGljYWxQYXRoc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBkcmF3cyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0YXNrcy4gVXNlcyBhIGRlcGVuZGVuY3lcbiAgICAgKiBbc3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvbW9kZWwvUHJvamVjdE1vZGVsI3Byb3BlcnR5LWRlcGVuZGVuY3lTdG9yZSkgdG8gZGV0ZXJtaW5lIHdoaWNoIGRlcGVuZGVuY2llcyB0byBkcmF3LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvRGVwZW5kZW5jaWVzKVxuICAgICAqL1xuICAgIGRlcGVuZGVuY2llc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xEZXBlbmRlbmNpZXN8RGVwZW5kZW5jaWVzQ29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IGRpc3BsYXlzIGEgcG9wdXAgY29udGFpbmluZyBmaWVsZHMgZm9yIGVkaXRpbmcgZGVwZW5kZW5jeSBkYXRhLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlclByby9mZWF0dXJlL0RlcGVuZGVuY3lFZGl0KVxuICAgICAqL1xuICAgIGRlcGVuZGVuY3lFZGl0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfERlcGVuZGVuY3lFZGl0fERlcGVuZGVuY3lFZGl0Q29uZmlnXG4gICAgLyoqXG4gICAgICogQWRkcyBldmVudCBmaWx0ZXIgbWVudSBpdGVtcyB0byB0aGUgdGltZWxpbmUgaGVhZGVyIGNvbnRleHQgbWVudS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZmVhdHVyZS9FdmVudEZpbHRlcilcbiAgICAgKi9cbiAgICBldmVudEZpbHRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xFdmVudEZpbHRlcnxFdmVudEZpbHRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBzZWdtZW50ZWQgZXZlbnRzIHN1cHBvcnQuIEl0IGltcGxlbWVudHMgcmVuZGVyaW5nIG9mIHN1Y2ggZXZlbnRzIGFuZCBhbHNvIGFkZHMgYSBlbnRyaWVzIHRvIHRoZVxuICAgICAqIGV2ZW50IGNvbnRleHQgbWVudSBhbGxvd2luZyB0byBzcGxpdCB0aGUgc2VsZWN0ZWQgZXZlbnQgYW5kIHJlbmFtZSBzZWdtZW50cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXJQcm8vZmVhdHVyZS9FdmVudFNlZ21lbnRzKVxuICAgICAqL1xuICAgIGV2ZW50U2VnbWVudHNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RXZlbnRTZWdtZW50c3xFdmVudFNlZ21lbnRzQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBmZWF0dXJlIHRoYXQgYWxsb3dzIGV4cG9ydGluZyBHcmlkIGRhdGEgdG8gRXhjZWwgb3IgQ1NWIHdpdGhvdXQgaW52b2x2aW5nIHRoZSBzZXJ2ZXIuIEl0IHVzZXNcbiAgICAgKiBbVGFibGVFeHBvcnRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL3V0aWwvVGFibGVFeHBvcnRlcikgY2xhc3MgYXMgZGF0YSBwcm92aWRlciwgM3JkIHBhcnR5IHByb3ZpZGVyIHRvIGdlbmVyYXRlIFhMUyBmaWxlcywgYW5kXG4gICAgICogW01pY3Jvc29mdCBYTUwgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9vZmZpY2UvZG9jdW1lbnRmb3JtYXQub3BlbnhtbC5zcHJlYWRzaGVldC5hc3B4KS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvZXhwZXJpbWVudGFsL0V4Y2VsRXhwb3J0ZXIpXG4gICAgICovXG4gICAgZXhjZWxFeHBvcnRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcmlkRXhjZWxFeHBvcnRlcnxHcmlkRXhjZWxFeHBvcnRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIHRoYXQgbGV0cyB1c2VycyBkcm9wIGZpbGVzIG9uIGEgV2lkZ2V0LiBUaGUgd2lkZ2V0IGZpcmVzIGFuIGV2ZW50IHdoZW4gYSBmaWxlIGlzIGRyb3BwZWQgb250byBpdC5cbiAgICAgKiBJbiB0aGUgZXZlbnQsIHlvdSBnZXQgYWNjZXNzIHRvIHRoZSByYXcgZmlsZXMgYXMgc3RyaW5ncywgdGhhdCB3ZXJlIHBhcnNlZCBieSBjYWxsaW5nIGByZWFkQXNCaW5hcnlTdHJpbmdgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9leHBlcmltZW50YWwvRmlsZURyb3ApXG4gICAgICovXG4gICAgZmlsZURyb3BGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsZURyb3B8RmlsZURyb3BDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWRkcyBhIGZpbGwgaGFuZGxlIHRvIGEgR3JpZCByYW5nZSBzZWxlY3Rpb24sIHdoaWNoIHdoZW4gZHJhZ2dlZCwgZmlsbHMgdGhlIGNlbGxzIGJlaW5nIGRyYWdnZWQgb3ZlclxuICAgICAqIHdpdGggdmFsdWVzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIG9yaWdpbmFsIHNlbGVjdGVkIHJhbmdlLiBUaGlzIGlzIHNpbWlsYXIgdG8gZnVuY3Rpb25hbGl0eSBub3JtYWxseSBzZWVuIGluXG4gICAgICogdmFyaW91cyBzcHJlYWRzaGVldCBhcHBsaWNhdGlvbnMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbGxIYW5kbGUpXG4gICAgICovXG4gICAgZmlsbEhhbmRsZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWxsSGFuZGxlfEZpbGxIYW5kbGVDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIGZpbHRlcmluZyBvZiB0aGUgZ3JpZCBieSBzZXR0aW5ncyBmaWx0ZXJzIG9uIGNvbHVtbnMuIFRoZSBhY3R1YWwgZmlsdGVyaW5nIGlzIGRvbmUgYnkgdGhlIHN0b3JlLlxuICAgICAqIEZvciBpbmZvIG9uIHByb2dyYW1tYXRpY2FsbHkgaGFuZGxpbmcgZmlsdGVycywgc2VlIFtTdG9yZUZpbHRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2RhdGEvbWl4aW4vU3RvcmVGaWx0ZXIpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9GaWx0ZXIpXG4gICAgICovXG4gICAgZmlsdGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbHRlcnxGaWx0ZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIGZpbHRlcmluZyBvZiB0aGUgZ3JpZCBieSBlbnRlcmluZyBmaWx0ZXJzIG9uIGNvbHVtbiBoZWFkZXJzLlxuICAgICAqIFRoZSBhY3R1YWwgZmlsdGVyaW5nIGlzIGRvbmUgYnkgdGhlIHN0b3JlLlxuICAgICAqIEZvciBpbmZvIG9uIHByb2dyYW1tYXRpY2FsbHkgaGFuZGxpbmcgZmlsdGVycywgc2VlIFtTdG9yZUZpbHRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL2RhdGEvbWl4aW4vU3RvcmVGaWx0ZXIpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9GaWx0ZXJCYXIpXG4gICAgICovXG4gICAgZmlsdGVyQmFyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbHRlckJhcnxGaWx0ZXJCYXJDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHJlbmRlcmluZyBhbmQgaGFuZGxpbmcgb2Ygcm93IGdyb3Vwcy4gVGhlIGFjdHVhbCBncm91cGluZyBpcyBkb25lIGluIHRoZSBzdG9yZSwgYnV0IHRyaWdnZXJlZCBieVxuICAgICAqIDxrYmQ+c2hpZnQ8L2tiZD4gKyBjbGlja2luZyBoZWFkZXJzLCBvciBieSB1c2luZyB0aGUgY29udGV4dCBtZW51LCBvciBieSB1c2luZyB0d28gZmluZ2VyIHRhcCAob25lIG9uIGhlYWRlcixcbiAgICAgKiBvbmUgYW55d2hlcmUgb24gZ3JpZCkuIFVzZSA8a2JkPnNoaWZ0PC9rYmQ+ICsgPGtiZD5hbHQ8L2tiZD4gKyBjbGljaywgb3IgdGhlIGNvbnRleHQgbWVudSwgdG8gcmVtb3ZlIGEgY29sdW1uXG4gICAgICogZ3JvdXBlci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvR3JvdXApXG4gICAgICovXG4gICAgZ3JvdXBGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JvdXB8R3JvdXBDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIHN1bW1hcnkgcm93IGFzIGEgZ3JvdXAgZm9vdGVyIGluIGEgZ3JvdXBlZCBncmlkLiBVc2VzIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiBjb2x1bW5zIGFzXG4gICAgICogW1N1bW1hcnldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N1bW1hcnkpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Hcm91cFN1bW1hcnkpXG4gICAgICovXG4gICAgZ3JvdXBTdW1tYXJ5RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRHcm91cFN1bW1hcnl8R3JpZEdyb3VwU3VtbWFyeUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFJpZ2h0IGNsaWNrIGNvbHVtbiBoZWFkZXIgb3IgZm9jdXMgaXQgYW5kIHByZXNzIFNQQUNFIGtleSB0byBzaG93IHRoZSBjb250ZXh0IG1lbnUgZm9yIGhlYWRlcnMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0hlYWRlck1lbnUpXG4gICAgICovXG4gICAgaGVhZGVyTWVudUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xIZWFkZXJNZW51fEhlYWRlck1lbnVDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVzZXJzIHRvIGNsaWNrIGFuZCBkcmFnIHRvIHpvb20gdG8gYSBkYXRlIHJhbmdlIGluIFNjaGVkdWxlcidzIGhlYWRlciB0aW1lIGF4aXMuIE9ubHkgc3VwcG9ydGVkIGluIGhvcml6b250YWxcbiAgICAgKiBtb2RlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL0hlYWRlclpvb20pXG4gICAgICovXG4gICAgaGVhZGVyWm9vbUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xIZWFkZXJab29tfEhlYWRlclpvb21Db25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgSW5kaWNhdG9ycyBmZWF0dXJlIGRpc3BsYXlzIGluZGljYXRvcnMgKGljb25zKSBmb3IgZGlmZmVyZW50IGRhdGVzIHJlbGF0ZWQgdG8gYSB0YXNrIGluIGl0cyByb3cuIEhvdmVyaW5nIGFuXG4gICAgICogaW5kaWNhdG9yIHdpbGwgc2hvdyBhIHRvb2x0aXAgd2l0aCBpdHMgbmFtZSBhbmQgZGF0ZShzKS4gVGhlIG93bmluZyB0YXNrIGBpZGAgaXMgZW1iZWRkZWQgaW4gdGhlIGluZGljYXRvciBlbGVtZW50XG4gICAgICogZGF0YXNldCBhcyBgdGFza1JlY29yZElkYCB3aGljaCBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGhhdmUgY3VzdG9tIGFjdGlvbnMgd2hlbiBjbGlja2luZyAoc2hvd2luZyBhIG1lbnUgZm9yIGV4YW1wbGUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvSW5kaWNhdG9ycylcbiAgICAgKi9cbiAgICBpbmRpY2F0b3JzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEluZGljYXRvcnN8SW5kaWNhdG9yc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZmVhdHVyZSB0aGF0IGxldHMgeW91IGRpc3BsYXkgYSBsYWJlbCBvbiBlYWNoIHNpZGUgb2YgYSBHYW50dCB0YXNrIGJhci4gU2VlXG4gICAgICogW0xhYmVsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZmVhdHVyZS9MYWJlbHMpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvTGFiZWxzKVxuICAgICAqL1xuICAgIGxhYmVsc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xMYWJlbHN8TGFiZWxzQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGFsbG93cyByZWNvcmRzIHdoaWNoIHNhdGlzZnkgYSBjZXJ0YWluIGNvbmRpdGlvbiB0byBiZSBsb2NrZWQgYXQgdGhlIHRvcCBvZiB0aGUgZ3JpZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvTG9ja1Jvd3MpXG4gICAgICovXG4gICAgbG9ja1Jvd3NGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JpZExvY2tSb3dzfEdyaWRMb2NrUm93c0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBtZXJnZXMgY2VsbHMgdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlIGluIHNvcnRlZCAob3IgW29wdGlvbmFsbHldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL01lcmdlQ2VsbHMjY29uZmlnLXNvcnRlZE9ubHkpIGFueSkgY29sdW1uc1xuICAgICAqIGNvbmZpZ3VyZWQgdG8gW21lcmdlQ2VsbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uI2NvbmZpZy1tZXJnZUNlbGxzKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvTWVyZ2VDZWxscylcbiAgICAgKi9cbiAgICBtZXJnZUNlbGxzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfE1lcmdlQ2VsbHN8TWVyZ2VDZWxsc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZmVhdHVyZSB0aGF0IGFsbG93cyBleHBvcnRpbmcgR2FudHQgdG8gTWljcm9zb2Z0IFByb2plY3Qgd2l0aG91dCBpbnZvbHZpbmcgYSBzZXJ2ZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9leHBvcnQvTXNwRXhwb3J0KVxuICAgICAqL1xuICAgIG1zcEV4cG9ydEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xNc3BFeHBvcnR8TXNwRXhwb3J0Q29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IGFsbG93cyBzdHlsaW5nIG9mIHdlZWtlbmRzIChhbmQgb3RoZXIgbm9uLXdvcmtpbmcgdGltZSkgYnkgYWRkaW5nIHRpbWVSYW5nZXMgZm9yIHRob3NlIGRheXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvTm9uV29ya2luZ1RpbWUpXG4gICAgICovXG4gICAgbm9uV29ya2luZ1RpbWVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Tm9uV29ya2luZ1RpbWV8Tm9uV29ya2luZ1RpbWVDb25maWdcbiAgICAvKipcbiAgICAgKiBNYWtlcyB0aGUgc2NoZWR1bGVyJ3MgdGltZWxpbmUgcGFubmFibGUgYnkgZHJhZ2dpbmcgd2l0aCB0aGUgbW91c2UuIFRyeSBpdCBvdXQgaW4gdGhlIGRlbW8gYmVsb3cuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvUGFuKVxuICAgICAqL1xuICAgIHBhbkZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQYW58UGFuQ29uZmlnXG4gICAgLyoqXG4gICAgICogSGlnaGxpZ2h0cyB0aGUgYXJlYSBlbmNhcHN1bGF0aW5nIGFsbCBjaGlsZCB0YXNrcyBvZiBhIHBhcmVudCB0YXNrIGluIGEgc2VtaS10cmFuc3BhcmVudCBsYXllci4gWW91IGNhbiBzdHlsZVxuICAgICAqIHRoZXNlIGxheWVyIGVsZW1lbnRzIHVzaW5nIHRoZSBgYi1wYXJlbnQtYXJlYWAgQ1NTIGNsYXNzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvUGFyZW50QXJlYSlcbiAgICAgKi9cbiAgICBwYXJlbnRBcmVhRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBhcmVudEFyZWF8UGFyZW50QXJlYUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBQREYvUE5HIGZpbGVzIGZyb20gdGhlIEdhbnR0IGNvbXBvbmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL2V4cG9ydC9QZGZFeHBvcnQpXG4gICAgICovXG4gICAgcGRmRXhwb3J0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBkZkV4cG9ydHxQZGZFeHBvcnRDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgdmlzdWFsaXplcyB0aGUgW3BlcmNlbnREb25lXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlclByby9tb2RlbC9taXhpbi9QZXJjZW50RG9uZU1peGluI2ZpZWxkLXBlcmNlbnREb25lKSBmaWVsZCBhcyBhXG4gICAgICogcHJvZ3Jlc3MgYmFyIG9uIHRoZSBldmVudCBlbGVtZW50cy4gRWFjaCBwcm9ncmVzcyBiYXIgYWxzbyBvcHRpb25hbGx5IGhhcyBhIGRyYWcgaGFuZGxlIHdoaWNoIHVzZXJzIGNhbiBkcmFnIGNhblxuICAgICAqIGNoYW5nZSB0aGUgdmFsdWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyUHJvL2ZlYXR1cmUvUGVyY2VudEJhcilcbiAgICAgKi9cbiAgICBwZXJjZW50QmFyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBlcmNlbnRCYXJ8UGVyY2VudEJhckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyBwaW5uaW5nIGNvbHVtbnMgdG8gdGhlIHN0YXJ0IG9yIGVuZCByZWdpb24gb2YgdGhlIGdyaWQgd2l0aG91dCBhbnkgYWRkaXRpb25hbCBzdWJHcmlkIGNvbmZpZ3VyYXRpb25zLlxuICAgICAqIFdoZW4gcGlubmluZyB0byBhIHJlZ2lvbiB0aGF0IGRvZXMgbm90IHlldCBleGlzdCwgdGhlIGZlYXR1cmUgY3JlYXRlcyB0aGUgcmVxdWlyZWQgc3ViR3JpZCBvbiB0aGUgZmx5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9QaW5Db2x1bW5zKVxuICAgICAqL1xuICAgIHBpbkNvbHVtbnNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UGluQ29sdW1uc3xQaW5Db2x1bW5zQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHByaW50aW5nIEdhbnR0IGNvbnRlbnRzIHVzaW5nIGJyb3dzZXIgcHJpbnQgZGlhbG9nLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvZXhwb3J0L1ByaW50KVxuICAgICAqL1xuICAgIHByaW50RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFByaW50fFByaW50Q29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGRyYXdzIHByb2plY3QgcHJvZ3Jlc3MgbGluZSB3aXRoIFNWRyBsaW5lcy4gUmVxdWlyZXMgW1BlcmNlbnRCYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyUHJvL2ZlYXR1cmUvUGVyY2VudEJhcikgdG8gYmUgZW5hYmxlZCAod2hpY2hcbiAgICAgKiBieSBkZWZhdWx0LCBpdCBpcylcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Byb2dyZXNzTGluZSlcbiAgICAgKi9cbiAgICBwcm9ncmVzc0xpbmVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UHJvZ3Jlc3NMaW5lfFByb2dyZXNzTGluZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBkaXNwbGF5cyB0aGUgW3Byb2plY3QgZWRpdG9yXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3dpZGdldC9Qcm9qZWN0RWRpdG9yKSBhbGxvd2luZyB1c2VycyB0byBlZGl0XG4gICAgICogdGhlIHByb2plY3Qgc2V0dGluZ3MuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9Qcm9qZWN0RWRpdClcbiAgICAgKi9cbiAgICBwcm9qZWN0RWRpdEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcm9qZWN0RWRpdHxQcm9qZWN0RWRpdENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBkcmF3cyB0aGUgdmVydGljYWwgbGluZXMgaW4gdGhlIHNjaGVkdWxlIGFyZWEsIGluZGljYXRpbmcgcHJvamVjdCBzdGFydC9lbmQgZGF0ZXNcbiAgICAgKiBhbmQgYWxzbyBpdHMgW3N0YXR1cyBkYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L21vZGVsL1Byb2plY3RNb2RlbCNmaWVsZC1zdGF0dXNEYXRlKS4gVGhlIGxhdHRlciBjYW4gYmUgZGlzYWJsZWRcbiAgICAgKiB3aXRoIHRoZSBbc2hvd1N0YXR1c0RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9Qcm9qZWN0TGluZXMjY29uZmlnLXNob3dTdGF0dXNEYXRlKSBjb25maWcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9Qcm9qZWN0TGluZXMpXG4gICAgICovXG4gICAgcHJvamVjdExpbmVzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFByb2plY3RMaW5lc3xQcm9qZWN0TGluZXNDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNlYXJjaCBpbiBhIGNvbHVtbiBieSBmb2N1c2luZyBhIGNlbGwgYW5kIHR5cGluZy4gTmF2aWdhdGUgYmV0d2VlbiBoaXRzIHVzaW5nIHRoZVxuICAgICAqIGtleWJvYXJkLCBbZjNdIG9yIFtjdHJsXS9bY21kXSArIFtnXSBtb3ZlcyB0byBuZXh0LCBhbHNvIHByZXNzaW5nIFtzaGlmdF0gbW92ZXMgdG8gcHJldmlvdXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1F1aWNrRmluZClcbiAgICAgKi9cbiAgICBxdWlja0ZpbmRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UXVpY2tGaW5kfFF1aWNrRmluZENvbmZpZ1xuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBzcGxpdHRlciBiZXR3ZWVuIGdyaWQgW3NlY3Rpb25zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvdmlldy9TdWJHcmlkKSBkcmFnZ2FibGUsIHRvIGxldCB1c2VycyByZXNpemUsIGFuZFxuICAgICAqIGNvbGxhcHNlL2V4cGFuZCB0aGUgc2VjdGlvbnMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1JlZ2lvblJlc2l6ZSlcbiAgICAgKi9cbiAgICByZWdpb25SZXNpemVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UmVnaW9uUmVzaXplfFJlZ2lvblJlc2l6ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIElmIHRoZSB0YXNrJ3MgW3JvbGx1cF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9UYXNrTW9kZWwjZmllbGQtcm9sbHVwKSBkYXRhIGZpZWxkIGlzIHNldCB0byBgdHJ1ZWAsIGl0IGRpc3BsYXlzIGEgc21hbGwgYmFyIG9yIGRpYW1vbmQgYmVsb3cgaXRzIHN1bW1hcnkgdGFzayBpbiB0aGUgdGltZWxpbmUuXG4gICAgICogRWFjaCBvZiB0aGUgcm9sbHVwIGVsZW1lbnRzIHNob3cgYSB0b29sdGlwIHdoZW4gaG92ZXJpbmcgaXQgd2l0aCBkZXRhaWxzIG9mIHRoZSB0YXNrLlxuICAgICAqIFRoZSB0b29sdGlwIGNvbnRlbnQgaXMgY3VzdG9taXphYmxlLCBzZWUgW3RlbXBsYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvUm9sbHVwcyNjb25maWctdGVtcGxhdGUpIGNvbmZpZyBmb3IgZGV0YWlscy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1JvbGx1cHMpXG4gICAgICovXG4gICAgcm9sbHVwc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb2xsdXBzfFJvbGx1cHNDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvdyB1c2luZyBbQ3RybC9DTUQgKyBDL1hdIGFuZCBbQ3RybC9DTUQgKyBWXSB0byBjb3B5L2N1dC1hbmQtcGFzdGUgcm93cy4gQWxzbyBtYWtlcyBjdXQsIGNvcHkgYW5kIHBhc3RlIGFjdGlvbnNcbiAgICAgKiBhdmFpbGFibGUgdmlhIHRoZSBjZWxsIGNvbnRleHQgbWVudS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUm93Q29weVBhc3RlKVxuICAgICAqL1xuICAgIHJvd0NvcHlQYXN0ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dDb3B5UGFzdGV8Um93Q29weVBhc3RlQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGFsbG93cyBlZGl0aW5nIG9mIGVudGlyZSByb3dzIGluIGEgZ3JpZCBpbiBhIGRvY2tlZCBwYW5lbCB3aGljaCBieSBkZWZhdWx0IHNsaWRlcyBvdXQgZnJvbSB0aGUgcmlnaHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd0VkaXQpXG4gICAgICovXG4gICAgcm93RWRpdEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dFZGl0fFJvd0VkaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGV4cGFuZGluZyBvZiBHcmlkIHJvd3MgYnkgZWl0aGVyIHJvdyBjbGljayBvciBkb3VibGUgY2xpY2ssIG9yIGJ5IGFkZGluZyBhIHNlcGFyYXRlIEdyaWQgY29sdW1uIHdoaWNoIHJlbmRlcnNcbiAgICAgKiBhIGJ1dHRvbiB0aGF0IGV4cGFuZHMgb3IgY29sbGFwc2VzIHRoZSByb3cuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd0V4cGFuZGVyKVxuICAgICAqL1xuICAgIHJvd0V4cGFuZGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0V4cGFuZGVyfFJvd0V4cGFuZGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgcHJvamVjdCB0cmFuc2FjdGlvbnMgYW5kIHVzZWQgYnkgZGVmYXVsdCBpbiBHYW50dC4gRm9yIGdlbmVyYWwgUm93UmVvcmRlciBmZWF0dXJlXG4gICAgICogZG9jdW1lbnRhdGlvbiBzZWUgW1Jvd1Jlb3JkZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd1Jlb3JkZXIpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL1Jvd1Jlb3JkZXIpXG4gICAgICovXG4gICAgcm93UmVvcmRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dSZW9yZGVyfFJvd1Jlb3JkZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVzZXIgdG8gY2hhbmdlIHJvdyBoZWlnaHQgYnkgZHJhZ2dpbmcgdGhlIGJvdHRvbSByb3cgYm9yZGVyLiBBZnRlciBhIHJlc2l6ZSBvcGVyYXRpb24sIHRoZSBbcm93SGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZGF0YS9HcmlkUm93TW9kZWwjZmllbGQtcm93SGVpZ2h0KVxuICAgICAqIGZpZWxkIG9mIHRoZSByZWNvcmQgaXMgdXBkYXRlZCAod2hlbiBbYXBwbHlUb0FsbFJvd3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd1Jlc2l6ZSNjb25maWctYXBwbHlUb0FsbFJvd3MpIGlzIGBmYWxzZWApLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dSZXNpemUpXG4gICAgICovXG4gICAgcm93UmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRSb3dSZXNpemV8R3JpZFJvd1Jlc2l6ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgY29udGV4dCBtZW51IGZvciBlbXB0eSBwYXJ0cyBvZiB0aGUgc2NoZWR1bGUuIEl0ZW1zIGFyZSBwb3B1bGF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlXG4gICAgICogYnkgY29uZmlndXJhdGlvbnMgb2YgdGhpcyBGZWF0dXJlLCB0aGVuIGJ5IG90aGVyIGZlYXR1cmVzIGFuZC9vciBhcHBsaWNhdGlvbiBjb2RlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL1NjaGVkdWxlTWVudSlcbiAgICAgKi9cbiAgICBzY2hlZHVsZU1lbnVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U2NoZWR1bGVNZW51fFNjaGVkdWxlTWVudUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBkaXNwbGF5cyBhIHRvb2x0aXAgY29udGFpbmluZyB0aGUgdGltZSBhdCB0aGUgbW91c2UgcG9zaXRpb24gd2hlbiBob3ZlcmluZyBlbXB0eSBwYXJ0cyBvZiB0aGUgc2NoZWR1bGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvU2NoZWR1bGVUb29sdGlwKVxuICAgICAqL1xuICAgIHNjaGVkdWxlVG9vbHRpcEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTY2hlZHVsZVRvb2x0aXB8U2NoZWR1bGVUb29sdGlwQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGluamVjdHMgYnV0dG9ucyBpbiBlYWNoIHJvdyB0aGF0IHNjcm9sbHMgdGhlIHRhc2sgYmFyIGludG8gdmlldy4gSXQgY2FuIG9wdGlvbmFsbHkgc2hvdyBhIGxhYmVsIGFsb25nXG4gICAgICogd2l0aCB0aGUgYnV0dG9uLCB1c2luZyB0aGUgW2xhYmVsUmVuZGVyZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9TY3JvbGxCdXR0b25zI2NvbmZpZy1sYWJlbFJlbmRlcmVyKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Njcm9sbEJ1dHRvbnMpXG4gICAgICovXG4gICAgc2Nyb2xsQnV0dG9uc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTY3JvbGxCdXR0b25zfFNjcm9sbEJ1dHRvbnNDb25maWdcbiAgICAvKipcbiAgICAgKiA8ZGl2IGNsYXNzPVwiZXh0ZXJuYWwtZXhhbXBsZSB2ZXJ0aWNhbFwiIGRhdGEtZmlsZT1cIkdyaWQvZmVhdHVyZS9TZWFyY2guanNcIj48L2Rpdj5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU2VhcmNoKVxuICAgICAqL1xuICAgIHNlYXJjaEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTZWFyY2h8U2VhcmNoQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHNvcnRpbmcgb2YgZ3JpZCBieSBjbGlja2luZyAob3IgdGFwcGluZykgaGVhZGVycywgYWxzbyBkaXNwbGF5cyB3aGljaCBjb2x1bW5zIGdyaWQgaXMgc29ydGVkIGJ5IChudW1iZXJlZCBpZlxuICAgICAqIHVzaW5nIG11bHRpc29ydCkuIFVzZSBtb2RpZmllciBrZXlzIGZvciBtdWx0aXNvcnRpbmc6IFtDdHJsL0NNRCArIGNsaWNrXSB0byBhZGQgc29ydGVyLCBbQ3RybC9DTUQgKyBBbHQgKyBjbGlja10gdG8gcmVtb3ZlIHNvcnRlci5cbiAgICAgKiBUaGUgYWN0dWFsIHNvcnRpbmcgaXMgZG9uZSBieSB0aGUgc3RvcmUsIHNlZSBbU3RvcmUuc29ydCgpXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvZGF0YS9taXhpbi9TdG9yZVNvcnQjZnVuY3Rpb24tc29ydCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1NvcnQpXG4gICAgICovXG4gICAgc29ydEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTb3J0fFNvcnRDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIHNwbGl0dGluZyB0aGUgR3JpZCBpbnRvIG11bHRpcGxlIHZpZXdzLCBlaXRoZXIgYnkgdXNpbmcgdGhlIGNlbGwgY29udGV4dCBtZW51LCBvclxuICAgICAqIHByb2dyYW1tYXRpY2FsbHkgYnkgY2FsbGluZyBbc3BsaXQoKV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3BsaXQjZnVuY3Rpb24tc3BsaXQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TcGxpdClcbiAgICAgKi9cbiAgICBzcGxpdEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcmlkU3BsaXR8R3JpZFNwbGl0Q29uZmlnXG4gICAgLyoqXG4gICAgICogQSBmZWF0dXJlIHdoaWNoIHBpbnMgY29uZmlndXJhYmxlIGNvbnRlbnQgZnJvbSBhIGdyaWQgcm93IHRvIHRoZSB0b3Agb2YgdGhlIGdyaWRcbiAgICAgKiB3aGlsZSB0aGUgcm93IHNjcm9sbHMgb2ZmIHRoZSB0b3AgYnV0IGlzIHN0aWxsIHZpc2libGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N0aWNreUNlbGxzKVxuICAgICAqL1xuICAgIHN0aWNreUNlbGxzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN0aWNreUNlbGxzfFN0aWNreUNlbGxzQ29uZmlnXG4gICAgLyoqXG4gICAgICogU3RyaXBlcyByb3dzIGJ5IGFkZGluZyBhbHRlcm5hdGluZyBDU1MgY2xhc3NlcyB0byBhbGwgcm93IGVsZW1lbnRzIChgYi1ldmVuYCBhbmQgYGItb2RkYCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N0cmlwZSlcbiAgICAgKi9cbiAgICBzdHJpcGVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RyaXBlfFN0cmlwZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZmVhdHVyZSBkaXNwbGF5aW5nIGEgc3VtbWFyeSBiYXIgaW4gdGhlIGdyaWQgZm9vdGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvU3VtbWFyeSlcbiAgICAgKi9cbiAgICBzdW1tYXJ5RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN1bW1hcnl8U3VtbWFyeUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93IHVzaW5nIDxrYmQ+Q3RybDwva2JkPi88a2JkPkNNRDwva2JkPiArIDxrYmQ+Qzwva2JkPi88a2JkPlg8L2tiZD4gYW5kIDxrYmQ+Q3RybDwva2JkPi88a2JkPkNNRDwva2JkPiArXG4gICAgICogPGtiZD5WPC9rYmQ+IHRvIGNvcHkvY3V0IGFuZCBwYXN0ZSB0YXNrcy4gWW91IGNhbiBjb25maWd1cmUgaG93IGEgbmV3bHkgcGFzdGVkIHJlY29yZCBpcyBuYW1lZCB1c2luZ1xuICAgICAqIFtnZW5lcmF0ZU5ld05hbWVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrQ29weVBhc3RlI2NvbmZpZy1nZW5lcmF0ZU5ld05hbWUpXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrQ29weVBhc3RlKVxuICAgICAqL1xuICAgIHRhc2tDb3B5UGFzdGVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza0NvcHlQYXN0ZXxUYXNrQ29weVBhc3RlQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gZHJhZyBhbmQgZHJvcCB0YXNrcyB3aXRoaW4gR2FudHQsIHRvIGNoYW5nZSB0aGVpciBzdGFydCBkYXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza0RyYWcpXG4gICAgICovXG4gICAgdGFza0RyYWdGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza0RyYWd8VGFza0RyYWdDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2NoZWR1bGUgdGFza3MgYnkgZHJhZ2dpbmcgaW4gdGhlIGVtcHR5IHBhcnRzIG9mIHRoZSBnYW50dCB0aW1lbGluZSByb3cuIE5vdGUsIHRoaXMgZmVhdHVyZSBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHVuc2NoZWR1bGVkIHRhc2tzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza0RyYWdDcmVhdGUpXG4gICAgICovXG4gICAgdGFza0RyYWdDcmVhdGVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza0RyYWdDcmVhdGV8VGFza0RyYWdDcmVhdGVDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIGVkaXRpbmcgdGFza3MgdXNpbmcgYSBbVGFza0VkaXRvcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC93aWRnZXQvVGFza0VkaXRvciksIGEgcG9wdXAgd2l0aCBmaWVsZHMgZm9yIGVkaXRpbmcgdGFzayBkYXRhLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza0VkaXQpXG4gICAgICovXG4gICAgdGFza0VkaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza0VkaXR8VGFza0VkaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbnRleHQgbWVudSBmb3IgdGFza3MuIEl0ZW1zIGFyZSBwb3B1bGF0ZWQgYnkgb3RoZXIgZmVhdHVyZXMgYW5kL29yIGFwcGxpY2F0aW9uIGNvZGUuXG4gICAgICogQ29uZmlndXJlIGl0IHdpdGggYGZhbHNlYCB0byBkaXNhYmxlIGl0IGNvbXBsZXRlbHkuIElmIGVuYWJsZWQsIFtDZWxsTWVudV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbE1lbnUpIGZlYXR1cmVcbiAgICAgKiBpcyBub3QgYXZhaWxhYmxlLiBDZWxsIGNvbnRleHQgbWVudSBpdGVtcyBhcmUgaGFuZGxlZCBieSB0aGlzIGZlYXR1cmUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrTWVudSlcbiAgICAgKi9cbiAgICB0YXNrTWVudUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrTWVudXxUYXNrTWVudUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgaGlnaGxpZ2h0aW5nIHRoZSBub24td29ya2luZyB0aW1lIGludGVydmFscyBmb3IgdGFza3MsIGJhc2VkIG9uIHRoZWlyIFtjYWxlbmRhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9tb2RlbC9UYXNrTW9kZWwjZmllbGQtY2FsZW5kYXIpLlxuICAgICAqIElmIGEgdGFzayBoYXMgbm8gY2FsZW5kYXIgZGVmaW5lZCwgdGhlIHByb2plY3QncyBjYWxlbmRhciB3aWxsIGJlIHVzZWQuIFRoZSBub24td29ya2luZyB0aW1lIGludGVydmFsIGNhbiBhbHNvIGJlXG4gICAgICogcmVjdXJyaW5nLiBZb3UgY2FuIGZpbmQgYSBsaXZlIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gYWNoaWV2ZSB0aGlzIGluIHRoZSBbVGFzayBDYWxlbmRhcnMgRGVtb10oLi4vZXhhbXBsZXMvY2FsZW5kYXJzLykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrTm9uV29ya2luZ1RpbWUpXG4gICAgICovXG4gICAgdGFza05vbldvcmtpbmdUaW1lRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRhc2tOb25Xb3JraW5nVGltZXxUYXNrTm9uV29ya2luZ1RpbWVDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIHJlc2l6aW5nIGEgdGFzayBieSBkcmFnZ2luZyBpdHMgZW5kIGRhdGUuIFJlc2l6aW5nIGEgdGFzayBieSBkcmFnZ2luZyBpdHMgc3RhcnQgZGF0ZSBpcyBub3QgYWxsb3dlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tSZXNpemUpXG4gICAgICovXG4gICAgdGFza1Jlc2l6ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrUmVzaXplfFRhc2tSZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdXNlciB0byBkcmFnIGFuZCBkcm9wIHRhc2sgc2VnbWVudHMsIHRvIGNoYW5nZSB0aGVpciBzdGFydCBkYXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza1NlZ21lbnREcmFnKVxuICAgICAqL1xuICAgIHRhc2tTZWdtZW50RHJhZ0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrU2VnbWVudERyYWd8VGFza1NlZ21lbnREcmFnQ29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IGFsbG93cyByZXNpemluZyBhIHRhc2sgc2VnbWVudCBieSBkcmFnZ2luZyBpdHMgZW5kLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza1NlZ21lbnRSZXNpemUpXG4gICAgICovXG4gICAgdGFza1NlZ21lbnRSZXNpemVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza1NlZ21lbnRSZXNpemV8VGFza1NlZ21lbnRSZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgZGlzcGxheXMgYSB0YXNrIHRvb2x0aXAgb24gbW91c2UgaG92ZXIuIFRoZSB0ZW1wbGF0ZSBvZiB0aGUgdG9vbHRpcCBpcyBjdXN0b21pemFibGVcbiAgICAgKiB3aXRoIHRoZSBbdGVtcGxhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrVG9vbHRpcCNjb25maWctdGVtcGxhdGUpIGZ1bmN0aW9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza1Rvb2x0aXApXG4gICAgICovXG4gICAgdGFza1Rvb2x0aXBGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza1Rvb2x0aXB8VGFza1Rvb2x0aXBDb25maWdcbiAgICAvKipcbiAgICAgKiBBZGRzIHNjaGVkdWxlciBzcGVjaWZpYyBtZW51IGl0ZW1zIHRvIHRoZSB0aW1lbGluZSBoZWFkZXIgY29udGV4dCBtZW51LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL1RpbWVBeGlzSGVhZGVyTWVudSlcbiAgICAgKi9cbiAgICB0aW1lQXhpc0hlYWRlck1lbnVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGltZUF4aXNIZWFkZXJNZW51fFRpbWVBeGlzSGVhZGVyTWVudUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBhbGxvd3MgZHJhd2luZyBsaW5lIGNoYXJ0cyBvbiB0b3Agb2YgdGhlIHRpbWVsaW5lIGFyZWEuIEZlYXR1cmUgY29uc2lzdHMgb2YgdHdvIHBhcnRzOiBjaGFydCBhbmRcbiAgICAgKiBkYXRhIHByb3ZpZGVycy4gQ2hhcnQgcHJvdmlkZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlbmRlcmluZyB0aGUgY2hhcnQsIHdoaWxlIGRhdGEgcHJvdmlkZXIgaXMgcmVzcG9uc2libGVcbiAgICAgKiBmb3IgcHJvdmlkaW5nIGRhdGEgZm9yIHRoZSBjaGFydC4gRmVhdHVyZSBpdHNlbGYgbWFuYWdlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVtLCBhbmQgdHJhY2tzIGxpZmVjeWNsZSBldmVudHNcbiAgICAgKiBvZiB0aGUgR2FudHQgY2hhcnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UaW1lbGluZUNoYXJ0KVxuICAgICAqL1xuICAgIHRpbWVsaW5lQ2hhcnRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGltZWxpbmVDaGFydHxUaW1lbGluZUNoYXJ0Q29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IHJlbmRlcnMgZ2xvYmFsIHJhbmdlcyBvZiB0aW1lIGluIHRoZSB0aW1lbGluZS4gVXNlIHRoaXMgZmVhdHVyZSB0byB2aXN1YWxpemUgYSBgcmFuZ2VgIGxpa2UgYSAxIGhyIGx1bmNoXG4gICAgICogb3Igc29tZSBpbXBvcnRhbnQgcG9pbnQgaW4gdGltZSAoYSBgbGluZWAsIGkuZS4gYSByYW5nZSB3aXRoIDAgZHVyYXRpb24pLiBUaGlzIGZlYXR1cmUgY2FuIGFsc28gc2hvdyBhIGN1cnJlbnQgdGltZVxuICAgICAqIGluZGljYXRvciBpZiB5b3Ugc2V0IFtzaG93Q3VycmVudFRpbWVMaW5lXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL1RpbWVSYW5nZXMjY29uZmlnLXNob3dDdXJyZW50VGltZUxpbmUpIHRvIHRydWUuIFRvIHN0eWxlIHRoZSByZW5kZXJlZCBlbGVtZW50cywgdXNlIHRoZVxuICAgICAqIFtjbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL1RpbWVTcGFuI2ZpZWxkLWNscykgZmllbGQgb2YgdGhlIGBUaW1lU3BhbmAgY2xhc3MuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvVGltZVJhbmdlcylcbiAgICAgKi9cbiAgICB0aW1lUmFuZ2VzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRpbWVSYW5nZXN8VGltZVJhbmdlc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBleHBvc2VzIG1ldGhvZHMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IHdoaWNoIHlvdSBjYW4gdXNlIHRvIGhpZ2hsaWdodCBvbmUgb3IgbXVsdGlwbGUgdGltZSBzcGFuc1xuICAgICAqIGluIHRoZSBzY2hlZHVsZS4gUGxlYXNlIHNlZSBbaGlnaGxpZ2h0VGltZVNwYW5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyUHJvL2ZlYXR1cmUvVGltZVNwYW5IaWdobGlnaHQjZnVuY3Rpb24taGlnaGxpZ2h0VGltZVNwYW4pIGFuZCBbaGlnaGxpZ2h0VGltZVNwYW5zXSgjU2NoZWR1bGVyUHJvL2ZlYXR1cmUvVGltZVNwYW5IaWdobGlnaHQjZnVuY3Rpb24taGlnaGxpZ2h0VGltZVNwYW5zKSB0byBsZWFyblxuICAgICAqIG1vcmUgb3IgdHJ5IHRoZSBkZW1vIGJlbG93OlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlclByby9mZWF0dXJlL1RpbWVTcGFuSGlnaGxpZ2h0KVxuICAgICAqL1xuICAgIHRpbWVTcGFuSGlnaGxpZ2h0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRpbWVTcGFuSGlnaGxpZ2h0fFRpbWVTcGFuSGlnaGxpZ2h0Q29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IG1ha2VzIHRoZSBncmlkIHdvcmsgbW9yZSBsaWtlIGEgdHJlZS4gSW5jbHVkZWQgYnkgZGVmYXVsdCBpbiBbVHJlZUdyaWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkKS4gUmVxdWlyZXNcbiAgICAgKiBleGFjdGx5IG9uZSBbVHJlZUNvbHVtbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9UcmVlQ29sdW1uKSBhbW9uZyBncmlkcyBjb2x1bW5zLiBUaGF0IGNvbHVtbiB3aWxsIGhhdmUgaXRzIHJlbmRlcmVyIHJlcGxhY2VkIHdpdGggYVxuICAgICAqIHRyZWUgcmVuZGVyZXIgdGhhdCBhZGRzIHBhZGRpbmcgYW5kIGljb24gdG8gZ2l2ZSB0aGUgYXBwZWFyYW5jZSBvZiBhIHRyZWUuIFRoZSBvcmlnaW5hbCByZW5kZXJlciBpcyBwcmVzZXJ2ZWQgYW5kXG4gICAgICogYWxzbyBjYWxsZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1RyZWUpXG4gICAgICovXG4gICAgdHJlZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUcmVlfFRyZWVDb25maWdcbiAgICAvKipcbiAgICAgKiBFeHRlbmRzIEdyaWQncyBbVHJlZUdyb3VwXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9UcmVlR3JvdXApIChmb2xsb3cgdGhlIGxpbmsgZm9yIG1vcmUgaW5mbykgZmVhdHVyZSB0byBlbmFibGUgdXNpbmcgaXQgd2l0aCBHYW50dC5cbiAgICAgKiBBbGxvd3MgZ2VuZXJhdGluZyBhIG5ldyB0YXNrIHRyZWUgd2hlcmUgcGFyZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB0YXNrIGZpZWxkcy9mdW5jdGlvbnM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UcmVlR3JvdXApXG4gICAgICovXG4gICAgdHJlZUdyb3VwRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWVHcm91cHxUcmVlR3JvdXBDb25maWdcbiAgICAvKipcbiAgICAgKiBDYXB0dXJlcyB2ZXJzaW9ucyAoc25hcHNob3RzKSBvZiB0aGUgYWN0aXZlIHByb2plY3QsIGluY2x1ZGluZyBhIGRldGFpbGVkIGxvZyBvZiB0aGUgY2hhbmdlcyBuZXcgaW4gZWFjaCB2ZXJzaW9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVmVyc2lvbnMpXG4gICAgICovXG4gICAgdmVyc2lvbnNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VmVyc2lvbnN8VmVyc2lvbnNDb25maWdcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLWdhbnR0LWJhc2UnLFxuICAgIHRlbXBsYXRlIDogJydcbn0pXG5leHBvcnQgY2xhc3MgQnJ5bnR1bUdhbnR0QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IEdhbnR0QmFzZTtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VOYW1lID0gJ0dhbnR0QmFzZSc7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ29uQWZ0ZXJEZXBlbmRlbmN5Q3JlYXRlRHJvcCcsXG4gICAgICAgICdvbkFmdGVyRGVwZW5kZW5jeVNhdmUnLFxuICAgICAgICAnb25BZnRlckRyYWdDcmVhdGUnLFxuICAgICAgICAnb25BZnRlckV2ZW50RWRpdCcsXG4gICAgICAgICdvbkFmdGVyRXZlbnRTYXZlJyxcbiAgICAgICAgJ29uQWZ0ZXJQcm9qZWN0RWRpdCcsXG4gICAgICAgICdvbkFmdGVyUHJvamVjdFNhdmUnLFxuICAgICAgICAnb25BZnRlclRhc2tEcm9wJyxcbiAgICAgICAgJ29uQWZ0ZXJUYXNrRWRpdCcsXG4gICAgICAgICdvbkFmdGVyVGFza1NhdmUnLFxuICAgICAgICAnb25BZnRlclRhc2tTZWdtZW50RHJvcCcsXG4gICAgICAgICdvbkJlZm9yZUFzc2lnbm1lbnREZWxldGUnLFxuICAgICAgICAnb25CZWZvcmVDYW5jZWxDZWxsRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUNhbmNlbFJvd0VkaXQnLFxuICAgICAgICAnb25CZWZvcmVDZWxsRWRpdFN0YXJ0JyxcbiAgICAgICAgJ29uQmVmb3JlQ2VsbFJhbmdlRGVsZXRlJyxcbiAgICAgICAgJ29uQmVmb3JlQ2VsbFJhbmdlRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUNvbHVtbkRyYWdTdGFydCcsXG4gICAgICAgICdvbkJlZm9yZUNvbHVtbkRyb3BGaW5hbGl6ZScsXG4gICAgICAgICdvbkJlZm9yZUNvbHVtblJlc2l6ZScsXG4gICAgICAgICdvbkJlZm9yZUNvcHknLFxuICAgICAgICAnb25CZWZvcmVDU1ZFeHBvcnQnLFxuICAgICAgICAnb25CZWZvcmVEZXBlbmRlbmN5QWRkJyxcbiAgICAgICAgJ29uQmVmb3JlRGVwZW5kZW5jeUNyZWF0ZURyYWcnLFxuICAgICAgICAnb25CZWZvcmVEZXBlbmRlbmN5Q3JlYXRlRmluYWxpemUnLFxuICAgICAgICAnb25CZWZvcmVEZXBlbmRlbmN5RGVsZXRlJyxcbiAgICAgICAgJ29uQmVmb3JlRGVwZW5kZW5jeUVkaXQnLFxuICAgICAgICAnb25CZWZvcmVEZXBlbmRlbmN5RWRpdFNob3cnLFxuICAgICAgICAnb25CZWZvcmVEZXBlbmRlbmN5U2F2ZScsXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVEcmFnQ3JlYXRlJyxcbiAgICAgICAgJ29uQmVmb3JlRHJhZ0NyZWF0ZUZpbmFsaXplJyxcbiAgICAgICAgJ29uQmVmb3JlRXZlbnREZWxldGUnLFxuICAgICAgICAnb25CZWZvcmVFdmVudEVkaXQnLFxuICAgICAgICAnb25CZWZvcmVFdmVudEVkaXRTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlRXZlbnRSZXNpemUnLFxuICAgICAgICAnb25CZWZvcmVFdmVudFJlc2l6ZUZpbmFsaXplJyxcbiAgICAgICAgJ29uQmVmb3JlRXZlbnRTYXZlJyxcbiAgICAgICAgJ29uQmVmb3JlRXZlbnRTZWdtZW50UmVzaXplJyxcbiAgICAgICAgJ29uQmVmb3JlRXZlbnRTZWdtZW50UmVzaXplRmluYWxpemUnLFxuICAgICAgICAnb25CZWZvcmVFeGNlbEV4cG9ydCcsXG4gICAgICAgICdvbkJlZm9yZUZpbGxIYW5kbGVEcmFnU3RhcnQnLFxuICAgICAgICAnb25CZWZvcmVGaW5pc2hDZWxsRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUZpbmlzaFJvd0VkaXQnLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlTXNwRXhwb3J0JyxcbiAgICAgICAgJ29uQmVmb3JlUGFuJyxcbiAgICAgICAgJ29uQmVmb3JlUGFzdGUnLFxuICAgICAgICAnb25CZWZvcmVQZGZFeHBvcnQnLFxuICAgICAgICAnb25CZWZvcmVQcmVzZXRDaGFuZ2UnLFxuICAgICAgICAnb25CZWZvcmVQcm9qZWN0RWRpdCcsXG4gICAgICAgICdvbkJlZm9yZVByb2plY3RFZGl0U2hvdycsXG4gICAgICAgICdvbkJlZm9yZVByb2plY3RTYXZlJyxcbiAgICAgICAgJ29uQmVmb3JlUmVuZGVyUm93JyxcbiAgICAgICAgJ29uQmVmb3JlUmVuZGVyUm93cycsXG4gICAgICAgICdvbkJlZm9yZVJvd0NvbGxhcHNlJyxcbiAgICAgICAgJ29uQmVmb3JlUm93RXhwYW5kJyxcbiAgICAgICAgJ29uQmVmb3JlU2VsZWN0aW9uQ2hhbmdlJyxcbiAgICAgICAgJ29uQmVmb3JlU2V0UmVjb3JkJyxcbiAgICAgICAgJ29uQmVmb3JlU2hvdycsXG4gICAgICAgICdvbkJlZm9yZVNob3dUZXJtaW5hbHMnLFxuICAgICAgICAnb25CZWZvcmVTdGFydFJvd0VkaXQnLFxuICAgICAgICAnb25CZWZvcmVTdGF0ZUFwcGx5JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhdGVTYXZlJyxcbiAgICAgICAgJ29uQmVmb3JlVGFza0FkZCcsXG4gICAgICAgICdvbkJlZm9yZVRhc2tEZWxldGUnLFxuICAgICAgICAnb25CZWZvcmVUYXNrRHJhZycsXG4gICAgICAgICdvbkJlZm9yZVRhc2tEcm9wRmluYWxpemUnLFxuICAgICAgICAnb25CZWZvcmVUYXNrRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZVRhc2tFZGl0U2hvdycsXG4gICAgICAgICdvbkJlZm9yZVRhc2tSZXNpemUnLFxuICAgICAgICAnb25CZWZvcmVUYXNrUmVzaXplRmluYWxpemUnLFxuICAgICAgICAnb25CZWZvcmVUYXNrU2F2ZScsXG4gICAgICAgICdvbkJlZm9yZVRhc2tTZWdtZW50RHJhZycsXG4gICAgICAgICdvbkJlZm9yZVRhc2tTZWdtZW50RHJvcEZpbmFsaXplJyxcbiAgICAgICAgJ29uQmVmb3JlVGFza1NlZ21lbnRSZXNpemUnLFxuICAgICAgICAnb25CZWZvcmVUYXNrU2VnbWVudFJlc2l6ZUZpbmFsaXplJyxcbiAgICAgICAgJ29uQmVmb3JlVG9nZ2xlR3JvdXAnLFxuICAgICAgICAnb25CZWZvcmVUb2dnbGVOb2RlJyxcbiAgICAgICAgJ29uQ2FuY2VsQ2VsbEVkaXQnLFxuICAgICAgICAnb25DYXRjaEFsbCcsXG4gICAgICAgICdvbkNlbGxDbGljaycsXG4gICAgICAgICdvbkNlbGxDb250ZXh0TWVudScsXG4gICAgICAgICdvbkNlbGxEYmxDbGljaycsXG4gICAgICAgICdvbkNlbGxNZW51QmVmb3JlU2hvdycsXG4gICAgICAgICdvbkNlbGxNZW51SXRlbScsXG4gICAgICAgICdvbkNlbGxNZW51U2hvdycsXG4gICAgICAgICdvbkNlbGxNZW51VG9nZ2xlSXRlbScsXG4gICAgICAgICdvbkNlbGxNb3VzZUVudGVyJyxcbiAgICAgICAgJ29uQ2VsbE1vdXNlTGVhdmUnLFxuICAgICAgICAnb25DZWxsTW91c2VPdXQnLFxuICAgICAgICAnb25DZWxsTW91c2VPdmVyJyxcbiAgICAgICAgJ29uQ29sbGFwc2UnLFxuICAgICAgICAnb25Db2xsYXBzZU5vZGUnLFxuICAgICAgICAnb25Db2x1bW5EcmFnJyxcbiAgICAgICAgJ29uQ29sdW1uRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uQ29sdW1uRHJvcCcsXG4gICAgICAgICdvbkNvbHVtblJlc2l6ZScsXG4gICAgICAgICdvbkNvbHVtblJlc2l6ZVN0YXJ0JyxcbiAgICAgICAgJ29uQ29udGV4dE1lbnVJdGVtJyxcbiAgICAgICAgJ29uQ29udGV4dE1lbnVUb2dnbGVJdGVtJyxcbiAgICAgICAgJ29uQ29weScsXG4gICAgICAgICdvbkNyaXRpY2FsUGF0aHNIaWdobGlnaHRlZCcsXG4gICAgICAgICdvbkNyaXRpY2FsUGF0aHNVbmhpZ2hsaWdodGVkJyxcbiAgICAgICAgJ29uQ3VycmVudFRpbWVsaW5lVXBkYXRlJyxcbiAgICAgICAgJ29uRGF0YUNoYW5nZScsXG4gICAgICAgICdvbkRhdGVSYW5nZUNoYW5nZScsXG4gICAgICAgICdvbkRlcGVuZGVuY2llc0RyYXduJyxcbiAgICAgICAgJ29uRGVwZW5kZW5jeUNsaWNrJyxcbiAgICAgICAgJ29uRGVwZW5kZW5jeUNvbnRleHRNZW51JyxcbiAgICAgICAgJ29uRGVwZW5kZW5jeUNyZWF0ZURyYWdTdGFydCcsXG4gICAgICAgICdvbkRlcGVuZGVuY3lDcmVhdGVEcm9wJyxcbiAgICAgICAgJ29uRGVwZW5kZW5jeURibENsaWNrJyxcbiAgICAgICAgJ29uRGVwZW5kZW5jeU1vdXNlT3V0JyxcbiAgICAgICAgJ29uRGVwZW5kZW5jeU1vdXNlT3ZlcicsXG4gICAgICAgICdvbkRlcGVuZGVuY3lWYWxpZGF0aW9uQ29tcGxldGUnLFxuICAgICAgICAnb25EZXBlbmRlbmN5VmFsaWRhdGlvblN0YXJ0JyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkRpcnR5U3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25EcmFnQ3JlYXRlRW5kJyxcbiAgICAgICAgJ29uRHJhZ0NyZWF0ZVN0YXJ0JyxcbiAgICAgICAgJ29uRHJhZ1NlbGVjdGluZycsXG4gICAgICAgICdvbkVsZW1lbnRDcmVhdGVkJyxcbiAgICAgICAgJ29uRXZlbnRFZGl0QmVmb3JlU2V0UmVjb3JkJyxcbiAgICAgICAgJ29uRXZlbnRNZW51QmVmb3JlU2hvdycsXG4gICAgICAgICdvbkV2ZW50TWVudUl0ZW0nLFxuICAgICAgICAnb25FdmVudE1lbnVTaG93JyxcbiAgICAgICAgJ29uRXZlbnRQYXJ0aWFsUmVzaXplJyxcbiAgICAgICAgJ29uRXZlbnRSZXNpemVFbmQnLFxuICAgICAgICAnb25FdmVudFJlc2l6ZVN0YXJ0JyxcbiAgICAgICAgJ29uRXZlbnRTZWdtZW50UGFydGlhbFJlc2l6ZScsXG4gICAgICAgICdvbkV2ZW50U2VnbWVudFJlc2l6ZUVuZCcsXG4gICAgICAgICdvbkV2ZW50U2VnbWVudFJlc2l6ZVN0YXJ0JyxcbiAgICAgICAgJ29uRXhwYW5kJyxcbiAgICAgICAgJ29uRXhwYW5kTm9kZScsXG4gICAgICAgICdvbkZpbGVEcm9wJyxcbiAgICAgICAgJ29uRmlsbEhhbmRsZUJlZm9yZURyYWdGaW5hbGl6ZScsXG4gICAgICAgICdvbkZpbGxIYW5kbGVEcmFnJyxcbiAgICAgICAgJ29uRmlsbEhhbmRsZURyYWdBYm9ydCcsXG4gICAgICAgICdvbkZpbGxIYW5kbGVEcmFnRW5kJyxcbiAgICAgICAgJ29uRmlsbEhhbmRsZURyYWdTdGFydCcsXG4gICAgICAgICdvbkZpbmlzaENlbGxFZGl0JyxcbiAgICAgICAgJ29uRmluaXNoUm93RWRpdCcsXG4gICAgICAgICdvbkZvY3VzSW4nLFxuICAgICAgICAnb25Gb2N1c091dCcsXG4gICAgICAgICdvbkdyaWRSb3dCZWZvcmVEcmFnU3RhcnQnLFxuICAgICAgICAnb25HcmlkUm93QmVmb3JlRHJvcEZpbmFsaXplJyxcbiAgICAgICAgJ29uR3JpZFJvd0RyYWcnLFxuICAgICAgICAnb25HcmlkUm93RHJhZ0Fib3J0JyxcbiAgICAgICAgJ29uR3JpZFJvd0RyYWdTdGFydCcsXG4gICAgICAgICdvbkdyaWRSb3dEcm9wJyxcbiAgICAgICAgJ29uSGVhZGVyQ2xpY2snLFxuICAgICAgICAnb25IZWFkZXJNZW51QmVmb3JlU2hvdycsXG4gICAgICAgICdvbkhlYWRlck1lbnVJdGVtJyxcbiAgICAgICAgJ29uSGVhZGVyTWVudVNob3cnLFxuICAgICAgICAnb25IZWFkZXJNZW51VG9nZ2xlSXRlbScsXG4gICAgICAgICdvbkhpZGUnLFxuICAgICAgICAnb25Mb2NrUm93cycsXG4gICAgICAgICdvbk1vdXNlT3V0JyxcbiAgICAgICAgJ29uTW91c2VPdmVyJyxcbiAgICAgICAgJ29uTXNwRXhwb3J0JyxcbiAgICAgICAgJ29uTmF2aWdhdGUnLFxuICAgICAgICAnb25Ob1pvb21DaGFuZ2UnLFxuICAgICAgICAnb25QYWludCcsXG4gICAgICAgICdvblBhc3RlJyxcbiAgICAgICAgJ29uUGRmRXhwb3J0JyxcbiAgICAgICAgJ29uUGVyY2VudEJhckRyYWcnLFxuICAgICAgICAnb25QZXJjZW50QmFyRHJhZ0Fib3J0JyxcbiAgICAgICAgJ29uUGVyY2VudEJhckRyYWdTdGFydCcsXG4gICAgICAgICdvblBlcmNlbnRCYXJEcm9wJyxcbiAgICAgICAgJ29uUHJlc2V0Q2hhbmdlJyxcbiAgICAgICAgJ29uUHJvamVjdEVkaXRDYW5jZWxlZCcsXG4gICAgICAgICdvblJlYWRPbmx5JyxcbiAgICAgICAgJ29uUmVjb21wb3NlJyxcbiAgICAgICAgJ29uUmVsZWFzZVRhc2snLFxuICAgICAgICAnb25SZW5kZXJSb3cnLFxuICAgICAgICAnb25SZW5kZXJSb3dzJyxcbiAgICAgICAgJ29uUmVuZGVyVGFzaycsXG4gICAgICAgICdvblJlc2l6ZScsXG4gICAgICAgICdvblJlc291cmNlQXNzaWdubWVudENsaWNrJyxcbiAgICAgICAgJ29uUmVzcG9uc2l2ZScsXG4gICAgICAgICdvblJvd0NvbGxhcHNlJyxcbiAgICAgICAgJ29uUm93RXhwYW5kJyxcbiAgICAgICAgJ29uUm93TW91c2VFbnRlcicsXG4gICAgICAgICdvblJvd01vdXNlTGVhdmUnLFxuICAgICAgICAnb25TY2hlZHVsZU1lbnVCZWZvcmVTaG93JyxcbiAgICAgICAgJ29uU2NoZWR1bGVNZW51SXRlbScsXG4gICAgICAgICdvblNjaGVkdWxlTWVudVNob3cnLFxuICAgICAgICAnb25TY3JvbGwnLFxuICAgICAgICAnb25TY3JvbGxCdXR0b25DbGljaycsXG4gICAgICAgICdvblNlbGVjdGlvbkNoYW5nZScsXG4gICAgICAgICdvblNlbGVjdGlvbk1vZGVDaGFuZ2UnLFxuICAgICAgICAnb25TaG93JyxcbiAgICAgICAgJ29uU3BsaXQnLFxuICAgICAgICAnb25TcGxpdHRlckNvbGxhcHNlQ2xpY2snLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdFbmQnLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdTdGFydCcsXG4gICAgICAgICdvblNwbGl0dGVyRXhwYW5kQ2xpY2snLFxuICAgICAgICAnb25TdGFydENlbGxFZGl0JyxcbiAgICAgICAgJ29uU3RhcnRSb3dFZGl0JyxcbiAgICAgICAgJ29uU3ViR3JpZENvbGxhcHNlJyxcbiAgICAgICAgJ29uU3ViR3JpZEV4cGFuZCcsXG4gICAgICAgICdvblRhc2tDbGljaycsXG4gICAgICAgICdvblRhc2tDb250ZXh0TWVudScsXG4gICAgICAgICdvblRhc2tEYmxDbGljaycsXG4gICAgICAgICdvblRhc2tEcmFnJyxcbiAgICAgICAgJ29uVGFza0RyYWdTdGFydCcsXG4gICAgICAgICdvblRhc2tEcm9wJyxcbiAgICAgICAgJ29uVGFza0VkaXRDYW5jZWxlZCcsXG4gICAgICAgICdvblRhc2tLZXlEb3duJyxcbiAgICAgICAgJ29uVGFza0tleVVwJyxcbiAgICAgICAgJ29uVGFza01lbnVCZWZvcmVTaG93JyxcbiAgICAgICAgJ29uVGFza01lbnVJdGVtJyxcbiAgICAgICAgJ29uVGFza01lbnVTaG93JyxcbiAgICAgICAgJ29uVGFza01vdXNlRG93bicsXG4gICAgICAgICdvblRhc2tNb3VzZU91dCcsXG4gICAgICAgICdvblRhc2tNb3VzZU92ZXInLFxuICAgICAgICAnb25UYXNrTW91c2VVcCcsXG4gICAgICAgICdvblRhc2tOb25Xb3JraW5nVGltZUNsaWNrJyxcbiAgICAgICAgJ29uVGFza05vbldvcmtpbmdUaW1lQ29udGV4dE1lbnUnLFxuICAgICAgICAnb25UYXNrTm9uV29ya2luZ1RpbWVEYmxDbGljaycsXG4gICAgICAgICdvblRhc2tQYXJ0aWFsUmVzaXplJyxcbiAgICAgICAgJ29uVGFza1Jlc2l6ZUVuZCcsXG4gICAgICAgICdvblRhc2tSZXNpemVTdGFydCcsXG4gICAgICAgICdvblRhc2tTZWdtZW50RHJhZycsXG4gICAgICAgICdvblRhc2tTZWdtZW50RHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uVGFza1NlZ21lbnREcm9wJyxcbiAgICAgICAgJ29uVGFza1NlZ21lbnRQYXJ0aWFsUmVzaXplJyxcbiAgICAgICAgJ29uVGFza1NlZ21lbnRSZXNpemVFbmQnLFxuICAgICAgICAnb25UYXNrU2VnbWVudFJlc2l6ZVN0YXJ0JyxcbiAgICAgICAgJ29uVGlja1NpemVDaGFuZ2UnLFxuICAgICAgICAnb25UaW1lQXhpc0NoYW5nZScsXG4gICAgICAgICdvblRpbWVBeGlzSGVhZGVyQ2xpY2snLFxuICAgICAgICAnb25UaW1lQXhpc0hlYWRlckNvbnRleHRNZW51JyxcbiAgICAgICAgJ29uVGltZUF4aXNIZWFkZXJEYmxDbGljaycsXG4gICAgICAgICdvblRpbWVBeGlzSGVhZGVyTWVudUJlZm9yZVNob3cnLFxuICAgICAgICAnb25UaW1lQXhpc0hlYWRlck1lbnVJdGVtJyxcbiAgICAgICAgJ29uVGltZUF4aXNIZWFkZXJNZW51U2hvdycsXG4gICAgICAgICdvblRpbWVsaW5lQ29udGV4dENoYW5nZScsXG4gICAgICAgICdvblRpbWVsaW5lVmlld3BvcnRSZXNpemUnLFxuICAgICAgICAnb25UaW1lUmFuZ2VIZWFkZXJDbGljaycsXG4gICAgICAgICdvblRpbWVSYW5nZUhlYWRlckNvbnRleHRNZW51JyxcbiAgICAgICAgJ29uVGltZVJhbmdlSGVhZGVyRGJsQ2xpY2snLFxuICAgICAgICAnb25Ub2dnbGVHcm91cCcsXG4gICAgICAgICdvblRvZ2dsZU5vZGUnLFxuICAgICAgICAnb25Ub29sQ2xpY2snLFxuICAgICAgICAnb25UcmFuc2FjdGlvbkNoYW5nZScsXG4gICAgICAgICdvblVubG9ja1Jvd3MnLFxuICAgICAgICAnb25VbnNwbGl0JyxcbiAgICAgICAgJ29uVmlzaWJsZURhdGVSYW5nZUNoYW5nZSdcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUZlYXR1cmVOYW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICdhaUZpbHRlckZlYXR1cmUnLFxuICAgICAgICAnYmFzZWxpbmVzRmVhdHVyZScsXG4gICAgICAgICdjZWxsQ29weVBhc3RlRmVhdHVyZScsXG4gICAgICAgICdjZWxsRWRpdEZlYXR1cmUnLFxuICAgICAgICAnY2VsbE1lbnVGZWF0dXJlJyxcbiAgICAgICAgJ2NlbGxUb29sdGlwRmVhdHVyZScsXG4gICAgICAgICdjaGFydHNGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtbkF1dG9XaWR0aEZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uRHJhZ1Rvb2xiYXJGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtbkxpbmVzRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5QaWNrZXJGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtblJlbmFtZUZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVzaXplRmVhdHVyZScsXG4gICAgICAgICdjcml0aWNhbFBhdGhzRmVhdHVyZScsXG4gICAgICAgICdkZXBlbmRlbmNpZXNGZWF0dXJlJyxcbiAgICAgICAgJ2RlcGVuZGVuY3lFZGl0RmVhdHVyZScsXG4gICAgICAgICdldmVudEZpbHRlckZlYXR1cmUnLFxuICAgICAgICAnZXZlbnRTZWdtZW50c0ZlYXR1cmUnLFxuICAgICAgICAnZXhjZWxFeHBvcnRlckZlYXR1cmUnLFxuICAgICAgICAnZmlsZURyb3BGZWF0dXJlJyxcbiAgICAgICAgJ2ZpbGxIYW5kbGVGZWF0dXJlJyxcbiAgICAgICAgJ2ZpbHRlckZlYXR1cmUnLFxuICAgICAgICAnZmlsdGVyQmFyRmVhdHVyZScsXG4gICAgICAgICdncm91cEZlYXR1cmUnLFxuICAgICAgICAnZ3JvdXBTdW1tYXJ5RmVhdHVyZScsXG4gICAgICAgICdoZWFkZXJNZW51RmVhdHVyZScsXG4gICAgICAgICdoZWFkZXJab29tRmVhdHVyZScsXG4gICAgICAgICdpbmRpY2F0b3JzRmVhdHVyZScsXG4gICAgICAgICdsYWJlbHNGZWF0dXJlJyxcbiAgICAgICAgJ2xvY2tSb3dzRmVhdHVyZScsXG4gICAgICAgICdtZXJnZUNlbGxzRmVhdHVyZScsXG4gICAgICAgICdtc3BFeHBvcnRGZWF0dXJlJyxcbiAgICAgICAgJ25vbldvcmtpbmdUaW1lRmVhdHVyZScsXG4gICAgICAgICdwYW5GZWF0dXJlJyxcbiAgICAgICAgJ3BhcmVudEFyZWFGZWF0dXJlJyxcbiAgICAgICAgJ3BkZkV4cG9ydEZlYXR1cmUnLFxuICAgICAgICAncGVyY2VudEJhckZlYXR1cmUnLFxuICAgICAgICAncGluQ29sdW1uc0ZlYXR1cmUnLFxuICAgICAgICAncHJpbnRGZWF0dXJlJyxcbiAgICAgICAgJ3Byb2dyZXNzTGluZUZlYXR1cmUnLFxuICAgICAgICAncHJvamVjdEVkaXRGZWF0dXJlJyxcbiAgICAgICAgJ3Byb2plY3RMaW5lc0ZlYXR1cmUnLFxuICAgICAgICAncXVpY2tGaW5kRmVhdHVyZScsXG4gICAgICAgICdyZWdpb25SZXNpemVGZWF0dXJlJyxcbiAgICAgICAgJ3JvbGx1cHNGZWF0dXJlJyxcbiAgICAgICAgJ3Jvd0NvcHlQYXN0ZUZlYXR1cmUnLFxuICAgICAgICAncm93RWRpdEZlYXR1cmUnLFxuICAgICAgICAncm93RXhwYW5kZXJGZWF0dXJlJyxcbiAgICAgICAgJ3Jvd1Jlb3JkZXJGZWF0dXJlJyxcbiAgICAgICAgJ3Jvd1Jlc2l6ZUZlYXR1cmUnLFxuICAgICAgICAnc2NoZWR1bGVNZW51RmVhdHVyZScsXG4gICAgICAgICdzY2hlZHVsZVRvb2x0aXBGZWF0dXJlJyxcbiAgICAgICAgJ3Njcm9sbEJ1dHRvbnNGZWF0dXJlJyxcbiAgICAgICAgJ3NlYXJjaEZlYXR1cmUnLFxuICAgICAgICAnc29ydEZlYXR1cmUnLFxuICAgICAgICAnc3BsaXRGZWF0dXJlJyxcbiAgICAgICAgJ3N0aWNreUNlbGxzRmVhdHVyZScsXG4gICAgICAgICdzdHJpcGVGZWF0dXJlJyxcbiAgICAgICAgJ3N1bW1hcnlGZWF0dXJlJyxcbiAgICAgICAgJ3Rhc2tDb3B5UGFzdGVGZWF0dXJlJyxcbiAgICAgICAgJ3Rhc2tEcmFnRmVhdHVyZScsXG4gICAgICAgICd0YXNrRHJhZ0NyZWF0ZUZlYXR1cmUnLFxuICAgICAgICAndGFza0VkaXRGZWF0dXJlJyxcbiAgICAgICAgJ3Rhc2tNZW51RmVhdHVyZScsXG4gICAgICAgICd0YXNrTm9uV29ya2luZ1RpbWVGZWF0dXJlJyxcbiAgICAgICAgJ3Rhc2tSZXNpemVGZWF0dXJlJyxcbiAgICAgICAgJ3Rhc2tTZWdtZW50RHJhZ0ZlYXR1cmUnLFxuICAgICAgICAndGFza1NlZ21lbnRSZXNpemVGZWF0dXJlJyxcbiAgICAgICAgJ3Rhc2tUb29sdGlwRmVhdHVyZScsXG4gICAgICAgICd0aW1lQXhpc0hlYWRlck1lbnVGZWF0dXJlJyxcbiAgICAgICAgJ3RpbWVsaW5lQ2hhcnRGZWF0dXJlJyxcbiAgICAgICAgJ3RpbWVSYW5nZXNGZWF0dXJlJyxcbiAgICAgICAgJ3RpbWVTcGFuSGlnaGxpZ2h0RmVhdHVyZScsXG4gICAgICAgICd0cmVlRmVhdHVyZScsXG4gICAgICAgICd0cmVlR3JvdXBGZWF0dXJlJyxcbiAgICAgICAgJ3ZlcnNpb25zRmVhdHVyZSdcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3M6IHN0cmluZ1tdID0gQnJ5bnR1bUdhbnR0QmFzZUNvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYWxsb3dDcmVhdGUnLFxuICAgICAgICAnYWxsb3dDcmVhdGVPbmx5UGFyZW50JyxcbiAgICAgICAgJ2FsbG93RHJvcE9uRXZlbnRCYXInLFxuICAgICAgICAnYW5pbWF0ZUZpbHRlclJlbW92YWxzJyxcbiAgICAgICAgJ2FuaW1hdGVSZW1vdmluZ1Jvd3MnLFxuICAgICAgICAnYW5pbWF0ZVRyZWVOb2RlVG9nZ2xlJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXNzaWdubWVudHMnLFxuICAgICAgICAnYXV0b0FkanVzdFRpbWVBeGlzJyxcbiAgICAgICAgJ2F1dG9IZWlnaHQnLFxuICAgICAgICAnYmFyTWFyZ2luJyxcbiAgICAgICAgJ2JiYXInLFxuICAgICAgICAnYm9keUNscycsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnYnVmZmVyQ29lZicsXG4gICAgICAgICdidWZmZXJUaHJlc2hvbGQnLFxuICAgICAgICAnY2FsZW5kYXJzJyxcbiAgICAgICAgJ2NhbGxPbkZ1bmN0aW9ucycsXG4gICAgICAgICdjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMnLFxuICAgICAgICAnY2VsbEVsbGlwc2lzJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICAnY29sbGFwc2libGUnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbHVtbkxpbmVzJyxcbiAgICAgICAgJ2NvbHVtbnMnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2NvbnRleHRNZW51VHJpZ2dlckV2ZW50JyxcbiAgICAgICAgJ2NyZWF0aW9uVG9vbHRpcCcsXG4gICAgICAgICdjcmVhdGlvblRvb2x0aXBUZW1wbGF0ZScsXG4gICAgICAgICdjeWNsZVJlc29sdXRpb25Qb3B1cENsYXNzJyxcbiAgICAgICAgJ2RhdGEnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGVmYXVsdFJlZ2lvbicsXG4gICAgICAgICdkZWZhdWx0UmVzb3VyY2VJbWFnZU5hbWUnLFxuICAgICAgICAnZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgJ2RlcGVuZGVuY3lJZEZpZWxkJyxcbiAgICAgICAgJ2Rlc3Ryb3lTdG9yZScsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkQ29sdW1uSWRXYXJuaW5nJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkUm93TW9kZWxXYXJuaW5nJyxcbiAgICAgICAgJ2Rpc3BsYXlEYXRlRm9ybWF0JyxcbiAgICAgICAgJ2Rpc3BsYXlTY2hlZHVsaW5nSXNzdWVSZXNvbHV0aW9uUG9wdXAnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZHVyYXRpb25EaXNwbGF5UHJlY2lzaW9uJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2VtcHR5VGV4dCcsXG4gICAgICAgICdlbmFibGVEZWxldGVLZXknLFxuICAgICAgICAnZW5hYmxlRXZlbnRBbmltYXRpb25zJyxcbiAgICAgICAgJ2VuYWJsZVJlY3VycmluZ0V2ZW50cycsXG4gICAgICAgICdlbmFibGVTdGlja3knLFxuICAgICAgICAnZW5hYmxlVGV4dFNlbGVjdGlvbicsXG4gICAgICAgICdlbmFibGVUcmFuc2FjdGlvbmFsRmVhdHVyZXMnLFxuICAgICAgICAnZW5hYmxlVW5kb1JlZG9LZXlzJyxcbiAgICAgICAgJ2VuZERhdGUnLFxuICAgICAgICAnZXZlbnRDb2xvcicsXG4gICAgICAgICdldmVudFN0eWxlJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmaWxsTGFzdENvbHVtbicsXG4gICAgICAgICdmaWxsVGlja3MnLFxuICAgICAgICAnZml4ZWRSb3dIZWlnaHQnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmb290ZXInLFxuICAgICAgICAnZm9yY2VGaXQnLFxuICAgICAgICAnZm9ybXVsYVByb3ZpZGVycycsXG4gICAgICAgICdmdWxsUm93UmVmcmVzaCcsXG4gICAgICAgICdnZXREYXRlQ29uc3RyYWludHMnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVGb290ZXJzJyxcbiAgICAgICAgJ2hpZGVIZWFkZXJzJyxcbiAgICAgICAgJ2hpZGVIb3Jpem9udGFsU2Nyb2xsYmFyJyxcbiAgICAgICAgJ2hpZGVSb3dIb3ZlcicsXG4gICAgICAgICdob3ZlckNscycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lnbm9yZURvbUV2ZW50c1doaWxlU2Nyb2xsaW5nJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2luZmluaXRlU2Nyb2xsJyxcbiAgICAgICAgJ2lucHV0RmllbGRBbGlnbicsXG4gICAgICAgICdpbnNlcnRCZWZvcmUnLFxuICAgICAgICAnaW5zZXJ0Rmlyc3QnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ2xhYmVsUG9zaXRpb24nLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvYWRNYXNrJyxcbiAgICAgICAgJ2xvYWRNYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbG9hZE1hc2tFcnJvcicsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb25nUHJlc3NUaW1lJyxcbiAgICAgICAgJ21hbmFnZWRFdmVudFNpemluZycsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhEYXRlJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhUaW1lQXhpc1VuaXQnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWF4Wm9vbUxldmVsJyxcbiAgICAgICAgJ21pbkRhdGUnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21pblpvb21MZXZlbCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ25ld1Rhc2tEZWZhdWx0cycsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwYXJ0bmVyJyxcbiAgICAgICAgJ3BsdWdpbnMnLFxuICAgICAgICAncHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbCcsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmVzZXRzJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdwcm9qZWN0JyxcbiAgICAgICAgJ3Byb2plY3RQcm9ncmVzc1JlcG9ydGluZycsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZWN1cnJlbmNlQ29uZmlybWF0aW9uUG9wdXAnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZW5kaXRpb24nLFxuICAgICAgICAncmVzaXphYmxlJyxcbiAgICAgICAgJ3Jlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXInLFxuICAgICAgICAncmVzb3VyY2VJbWFnZUZvbGRlclBhdGgnLFxuICAgICAgICAncmVzb3VyY2VJbWFnZVBhdGgnLFxuICAgICAgICAncmVzb3VyY2VzJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVMZXZlbHMnLFxuICAgICAgICAncmlwcGxlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3Jvd0hlaWdodCcsXG4gICAgICAgICdyb3dMaW5lcycsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwQ2xhc3MnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzY3JvbGxlckNsYXNzJyxcbiAgICAgICAgJ3Njcm9sbE1hbmFnZXInLFxuICAgICAgICAnc2Nyb2xsVGFza0ludG9WaWV3T25DZWxsQ2xpY2snLFxuICAgICAgICAnc2VsZWN0aW9uTW9kZScsXG4gICAgICAgICdzaG93Q29zdENvbnRyb2xzJyxcbiAgICAgICAgJ3Nob3dDcmVhdGlvblRvb2x0aXAnLFxuICAgICAgICAnc2hvd0RpcnR5JyxcbiAgICAgICAgJ3Nob3dMYWdJblRvb2x0aXAnLFxuICAgICAgICAnc2hvd1JlY3VycmluZ1VJJyxcbiAgICAgICAgJ3Nob3dUYXNrQ29sb3JQaWNrZXJzJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwJyxcbiAgICAgICAgJ3Nob3dVbnNjaGVkdWxlZFRhc2tzJyxcbiAgICAgICAgJ3NuYXAnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YXJ0RGF0ZScsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RhdGVTZXR0aW5ncycsXG4gICAgICAgICdzdGlja3lIZWFkZXJzJyxcbiAgICAgICAgJ3N0b3JlJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICdzdWJHcmlkQ29uZmlncycsXG4gICAgICAgICdzdXBwcmVzc0ZpdCcsXG4gICAgICAgICdzeW5jTWFzaycsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiQmFySXRlbXMnLFxuICAgICAgICAndGFza1JlbmRlcmVyJyxcbiAgICAgICAgJ3Rhc2tzJyxcbiAgICAgICAgJ3Rhc2tTdG9yZScsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3Rlcm1pbmFsQ2xzJyxcbiAgICAgICAgJ3Rlcm1pbmFsSGlkZURlbGF5JyxcbiAgICAgICAgJ3Rlcm1pbmFsT2Zmc2V0JyxcbiAgICAgICAgJ3Rlcm1pbmFsU2hvd0RlbGF5JyxcbiAgICAgICAgJ3Rlcm1pbmFsU2lkZXMnLFxuICAgICAgICAndGVybWluYWxTaXplJyxcbiAgICAgICAgJ3RpY2tTaXplJyxcbiAgICAgICAgJ3RpbWVBeGlzJyxcbiAgICAgICAgJ3RpbWVSYW5nZXMnLFxuICAgICAgICAndGltZVJlc29sdXRpb24nLFxuICAgICAgICAndGltZVpvbmUnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9nZ2xlUGFyZW50VGFza3NPbkNsaWNrJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXBUZW1wbGF0ZScsXG4gICAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgICAgJ3RyYW5zaXRpb25EdXJhdGlvbicsXG4gICAgICAgICd1aScsXG4gICAgICAgICd1c2VDb250ZXh0dWFsUmVjdXJyZW5jZVJ1bGVzJyxcbiAgICAgICAgJ3ZpZXdQcmVzZXQnLFxuICAgICAgICAndmlzaWJsZURhdGUnLFxuICAgICAgICAndmlzaWJsZVpvb21GYWN0b3InLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd3b3JraW5nVGltZScsXG4gICAgICAgICd6b29tS2VlcHNPcmlnaW5hbFRpbWVzcGFuJyxcbiAgICAgICAgJ3pvb21Pbk1vdXNlV2hlZWwnLFxuICAgICAgICAnem9vbU9uVGltZUF4aXNEb3VibGVDbGljaydcbiAgICBdKTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Db25maWdzT25seTogc3RyaW5nW10gPSBbXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGxvd0NyZWF0ZScsXG4gICAgICAgICdhbGxvd0NyZWF0ZU9ubHlQYXJlbnQnLFxuICAgICAgICAnYW5pbWF0ZUZpbHRlclJlbW92YWxzJyxcbiAgICAgICAgJ2FuaW1hdGVSZW1vdmluZ1Jvd3MnLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdhdXRvQWRqdXN0VGltZUF4aXMnLFxuICAgICAgICAnYXV0b0hlaWdodCcsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2J1ZmZlckNvZWYnLFxuICAgICAgICAnYnVmZmVyVGhyZXNob2xkJyxcbiAgICAgICAgJ2NvbGxhcHNpYmxlJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdjb250ZXh0TWVudVRyaWdnZXJFdmVudCcsXG4gICAgICAgICdjcmVhdGlvblRvb2x0aXAnLFxuICAgICAgICAnY3ljbGVSZXNvbHV0aW9uUG9wdXBDbGFzcycsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGVmYXVsdFJlZ2lvbicsXG4gICAgICAgICdkZWZhdWx0UmVzb3VyY2VJbWFnZU5hbWUnLFxuICAgICAgICAnZGVwZW5kZW5jeUlkRmllbGQnLFxuICAgICAgICAnZGVzdHJveVN0b3JlJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZUdyaWRDb2x1bW5JZFdhcm5pbmcnLFxuICAgICAgICAnZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcnLFxuICAgICAgICAnZGlzcGxheVNjaGVkdWxpbmdJc3N1ZVJlc29sdXRpb25Qb3B1cCcsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYXdlcicsXG4gICAgICAgICdkdXJhdGlvbkRpc3BsYXlQcmVjaXNpb24nLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW5hYmxlRGVsZXRlS2V5JyxcbiAgICAgICAgJ2VuYWJsZVJlY3VycmluZ0V2ZW50cycsXG4gICAgICAgICdlbmFibGVTdGlja3knLFxuICAgICAgICAnZW5hYmxlVGV4dFNlbGVjdGlvbicsXG4gICAgICAgICdlbmFibGVUcmFuc2FjdGlvbmFsRmVhdHVyZXMnLFxuICAgICAgICAnZmlsbExhc3RDb2x1bW4nLFxuICAgICAgICAnZml4ZWRSb3dIZWlnaHQnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2Zvcm11bGFQcm92aWRlcnMnLFxuICAgICAgICAnZnVsbFJvd1JlZnJlc2gnLFxuICAgICAgICAnZ2V0RGF0ZUNvbnN0cmFpbnRzJyxcbiAgICAgICAgJ2dldFJvd0hlaWdodCcsXG4gICAgICAgICdoZWFkZXInLFxuICAgICAgICAnaGlkZUhvcml6b250YWxTY3JvbGxiYXInLFxuICAgICAgICAnaG92ZXJDbHMnLFxuICAgICAgICAnaWNvbicsXG4gICAgICAgICdpZ25vcmVEb21FdmVudHNXaGlsZVNjcm9sbGluZycsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9hZE1hc2snLFxuICAgICAgICAnbG9hZE1hc2tEZWZhdWx0cycsXG4gICAgICAgICdsb2FkTWFza0Vycm9yJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ21hbmFnZWRFdmVudFNpemluZycsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heFRpbWVBeGlzVW5pdCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ25ld1Rhc2tEZWZhdWx0cycsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwYXJ0bmVyJyxcbiAgICAgICAgJ3BsdWdpbnMnLFxuICAgICAgICAncHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncHJvamVjdFByb2dyZXNzUmVwb3J0aW5nJyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmVzaXphYmxlJyxcbiAgICAgICAgJ3Jlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXInLFxuICAgICAgICAncmVzb3VyY2VJbWFnZUZvbGRlclBhdGgnLFxuICAgICAgICAncmVzb3VyY2VJbWFnZVBhdGgnLFxuICAgICAgICAncmVzcG9uc2l2ZUxldmVscycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAnc2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwQ2xhc3MnLFxuICAgICAgICAnc2Nyb2xsZXJDbGFzcycsXG4gICAgICAgICdzY3JvbGxNYW5hZ2VyJyxcbiAgICAgICAgJ3Nob3dDb3N0Q29udHJvbHMnLFxuICAgICAgICAnc2hvd0NyZWF0aW9uVG9vbHRpcCcsXG4gICAgICAgICdzaG93RGlydHknLFxuICAgICAgICAnc2hvd0xhZ0luVG9vbHRpcCcsXG4gICAgICAgICdzaG93UmVjdXJyaW5nVUknLFxuICAgICAgICAnc2hvd1Rhc2tDb2xvclBpY2tlcnMnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RpY2t5SGVhZGVycycsXG4gICAgICAgICdzdHJpcHMnLFxuICAgICAgICAnc3ViR3JpZENvbmZpZ3MnLFxuICAgICAgICAnc3luY01hc2snLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkJhckl0ZW1zJyxcbiAgICAgICAgJ3Rhc2tSZW5kZXJlcicsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3Rlcm1pbmFsQ2xzJyxcbiAgICAgICAgJ3Rlcm1pbmFsU2lkZXMnLFxuICAgICAgICAndGltZUF4aXMnLFxuICAgICAgICAndWknLFxuICAgICAgICAndmlzaWJsZVpvb21GYWN0b3InLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd6b29tS2VlcHNPcmlnaW5hbFRpbWVzcGFuJyxcbiAgICAgICAgJ3pvb21Pbk1vdXNlV2hlZWwnLFxuICAgICAgICAnem9vbU9uVGltZUF4aXNEb3VibGVDbGljaydcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bVByb3BzOiBzdHJpbmdbXSA9IEJyeW50dW1HYW50dEJhc2VDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FsbG93RHJvcE9uRXZlbnRCYXInLFxuICAgICAgICAnYW5pbWF0ZVRyZWVOb2RlVG9nZ2xlJyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2Fzc2lnbm1lbnRzJyxcbiAgICAgICAgJ2Jhck1hcmdpbicsXG4gICAgICAgICdjYWxlbmRhck1hbmFnZXJTdG9yZScsXG4gICAgICAgICdjYWxlbmRhcnMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZWxsRWxsaXBzaXMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29sdW1uTGluZXMnLFxuICAgICAgICAnY29sdW1ucycsXG4gICAgICAgICdjcmVhdGlvblRvb2x0aXBUZW1wbGF0ZScsXG4gICAgICAgICdkYXRhJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2Rpc3BsYXlEYXRlRm9ybWF0JyxcbiAgICAgICAgJ2VtcHR5VGV4dCcsXG4gICAgICAgICdlbmFibGVFdmVudEFuaW1hdGlvbnMnLFxuICAgICAgICAnZW5hYmxlVW5kb1JlZG9LZXlzJyxcbiAgICAgICAgJ2VuZERhdGUnLFxuICAgICAgICAnZXZlbnRDb2xvcicsXG4gICAgICAgICdldmVudFN0eWxlJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmaWxsVGlja3MnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmb2N1c1Zpc2libGUnLFxuICAgICAgICAnZm9yY2VGaXQnLFxuICAgICAgICAnaGFzQ2hhbmdlcycsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVGb290ZXJzJyxcbiAgICAgICAgJ2hpZGVIZWFkZXJzJyxcbiAgICAgICAgJ2hpZGVSb3dIb3ZlcicsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpbmZpbml0ZVNjcm9sbCcsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xvbmdQcmVzc1RpbWUnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21heERhdGUnLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21heFpvb21MZXZlbCcsXG4gICAgICAgICdtaW5EYXRlJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdtaW5ab29tTGV2ZWwnLFxuICAgICAgICAnb3JpZ2luYWxTdG9yZScsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncHJlc2VydmVTY3JvbGwnLFxuICAgICAgICAncHJlc2V0cycsXG4gICAgICAgICdwcm9qZWN0JyxcbiAgICAgICAgJ3JlYWRPbmx5JyxcbiAgICAgICAgJ3JlY3VycmVuY2VDb25maXJtYXRpb25Qb3B1cCcsXG4gICAgICAgICdyZW5kaXRpb24nLFxuICAgICAgICAncmVzb3VyY2VzJyxcbiAgICAgICAgJ3Jvd0hlaWdodCcsXG4gICAgICAgICdyb3dMaW5lcycsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzY3JvbGxMZWZ0JyxcbiAgICAgICAgJ3Njcm9sbFRhc2tJbnRvVmlld09uQ2VsbENsaWNrJyxcbiAgICAgICAgJ3Njcm9sbFRvcCcsXG4gICAgICAgICdzY3JvbGxYJyxcbiAgICAgICAgJ3NlbGVjdGVkQ2VsbCcsXG4gICAgICAgICdzZWxlY3RlZENlbGxzJyxcbiAgICAgICAgJ3NlbGVjdGVkUmVjb3JkJyxcbiAgICAgICAgJ3NlbGVjdGVkUmVjb3JkcycsXG4gICAgICAgICdzZWxlY3RlZFJvd3MnLFxuICAgICAgICAnc2VsZWN0aW9uTW9kZScsXG4gICAgICAgICdzaG93VG9vbHRpcCcsXG4gICAgICAgICdzaG93VW5zY2hlZHVsZWRUYXNrcycsXG4gICAgICAgICdzbmFwJyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAnc3RhcnREYXRlJyxcbiAgICAgICAgJ3N0YXRlJyxcbiAgICAgICAgJ3N0YXRlU2V0dGluZ3MnLFxuICAgICAgICAnc3RvcmUnLFxuICAgICAgICAnc3VwcHJlc3NGaXQnLFxuICAgICAgICAndGFza3MnLFxuICAgICAgICAndGFza1N0b3JlJyxcbiAgICAgICAgJ3Rlcm1pbmFsSGlkZURlbGF5JyxcbiAgICAgICAgJ3Rlcm1pbmFsT2Zmc2V0JyxcbiAgICAgICAgJ3Rlcm1pbmFsU2hvd0RlbGF5JyxcbiAgICAgICAgJ3Rlcm1pbmFsU2l6ZScsXG4gICAgICAgICd0aWNrU2l6ZScsXG4gICAgICAgICd0aW1lUmFuZ2VzJyxcbiAgICAgICAgJ3RpbWVSZXNvbHV0aW9uJyxcbiAgICAgICAgJ3RpbWVab25lJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3RvZ2dsZVBhcmVudFRhc2tzT25DbGljaycsXG4gICAgICAgICd0b29scycsXG4gICAgICAgICd0b29sdGlwJyxcbiAgICAgICAgJ3Rvb2x0aXBUZW1wbGF0ZScsXG4gICAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgICAgJ3RyYW5zaXRpb25EdXJhdGlvbicsXG4gICAgICAgICd1c2VDb250ZXh0dWFsUmVjdXJyZW5jZVJ1bGVzJyxcbiAgICAgICAgJ3ZpZXdQcmVzZXQnLFxuICAgICAgICAndmlzaWJsZURhdGUnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAnd29ya2luZ1RpbWUnLFxuICAgICAgICAnem9vbUxldmVsJ1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IEdhbnR0QmFzZTtcblxuICAgIHByaXZhdGUgYnJ5bnR1bUNvbmZpZyA9IHtcbiAgICAgICAgYWRvcHQgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXBwZW5kVG8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHJlZiAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYW5ndWxhckNvbXBvbmVudCA6IHRoaXMsXG4gICAgICAgIGZlYXR1cmVzICAgICAgICAgOiB7fSxcbiAgICAgICAgbGlzdGVuZXJzICAgICAgICA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBDb25maWdzIG9ubHlcbiAgICBASW5wdXQoKSBhZG9wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYWxsb3dDcmVhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbGxvd0NyZWF0ZU9ubHlQYXJlbnQgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFuaW1hdGVGaWx0ZXJSZW1vdmFscyAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYW5pbWF0ZVJlbW92aW5nUm93cyAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcmlhRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXJpYUxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGF1dG9BZGp1c3RUaW1lQXhpcyAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXV0b0hlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBiYmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoR2FudHRDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSBib2R5Q2xzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGJ1YmJsZUV2ZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBidWZmZXJDb2VmICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgYnVmZmVyVGhyZXNob2xkICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNpYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58UGFuZWxDb2xsYXBzZXJDb25maWd8UGFuZWxDb2xsYXBzZXJPdmVybGF5Q29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY29udGVudEVsZW1lbnRDbHMgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb250ZXh0TWVudVRyaWdnZXJFdmVudCAgICAgICAgICAgICAgICEgOiAnY29udGV4dG1lbnUnfCdjbGljayd8J2RibGNsaWNrJztcbiAgICBASW5wdXQoKSBjcmVhdGlvblRvb2x0aXAgICAgICAgICAgICAgICAgICAgICAgICEgOiBUb29sdGlwQ29uZmlnO1xuICAgIEBJbnB1dCgpIGN5Y2xlUmVzb2x1dGlvblBvcHVwQ2xhc3MgICAgICAgICAgICAgISA6IHR5cGVvZiBDeWNsZVJlc29sdXRpb25Qb3B1cDtcbiAgICBASW5wdXQoKSBkYXRhRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdFJlZ2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRSZXNvdXJjZUltYWdlTmFtZSAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZXBlbmRlbmN5SWRGaWVsZCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVzdHJveVN0b3JlICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRpc2FibGVHcmlkQ29sdW1uSWRXYXJuaW5nICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNwbGF5U2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdDtcbiAgICBASW5wdXQoKSBkcmF3ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtzaWRlPzogJ3N0YXJ0J3wnbGVmdCd8J2VuZCd8J3JpZ2h0J3wndG9wJ3wnYm90dG9tJywgc2l6ZT86IHN0cmluZ3xudW1iZXIsIGlubGluZT86IGJvb2xlYW4sIGF1dG9DbG9zZTogeyBtb3VzZWRvd24/OiBib29sZWFufHN0cmluZywgZm9jdXNvdXQ/OiBib29sZWFufHN0cmluZywgbW91c2VvdXQ/OiBzdHJpbmcgfSwgYXV0b0Nsb3NlRGVsYXk/OiBudW1iZXJ9O1xuICAgIEBJbnB1dCgpIGR1cmF0aW9uRGlzcGxheVByZWNpc2lvbiAgICAgICAgICAgICAgISA6IG51bWJlcnxib29sZWFuO1xuICAgIEBJbnB1dCgpIGVsZW1lbnRBdHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPjtcbiAgICBASW5wdXQoKSBlbmFibGVEZWxldGVLZXkgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGVuYWJsZVJlY3VycmluZ0V2ZW50cyAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBkZWZhdWx0QWN0aW9uPzogJ3NpbmdsZSd8J2Z1dHVyZSdcbiAgICB9O1xuICAgIEBJbnB1dCgpIGVuYWJsZVN0aWNreSAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZW5hYmxlVGV4dFNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlbmFibGVUcmFuc2FjdGlvbmFsRmVhdHVyZXMgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZpbGxMYXN0Q29sdW1uICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZml4ZWRSb3dIZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmb290ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIGRvY2s/OiAndG9wJ3wncmlnaHQnfCdib3R0b20nfCdsZWZ0J3wnc3RhcnQnfCdlbmQnXG4gICAgICAgIGh0bWw/OiBzdHJpbmdcbiAgICAgICAgY2xzPzogc3RyaW5nXG4gICAgfXxzdHJpbmc7XG4gICAgQElucHV0KCkgZm9ybXVsYVByb3ZpZGVycyAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgRm9ybXVsYVByb3ZpZGVyQ29uZmlnPjtcbiAgICBASW5wdXQoKSBmdWxsUm93UmVmcmVzaCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGdldERhdGVDb25zdHJhaW50cyAgICAgICAgICAgICAgICAgICAgISA6ICh0YXNrUmVjb3JkOiBUYXNrTW9kZWwpID0+IERhdGVDb25zdHJhaW50O1xuICAgIEBJbnB1dCgpIGdldFJvd0hlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChnZXRSb3dIZWlnaHQ6IHsgcmVjb3JkOiBNb2RlbCB9KSA9PiBudW1iZXI7XG4gICAgQElucHV0KCkgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfGJvb2xlYW58UGFuZWxIZWFkZXI7XG4gICAgQElucHV0KCkgaGlkZUhvcml6b250YWxTY3JvbGxiYXIgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBob3ZlckNscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaWNvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBpZ25vcmVEb21FdmVudHNXaGlsZVNjcm9sbGluZyAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlnbm9yZVBhcmVudFJlYWRPbmx5ICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbGlzdGVuZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogR2FudHRCYXNlTGlzdGVuZXJzO1xuICAgIEBJbnB1dCgpIGxvYWRNYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xNYXNrQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgbG9hZE1hc2tEZWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBsb2FkTWFza0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnfE1hc2t8Ym9vbGVhbjtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG1hbmFnZWRFdmVudFNpemluZyAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbWFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtYXNrZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1heFRpbWVBeGlzVW5pdCAgICAgICAgICAgICAgICAgICAgICAgISA6IER1cmF0aW9uVW5pdDtcbiAgICBASW5wdXQoKSBtb25pdG9yUmVzaXplICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG5ld1Rhc2tEZWZhdWx0cyAgICAgICAgICAgICAgICAgICAgICAgISA6IFRhc2tNb2RlbENvbmZpZ3xvYmplY3R8KCgpID0+IFRhc2tNb2RlbENvbmZpZ3xvYmplY3QpO1xuICAgIEBJbnB1dCgpIG93bmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFdpZGdldHxhbnk7XG4gICAgQElucHV0KCkgcGFydG5lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogVGltZWxpbmVCYXNlO1xuICAgIEBJbnB1dCgpIHBsdWdpbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IEZ1bmN0aW9uW107XG4gICAgQElucHV0KCkgcHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZSAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZSAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHByZXZlbnRUb29sdGlwT25Ub3VjaCAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJvamVjdFByb2dyZXNzUmVwb3J0aW5nICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bGw7XG4gICAgQElucHV0KCkgcmVsYXlTdG9yZUV2ZW50cyAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXNpemFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgbWluV2lkdGg/OiBudW1iZXJcbiAgICAgICAgbWF4V2lkdGg/OiBudW1iZXJcbiAgICAgICAgbWluSGVpZ2h0PzogbnVtYmVyXG4gICAgICAgIG1heEhlaWdodD86IG51bWJlclxuICAgICAgICBoYW5kbGVzPzogb2JqZWN0XG4gICAgfTtcbiAgICBASW5wdXQoKSByZXNpemVUb0ZpdEluY2x1ZGVzSGVhZGVyICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlc291cmNlSW1hZ2VGb2xkZXJQYXRoICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZXNvdXJjZUltYWdlUGF0aCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZUxldmVscyAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgbnVtYmVyfHN0cmluZ3xSZXNwb25zaXZlTGV2ZWxDb25maWc+O1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBkZWxlZ2F0ZT86IHN0cmluZ1xuICAgICAgICBjb2xvcj86IHN0cmluZ1xuICAgICAgICByYWRpdXM/OiBudW1iZXJcbiAgICAgICAgY2xpcD86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgcm9vdEVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogU2hhZG93Um9vdHxIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBzY2hlZHVsaW5nSXNzdWVSZXNvbHV0aW9uUG9wdXBDbGFzcyAgICEgOiB0eXBlb2YgU2NoZWR1bGluZ0lzc3VlUmVzb2x1dGlvblBvcHVwO1xuICAgIEBJbnB1dCgpIHNjcm9sbGVyQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHR5cGVvZiBTY3JvbGxlcjtcbiAgICBASW5wdXQoKSBzY3JvbGxNYW5hZ2VyICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBTY3JvbGxNYW5hZ2VyQ29uZmlnfFNjcm9sbE1hbmFnZXI7XG4gICAgQElucHV0KCkgc2hvd0Nvc3RDb250cm9scyAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzaG93Q3JlYXRpb25Ub29sdGlwICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dEaXJ0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBkdXJpbmdFZGl0PzogYm9vbGVhblxuICAgICAgICBuZXdSZWNvcmQ/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSBzaG93TGFnSW5Ub29sdGlwICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dSZWN1cnJpbmdVSSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd1Rhc2tDb2xvclBpY2tlcnMgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzbmFwUmVsYXRpdmVUb0V2ZW50U3RhcnREYXRlICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsRXZlbnRzICAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBzdGF0ZUlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3RhdGVQcm92aWRlciAgICAgICAgICAgICAgICAgICAgICAgICAhIDogU3RhdGVQcm92aWRlcjtcbiAgICBASW5wdXQoKSBzdGlja3lIZWFkZXJzICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0cmlwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEdhbnR0Q29udGFpbmVySXRlbUNvbmZpZz47XG4gICAgQElucHV0KCkgc3ViR3JpZENvbmZpZ3MgICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgU3ViR3JpZENvbmZpZz47XG4gICAgQElucHV0KCkgc3luY01hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfE1hc2tDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB0YWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufFRhYkNvbmZpZztcbiAgICBASW5wdXQoKSB0YWJCYXJJdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXTtcbiAgICBASW5wdXQoKSB0YXNrUmVuZGVyZXIgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoZGV0YWlsOiB7IHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgcmVuZGVyRGF0YTogeyBjbHM6IERvbUNsYXNzTGlzdHxzdHJpbmcsIHN0eWxlOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPiwgd3JhcHBlckNsczogRG9tQ2xhc3NMaXN0fHN0cmluZywgaWNvbkNsczogRG9tQ2xhc3NMaXN0fHN0cmluZyB9IH0sIGluZGljYXRvcnM6IFRpbWVTcGFuW118VGltZVNwYW5Db25maWdbXSkgPT4gc3RyaW5nfERvbUNvbmZpZ3xEb21Db25maWdbXTtcbiAgICBASW5wdXQoKSB0YmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoR2FudHRDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB0ZXJtaW5hbENscyAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdGVybWluYWxTaWRlcyAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nW107XG4gICAgQElucHV0KCkgdGltZUF4aXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogVGltZUF4aXNDb25maWd8VGltZUF4aXM7XG4gICAgQElucHV0KCkgdWkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3BsYWluJ3wndG9vbGJhcid8c3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSB2aXNpYmxlWm9vbUZhY3RvciAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgd2Vla1N0YXJ0RGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB6b29tS2VlcHNPcmlnaW5hbFRpbWVzcGFuICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHpvb21Pbk1vdXNlV2hlZWwgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgem9vbU9uVGltZUF4aXNEb3VibGVDbGljayAgICAgICAgICAgICAhIDogYm9vbGVhbjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsbG93RHJvcE9uRXZlbnRCYXIgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFuaW1hdGVUcmVlTm9kZVRvZ2dsZSAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvICAgICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYXNzaWdubWVudHMgICAgICAgICAgICAgICAgICAgISA6IEFzc2lnbm1lbnRNb2RlbFtdfEFzc2lnbm1lbnRNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIGJhck1hcmdpbiAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgY2FsZW5kYXJzICAgICAgICAgICAgICAgICAgICAgISA6IENhbGVuZGFyTW9kZWxbXXxDYWxlbmRhck1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgY2FsbE9uRnVuY3Rpb25zICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2VsbEVsbGlwc2lzICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2xzICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY29sbGFwc2VkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBjb2x1bW5MaW5lcyAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb2x1bW5zICAgICAgICAgICAgICAgICAgICAgICAhIDogQ29sdW1uU3RvcmV8R2FudHRDb2x1bW5Db25maWdbXXxDb2x1bW5TdG9yZUNvbmZpZztcbiAgICBASW5wdXQoKSBjcmVhdGlvblRvb2x0aXBUZW1wbGF0ZSAgICAgICAhIDogKGRhdGE6IHsgc291cmNlOiBUaW1lU3BhbiwgdGFyZ2V0OiBUaW1lU3BhbiwgZnJvbVNpZGU6IHN0cmluZywgdG9TaWRlOiBzdHJpbmcsIHZhbGlkOiBib29sZWFuIH0pID0+IHN0cmluZ3xEb21Db25maWc7XG4gICAgQElucHV0KCkgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdFtdfE1vZGVsW118TW9kZWxDb25maWdbXTtcbiAgICBASW5wdXQoKSBkYXRhc2V0ICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgQElucHV0KCkgZGVwZW5kZW5jaWVzICAgICAgICAgICAgICAgICAgISA6IERlcGVuZGVuY3lNb2RlbFtdfERlcGVuZGVuY3lNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufCdpbmVydCc7XG4gICAgQElucHV0KCkgZGlzcGxheURhdGVGb3JtYXQgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBlbXB0eVRleHQgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfEVtcHR5VGV4dERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBlbmFibGVFdmVudEFuaW1hdGlvbnMgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlbmFibGVVbmRvUmVkb0tleXMgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlbmREYXRlICAgICAgICAgICAgICAgICAgICAgICAhIDogRGF0ZXxzdHJpbmc7XG4gICAgQElucHV0KCkgZXZlbnRDb2xvciAgICAgICAgICAgICAgICAgICAgISA6IEV2ZW50Q29sb3I7XG4gICAgQElucHV0KCkgZXZlbnRTdHlsZSAgICAgICAgICAgICAgICAgICAgISA6ICd0b25hbCd8J2ZpbGxlZCd8J2JvcmRlcmVkJ3wndHJhY2VkJ3wnb3V0bGluZWQnfCdpbmRlbnRlZCd8J2xpbmUnfCdkYXNoZWQnfCdtaW5pbWFsJ3wncm91bmRlZCd8J2NhbGVuZGFyJ3wnaW50ZXJkYXknfCdnYW50dCd8bnVsbDtcbiAgICBASW5wdXQoKSBleHRyYURhdGEgICAgICAgICAgICAgICAgICAgICAhIDogYW55O1xuICAgIEBJbnB1dCgpIGZpbGxUaWNrcyAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZsZXggICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGZvcmNlRml0ICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVGb290ZXJzICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVIZWFkZXJzICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVSb3dIb3ZlciAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5maW5pdGVTY3JvbGwgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW5wdXRGaWVsZEFsaWduICAgICAgICAgICAgICAgISA6ICdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgaW5zZXJ0QmVmb3JlICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRGaXJzdCAgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGtleU1hcCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+O1xuICAgIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24gICAgICAgICAgICAgICAgICEgOiAnYmVmb3JlJ3wnYWJvdmUnfCdhbGlnbi1iZWZvcmUnfCdhdXRvJ3xudWxsO1xuICAgIEBJbnB1dCgpIGxvbmdQcmVzc1RpbWUgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgbWFyZ2luICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4RGF0ZSAgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heEhlaWdodCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heFdpZHRoICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heFpvb21MZXZlbCAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgbWluRGF0ZSAgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pblpvb21MZXZlbCAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHJlc2VydmVTY3JvbGwgICAgICAgICAgICAgICAgISA6IFByZXNlcnZlU2Nyb2xsT3B0aW9uc3xib29sZWFuO1xuICAgIEBJbnB1dCgpIHByZXNldHMgICAgICAgICAgICAgICAgICAgICAgICEgOiBQcmVzZXRTdG9yZXxWaWV3UHJlc2V0Q29uZmlnW107XG4gICAgQElucHV0KCkgcHJvamVjdCAgICAgICAgICAgICAgICAgICAgICAgISA6IFByb2plY3RNb2RlbHxQcm9qZWN0TW9kZWxDb25maWd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlY3VycmVuY2VDb25maXJtYXRpb25Qb3B1cCAgICEgOiBSZWN1cnJlbmNlQ29uZmlybWF0aW9uUG9wdXBDb25maWd8UmVjdXJyZW5jZUNvbmZpcm1hdGlvblBvcHVwO1xuICAgIEBJbnB1dCgpIHJlbmRpdGlvbiAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPnxudWxsO1xuICAgIEBJbnB1dCgpIHJlc291cmNlcyAgICAgICAgICAgICAgICAgICAgICEgOiBSZXNvdXJjZU1vZGVsW118UmVzb3VyY2VNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIHJvd0hlaWdodCAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgcm93TGluZXMgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcnRsICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2Nyb2xsYWJsZSAgICAgICAgICAgICAgICAgICAgISA6IFNjcm9sbGVyfGJvb2xlYW58U2Nyb2xsZXJDb25maWc7XG4gICAgQElucHV0KCkgc2Nyb2xsVGFza0ludG9WaWV3T25DZWxsQ2xpY2sgISA6IGJvb2xlYW58QnJ5bnR1bVNjcm9sbE9wdGlvbnM7XG4gICAgQElucHV0KCkgc2VsZWN0aW9uTW9kZSAgICAgICAgICAgICAgICAgISA6IEdyaWRTZWxlY3Rpb25Nb2RlO1xuICAgIEBJbnB1dCgpIHNob3dUb29sdGlwICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dVbnNjaGVkdWxlZFRhc2tzICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNuYXAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNwYW4gICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc3RhcnREYXRlICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHN0YXRlU2V0dGluZ3MgICAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIHJlc3RvcmVVbmNvbmZpZ3VyZWRDb2x1bW5zPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgc3RvcmUgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFN0b3JlfFN0b3JlQ29uZmlnfEFqYXhTdG9yZXxBamF4U3RvcmVDb25maWc7XG4gICAgQElucHV0KCkgc3VwcHJlc3NGaXQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdGFza3MgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFRhc2tNb2RlbFtdfFRhc2tNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIHRhc2tTdG9yZSAgICAgICAgICAgICAgICAgICAgICEgOiBUYXNrU3RvcmV8VGFza1N0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRlcm1pbmFsSGlkZURlbGF5ICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgdGVybWluYWxPZmZzZXQgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB0ZXJtaW5hbFNob3dEZWxheSAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHRlcm1pbmFsU2l6ZSAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHRpY2tTaXplICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgdGltZVJhbmdlcyAgICAgICAgICAgICAgICAgICAgISA6IFRpbWVTcGFuW118VGltZVNwYW5Db25maWdbXTtcbiAgICBASW5wdXQoKSB0aW1lUmVzb2x1dGlvbiAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBpbmNyZW1lbnQ/OiBudW1iZXJcbiAgICAgICAgdW5pdD86IER1cmF0aW9uVW5pdFxuICAgIH18bnVtYmVyO1xuICAgIEBJbnB1dCgpIHRpbWVab25lICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIHRpdGxlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdG9nZ2xlUGFyZW50VGFza3NPbkNsaWNrICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdG9vbHMgICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIFRvb2x8VG9vbENvbmZpZz58bnVsbHxSZWNvcmQ8c3RyaW5nLCBUb29sPnxSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPjtcbiAgICBASW5wdXQoKSB0b29sdGlwVGVtcGxhdGUgICAgICAgICAgICAgICAhIDogKGRlcGVuZGVuY3k6IERlcGVuZGVuY3lCYXNlTW9kZWwpID0+IHN0cmluZ3xEb21Db25maWc7XG4gICAgQElucHV0KCkgdHJhbnNpdGlvbiAgICAgICAgICAgICAgICAgICAgISA6IHtcbiAgICAgICAgaW5zZXJ0UmVjb3JkPzogYm9vbGVhblxuICAgICAgICByZW1vdmVSZWNvcmQ/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZUNvbHVtbj86IGJvb2xlYW5cbiAgICAgICAgZXhwYW5kQ29sbGFwc2VDb2x1bW4/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZVJlZ2lvbj86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlVHJlZU5vZGU/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZUdyb3VwPzogYm9vbGVhblxuICAgICAgICBmaWx0ZXJSZW1vdmFsPzogYm9vbGVhblxuICAgICAgICByZW1vdmVFdmVudD86IGJvb2xlYW5cbiAgICAgICAgY2hhbmdlRXZlbnQ/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uRHVyYXRpb24gICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHVzZUNvbnRleHR1YWxSZWN1cnJlbmNlUnVsZXMgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHZpZXdQcmVzZXQgICAgICAgICAgICAgICAgICAgICEgOiBWaWV3UHJlc2V0fFZpZXdQcmVzZXRDb25maWd8c3RyaW5nO1xuICAgIEBJbnB1dCgpIHZpc2libGVEYXRlICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8RGF0ZXxWaXNpYmxlRGF0ZTtcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSB3b3JraW5nVGltZSAgICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBmcm9tRGF5PzogbnVtYmVyXG4gICAgICAgIHRvRGF5PzogbnVtYmVyXG4gICAgICAgIGZyb21Ib3VyPzogbnVtYmVyXG4gICAgICAgIHRvSG91cj86IG51bWJlclxuICAgIH07XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBjYWxlbmRhck1hbmFnZXJTdG9yZSAhIDogQ2FsZW5kYXJNYW5hZ2VyU3RvcmU7XG4gICAgQElucHV0KCkgZm9jdXNWaXNpYmxlICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGFzQ2hhbmdlcyAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgb3JpZ2luYWxTdG9yZSAgICAgICAgISA6IFN0b3JlO1xuICAgIEBJbnB1dCgpIHBhcmVudCAgICAgICAgICAgICAgICEgOiBXaWRnZXQ7XG4gICAgQElucHV0KCkgc2Nyb2xsTGVmdCAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzY3JvbGxUb3AgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHNjcm9sbFggICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRDZWxsICAgICAgICAgISA6IEdyaWRMb2NhdGlvbnxHcmlkTG9jYXRpb25Db25maWc7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRDZWxscyAgICAgICAgISA6IEdyaWRMb2NhdGlvbltdfEdyaWRMb2NhdGlvbkNvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkUmVjb3JkICAgICAgICEgOiBNb2RlbDtcbiAgICBASW5wdXQoKSBzZWxlY3RlZFJlY29yZHMgICAgICAhIDogTW9kZWxbXXxudW1iZXJbXTtcbiAgICBASW5wdXQoKSBzZWxlY3RlZFJvd3MgICAgICAgICAhIDogTW9kZWxbXXxudW1iZXJbXTtcbiAgICBASW5wdXQoKSBzdGF0ZSAgICAgICAgICAgICAgICAhIDogVGltZWxpbmVTdGF0ZUluZm87XG4gICAgQElucHV0KCkgdG9vbHRpcCAgICAgICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnO1xuICAgIEBJbnB1dCgpIHpvb21MZXZlbCAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBGZWF0dXJlc1xuICAgIEBJbnB1dCgpIGFpRmlsdGVyRmVhdHVyZSAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QUlGaWx0ZXJ8QUlGaWx0ZXJDb25maWc7XG4gICAgQElucHV0KCkgYmFzZWxpbmVzRmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xCYXNlbGluZXN8QmFzZWxpbmVzQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNlbGxDb3B5UGFzdGVGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbENvcHlQYXN0ZXxDZWxsQ29weVBhc3RlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNlbGxFZGl0RmVhdHVyZSAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbEVkaXR8Q2VsbEVkaXRDb25maWc7XG4gICAgQElucHV0KCkgY2VsbE1lbnVGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsTWVudXxDZWxsTWVudUNvbmZpZztcbiAgICBASW5wdXQoKSBjZWxsVG9vbHRpcEZlYXR1cmUgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxUb29sdGlwfENlbGxUb29sdGlwQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNoYXJ0c0ZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2hhcnRzfENoYXJ0c0NvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5BdXRvV2lkdGhGZWF0dXJlICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtbkF1dG9XaWR0aHxDb2x1bW5BdXRvV2lkdGhDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uRHJhZ1Rvb2xiYXJGZWF0dXJlICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5EcmFnVG9vbGJhcnxDb2x1bW5EcmFnVG9vbGJhckNvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5MaW5lc0ZlYXR1cmUgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtbkxpbmVzfENvbHVtbkxpbmVzQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbHVtblBpY2tlckZlYXR1cmUgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUGlja2VyfENvbHVtblBpY2tlckNvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5SZW5hbWVGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlbmFtZXxDb2x1bW5SZW5hbWVDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUmVvcmRlckZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZW9yZGVyfENvbHVtblJlb3JkZXJDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUmVzaXplRmVhdHVyZSAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZXNpemV8Q29sdW1uUmVzaXplQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNyaXRpY2FsUGF0aHNGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q3JpdGljYWxQYXRoc3xDcml0aWNhbFBhdGhzQ29uZmlnO1xuICAgIEBJbnB1dCgpIGRlcGVuZGVuY2llc0ZlYXR1cmUgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RGVwZW5kZW5jaWVzfERlcGVuZGVuY2llc0NvbmZpZztcbiAgICBASW5wdXQoKSBkZXBlbmRlbmN5RWRpdEZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfERlcGVuZGVuY3lFZGl0fERlcGVuZGVuY3lFZGl0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGV2ZW50RmlsdGVyRmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RXZlbnRGaWx0ZXJ8RXZlbnRGaWx0ZXJDb25maWc7XG4gICAgQElucHV0KCkgZXZlbnRTZWdtZW50c0ZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xFdmVudFNlZ21lbnRzfEV2ZW50U2VnbWVudHNDb25maWc7XG4gICAgQElucHV0KCkgZXhjZWxFeHBvcnRlckZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcmlkRXhjZWxFeHBvcnRlcnxHcmlkRXhjZWxFeHBvcnRlckNvbmZpZztcbiAgICBASW5wdXQoKSBmaWxlRHJvcEZlYXR1cmUgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbGVEcm9wfEZpbGVEcm9wQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbGxIYW5kbGVGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsbEhhbmRsZXxGaWxsSGFuZGxlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbHRlckZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyfEZpbHRlckNvbmZpZztcbiAgICBASW5wdXQoKSBmaWx0ZXJCYXJGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbHRlckJhcnxGaWx0ZXJCYXJDb25maWc7XG4gICAgQElucHV0KCkgZ3JvdXBGZWF0dXJlICAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcm91cHxHcm91cENvbmZpZztcbiAgICBASW5wdXQoKSBncm91cFN1bW1hcnlGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRHcm91cFN1bW1hcnl8R3JpZEdyb3VwU3VtbWFyeUNvbmZpZztcbiAgICBASW5wdXQoKSBoZWFkZXJNZW51RmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlck1lbnV8SGVhZGVyTWVudUNvbmZpZztcbiAgICBASW5wdXQoKSBoZWFkZXJab29tRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlclpvb218SGVhZGVyWm9vbUNvbmZpZztcbiAgICBASW5wdXQoKSBpbmRpY2F0b3JzRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEluZGljYXRvcnN8SW5kaWNhdG9yc0NvbmZpZztcbiAgICBASW5wdXQoKSBsYWJlbHNGZWF0dXJlICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfExhYmVsc3xMYWJlbHNDb25maWc7XG4gICAgQElucHV0KCkgbG9ja1Jvd3NGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcmlkTG9ja1Jvd3N8R3JpZExvY2tSb3dzQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1lcmdlQ2VsbHNGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TWVyZ2VDZWxsc3xNZXJnZUNlbGxzQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1zcEV4cG9ydEZlYXR1cmUgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TXNwRXhwb3J0fE1zcEV4cG9ydENvbmZpZztcbiAgICBASW5wdXQoKSBub25Xb3JraW5nVGltZUZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfE5vbldvcmtpbmdUaW1lfE5vbldvcmtpbmdUaW1lQ29uZmlnO1xuICAgIEBJbnB1dCgpIHBhbkZlYXR1cmUgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UGFufFBhbkNvbmZpZztcbiAgICBASW5wdXQoKSBwYXJlbnRBcmVhRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBhcmVudEFyZWF8UGFyZW50QXJlYUNvbmZpZztcbiAgICBASW5wdXQoKSBwZGZFeHBvcnRGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBkZkV4cG9ydHxQZGZFeHBvcnRDb25maWc7XG4gICAgQElucHV0KCkgcGVyY2VudEJhckZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQZXJjZW50QmFyfFBlcmNlbnRCYXJDb25maWc7XG4gICAgQElucHV0KCkgcGluQ29sdW1uc0ZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQaW5Db2x1bW5zfFBpbkNvbHVtbnNDb25maWc7XG4gICAgQElucHV0KCkgcHJpbnRGZWF0dXJlICAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcmludHxQcmludENvbmZpZztcbiAgICBASW5wdXQoKSBwcm9ncmVzc0xpbmVGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFByb2dyZXNzTGluZXxQcm9ncmVzc0xpbmVDb25maWc7XG4gICAgQElucHV0KCkgcHJvamVjdEVkaXRGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcm9qZWN0RWRpdHxQcm9qZWN0RWRpdENvbmZpZztcbiAgICBASW5wdXQoKSBwcm9qZWN0TGluZXNGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFByb2plY3RMaW5lc3xQcm9qZWN0TGluZXNDb25maWc7XG4gICAgQElucHV0KCkgcXVpY2tGaW5kRmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xRdWlja0ZpbmR8UXVpY2tGaW5kQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJlZ2lvblJlc2l6ZUZlYXR1cmUgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UmVnaW9uUmVzaXplfFJlZ2lvblJlc2l6ZUNvbmZpZztcbiAgICBASW5wdXQoKSByb2xsdXBzRmVhdHVyZSAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvbGx1cHN8Um9sbHVwc0NvbmZpZztcbiAgICBASW5wdXQoKSByb3dDb3B5UGFzdGVGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0NvcHlQYXN0ZXxSb3dDb3B5UGFzdGVDb25maWc7XG4gICAgQElucHV0KCkgcm93RWRpdEZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dFZGl0fFJvd0VkaXRDb25maWc7XG4gICAgQElucHV0KCkgcm93RXhwYW5kZXJGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dFeHBhbmRlcnxSb3dFeHBhbmRlckNvbmZpZztcbiAgICBASW5wdXQoKSByb3dSZW9yZGVyRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd1Jlb3JkZXJ8Um93UmVvcmRlckNvbmZpZztcbiAgICBASW5wdXQoKSByb3dSZXNpemVGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRSb3dSZXNpemV8R3JpZFJvd1Jlc2l6ZUNvbmZpZztcbiAgICBASW5wdXQoKSBzY2hlZHVsZU1lbnVGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNjaGVkdWxlTWVudXxTY2hlZHVsZU1lbnVDb25maWc7XG4gICAgQElucHV0KCkgc2NoZWR1bGVUb29sdGlwRmVhdHVyZSAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTY2hlZHVsZVRvb2x0aXB8U2NoZWR1bGVUb29sdGlwQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNjcm9sbEJ1dHRvbnNGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U2Nyb2xsQnV0dG9uc3xTY3JvbGxCdXR0b25zQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNlYXJjaEZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U2VhcmNofFNlYXJjaENvbmZpZztcbiAgICBASW5wdXQoKSBzb3J0RmVhdHVyZSAgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNvcnR8U29ydENvbmZpZztcbiAgICBASW5wdXQoKSBzcGxpdEZlYXR1cmUgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyaWRTcGxpdHxHcmlkU3BsaXRDb25maWc7XG4gICAgQElucHV0KCkgc3RpY2t5Q2VsbHNGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdGlja3lDZWxsc3xTdGlja3lDZWxsc0NvbmZpZztcbiAgICBASW5wdXQoKSBzdHJpcGVGZWF0dXJlICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN0cmlwZXxTdHJpcGVDb25maWc7XG4gICAgQElucHV0KCkgc3VtbWFyeUZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdW1tYXJ5fFN1bW1hcnlDb25maWc7XG4gICAgQElucHV0KCkgdGFza0NvcHlQYXN0ZUZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrQ29weVBhc3RlfFRhc2tDb3B5UGFzdGVDb25maWc7XG4gICAgQElucHV0KCkgdGFza0RyYWdGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrRHJhZ3xUYXNrRHJhZ0NvbmZpZztcbiAgICBASW5wdXQoKSB0YXNrRHJhZ0NyZWF0ZUZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRhc2tEcmFnQ3JlYXRlfFRhc2tEcmFnQ3JlYXRlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhc2tFZGl0RmVhdHVyZSAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza0VkaXR8VGFza0VkaXRDb25maWc7XG4gICAgQElucHV0KCkgdGFza01lbnVGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrTWVudXxUYXNrTWVudUNvbmZpZztcbiAgICBASW5wdXQoKSB0YXNrTm9uV29ya2luZ1RpbWVGZWF0dXJlICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRhc2tOb25Xb3JraW5nVGltZXxUYXNrTm9uV29ya2luZ1RpbWVDb25maWc7XG4gICAgQElucHV0KCkgdGFza1Jlc2l6ZUZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrUmVzaXplfFRhc2tSZXNpemVDb25maWc7XG4gICAgQElucHV0KCkgdGFza1NlZ21lbnREcmFnRmVhdHVyZSAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrU2VnbWVudERyYWd8VGFza1NlZ21lbnREcmFnQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhc2tTZWdtZW50UmVzaXplRmVhdHVyZSAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VGFza1NlZ21lbnRSZXNpemV8VGFza1NlZ21lbnRSZXNpemVDb25maWc7XG4gICAgQElucHV0KCkgdGFza1Rvb2x0aXBGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUYXNrVG9vbHRpcHxUYXNrVG9vbHRpcENvbmZpZztcbiAgICBASW5wdXQoKSB0aW1lQXhpc0hlYWRlck1lbnVGZWF0dXJlICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRpbWVBeGlzSGVhZGVyTWVudXxUaW1lQXhpc0hlYWRlck1lbnVDb25maWc7XG4gICAgQElucHV0KCkgdGltZWxpbmVDaGFydEZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUaW1lbGluZUNoYXJ0fFRpbWVsaW5lQ2hhcnRDb25maWc7XG4gICAgQElucHV0KCkgdGltZVJhbmdlc0ZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUaW1lUmFuZ2VzfFRpbWVSYW5nZXNDb25maWc7XG4gICAgQElucHV0KCkgdGltZVNwYW5IaWdobGlnaHRGZWF0dXJlICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUaW1lU3BhbkhpZ2hsaWdodHxUaW1lU3BhbkhpZ2hsaWdodENvbmZpZztcbiAgICBASW5wdXQoKSB0cmVlRmVhdHVyZSAgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWV8VHJlZUNvbmZpZztcbiAgICBASW5wdXQoKSB0cmVlR3JvdXBGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWVHcm91cHxUcmVlR3JvdXBDb25maWc7XG4gICAgQElucHV0KCkgdmVyc2lvbnNGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xWZXJzaW9uc3xWZXJzaW9uc0NvbmZpZztcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IGFmdGVyIGEgZGVwZW5kZW5jeSBkcmFnIGNyZWF0aW9uIG9wZXJhdGlvbiBmaW5pc2hlZCwgbm8gbWF0dGVyIHRvIG91dGNvbWVcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGV2ZW50LnNvdXJjZSBUaGUgc291cmNlIHRhc2tcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgdGFza1xuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkRlcGVuZGVuY3lCYXNlTW9kZWx9IGV2ZW50LmRlcGVuZGVuY3kgVGhlIGNyZWF0ZWQgZGVwZW5kZW5jeVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkFmdGVyRGVwZW5kZW5jeUNyZWF0ZURyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuLCB0YXJnZXQ6IFRpbWVTcGFuLCBkZXBlbmRlbmN5OiBEZXBlbmRlbmN5QmFzZU1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYWZ0ZXIgYSBkZXBlbmRlbmN5IGlzIHN1Y2Nlc3NmdWxseSBzYXZlZCB1c2luZyB0aGVcbiAgICAgKiBkZXBlbmRlbmN5IGVkaXQgcG9wdXBcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyIGluc3RhbmNlIG9yIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsfSBldmVudC5kZXBlbmRlbmN5UmVjb3JkIFRoZSBkZXBlbmRlbmN5IGFib3V0IHRvIGJlIHNhdmVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJEZXBlbmRlbmN5U2F2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYXQgdGhlIGVuZCBvZiB0aGUgZHJhZyBjcmVhdGUgZ2VzdHVyZSB3aGV0aGVyIG9yIG5vdFxuICAgICAqIGEgdGFzayB3YXMgc2NoZWR1bGVkIGJ5IHRoZSBnZXN0dXJlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnByb3h5RWxlbWVudCBUaGUgZWxlbWVudCBzaG93aW5nIHRoZSBkcmFnIGNyZWF0aW9uIHpvbmUuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJEcmFnQ3JlYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgcHJveHlFbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgYWZ0ZXIgZWRpdG9yIGlzIGNsb3NlZCBieSBhbnkgYWN0aW9uIC0gc2F2ZSwgZGVsZXRlIG9yIGNhbmNlbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXJcbiAgICAgKiBAcGFyYW0geydzYXZlJywnZGVsZXRlJywnY2FuY2VsJ30gZXZlbnQuYWN0aW9uIFRoZSBhY3Rpb24gdGhhdCB3YXMgdGFrZW4gdG8gZW5kIHRoZSBlZGl0LiBPbmUgb2YgJ3NhdmUnLCAnZGVsZXRlJyBvciAnY2FuY2VsJ1xuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmZlYXR1cmUuRXZlbnRFZGl0fSBldmVudC5ldmVudEVkaXQgVGhlIGV2ZW50RWRpdCBmZWF0dXJlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgVGhlIHJlY29yZCB0aGF0IGhhcyBiZWVuIGVkaXRlZC5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJSZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBUaGUgUmVzb3VyY2UgcmVjb3JkIGZvciB0aGUgZXZlbnQuIElmIHRoZSBldmVudCBpcyBiZWluZyBjcmVhdGVkLCBpdCB3aWxsIG5vdCBjb250YWluIGEgcmVzb3VyY2UsIHNvIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcmVzb3VyY2UgdGhlIGV2ZW50IGlzIGJlaW5nIGNyZWF0ZWQgZm9yLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmV2ZW50RWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCByZXByZXNlbnRzIHRoZSBldmVudCBpbiB0aGUgc2NoZWR1bGVyIGRpc3BsYXkuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Qb3B1cH0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3JcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BZnRlckV2ZW50RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBhY3Rpb246ICdzYXZlJ3wnZGVsZXRlJ3wnY2FuY2VsJywgZXZlbnRFZGl0OiBFdmVudEVkaXQsIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgZWRpdG9yOiBQb3B1cCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGluc3RhbmNlIGFmdGVyIGFuIGV2ZW50IHJlY29yZCBpcyBzYXZlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby52aWV3LlNjaGVkdWxlclByb30gZXZlbnQuc291cmNlIFRoZSBTY2hlZHVsZXIgUHJvIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgVGhlIGV2ZW50IHJlY29yZCBhYm91dCB0byBiZSBzYXZlZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLndpZGdldC5UYXNrRWRpdG9yQmFzZX0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3Igd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJFdmVudFNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIGVkaXRvcjogVGFza0VkaXRvckJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgd2lkZ2V0IGluc3RhbmNlIGFmdGVyIHByb2plY3QgZWRpdGluZyBpcyBmaW5pc2hlZCBieSBhcHBseWluZyBjaGFuZ2VzIG9yXG4gICAgICogY2FuY2VsbGluZyB0aGVtLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlByb2plY3RNb2RlbH0gZXZlbnQucHJvamVjdFJlY29yZCBUaGUgZWRpdGVkIHByb2plY3QgcmVjb3JkXG4gICAgICogQHBhcmFtIHtHYW50dC53aWRnZXQuUHJvamVjdEVkaXRvcn0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3Igd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJQcm9qZWN0RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHByb2plY3RSZWNvcmQ6IFByb2plY3RNb2RlbCwgZWRpdG9yOiBQcm9qZWN0RWRpdG9yIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdpZGdldCBpbnN0YW5jZSBhZnRlciBhIHByb2plY3QgaXMgc2F2ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5Qcm9qZWN0TW9kZWx9IGV2ZW50LnByb2plY3RSZWNvcmQgVGhlIHByb2plY3QgYWJvdXQgdG8gYmUgc2F2ZWRcbiAgICAgKiBAcGFyYW0ge0dhbnR0LndpZGdldC5Qcm9qZWN0RWRpdG9yfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvciB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BZnRlclByb2plY3RTYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgcHJvamVjdFJlY29yZDogUHJvamVjdE1vZGVsLCBlZGl0b3I6IFByb2plY3RFZGl0b3IgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYWZ0ZXIgYSB0YXNrIGRyb3AsIHJlZ2FyZGxlc3MgaWYgdGhlIGRyb3AgdmFsaWRpdHlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbFtdfSBldmVudC50YXNrUmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudmFsaWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BZnRlclRhc2tEcm9wOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZHM6IFRhc2tNb2RlbFtdLCB2YWxpZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGluc3RhbmNlIGFmdGVyIHRhc2sgZWRpdGluZyBpcyBmaW5pc2hlZCBieSBhcHBseWluZyBjaGFuZ2VzLCBjYW5jZWxsaW5nIHRoZW1cbiAgICAgKiBvciBkZWxldGluZyB0aGUgdGFzayByZWNvcmQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC50YXNrUmVjb3JkIFRhc2sgcmVjb3JkIHVzZWQgaW4gdGhlIHRhc2sgZWRpdG9yXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ud2lkZ2V0LlRhc2tFZGl0b3JCYXNlfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvciB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25BZnRlclRhc2tFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXJQcm8sIHRhc2tSZWNvcmQ6IEV2ZW50TW9kZWwsIGVkaXRvcjogVGFza0VkaXRvckJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBpbnN0YW5jZSBhZnRlciBhIHRhc2sgaXMgc2F2ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8udmlldy5TY2hlZHVsZXJQcm99IGV2ZW50LnNvdXJjZSBUaGUgU2NoZWR1bGVyIFBybyBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIHRhc2sgYWJvdXQgdG8gYmUgc2F2ZWRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby53aWRnZXQuVGFza0VkaXRvckJhc2V9IGV2ZW50LmVkaXRvciBUaGUgZWRpdG9yIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkFmdGVyVGFza1NhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgdGFza1JlY29yZDogRXZlbnRNb2RlbCwgZWRpdG9yOiBUYXNrRWRpdG9yQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBhZnRlciBhIHRhc2sgZHJvcCwgcmVnYXJkbGVzcyBpZiB0aGUgZHJvcCB2YWxpZGl0eVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsW119IGV2ZW50LnRhc2tSZWNvcmRzIERyb3BwZWQgc2VnbWVudHNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbGlkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJUYXNrU2VnbWVudERyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkczogVGFza01vZGVsW10sIHZhbGlkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYW4gYXNzaWdubWVudCBpcyByZW1vdmVkLiBDYW4gYmUgdHJpZ2dlcmVkIGJ5IHVzZXIgcHJlc3NpbmcgW0RFTEVURV0gb3IgW0JBQ0tTUEFDRV0gb3JcbiAgICAgKiBieSB0aGUgZXZlbnQgZWRpdG9yLiBDYW4gZm9yIGV4YW1wbGUgYmUgdXNlZCB0byBkaXNwbGF5IGEgY3VzdG9tIGRpYWxvZyB0byBjb25maXJtIGRlbGV0aW9uLCBpbiB3aGljaFxuICAgICAqIGNhc2UgcmVjb3JkcyBzaG91bGQgYmUgXCJtYW51YWxseVwiIHJlbW92ZWQgYWZ0ZXIgY29uZmlybWF0aW9uOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZUFzc2lnbm1lbnREZWxldGUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckFzc2lnbm1lbnRNb2RlbFtdfSBldmVudC5hc3NpZ25tZW50UmVjb3JkcyBUaGUgYXNzaWdubWVudCByZWNvcmRzIGFib3V0IHRvIGJlIGRlbGV0ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dCBBZGRpdGlvbmFsIHJlbW92YWwgY29udGV4dDpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBldmVudC5jb250ZXh0LmZpbmFsaXplIEZ1bmN0aW9uIHRvIGNhbGwgdG8gZmluYWxpemUgdGhlIHJlbW92YWwuIFVzZWQgdG8gYXN5bmNocm9ub3VzbHkgZGVjaWRlIHRvIHJlbW92ZSB0aGUgcmVjb3JkcyBvciBub3QuIFByb3ZpZGUgYGZhbHNlYCB0byB0aGUgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgcmVtb3ZhbC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQuZmluYWxpemUucmVtb3ZlUmVjb3JkcyBQcm92aWRlIGBmYWxzZWAgdG8gdGhlIGZ1bmN0aW9uIHRvIHByZXZlbnQgdGhlIHJlbW92YWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQXNzaWdubWVudERlbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBhc3NpZ25tZW50UmVjb3JkczogU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsW10sIGNvbnRleHQ6IHsgZmluYWxpemU6IHsgcmVtb3ZlUmVjb3Jkcz86IGJvb2xlYW4gfSB9IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgY2VsbCBlZGl0aW5nIGlzIGNhbmNlbGVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGNhbmNlbGxhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2FuY2VsQ2VsbEVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGVkaXRvckNvbnRleHQ6IEdyaWRMb2NhdGlvbiB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIHJvdyBlZGl0aW5nIGlzIGNhbmNlbGVkLCByZXR1cm4gZmFsc2UgdG8gc2lnbmFsIHRoYXQgdGhlIHZhbHVlIGlzIGludmFsaWQgYW5kIGVkaXRpbmcgc2hvdWxkIG5vdCBiZSBmaW5hbGl6ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlQ2FuY2VsUm93RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUYXJnZXQgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDYW5jZWxSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgZWRpdGluZyBzdGFydHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZWRpdGluZ1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q2VsbEVkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2VsbEVkaXRTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGRlbGV0aW5nIGEgcmFuZ2Ugb2Ygc2VsZWN0ZWQgY2VsbCB2YWx1ZXMgYnkgcHJlc3NpbmcgYEJhY2tzcGFjZWAgb3IgYERlbGBcbiAgICAgKiBidXR0b25zIHdoaWxlIFthdXRvRWRpdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbEVkaXQjY29uZmlnLWF1dG9FZGl0KSBpcyBzZXQgdG8gYHRydWVgLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGVkaXRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHsoR3JpZC51dGlsLkdyaWRMb2NhdGlvbnxDb3JlLmRhdGEuTW9kZWwpW119IGV2ZW50LmdyaWRTZWxlY3Rpb24gQW4gYXJyYXkgb2YgY2VsbCBzZWxlY3RvcnMgb3IgcmVjb3JkcyB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2YWx1ZXMgZGVsZXRlZCAodGhlIHJlY29yZHMgdGhlbXNlbHZlcyB3aWxsIG5vdCBnZXQgZGVsZXRlZCwgb25seSB2aXNpYmxlIGNvbHVtbiB2YWx1ZXMpLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNlbGxSYW5nZURlbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZ3JpZFNlbGVjdGlvbjogKEdyaWRMb2NhdGlvbnxNb2RlbClbXSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGZvciBlYWNoIHNlbGVjdGVkIHJlY29yZCBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGVkaXRpbmcgYSByYW5nZSBvZiBzZWxlY3RlZCBjZWxsIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIEN1cnJlbnQgc2VsZWN0ZWQgcmVjb3JkIGZyb20gdGhlIHJhbmdlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmZpZWxkIFRoZSBmaWVsZCBiZWluZyBjaGFuZ2VkXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50LnZhbHVlIFRoZSB2YWx1ZSBiZWluZyBzZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDZWxsUmFuZ2VFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCwgZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgcHJpb3IgdG8gc3RhcnRpbmcgYSBjb2x1bW4gZHJhZyBnZXN0dXJlLiBUaGUgZHJhZyBpcyBjYW5jZWxlZCBpZiBhIGxpc3RlbmVyIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGRyYWdnZWQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtbkRyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGV2ZW50OiBFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiBpcyBkcm9wcGVkLCBhbmQgeW91IGNhbiByZXR1cm4gZmFsc2UgZnJvbSBhIGxpc3RlbmVyIHRvIGFib3J0IHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuaW5zZXJ0QmVmb3JlIFRoZSBjb2x1bW4gYmVmb3JlIHdoaWNoIHRoZSBkcmFnZ2VkIGNvbHVtbiB3aWxsIGJlIGluc2VydGVkLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5uZXdQYXJlbnQgVGhlIG5ldyBwYXJlbnQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5yZWdpb24gVGhlIHJlZ2lvbiB3aGVyZSB0aGUgY29sdW1uIHdhcyBkcm9wcGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtbkRyb3BGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGluc2VydEJlZm9yZTogQ29sdW1uLCBuZXdQYXJlbnQ6IENvbHVtbiwgZXZlbnQ6IEV2ZW50LCByZWdpb246IHN0cmluZyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgcHJpb3IgdG8gc3RhcnRpbmcgYSBjb2x1bW4gcmVzaXplIGdlc3R1cmUuIFRoZSByZXNpemUgaXMgY2FuY2VsZWQgaWYgYSBsaXN0ZW5lciByZXR1cm5zXG4gICAgICogYGZhbHNlYC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDb2x1bW5SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBkb21FdmVudDogRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGEgY29weSBhY3Rpb24gaXMgcGVyZm9ybWVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbHMgVGhlIGNlbGxzIGFib3V0IHRvIGJlIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZGF0YSBUaGUgc3RyaW5nIGRhdGEgYWJvdXQgdG8gYmUgY29waWVkIG9yIGN1dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuaXNDdXQgYHRydWVgIGlmIHRoaXMgaXMgYSBjdXQgYWN0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmVudGl0eU5hbWUgJ2NlbGwnIHRvIGRpc3Rpbmd1aXNoIHRoaXMgZXZlbnQgZnJvbSBvdGhlciBiZWZvcmVDb3B5IGV2ZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvcHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNlbGxzOiBHcmlkTG9jYXRpb25bXSwgZGF0YTogc3RyaW5nLCBpc0N1dDogYm9vbGVhbiwgZW50aXR5TmFtZTogc3RyaW5nIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBDU1YgZXhwb3J0IHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIHRoZSBleHBvcnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RXhwb3J0Q29uZmlnfSBldmVudC5jb25maWcgRXhwb3J0IGNvbmZpZ1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1uW119IGV2ZW50LmNvbHVtbnMgQW4gYXJyYXkgb2YgY29sdW1ucyB0byBleHBvcnRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5yb3dzIEFuIGFycmF5IG9mIHJlY29yZHMgdG8gZXhwb3J0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmxpbmVEZWxpbWl0ZXIgVGhlIENTViBkZWxpbWl0ZXIgdG8gc2VwYXJhdGUgbGluZXNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY29sdW1uRGVsaW1pdGVyIFRoZSBDU1YgZGVsaW1pdGVyIHRvIHNlcGFyYXRlIHZhbHVlcyBvbiBvbmUgbGluZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNTVkV4cG9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNvbmZpZzogRXhwb3J0Q29uZmlnLCBjb2x1bW5zOiBDb2x1bW5bXSwgcm93czogTW9kZWxbXSwgbGluZURlbGltaXRlcjogc3RyaW5nLCBjb2x1bW5EZWxpbWl0ZXI6IHN0cmluZyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBiZWZvcmUgYSBkZXBlbmRlbmN5IGlzIGFkZGVkIGZyb20gdGhlIGRlcGVuZGVuY3lcbiAgICAgKiBlZGl0IHBvcHVwXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlciBvciBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmZlYXR1cmUuU2NoZWR1bGVyRGVwZW5kZW5jeUVkaXR9IGV2ZW50LmRlcGVuZGVuY3lFZGl0IFRoZSBkZXBlbmRlbmN5IGVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVJlY29yZCBUaGUgZGVwZW5kZW5jeSBhYm91dCB0byBiZSBhZGRlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlcGVuZGVuY3lBZGQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeUVkaXQ6IFNjaGVkdWxlckRlcGVuZGVuY3lFZGl0LCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlci9HYW50dCBiZWZvcmUgYSBkZXBlbmRlbmN5IGNyZWF0aW9uIGRyYWcgb3BlcmF0aW9uIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG9cbiAgICAgKiBwcmV2ZW50IGl0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC5zb3VyY2UgVGhlIHNvdXJjZSB0YXNrXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVwZW5kZW5jeUNyZWF0ZURyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBTY2hlZHVsZXIvR2FudHQgd2hlbiBhIGRlcGVuZGVuY3kgZHJhZyBjcmVhdGlvbiBvcGVyYXRpb24gaXMgYWJvdXQgdG8gZmluYWxpemVcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGV2ZW50LnNvdXJjZSBUaGUgc291cmNlIHRhc2tcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgdGFza1xuICAgICAqIEBwYXJhbSB7J3N0YXJ0JywnZW5kJywndG9wJywnYm90dG9tJ30gZXZlbnQuZnJvbVNpZGUgVGhlIGZyb20gc2lkZSAoc3RhcnQgLyBlbmQgLyB0b3AgLyBib3R0b20pXG4gICAgICogQHBhcmFtIHsnc3RhcnQnLCdlbmQnLCd0b3AnLCdib3R0b20nfSBldmVudC50b1NpZGUgVGhlIHRvIHNpZGUgKHN0YXJ0IC8gZW5kIC8gdG9wIC8gYm90dG9tKVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlcGVuZGVuY3lDcmVhdGVGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVGltZVNwYW4sIHRhcmdldDogVGltZVNwYW4sIGZyb21TaWRlOiAnc3RhcnQnfCdlbmQnfCd0b3AnfCdib3R0b20nLCB0b1NpZGU6ICdzdGFydCd8J2VuZCd8J3RvcCd8J2JvdHRvbScgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYmVmb3JlIGEgZGVwZW5kZW5jeSBpcyBkZWxldGVkIGZyb20gdGhlIGRlcGVuZGVuY3lcbiAgICAgKiBlZGl0IHBvcHVwLCBvciB3aGVuIGNsaWNraW5nIHRoZSBkZWxldGUgaWNvbiBvbiBhIHNlbGVjdGVkIGRlcGVuZGVuY3kgbGluZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsfSBldmVudC5kZXBlbmRlbmN5UmVjb3JkIFRoZSBkZXBlbmRlbmN5IHJlY29yZCBhYm91dCB0byBiZSBkZWxldGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVwZW5kZW5jeURlbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYmVmb3JlIGFuIGRlcGVuZGVuY3kgaXMgZGlzcGxheWVkIGluIHRoZSBlZGl0b3IuXG4gICAgICogVGhpcyBtYXkgYmUgbGlzdGVuZWQgZm9yIHRvIGFsbG93IGFuIGFwcGxpY2F0aW9uIHRvIHRha2Ugb3ZlciBkZXBlbmRlbmN5IGVkaXRpbmcgZHV0aWVzLiBSZXR1cm4gYGZhbHNlYCB0b1xuICAgICAqIHN0b3AgdGhlIGRlZmF1bHQgZWRpdGluZyBVSSBmcm9tIGJlaW5nIHNob3duIG9yIGEgYFByb21pc2VgIHlpZWxkaW5nIGB0cnVlYCBvciBgZmFsc2VgIGZvciBhc3luYyB2ZXRvaW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXIgb3IgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5mZWF0dXJlLlNjaGVkdWxlckRlcGVuZGVuY3lFZGl0fSBldmVudC5kZXBlbmRlbmN5RWRpdCBUaGUgZGVwZW5kZW5jeUVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVJlY29yZCBUaGUgcmVjb3JkIGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBlZGl0b3IuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVwZW5kZW5jeUVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeUVkaXQ6IFNjaGVkdWxlckRlcGVuZGVuY3lFZGl0LCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiB0aGUgZWRpdG9yIGZvciBhIGRlcGVuZGVuY3kgaXMgYXZhaWxhYmxlLCBidXQgYmVmb3JlIGl0IGlzIHNob3duLiBBbGxvd3NcbiAgICAgKiBtYW5pcHVsYXRpbmcgZmllbGRzIGJlZm9yZSB0aGUgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXIgb3IgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5mZWF0dXJlLlNjaGVkdWxlckRlcGVuZGVuY3lFZGl0fSBldmVudC5kZXBlbmRlbmN5RWRpdCBUaGUgZGVwZW5kZW5jeUVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVJlY29yZCBUaGUgcmVjb3JkIGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Qb3B1cH0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3IgcG9wdXBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXBlbmRlbmN5RWRpdFNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeUVkaXQ6IFNjaGVkdWxlckRlcGVuZGVuY3lFZGl0LCBkZXBlbmRlbmN5UmVjb3JkOiBTY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWwsIGVkaXRvcjogUG9wdXAgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBiZWZvcmUgYSBkZXBlbmRlbmN5IGlzIHNhdmVkIHVzaW5nIHRoZSBkZXBlbmRlbmN5IGVkaXQgcG9wdXBcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyIG9yIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsfSBldmVudC5kZXBlbmRlbmN5UmVjb3JkIFRoZSBkZXBlbmRlbmN5IGFib3V0IHRvIGJlIHNhdmVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnZhbHVlcyBUaGUgbmV3IHZhbHVlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlcGVuZGVuY3lTYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRlcGVuZGVuY3lSZWNvcmQ6IFNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbCwgdmFsdWVzOiBvYmplY3QgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZHJhZyBnZXN0dXJlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmRcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmRhdGUgVGhlIGRhdGV0aW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZHJhZyBzdGFydCBwb2ludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEcmFnQ3JlYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBkYXRlOiBEYXRlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHRvIGFsbG93IGltcGxlbWVudGVyIHRvIHByZXZlbnQgaW1tZWRpYXRlIGZpbmFsaXphdGlvbiBieSBzZXR0aW5nIGBkYXRhLmNvbnRleHQuYXN5bmMgPSB0cnVlYFxuICAgICAqIGluIHRoZSBsaXN0ZW5lciwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBwb3B1cCBldGNcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVEcmFnQ3JlYXRlRmluYWxpemUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnByb3h5RWxlbWVudCBQcm94eSBlbGVtZW50LCByZXByZXNlbnRpbmcgZnV0dXJlIGV2ZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQuYXN5bmMgU2V0IHRydWUgdG8gaGFuZGxlIGRyYWcgY3JlYXRlIGFzeW5jaHJvbm91c2x5IChlLmcuIHRvIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uKVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LmNvbnRleHQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSBkcmFnIGNyZWF0ZS4gVGhpcyBtZXRob2QgYWNjZXB0cyBvbmUgYXJndW1lbnQ6IHBhc3MgdHJ1ZSB0byB1cGRhdGUgcmVjb3Jkcywgb3IgZmFsc2UsIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRHJhZ0NyZWF0ZUZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgcHJveHlFbGVtZW50OiBIVE1MRWxlbWVudCwgY29udGV4dDogeyBhc3luYzogYm9vbGVhbiwgZmluYWxpemU6IEZ1bmN0aW9uIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhbiBldmVudCBpcyByZW1vdmVkLiBDYW4gYmUgdHJpZ2dlcmVkIGJ5IHVzZXIgcHJlc3NpbmcgW0RFTEVURV0gb3IgW0JBQ0tTUEFDRV0gb3IgYnkgdGhlXG4gICAgICogZXZlbnQgZWRpdG9yLiBSZXR1cm4gYGZhbHNlYCB0byBpbW1lZGlhdGVseSB2ZXRvIHRoZSByZW1vdmFsIChvciBhIGBQcm9taXNlYCB5aWVsZGluZyBgdHJ1ZWAgb3IgYGZhbHNlYFxuICAgICAqIGZvciBhc3luYyB2ZXRvaW5nKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVFdmVudERlbGV0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXIsYW55fSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWxbXX0gZXZlbnQuZXZlbnRSZWNvcmRzIFRoZSByZWNvcmRzIGFib3V0IHRvIGJlIGRlbGV0ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dCBBZGRpdGlvbmFsIHJlbW92YWwgY29udGV4dDpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBldmVudC5jb250ZXh0LmZpbmFsaXplIEZ1bmN0aW9uIHRvIGNhbGwgdG8gZmluYWxpemUgdGhlIHJlbW92YWwuIFVzZWQgdG8gYXN5bmNocm9ub3VzbHkgZGVjaWRlIHRvIHJlbW92ZSB0aGUgcmVjb3JkcyBvciBub3QuIFByb3ZpZGUgYGZhbHNlYCB0byB0aGUgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgcmVtb3ZhbC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQuZmluYWxpemUucmVtb3ZlUmVjb3JkcyBQcm92aWRlIGBmYWxzZWAgdG8gdGhlIGZ1bmN0aW9uIHRvIHByZXZlbnQgdGhlIHJlbW92YWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRXZlbnREZWxldGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlcnxhbnksIGV2ZW50UmVjb3JkczogU2NoZWR1bGVyRXZlbnRNb2RlbFtdLCBjb250ZXh0OiB7IGZpbmFsaXplOiB7IHJlbW92ZVJlY29yZHM/OiBib29sZWFuIH0gfSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIGJlZm9yZSBhbiBldmVudCBpcyBkaXNwbGF5ZWQgaW4gYW4gZWRpdG9yLlxuICAgICAqIFRoaXMgbWF5IGJlIGxpc3RlbmVkIGZvciB0byBhbGxvdyBhbiBhcHBsaWNhdGlvbiB0byB0YWtlIG92ZXIgZXZlbnQgZWRpdGluZyBkdXRpZXMuIFJldHVybmluZyBgZmFsc2VgXG4gICAgICogc3RvcHMgdGhlIGRlZmF1bHQgZWRpdGluZyBVSSBmcm9tIGJlaW5nIHNob3duLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZUV2ZW50RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuZmVhdHVyZS5FdmVudEVkaXR9IGV2ZW50LmV2ZW50RWRpdCBUaGUgZXZlbnRFZGl0IGZlYXR1cmVcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJFdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBUaGUgcmVjb3JkIGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBldmVudCBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgVGhlIFJlc291cmNlIHJlY29yZCBmb3IgdGhlIGV2ZW50LiBJZiB0aGUgZXZlbnQgaXMgYmVpbmcgY3JlYXRlZCwgaXQgd2lsbCBub3QgY29udGFpbiBhIHJlc291cmNlLCBzbyB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHJlc291cmNlIHRoZSBldmVudCBpcyBiZWluZyBjcmVhdGVkIGZvci5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5ldmVudEVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggcmVwcmVzZW50cyB0aGUgZXZlbnQgaW4gdGhlIHNjaGVkdWxlciBkaXNwbGF5LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV2ZW50RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBldmVudEVkaXQ6IEV2ZW50RWRpdCwgZXZlbnRSZWNvcmQ6IFNjaGVkdWxlckV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBTY2hlZHVsZXJSZXNvdXJjZU1vZGVsLCBldmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgd2hlbiB0aGUgZWRpdG9yIGZvciBhbiBldmVudCBpcyBhdmFpbGFibGUgYnV0IGJlZm9yZSBpdCBpcyBwb3B1bGF0ZWQgd2l0aFxuICAgICAqIGRhdGEgYW5kIHNob3duLiBBbGxvd3MgbWFuaXB1bGF0aW5nIGZpZWxkcyBldGMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmZlYXR1cmUuRXZlbnRFZGl0fSBldmVudC5ldmVudEVkaXQgVGhlIGV2ZW50RWRpdCBmZWF0dXJlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgVGhlIHJlY29yZCBhYm91dCB0byBiZSBzaG93biBpbiB0aGUgZXZlbnQgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlclJlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkIFRoZSBSZXNvdXJjZSByZWNvcmQgZm9yIHRoZSBldmVudC4gSWYgdGhlIGV2ZW50IGlzIGJlaW5nIGNyZWF0ZWQsIGl0IHdpbGwgbm90IGNvbnRhaW4gYSByZXNvdXJjZSwgc28gdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSByZXNvdXJjZSB0aGUgZXZlbnQgaXMgYmVpbmcgY3JlYXRlZCBmb3IuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZXZlbnRFbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIHJlcHJlc2VudHMgdGhlIGV2ZW50IGluIHRoZSBzY2hlZHVsZXIgZGlzcGxheS5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlBvcHVwfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV2ZW50RWRpdFNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZXZlbnRFZGl0OiBFdmVudEVkaXQsIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgZWRpdG9yOiBQb3B1cCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgYmVmb3JlIHJlc2l6aW5nIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIEV2ZW50IHJlY29yZCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkIHRoZSByZXNpemUgc3RhcnRzIHdpdGhpblxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV2ZW50UmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciB0byBhbGxvdyBpbXBsZW1lbnRlciB0byBwcmV2ZW50IGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gYnkgcmV0dXJuaW5nIGEgcHJvbWlzZVxuICAgICAqIGluIHRoZSBsaXN0ZW5lciwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBwb3B1cCBldGNcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVFdmVudFJlc2l6ZUZpbmFsaXplKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0IFtERVBSRUNBVEVEXSBkZS1uZXN0ZWQgdG8gb3V0ZXIgcGFyYW1zIG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIEV2ZW50IHJlY29yZCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgTmV3IHN0YXJ0RGF0ZSAoY2hhbmdlZCBpZiByZXNpemluZyBzdGFydCBzaWRlKVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZW5kRGF0ZSBOZXcgZW5kRGF0ZSAoY2hhbmdlZCBpZiByZXNpemluZyBlbmQgc2lkZSlcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm9yaWdpbmFsU3RhcnREYXRlIFN0YXJ0IGRhdGUgYmVmb3JlIHJlc2l6ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQub3JpZ2luYWxFbmREYXRlIEVuZCBkYXRlIGJlZm9yZSByZXNpemVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmFzeW5jIFNldCB0cnVlIHRvIGhhbmRsZSByZXNpemUgYXN5bmNocm9ub3VzbHkgKGUuZy4gdG8gd2FpdCBmb3IgdXNlciBjb25maXJtYXRpb24pXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXZlbnQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSByZXNpemUuIFRoaXMgbWV0aG9kIGFjY2VwdHMgb25lIGFyZ3VtZW50OiBwYXNzIGB0cnVlYCB0byB1cGRhdGUgcmVjb3Jkcywgb3IgYGZhbHNlYCwgdG8gaWdub3JlIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICogQHBhcmFtIHtFdmVudFJlc2l6ZURhdGFbXX0gZXZlbnQucmVzaXplRGF0YSBEYXRhIG9mIGFsbCBldmVudHMgdGhhdCBhcmUgYmVpbmcgcmVzaXplZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV2ZW50UmVzaXplRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgY29udGV4dDogb2JqZWN0LCBldmVudFJlY29yZDogU2NoZWR1bGVyRXZlbnRNb2RlbCwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBvcmlnaW5hbFN0YXJ0RGF0ZTogRGF0ZSwgb3JpZ2luYWxFbmREYXRlOiBEYXRlLCBhc3luYzogYm9vbGVhbiwgZmluYWxpemU6IEZ1bmN0aW9uLCBldmVudDogRXZlbnQsIHJlc2l6ZURhdGE6IEV2ZW50UmVzaXplRGF0YVtdIH0pID0+IFByb21pc2U8dm9pZD4pfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgaW5zdGFuY2UgYmVmb3JlIGFuIGV2ZW50IHJlY29yZCBpcyBzYXZlZCwgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBpdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVFdmVudFNhdmUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBUaGUgZXZlbnQgcmVjb3JkIGFib3V0IHRvIGJlIHNhdmVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ud2lkZ2V0LlRhc2tFZGl0b3JCYXNlfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvciB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVFdmVudFNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIGVkaXRvcjogVGFza0VkaXRvckJhc2UgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBQcm8gYmVmb3JlIHJlc2l6aW5nIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby52aWV3LlNjaGVkdWxlclByb30gZXZlbnQuc291cmNlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBTZWdtZW50IGJlaW5nIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5TY2hlZHVsZXJQcm9SZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBSZXNvdXJjZSByZWNvcmQgdGhlIHJlc2l6ZSBzdGFydHMgd2l0aGluXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRXZlbnRTZWdtZW50UmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXJQcm8sIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUHJvUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBQcm8gdG8gYWxsb3cgaW1wbGVtZW50ZXIgdG8gcHJldmVudCBpbW1lZGlhdGUgZmluYWxpemF0aW9uIGJ5IHNldHRpbmdcbiAgICAgKiBgZGF0YS5jb250ZXh0LmFzeW5jID0gdHJ1ZWAgaW4gdGhlIGxpc3RlbmVyLCB0byBzaG93IGEgY29uZmlybWF0aW9uIHBvcHVwIGV0Y1xuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZUV2ZW50U2VnbWVudFJlc2l6ZUZpbmFsaXplKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby52aWV3LlNjaGVkdWxlclByb30gZXZlbnQuc291cmNlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC5hc3luYyBTZXQgdHJ1ZSB0byBoYW5kbGUgcmVzaXplIGFzeW5jaHJvbm91c2x5IChlLmcuIHRvIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uKVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LmNvbnRleHQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSByZXNpemUuIFRoaXMgbWV0aG9kIGFjY2VwdHMgb25lIGFyZ3VtZW50OiBwYXNzIGB0cnVlYCB0byB1cGRhdGUgcmVjb3Jkcywgb3IgYGZhbHNlYCwgdG8gaWdub3JlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVFdmVudFNlZ21lbnRSZXNpemVGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvLCBjb250ZXh0OiB7IGFzeW5jOiBib29sZWFuLCBmaW5hbGl6ZTogRnVuY3Rpb24gfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBFeGNlbCBleHBvcnQgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGV4cG9ydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFeHBvcnRDb25maWd9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICogQHBhcmFtIHtYTFNDb2x1bW5bXX0gZXZlbnQuY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW5zIHRvIGV4cG9ydFxuICAgICAqIEBwYXJhbSB7YW55W11bXX0gZXZlbnQucm93cyBBbiBhcnJheSBvZiByZWNvcmRzIHRvIGV4cG9ydFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV4Y2VsRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY29uZmlnOiBFeHBvcnRDb25maWcsIGNvbHVtbnM6IFhMU0NvbHVtbltdLCByb3dzOiBhbnlbXSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBkcmFnZ2luZyBvZiB0aGUgRmlsbEhhbmRsZSBzdGFydHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGRyYWcgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmNlbGwgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbHVtbiAvIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVGaWxsSGFuZGxlRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2VsbDogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIGNlbGwgZWRpdGluZyBpcyBmaW5pc2hlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVGaW5pc2hDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSByb3cgZWRpdGluZyBpcyBmaW5pc2hlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZUZpbmlzaFJvd0VkaXQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRmluaXNoUm93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYmVmb3JlIGV4cG9ydCBzdGFydHMuIFJldHVybiBgZmFsc2VgIHRvIGNhbmNlbCB0aGUgZXhwb3J0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29uZmlnIEV4cG9ydCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVNc3BFeHBvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjb25maWc6IG9iamVjdCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBiZWZvcmUgcGFuIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUGFuOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZXZlbnQ6IEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBhIHBhc3RlIGFjdGlvbiBpcyBwZXJmb3JtZWQsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5jbGlwYm9hcmREYXRhIFRoZSBjbGlwYm9hcmREYXRhIGFib3V0IHRvIGJlIHBhc3RlZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudGFyZ2V0Q2VsbCBUaGUgY2VsbCBmcm9tIHdoaWNoIHRoZSBwYXN0ZSB3aWxsIGJlIHN0YXJ0ZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIGJlZm9yZVBhc3RlIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC50ZXh0IFRoZSByYXcgdGV4dCBmcm9tIGNsaXBib2FyZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVBhc3RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjbGlwYm9hcmREYXRhOiBzdHJpbmcsIHRhcmdldENlbGw6IEdyaWRMb2NhdGlvbiwgZW50aXR5TmFtZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGV4cG9ydCBzdGFydGVkLiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGV4cG9ydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtQZGZFeHBvcnRDb25maWd9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUGRmRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY29uZmlnOiBQZGZFeHBvcnRDb25maWcgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhlIFt2aWV3UHJlc2V0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lVmlld1ByZXNldHMjY29uZmlnLXZpZXdQcmVzZXQpIGlzIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhpcyBTY2hlZHVsZXIgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgVGhlIG5ldyBzdGFydCBkYXRlIG9mIHRoZSB0aW1lbGluZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmVuZERhdGUgVGhlIG5ldyBlbmQgZGF0ZSBvZiB0aGUgdGltZWxpbmUuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIucHJlc2V0LlZpZXdQcmVzZXR9IGV2ZW50LmZyb20gVGhlIG91dGdvaW5nIFZpZXdQcmVzZXQuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIucHJlc2V0LlZpZXdQcmVzZXR9IGV2ZW50LnRvIFRoZSBWaWV3UHJlc2V0IGJlaW5nIHN3aXRjaGVkIHRvLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVByZXNldENoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUsIGZyb206IFZpZXdQcmVzZXQsIHRvOiBWaWV3UHJlc2V0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB3aWRnZXQgaW5zdGFuY2UgYmVmb3JlIGEgcHJvamVjdCBpcyBkaXNwbGF5ZWQgaW4gdGhlIGVkaXRvci5cbiAgICAgKiBUaGlzIG1heSBiZSBsaXN0ZW5lZCB0byBpbiBvcmRlciB0byB0YWtlIG92ZXIgdGhlIHByb2plY3QgZWRpdGluZyBmbG93LiBSZXR1cm5pbmcgYGZhbHNlYFxuICAgICAqIHN0b3BzIHRoZSBkZWZhdWx0IGVkaXRpbmcgVUkgZnJvbSBiZWluZyBzaG93bi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1iZWZvcmVQcm9qZWN0RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5mZWF0dXJlLlByb2plY3RFZGl0fSBldmVudC5wcm9qZWN0RWRpdCBUaGUgcHJvamVjdEVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuUHJvamVjdE1vZGVsfSBldmVudC5wcm9qZWN0UmVjb3JkIFRoZSBwcm9qZWN0IGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBlZGl0b3IuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUHJvamVjdEVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBwcm9qZWN0RWRpdDogUHJvamVjdEVkaXQsIHByb2plY3RSZWNvcmQ6IFByb2plY3RNb2RlbCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgd2lkZ2V0IHdoZW4gdGhlIGVkaXRvciBmb3IgYSBwcm9qZWN0IGlzIGF2YWlsYWJsZSBidXRcbiAgICAgKiBiZWZvcmUgaXQgaXMgc2hvd24uIEFsbG93cyBtYW5pcHVsYXRpbmcgZmllbGRzIGV0Yy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5mZWF0dXJlLlByb2plY3RFZGl0fSBldmVudC5wcm9qZWN0RWRpdCBUaGUgcHJvamVjdEVkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuUHJvamVjdE1vZGVsfSBldmVudC5wcm9qZWN0UmVjb3JkIFRoZSBwcm9qZWN0IGFib3V0IHRvIGJlIHNob3duIGluIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtHYW50dC53aWRnZXQuUHJvamVjdEVkaXRvcn0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3JcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVQcm9qZWN0RWRpdFNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBwcm9qZWN0RWRpdDogUHJvamVjdEVkaXQsIHByb2plY3RSZWNvcmQ6IFByb2plY3RNb2RlbCwgZWRpdG9yOiBQcm9qZWN0RWRpdG9yIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdpZGdldCBpbnN0YW5jZSBiZWZvcmUgYSBwcm9qZWN0IGlzIHNhdmVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGl0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZVByb2plY3RTYXZlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlByb2plY3RNb2RlbH0gZXZlbnQucHJvamVjdFJlY29yZCBUaGUgcHJvamVjdCBhYm91dCB0byBiZSBzYXZlZFxuICAgICAqIEBwYXJhbSB7R2FudHQud2lkZ2V0LlByb2plY3RFZGl0b3J9IGV2ZW50LmVkaXRvciBUaGUgZWRpdG9yIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVByb2plY3RTYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgcHJvamVjdFJlY29yZDogUHJvamVjdE1vZGVsLCBlZGl0b3I6IFByb2plY3RFZGl0b3IgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYSByb3cgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLnJvdy5Sb3d9IGV2ZW50LnJvdyBUaGUgcm93IGFib3V0IHRvIGJlIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCBmb3IgdGhlIHJvdy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQucmVjb3JkSW5kZXggVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHJlY29yZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSZW5kZXJSb3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJvdzogUm93LCByZWNvcmQ6IE1vZGVsLCByZWNvcmRJbmRleDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcmlkIHJvd3MgYXJlIGFib3V0IHRvIGJlIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGlzIGdyaWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUmVuZGVyUm93czogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBiZWZvcmUgcm93IGNvbGxhcHNlIGlzIHN0YXJ0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlUm93Q29sbGFwc2UpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUm93Q29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBiZWZvcmUgcm93IGV4cGFuZCBpcyBzdGFydGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZVJvd0V4cGFuZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSb3dFeHBhbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4gUmV0dXJuaW5nIGBmYWxzZWAgZnJvbSBhIGxpc3RlbmVyIHByZXZlbnRzIHRoZSBjaGFuZ2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmFjdGlvbiBgJ3NlbGVjdCdgL2AnZGVzZWxlY3QnYFxuICAgICAqIEBwYXJhbSB7J3JvdycsJ2NlbGwnfSBldmVudC5tb2RlIGAncm93J2AvYCdjZWxsJ2BcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5kZXNlbGVjdGVkIFRoZSByZWNvcmRzIHRvIGJlIGRlc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0ZWQgVGhlIHJlY29yZHMgdG8gYmUgc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0aW9uIFRoZSByZWNvcmRzIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgYmVmb3JlIGFwcGx5aW5nIGBzZWxlY3RlZGAgYW5kIGBkZXNlbGVjdGVkYFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5kZXNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHRvIGJlIGRlc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LnNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHRvIGJlIHNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5jZWxsU2VsZWN0aW9uIFRoZSBjZWxscyBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGJlZm9yZSBhcHBseWluZyBgc2VsZWN0ZWRDZWxsc2AgYW5kIGBkZXNlbGVjdGVkQ2VsbHNgXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2VsZWN0aW9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgYWN0aW9uOiBzdHJpbmcsIG1vZGU6ICdyb3cnfCdjZWxsJywgc291cmNlOiBHcmlkLCBkZXNlbGVjdGVkOiBNb2RlbFtdLCBzZWxlY3RlZDogTW9kZWxbXSwgc2VsZWN0aW9uOiBNb2RlbFtdLCBkZXNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbltdLCBzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25bXSwgY2VsbFNlbGVjdGlvbjogR3JpZExvY2F0aW9uW10gfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhpcyBjb250YWluZXIgd2lsbCBsb2FkIHJlY29yZCB2YWx1ZXMgaW50byBpdHMgY2hpbGQgZmllbGRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VcbiAgICAgKiB3YW50IHRvIG1vZGlmeSB0aGUgVUkgYmVmb3JlIGRhdGEgaXMgbG9hZGVkIChlLmcuIHNldCBzb21lIGlucHV0IGZpZWxkIHRvIGJlIHJlYWRvbmx5KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBjb250YWluZXJcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTZXRSZWNvcmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBzaG93bi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldCxhbnl9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHNob3duXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0fGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IGJlZm9yZSBzaG93aW5nIGRlcGVuZGVuY3kgdGVybWluYWxzIG9uIGEgdGFzayBvciBldmVudC4gUmV0dXJuIGBmYWxzZWAgdG9cbiAgICAgKiBwcmV2ZW50IGl0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC5zb3VyY2UgVGhlIGhvdmVyZWQgdGFza1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNob3dUZXJtaW5hbHM6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBlZGl0aW5nIHN0YXJ0cywgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBlZGl0aW5nXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXJ0Um93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIHRoZSBzb3VyY2UuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWRTdGF0ZUluZm99IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZUFwcGx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc3RhdGU6IEdyaWRTdGF0ZUluZm8gfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgc3RhdGUgaXMgc2F2ZWQgYnkgdGhlIFN0YXRlUHJvdmlkZXIuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWRTdGF0ZUluZm99IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZVNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogR3JpZFN0YXRlSW5mbyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYWRkaW5nIGEgdGFzayBmcm9tIHRoZSBVSSB0byBhbGxvdyBkYXRhIG11dGF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgdGFza1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tBZGQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBiZWZvcmUgYSB0YXNrIGlzIGRlbGV0ZWQsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgaXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza0RlbGV0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8udmlldy5TY2hlZHVsZXJQcm99IGV2ZW50LnNvdXJjZSBUaGUgU2NoZWR1bGVyIFBybyBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSByZWNvcmQgYWJvdXQgdG8gYmUgZGVsZXRlZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLndpZGdldC5UYXNrRWRpdG9yQmFzZX0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3Igd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza0RlbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvLCB0YXNrUmVjb3JkOiBFdmVudE1vZGVsLCBlZGl0b3I6IFRhc2tFZGl0b3JCYXNlIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBiZWZvcmUgdGFzayBkcmFnZ2luZyBzdGFydHMuIFJldHVybiBmYWxzZSB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVUYXNrRHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB0byBhbGxvdyBpbXBsZW1lbnRlciB0byBwcmV2ZW50IGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gYnkgc2V0dGluZyBgZGF0YS5jb250ZXh0LmFzeW5jID0gdHJ1ZWBcbiAgICAgKiBpbiB0aGUgbGlzdGVuZXIsIHRvIHNob3cgYSBjb25maXJtYXRpb24gcG9wdXAgZXRjXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza0Ryb3BGaW5hbGl6ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsW119IGV2ZW50LmNvbnRleHQudGFza1JlY29yZHMgVGhlIGRyYWdnZWQgdGFzayByZWNvcmRzXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LnZhbGlkIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gbWFyayB0aGUgZHJvcCBhcyBpbnZhbGlkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LmFzeW5jIFNldCB0cnVlIHRvIGhhbmRsZSBkcmFnZHJvcCBhc3luY2hyb25vdXNseSAoZS5nLiB0byB3YWl0IGZvciB1c2VyIGNvbmZpcm1hdGlvbilcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBldmVudC5jb250ZXh0LmZpbmFsaXplIENhbGwgdGhpcyBtZXRob2QgdG8gZmluYWxpemUgZHJhZ2Ryb3AuIFRoaXMgbWV0aG9kIGFjY2VwdHMgb25lIGFyZ3VtZW50OiBwYXNzIHRydWUgdG8gdXBkYXRlIHJlY29yZHMsIG9yIGZhbHNlLCB0byBpZ25vcmUgY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tEcm9wRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBjb250ZXh0OiB7IHRhc2tSZWNvcmRzOiBUYXNrTW9kZWxbXSwgdmFsaWQ6IGJvb2xlYW4sIGFzeW5jOiBib29sZWFuLCBmaW5hbGl6ZTogRnVuY3Rpb24gfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGluc3RhbmNlIGJlZm9yZSBhIHRhc2sgaXMgZGlzcGxheWVkIGluIHRoZSBlZGl0b3IuXG4gICAgICogVGhpcyBtYXkgYmUgbGlzdGVuZWQgdG8gaW4gb3JkZXIgdG8gdGFrZSBvdmVyIHRoZSB0YXNrIGVkaXRpbmcgZmxvdy4gUmV0dXJuaW5nIGBmYWxzZWBcbiAgICAgKiBzdG9wcyB0aGUgZGVmYXVsdCBlZGl0aW5nIFVJIGZyb20gYmVpbmcgc2hvd24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza0VkaXQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlciBQcm8gaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5mZWF0dXJlLlNjaGVkdWxlclByb1Rhc2tFZGl0fSBldmVudC50YXNrRWRpdCBUaGUgdGFza0VkaXQgZmVhdHVyZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIHRhc2sgYWJvdXQgdG8gYmUgc2hvd24gaW4gdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXNrRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCByZXByZXNlbnRzIHRoZSB0YXNrXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza0VkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgdGFza0VkaXQ6IFNjaGVkdWxlclByb1Rhc2tFZGl0LCB0YXNrUmVjb3JkOiBFdmVudE1vZGVsLCB0YXNrRWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiB0aGUgZWRpdG9yIGZvciBhbiBldmVudCBpcyBhdmFpbGFibGUgYnV0IGJlZm9yZSBpdCBpcyBzaG93bi4gQWxsb3dzXG4gICAgICogbWFuaXB1bGF0aW5nIGZpZWxkcyBldGMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgVGhlIFNjaGVkdWxlclBybyBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLmZlYXR1cmUuU2NoZWR1bGVyUHJvVGFza0VkaXR9IGV2ZW50LnRhc2tFZGl0IFRoZSB0YXNrRWRpdCBmZWF0dXJlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgdGFzayBhYm91dCB0byBiZSBzaG93biBpbiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmV2ZW50RWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCByZXByZXNlbnRzIHRoZSB0YXNrXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ud2lkZ2V0LlRhc2tFZGl0b3JCYXNlfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tFZGl0U2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvLCB0YXNrRWRpdDogU2NoZWR1bGVyUHJvVGFza0VkaXQsIHRhc2tSZWNvcmQ6IEV2ZW50TW9kZWwsIGV2ZW50RWxlbWVudDogSFRNTEVsZW1lbnQsIGVkaXRvcjogVGFza0VkaXRvckJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYmVmb3JlIHJlc2l6aW5nIHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza1Jlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB0byBhbGxvdyBpbXBsZW1lbnRlciB0byBwcmV2ZW50IGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gYnkgc2V0dGluZ1xuICAgICAqIGBkYXRhLmNvbnRleHQuYXN5bmMgPSB0cnVlYCBpbiB0aGUgbGlzdGVuZXIsIHRvIHNob3cgYSBjb25maXJtYXRpb24gcG9wdXAgZXRjLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZVRhc2tSZXNpemVGaW5hbGl6ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmRcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5jb250ZXh0LmVuZERhdGUgTmV3IGVuZERhdGVcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmNvbnRleHQub3JpZ2luYWxFbmREYXRlIEVuZCBkYXRlIGJlZm9yZSByZXNpemVcbiAgICAgKiBAcGFyYW0ge1Rhc2tSZXNpemVEYXRhW119IGV2ZW50LmNvbnRleHQucmVzaXplRGF0YSBSZXNpemUgZGF0YSBmb3Igc2VsZWN0ZWQgdGFza3MuIE9ubHkgYXZhaWxhYmxlIHdoZW4gW3Jlc2l6ZVNlbGVjdGVkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L2ZlYXR1cmUvVGFza1Jlc2l6ZSNjb25maWctcmVzaXplU2VsZWN0ZWQpIGlzIGB0cnVlYC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LmFzeW5jIFNldCB0cnVlIHRvIGhhbmRsZSByZXNpemUgYXN5bmNocm9ub3VzbHkgKGUuZy4gdG8gd2FpdCBmb3IgdXNlciBjb25maXJtYXRpb24pXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXZlbnQuY29udGV4dC5maW5hbGl6ZSBDYWxsIHRoaXMgbWV0aG9kIHRvIGZpbmFsaXplIHJlc2l6ZS4gVGhpcyBtZXRob2QgYWNjZXB0cyBvbmUgYXJndW1lbnQ6IHBhc3MgdHJ1ZSB0byB1cGRhdGUgcmVjb3Jkcywgb3IgZmFsc2UsIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza1Jlc2l6ZUZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgdGFza1JlY29yZDogVGFza01vZGVsLCBzb3VyY2U6IEdhbnR0LCBjb250ZXh0OiB7IGVuZERhdGU6IERhdGUsIG9yaWdpbmFsRW5kRGF0ZTogRGF0ZSwgcmVzaXplRGF0YTogVGFza1Jlc2l6ZURhdGFbXSwgYXN5bmM6IGJvb2xlYW4sIGZpbmFsaXplOiBGdW5jdGlvbiB9LCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBpbnN0YW5jZSBiZWZvcmUgYSB0YXNrIGlzIHNhdmVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGl0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWJlZm9yZVRhc2tTYXZlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby52aWV3LlNjaGVkdWxlclByb30gZXZlbnQuc291cmNlIFRoZSBTY2hlZHVsZXIgUHJvIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgdGFzayBhYm91dCB0byBiZSBzYXZlZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLndpZGdldC5UYXNrRWRpdG9yQmFzZX0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3Igd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza1NhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgdGFza1JlY29yZDogRXZlbnRNb2RlbCwgZWRpdG9yOiBUYXNrRWRpdG9yQmFzZSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYmVmb3JlIHNlZ21lbnQgZHJhZ2dpbmcgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIHNlZ21lbnQgYWJvdXQgdG8gYmUgZHJhZ2dlZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tTZWdtZW50RHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB0byBhbGxvdyBpbXBsZW1lbnRlciB0byBwcmV2ZW50IGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gYnkgc2V0dGluZyBgZGF0YS5jb250ZXh0LmFzeW5jID0gdHJ1ZWBcbiAgICAgKiBpbiB0aGUgbGlzdGVuZXIsIHRvIHNob3cgYSBjb25maXJtYXRpb24gcG9wdXAgZXRjXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza1NlZ21lbnREcm9wRmluYWxpemUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbFtdfSBldmVudC5jb250ZXh0LnRhc2tSZWNvcmRzIERyYWdnZWQgc2VnbWVudHNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBtYXJrIHRoZSBkcm9wIGFzIGludmFsaWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQuYXN5bmMgU2V0IHRydWUgdG8gaGFuZGxlIGRyYWdkcm9wIGFzeW5jaHJvbm91c2x5IChlLmcuIHRvIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uKVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LmNvbnRleHQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSBkcmFnZHJvcC4gVGhpcyBtZXRob2QgYWNjZXB0cyBvbmUgYXJndW1lbnQ6IHBhc3MgdHJ1ZSB0byB1cGRhdGUgcmVjb3Jkcywgb3IgZmFsc2UsIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVGFza1NlZ21lbnREcm9wRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBjb250ZXh0OiB7IHRhc2tSZWNvcmRzOiBUYXNrTW9kZWxbXSwgdmFsaWQ6IGJvb2xlYW4sIGFzeW5jOiBib29sZWFuLCBmaW5hbGl6ZTogRnVuY3Rpb24gfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBHYW50dCBiZWZvcmUgcmVzaXppbmcgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgU2VnbWVudCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkIHRoZSByZXNpemUgc3RhcnRzIHdpdGhpblxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRhc2tTZWdtZW50UmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIEdhbnR0IHRvIGFsbG93IGltcGxlbWVudGVyIHRvIHByZXZlbnQgaW1tZWRpYXRlIGZpbmFsaXphdGlvbiBieSBzZXR0aW5nXG4gICAgICogYGRhdGEuY29udGV4dC5hc3luYyA9IHRydWVgIGluIHRoZSBsaXN0ZW5lciwgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBwb3B1cCBldGMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtYmVmb3JlVGFza1NlZ21lbnRSZXNpemVGaW5hbGl6ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC5hc3luYyBTZXQgdHJ1ZSB0byBoYW5kbGUgcmVzaXplIGFzeW5jaHJvbm91c2x5IChlLmcuIHRvIHdhaXQgZm9yIHVzZXIgY29uZmlybWF0aW9uKVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGV2ZW50LmNvbnRleHQuZmluYWxpemUgQ2FsbCB0aGlzIG1ldGhvZCB0byBmaW5hbGl6ZSByZXNpemUuIFRoaXMgbWV0aG9kIGFjY2VwdHMgb25lIGFyZ3VtZW50OiBwYXNzIGB0cnVlYCB0byB1cGRhdGUgcmVjb3Jkcywgb3IgYGZhbHNlYCwgdG8gaWdub3JlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVUYXNrU2VnbWVudFJlc2l6ZUZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgY29udGV4dDogeyBhc3luYzogYm9vbGVhbiwgZmluYWxpemU6IEZ1bmN0aW9uIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBncm91cCBpcyBnb2luZyB0byBiZSBleHBhbmRlZCBvciBjb2xsYXBzZWQgdXNpbmcgdGhlIFVJLlxuICAgICAqIFJldHVybmluZyBgZmFsc2VgIGZyb20gYSBsaXN0ZW5lciBwcmV2ZW50cyB0aGUgb3BlcmF0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5ncm91cFJlY29yZCBbREVQUkVDQVRFRF0gVXNlIGBncm91cFJlY29yZHNgIHBhcmFtIGluc3RlYWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5ncm91cFJlY29yZHMgVGhlIGdyb3VwIHJlY29yZHMgYmVpbmcgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2UgQ29sbGFwc2VkICh0cnVlKSBvciBleHBhbmRlZCAoZmFsc2UpXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHVzZXIgaW50ZXJhY3Rpb24gZXZlbnQgKGVnIGEgYGNsaWNrYCBldmVudCkgaWYgdGhlIHRvZ2dsZSByZXF1ZXN0IHdhcyBpbnN0aWdhdGVkIGJ5IHVzZXIgaW50ZXJhY3Rpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVG9nZ2xlR3JvdXA6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncm91cFJlY29yZDogTW9kZWwsIGdyb3VwUmVjb3JkczogTW9kZWxbXSwgY29sbGFwc2U6IGJvb2xlYW4sIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBhIHBhcmVudCBub2RlIHJlY29yZCB0b2dnbGVzIGl0cyBjb2xsYXBzZWQgc3RhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIGJlaW5nIHRvZ2dsZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYmVpbmcgY29sbGFwc2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRvZ2dsZU5vZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbGxhcHNlOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBlZGl0aW5nIGlzIGNhbmNlbGxlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBJbmNsdWRlZCBpZiB0aGUgY2FuY2VsbGF0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYW5jZWxDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogR3JpZExvY2F0aW9uLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW55IG90aGVyIGV2ZW50IGlzIGZpcmVkIGZyb20gdGhlIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1jYXRjaEFsbClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9fSBldmVudC5ldmVudCBUaGUgT2JqZWN0IHRoYXQgY29udGFpbnMgZXZlbnQgZGV0YWlsc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5ldmVudC50eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCB3aGljaCBpcyBjYXVnaHQgYnkgdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2F0Y2hBbGw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDoge1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBjbGlja3MgaW4gYSBncmlkIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiB0byB3aGljaCB0aGUgY2VsbCBiZWxvbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIGFjdGl2YXRlcyBjb250ZXh0bWVudSBpbiBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxDb250ZXh0TWVudTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHVzZXIgZG91YmxlIGNsaWNrcyBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxEYmxDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgZ3JpZCBiZWZvcmUgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBjZWxsLlxuICAgICAqIEFsbG93cyBtYW5pcHVsYXRpb24gb2YgdGhlIGl0ZW1zIHRvIHNob3cgaW4gdGhlIHNhbWUgd2F5IGFzIGluIHRoZSBbcHJvY2Vzc0l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsTWVudSNjb25maWctcHJvY2Vzc0l0ZW1zKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1jZWxsTWVudUJlZm9yZVNob3cpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51QmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiwgcmVjb3JkOiBNb2RlbCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBncmlkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51SXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNvbHVtbjogQ29sdW1uLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgZ3JpZCBhZnRlciB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIGNlbGwuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51U2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIGdyaWQgd2hlbiBhIGNoZWNrIGl0ZW0gaXMgdG9nZ2xlZCBpbiB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hlY2tlZCBDaGVja2VkIG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51VG9nZ2xlSXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNvbHVtbjogQ29sdW1uLCByZWNvcmQ6IE1vZGVsLCBjaGVja2VkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYSBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIGhvdmVyZWQgY2VsbFxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBjdXJyZW50bHkgaG92ZXJlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTW91c2VFbnRlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgY2VsbCB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHJlcHJlc2VudGluZyB0aGUgY2VsbCB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50IHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1vdXNlTGVhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2Ugb3V0IG9mIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1vdXNlT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBtb3ZlcyB0aGUgbW91c2Ugb3ZlciBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNb3VzZU92ZXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIFBhbmVsIGlzIGNvbGxhcHNlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFBhbmVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgYSBwYXJlbnQgbm9kZSByZWNvcmQgaXMgY29sbGFwc2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCB3aGljaCBoYXMgYmVlbiBjb2xsYXBzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2VOb2RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjb2x1bW4gaXMgYmVpbmcgZHJhZ2dlZCwgYW5kIHlvdSBjYW4gc2V0IHRoZSBgdmFsaWRgIGZsYWcgb24gdGhlIGBjb250ZXh0YCBvYmplY3RcbiAgICAgKiB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkIG9yIG5vdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGRyYWdnZWQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5pbnNlcnRCZWZvcmUgVGhlIGNvbHVtbiBiZWZvcmUgd2hpY2ggdGhlIGRyYWdnZWQgY29sdW1uIHdpbGwgYmUgaW5zZXJ0ZWQgKGlmIG5vdCBsYXN0KS5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC52YWxpZCBTZXQgdGhpcyB0byBgdHJ1ZWAgb3IgYGZhbHNlYCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtbkRyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBpbnNlcnRCZWZvcmU6IENvbHVtbiwgZXZlbnQ6IEV2ZW50LCBjb250ZXh0OiB7IHZhbGlkOiBib29sZWFuIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiBkcmFnIGdlc3R1cmUgaGFzIHN0YXJ0ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5EcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgYWx3YXlzIGZpcmVkIGFmdGVyIGEgY29sdW1uIGlzIGRyb3BwZWQuIFRoZSBgdmFsaWRgIHBhcmFtIGlzIGB0cnVlYCBpZiB0aGUgb3BlcmF0aW9uIHdhcyBub3RcbiAgICAgKiB2ZXRvZWQgYW5kIHRoZSBjb2x1bW4gd2FzIG1vdmVkIGluIHRoZSBjb2x1bW4gc3RvcmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuaW5zZXJ0QmVmb3JlIFRoZSBjb2x1bW4gYmVmb3JlIHdoaWNoIHRoZSBkcmFnZ2VkIGNvbHVtbiB3aWxsIGJlIGluc2VydGVkLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5uZXdQYXJlbnQgVGhlIG5ldyBwYXJlbnQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudmFsaWQgYHRydWVgIGlmIHRoZSBvcGVyYXRpb24gd2FzIG5vdCB2ZXRvZWQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnJlZ2lvbiBUaGUgcmVnaW9uIHdoZXJlIHRoZSBjb2x1bW4gd2FzIGRyb3BwZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uRHJvcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGluc2VydEJlZm9yZTogQ29sdW1uLCBuZXdQYXJlbnQ6IENvbHVtbiwgdmFsaWQ6IGJvb2xlYW4sIGV2ZW50OiBFdmVudCwgcmVnaW9uOiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgcmVzaXplIGdlc3R1cmUgaXMgY29tcGxldGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSByZXNpemVkIGNvbHVtblxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjb2x1bW4gcmVzaXplIGdlc3R1cmUgc3RhcnRzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtblJlc2l6ZVN0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgd2lkZ2V0IHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSBvd25pbmcgd2lkZ2V0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db250ZXh0TWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyB3aWRnZXQgd2hlbiBhIGNoZWNrIGl0ZW0gaXMgdG9nZ2xlZCBpbiB0aGUgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSBvd25pbmcgd2lkZ2V0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoZWNrZWQgQ2hlY2tlZCBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db250ZXh0TWVudVRvZ2dsZUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNoZWNrZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBhZnRlciBhIGNvcHkgYWN0aW9uIGlzIHBlcmZvcm1lZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbHMgVGhlIGNlbGxzIGFib3V0IHRvIGJlIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY29waWVkRGF0YVN0cmluZyBUaGUgY29uY2F0ZW5hdGVkIGRhdGEgc3RyaW5nIHRoYXQgd2FzIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmlzQ3V0IGB0cnVlYCBpZiB0aGlzIHdhcyBhIGN1dCBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIGNvcHkgZXZlbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29weTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY2VsbHM6IEdyaWRMb2NhdGlvbltdLCBjb3BpZWREYXRhU3RyaW5nOiBzdHJpbmcsIGlzQ3V0OiBib29sZWFuLCBlbnRpdHlOYW1lOiBzdHJpbmcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gY3JpdGljYWwgcGF0aHMgZ2V0IGhpZ2hsaWdodGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWNyaXRpY2FsUGF0aHNIaWdobGlnaHRlZClcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Dcml0aWNhbFBhdGhzSGlnaGxpZ2h0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGNyaXRpY2FsIHBhdGhzIGdldCBoaWRkZW4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtY3JpdGljYWxQYXRoc1VuaGlnaGxpZ2h0ZWQpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ3JpdGljYWxQYXRoc1VuaGlnaGxpZ2h0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlci9HYW50dCB3aGVuIHRoZSBsaW5lIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgdGltZSBpcyB1cGRhdGVkIChzZWUgW2N1cnJlbnRUaW1lTGluZVVwZGF0ZUludGVydmFsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci9mZWF0dXJlL1RpbWVSYW5nZXMjY29uZmlnLWN1cnJlbnRUaW1lTGluZVVwZGF0ZUludGVydmFsKSkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSBUaGUgY3VycmVudCBkYXRlXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ3VycmVudFRpbWVsaW5lVXBkYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRhdGU6IERhdGUgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZGF0YSBpbiB0aGUgc3RvcmUgY2hhbmdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC1kYXRhQ2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duaW5nIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5TdG9yZX0gZXZlbnQuc3RvcmUgVGhlIG9yaWdpbmF0aW5nIHN0b3JlXG4gICAgICogQHBhcmFtIHsncmVtb3ZlJywncmVtb3ZlQWxsJywnYWRkJywnY2xlYXJjaGFuZ2VzJywnZmlsdGVyJywndXBkYXRlJywnZGF0YXNldCcsJ3JlcGxhY2UnfSBldmVudC5hY3Rpb24gTmFtZSBvZiBhY3Rpb24gd2hpY2ggdHJpZ2dlcmVkIHRoZSBjaGFuZ2UuIE1heSBiZSBvbmUgb2Y6ICAqIGAncmVtb3ZlJ2AgKiBgJ3JlbW92ZUFsbCdgICogYCdhZGQnYCAqIGAnY2xlYXJjaGFuZ2VzJ2AgKiBgJ2ZpbHRlcidgICogYCd1cGRhdGUnYCAqIGAnZGF0YXNldCdgICogYCdyZXBsYWNlJ2BcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIENoYW5nZWQgcmVjb3JkLCBmb3IgYWN0aW9ucyB0aGF0IGFmZmVjdHMgZXhhY3RseSBvbmUgcmVjb3JkIChgJ3VwZGF0ZSdgKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnJlY29yZHMgQ2hhbmdlZCByZWNvcmRzLCBwYXNzZWQgZm9yIGFsbCBhY3Rpb25zIGV4Y2VwdCBgJ3JlbW92ZUFsbCdgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNoYW5nZXMgUGFzc2VkIGZvciB0aGUgYCd1cGRhdGUnYCBhY3Rpb24sIGluZm8gb24gd2hpY2ggcmVjb3JkIGZpZWxkcyBjaGFuZ2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGF0YUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3RvcmU6IFN0b3JlLCBhY3Rpb246ICdyZW1vdmUnfCdyZW1vdmVBbGwnfCdhZGQnfCdjbGVhcmNoYW5nZXMnfCdmaWx0ZXInfCd1cGRhdGUnfCdkYXRhc2V0J3wncmVwbGFjZScsIHJlY29yZDogTW9kZWwsIHJlY29yZHM6IE1vZGVsW10sIGNoYW5nZXM6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgcmFuZ2Ugb2YgZGF0ZXMgZW5jYXBzdWxhdGVkIGJ5IHRoZSBVSSBjaGFuZ2VzLiBUaGlzIHdpbGwgYmUgd2hlblxuICAgICAqIG1vdmluZyBhIHZpZXcgaW4gdGltZSBieSByZWNvbmZpZ3VyaW5nIGl0cyBbdGltZUF4aXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvVGltZWxpbmVCYXNlI2NvbmZpZy10aW1lQXhpcykuIFRoaXMgd2lsbCBoYXBwZW5cbiAgICAgKiB3aGVuIHpvb21pbmcsIG9yIGNoYW5naW5nIFt2aWV3UHJlc2V0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L1RpbWVsaW5lQmFzZSNjb25maWctdmlld1ByZXNldCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtZGF0ZVJhbmdlQ2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlRpbWVsaW5lQmFzZX0gZXZlbnQuc291cmNlIFRoaXMgU2NoZWR1bGVyL0dhbnR0IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vbGQgVGhlIG9sZCBkYXRlIHJhbmdlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGQuc3RhcnREYXRlIHRoZSBvbGQgc3RhcnQgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm9sZC5lbmREYXRlIHRoZSBvbGQgZW5kIGRhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm5ldyBUaGUgbmV3IGRhdGUgcmFuZ2VcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm5ldy5zdGFydERhdGUgdGhlIG5ldyBzdGFydCBkYXRlLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQubmV3LmVuZERhdGUgdGhlIG5ldyBlbmQgZGF0ZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EYXRlUmFuZ2VDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVsaW5lQmFzZSwgb2xkOiB7IHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSB9LCBuZXc6IHsgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSByZW5kZXJlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlcGVuZGVuY2llc0RyYXduOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIvR2FudHQgd2hlbiBhIGNsaWNrIGlzIHJlZ2lzdGVyZWQgb24gYSBkZXBlbmRlbmN5IGxpbmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXBlbmRlbmN5Q2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeTogU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsLCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIvR2FudHQgd2hlbiBhIGNvbnRleHQgbWVudSBldmVudCBpcyByZWdpc3RlcmVkIG9uIGEgZGVwZW5kZW5jeSBsaW5lLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXJcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWx9IGV2ZW50LmRlcGVuZGVuY3lcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVwZW5kZW5jeUNvbnRleHRNZW51OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRlcGVuZGVuY3k6IFNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IHdoZW4gYSBkZXBlbmRlbmN5IGNyZWF0aW9uIGRyYWcgb3BlcmF0aW9uIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQuc291cmNlIFRoZSBzb3VyY2UgdGFza1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlcGVuZGVuY3lDcmVhdGVEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlci9HYW50dCB3aGVuIGEgZGVwZW5kZW5jeSBkcmFnIGNyZWF0aW9uIG9wZXJhdGlvbiBzdWNjZWVkc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQuc291cmNlIFRoZSBzb3VyY2UgdGFza1xuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC50YXJnZXQgVGhlIHRhcmdldCB0YXNrXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRGVwZW5kZW5jeUJhc2VNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeSBUaGUgY3JlYXRlZCBkZXBlbmRlbmN5XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVwZW5kZW5jeUNyZWF0ZURyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuLCB0YXJnZXQ6IFRpbWVTcGFuLCBkZXBlbmRlbmN5OiBEZXBlbmRlbmN5QmFzZU1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlci9HYW50dCB3aGVuIGEgZG91YmxlIGNsaWNrIGlzIHJlZ2lzdGVyZWQgb24gYSBkZXBlbmRlbmN5IGxpbmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXBlbmRlbmN5RGJsQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZGVwZW5kZW5jeTogU2NoZWR1bGVyRGVwZW5kZW5jeU1vZGVsLCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIvR2FudHQgd2hlbiB0aGUgbW91c2UgbW92ZXMgb3V0IG9mIGEgZGVwZW5kZW5jeSBsaW5lLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFRoZSBzY2hlZHVsZXJcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJEZXBlbmRlbmN5TW9kZWx9IGV2ZW50LmRlcGVuZGVuY3lcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVwZW5kZW5jeU1vdXNlT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRlcGVuZGVuY3k6IFNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IHdoZW4gdGhlIG1vdXNlIG1vdmVzIG92ZXIgYSBkZXBlbmRlbmN5IGxpbmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbH0gZXZlbnQuZGVwZW5kZW5jeVxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXBlbmRlbmN5TW91c2VPdmVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGRlcGVuZGVuY3k6IFNjaGVkdWxlckRlcGVuZGVuY3lNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyL0dhbnR0IHdoZW4gYXN5bmNocm9ub3VzIGRlcGVuZGVuY3kgdmFsaWRhdGlvbiBjb21wbGV0ZXNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuVGltZVNwYW59IGV2ZW50LnNvdXJjZSBUaGUgc291cmNlIHRhc2tcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgdGFza1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5kZXBlbmRlbmN5VHlwZSBUaGUgZGVwZW5kZW5jeSB0eXBlLCBzZWUgW1R5cGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL0RlcGVuZGVuY3lCYXNlTW9kZWwjcHJvcGVydHktVHlwZS1zdGF0aWMpXG4gICAgICogQHBhcmFtIHsnc3RhcnQnLCdlbmQnLCd0b3AnLCdib3R0b20nfSBldmVudC5mcm9tU2lkZSBUaGUgc2lkZSBvZiB0aGUgc291cmNlIHRhc2sgd2hlcmUgdGhlIGRlcGVuZGVuY3kgc3RhcnRzXG4gICAgICogQHBhcmFtIHsnc3RhcnQnLCdlbmQnLCd0b3AnLCdib3R0b20nfSBldmVudC50b1NpZGUgVGhlIHNpZGUgb2YgdGhlIHRhcmdldCB0YXNrIHdoZXJlIHRoZSBkZXBlbmRlbmN5IGVuZHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXBlbmRlbmN5VmFsaWRhdGlvbkNvbXBsZXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBUaW1lU3BhbiwgdGFyZ2V0OiBUaW1lU3BhbiwgZGVwZW5kZW5jeVR5cGU6IG51bWJlciwgZnJvbVNpZGU6ICdzdGFydCd8J2VuZCd8J3RvcCd8J2JvdHRvbScsIHRvU2lkZTogJ3N0YXJ0J3wnZW5kJ3wndG9wJ3wnYm90dG9tJyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBTY2hlZHVsZXIvR2FudHQgd2hlbiBhc3luY2hyb25vdXMgZGVwZW5kZW5jeSB2YWxpZGF0aW9uIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQuc291cmNlIFRoZSBzb3VyY2UgdGFza1xuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC50YXJnZXQgVGhlIHRhcmdldCB0YXNrXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LmRlcGVuZGVuY3lUeXBlIFRoZSBkZXBlbmRlbmN5IHR5cGUsIHNlZSBbVHlwZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvRGVwZW5kZW5jeUJhc2VNb2RlbCNwcm9wZXJ0eS1UeXBlLXN0YXRpYylcbiAgICAgKiBAcGFyYW0geydzdGFydCcsJ2VuZCcsJ3RvcCcsJ2JvdHRvbSd9IGV2ZW50LmZyb21TaWRlIFRoZSBzaWRlIG9mIHRoZSBzb3VyY2UgdGFzayB3aGVyZSB0aGUgZGVwZW5kZW5jeSBzdGFydHNcbiAgICAgKiBAcGFyYW0geydzdGFydCcsJ2VuZCcsJ3RvcCcsJ2JvdHRvbSd9IGV2ZW50LnRvU2lkZSBUaGUgc2lkZSBvZiB0aGUgdGFyZ2V0IHRhc2sgd2hlcmUgdGhlIGRlcGVuZGVuY3kgZW5kc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlcGVuZGVuY3lWYWxpZGF0aW9uU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVTcGFuLCB0YXJnZXQ6IFRpbWVTcGFuLCBkZXBlbmRlbmN5VHlwZTogbnVtYmVyLCBmcm9tU2lkZTogJ3N0YXJ0J3wnZW5kJ3wndG9wJ3wnYm90dG9tJywgdG9TaWRlOiAnc3RhcnQnfCdlbmQnfCd0b3AnfCdib3R0b20nIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgZmllbGQgaXMgbXV0YXRlZCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBbaGFzQ2hhbmdlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktaGFzQ2hhbmdlcykgcHJvcGVydHkgY2hhbmdlc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBjb250YWluZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5kaXJ0eSBUaGUgZGlydHkgc3RhdGUgb2YgdGhlIENvbnRhaW5lciAtIGB0cnVlYCBpZiB0aGVyZSBhcmUgYW55IGZpZWxkcyB3aGljaCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBpbml0aWFsIGxvYWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGlydHlTdGF0ZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ29udGFpbmVyLCBkaXJ0eTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBhZnRlciB0aGUgdGFzayBoYXMgYmVlbiBzY2hlZHVsZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBlbmRpbmcgbW91c2V1cCBldmVudC5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5wcm94eUVsZW1lbnQgVGhlIHByb3h5IGVsZW1lbnQgc2hvd2luZyB0aGUgZHJhZyBjcmVhdGlvbiB6b25lLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRyYWdDcmVhdGVFbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIGV2ZW50OiBNb3VzZUV2ZW50LCBwcm94eUVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IGFmdGVyIHRoZSBkcmFnIHN0YXJ0IGhhcyBjcmVhdGVkIGEgcHJveHkgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5wcm94eUVsZW1lbnQgVGhlIHByb3h5IHJlcHJlc2VudGluZyB0aGUgbmV3IGV2ZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRyYWdDcmVhdGVTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHByb3h5RWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoaWxlIGRyYWcgc2VsZWN0aW5nLiBVSSB3aWxsIHVwZGF0ZSB3aXRoIGN1cnJlbnQgcmFuZ2UsIGJ1dCB0aGUgY2VsbHMgd2lsbCBub3QgYmUgc2VsZWN0ZWQgdW50aWxcbiAgICAgKiBtb3VzZSB1cC4gVGhpcyBldmVudCBjYW4gYmUgbGlzdGVuZWQgZm9yIHRvIHBlcmZvcm0gYWN0aW9ucyB3aGlsZSBkcmFnIHNlbGVjdGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHcmlkTG9jYXRpb25Db25maWdbXSxHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LnNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGRyYWdnZWQgb3ZlclxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGVkUmVjb3JkcyBUaGUgcmVjb3JkcyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBkcmFnZ2VkIG92ZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EcmFnU2VsZWN0aW5nOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25Db25maWdbXXxHcmlkTG9jYXRpb25bXSwgc2VsZWN0ZWRSZWNvcmRzOiBNb2RlbFtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHRoZSBlZGl0b3Igd2lsbCBsb2FkIHRoZSBldmVudCByZWNvcmQgZGF0YSBpbnRvIGl0cyBpbnB1dCBmaWVsZHMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdVxuICAgICAqIHdhbnQgdG8gbW9kaWZ5IHRoZSBmaWVsZHMgYmVmb3JlIGRhdGEgaXMgbG9hZGVkIChlLmcuIHNldCBzb21lIGlucHV0IGZpZWxkIHRvIGJlIHJlYWRvbmx5KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBlZGl0b3Igd2lkZ2V0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudEVkaXRCZWZvcmVTZXRSZWNvcmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgcmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhbiBldmVudC4gQWxsb3dzIG1hbmlwdWxhdGlvbiBvZiB0aGUgaXRlbXNcbiAgICAgKiB0byBzaG93IGluIHRoZSBzYW1lIHdheSBhcyBpbiBgcHJvY2Vzc0l0ZW1zYC4gUmV0dXJuaW5nIGBmYWxzZWAgZnJvbSBhIGxpc3RlbmVyIHByZXZlbnRzIHRoZSBtZW51IGZyb21cbiAgICAgKiBiZWluZyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgRXZlbnQgcmVjb3JkIGZvciB3aGljaCB0aGUgbWVudSB3YXMgdHJpZ2dlcmVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsfSBldmVudC5hc3NpZ25tZW50UmVjb3JkIEFzc2lnbm1lbnQgcmVjb3JkLCBpZiBhc3NpZ25tZW50cyBhcmUgdXNlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmV2ZW50RWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgUG9pbnRlciBldmVudCB3aGljaCB0cmlnZ2VyZWQgdGhlIGNvbnRleHQgbWVudSAoaWYgYW55KVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50TWVudUJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBldmVudFJlY29yZDogU2NoZWR1bGVyRXZlbnRNb2RlbCwgcmVzb3VyY2VSZWNvcmQ6IFNjaGVkdWxlclJlc291cmNlTW9kZWwsIGFzc2lnbm1lbnRSZWNvcmQ6IFNjaGVkdWxlckFzc2lnbm1lbnRNb2RlbCwgZXZlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ/OiBNb3VzZUV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQgaW4gdGhlIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW1cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJFdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlclJlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsfSBldmVudC5hc3NpZ25tZW50UmVjb3JkIEFzc2lnbm1lbnQgcmVjb3JkLCBpZiBhc3NpZ25tZW50cyBhcmUgdXNlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmV2ZW50RWxlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50TWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgaXRlbTogTWVudUl0ZW0sIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgYXNzaWdubWVudFJlY29yZDogU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsLCBldmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIGFmdGVyIHNob3dpbmcgdGhlIGNvbnRleHQgbWVudSBmb3IgYW4gZXZlbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIEV2ZW50IHJlY29yZCBmb3Igd2hpY2ggdGhlIG1lbnUgd2FzIHRyaWdnZXJlZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlclJlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkIFJlc291cmNlIHJlY29yZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckFzc2lnbm1lbnRNb2RlbH0gZXZlbnQuYXNzaWdubWVudFJlY29yZCBBc3NpZ25tZW50IHJlY29yZCwgaWYgYXNzaWdubWVudHMgYXJlIHVzZWRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5ldmVudEVsZW1lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudE1lbnVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIG1lbnU6IE1lbnUsIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgYXNzaWdubWVudFJlY29yZDogU2NoZWR1bGVyQXNzaWdubWVudE1vZGVsLCBldmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvbiBlYWNoIHJlc2l6ZSBtb3ZlIGV2ZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgRXZlbnQgcmVjb3JkIGJlaW5nIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnN0YXJ0RGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZW5kRGF0ZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0V2ZW50UmVzaXplRGF0YVtdfSBldmVudC5yZXNpemVEYXRhIFJlc2l6ZSBkYXRhIGZvciBzZWxlY3RlZCBldmVudHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudFBhcnRpYWxSZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgZXZlbnRSZWNvcmQ6IFNjaGVkdWxlckV2ZW50TW9kZWwsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgZWxlbWVudDogSFRNTEVsZW1lbnQsIHJlc2l6ZURhdGE6IEV2ZW50UmVzaXplRGF0YVtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBhZnRlciB0aGUgcmVzaXppbmcgZ2VzdHVyZSBoYXMgZmluaXNoZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGFuZ2VkIFNob3dzIGlmIHRoZSByZWNvcmQgaGFzIGJlZW4gY2hhbmdlZCBieSB0aGUgcmVzaXplIGFjdGlvblxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIEV2ZW50IHJlY29yZCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtFdmVudFJlc2l6ZURhdGFbXX0gZXZlbnQucmVzaXplRGF0YSBSZXNpemUgZGF0YSBmb3Igc2VsZWN0ZWQgZXZlbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXZlbnRSZXNpemVFbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgY2hhbmdlZDogYm9vbGVhbiwgZXZlbnRSZWNvcmQ6IFNjaGVkdWxlckV2ZW50TW9kZWwsIHJlc2l6ZURhdGE6IEV2ZW50UmVzaXplRGF0YVtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciB3aGVuIGV2ZW50IHJlc2l6aW5nIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIEV2ZW50IHJlY29yZCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuU2NoZWR1bGVyUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkIHRoZSByZXNpemUgc3RhcnRzIHdpdGhpblxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqIEBwYXJhbSB7RXZlbnRSZXNpemVEYXRhW119IGV2ZW50LnJlc2l6ZURhdGEgUmVzaXplIGRhdGEgZm9yIHNlbGVjdGVkIGV2ZW50cy4gT25seSBhdmFpbGFibGUgd2hlbiBbcmVzaXplU2VsZWN0ZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL2ZlYXR1cmUvRXZlbnRSZXNpemUjY29uZmlnLXJlc2l6ZVNlbGVjdGVkKSBpcyBgdHJ1ZWBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudFJlc2l6ZVN0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGV2ZW50UmVjb3JkOiBTY2hlZHVsZXJFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQsIHJlc2l6ZURhdGE6IEV2ZW50UmVzaXplRGF0YVtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBQcm8gb24gZWFjaCBzZWdtZW50IHJlc2l6ZSBtb3ZlIGV2ZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyIFBybyBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIFNlZ21lbnQgYmVpbmcgcmVzaXplZFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuc3RhcnREYXRlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV2ZW50U2VnbWVudFBhcnRpYWxSZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIFBybyBhZnRlciB0aGUgcmVzaXppbmcgZ2VzdHVyZSBoYXMgZmluaXNoZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyIFBybyBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hhbmdlZCBTaG93cyBpZiB0aGUgcmVjb3JkIGhhcyBiZWVuIGNoYW5nZWQgYnkgdGhlIHJlc2l6ZSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby5tb2RlbC5FdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBTZWdtZW50IGJlaW5nIHJlc2l6ZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudFNlZ21lbnRSZXNpemVFbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclBybywgY2hhbmdlZDogYm9vbGVhbiwgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIFBybyB3aGVuIHNlZ21lbnQgcmVzaXppbmcgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLnZpZXcuU2NoZWR1bGVyUHJvfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyIFBybyBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50LmV2ZW50UmVjb3JkIFNlZ21lbnQgYmVpbmcgcmVzaXplZFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLm1vZGVsLlNjaGVkdWxlclByb1Jlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkIFJlc291cmNlIHJlY29yZCB0aGUgcmVzaXplIHN0YXJ0cyB3aXRoaW5cbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IEJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FdmVudFNlZ21lbnRSZXNpemVTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyUHJvLCBldmVudFJlY29yZDogRXZlbnRNb2RlbCwgcmVzb3VyY2VSZWNvcmQ6IFNjaGVkdWxlclByb1Jlc291cmNlTW9kZWwsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgZXhwYW5kZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpIHNldHRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuUGFuZWx9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUGFuZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIGEgcGFyZW50IG5vZGUgcmVjb3JkIGlzIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCB3aGljaCBoYXMgYmVlbiBleHBhbmRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FeHBhbmROb2RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgZmlsZSBpcyBkcm9wcGVkIG9uIHRoZSB3aWRnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIG93bmluZyBHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtEYXRhVHJhbnNmZXJJdGVtfSBldmVudC5maWxlIFRoZSBkcm9wcGVkIGZpbGUgZGVzY3JpcHRvclxuICAgICAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERyYWdFdmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGVEcm9wOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBmaWxlOiBEYXRhVHJhbnNmZXJJdGVtLCBkb21FdmVudDogRHJhZ0V2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhlIEZpbGxIYW5kbGUgZHJhZ2dpbmcgaXMgZmluYWxpemVkIGFuZCB2YWx1ZXMgYXJlIGFwcGxpZWQgdG8gY2VsbHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlXG4gICAgICogZHJhZyBvcGVyYXRpb24gZnJvbSBhcHBseWluZyBkYXRhIGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZnJvbSBUaGUgZnJvbSBjZWxsXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50byBUaGUgdG8gY2VsbFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlQmVmb3JlRHJhZ0ZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZnJvbTogR3JpZExvY2F0aW9uLCB0bzogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoaWxlIGRyYWdnaW5nIHRoZSBGaWxsSGFuZGxlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmZyb20gVGhlIGZyb20gY2VsbFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudG8gVGhlIHRvIGNlbGxcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSByYXcgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsbEhhbmRsZURyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBmcm9tOiBHcmlkTG9jYXRpb24sIHRvOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgRmlsbEhhbmRsZSBkcmFnIG9wZXJhdGlvbiBpcyBhYm9ydGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVEcmFnQWJvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciBhIEZpbGxIYW5kbGUgZHJhZyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZnJvbSBUaGUgZnJvbSBjZWxsXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50byBUaGUgdG8gY2VsbFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlRHJhZ0VuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGZyb206IEdyaWRMb2NhdGlvbiwgdG86IEdyaWRMb2NhdGlvbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZHJhZ2dpbmcgb2YgdGhlIEZpbGxIYW5kbGUgc3RhcnRzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmNlbGwgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbHVtbiAvIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2VsbDogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGNlbGwgZWRpdGluZyBpcyBmaW5pc2hlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaW5pc2hDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSByb3cgZWRpdGluZyBpcyBmaW5pc2hlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LWZpbmlzaFJvd0VkaXQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmluaXNoUm93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGVudGVycyB0aGlzIFdpZGdldC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzSW46IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBleGl0cyB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGEgYGJsdXJgIGV2ZW50LlxuICAgICAqIGZvY3VzIG1vdmluZyBmcm9tIHdpdGhpbiB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLCBldmVuIGlmIHRoZXJlIGFyZSBmbG9hdGluZyB3aWRnZXRzXG4gICAgICogd2lsbCBub3QgdHJpZ2dlciB0aGlzIGV2ZW50LiBUaGlzIGlzIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyB3aWRnZXQgY29tcGxldGVseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBkcmFnZ2luZyBzdGFydHMsIHJldHVybiBmYWxzZSB0byBwcmV2ZW50IHRoZSBkcmFnIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50LFRvdWNoRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0JlZm9yZURyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgcmVjb3JkczogTW9kZWxbXSB9LCBldmVudDogTW91c2VFdmVudHxUb3VjaEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHRoZSByb3cgZHJvcCBvcGVyYXRpb24gaXMgZmluYWxpemVkLiBZb3UgY2FuIHJldHVybiBmYWxzZSB0byBhYm9ydCB0aGUgZHJvcCBvcGVyYXRpb24sIG9yIGFcbiAgICAgKiBQcm9taXNlIHlpZWxkaW5nIGB0cnVlYCAvIGBmYWxzZWAgd2hpY2ggYWxsb3dzIGZvciBhc3luY2hyb25vdXMgYWJvcnQgKGUuZy4gZmlyc3Qgc2hvdyB1c2VyIGEgY29uZmlybWF0aW9uIGRpYWxvZykuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC52YWxpZCBTZXQgdGhpcyB0byB0cnVlIG9yIGZhbHNlIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRyb3AgcG9zaXRpb24gaXMgdmFsaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5pbnNlcnRCZWZvcmUgVGhlIHJlY29yZCB0byBpbnNlcnQgYmVmb3JlIChgbnVsbGAgaWYgaW5zZXJ0aW5nIGF0IGxhc3QgcG9zaXRpb24gb2YgYSBwYXJlbnQgbm9kZSlcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5wYXJlbnQgVGhlIHBhcmVudCByZWNvcmQgb2YgdGhlIGN1cnJlbnQgZHJvcCBwb3NpdGlvbiAob25seSBhcHBsaWNhYmxlIGZvciB0cmVlcylcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge1JlY29yZFBvc2l0aW9uQ29udGV4dFtdfSBldmVudC5jb250ZXh0Lm9sZFBvc2l0aW9uQ29udGV4dCBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZXZpb3VzIHRyZWUgcG9zaXRpb24uIE9iamVjdHMgY29udGFpbiB0aGUgYHJlY29yZGAsIGFuZCBpdHMgb3JpZ2luYWwgYHBhcmVudEluZGV4YCBhbmQgYHBhcmVudElkYCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0JlZm9yZURyb3BGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgdmFsaWQ6IGJvb2xlYW4sIGluc2VydEJlZm9yZTogTW9kZWwsIHBhcmVudDogTW9kZWwsIHJlY29yZHM6IE1vZGVsW10sIG9sZFBvc2l0aW9uQ29udGV4dDogUmVjb3JkUG9zaXRpb25Db250ZXh0W10gfSwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGlsZSB0aGUgcm93IGlzIGJlaW5nIGRyYWdnZWQsIGluIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiB5b3UgaGF2ZSBhY2Nlc3MgdG8gYGNvbnRleHQuaW5zZXJ0QmVmb3JlYCBhIGdyaWQgL1xuICAgICAqIHRyZWUgcmVjb3JkLCBhbmQgYWRkaXRpb25hbGx5IGBjb250ZXh0LnBhcmVudGAgKGEgVHJlZU5vZGUpIGZvciB0cmVlcy4gWW91IGNhbiBzaWduYWwgdGhhdCB0aGUgZHJvcCBwb3NpdGlvbiBpc1xuICAgICAqIHZhbGlkIG9yIGludmFsaWQgYnkgc2V0dGluZyBgY29udGV4dC52YWxpZCA9IGZhbHNlO2BcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LnZhbGlkIFNldCB0aGlzIHRvIHRydWUgb3IgZmFsc2UgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiBpcyB2YWxpZC5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5pbnNlcnRCZWZvcmUgVGhlIHJlY29yZCB0byBpbnNlcnQgYmVmb3JlIChgbnVsbGAgaWYgaW5zZXJ0aW5nIGF0IGxhc3QgcG9zaXRpb24gb2YgYSBwYXJlbnQgbm9kZSlcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5wYXJlbnQgVGhlIHBhcmVudCByZWNvcmQgb2YgdGhlIGN1cnJlbnQgZHJvcCBwb3NpdGlvbiAob25seSBhcHBsaWNhYmxlIGZvciB0cmVlcylcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0RyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHZhbGlkOiBib29sZWFuLCBpbnNlcnRCZWZvcmU6IE1vZGVsLCBwYXJlbnQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcm93IGRyYWcgb3BlcmF0aW9uIGlzIGFib3J0ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dEcmFnQWJvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHJlY29yZHM6IE1vZGVsW10gfSwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZHJhZ2dpbmcgc3RhcnRzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnQsVG91Y2hFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93RHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyByZWNvcmRzOiBNb2RlbFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50fFRvdWNoRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIHRoZSByb3cgZHJvcCBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCwgcmVnYXJkbGVzcyBvZiB2YWxpZGl0eVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgdHJ1ZSBvciBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiB3YXMgdmFsaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5pbnNlcnRCZWZvcmUgVGhlIHJlY29yZCB0byBpbnNlcnQgYmVmb3JlIChgbnVsbGAgaWYgaW5zZXJ0aW5nIGF0IGxhc3QgcG9zaXRpb24gb2YgYSBwYXJlbnQgbm9kZSlcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5wYXJlbnQgVGhlIHBhcmVudCByZWNvcmQgb2YgdGhlIGN1cnJlbnQgZHJvcCBwb3NpdGlvbiAob25seSBhcHBsaWNhYmxlIGZvciB0cmVlcylcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge1JlY29yZFBvc2l0aW9uQ29udGV4dFtdfSBldmVudC5jb250ZXh0Lm9sZFBvc2l0aW9uQ29udGV4dCBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZXZpb3VzIHRyZWUgcG9zaXRpb24uIE9iamVjdHMgY29udGFpbiB0aGUgcmVjb3JkLCBhbmQgaXRzIG9yaWdpbmFsIGBwYXJlbnRJbmRleGAgYW5kIGBwYXJlbnRJZGAgdmFsdWVzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dEcm9wOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyB2YWxpZDogYm9vbGVhbiwgaW5zZXJ0QmVmb3JlOiBNb2RlbCwgcGFyZW50OiBNb2RlbCwgcmVjb3JkczogTW9kZWxbXSwgb2xkUG9zaXRpb25Db250ZXh0OiBSZWNvcmRQb3NpdGlvbkNvbnRleHRbXSB9LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIGdyaWQgaGVhZGVyIGlzIGNsaWNrZWQgb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtaGVhZGVyQ2xpY2spXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSB0cmlnZ2VyaW5nIERPTSBldmVudC5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gY2xpY2tlZCBvbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IZWFkZXJDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGRvbUV2ZW50OiBFdmVudCwgY29sdW1uOiBDb2x1bW4gfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBoZWFkZXIuXG4gICAgICogQWxsb3dzIG1hbmlwdWxhdGlvbiBvZiB0aGUgaXRlbXMgdG8gc2hvdyBpbiB0aGUgc2FtZSB3YXkgYXMgaW4gdGhlIFtwcm9jZXNzSXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0hlYWRlck1lbnUjY29uZmlnLXByb2Nlc3NJdGVtcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtaGVhZGVyTWVudUJlZm9yZVNob3cpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IZWFkZXJNZW51QmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgaGVhZGVyIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlck1lbnVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY29sdW1uOiBDb2x1bW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGFmdGVyIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIGEgaGVhZGVyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IZWFkZXJNZW51U2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBhIGNoZWNrIGl0ZW0gaXMgdG9nZ2xlZCBpbiB0aGUgaGVhZGVyIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hlY2tlZCBDaGVja2VkIG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlck1lbnVUb2dnbGVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY29sdW1uOiBDb2x1bW4sIGNoZWNrZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHdpZGdldCB3YXMgaGlkZGVuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiByb3cgbG9ja2luZyBpcyBlbmFibGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuY2xvbmUgVGhlIGNyZWF0ZWQgY2xvbmVcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Mb2NrUm93czogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNsb25lOiBHcmlkQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogTW91c2UgbW92ZWQgb3V0IGZyb20gZWxlbWVudCBpbiBncmlkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTW91c2VPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogTW91c2UgbW92ZWQgaW4gb3ZlciBlbGVtZW50IGluIGdyaWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Nb3VzZU92ZXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB3aGVuIHByb2plY3QgY29udGVudCBpcyBleHBvcnRlZFxuICAgICAqIHRvIFhNTCwgYmVmb3JlIHRoZSBYTUwgaXMgZG93bmxvYWRlZCBieSB0aGUgYnJvd3Nlci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmZpbGVDb250ZW50IEV4cG9ydGVkIFhNTC1maWxlIGNvbnRlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Nc3BFeHBvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjb25maWc6IG9iamVjdCwgZmlsZUNvbnRlbnQ6IHN0cmluZyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHVzZXIgZ2VzdHVyZSBjYXVzZXMgdGhlIGFjdGl2ZSBpdGVtIHRvIGNoYW5nZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQgd2hpY2ggaW5zdGlnYXRlZCBuYXZpZ2F0aW9uLiBNYXkgYmUgYSBjbGljayBvciBrZXkgb3IgZm9jdXMgZXZlbnQuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudCxudWxsfSBldmVudC5pdGVtIFRoZSBuZXdseSBhY3RpdmUgaXRlbSwgb3IgYG51bGxgIGlmIGZvY3VzIG1vdmVkIG91dC5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50LG51bGx9IGV2ZW50Lm9sZEl0ZW0gVGhlIHByZXZpb3VzbHkgYWN0aXZlIGl0ZW0sIG9yIGBudWxsYCBpZiBmb2N1cyBpcyBtb3ZpbmcgaW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTmF2aWdhdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBldmVudDogRXZlbnQsIGl0ZW06IEhUTUxFbGVtZW50fG51bGwsIG9sZEl0ZW06IEhUTUxFbGVtZW50fG51bGwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIHJlcXVlc3RlZCBkYXRlIHJhbmdlIGNhbm5vdCBmaXQgaW50byBhbnkgem9vbSBsZXZlbCBoaWdoZXIgdGhhbiB0aGUgY3VycmVudCBsZXZlbC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LmN1cnJlbnRab29tTGV2ZWwgVGhlIGN1cnJlbnQgem9vbSBsZXZlbFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuc3RhcnREYXRlIFRoZSByZXF1ZXN0ZWQgc3RhcnQgZGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZW5kRGF0ZSBUaGUgcmVxdWVzdGVkIGVuZCBkYXRlXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTm9ab29tQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY3VycmVudFpvb21MZXZlbDogbnVtYmVyLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0IHdoaWNoIGhhZCBiZWVuIGluIGEgbm9uLXZpc2libGUgc3RhdGUgZm9yIGFueSByZWFzb25cbiAgICAgKiBhY2hpZXZlcyB2aXNpYmlsaXR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LXBhaW50KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgcGFpbnRlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmZpcnN0UGFpbnQgYHRydWVgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhaW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhaW50OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZpcnN0UGFpbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBhZnRlciBhIHBhc3RlIGFjdGlvbiBpcyBwZXJmb3JtZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmNsaXBib2FyZERhdGEgVGhlIGNsaXBib2FyZERhdGEgdGhhdCB3YXMgcGFzdGVkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQubW9kaWZpZWRSZWNvcmRzIFRoZSByZWNvcmRzIHdoaWNoIGhhdmUgYmVlbiBtb2RpZmllZCBkdWUgdG8gdGhlIHBhc3RlIGFjdGlvblxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudGFyZ2V0Q2VsbCBUaGUgY2VsbCBmcm9tIHdoaWNoIHRoZSBwYXN0ZSB3aWxsIGJlIHN0YXJ0ZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIHBhc3RlIGV2ZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhc3RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjbGlwYm9hcmREYXRhOiBzdHJpbmcsIG1vZGlmaWVkUmVjb3JkczogTW9kZWxbXSwgdGFyZ2V0Q2VsbDogR3JpZExvY2F0aW9uLCBlbnRpdHlOYW1lOiBzdHJpbmcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGV4cG9ydCBoYXMgZmluaXNoZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtSZXNwb25zZX0gZXZlbnQucmVzcG9uc2UgT3B0aW9uYWwgcmVzcG9uc2UsIGlmIHJlY2VpdmVkXG4gICAgICogQHBhcmFtIHtFcnJvcn0gZXZlbnQuZXJyb3IgT3B0aW9uYWwgZXJyb3IsIGlmIGV4Y2VwdGlvbiBvY2N1cnJlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBkZkV4cG9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlc3BvbnNlPzogYW55LCBlcnJvcj86IEVycm9yIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiBkcmFnZ2luZyB0aGUgcGVyY2VudCBiYXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5UaW1lbGluZUJhc2V9IGV2ZW50LnNvdXJjZSBTY2hlZHVsZXJQcm8gb3IgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgdGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IEJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QZXJjZW50QmFyRHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVGltZWxpbmVCYXNlLCB0YXNrUmVjb3JkOiBNb2RlbCwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCBpZiBhIHBlcmNlbnQgYmFyIGRyYWctZHJvcCBvcGVyYXRpb24gaXMgYWJvcnRlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlRpbWVsaW5lQmFzZX0gZXZlbnQuc291cmNlIFNjaGVkdWxlclBybyBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSB0YXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBlcmNlbnRCYXJEcmFnQWJvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVsaW5lQmFzZSwgdGFza1JlY29yZDogTW9kZWwsIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiBwZXJjZW50IGJhciBkcmFnZ2luZyBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5UaW1lbGluZUJhc2V9IGV2ZW50LnNvdXJjZSBTY2hlZHVsZXJQcm8gb3IgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgdGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IEJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QZXJjZW50QmFyRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBUaW1lbGluZUJhc2UsIHRhc2tSZWNvcmQ6IE1vZGVsLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IHdoZW4gZHJvcHBpbmcgdGhlIHBlcmNlbnQgYmFyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuVGltZWxpbmVCYXNlfSBldmVudC5zb3VyY2UgU2NoZWR1bGVyUHJvIG9yIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIHRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGVyY2VudEJhckRyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRpbWVsaW5lQmFzZSwgdGFza1JlY29yZDogTW9kZWwsIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciB0aGUgW3ZpZXdQcmVzZXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vVGltZWxpbmVWaWV3UHJlc2V0cyNjb25maWctdmlld1ByZXNldCkgaGFzIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhpcyBTY2hlZHVsZXIgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgVGhlIG5ldyBzdGFydCBkYXRlIG9mIHRoZSB0aW1lbGluZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmNlbnRlckRhdGUgVGhlIG5ldyBjZW50ZXIgZGF0ZSBvZiB0aGUgdGltZWxpbmUuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlIFRoZSBuZXcgZW5kIGRhdGUgb2YgdGhlIHRpbWVsaW5lLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnByZXNldC5WaWV3UHJlc2V0fSBldmVudC5mcm9tIFRoZSBvdXRnb2luZyBWaWV3UHJlc2V0LlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnByZXNldC5WaWV3UHJlc2V0fSBldmVudC50byBUaGUgVmlld1ByZXNldCBiZWluZyBzd2l0Y2hlZCB0by5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QcmVzZXRDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgc3RhcnREYXRlOiBEYXRlLCBjZW50ZXJEYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBmcm9tOiBWaWV3UHJlc2V0LCB0bzogVmlld1ByZXNldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgd2lkZ2V0IHdoZW4gdGhlIGVkaXRvciBmb3IgYSBwcm9qZWN0IGlzIGNhbmNlbGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlByb2plY3RNb2RlbH0gZXZlbnQucHJvamVjdFJlY29yZCBUaGUgZWRpdGVkIHByb2plY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LndpZGdldC5Qcm9qZWN0RWRpdG9yfSBldmVudC5lZGl0b3IgVGhlIGVkaXRvclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblByb2plY3RFZGl0Q2FuY2VsZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBwcm9qZWN0UmVjb3JkOiBQcm9qZWN0TW9kZWwsIGVkaXRvcjogUHJvamVjdEVkaXRvciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFdpZGdldCdzIHJlYWQgb25seSBzdGF0ZSBpcyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQucmVhZE9ubHkgUmVhZCBvbmx5IG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlYWRPbmx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVhZE9ubHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSB3aWRnZXQncyBlbGVtZW50cyBoYXZlIGJlZW4gc3luY2hyb25pemVkIGR1ZSB0byBhIGRpcmVjdCBvciBpbmRpcmVjdCBjYWxsXG4gICAgICogdG8gW3JlY29tcG9zZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tcmVjb21wb3NlKSwgaWYgdGhpcyByZXN1bHRzIGluIHNvbWUgY2hhbmdlIHRvIHRoZSB3aWRnZXQncyByZW5kZXJlZCBET00gZWxlbWVudHMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVjb21wb3NlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGFzayBpcyByZWxlYXNlZCwgbm8gbG9uZ2VyIGluIHZpZXcvcmVtb3ZlZC4gQSBnb29kIHNwb3QgZm9yIGNsZWFuaW5nIGN1c3RvbSB0aGluZ3MgYWRkZWQgaW4gYSBgcmVuZGVyVGFza2BcbiAgICAgKiBsaXN0ZW5lciB1cCwgaWYgbmVlZGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQucmVuZGVyRGF0YSBUYXNrIHJlbmRlciBkYXRhXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgUmVuZGVyZWQgdGFza1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGFzayBlbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVsZWFzZVRhc2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCByZW5kZXJEYXRhOiBvYmplY3QsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIGEgcm93IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5yb3cuUm93fSBldmVudC5yb3cgVGhlIHJvdyB0aGF0IGhhcyBiZWVuIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCBmb3IgdGhlIHJvdy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQucmVjb3JkSW5kZXggVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHJlY29yZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZW5kZXJSb3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJvdzogUm93LCByZWNvcmQ6IE1vZGVsLCByZWNvcmRJbmRleDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcmlkIHJvd3MgaGF2ZSBiZWVuIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGlzIGdyaWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVuZGVyUm93czogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGFzayBpcyByZW5kZXJlZCwgaXRzIGVsZW1lbnQgaXMgYXZhaWxhYmxlIGluIERPTS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnJlbmRlckRhdGEgVGFzayByZW5kZXIgZGF0YVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFJlbmRlcmVkIHRhc2tcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5lbGVtZW50IFRhc2sgZWxlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlbmRlclRhc2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCByZW5kZXJEYXRhOiBvYmplY3QsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIGVuY2Fwc3VsYXRpbmcgZWxlbWVudCBvZiBhIFdpZGdldCByZXNpemVzICpvbmx5IHdoZW4gW21vbml0b3JSZXNpemVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gY2xpY2tpbmcgYSByZXNvdXJjZSBhdmF0YXIgb3IgY2hpcCBpbiB0aGUgY2VsbHMgb2YgdGhlIFtSZXNvdXJjZUFzc2lnbm1lbnRDb2x1bW5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvY29sdW1uL1Jlc291cmNlQXNzaWdubWVudENvbHVtbikuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoaXMgR2FudHRcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuUmVzb3VyY2VNb2RlbH0gZXZlbnQucmVzb3VyY2VSZWNvcmQgUmVzb3VyY2UgcmVjb3JkXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc291cmNlQXNzaWdubWVudENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcmlkIHJlc2l6ZSBsZWFkIHRvIGEgbmV3IHJlc3BvbnNpdmUgbGV2ZWwgYmVpbmcgYXBwbGllZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIEdyaWQgdGhhdCB3YXMgcmVzaXplZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5sZXZlbCBOZXcgcmVzcG9uc2l2ZSBsZXZlbCAoc21hbGwsIGxhcmdlLCBldGMpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIE5ldyB3aWR0aCBpbiBweFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5vbGRMZXZlbCBPbGQgcmVzcG9uc2l2ZSBsZXZlbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRXaWR0aCBPbGQgd2lkdGggaW4gcHhcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNwb25zaXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgbGV2ZWw6IHN0cmluZywgd2lkdGg6IG51bWJlciwgb2xkTGV2ZWw6IHN0cmluZywgb2xkV2lkdGg6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyB3aGVuIGEgcm93IGhhcyBmaW5pc2hlZCBjb2xsYXBzaW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJvd0NvbGxhcHNlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyB3aGVuIGEgcm93IGV4cGFuZCBoYXMgZmluaXNoZWQgZXhwYW5kaW5nLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dhbnR0L3ZpZXcvR2FudHRCYXNlI2V2ZW50LXJvd0V4cGFuZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuZXhwYW5kZWRFbGVtZW50cyBBbiBvYmplY3Qgd2l0aCB0aGUgR3JpZCByZWdpb24gbmFtZSBhcyBwcm9wZXJ0eSBhbmQgdGhlIGV4cGFuZGVkIGJvZHkgZWxlbWVudCBhcyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC53aWRnZXQgSW4gY2FzZSBvZiBleHBhbmRpbmcgYSBXaWRnZXQsIHRoaXMgd2lsbCBiZSBhIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2UgY3JlYXRlZCBieSB0aGUgYWN0dWFsIGV4cGFuc2lvbi4gSWYgdGhlcmUgaXMgbXVsdGlwbGUgR3JpZCByZWdpb25zLCB1c2UgdGhlIGB3aWRnZXRzYCBwYXJhbSBpbnN0ZWFkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC53aWRnZXRzIEluIGNhc2Ugb2YgZXhwYW5kaW5nIGEgV2lkZ2V0LCB0aGlzIHdpbGwgYmUgYW4gb2JqZWN0IHdpdGggdGhlIEdyaWQgcmVnaW9uIG5hbWUgYXMgcHJvcGVydHkgYW5kIHRoZSByZWZlcmVuY2UgdG8gdGhlIHdpZGdldCBpbnN0YW5jZSBjcmVhdGVkIGJ5IHRoZSBhY3R1YWwgZXhwYW5zaW9uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93RXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCwgZXhwYW5kZWRFbGVtZW50czogb2JqZWN0LCB3aWRnZXQ6IFdpZGdldCwgd2lkZ2V0czogb2JqZWN0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYSByb3dcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgaG92ZXJlZCByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gY3VycmVudGx5IGhvdmVyZWRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93TW91c2VFbnRlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhIHJvd1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3cgdGhhdCB0aGUgbW91c2UgbGVmdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudCB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJvd01vdXNlTGVhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciB0aGUgc2NoZWR1bGUuXG4gICAgICogQWxsb3dzIG1hbmlwdWxhdGlvbiBvZiB0aGUgaXRlbXMgdG8gc2hvdyBpbiB0aGUgc2FtZSB3YXkgYXMgaW4gYHByb2Nlc3NJdGVtc2AuIFJldHVybmluZyBgZmFsc2VgIGZyb20gYSBsaXN0ZW5lclxuICAgICAqIHByZXZlbnRzIHRoZSBtZW51IGZyb20gYmVpbmcgc2hvd24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+fSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlclJlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkIFJlc291cmNlIHJlY29yZFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSBDbGlja2VkIGRhdGUsIHJvdW5kZWQgYWNjb3JkaW5nIHRvIHZpZXdQcmVzZXQncyBzZXR0aW5nc1xuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlckFzc2lnbm1lbnRNb2RlbH0gZXZlbnQuYXNzaWdubWVudFJlY29yZCBBc3NpZ25tZW50IHJlY29yZCwgaWYgYXNzaWdubWVudHMgYXJlIHVzZWRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5ldmVudEVsZW1lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TY2hlZHVsZU1lbnVCZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5PiwgcmVzb3VyY2VSZWNvcmQ6IFNjaGVkdWxlclJlc291cmNlTW9kZWwsIGRhdGU6IERhdGUsIGFzc2lnbm1lbnRSZWNvcmQ6IFNjaGVkdWxlckFzc2lnbm1lbnRNb2RlbCwgZXZlbnRFbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlclJlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5kYXRlIENsaWNrZWQgZGF0ZSwgcm91bmRlZCBhY2NvcmRpbmcgdG8gdmlld1ByZXNldCdzIHNldHRpbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNjaGVkdWxlTWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgaXRlbTogTWVudUl0ZW0sIHJlc291cmNlUmVjb3JkOiBTY2hlZHVsZXJSZXNvdXJjZU1vZGVsLCBkYXRlOiBEYXRlLCBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgYWZ0ZXIgc2hvd2luZyB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgc2NoZWR1bGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+fSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlNjaGVkdWxlclJlc291cmNlTW9kZWx9IGV2ZW50LnJlc291cmNlUmVjb3JkXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5kYXRlIENsaWNrZWQgZGF0ZSwgcm91bmRlZCBhY2NvcmRpbmcgdG8gdmlld1ByZXNldCdzIHNldHRpbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFyZ2V0RWxlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNjaGVkdWxlTWVudVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlciwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBtZW51OiBNZW51LCByZXNvdXJjZVJlY29yZDogU2NoZWR1bGVyUmVzb3VyY2VNb2RlbCwgZGF0ZTogRGF0ZSwgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEdyaWQgaGFzIHNjcm9sbGVkIHZlcnRpY2FsbHlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuc2Nyb2xsVG9wIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2Nyb2xsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzY3JvbGxUb3A6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gb3duZXIgd2hlbiB0aGUgc2Nyb2xsIGJ1dHRvbiBpcyBjbGlja2VkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGRlZmF1bHQgc2Nyb2xsIGJlaGF2aW9yXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IERPTSBldmVudFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSB0YXNrIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNjcm9sbEJ1dHRvbkNsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZG9tRXZlbnQ6IEV2ZW50LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGUgc2VsZWN0aW9uIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7J3NlbGVjdCcsJ2Rlc2VsZWN0J30gZXZlbnQuYWN0aW9uIGAnc2VsZWN0J2AvYCdkZXNlbGVjdCdgXG4gICAgICogQHBhcmFtIHsncm93JywnY2VsbCd9IGV2ZW50Lm1vZGUgYCdyb3cnYC9gJ2NlbGwnYFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmRlc2VsZWN0ZWQgVGhlIHJlY29yZHMgZGVzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5zZWxlY3RlZCBUaGUgcmVjb3JkcyBzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5zZWxlY3Rpb24gVGhlIHJlY29yZHMgaW4gdGhlIG5ldyBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmRlc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgZGVzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmNlbGxTZWxlY3Rpb24gVGhlIGNlbGxzIGluIHRoZSBuZXcgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGFjdGlvbjogJ3NlbGVjdCd8J2Rlc2VsZWN0JywgbW9kZTogJ3Jvdyd8J2NlbGwnLCBzb3VyY2U6IEdyaWQsIGRlc2VsZWN0ZWQ6IE1vZGVsW10sIHNlbGVjdGVkOiBNb2RlbFtdLCBzZWxlY3Rpb246IE1vZGVsW10sIGRlc2VsZWN0ZWRDZWxsczogR3JpZExvY2F0aW9uW10sIHNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbltdLCBjZWxsU2VsZWN0aW9uOiBHcmlkTG9jYXRpb25bXSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhlIHNlbGVjdGlvbk1vZGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuc2VsZWN0aW9uTW9kZSBUaGUgbmV3IFtzZWxlY3Rpb25Nb2RlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL0dyaWQvdmlldy9taXhpbi9HcmlkU2VsZWN0aW9uI2NvbmZpZy1zZWxlY3Rpb25Nb2RlKVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbk1vZGVDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzZWxlY3Rpb25Nb2RlOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHdpZGdldCBpcyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHNwbGl0dGluZyB0aGUgR3JpZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2VbXX0gZXZlbnQuc3ViVmlld3MgVGhlIHN1YiB2aWV3cyBjcmVhdGVkIGJ5IHRoZSBzcGxpdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vcHRpb25zIFRoZSBvcHRpb25zIHBhc3NlZCB0byB0aGUgc3BsaXQgY2FsbFxuICAgICAqIEBwYXJhbSB7J2hvcml6b250YWwnLCd2ZXJ0aWNhbCcsJ2JvdGgnfSBldmVudC5vcHRpb25zLmRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBzcGxpdFxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5vcHRpb25zLmF0Q29sdW1uIFRoZSBjb2x1bW4gdG8gc3BsaXQgYXRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQub3B0aW9ucy5hdFJlY29yZCBUaGUgcmVjb3JkIHRvIHNwbGl0IGF0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdWJWaWV3czogR3JpZEJhc2VbXSwgb3B0aW9uczogeyBkaXJlY3Rpb246ICdob3Jpem9udGFsJ3wndmVydGljYWwnfCdib3RoJywgYXRDb2x1bW46IENvbHVtbiwgYXRSZWNvcmQ6IE1vZGVsIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIHdoZW4gdGhlIGNvbGxhcHNlIGljb24gaXMgY2xpY2tlZC4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBjb2xsYXBzZSBhY3Rpb24sXG4gICAgICogaWYgeW91IHdhbnQgdG8gaW1wbGVtZW50IHlvdXIgb3duIGJlaGF2aW9yLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuU3ViR3JpZH0gZXZlbnQuc3ViR3JpZCBUaGUgc3ViZ3JpZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXR0ZXJDb2xsYXBzZUNsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkLCBkb21FdmVudDogRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBieSB0aGUgR3JpZCBhZnRlciBhIHN1Yi1ncmlkIGhhcyBiZWVuIHJlc2l6ZWQgdXNpbmcgdGhlIHNwbGl0dGVyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSByZXNpemVkIHN1YmdyaWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0dGVyRHJhZ0VuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3ViR3JpZDogU3ViR3JpZCwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBieSB0aGUgR3JpZCB3aGVuIGEgc3ViLWdyaWQgcmVzaXplIGdlc3R1cmUgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzdWJncmlkIGFib3V0IHRvIGJlIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0dGVyRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIHdoZW4gdGhlIGV4cGFuZCBpY29uIGlzIGNsaWNrZWQuIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgZXhwYW5kIGFjdGlvbixcbiAgICAgKiBpZiB5b3Ugd2FudCB0byBpbXBsZW1lbnQgeW91ciBvd24gYmVoYXZpb3IuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzdWJncmlkXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TcGxpdHRlckV4cGFuZENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkLCBkb21FdmVudDogRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBlZGl0aW5nIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q2VsbEVkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3RhcnRDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN0YXJ0Um93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgYSBzdWIgZ3JpZCBpcyBjb2xsYXBzZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzdWIgZ3JpZCBpbnN0YW5jZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN1YkdyaWRDb2xsYXBzZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3ViR3JpZDogU3ViR3JpZCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgYSBzdWIgZ3JpZCBpcyBleHBhbmRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YiBncmlkIGluc3RhbmNlXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3ViR3JpZEV4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3ViR3JpZDogU3ViR3JpZCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgY2xpY2sgb24gYSB0YXNrIGJhci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIFRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSByaWdodGNsaWNrIChvciBsb25nIHByZXNzIG9uIGEgdG91Y2ggZGV2aWNlKSBvbiBhIHRhc2suXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza0NvbnRleHRNZW51OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgZG91YmxlY2xpY2sgb24gYSB0YXNrLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgVGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tEYmxDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgd2hpbGUgYSB0YXNrIGlzIGJlaW5nIGRyYWdnZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbFtdfSBldmVudC50YXNrUmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuc3RhcnREYXRlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmRyYWdEYXRhXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGFuZ2VkIGB0cnVlYCBpZiBzdGFydERhdGUgaGFzIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza0RyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkczogVGFza01vZGVsW10sIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgZHJhZ0RhdGE6IG9iamVjdCwgY2hhbmdlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB3aGVuIHRhc2sgZHJhZ2dpbmcgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWxbXX0gZXZlbnQudGFza1JlY29yZHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZHM6IFRhc2tNb2RlbFtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IGFmdGVyIGEgdmFsaWQgdGFzayBkcm9wXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWxbXX0gZXZlbnQudGFza1JlY29yZHNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmlzQ29weVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tEcm9wOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZHM6IFRhc2tNb2RlbFtdLCBpc0NvcHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCB3aGVuIHRoZSBlZGl0b3IgZm9yIGFuIGV2ZW50IGlzIGNhbmNlbGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlclByby52aWV3LlNjaGVkdWxlclByb30gZXZlbnQuc291cmNlIFRoZSBTY2hlZHVsZXIgUHJvIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXJQcm8ubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQudGFza1JlY29yZCB0aGUgdGFzayBhYm91dCB0aGUgc2hvd24gaW4gdGhlIGVkaXRvclxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyUHJvLndpZGdldC5UYXNrRWRpdG9yQmFzZX0gZXZlbnQuZWRpdG9yIFRoZSBlZGl0b3JcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrRWRpdENhbmNlbGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXJQcm8sIHRhc2tSZWNvcmQ6IEV2ZW50TW9kZWwsIGVkaXRvcjogVGFza0VkaXRvckJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEga2V5ZG93biBldmVudCBpcyBvYnNlcnZlZCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdGFza3MuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoaXMgR2FudHRcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQuZXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tLZXlEb3duOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBldmVudDogS2V5Ym9hcmRFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSBrZXl1cCBldmVudCBpcyBvYnNlcnZlZCBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgdGFza3MuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoaXMgR2FudHRcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQuZXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tLZXlVcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBiZWZvcmUgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSB0YXNrLiBBbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBpdGVtc1xuICAgICAqIHRvIHNob3cgaW4gdGhlIHNhbWUgd2F5IGFzIGluIGBwcm9jZXNzSXRlbXNgLiBSZXR1cm5pbmcgZmFsc2UgZnJvbSBhIGxpc3RlbmVyIHByZXZlbnRzIHRoZSBtZW51IGZyb21cbiAgICAgKiBiZWluZyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge01lbnVJdGVtRW50cnlbXX0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBFdmVudCByZWNvcmQgZm9yIHdoaWNoIHRoZSBtZW51IHdhcyB0cmlnZ2VyZWRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXNrRWxlbWVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tNZW51QmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIGl0ZW1zOiBNZW51SXRlbUVudHJ5W10sIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgdGFza0VsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW1cbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhc2tFbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza01lbnVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgaXRlbTogTWVudUl0ZW0sIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgdGFza0VsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYWZ0ZXIgc2hvd2luZyB0aGUgY29udGV4dCBtZW51IGZvciBhbiBldmVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIEV2ZW50IHJlY29yZCBmb3Igd2hpY2ggdGhlIG1lbnUgd2FzIHRyaWdnZXJlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhc2tFbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza01lbnVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgbWVudTogTWVudSwgdGFza1JlY29yZDogVGFza01vZGVsLCB0YXNrRWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIG1vdXNlZG93biBvbiBhIHRhc2sgYmFyLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgVGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tNb3VzZURvd246IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgZm9yIG1vdXNlb3V0IGZyb20gYSB0YXNrLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZSBUaGUgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUaGUgVGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tNb3VzZU91dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIG1vdXNlb3ZlciBvbiBhIHRhc2suXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoZSBHYW50dCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRoZSBUYXNrIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza01vdXNlT3ZlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIG1vdXNldXAgb24gYSB0YXNrIGJhci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGhlIFRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrTW91c2VVcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGNsaWNraW5nIGEgbm9ud29ya2luZyB0aW1lIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGNoYXJ0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuaW50ZXJ2YWwgVGhlIHJhdyBkYXRhIGRlc2NyaWJpbmcgdGhlIG5vbndvcmtpbmcgdGltZSBpbnRlcnZhbFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5pbnRlcnZhbC5uYW1lIFRoZSBpbnRlcnZhbCBuYW1lIChpZiBhbnkpXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5pbnRlcnZhbC5zdGFydERhdGUgVGhlIGludGVydmFsIHN0YXJ0IGRhdGVcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmludGVydmFsLmVuZERhdGUgVGhlIGludGVydmFsIGVuZCBkYXRlXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza05vbldvcmtpbmdUaW1lQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIGludGVydmFsOiB7IG5hbWU6IHN0cmluZywgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlIH0sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiByaWdodC1jbGlja2luZyBhIG5vbndvcmtpbmcgdGltZSBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIFRoZSBHYW50dCBjaGFydCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkIFRhc2sgcmVjb3JkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmludGVydmFsIFRoZSByYXcgZGF0YSBkZXNjcmliaW5nIHRoZSBub253b3JraW5nIHRpbWUgaW50ZXJ2YWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuaW50ZXJ2YWwubmFtZSBUaGUgaW50ZXJ2YWwgbmFtZSAoaWYgYW55KVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuaW50ZXJ2YWwuc3RhcnREYXRlIFRoZSBpbnRlcnZhbCBzdGFydCBkYXRlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5pbnRlcnZhbC5lbmREYXRlIFRoZSBpbnRlcnZhbCBlbmQgZGF0ZVxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tOb25Xb3JraW5nVGltZUNvbnRleHRNZW51OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBpbnRlcnZhbDogeyBuYW1lOiBzdHJpbmcsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSB9LCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gZG91YmxlLWNsaWNraW5nIGEgbm9ud29ya2luZyB0aW1lIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgVGhlIEdhbnR0IGNoYXJ0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgVGFzayByZWNvcmRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuaW50ZXJ2YWwgVGhlIHJhdyBkYXRhIGRlc2NyaWJpbmcgdGhlIG5vbndvcmtpbmcgdGltZSBpbnRlcnZhbFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5pbnRlcnZhbC5uYW1lIFRoZSBpbnRlcnZhbCBuYW1lIChpZiBhbnkpXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5pbnRlcnZhbC5zdGFydERhdGUgVGhlIGludGVydmFsIHN0YXJ0IGRhdGVcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmludGVydmFsLmVuZERhdGUgVGhlIGludGVydmFsIGVuZCBkYXRlXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza05vbldvcmtpbmdUaW1lRGJsQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIGludGVydmFsOiB7IG5hbWU6IHN0cmluZywgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlIH0sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IG9uIGVhY2ggcmVzaXplIG1vdmUgZXZlbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtUYXNrUmVzaXplRGF0YVtdfSBldmVudC5yZXNpemVEYXRhIERhdGEgZm9yIHRoZSB0YXNrcyB0aGF0IGFyZSBiZWluZyByZXNpemVkLiBPbmx5IGF2YWlsYWJsZSB3aGVuIFtyZXNpemVTZWxlY3RlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tSZXNpemUjY29uZmlnLXJlc2l6ZVNlbGVjdGVkKSBpcyBgdHJ1ZWAuIFRoZSBuZXN0ZWQgcHJvcGVydGllcyBhcmUgc2FtZSBhcyBgY29udGV4dGBcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBUYXNrIHJlY29yZCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgTmV3IHN0YXJ0RGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZW5kRGF0ZSBOZXcgZW5kRGF0ZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrUGFydGlhbFJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlc2l6ZURhdGE6IFRhc2tSZXNpemVEYXRhW10sIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBhZnRlciB0aGUgcmVzaXppbmcgZ2VzdHVyZSBoYXMgZmluaXNoZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hhbmdlZFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkXG4gICAgICogQHBhcmFtIHtUYXNrUmVzaXplRGF0YVtdfSBldmVudC5yZXNpemVEYXRhIFJlc2l6ZSBkYXRhIGZvciBzZWxlY3RlZCB0YXNrcy4gT25seSBhdmFpbGFibGUgd2hlbiBbcmVzaXplU2VsZWN0ZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvZmVhdHVyZS9UYXNrUmVzaXplI2NvbmZpZy1yZXNpemVTZWxlY3RlZCkgaXMgYHRydWVgXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza1Jlc2l6ZUVuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNoYW5nZWQ6IGJvb2xlYW4sIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgcmVzaXplRGF0YTogVGFza1Jlc2l6ZURhdGFbXSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB3aGVuIHRhc2sgcmVzaXppbmcgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsfSBldmVudC50YXNrUmVjb3JkXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKiBAcGFyYW0ge1Rhc2tSZXNpemVEYXRhW119IGV2ZW50LnJlc2l6ZURhdGEgUmVzaXplIGRhdGEgZm9yIHNlbGVjdGVkIHRhc2tzLiBPbmx5IGF2YWlsYWJsZSB3aGVuIFtyZXNpemVTZWxlY3RlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC9mZWF0dXJlL1Rhc2tSZXNpemUjY29uZmlnLXJlc2l6ZVNlbGVjdGVkKSBpcyBgdHJ1ZWBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrUmVzaXplU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyB0YXNrUmVjb3JkOiBUYXNrTW9kZWwsIGV2ZW50OiBFdmVudCwgcmVzaXplRGF0YTogVGFza1Jlc2l6ZURhdGFbXSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCB3aGlsZSBhIHNlZ21lbnQgaXMgYmVpbmcgZHJhZ2dlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dhbnR0LnZpZXcuR2FudHR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7R2FudHQubW9kZWwuVGFza01vZGVsW119IGV2ZW50LnRhc2tSZWNvcmRzIERyYWdnZWQgc2VnbWVudHNcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnN0YXJ0RGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZW5kRGF0ZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5kcmFnRGF0YVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hhbmdlZCBgdHJ1ZWAgaWYgc3RhcnREYXRlIGhhcyBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRhc2tTZWdtZW50RHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmRzOiBUYXNrTW9kZWxbXSwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBkcmFnRGF0YTogb2JqZWN0LCBjaGFuZ2VkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IHdoZW4gc2VnbWVudCBkcmFnZ2luZyBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbFtdfSBldmVudC50YXNrUmVjb3JkcyBEcmFnZ2VkIHNlZ21lbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza1NlZ21lbnREcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkczogVGFza01vZGVsW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgYWZ0ZXIgYSB2YWxpZCB0YXNrIGRyb3BcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbFtdfSBldmVudC50YXNrUmVjb3JkcyBEcm9wcGVkIHNlZ21lbnRzXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5pc0NvcHlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UYXNrU2VnbWVudERyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCB0YXNrUmVjb3JkczogVGFza01vZGVsW10sIGlzQ29weTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHYW50dCBvbiBlYWNoIHJlc2l6ZSBtb3ZlIGV2ZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R2FudHQudmlldy5HYW50dH0gZXZlbnQuc291cmNlIEdhbnR0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgU2VnbWVudCBiZWluZyByZXNpemVkXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGVcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmVuZERhdGVcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5lbGVtZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza1NlZ21lbnRQYXJ0aWFsUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHYW50dCwgdGFza1JlY29yZDogVGFza01vZGVsLCBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUsIGVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdhbnR0IGFmdGVyIHRoZSByZXNpemluZyBnZXN0dXJlIGhhcyBmaW5pc2hlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoYW5nZWQgU2hvd3MgaWYgdGhlIHJlY29yZCBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHRoZSByZXNpemUgYWN0aW9uXG4gICAgICogQHBhcmFtIHtHYW50dC5tb2RlbC5UYXNrTW9kZWx9IGV2ZW50LnRhc2tSZWNvcmQgU2VnbWVudCBiZWluZyByZXNpemVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza1NlZ21lbnRSZXNpemVFbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdhbnR0LCBjaGFuZ2VkOiBib29sZWFuLCB0YXNrUmVjb3JkOiBUYXNrTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR2FudHQgd2hlbiBldmVudCByZXNpemluZyBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHYW50dC52aWV3LkdhbnR0fSBldmVudC5zb3VyY2UgR2FudHQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dhbnR0Lm1vZGVsLlRhc2tNb2RlbH0gZXZlbnQudGFza1JlY29yZCBTZWdtZW50IGJlaW5nIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5TY2hlZHVsZXJSZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBSZXNvdXJjZSByZWNvcmQgdGhlIHJlc2l6ZSBzdGFydHMgd2l0aGluXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBCcm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGFza1NlZ21lbnRSZXNpemVTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR2FudHQsIHRhc2tSZWNvcmQ6IFRhc2tNb2RlbCwgcmVzb3VyY2VSZWNvcmQ6IFNjaGVkdWxlclJlc291cmNlTW9kZWwsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0aWNrIHNpemUgY2hhbmdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC10aWNrU2l6ZUNoYW5nZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGlzIFNjaGVkdWxlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQudGlja1NpemUgVGhlIHRpY2sgc2l6ZSBpbiBwaXhlbHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaWNrU2l6ZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCB0aWNrU2l6ZTogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSB0aW1lYXhpcyBoYXMgY2hhbmdlZCwgZm9yIGV4YW1wbGUgYnkgem9vbWluZyBvciBjb25maWd1cmluZyBhIG5ldyB0aW1lIHNwYW4uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhpcyBTY2hlZHVsZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29uZmlnIENvbmZpZyBvYmplY3QgdXNlZCB0byByZWNvbmZpZ3VyZSB0aGUgdGltZSBheGlzLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuY29uZmlnLnN0YXJ0RGF0ZSBOZXcgc3RhcnQgZGF0ZSAoaWYgc3VwcGxpZWQpXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5jb25maWcuZW5kRGF0ZSBOZXcgZW5kIGRhdGUgKGlmIHN1cHBsaWVkKVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpbWVBeGlzQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIGNvbmZpZzogeyBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUgfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgYSBjbGljayBvbiBhIHRpbWUgYXhpcyBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLmNvbHVtbi5TY2hlZHVsZXJUaW1lQXhpc0NvbHVtbixTY2hlZHVsZXIuY29sdW1uLlZlcnRpY2FsVGltZUF4aXNDb2x1bW59IGV2ZW50LnNvdXJjZSBUaGUgY29sdW1uIG9iamVjdFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuc3RhcnREYXRlIFRoZSBzdGFydCBkYXRlIG9mIHRoZSBoZWFkZXIgY2VsbFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZW5kRGF0ZSBUaGUgZW5kIGRhdGUgb2YgdGhlIGhlYWRlciBjZWxsXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGV2ZW50IG9iamVjdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpbWVBeGlzSGVhZGVyQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFNjaGVkdWxlclRpbWVBeGlzQ29sdW1ufFZlcnRpY2FsVGltZUF4aXNDb2x1bW4sIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBhZnRlciBhIHJpZ2h0IGNsaWNrIG9uIGEgdGltZSBheGlzIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY29sdW1uLlNjaGVkdWxlclRpbWVBeGlzQ29sdW1uLFNjaGVkdWxlci5jb2x1bW4uVmVydGljYWxUaW1lQXhpc0NvbHVtbn0gZXZlbnQuc291cmNlIFRoZSBjb2x1bW4gb2JqZWN0XG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgVGhlIHN0YXJ0IGRhdGUgb2YgdGhlIGhlYWRlciBjZWxsXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlIFRoZSBlbmQgZGF0ZSBvZiB0aGUgaGVhZGVyIGNlbGxcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgZXZlbnQgb2JqZWN0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZUF4aXNIZWFkZXJDb250ZXh0TWVudTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyVGltZUF4aXNDb2x1bW58VmVydGljYWxUaW1lQXhpc0NvbHVtbiwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIGEgZG91YmxlIGNsaWNrIG9uIGEgdGltZSBheGlzIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIuY29sdW1uLlNjaGVkdWxlclRpbWVBeGlzQ29sdW1uLFNjaGVkdWxlci5jb2x1bW4uVmVydGljYWxUaW1lQXhpc0NvbHVtbn0gZXZlbnQuc291cmNlIFRoZSBjb2x1bW4gb2JqZWN0XG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5zdGFydERhdGUgVGhlIHN0YXJ0IGRhdGUgb2YgdGhlIGhlYWRlciBjZWxsXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlIFRoZSBlbmQgZGF0ZSBvZiB0aGUgaGVhZGVyIGNlbGxcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgZXZlbnQgb2JqZWN0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZUF4aXNIZWFkZXJEYmxDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyVGltZUF4aXNDb2x1bW58VmVydGljYWxUaW1lQXhpc0NvbHVtbiwgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciB0aGUgdGltZSBheGlzIGhlYWRlci5cbiAgICAgKiBBbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBpdGVtcyB0byBzaG93IGluIHRoZSBzYW1lIHdheSBhcyBpbiB0aGUgW3Byb2Nlc3NJdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9TY2hlZHVsZXIvZmVhdHVyZS9UaW1lQXhpc0hlYWRlck1lbnUjY29uZmlnLXByb2Nlc3NJdGVtcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtdGltZUF4aXNIZWFkZXJNZW51QmVmb3JlU2hvdylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGUgc2NoZWR1bGVyXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRpbWUgYXhpcyBjb2x1bW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaW1lQXhpc0hlYWRlck1lbnVCZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIG1lbnU6IE1lbnUsIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5PiwgY29sdW1uOiBDb2x1bW4gfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQgaW4gdGhlIGhlYWRlciBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaW1lIGF4aXMgY29sdW1uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZUF4aXNIZWFkZXJNZW51SXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY29sdW1uOiBDb2x1bW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IGFmdGVyIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIGEgaGVhZGVyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnZpZXcuU2NoZWR1bGVyfSBldmVudC5zb3VyY2UgVGhlIHNjaGVkdWxlclxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaW1lIGF4aXMgY29sdW1uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZUF4aXNIZWFkZXJNZW51U2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBtZW51OiBNZW51LCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGNvbHVtbjogQ29sdW1uIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBwb2ludGVyLWFjdGl2YXRlZCBbdGltZWxpbmVDb250ZXh0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dhbnR0L2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL1RpbWVsaW5lRG9tRXZlbnRzI3Byb3BlcnR5LXRpbWVsaW5lQ29udGV4dCkgaGFzIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLnV0aWwuVGltZWxpbmVDb250ZXh0fSBldmVudC5vbGRDb250ZXh0IFRoZSB0aWNrL3Jlc291cmNlIGNvbnRleHQgYmVpbmcgZGVhY3RpdmF0ZWQuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudXRpbC5UaW1lbGluZUNvbnRleHR9IGV2ZW50LmNvbnRleHQgVGhlIHRpY2svcmVzb3VyY2UgY29udGV4dCBiZWluZyBhY3RpdmF0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZWxpbmVDb250ZXh0Q2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgb2xkQ29udGV4dDogVGltZWxpbmVDb250ZXh0LCBjb250ZXh0OiBUaW1lbGluZUNvbnRleHQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlICpzY2hlZHVsZXIqIHZpZXdwb3J0IChub3QgdGhlIG92ZXJhbGwgU2NoZWR1bGVyIGVsZW1lbnQpIGNoYW5nZXMgc2l6ZS5cbiAgICAgKiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgZ3JpZCBjaGFuZ2VzIGhlaWdodCwgb3Igd2hlbiB0aGUgc3ViZ3JpZCB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlXG4gICAgICogc2NoZWR1bGVyIGNvbHVtbiBjaGFuZ2VzIHdpZHRoLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgU2NoZWR1bGVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVGltZWxpbmVWaWV3cG9ydFJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgb2xkV2lkdGg6IG51bWJlciwgb2xkSGVpZ2h0OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgU2NoZWR1bGVyIG9yIEdhbnR0IHdpZGdldCB3aGVuIGEgY2xpY2sgaGFwcGVucyBvbiBhIHRpbWUgcmFuZ2UgaGVhZGVyIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBTY2hlZHVsZXIgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5UaW1lU3Bhbn0gZXZlbnQudGltZVJhbmdlUmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IEJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaW1lUmFuZ2VIZWFkZXJDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCB0aW1lUmFuZ2VSZWNvcmQ6IFRpbWVTcGFuLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBTY2hlZHVsZXIgb3IgR2FudHQgd2lkZ2V0IHdoZW4gYSByaWdodCBjbGljayBoYXBwZW5zIG9uIGEgdGltZSByYW5nZSBoZWFkZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC50aW1lUmFuZ2VSZWNvcmQgVGhlIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpbWVSYW5nZUhlYWRlckNvbnRleHRNZW51OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIHRpbWVSYW5nZVJlY29yZDogVGltZVNwYW4sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIFNjaGVkdWxlciBvciBHYW50dCB3aWRnZXQgd2hlbiBhIGRvdWJsZSBjbGljayBoYXBwZW5zIG9uIGEgdGltZSByYW5nZSBoZWFkZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci52aWV3LlNjaGVkdWxlcn0gZXZlbnQuc291cmNlIFNjaGVkdWxlciBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlRpbWVTcGFufSBldmVudC50aW1lUmFuZ2VSZWNvcmQgVGhlIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgQnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRpbWVSYW5nZUhlYWRlckRibENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBTY2hlZHVsZXIsIHRpbWVSYW5nZVJlY29yZDogVGltZVNwYW4sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIG9uZSBvciBtb3JlIGdyb3VwcyBhcmUgZXhwYW5kZWQgb3IgY29sbGFwc2VkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5ncm91cFJlY29yZCBbREVQUkVDQVRFRF0gVXNlIGBncm91cFJlY29yZHNgIHBhcmFtIGluc3RlYWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5ncm91cFJlY29yZHMgVGhlIGdyb3VwIHJlY29yZHMgYmVpbmcgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2UgQ29sbGFwc2VkICh0cnVlKSBvciBleHBhbmRlZCAoZmFsc2UpXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5hbGxSZWNvcmRzIFRydWUgaWYgdGhpcyBldmVudCBpcyBwYXJ0IG9mIHRvZ2dsaW5nIGFsbCBncm91cHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub2dnbGVHcm91cDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyb3VwUmVjb3JkOiBNb2RlbCwgZ3JvdXBSZWNvcmRzOiBNb2RlbFtdLCBjb2xsYXBzZTogYm9vbGVhbiwgYWxsUmVjb3Jkcz86IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIGEgcGFyZW50IG5vZGUgcmVjb3JkIHRvZ2dsZXMgaXRzIGNvbGxhcHNlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIGJlaW5nIHRvZ2dsZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYmVpbmcgY29sbGFwc2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRvZ2dsZU5vZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsLCBjb2xsYXBzZTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogQSBoZWFkZXIgW3Rvb2xdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXRvb2xzKSBoYXMgYmVlbiBjbGlja2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlRvb2x9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuVG9vbH0gZXZlbnQudG9vbCBUaGUgdG9vbCB3aGljaCBpcyBiZWluZyBjbGlja2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRvb2xDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVG9vbCwgdG9vbDogVG9vbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogPHN0cm9uZz5Ob3RlIHRoYXQgdGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIFtTY2hlZHVsZXJQcm9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvU2NoZWR1bGVyUHJvL3ZpZXcvU2NoZWR1bGVyUHJvKS48L3N0cm9uZz5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9nYW50dC9kb2NzL2FwaS9HYW50dC92aWV3L0dhbnR0QmFzZSNldmVudC10cmFuc2FjdGlvbkNoYW5nZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5oYXNDaGFuZ2VzIFdoZXRoZXIgYW55IGNoYW5nZXMgYXJlIHJlY29yZGVkIHRoYXQgYXJlIG5vdCB5ZXQgYXR0YWNoZWQgdG8gYSB2ZXJzaW9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRyYW5zYWN0aW9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgaGFzQ2hhbmdlczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiByb3cgbG9ja2luZyBpcyBkaXNhYmxlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LmNsb25lIFRoZSBsb2NrZWQgY2xvbmUgdGhhdCB3aWxsIGJlIGRlc3Ryb3llZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblVubG9ja1Jvd3M6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjbG9uZTogR3JpZEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdW4tc3BsaXR0aW5nIHRoZSBHcmlkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblVuc3BsaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSByYW5nZSBvZiBkYXRlcyB2aXNpYmxlIHdpdGhpbiB0aGUgdmlld3BvcnQgY2hhbmdlcy4gVGhpcyB3aWxsIGJlIHdoZW5cbiAgICAgKiBzY3JvbGxpbmcgYWxvbmcgYSB0aW1lIGF4aXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ2FudHQvZG9jcy9hcGkvR2FudHQvdmlldy9HYW50dEJhc2UjZXZlbnQtdmlzaWJsZURhdGVSYW5nZUNoYW5nZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIudmlldy5TY2hlZHVsZXJ9IGV2ZW50LnNvdXJjZSBUaGlzIFNjaGVkdWxlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQub2xkIFRoZSBvbGQgZGF0ZSByYW5nZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQub2xkLnN0YXJ0RGF0ZSB0aGUgb2xkIHN0YXJ0IGRhdGUuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGQuZW5kRGF0ZSB0aGUgb2xkIGVuZCBkYXRlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5uZXcgVGhlIG5ldyBkYXRlIHJhbmdlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5uZXcuc3RhcnREYXRlIHRoZSBuZXcgc3RhcnQgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm5ldy5lbmREYXRlIHRoZSBuZXcgZW5kIGRhdGUuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVmlzaWJsZURhdGVSYW5nZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogU2NoZWR1bGVyLCBvbGQ6IHsgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlIH0sIG5ldzogeyBzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUgfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgdW5kZXJseWluZyB3aWRnZXRcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIG1lID0gdGhpcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdcbiAgICAgICAgICAgIH0gPSBtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlTmFtZSxcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlncyxcbiAgICAgICAgICAgICAgICBicnludHVtRXZlbnRzXG4gICAgICAgICAgICB9ID0gQnJ5bnR1bUdhbnR0QmFzZUNvbXBvbmVudDtcblxuICAgICAgICBicnludHVtQ29uZmlncy5maWx0ZXIocHJvcCA9PiBwcm9wIGluIHRoaXMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGJyeW50dW1Db25maWcsIHByb3AsIHRoaXNbcHJvcF0pO1xuICAgICAgICAgICAgaWYgKFsnZmVhdHVyZXMnLCAnY29uZmlnJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb25maWdQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGJyeW50dW1FdmVudHMuZmlsdGVyKGV2ZW50ID0+IHRoaXNbZXZlbnRdICYmIHRoaXNbZXZlbnRdLm9ic2VydmVycy5sZW5ndGggPiAwKS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgdW5jYXBpdGFsaXplID0gKHN0cjogc3RyaW5nKSA9PiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSksXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gKHN0cjogc3RyaW5nKSA9PiB1bmNhcGl0YWxpemUoc3RyLnNsaWNlKDIpKTtcblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5saXN0ZW5lcnNbZXZlbnROYW1lKGV2ZW50KV0gPSBlID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgbWVbZXZlbnRdLmVtaXQoZSk7XG4gICAgICAgICAgICAgICAgLy8gRXZlbnRFbWl0dGVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMgaW4gdGhlIG5vcm1hbCB3YXksIHdvcmsgYXJvdW5kIGl0IGJ5IHNldHRpbmcgYHJldHVyblZhbHVlYCBmbGFnXG4gICAgICAgICAgICAgICAgLy8gaW4gQW5ndWxhciBsaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gZS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBoYXMgbm8gY29udGFpbmVyIHNwZWNpZmllZCBpbiBjb25maWcgdGhlbiB1c2UgYWRvcHQgdG8gV3JhcHBlcidzIGVsZW1lbnRcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIGNvbnRhaW5lclBhcmFtID0gW1xuICAgICAgICAgICAgICAgICdhZG9wdCcsXG4gICAgICAgICAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QWZ0ZXInLFxuICAgICAgICAgICAgICAgICdpbnNlcnRCZWZvcmUnXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgXS5maW5kKHByb3AgPT4gYnJ5bnR1bUNvbmZpZ1twcm9wXSk7XG4gICAgICAgIGlmICghY29udGFpbmVyUGFyYW0pIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU5hbWUgPT09ICdCdXR0b24nIHx8IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgIC8vIEJ1dHRvbiBzaG91bGQgYWx3YXlzIGJlIDxhPiBvciA8YnV0dG9uPiBpbnNpZGUgb3duZXIgZWxlbWVudFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYXBwZW5kVG8gPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFkb3B0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29udGFpbmVyKGluc3RhbmNlTmFtZSwgY29udGFpbmVyUGFyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBtZS5pbnN0YW5jZSA9IGluc3RhbmNlTmFtZSA9PT0gJ1dpZGdldCcgPyBXaWRnZXQuY3JlYXRlKGJyeW50dW1Db25maWcpIDogbmV3IGluc3RhbmNlQ2xhc3MoYnJ5bnR1bUNvbmZpZyk7XG5cbiAgICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGdyaWRJbnN0YW5jZSwgc2NoZWR1bGVySW5zdGFuY2UgZXRjLlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lW1N0cmluZ0hlbHBlci51bmNhcGl0YWxpemUoaW5zdGFuY2VOYW1lKSArICdJbnN0YW5jZSddID0gbWUuaW5zdGFuY2U7XG4gICAgICAgIC8vIFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhdGNoIGZvciBjaGFuZ2VzXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgeyBpbnN0YW5jZU5hbWUgfSA9IEJyeW50dW1HYW50dEJhc2VDb21wb25lbnQ7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGNoYW5nZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykuZm9yRWFjaCgoW3Byb3AsIGNoYW5nZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAoY2hhbmdlIGFzIFNpbXBsZUNoYW5nZSkuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeyBicnludHVtQ29uZmlnc09ubHksIGJyeW50dW1Qcm9wcyB9ID0gQnJ5bnR1bUdhbnR0QmFzZUNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChicnludHVtUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGluc3RhbmNlLCBwcm9wLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChicnludHVtQ29uZmlnc09ubHkuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nVXBkYXRlUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5kZXN0cm95KSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|