ngx-hana-nameserver-history-viewer 1.1.9-9.5.beta → 1.1.9-9.6.beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/src/nameserver-history-viewer/components/nameserver-history.component.mjs +3 -3
- package/esm2020/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.mjs +2 -2
- package/esm2020/src/nameserver-history-viewer/utils/ui-util.mjs +2 -2
- package/fesm2015/ngx-hana-nameserver-history-viewer.mjs +5 -5
- package/fesm2015/ngx-hana-nameserver-history-viewer.mjs.map +1 -1
- package/fesm2020/ngx-hana-nameserver-history-viewer.mjs +5 -5
- package/fesm2020/ngx-hana-nameserver-history-viewer.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -526,10 +526,10 @@ export class NameServerHistoryComponent {
|
|
|
526
526
|
}
|
|
527
527
|
}
|
|
528
528
|
NameServerHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NameServerHistoryComponent, deps: [{ token: i1.FileService }, { token: i1.ChartService }, { token: i1.UIService }], target: i0.ɵɵFactoryTarget.Component });
|
|
529
|
-
NameServerHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NameServerHistoryComponent, selector: "ngx-hana-nameserver-history-viewer", inputs: { defaultSelectedItems: "defaultSelectedItems", hideMeasureColumns: "hideMeasureColumns", maxRowsLimitation: "maxRowsLimitation", showInstruction: "showInstruction", timezone: "timezone", fileBuffer: "fileBuffer", streamModeFileName: "streamModeFileName", autoDisplay: "autoDisplay" }, providers: [FileService, ChartService, UIService], viewQueries: [{ propertyName: "nameserverHistoryAllRef", first: true, predicate: ["nameserverHistoryAll"], descendants: true, read: ElementRef }, { propertyName: "nameserverHistoryContentRef", first: true, predicate: ["nameserverHistoryContent"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\"
|
|
529
|
+
NameServerHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NameServerHistoryComponent, selector: "ngx-hana-nameserver-history-viewer", inputs: { defaultSelectedItems: "defaultSelectedItems", hideMeasureColumns: "hideMeasureColumns", maxRowsLimitation: "maxRowsLimitation", showInstruction: "showInstruction", timezone: "timezone", fileBuffer: "fileBuffer", streamModeFileName: "streamModeFileName", autoDisplay: "autoDisplay" }, providers: [FileService, ChartService, UIService], viewQueries: [{ propertyName: "nameserverHistoryAllRef", first: true, predicate: ["nameserverHistoryAll"], descendants: true, read: ElementRef }, { propertyName: "nameserverHistoryContentRef", first: true, predicate: ["nameserverHistoryContent"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" class=\"box-stream-mode-text\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .upload-box-content .box-stream-mode-text{text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"], components: [{ type: i2.FileDropInputComponent, selector: "file-drop-input", inputs: ["dropAreaText", "inputAreaText"], outputs: ["fileDrop", "fileInput"] }, { type: i3.ProgressBarComponent, selector: "progress-bar", inputs: ["progress"] }, { type: i4.TimeRangeSelectorComponent, selector: "time-range-selector", inputs: ["disabled", "dateTimeRange"], outputs: ["dateTimeRangeChange"] }, { type: i5.TimezoneSelectorComponent, selector: "timezone-selector", inputs: ["disabled", "timezone"], outputs: ["timezoneChange"] }, { type: i6.PortSelectorComponent, selector: "port-selector", inputs: ["disabled", "port", "ports"], outputs: ["portChange"] }, { type: i7.InstructionComponent, selector: "instruction", inputs: ["step1Finished", "step2Finished", "step3Finished", "step4Finished", "step5Finished", "show"], outputs: ["showChange"] }, { type: i8.SelectionTableComponent, selector: "ngx-selection-table", inputs: ["filter", "keyColumn", "tableSource", "checkbox", "multiSelection", "clickToSelect", "hiddenColumns", "tooltipColumn", "searchStyle", "searchColumn"], outputs: ["change"] }, { type: i9.AlertComponent, selector: "alert", inputs: ["alertMessage", "alertType", "alertTimeout"], outputs: ["alertMessageChange"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
530
530
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NameServerHistoryComponent, decorators: [{
|
|
531
531
|
type: Component,
|
|
532
|
-
args: [{ selector: 'ngx-hana-nameserver-history-viewer', providers: [FileService, ChartService, UIService], template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\"
|
|
532
|
+
args: [{ selector: 'ngx-hana-nameserver-history-viewer', providers: [FileService, ChartService, UIService], template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" class=\"box-stream-mode-text\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .upload-box-content .box-stream-mode-text{text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"] }]
|
|
533
533
|
}], ctorParameters: function () { return [{ type: i1.FileService }, { type: i1.ChartService }, { type: i1.UIService }]; }, propDecorators: { nameserverHistoryAllRef: [{
|
|
534
534
|
type: ViewChild,
|
|
535
535
|
args: ['nameserverHistoryAll', { read: ElementRef }]
|
|
@@ -553,4 +553,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
553
553
|
}], autoDisplay: [{
|
|
554
554
|
type: Input
|
|
555
555
|
}] } });
|
|
556
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBb0MsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLEtBQUssRUFDTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixZQUFZLEVBQ1osYUFBYSxFQUNiLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixVQUFVLEVBQ1gsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBZ0UsTUFBTSxVQUFVLENBQUM7QUFDekgsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5FLE9BQU8sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sNkJBQTZCLENBQUM7QUFDckMsT0FBTyx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRS9CLElBQUssVUFJSjtBQUpELFdBQUssVUFBVTtJQUNiLHlEQUEyQyxDQUFBO0lBQzNDLHFDQUF1QixDQUFBO0lBQ3ZCLG1EQUFxQyxDQUFBO0FBQ3ZDLENB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SztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBS0csZUFBZTtzQkFBdkIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgc2V0Q2hhcnRIZWlnaHQsXHJcbiAgc2xlZXAsXHJcbiAgaXNFbXB0eURhdGEsXHJcbiAgZ2V0RGlzcGxheVBvcnQsXHJcbiAgZ2V0RmlsZUZyb21JbnB1dCxcclxuICBpc1NhbWVGaWxlLFxyXG4gIGdldEFiYnJldmlhdGVkRmlsZU5hbWUsXHJcbiAgZ2V0RmlsZUZyb21Ecm9wLFxyXG4gIGdldFJlYWxQb3J0cyxcclxuICBnZXRUaW1lU3RyaW5nLFxyXG4gIHByaW50UHJvY2Vzc2VkVGltZSxcclxuICBnZXRUaW1lUmFuZ2VTdHJpbmcsXHJcbiAgZ2VuZXJhdGVQb3J0cyxcclxuICBnZXREZWZhdWx0VGltZXpvbmUsXHJcbiAgYmxvYlRvRmlsZVxyXG59IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQWJvcnQsIEFsZXJ0LCBIdG1sRWxlbWVudCwgSXRlbSwgQ2hhcnRDb250ZW50RGF0YSwgQ2hhcnRDb250ZW50SGVhZGVyLCBDaGFydENvbnRlbnRUaW1lLCBQb3J0IH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBGaWxlU2VydmljZSwgQ2hhcnRTZXJ2aWNlLCBVSVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcblxyXG5pbXBvcnQgJ2hhbW1lcmpzJztcclxuaW1wb3J0ICcuLi91dGlscy9jaGFydGpzLWRvd25zYW1wbGUnO1xyXG5pbXBvcnQgJy4uL3V0aWxzL2NoYXJ0anMtem9vbSc7XHJcblxyXG5lbnVtIFNlYXJjaFR5cGUge1xyXG4gIHNlYXJjaFdpdGhTdWJIZWFkZXIgPSAnc2VhcmNoV2l0aFN1YkhlYWRlcicsXHJcbiAgc2VhcmNoQWxsID0gJ3NlYXJjaEFsbCcsXHJcbiAgc2VhcmNoSW5DaGlsZHJlbiA9ICdzZWFyY2hJbkNoaWxkcmVuJ1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1oYW5hLW5hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uYW1lc2VydmVyLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWyAnLi9uYW1lc2VydmVyLWhpc3RvcnkuY29tcG9uZW50LnNjc3MnIF0sXHJcbiAgcHJvdmlkZXJzOiBbIEZpbGVTZXJ2aWNlLCBDaGFydFNlcnZpY2UsIFVJU2VydmljZSBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYW1lU2VydmVySGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCduYW1lc2VydmVySGlzdG9yeUFsbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuYW1lc2VydmVySGlzdG9yeUFsbFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCduYW1lc2VydmVySGlzdG9yeUNvbnRlbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50UmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW2RlZmF1bHRTZWxlY3RlZEl0ZW1zXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTZWxlY3RlZEl0ZW1zOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFtoaWRlTWVhc3VyZUNvbHVtbnNdXHJcbiAgICovXHJcbiAgQElucHV0KCkgaGlkZU1lYXN1cmVDb2x1bW5zOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFttYXhSb3dzTGltaXRhdGlvbl1cclxuICAgKi9cclxuICBASW5wdXQoKSBtYXhSb3dzTGltaXRhdGlvbjogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW3Nob3dJbnN0cnVjdGlvbl1cclxuICAgKi9cclxuICBASW5wdXQoKSBzaG93SW5zdHJ1Y3Rpb24gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW3RpbWV6b25lXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRpbWV6b25lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbGUgYnVmZmVyLCB1c2UgdGhpcyBmb3Igc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBmaWxlQnVmZmVyOiBCbG9iO1xyXG5cclxuICAvKipcclxuICAgKiBmaWxlIG5hbWUgZm9yIHN0cmVhbSBtb2RlXHJcbiAgICovXHJcbiAgQElucHV0KCkgc3RyZWFtTW9kZUZpbGVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGF1dG8gZGlzcGxheSB0aGUgY2hhcnQgaW4gc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBhdXRvRGlzcGxheTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgZmlsZTogRmlsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogdGltZSBpbmZvIG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICB0aW1lOiBDaGFydENvbnRlbnRUaW1lID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIGRhdGEgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGRhdGE6IENoYXJ0Q29udGVudERhdGEgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogaGVhZGVyIG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBoZWFkZXI6IENoYXJ0Q29udGVudEhlYWRlcltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIGhvc3Qgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGhvc3QgPSAnbmFtZXNlcnZlciBoaXN0b3J5IGZpbGUnO1xyXG5cclxuICAvKipcclxuICAgKiBhbGVydCBtZXNzYWdlIGNvbnRlbnRcclxuICAgKi9cclxuICBhbGVydE1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYWxlcnQgbWVzc2FnZSB0eXBlXHJcbiAgICovXHJcbiAgYWxlcnRUeXBlOiBBbGVydDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHBvcnQ6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYWxsIHRoZSBwb3J0cyBmcm9tIHRoZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHBvcnRzOiBQb3J0W107XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGVkIHRpbWUgcmFuZ2VcclxuICAgKi9cclxuICBkYXRlVGltZVJhbmdlOiBEYXRlW107XHJcblxyXG4gIC8qKlxyXG4gICAqIGRhdGEgc291cmNlIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlIChyaWdodCBwYXJ0IG9mIHRoZSBjaGFydClcclxuICAgKi9cclxuICB0YWJsZVNvdXJjZTogYW55W107XHJcblxyXG4gIC8qKlxyXG4gICAqIHRoZSBwcm9ncmVzcyBmb3IgcmVhZGluZyBmaWxlXHJcbiAgICovXHJcbiAgcmVhZFByb2dyZXNzID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQvZHJvcHBlZCBmaWxlIG5hbWUgKGFiYnJldmlhdGlvbiksIGZ1bGwgZmlsZSBuYW1lIHdpbGwgYmUgc2hvd24gdmlhIHRoZSB0b29sdGlwc1xyXG4gICAqL1xyXG4gIGFiYnJldmlhdGVkRmlsZU5hbWUgPSAnb3IgRHJvcCBGaWxlIEhlcmUnO1xyXG5cclxuICAvKipcclxuICAgKiBmb3IgdGhlIGluc3RydWN0aW9uIHN0ZXAgNFxyXG4gICAqL1xyXG4gIHN0ZXBTaG93Q2hhcnQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBzaG93aW5nIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGNoYXJ0XHJcbiAgICovXHJcbiAgc2hvd0NoYXJ0RmxhZzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBzaG93aW5nIHRoZSBmaWxlIHJlYWRpbmcgcHJvZ3Jlc3NcclxuICAgKi9cclxuICBzaG93UmVhZEZpbGVQcm9ncmVzczogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBcIkxvYWRcIiBwb3J0cyBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVMb2FkUG9ydHNCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgZW5hYmxpbmcgXCJTaG93XCIgY2hhcnQgYnV0dG9uXHJcbiAgICovXHJcbiAgZW5hYmxlU2hvd0NoYXJ0QnV0dG9uOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIFwiUmVzZXRcIiBjaGFydCBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVSZXNldENoYXJ0QnV0dG9uOiBib29sZWFuO1xyXG5cclxuICBzZWFyY2hUeXBlID0gU2VhcmNoVHlwZS5zZWFyY2hBbGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogY3VycmVudCBkaXNwbGF5aW5nIHBvcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9jdXJyZW50Q2hhcnRQb3J0OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2hhcnRTZXJ2aWNlOiBDaGFydFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1aVNlcnZpY2U6IFVJU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyB0aGlzLnRpbWV6b25lID0gdGhpcy5kZWZhdWx0VGltZXpvbmU7XHJcbiAgICB0aGlzLm9uUmVzaXplKCk7XHJcblxyXG4gICAgLy8gaW5pdCBpdGVtcycgc3RhdHVzXHJcbiAgICAvLyByZXNldCBjaGFydCBidXR0b24gd2lsbCBiZSBkaXNhYmxlIGJ5IGRlZmF1bHQgbGF0ZXIsIG9ubHkgYmUgZW5hYmxlZCBhZnRlciB6b29tZWRcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5jaGFydEFyZWEsIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQubG9hZFBvcnRzQnV0dG9uLCBzdGF0dXM6IHRydWV9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcblxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgZmJjID0gY2hhbmdlcy5maWxlQnVmZmVyO1xyXG4gICAgaWYgKGZiYyAmJiBmYmMuY3VycmVudFZhbHVlICYmIGZiYy5jdXJyZW50VmFsdWUgIT09IGZiYy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIC8vIHNpbXVsYXRlIHNlbGVjdGluZyBmaWxlXHJcbiAgICAgIGNvbnN0IHNpbXVsYXRlZEV2ZW50ID0ge3RhcmdldDoge2ZpbGVzOiBbYmxvYlRvRmlsZSh0aGlzLmZpbGVCdWZmZXIsIHRoaXMuc3RyZWFtTW9kZUZpbGVOYW1lKV19fTtcclxuICAgICAgYXdhaXQgdGhpcy5maWxlU2VsZWN0ZWQoc2ltdWxhdGVkRXZlbnQpO1xyXG4gICAgICB0aGlzLnBvcnQgPSB1bmRlZmluZWQ7IC8vIGNsZWFyIHRoZSBwb3J0IHNlbGVjdGlvblxyXG4gICAgICBpZiAodGhpcy5hdXRvRGlzcGxheSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0NoYXJ0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogUmVzZXQgQ2hhcnQgdG8gaW5pdGlhbCBzdGF0dXNcclxuICAgKiBJZiBsZWdlbmQgaXMgYWxyZWFkeSBzZWxlY3RlZC91bnNlbGVjdGVkIGZyb20gdGhlIGxpc3QsIGl0IHdvdWxkbid0IGJlIHJlc3RvcmVkLlxyXG4gICAqL1xyXG4gIHJlc2V0Q2hhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhYmxlU291cmNlICYmIHRoaXMuX3NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5yZXNldENoYXJ0KHRoaXMudGFibGVTb3VyY2UsIHRoaXMuX3NlbGVjdGlvbilcclxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZCB0aGUgZmlsZSBhbmQgZGlzcGxheSB0aGUgY2hhcnRcclxuICAgKi9cclxuICBzaG93Q2hhcnQoKTogdm9pZCB7XHJcbiAgICAvLyBhZnRlciBjbGljaywgdGhpcyBidXR0b24gYW5kIHJlc2V0IGJ1dHRvbiBuZWVkcyB0byBiZSBkaXNhYmxlZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICB0aGlzLnN0ZXBTaG93Q2hhcnQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuX2luaXRDaGFydEVudigpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZFRpbWUgPSB0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZTtcclxuICAgICAgaWYgKHNlbGVjdGVkVGltZS5zdGFydFRpbWUgPiBzZWxlY3RlZFRpbWUuZW5kVGltZSkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCAnVGltZSByYW5nZSBpcyBub3QgY29ycmVjdC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmlsZSkge1xyXG4gICAgICAgIC8vIGl0J3MgdGltZSBmb3IgZGlzcGxheWluZyB0aGUgcmVhZGluZyBwcm9ncmVzcyBiYXJcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnRGcm9tRGF0YUZpbGUodGhpcy5maWxlLCBzZWxlY3RlZFRpbWUuc3RhcnRUaW1lLCBzZWxlY3RlZFRpbWUuZW5kVGltZSwgdGhpcy5wb3J0KTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goZSA9PiB7XHJcbiAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKTtcclxuICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbG9hZCBhbGwgcG9ydHMgZnJvbSBmaWxlXHJcbiAgICovXHJcbiAgbG9hZFBvcnRzKCk6IHZvaWQge1xyXG4gICAgLy8gZG8gY29uZmlybWF0aW9uIGFjdGlvbnNcclxuICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgLy8gYmVmb3JlIHN0YXJ0IGxvYWRpbmcgcG9ydHMgZnJvbSBmaWxlLCBkaXNwbGF5IHByb2dyZXNzIGJhciBhbmQgZGlzYWJsZSB0aGUgc2hvdyBjaGFydCBidXR0b25cclxuICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiB0cnVlfSxcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1cclxuICAgICAgXSk7XHJcbiAgICAgIHRoaXMuX3JlYWRQb3J0c0Zyb21GaWxlKHRoaXMuZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3QgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyAxIGZpbGUuXHJcbiAgICovXHJcbiAgYXN5bmMgZmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IGdldEZpbGVGcm9tSW5wdXQoZXZlbnQudGFyZ2V0KTtcclxuICAgIGlmIChzZWxlY3RlZEZpbGUpIHtcclxuICAgICAgaWYgKCFpc1NhbWVGaWxlKHRoaXMuZmlsZSwgc2VsZWN0ZWRGaWxlKSkge1xyXG4gICAgICAgIC8vIGluaXQgcG9ydCBzZWxlY3RvclxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2luaXRQb3J0U2VsZWN0b3IoKS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsZSA9IHNlbGVjdGVkRmlsZTtcclxuICAgICAgICB0aGlzLmFiYnJldmlhdGVkRmlsZU5hbWUgPSBnZXRBYmJyZXZpYXRlZEZpbGVOYW1lKHRoaXMuZmlsZS5uYW1lKTtcclxuICAgICAgICAvLyBhZnRlciBmaWxlIGhhcyBiZWVuIHNlbGVjdGVkLCB0aGUgc2hvdyBjaGFydCBidXR0b24gbmVlZHMgdG8gYmUgZW5hYmxlZFxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBkcm9wIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSwgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBmaWxlLlxyXG4gICAqL1xyXG4gIGZpbGVEcm9wcGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIGdldEZpbGVGcm9tRHJvcChldmVudClcclxuICAgICAgLnRoZW4oZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc1NhbWVGaWxlKHRoaXMuZmlsZSwgZmlsZSkpIHtcclxuICAgICAgICAgIC8vIGluaXQgcG9ydCBzZWxlY3RvclxyXG4gICAgICAgICAgdGhpcy5maWxlID0gZmlsZTtcclxuICAgICAgICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5hYmJyZXZpYXRlZEZpbGVOYW1lID0gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSh0aGlzLmZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgIC8vIGFmdGVyIGZpbGUgaGFzIGJlZW4gZHJvcHBlZCwgdGhlIHNob3cgY2hhcnQgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWRcclxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfX0pXHJcbiAgICAgIC50aGVuKCgpID0+ICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IoKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBvbmUgaXRlbSBmcm9tIHNlbGVjdGlvbiB0YWJsZSwgcmVsYXRpdmUgZGF0YXNldCB3aWxsIGJlIHNob3duIG9yIGhpZGRlblxyXG4gICAqL1xyXG4gIHNlbGVjdEl0ZW0oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhYmxlUm93KSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IGV2ZW50LnRhYmxlUm93O1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24udG9nZ2xlKHJvdyk7XHJcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnRvZ2dsZURhdGFJbkNoYXJ0KHJvdy5LUEksICF0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpKVxyXG4gICAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWNhbGN1bGF0aW5nIGNoYXJ0IGhlaWdodCB3aGVuIHJlc2l6aW5nXHJcbiAgICovXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICBjb25zdCBuYW1lc2VydmVySGlzdG9yeUFsbEVsZW1lbnQgPSB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmID8gdGhpcy5uYW1lc2VydmVySGlzdG9yeUFsbFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcclxuICAgIGNvbnN0IG5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudEVsZW1lbnQgPSB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZiA/IHRoaXMubmFtZXNlcnZlckhpc3RvcnlDb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xyXG4gICAgc2V0Q2hhcnRIZWlnaHQobmFtZXNlcnZlckhpc3RvcnlBbGxFbGVtZW50LCBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN3aXRjaCBwb3J0IGFuZCByZWluaXRpYWxpemUgY2hhcnQsIHRyaWdnZXJlZCBieSBjaGFuZ2luZyB0aGUgcG9ydFxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgc3dpdGNoUG9ydEZvckNoYXJ0KHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHBvcnQgPT09IHRoaXMuX2N1cnJlbnRDaGFydFBvcnQpIHtcclxuICAgICAgLy8gbm90IHRvIHN3aXRjaCBwb3J0LCBiZWNhdXNlIHRoZSByZWxhdGl2ZSBwb3J0IGlzIGRpc3BsYXlpbmcsIG5vIG5lZWQgdG8gcmVuZGVyIHR3aWNlLlxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZmlsZSB8fCAhcG9ydCB8fCBwb3J0Lmxlbmd0aCA9PT0gMCB8fCBwb3J0LnNsaWNlKDEsIDMpID09PSAnKionKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXModGhpcy50aW1lKS5sZW5ndGggPiAxICYmICFnZXRSZWFsUG9ydHMoT2JqZWN0LmtleXModGhpcy50aW1lKS5maWx0ZXIoa2V5ID0+IHRoaXMudGltZVtrZXldKSkuaW5jbHVkZXMocG9ydCkpIHtcclxuICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuaW5mbywgYERhdGEgb2YgcG9ydDoke3BvcnR9IGlzIG5vdCBsb2FkZWQsIHBsZWFzZSBsb2FkIHRoZSBkYXRhIGZpcnN0IGJ5IGNsaWNraW5nIHRoZSBcIlNob3dcIiBidXR0b24uYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBvbmx5IGRvIHN3aXRjaCBwb3J0cyB3aGVuIGF2YWlsYWJsZSBwb3J0cyBudW1iZXIgPiAxXHJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aW1lKS5maWx0ZXIoa2V5ID0+IHRoaXMudGltZVtrZXldKS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgdGhlIFwic2hvdyBjaGFydFwiIGFuZCBcInJlc2V0IGNoYXJ0XCIgYnV0dG9uIGZpcnN0XHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG4gICAgICAvLyBpbml0IHRoZSBlbnZpcm9ubWVudCB3aXRoIHN3aXRjaCBmbGFnXHJcbiAgICAgIHRoaXMuX2luaXRDaGFydEVudih0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRDaGFydChwb3J0LCBudWxsLCB0cnVlKTtcclxuICAgICAgfSkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBjb2x1bW5zIHdoaWNoIG5lZWQgdG8gYmUgaGlkZGVuIGZyb20gdGhlIHNlbGVjdGlvbiB0YWJsZVxyXG4gICAqL1xyXG4gIGdldCBoaWRkZW5Db2x1bW5zKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLnVpU2VydmljZS5nZXRIaWRkZW5Db2x1bW5zKHRoaXMuaGlkZU1lYXN1cmVDb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBkZWZhdWx0IHRpbWV6b25lXHJcbiAgICovXHJcbiAgZ2V0IGRlZmF1bHRUaW1lem9uZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldERlZmF1bHRUaW1lem9uZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBrZXkgY29sdW1uIChLUEkpXHJcbiAgICovXHJcbiAgZ2V0IGtwaUNvbHVtbigpOiBJdGVtIHtcclxuICAgIHJldHVybiBJdGVtLmtwaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUga2V5IGNvbHVtbiAoS1BJKVxyXG4gICAqL1xyXG4gIGdldCBkZXNjQ29sdW1uKCk6IEl0ZW0ge1xyXG4gICAgcmV0dXJuIEl0ZW0uZGVzY3JpcHRpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHNlbGVjdGVkIHRpbWUgcmFuZ2UsIHNldCBzZWNvbmQgYW5kIG1pbGxpc2Vjb25kIHBhcnQgdG8gMFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9zZWxlY3RlZFRpbWVSYW5nZSgpOiB7c3RhcnRUaW1lOiBudW1iZXIsIGVuZFRpbWU6IG51bWJlcn0ge1xyXG4gICAgbGV0IHN0YXJ0VGltZSA9IDA7XHJcbiAgICBsZXQgZW5kVGltZSA9IDQxMDIzNTg0MDAwMDA7IC8vIDIwOTkvMTIvMzFcclxuICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2UgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgLy8gZ2V0IHN0YXJ0IHRpbWVcclxuICAgICAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlWzBdKSB7XHJcbiAgICAgICAgICBzdGFydFRpbWUgPSB0aGlzLmRhdGVUaW1lUmFuZ2VbMF0uc2V0U2Vjb25kcygwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZVsxXSkge1xyXG4gICAgICAgICAgZW5kVGltZSA9IHRoaXMuZGF0ZVRpbWVSYW5nZVsxXS5zZXRTZWNvbmRzKDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtzdGFydFRpbWU6IHN0YXJ0VGltZSwgZW5kVGltZTogZW5kVGltZX07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHRpbWUgcmFuZ2Ugc3RyaW5nLCBlZzogMjAxOC0xMC0yNSAxMDoyNSB+IDIwMTgtMTAtMjYgMTA6MjZcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVGltZVJhbmdlU3RyaW5nID0gdGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2U7XHJcbiAgICByZXR1cm4gYCR7Z2V0VGltZVN0cmluZyhzZWxlY3RlZFRpbWVSYW5nZVN0cmluZy5zdGFydFRpbWUpfSB+ICR7Z2V0VGltZVN0cmluZyhzZWxlY3RlZFRpbWVSYW5nZVN0cmluZy5lbmRUaW1lKX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGFycmF5IG9mIGhlYWRlciBrZXlcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfaGVhZGVyS2V5KCk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0aGlzLmhlYWRlcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5oZWFkZXIubWFwKGhlYWRlckl0ZW0gPT4gaGVhZGVySXRlbS5rZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGFycmF5IG9mIGhlYWRlciB0ZXh0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2hlYWRlclRleHQoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyLm1hcChoZWFkZXJJdGVtID0+IGhlYWRlckl0ZW0udGV4dCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWFkIHBvcnRzIGZyb20gdGhlIHNlbGVjdGVkIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIGZpbGUgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBwcml2YXRlIF9yZWFkUG9ydHNGcm9tRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVTZXJ2aWNlLmdldFBvcnRzRnJvbUZpbGUoZmlsZSwgKHByb2dyZXNzKSA9PiB7XHJcbiAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcbiAgICB9KS50aGVuKHBvcnRzID0+IHtcclxuICAgICAgcmV0dXJuIHNsZWVwKDEwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMpO1xyXG4gICAgICB9KTtcclxuICAgIH0pLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGJ1aWxkIGNoYXJ0IGZyb20gdGhlIHNlbGVjdGVkIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIGZpbGUgdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIHN0YXJ0VGltZSBzdGFydCB0aW1lXHJcbiAgICogQHBhcmFtIGVuZFRpbWUgZW5kIHRpbWVcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWRQb3J0IHNlbGVjdGVkIHBvcnQgZm9yIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlIChNREMgc3lzdGVtKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2J1aWxkQ2hhcnRGcm9tRGF0YUZpbGUoZmlsZTogRmlsZSwgc3RhcnRUaW1lOiBudW1iZXIsIGVuZFRpbWU6IG51bWJlciwgc2VsZWN0ZWRQb3J0OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2UuZ2V0Q2hhcnRDb250ZW50RnJvbUZpbGUoXHJcbiAgICAgIGZpbGUsXHJcbiAgICAgIHN0YXJ0VGltZSxcclxuICAgICAgZW5kVGltZSxcclxuICAgICAgc2VsZWN0ZWRQb3J0LFxyXG4gICAgICB0aGlzLnRpbWV6b25lLFxyXG4gICAgICB0aGlzLm1heFJvd3NMaW1pdGF0aW9uLCBwcm9ncmVzcyA9PiB0aGlzLnJlYWRQcm9ncmVzcyA9IHByb2dyZXNzKVxyXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIC8vIHBhcnNpbmcgZG9uZVxyXG4gICAgICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBwb3J0cyA9IGdldFJlYWxQb3J0cyhPYmplY3Qua2V5cyhyZXN1bHQudGltZSksIHRydWUpO1xyXG4gICAgICAgIHBvcnRzLmZvckVhY2gocG9ydCA9PiB7XHJcbiAgICAgICAgICAvLyBjb252ZXJ0IHRoZSB1bml0IGFuZCBnZW5lcmF0ZSBjb250cm9sbGluZyBkYXRhIGZvciBhbGwgcG9ydHNcclxuICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy51aVNlcnZpY2UuY29udmVydFVuaXRBbmRHZW5lcmF0ZUNvbnRyb2xEYXRhKHJlc3VsdC5kYXRhW3BvcnRdLCByZXN1bHQuaGVhZGVyLCBwb3J0KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIGdldCBhbGwgcG9ydHMgZnJvbSB0aGUgYW5hbHl6ZWQgZGF0YSh0aW1lKVxyXG4gICAgICAgICAgICAvLyBnZXQgdGhlIHBvcnQgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSBwYWdlXHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBnZXREaXNwbGF5UG9ydChwb3J0cywgc2VsZWN0ZWRQb3J0KTtcclxuXHJcbiAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdjb252ZXJ0aW5nIHN0ZXAnKTtcclxuICAgICAgICAgICAgcG9ydHMuZm9yRWFjaCggcG9ydEl0ZW0gPT4gdGhpcy51aVNlcnZpY2UuZ2VuZXJhdGVZU2NhbGUocG9ydEl0ZW0pKTtcclxuICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ2dlbmVyYXRpbmcgWVNjYWxlIHN0ZXAnKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMudGltZSA9IHJlc3VsdC50aW1lO1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlciA9IHRoaXMudWlTZXJ2aWNlLmdldEhlYWRlcihyZXN1bHQuaGVhZGVyLCBwb3J0KTtcclxuICAgICAgICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0Lmhvc3Q7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuYWJvcnRlZCA9PT0gQWJvcnQubWF4TGluZU51bVJlYWNoZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShcclxuICAgICAgICAgICAgICAgIEFsZXJ0Lndhcm5pbmcsIGBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyByZWFjaGVkLiBQcm9jZXNzZWQgdGltZSByYW5nZSBpczogJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lKX0uYCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzRW1wdHlEYXRhKHRoaXMuZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmluZm8sIGBDYW5ub3QgZmluZCBhbnkgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHRpbWUgcGVyaW9kOiAke3RoaXMuX3NlbGVjdGVkVGltZVJhbmdlU3RyaW5nfWApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5zdWNjZXNzLCBgUHJvY2Vzc2VkIHRpbWUgcmFuZ2UgaXM6ICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZSl9LmApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2xlZXAoMTAwKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRDaGFydChwb3J0LCBwb3J0cyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVpbml0aWFsaXplIHRoZSBwb3J0IHNlbGVjdG9yIHdpdGggdGhlIHBvcnRzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5pdFBvcnRTZWxlY3Rvcihwb3J0czogc3RyaW5nW10gPSBudWxsLCBzZWxlY3RlZFBvcnQ6IHN0cmluZyA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgLy8gaW5pdGlhbGl6YXRpb24gZm9yIG5neC1zZWxlY3RcclxuICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgcG9ydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIC8vIE1EQywgcmVtb3ZlIGRlZmF1bHQgJzAwMDAnIHBvcnRcclxuICAgICAgICB0aGlzLnBvcnRzID0gZ2VuZXJhdGVQb3J0cyhnZXRSZWFsUG9ydHMocG9ydHMpLCBzZWxlY3RlZFBvcnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9ydHMgPSBnZW5lcmF0ZVBvcnRzKHBvcnRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgc2VsZWN0ZWRQb3J0ID09PSBudWxsKSB7XHJcbiAgICAgICAgLy8gcmVzZXQgc3RhdHVzIHdoZW4gZG9pbmc6XHJcbiAgICAgICAgLy8gMS4gbG9hZGluZyBwb3J0c1xyXG4gICAgICAgIC8vIDIuIHRoZSBmaWxlIGRvZXNuJ3QgY29udGFpbiB0aGUgc2VsZWN0ZWQgUG9ydFxyXG4gICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAvLyBoaWRlIHRoZSBwcm9ncmVzcyBiYXIgYW5kIGVuYWJsZSB0aGUgXCJzaG93IGNoYXJ0XCIgYnV0dG9uXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBidWlsZCBhbmQgZGlzcGxheSB0aGUgY2hhcnQgb24gcGFnZVxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICogQHBhcmFtIHBvcnRzIGFsbCBhdmFpbGFibGUgcG9ydHNcclxuICAgKiBAcGFyYW0gc3dpdGNoRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIHN3aXRjaGluZyBwb3J0cyAobm8gaW5pdCBwb3J0IHNlbGVjdG9yIG5lZWRlZClcclxuICAgKi9cclxuICBwcml2YXRlIF9idWlsZENoYXJ0KHBvcnQ6IHN0cmluZywgcG9ydHM6IHN0cmluZ1tdLCBzd2l0Y2hGbGFnID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgYmVnaW5UaW1lID0gbmV3IERhdGUoKTtcclxuICAgIGlmIChwb3J0KSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbG9hZFNldHRpbmdzRm9yU2VsZWN0aW9uc1RhYmxlKHBvcnQpKVxyXG4gICAgICAgIC50aGVuKCAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBnZXQgdGhlIGNvbmZpZ1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnRTZXJ2aWNlLmJ1aWxkQ2hhcnQoXHJcbiAgICAgICAgICAgIHRoaXMudGltZVtwb3J0XSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhW3BvcnRdLFxyXG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS5nZXRZU2NhbGUodGhpcy5faGVhZGVyS2V5LCBwb3J0KSxcclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyVGV4dCxcclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyS2V5LFxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24sXHJcbiAgICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UsXHJcbiAgICAgICAgICAgIHRoaXMuX2dldEhvc3RUaXRsZShwb3J0KSxcclxuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcyksXHJcbiAgICAgICAgICAgIHRoaXMuX29uWm9vbS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkUHJvZ3Jlc3MgPSAwO1xyXG4gICAgICAgICAgICAgIC8vIGFmdGVyIGNoYXJ0IGhhcyBiZWVuIGNyZWF0ZWQsIHNob3cgdGhlIGNoYXJ0IGFyZWEsIGhpZGUgcHJvZ3Jlc3MgYmFyIGFuZCBlbmFibGUgdGhlIFwic2hvdyBjaGFydFwiIGJ1dHRvblxyXG4gICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuY2hhcnRBcmVhLCBzdGF0dXM6IHRydWV9LFxyXG4gICAgICAgICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XHJcbiAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgLy8gc2V0IHBvcnQgdG8gY3VycmVudCBkaXNwbGF5aW5nIHBvcnRcclxuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2hhcnRQb3J0ID0gcG9ydDtcclxuICAgICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnc3RlcF9idWlsZF9jaGFydCcpO1xyXG4gICAgICAgICAgICAgIGlmIChwb3J0cyAmJiBwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN3aXRjaEZsYWcpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb3J0IHNlbGVjdG9yLiBEbyBub3QgbmVlZCB0byBkbyBpdCB3aGVuIHN3aXRjaGluZyBwb3J0LlxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3Rvcihwb3J0cywgcG9ydCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICBBbGVydC53YXJuaW5nLFxyXG4gICAgICAgICAgJ1RoZSBzZWxlY3RlZCBwb3J0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUuIFBsZWFzZSBjaG9vc2UgYSBjb3JyZWN0IHBvcnQgYW5kIGhhdmUgYSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICAvLyBpbml0aWFsaXplIHBvcnQgc2VsZWN0b3IuIERvIG5vdCBuZWVkIHRvIGRvIGl0IHdoZW4gc3dpdGNoaW5nIHBvcnQuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3Rvcihwb3J0cywgcG9ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSB0aXRsZSBhcmVhIG9mIHRoZSBjaGFydFxyXG4gICAqIGVnOiBob3N0MSAtIDMwMDQwICgyMDE4LTA5LTA1IDE1OjMyOjMyIH4gMjAxOC0wOS0wNyAxNTozMjoxNSlcclxuICAgKiBAcGFyYW0gcG9ydCBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0SG9zdFRpdGxlKHBvcnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5ob3N0KSB7XHJcbiAgICAgIHJldHVybiAgYCR7dGhpcy5ob3N0fSAtICR7cG9ydH0gKCAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWVbcG9ydF0pfSApYDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGFmdGVyIHpvb20sIGVuYWJsZSB0aGUgcmVzZXQgYnV0dG9uLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX29uWm9vbSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGluaXRpYWxpemUgY2hhcnQsIGluY2x1ZGluZzogZGVzdHJveSBjdXJyZW50IGNoYXJ0LCBpbml0aWFsaXplIGNvbmZpZywgaW5pdGlhbGl6ZSBhbGwgcmVsYXRpdmUgZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luaXRDaGFydEVudihzd2l0Y2hGbGFnOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRTZXJ2aWNlLmRlc3Ryb3lDaGFydCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICB7XHJcbiAgICAgICAgLy8gY2xlYW51cCBvdGhlciBkYXRhXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQuY2hhcnRBcmVhLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG5cclxuICAgICAgICBpZiAoIXN3aXRjaEZsYWcpIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMudGltZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnRpbWVba2V5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICB0aGlzLnRpbWUgPSB7fTtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFba2V5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB0aGlzLmhvc3QgPSAnbmFtZXNlcnZlciBoaXN0b3J5IGZpbGUnO1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNvdXJjZSA9IHZvaWQgMDtcclxuICAgICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmNsZWFyTG9hZEhpc3RvcnlJbmZvcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHNldHRpbmdzIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlICh0aGUgcmlnaHQgcGFydCBvZiB0aGUgY2hhcnQpXHJcbiAgICogQHBhcmFtIHBvcnQgdGhlIHNlbGVjdGVkIHBvcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9sb2FkU2V0dGluZ3NGb3JTZWxlY3Rpb25zVGFibGUocG9ydDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlID0gdGhpcy51aVNlcnZpY2UuZ2V0U2VsZWN0aW9uVGFibGVSb3dzKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgW10pO1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnVpU2VydmljZS5nZXREaXNwbGF5SXRlbXModGhpcy5faGVhZGVyS2V5LCBwb3J0LCB0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1zKS5pbmNsdWRlcyhyb3cuS1BJKSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbi5zZWxlY3Qocm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IG1lc3NhZ2VzXHJcbiAgICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3Nob3dNZXNzYWdlKHR5cGU6IEFsZXJ0LCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0eXBlKSB7XHJcbiAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgQWxlcnQuc3VjY2VzczpcclxuICAgICAgICBjYXNlIEFsZXJ0LmluZm86XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEFsZXJ0Lndhcm5pbmc6XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEFsZXJ0LmVycm9yOlxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWxlcnRNZXNzYWdlID09PSBtZXNzYWdlKSB7XHJcbiAgICAgIC8vIHRyeSB0cmlnZ2VyIHRoZSBjaGFuZ2UgZXZlbnQgb2YgdGhlIGFsZXJ0LlxyXG4gICAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IHZvaWQgMDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFsZXJ0TWVzc2FnZSA9IG1lc3NhZ2UsIDEwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFsZXJ0VHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0b2dnbGUgaXRlbXMgd2l0aCB0aGUgcHJvdmlkZWQgc3RhdHVzIChzaG93IG9yIGhpZGUgdGhlIHJlbGF0aXZlIGVsZW1lbnQgb24gdGhlIHBhZ2UpXHJcbiAgICogQHBhcmFtIGl0ZW1zIGl0ZW1zIHdpdGggdGhlIHJlbGF0aXZlIGlkIGFuZCBzdGF0dXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdG9nZ2xlSXRlbXMoaXRlbXM6IHtpZDogSHRtbEVsZW1lbnQsIHN0YXR1czogYm9vbGVhbn1bXSkge1xyXG4gICAgY29uc3QgZ2V0VmFyaWFibGVOYW1lQnlUeXBlSWQgPSAoaWQ6IEh0bWxFbGVtZW50KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LmNoYXJ0QXJlYTogcmV0dXJuICdzaG93Q2hhcnRGbGFnJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3M6IHJldHVybiAnc2hvd1JlYWRGaWxlUHJvZ3Jlc3MnO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uOiByZXR1cm4gJ2VuYWJsZVNob3dDaGFydEJ1dHRvbic7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b246IHJldHVybiAnZW5hYmxlTG9hZFBvcnRzQnV0dG9uJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b246IHJldHVybiAnZW5hYmxlUmVzZXRDaGFydEJ1dHRvbic7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAoaXRlbXMpIHtcclxuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB0aGlzW2dldFZhcmlhYmxlTmFtZUJ5VHlwZUlkKGl0ZW0uaWQpXSA9IGl0ZW0uc3RhdHVzO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAjbmFtZXNlcnZlckhpc3RvcnlBbGwgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktYWxsXCIgKHdpbmRvdzpyZXNpemUpPVwib25SZXNpemUoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWNoYXJ0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWJveC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj5cclxuICAgICAgICA8ZmlsZS1kcm9wLWlucHV0IChmaWxlRHJvcCk9XCJmaWxlRHJvcHBlZCgkZXZlbnQpXCIgKGZpbGVJbnB1dCk9XCJmaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZHJvcEFyZWFUZXh0XT0gXCJhYmJyZXZpYXRlZEZpbGVOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEFyZWFUZXh0XT1cIidCcm93c2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWxlPy5uYW1lPyBmaWxlLm5hbWU6J1NlbGVjdCBhIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSBmcm9tIHlvdXIgbG9jYWwgZGlzay4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbGVCdWZmZXJcIj5cclxuICAgICAgICA8L2ZpbGUtZHJvcC1pbnB1dD5cclxuICAgICAgICA8cCAqbmdJZj1cImZpbGVCdWZmZXJcIiBzdHlsZT1cInBhZGRpbmctdG9wOjEzcHhcIj57e3N0cmVhbU1vZGVGaWxlTmFtZSB8fCAnbmFtZXNlcnZlcl9oaXN0b3J5LnRyYyAoc3RyZWFtIG1vZGUpJ319PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+XHJcbiAgICAgICAgPHByb2dyZXNzLWJhciBbcHJvZ3Jlc3NdPVwicmVhZFByb2dyZXNzXCI+PC9wcm9ncmVzcy1iYXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGltZVwiPlxyXG4gICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10aW1lLXJhbmdlXCI+XHJcbiAgICAgICA8dGltZS1yYW5nZS1zZWxlY3RvciBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIiBbKGRhdGVUaW1lUmFuZ2UpXT1cImRhdGVUaW1lUmFuZ2VcIj48L3RpbWUtcmFuZ2Utc2VsZWN0b3I+XHJcbiAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lem9uZS1zZWxlY3RvclwiPlxyXG4gICAgICAgIDx0aW1lem9uZS1zZWxlY3RvciBbKHRpbWV6b25lKV09XCJ0aW1lem9uZVwiIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPjwvdGltZXpvbmUtc2VsZWN0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInBvcnQtc2VsZWN0aW9uXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwb3J0LXNlbGVjdG9yXCI+XHJcbiAgICAgICAgPHBvcnQtc2VsZWN0b3IgKHBvcnRDaGFuZ2UpPVwic3dpdGNoUG9ydEZvckNoYXJ0KCRldmVudClcIiBbKHBvcnQpXT1cInBvcnRcIiBbcG9ydHNdPVwicG9ydHNcIiBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj48L3BvcnQtc2VsZWN0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicG9ydC1sb2FkLWJ1dHRvblwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRQb3J0cygpXCIgdGl0bGU9XCJMb2FkIGFsbCBwb3J0cyBmcm9tIG5hbWUgc2VydmVyIGhpc3RvcnkgdHJhY2UgZmlsZS5cIiBbZGlzYWJsZWRdPVwiIWVuYWJsZVNob3dDaGFydEJ1dHRvbiB8fCBwb3J0IHx8ICFlbmFibGVMb2FkUG9ydHNCdXR0b25cIj57e3Nob3dSZWFkRmlsZVByb2dyZXNzPyBcIkxvYWRpbmcuLi5cIiA6IFwiTG9hZFwifX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtb3BlcmF0aW9uXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd0NoYXJ0KClcIiB0aXRsZT1cIkxvYWQgYW5kIGRpc3BsYXkgYWxsIGRhdGEgZnJvbSBuYW1lIHNlcnZlciBoaXN0b3J5IHRyYWNlIGZpbGUuXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVTaG93Q2hhcnRCdXR0b25cIj57e3Nob3dSZWFkRmlsZVByb2dyZXNzPyBcIkxvYWRpbmcuLi5cIiA6IFwiU2hvd1wifX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJlc2V0Q2hhcnQoKVwiIHRpdGxlPVwiUmVzZXQgem9vbSBvZiBjaGFydC5cIiBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3MgfHwgIWVuYWJsZVJlc2V0Q2hhcnRCdXR0b25cIj5SZXNldCBDaGFydDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgI25hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudCBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWNvbnRlbnQtY2hhcnRcIj5cclxuICAgICAgPGluc3RydWN0aW9uIFsoc2hvdyldPVwic2hvd0luc3RydWN0aW9uXCIgKm5nSWY9XCIhc2hvd0NoYXJ0RmxhZyAmJiBzaG93SW5zdHJ1Y3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAxRmluaXNoZWRdPVwiISFmaWxlXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwMkZpbmlzaGVkXT1cImRhdGVUaW1lUmFuZ2UgJiYgKCEhZGF0ZVRpbWVSYW5nZVswXSB8fCAhIWRhdGVUaW1lUmFuZ2VbMV0pIHx8IHRpbWV6b25lICE9IGRlZmF1bHRUaW1lem9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDNGaW5pc2hlZF09XCIhIXBvcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXA0RmluaXNoZWRdPVwic3RlcFNob3dDaGFydCAmJiAhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwNUZpbmlzaGVkXT1cImZhbHNlXCI+XHJcbiAgICAgIDwvaW5zdHJ1Y3Rpb24+XHJcbiAgICAgIDxjYW52YXMgaWQ9XCJjaGFydE5hbWVTZXJ2ZXJIaXN0b3J5XCIgPjwvY2FudmFzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWNvbnRlbnQtY29udHJvbGxlclwiID5cclxuICAgICAgPG5neC1zZWxlY3Rpb24tdGFibGUgKGNoYW5nZSk9XCJzZWxlY3RJdGVtKCRldmVudClcIiAqbmdJZj1cInNob3dDaGFydEZsYWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZVNvdXJjZV09XCJ0YWJsZVNvdXJjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXlDb2x1bW5dPVwia3BpQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbkNvbHVtbnNdPVwiaGlkZGVuQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwQ29sdW1uXT1cImRlc2NDb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoU3R5bGVdPVwic2VhcmNoVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hDb2x1bW5dPVwia3BpQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpU2VsZWN0aW9uXT1cInRydWVcIj5cclxuICAgICAgPC9uZ3gtc2VsZWN0aW9uLXRhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwibWVzc2FnZS1jb250YWluZXJcIiAqbmdJZj1cImFsZXJ0TWVzc2FnZVwiPlxyXG4gIDxhbGVydCBbKGFsZXJ0TWVzc2FnZSldPVwiYWxlcnRNZXNzYWdlXCIgW2FsZXJ0VHlwZV09XCJhbGVydFR5cGVcIiBbYWxlcnRUaW1lb3V0XT1cIjMwMDAwXCI+PC9hbGVydD5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
556
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBb0MsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLEtBQUssRUFDTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixZQUFZLEVBQ1osYUFBYSxFQUNiLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixVQUFVLEVBQ1gsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBZ0UsTUFBTSxVQUFVLENBQUM7QUFDekgsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5FLE9BQU8sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sNkJBQTZCLENBQUM7QUFDckMsT0FBTyx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRS9CLElBQUssVUFJSjtBQUpELFdBQUssVUFBVTtJQUNiLHlEQUEyQyxDQUFBO0lBQzNDLHFDQUF1QixDQUFBO0lBQ3ZCLG1EQUFxQyxDQUFBO0FBQ3ZDLENB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SztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBS0csZUFBZTtzQkFBdkIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgc2V0Q2hhcnRIZWlnaHQsXHJcbiAgc2xlZXAsXHJcbiAgaXNFbXB0eURhdGEsXHJcbiAgZ2V0RGlzcGxheVBvcnQsXHJcbiAgZ2V0RmlsZUZyb21JbnB1dCxcclxuICBpc1NhbWVGaWxlLFxyXG4gIGdldEFiYnJldmlhdGVkRmlsZU5hbWUsXHJcbiAgZ2V0RmlsZUZyb21Ecm9wLFxyXG4gIGdldFJlYWxQb3J0cyxcclxuICBnZXRUaW1lU3RyaW5nLFxyXG4gIHByaW50UHJvY2Vzc2VkVGltZSxcclxuICBnZXRUaW1lUmFuZ2VTdHJpbmcsXHJcbiAgZ2VuZXJhdGVQb3J0cyxcclxuICBnZXREZWZhdWx0VGltZXpvbmUsXHJcbiAgYmxvYlRvRmlsZVxyXG59IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQWJvcnQsIEFsZXJ0LCBIdG1sRWxlbWVudCwgSXRlbSwgQ2hhcnRDb250ZW50RGF0YSwgQ2hhcnRDb250ZW50SGVhZGVyLCBDaGFydENvbnRlbnRUaW1lLCBQb3J0IH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBGaWxlU2VydmljZSwgQ2hhcnRTZXJ2aWNlLCBVSVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcblxyXG5pbXBvcnQgJ2hhbW1lcmpzJztcclxuaW1wb3J0ICcuLi91dGlscy9jaGFydGpzLWRvd25zYW1wbGUnO1xyXG5pbXBvcnQgJy4uL3V0aWxzL2NoYXJ0anMtem9vbSc7XHJcblxyXG5lbnVtIFNlYXJjaFR5cGUge1xyXG4gIHNlYXJjaFdpdGhTdWJIZWFkZXIgPSAnc2VhcmNoV2l0aFN1YkhlYWRlcicsXHJcbiAgc2VhcmNoQWxsID0gJ3NlYXJjaEFsbCcsXHJcbiAgc2VhcmNoSW5DaGlsZHJlbiA9ICdzZWFyY2hJbkNoaWxkcmVuJ1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1oYW5hLW5hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uYW1lc2VydmVyLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWyAnLi9uYW1lc2VydmVyLWhpc3RvcnkuY29tcG9uZW50LnNjc3MnIF0sXHJcbiAgcHJvdmlkZXJzOiBbIEZpbGVTZXJ2aWNlLCBDaGFydFNlcnZpY2UsIFVJU2VydmljZSBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYW1lU2VydmVySGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCduYW1lc2VydmVySGlzdG9yeUFsbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuYW1lc2VydmVySGlzdG9yeUFsbFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCduYW1lc2VydmVySGlzdG9yeUNvbnRlbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50UmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW2RlZmF1bHRTZWxlY3RlZEl0ZW1zXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTZWxlY3RlZEl0ZW1zOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFtoaWRlTWVhc3VyZUNvbHVtbnNdXHJcbiAgICovXHJcbiAgQElucHV0KCkgaGlkZU1lYXN1cmVDb2x1bW5zOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFttYXhSb3dzTGltaXRhdGlvbl1cclxuICAgKi9cclxuICBASW5wdXQoKSBtYXhSb3dzTGltaXRhdGlvbjogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW3Nob3dJbnN0cnVjdGlvbl1cclxuICAgKi9cclxuICBASW5wdXQoKSBzaG93SW5zdHJ1Y3Rpb24gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW3RpbWV6b25lXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRpbWV6b25lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbGUgYnVmZmVyLCB1c2UgdGhpcyBmb3Igc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBmaWxlQnVmZmVyOiBCbG9iO1xyXG5cclxuICAvKipcclxuICAgKiBmaWxlIG5hbWUgZm9yIHN0cmVhbSBtb2RlXHJcbiAgICovXHJcbiAgQElucHV0KCkgc3RyZWFtTW9kZUZpbGVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGF1dG8gZGlzcGxheSB0aGUgY2hhcnQgaW4gc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBhdXRvRGlzcGxheTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgZmlsZTogRmlsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogdGltZSBpbmZvIG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICB0aW1lOiBDaGFydENvbnRlbnRUaW1lID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIGRhdGEgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGRhdGE6IENoYXJ0Q29udGVudERhdGEgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogaGVhZGVyIG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBoZWFkZXI6IENoYXJ0Q29udGVudEhlYWRlcltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIGhvc3Qgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGhvc3QgPSAnbmFtZXNlcnZlciBoaXN0b3J5IGZpbGUnO1xyXG5cclxuICAvKipcclxuICAgKiBhbGVydCBtZXNzYWdlIGNvbnRlbnRcclxuICAgKi9cclxuICBhbGVydE1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYWxlcnQgbWVzc2FnZSB0eXBlXHJcbiAgICovXHJcbiAgYWxlcnRUeXBlOiBBbGVydDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHBvcnQ6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYWxsIHRoZSBwb3J0cyBmcm9tIHRoZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHBvcnRzOiBQb3J0W107XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGVkIHRpbWUgcmFuZ2VcclxuICAgKi9cclxuICBkYXRlVGltZVJhbmdlOiBEYXRlW107XHJcblxyXG4gIC8qKlxyXG4gICAqIGRhdGEgc291cmNlIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlIChyaWdodCBwYXJ0IG9mIHRoZSBjaGFydClcclxuICAgKi9cclxuICB0YWJsZVNvdXJjZTogYW55W107XHJcblxyXG4gIC8qKlxyXG4gICAqIHRoZSBwcm9ncmVzcyBmb3IgcmVhZGluZyBmaWxlXHJcbiAgICovXHJcbiAgcmVhZFByb2dyZXNzID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQvZHJvcHBlZCBmaWxlIG5hbWUgKGFiYnJldmlhdGlvbiksIGZ1bGwgZmlsZSBuYW1lIHdpbGwgYmUgc2hvd24gdmlhIHRoZSB0b29sdGlwc1xyXG4gICAqL1xyXG4gIGFiYnJldmlhdGVkRmlsZU5hbWUgPSAnb3IgRHJvcCBGaWxlIEhlcmUnO1xyXG5cclxuICAvKipcclxuICAgKiBmb3IgdGhlIGluc3RydWN0aW9uIHN0ZXAgNFxyXG4gICAqL1xyXG4gIHN0ZXBTaG93Q2hhcnQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBzaG93aW5nIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGNoYXJ0XHJcbiAgICovXHJcbiAgc2hvd0NoYXJ0RmxhZzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBzaG93aW5nIHRoZSBmaWxlIHJlYWRpbmcgcHJvZ3Jlc3NcclxuICAgKi9cclxuICBzaG93UmVhZEZpbGVQcm9ncmVzczogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBcIkxvYWRcIiBwb3J0cyBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVMb2FkUG9ydHNCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgZW5hYmxpbmcgXCJTaG93XCIgY2hhcnQgYnV0dG9uXHJcbiAgICovXHJcbiAgZW5hYmxlU2hvd0NoYXJ0QnV0dG9uOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIFwiUmVzZXRcIiBjaGFydCBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVSZXNldENoYXJ0QnV0dG9uOiBib29sZWFuO1xyXG5cclxuICBzZWFyY2hUeXBlID0gU2VhcmNoVHlwZS5zZWFyY2hBbGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogY3VycmVudCBkaXNwbGF5aW5nIHBvcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9jdXJyZW50Q2hhcnRQb3J0OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2hhcnRTZXJ2aWNlOiBDaGFydFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1aVNlcnZpY2U6IFVJU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyB0aGlzLnRpbWV6b25lID0gdGhpcy5kZWZhdWx0VGltZXpvbmU7XHJcbiAgICB0aGlzLm9uUmVzaXplKCk7XHJcblxyXG4gICAgLy8gaW5pdCBpdGVtcycgc3RhdHVzXHJcbiAgICAvLyByZXNldCBjaGFydCBidXR0b24gd2lsbCBiZSBkaXNhYmxlIGJ5IGRlZmF1bHQgbGF0ZXIsIG9ubHkgYmUgZW5hYmxlZCBhZnRlciB6b29tZWRcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5jaGFydEFyZWEsIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQubG9hZFBvcnRzQnV0dG9uLCBzdGF0dXM6IHRydWV9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcblxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgZmJjID0gY2hhbmdlcy5maWxlQnVmZmVyO1xyXG4gICAgaWYgKGZiYyAmJiBmYmMuY3VycmVudFZhbHVlICYmIGZiYy5jdXJyZW50VmFsdWUgIT09IGZiYy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIC8vIHNpbXVsYXRlIHNlbGVjdGluZyBmaWxlXHJcbiAgICAgIGNvbnN0IHNpbXVsYXRlZEV2ZW50ID0ge3RhcmdldDoge2ZpbGVzOiBbYmxvYlRvRmlsZSh0aGlzLmZpbGVCdWZmZXIsIHRoaXMuc3RyZWFtTW9kZUZpbGVOYW1lKV19fTtcclxuICAgICAgYXdhaXQgdGhpcy5maWxlU2VsZWN0ZWQoc2ltdWxhdGVkRXZlbnQpO1xyXG4gICAgICB0aGlzLnBvcnQgPSB1bmRlZmluZWQ7IC8vIGNsZWFyIHRoZSBwb3J0IHNlbGVjdGlvblxyXG4gICAgICBpZiAodGhpcy5hdXRvRGlzcGxheSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0NoYXJ0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogUmVzZXQgQ2hhcnQgdG8gaW5pdGlhbCBzdGF0dXNcclxuICAgKiBJZiBsZWdlbmQgaXMgYWxyZWFkeSBzZWxlY3RlZC91bnNlbGVjdGVkIGZyb20gdGhlIGxpc3QsIGl0IHdvdWxkbid0IGJlIHJlc3RvcmVkLlxyXG4gICAqL1xyXG4gIHJlc2V0Q2hhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhYmxlU291cmNlICYmIHRoaXMuX3NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5yZXNldENoYXJ0KHRoaXMudGFibGVTb3VyY2UsIHRoaXMuX3NlbGVjdGlvbilcclxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZCB0aGUgZmlsZSBhbmQgZGlzcGxheSB0aGUgY2hhcnRcclxuICAgKi9cclxuICBzaG93Q2hhcnQoKTogdm9pZCB7XHJcbiAgICAvLyBhZnRlciBjbGljaywgdGhpcyBidXR0b24gYW5kIHJlc2V0IGJ1dHRvbiBuZWVkcyB0byBiZSBkaXNhYmxlZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICB0aGlzLnN0ZXBTaG93Q2hhcnQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuX2luaXRDaGFydEVudigpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZFRpbWUgPSB0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZTtcclxuICAgICAgaWYgKHNlbGVjdGVkVGltZS5zdGFydFRpbWUgPiBzZWxlY3RlZFRpbWUuZW5kVGltZSkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCAnVGltZSByYW5nZSBpcyBub3QgY29ycmVjdC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmlsZSkge1xyXG4gICAgICAgIC8vIGl0J3MgdGltZSBmb3IgZGlzcGxheWluZyB0aGUgcmVhZGluZyBwcm9ncmVzcyBiYXJcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnRGcm9tRGF0YUZpbGUodGhpcy5maWxlLCBzZWxlY3RlZFRpbWUuc3RhcnRUaW1lLCBzZWxlY3RlZFRpbWUuZW5kVGltZSwgdGhpcy5wb3J0KTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goZSA9PiB7XHJcbiAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKTtcclxuICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbG9hZCBhbGwgcG9ydHMgZnJvbSBmaWxlXHJcbiAgICovXHJcbiAgbG9hZFBvcnRzKCk6IHZvaWQge1xyXG4gICAgLy8gZG8gY29uZmlybWF0aW9uIGFjdGlvbnNcclxuICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgLy8gYmVmb3JlIHN0YXJ0IGxvYWRpbmcgcG9ydHMgZnJvbSBmaWxlLCBkaXNwbGF5IHByb2dyZXNzIGJhciBhbmQgZGlzYWJsZSB0aGUgc2hvdyBjaGFydCBidXR0b25cclxuICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiB0cnVlfSxcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1cclxuICAgICAgXSk7XHJcbiAgICAgIHRoaXMuX3JlYWRQb3J0c0Zyb21GaWxlKHRoaXMuZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3QgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyAxIGZpbGUuXHJcbiAgICovXHJcbiAgYXN5bmMgZmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IGdldEZpbGVGcm9tSW5wdXQoZXZlbnQudGFyZ2V0KTtcclxuICAgIGlmIChzZWxlY3RlZEZpbGUpIHtcclxuICAgICAgaWYgKCFpc1NhbWVGaWxlKHRoaXMuZmlsZSwgc2VsZWN0ZWRGaWxlKSkge1xyXG4gICAgICAgIC8vIGluaXQgcG9ydCBzZWxlY3RvclxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2luaXRQb3J0U2VsZWN0b3IoKS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsZSA9IHNlbGVjdGVkRmlsZTtcclxuICAgICAgICB0aGlzLmFiYnJldmlhdGVkRmlsZU5hbWUgPSBnZXRBYmJyZXZpYXRlZEZpbGVOYW1lKHRoaXMuZmlsZS5uYW1lKTtcclxuICAgICAgICAvLyBhZnRlciBmaWxlIGhhcyBiZWVuIHNlbGVjdGVkLCB0aGUgc2hvdyBjaGFydCBidXR0b24gbmVlZHMgdG8gYmUgZW5hYmxlZFxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBkcm9wIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSwgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBmaWxlLlxyXG4gICAqL1xyXG4gIGZpbGVEcm9wcGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIGdldEZpbGVGcm9tRHJvcChldmVudClcclxuICAgICAgLnRoZW4oZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc1NhbWVGaWxlKHRoaXMuZmlsZSwgZmlsZSkpIHtcclxuICAgICAgICAgIC8vIGluaXQgcG9ydCBzZWxlY3RvclxyXG4gICAgICAgICAgdGhpcy5maWxlID0gZmlsZTtcclxuICAgICAgICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5hYmJyZXZpYXRlZEZpbGVOYW1lID0gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSh0aGlzLmZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgIC8vIGFmdGVyIGZpbGUgaGFzIGJlZW4gZHJvcHBlZCwgdGhlIHNob3cgY2hhcnQgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWRcclxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfX0pXHJcbiAgICAgIC50aGVuKCgpID0+ICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IoKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBvbmUgaXRlbSBmcm9tIHNlbGVjdGlvbiB0YWJsZSwgcmVsYXRpdmUgZGF0YXNldCB3aWxsIGJlIHNob3duIG9yIGhpZGRlblxyXG4gICAqL1xyXG4gIHNlbGVjdEl0ZW0oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhYmxlUm93KSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IGV2ZW50LnRhYmxlUm93O1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24udG9nZ2xlKHJvdyk7XHJcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnRvZ2dsZURhdGFJbkNoYXJ0KHJvdy5LUEksICF0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpKVxyXG4gICAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWNhbGN1bGF0aW5nIGNoYXJ0IGhlaWdodCB3aGVuIHJlc2l6aW5nXHJcbiAgICovXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICBjb25zdCBuYW1lc2VydmVySGlzdG9yeUFsbEVsZW1lbnQgPSB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmID8gdGhpcy5uYW1lc2VydmVySGlzdG9yeUFsbFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcclxuICAgIGNvbnN0IG5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudEVsZW1lbnQgPSB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZiA/IHRoaXMubmFtZXNlcnZlckhpc3RvcnlDb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xyXG4gICAgc2V0Q2hhcnRIZWlnaHQobmFtZXNlcnZlckhpc3RvcnlBbGxFbGVtZW50LCBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN3aXRjaCBwb3J0IGFuZCByZWluaXRpYWxpemUgY2hhcnQsIHRyaWdnZXJlZCBieSBjaGFuZ2luZyB0aGUgcG9ydFxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgc3dpdGNoUG9ydEZvckNoYXJ0KHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHBvcnQgPT09IHRoaXMuX2N1cnJlbnRDaGFydFBvcnQpIHtcclxuICAgICAgLy8gbm90IHRvIHN3aXRjaCBwb3J0LCBiZWNhdXNlIHRoZSByZWxhdGl2ZSBwb3J0IGlzIGRpc3BsYXlpbmcsIG5vIG5lZWQgdG8gcmVuZGVyIHR3aWNlLlxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZmlsZSB8fCAhcG9ydCB8fCBwb3J0Lmxlbmd0aCA9PT0gMCB8fCBwb3J0LnNsaWNlKDEsIDMpID09PSAnKionKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXModGhpcy50aW1lKS5sZW5ndGggPiAxICYmICFnZXRSZWFsUG9ydHMoT2JqZWN0LmtleXModGhpcy50aW1lKS5maWx0ZXIoa2V5ID0+IHRoaXMudGltZVtrZXldKSkuaW5jbHVkZXMocG9ydCkpIHtcclxuICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuaW5mbywgYERhdGEgb2YgcG9ydDoke3BvcnR9IGlzIG5vdCBsb2FkZWQsIHBsZWFzZSBsb2FkIHRoZSBkYXRhIGZpcnN0IGJ5IGNsaWNraW5nIHRoZSBcIlNob3dcIiBidXR0b24uYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBvbmx5IGRvIHN3aXRjaCBwb3J0cyB3aGVuIGF2YWlsYWJsZSBwb3J0cyBudW1iZXIgPiAxXHJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aW1lKS5maWx0ZXIoa2V5ID0+IHRoaXMudGltZVtrZXldKS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgdGhlIFwic2hvdyBjaGFydFwiIGFuZCBcInJlc2V0IGNoYXJ0XCIgYnV0dG9uIGZpcnN0XHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG4gICAgICAvLyBpbml0IHRoZSBlbnZpcm9ubWVudCB3aXRoIHN3aXRjaCBmbGFnXHJcbiAgICAgIHRoaXMuX2luaXRDaGFydEVudih0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRDaGFydChwb3J0LCBudWxsLCB0cnVlKTtcclxuICAgICAgfSkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBjb2x1bW5zIHdoaWNoIG5lZWQgdG8gYmUgaGlkZGVuIGZyb20gdGhlIHNlbGVjdGlvbiB0YWJsZVxyXG4gICAqL1xyXG4gIGdldCBoaWRkZW5Db2x1bW5zKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLnVpU2VydmljZS5nZXRIaWRkZW5Db2x1bW5zKHRoaXMuaGlkZU1lYXN1cmVDb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBkZWZhdWx0IHRpbWV6b25lXHJcbiAgICovXHJcbiAgZ2V0IGRlZmF1bHRUaW1lem9uZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldERlZmF1bHRUaW1lem9uZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBrZXkgY29sdW1uIChLUEkpXHJcbiAgICovXHJcbiAgZ2V0IGtwaUNvbHVtbigpOiBJdGVtIHtcclxuICAgIHJldHVybiBJdGVtLmtwaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUga2V5IGNvbHVtbiAoS1BJKVxyXG4gICAqL1xyXG4gIGdldCBkZXNjQ29sdW1uKCk6IEl0ZW0ge1xyXG4gICAgcmV0dXJuIEl0ZW0uZGVzY3JpcHRpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHNlbGVjdGVkIHRpbWUgcmFuZ2UsIHNldCBzZWNvbmQgYW5kIG1pbGxpc2Vjb25kIHBhcnQgdG8gMFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9zZWxlY3RlZFRpbWVSYW5nZSgpOiB7c3RhcnRUaW1lOiBudW1iZXIsIGVuZFRpbWU6IG51bWJlcn0ge1xyXG4gICAgbGV0IHN0YXJ0VGltZSA9IDA7XHJcbiAgICBsZXQgZW5kVGltZSA9IDQxMDIzNTg0MDAwMDA7IC8vIDIwOTkvMTIvMzFcclxuICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2UgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgLy8gZ2V0IHN0YXJ0IHRpbWVcclxuICAgICAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlWzBdKSB7XHJcbiAgICAgICAgICBzdGFydFRpbWUgPSB0aGlzLmRhdGVUaW1lUmFuZ2VbMF0uc2V0U2Vjb25kcygwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZVsxXSkge1xyXG4gICAgICAgICAgZW5kVGltZSA9IHRoaXMuZGF0ZVRpbWVSYW5nZVsxXS5zZXRTZWNvbmRzKDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtzdGFydFRpbWU6IHN0YXJ0VGltZSwgZW5kVGltZTogZW5kVGltZX07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHRpbWUgcmFuZ2Ugc3RyaW5nLCBlZzogMjAxOC0xMC0yNSAxMDoyNSB+IDIwMTgtMTAtMjYgMTA6MjZcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVGltZVJhbmdlU3RyaW5nID0gdGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2U7XHJcbiAgICByZXR1cm4gYCR7Z2V0VGltZVN0cmluZyhzZWxlY3RlZFRpbWVSYW5nZVN0cmluZy5zdGFydFRpbWUpfSB+ICR7Z2V0VGltZVN0cmluZyhzZWxlY3RlZFRpbWVSYW5nZVN0cmluZy5lbmRUaW1lKX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGFycmF5IG9mIGhlYWRlciBrZXlcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfaGVhZGVyS2V5KCk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0aGlzLmhlYWRlcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5oZWFkZXIubWFwKGhlYWRlckl0ZW0gPT4gaGVhZGVySXRlbS5rZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGFycmF5IG9mIGhlYWRlciB0ZXh0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2hlYWRlclRleHQoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyLm1hcChoZWFkZXJJdGVtID0+IGhlYWRlckl0ZW0udGV4dCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWFkIHBvcnRzIGZyb20gdGhlIHNlbGVjdGVkIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIGZpbGUgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBwcml2YXRlIF9yZWFkUG9ydHNGcm9tRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVTZXJ2aWNlLmdldFBvcnRzRnJvbUZpbGUoZmlsZSwgKHByb2dyZXNzKSA9PiB7XHJcbiAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcbiAgICB9KS50aGVuKHBvcnRzID0+IHtcclxuICAgICAgcmV0dXJuIHNsZWVwKDEwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMpO1xyXG4gICAgICB9KTtcclxuICAgIH0pLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGJ1aWxkIGNoYXJ0IGZyb20gdGhlIHNlbGVjdGVkIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIGZpbGUgdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIHN0YXJ0VGltZSBzdGFydCB0aW1lXHJcbiAgICogQHBhcmFtIGVuZFRpbWUgZW5kIHRpbWVcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWRQb3J0IHNlbGVjdGVkIHBvcnQgZm9yIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlIChNREMgc3lzdGVtKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2J1aWxkQ2hhcnRGcm9tRGF0YUZpbGUoZmlsZTogRmlsZSwgc3RhcnRUaW1lOiBudW1iZXIsIGVuZFRpbWU6IG51bWJlciwgc2VsZWN0ZWRQb3J0OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2UuZ2V0Q2hhcnRDb250ZW50RnJvbUZpbGUoXHJcbiAgICAgIGZpbGUsXHJcbiAgICAgIHN0YXJ0VGltZSxcclxuICAgICAgZW5kVGltZSxcclxuICAgICAgc2VsZWN0ZWRQb3J0LFxyXG4gICAgICB0aGlzLnRpbWV6b25lLFxyXG4gICAgICB0aGlzLm1heFJvd3NMaW1pdGF0aW9uLCBwcm9ncmVzcyA9PiB0aGlzLnJlYWRQcm9ncmVzcyA9IHByb2dyZXNzKVxyXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIC8vIHBhcnNpbmcgZG9uZVxyXG4gICAgICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBwb3J0cyA9IGdldFJlYWxQb3J0cyhPYmplY3Qua2V5cyhyZXN1bHQudGltZSksIHRydWUpO1xyXG4gICAgICAgIHBvcnRzLmZvckVhY2gocG9ydCA9PiB7XHJcbiAgICAgICAgICAvLyBjb252ZXJ0IHRoZSB1bml0IGFuZCBnZW5lcmF0ZSBjb250cm9sbGluZyBkYXRhIGZvciBhbGwgcG9ydHNcclxuICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy51aVNlcnZpY2UuY29udmVydFVuaXRBbmRHZW5lcmF0ZUNvbnRyb2xEYXRhKHJlc3VsdC5kYXRhW3BvcnRdLCByZXN1bHQuaGVhZGVyLCBwb3J0KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIGdldCBhbGwgcG9ydHMgZnJvbSB0aGUgYW5hbHl6ZWQgZGF0YSh0aW1lKVxyXG4gICAgICAgICAgICAvLyBnZXQgdGhlIHBvcnQgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSBwYWdlXHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBnZXREaXNwbGF5UG9ydChwb3J0cywgc2VsZWN0ZWRQb3J0KTtcclxuXHJcbiAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdjb252ZXJ0aW5nIHN0ZXAnKTtcclxuICAgICAgICAgICAgcG9ydHMuZm9yRWFjaCggcG9ydEl0ZW0gPT4gdGhpcy51aVNlcnZpY2UuZ2VuZXJhdGVZU2NhbGUocG9ydEl0ZW0pKTtcclxuICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ2dlbmVyYXRpbmcgWVNjYWxlIHN0ZXAnKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMudGltZSA9IHJlc3VsdC50aW1lO1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlciA9IHRoaXMudWlTZXJ2aWNlLmdldEhlYWRlcihyZXN1bHQuaGVhZGVyLCBwb3J0KTtcclxuICAgICAgICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0Lmhvc3Q7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuYWJvcnRlZCA9PT0gQWJvcnQubWF4TGluZU51bVJlYWNoZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShcclxuICAgICAgICAgICAgICAgIEFsZXJ0Lndhcm5pbmcsIGBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyByZWFjaGVkLiBQcm9jZXNzZWQgdGltZSByYW5nZSBpczogJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lKX0uYCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzRW1wdHlEYXRhKHRoaXMuZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmluZm8sIGBDYW5ub3QgZmluZCBhbnkgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHRpbWUgcGVyaW9kOiAke3RoaXMuX3NlbGVjdGVkVGltZVJhbmdlU3RyaW5nfWApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5zdWNjZXNzLCBgUHJvY2Vzc2VkIHRpbWUgcmFuZ2UgaXM6ICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZSl9LmApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2xlZXAoMTAwKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRDaGFydChwb3J0LCBwb3J0cyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVpbml0aWFsaXplIHRoZSBwb3J0IHNlbGVjdG9yIHdpdGggdGhlIHBvcnRzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5pdFBvcnRTZWxlY3Rvcihwb3J0czogc3RyaW5nW10gPSBudWxsLCBzZWxlY3RlZFBvcnQ6IHN0cmluZyA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgLy8gaW5pdGlhbGl6YXRpb24gZm9yIG5neC1zZWxlY3RcclxuICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgcG9ydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIC8vIE1EQywgcmVtb3ZlIGRlZmF1bHQgJzAwMDAnIHBvcnRcclxuICAgICAgICB0aGlzLnBvcnRzID0gZ2VuZXJhdGVQb3J0cyhnZXRSZWFsUG9ydHMocG9ydHMpLCBzZWxlY3RlZFBvcnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9ydHMgPSBnZW5lcmF0ZVBvcnRzKHBvcnRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgc2VsZWN0ZWRQb3J0ID09PSBudWxsKSB7XHJcbiAgICAgICAgLy8gcmVzZXQgc3RhdHVzIHdoZW4gZG9pbmc6XHJcbiAgICAgICAgLy8gMS4gbG9hZGluZyBwb3J0c1xyXG4gICAgICAgIC8vIDIuIHRoZSBmaWxlIGRvZXNuJ3QgY29udGFpbiB0aGUgc2VsZWN0ZWQgUG9ydFxyXG4gICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAvLyBoaWRlIHRoZSBwcm9ncmVzcyBiYXIgYW5kIGVuYWJsZSB0aGUgXCJzaG93IGNoYXJ0XCIgYnV0dG9uXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBidWlsZCBhbmQgZGlzcGxheSB0aGUgY2hhcnQgb24gcGFnZVxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICogQHBhcmFtIHBvcnRzIGFsbCBhdmFpbGFibGUgcG9ydHNcclxuICAgKiBAcGFyYW0gc3dpdGNoRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIHN3aXRjaGluZyBwb3J0cyAobm8gaW5pdCBwb3J0IHNlbGVjdG9yIG5lZWRlZClcclxuICAgKi9cclxuICBwcml2YXRlIF9idWlsZENoYXJ0KHBvcnQ6IHN0cmluZywgcG9ydHM6IHN0cmluZ1tdLCBzd2l0Y2hGbGFnID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgYmVnaW5UaW1lID0gbmV3IERhdGUoKTtcclxuICAgIGlmIChwb3J0KSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbG9hZFNldHRpbmdzRm9yU2VsZWN0aW9uc1RhYmxlKHBvcnQpKVxyXG4gICAgICAgIC50aGVuKCAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBnZXQgdGhlIGNvbmZpZ1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnRTZXJ2aWNlLmJ1aWxkQ2hhcnQoXHJcbiAgICAgICAgICAgIHRoaXMudGltZVtwb3J0XSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhW3BvcnRdLFxyXG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS5nZXRZU2NhbGUodGhpcy5faGVhZGVyS2V5LCBwb3J0KSxcclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyVGV4dCxcclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyS2V5LFxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24sXHJcbiAgICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UsXHJcbiAgICAgICAgICAgIHRoaXMuX2dldEhvc3RUaXRsZShwb3J0KSxcclxuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcyksXHJcbiAgICAgICAgICAgIHRoaXMuX29uWm9vbS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkUHJvZ3Jlc3MgPSAwO1xyXG4gICAgICAgICAgICAgIC8vIGFmdGVyIGNoYXJ0IGhhcyBiZWVuIGNyZWF0ZWQsIHNob3cgdGhlIGNoYXJ0IGFyZWEsIGhpZGUgcHJvZ3Jlc3MgYmFyIGFuZCBlbmFibGUgdGhlIFwic2hvdyBjaGFydFwiIGJ1dHRvblxyXG4gICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuY2hhcnRBcmVhLCBzdGF0dXM6IHRydWV9LFxyXG4gICAgICAgICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XHJcbiAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgLy8gc2V0IHBvcnQgdG8gY3VycmVudCBkaXNwbGF5aW5nIHBvcnRcclxuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2hhcnRQb3J0ID0gcG9ydDtcclxuICAgICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnc3RlcF9idWlsZF9jaGFydCcpO1xyXG4gICAgICAgICAgICAgIGlmIChwb3J0cyAmJiBwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN3aXRjaEZsYWcpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb3J0IHNlbGVjdG9yLiBEbyBub3QgbmVlZCB0byBkbyBpdCB3aGVuIHN3aXRjaGluZyBwb3J0LlxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3Rvcihwb3J0cywgcG9ydCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICBBbGVydC53YXJuaW5nLFxyXG4gICAgICAgICAgJ1RoZSBzZWxlY3RlZCBwb3J0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUuIFBsZWFzZSBjaG9vc2UgYSBjb3JyZWN0IHBvcnQgYW5kIGhhdmUgYSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICAvLyBpbml0aWFsaXplIHBvcnQgc2VsZWN0b3IuIERvIG5vdCBuZWVkIHRvIGRvIGl0IHdoZW4gc3dpdGNoaW5nIHBvcnQuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3Rvcihwb3J0cywgcG9ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSB0aXRsZSBhcmVhIG9mIHRoZSBjaGFydFxyXG4gICAqIGVnOiBob3N0MSAtIDMwMDQwICgyMDE4LTA5LTA1IDE1OjMyOjMyIH4gMjAxOC0wOS0wNyAxNTozMjoxNSlcclxuICAgKiBAcGFyYW0gcG9ydCBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0SG9zdFRpdGxlKHBvcnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5ob3N0KSB7XHJcbiAgICAgIHJldHVybiAgYCR7dGhpcy5ob3N0fSAtICR7cG9ydH0gKCAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWVbcG9ydF0pfSApYDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGFmdGVyIHpvb20sIGVuYWJsZSB0aGUgcmVzZXQgYnV0dG9uLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX29uWm9vbSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGluaXRpYWxpemUgY2hhcnQsIGluY2x1ZGluZzogZGVzdHJveSBjdXJyZW50IGNoYXJ0LCBpbml0aWFsaXplIGNvbmZpZywgaW5pdGlhbGl6ZSBhbGwgcmVsYXRpdmUgZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luaXRDaGFydEVudihzd2l0Y2hGbGFnOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRTZXJ2aWNlLmRlc3Ryb3lDaGFydCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICB7XHJcbiAgICAgICAgLy8gY2xlYW51cCBvdGhlciBkYXRhXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQuY2hhcnRBcmVhLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG5cclxuICAgICAgICBpZiAoIXN3aXRjaEZsYWcpIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMudGltZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnRpbWVba2V5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICB0aGlzLnRpbWUgPSB7fTtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFba2V5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB0aGlzLmhvc3QgPSAnbmFtZXNlcnZlciBoaXN0b3J5IGZpbGUnO1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNvdXJjZSA9IHZvaWQgMDtcclxuICAgICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmNsZWFyTG9hZEhpc3RvcnlJbmZvcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHNldHRpbmdzIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlICh0aGUgcmlnaHQgcGFydCBvZiB0aGUgY2hhcnQpXHJcbiAgICogQHBhcmFtIHBvcnQgdGhlIHNlbGVjdGVkIHBvcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9sb2FkU2V0dGluZ3NGb3JTZWxlY3Rpb25zVGFibGUocG9ydDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlID0gdGhpcy51aVNlcnZpY2UuZ2V0U2VsZWN0aW9uVGFibGVSb3dzKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgW10pO1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnVpU2VydmljZS5nZXREaXNwbGF5SXRlbXModGhpcy5faGVhZGVyS2V5LCBwb3J0LCB0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1zKS5pbmNsdWRlcyhyb3cuS1BJKSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbi5zZWxlY3Qocm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IG1lc3NhZ2VzXHJcbiAgICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3Nob3dNZXNzYWdlKHR5cGU6IEFsZXJ0LCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0eXBlKSB7XHJcbiAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgQWxlcnQuc3VjY2VzczpcclxuICAgICAgICBjYXNlIEFsZXJ0LmluZm86XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEFsZXJ0Lndhcm5pbmc6XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEFsZXJ0LmVycm9yOlxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWxlcnRNZXNzYWdlID09PSBtZXNzYWdlKSB7XHJcbiAgICAgIC8vIHRyeSB0cmlnZ2VyIHRoZSBjaGFuZ2UgZXZlbnQgb2YgdGhlIGFsZXJ0LlxyXG4gICAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IHZvaWQgMDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFsZXJ0TWVzc2FnZSA9IG1lc3NhZ2UsIDEwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFsZXJ0VHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0b2dnbGUgaXRlbXMgd2l0aCB0aGUgcHJvdmlkZWQgc3RhdHVzIChzaG93IG9yIGhpZGUgdGhlIHJlbGF0aXZlIGVsZW1lbnQgb24gdGhlIHBhZ2UpXHJcbiAgICogQHBhcmFtIGl0ZW1zIGl0ZW1zIHdpdGggdGhlIHJlbGF0aXZlIGlkIGFuZCBzdGF0dXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdG9nZ2xlSXRlbXMoaXRlbXM6IHtpZDogSHRtbEVsZW1lbnQsIHN0YXR1czogYm9vbGVhbn1bXSkge1xyXG4gICAgY29uc3QgZ2V0VmFyaWFibGVOYW1lQnlUeXBlSWQgPSAoaWQ6IEh0bWxFbGVtZW50KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LmNoYXJ0QXJlYTogcmV0dXJuICdzaG93Q2hhcnRGbGFnJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3M6IHJldHVybiAnc2hvd1JlYWRGaWxlUHJvZ3Jlc3MnO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uOiByZXR1cm4gJ2VuYWJsZVNob3dDaGFydEJ1dHRvbic7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b246IHJldHVybiAnZW5hYmxlTG9hZFBvcnRzQnV0dG9uJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b246IHJldHVybiAnZW5hYmxlUmVzZXRDaGFydEJ1dHRvbic7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAoaXRlbXMpIHtcclxuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB0aGlzW2dldFZhcmlhYmxlTmFtZUJ5VHlwZUlkKGl0ZW0uaWQpXSA9IGl0ZW0uc3RhdHVzO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAjbmFtZXNlcnZlckhpc3RvcnlBbGwgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktYWxsXCIgKHdpbmRvdzpyZXNpemUpPVwib25SZXNpemUoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWNoYXJ0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWJveC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj5cclxuICAgICAgICA8ZmlsZS1kcm9wLWlucHV0IChmaWxlRHJvcCk9XCJmaWxlRHJvcHBlZCgkZXZlbnQpXCIgKGZpbGVJbnB1dCk9XCJmaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZHJvcEFyZWFUZXh0XT0gXCJhYmJyZXZpYXRlZEZpbGVOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEFyZWFUZXh0XT1cIidCcm93c2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWxlPy5uYW1lPyBmaWxlLm5hbWU6J1NlbGVjdCBhIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSBmcm9tIHlvdXIgbG9jYWwgZGlzay4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbGVCdWZmZXJcIj5cclxuICAgICAgICA8L2ZpbGUtZHJvcC1pbnB1dD5cclxuICAgICAgICA8cCAqbmdJZj1cImZpbGVCdWZmZXJcIiBjbGFzcz1cImJveC1zdHJlYW0tbW9kZS10ZXh0XCI+e3tzdHJlYW1Nb2RlRmlsZU5hbWUgfHwgJ25hbWVzZXJ2ZXJfaGlzdG9yeS50cmMgKHN0cmVhbSBtb2RlKSd9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPlxyXG4gICAgICAgIDxwcm9ncmVzcy1iYXIgW3Byb2dyZXNzXT1cInJlYWRQcm9ncmVzc1wiPjwvcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LXRpbWVcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGltZS1yYW5nZVwiPlxyXG4gICAgICAgPHRpbWUtcmFuZ2Utc2VsZWN0b3IgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCIgWyhkYXRlVGltZVJhbmdlKV09XCJkYXRlVGltZVJhbmdlXCI+PC90aW1lLXJhbmdlLXNlbGVjdG9yPlxyXG4gICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGltZXpvbmUtc2VsZWN0b3JcIj5cclxuICAgICAgICA8dGltZXpvbmUtc2VsZWN0b3IgWyh0aW1lem9uZSldPVwidGltZXpvbmVcIiBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj48L3RpbWV6b25lLXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwb3J0LXNlbGVjdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicG9ydC1zZWxlY3RvclwiPlxyXG4gICAgICAgIDxwb3J0LXNlbGVjdG9yIChwb3J0Q2hhbmdlKT1cInN3aXRjaFBvcnRGb3JDaGFydCgkZXZlbnQpXCIgWyhwb3J0KV09XCJwb3J0XCIgW3BvcnRzXT1cInBvcnRzXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+PC9wb3J0LXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvcnQtbG9hZC1idXR0b25cIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkUG9ydHMoKVwiIHRpdGxlPVwiTG9hZCBhbGwgcG9ydHMgZnJvbSBuYW1lIHNlcnZlciBoaXN0b3J5IHRyYWNlIGZpbGUuXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVTaG93Q2hhcnRCdXR0b24gfHwgcG9ydCB8fCAhZW5hYmxlTG9hZFBvcnRzQnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIkxvYWRcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LW9wZXJhdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNob3dDaGFydCgpXCIgdGl0bGU9XCJMb2FkIGFuZCBkaXNwbGF5IGFsbCBkYXRhIGZyb20gbmFtZSBzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlLlwiIFtkaXNhYmxlZF09XCIhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIlNob3dcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZXNldENoYXJ0KClcIiB0aXRsZT1cIlJlc2V0IHpvb20gb2YgY2hhcnQuXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzIHx8ICFlbmFibGVSZXNldENoYXJ0QnV0dG9uXCI+UmVzZXQgQ2hhcnQ8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNuYW1lc2VydmVySGlzdG9yeUNvbnRlbnQgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNoYXJ0XCI+XHJcbiAgICAgIDxpbnN0cnVjdGlvbiBbKHNob3cpXT1cInNob3dJbnN0cnVjdGlvblwiICpuZ0lmPVwiIXNob3dDaGFydEZsYWcgJiYgc2hvd0luc3RydWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwMUZpbmlzaGVkXT1cIiEhZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDJGaW5pc2hlZF09XCJkYXRlVGltZVJhbmdlICYmICghIWRhdGVUaW1lUmFuZ2VbMF0gfHwgISFkYXRlVGltZVJhbmdlWzFdKSB8fCB0aW1lem9uZSAhPSBkZWZhdWx0VGltZXpvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAzRmluaXNoZWRdPVwiISFwb3J0XCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwNEZpbmlzaGVkXT1cInN0ZXBTaG93Q2hhcnQgJiYgIWVuYWJsZVNob3dDaGFydEJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDVGaW5pc2hlZF09XCJmYWxzZVwiPlxyXG4gICAgICA8L2luc3RydWN0aW9uPlxyXG4gICAgICA8Y2FudmFzIGlkPVwiY2hhcnROYW1lU2VydmVySGlzdG9yeVwiID48L2NhbnZhcz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNvbnRyb2xsZXJcIiA+XHJcbiAgICAgIDxuZ3gtc2VsZWN0aW9uLXRhYmxlIChjaGFuZ2UpPVwic2VsZWN0SXRlbSgkZXZlbnQpXCIgKm5nSWY9XCJzaG93Q2hhcnRGbGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5Q29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5Db2x1bW5zXT1cImhpZGRlbkNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcENvbHVtbl09XCJkZXNjQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0eWxlXT1cInNlYXJjaFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoQ29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aVNlbGVjdGlvbl09XCJ0cnVlXCI+XHJcbiAgICAgIDwvbmd4LXNlbGVjdGlvbi10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgKm5nSWY9XCJhbGVydE1lc3NhZ2VcIj5cclxuICA8YWxlcnQgWyhhbGVydE1lc3NhZ2UpXT1cImFsZXJ0TWVzc2FnZVwiIFthbGVydFR5cGVdPVwiYWxlcnRUeXBlXCIgW2FsZXJ0VGltZW91dF09XCIzMDAwMFwiPjwvYWxlcnQ+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -37,7 +37,7 @@ TimeRangeSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
|
|
|
37
37
|
<owl-date-time #dtRange3 (afterPickerClosed)="afterPickerClosed()"></owl-date-time>
|
|
38
38
|
</div>
|
|
39
39
|
</div>
|
|
40
|
-
`, isInline: true, styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .time-range input:hover,.time-range :host input:hover,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .time-range input,.time-range :host input,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left
|
|
40
|
+
`, isInline: true, styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .time-range input:hover,.time-range :host input:hover,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .time-range input,.time-range :host input,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .upload-box-content .box-stream-mode-text{text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}.time-range{width:100%;box-sizing:border-box}.time-range .time-range-from{width:48.5%;float:left;margin-left:1%;margin-right:1%}.time-range .time-range-to{width:48.5%;float:right;margin-right:1%}.time-range input{margin-top:6px;width:100%;padding:6px 12px;color:#495057;cursor:pointer}.time-range input:disabled{box-shadow:none}\n"], components: [{ type: i1.OwlDateTimeComponent, selector: "owl-date-time", inputs: ["backdropClass", "panelClass", "startAt", "endAt", "pickerType", "pickerMode", "disabled", "opened", "scrollStrategy"], outputs: ["afterPickerClosed", "afterPickerOpen", "yearSelected", "monthSelected", "dateSelected"], exportAs: ["owlDateTime"] }], directives: [{ type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.OwlDateTimeInputDirective, selector: "input[owlDateTime]", inputs: ["required", "owlDateTime", "owlDateTimeFilter", "_disabled", "min", "max", "selectMode", "rangeSeparator", "value", "values"], outputs: ["dateTimeChange", "dateTimeInput"], exportAs: ["owlDateTimeInput"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1.OwlDateTimeTriggerDirective, selector: "[owlDateTimeTrigger]", inputs: ["owlDateTimeTrigger", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
41
41
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: TimeRangeSelectorComponent, decorators: [{
|
|
42
42
|
type: Component,
|
|
43
43
|
args: [{ selector: 'time-range-selector', template: `
|
|
@@ -59,7 +59,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
59
59
|
<owl-date-time #dtRange3 (afterPickerClosed)="afterPickerClosed()"></owl-date-time>
|
|
60
60
|
</div>
|
|
61
61
|
</div>
|
|
62
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .time-range input:hover,.time-range :host input:hover,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .time-range input,.time-range :host input,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left
|
|
62
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .time-range input:hover,.time-range :host input:hover,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .time-range input,.time-range :host input,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .upload-box-content .box-stream-mode-text{text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}.time-range{width:100%;box-sizing:border-box}.time-range .time-range-from{width:48.5%;float:left;margin-left:1%;margin-right:1%}.time-range .time-range-to{width:48.5%;float:right;margin-right:1%}.time-range input{margin-top:6px;width:100%;padding:6px 12px;color:#495057;cursor:pointer}.time-range input:disabled{box-shadow:none}\n"] }]
|
|
63
63
|
}], propDecorators: { disabled: [{
|
|
64
64
|
type: Input
|
|
65
65
|
}], dateTimeRange: [{
|
|
@@ -155,8 +155,8 @@ export function setChartHeight(nsAll, nsContent) {
|
|
|
155
155
|
// const item1 = (document.getElementsByClassName('nameserver-history-all') as HTMLCollectionOf<HTMLElement>)[0];
|
|
156
156
|
// const item2 = (document.getElementsByClassName('nameserver-history-content') as HTMLCollectionOf<HTMLElement>)[0];
|
|
157
157
|
if (nsAll && nsContent) {
|
|
158
|
-
const chartHeight = nsAll.offsetWidth * 0.75 / 2
|
|
158
|
+
const chartHeight = nsAll.offsetWidth * 0.75 / 2;
|
|
159
159
|
nsContent.style.height = `${chartHeight}px`;
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL3V0aWxzL3VpLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUMsUUFBUSxFQUF5QixNQUFNLFVBQVUsQ0FBQztBQUUxRDs7R0FFRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBRWxDOzs7O0dBSUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFN0Y7O0dBRUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCO0lBQ3JDLE9BQU8sdUJBQXVCLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWUsRUFBRSxJQUFZO0lBQzFELElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNyQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMseUJBQXlCO1lBQ3pCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLDRDQUE0QztnQkFDNUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQjtpQkFBTTtnQkFDTCxpRUFBaUU7Z0JBQ2pFLElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7b0JBQ2hCLElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQy9CO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsaURBQWlEO1lBQ2pELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUM3QixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1RDtpQkFBTTtnQkFDTCxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQzthQUN4QztTQUNGO0tBQ0Y7U0FBTTtRQUNMLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztLQUNmO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLFFBQWtCLElBQUksRUFBRSxlQUF1QixJQUFJO0lBQy9FLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQztLQUNiO1NBQU07UUFDTCx1RkFBdUY7UUFDdkYsSUFBSSxZQUFZLElBQUksSUFBSSxJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNGLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvRDtRQUVELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUM7UUFDM0QsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsc0NBQXNDO1lBQ3RDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDWDtRQUNELE1BQU0sUUFBUSxHQUFXLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFrQjtJQUM5QyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsUUFBUSxRQUFRLEVBQUU7UUFDaEIsS0FBSyxRQUFRLENBQUMsTUFBTTtZQUNsQixhQUFhO1lBQ2IsVUFBVSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLE1BQU07UUFDUixLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDckIsS0FBSyxRQUFRLENBQUMsU0FBUztZQUNyQixhQUFhO1lBQ2IsVUFBVSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7WUFDekIsTUFBTTtRQUNSLEtBQUssUUFBUSxDQUFDLFVBQVU7WUFDdEIseUJBQXlCO1lBQ3pCLFVBQVUsR0FBRyxPQUFPLENBQUM7S0FDeEI7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBQ0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWEsRUFBRSxJQUFjO0lBQzFELE9BQU8sQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFhO0lBQzNDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBRSxJQUFjO0lBQy9DLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxTQUFTLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxPQUFPLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxVQUFVLENBQUM7QUFDbEcsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFhO0lBQzNDLHdDQUF3QztJQUN4QyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7UUFDZCxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUU7UUFDbEIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxLQUFLLEVBQUU7UUFDdEIsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQ2xCO0lBQ0QsSUFBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLEtBQUssRUFBRTtRQUN2QixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDbEI7SUFFRCxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBc0I7SUFDaEQsSUFBSSxJQUFJLEVBQUU7UUFDUixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoRTtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1I7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsS0FBSyxDQUFFLElBQVk7SUFDakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTO0lBQzdDLGlIQUFpSDtJQUNqSCxxSEFBcUg7SUFDckgsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO1FBQ3RCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEQsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxXQUFXLElBQUksQ0FBQztLQUM3QztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRSZWFsUG9ydHMgfSBmcm9tICcuL2ZpbGUtdXRpbCc7XHJcbmltcG9ydCB7VW5pdFR5cGUsIFBvcnQsIENoYXJ0Q29udGVudERhdGF9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbi8qKlxyXG4gKiBGb3Igc29tZSByZWFzb24sIGhhbmEgc3R1ZGlvIHdpbGwgYWJhbmRvbiB0aGUgbGFzdCBsaW5lIG9mIG5hbWVzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlXHJcbiAqL1xyXG5jb25zdCBfSUdOT1JFRF9MSU5FX0ZST01fVEFJTCA9IDE7XHJcblxyXG4vKipcclxuICogTm9uZSBpbmRleCBzZXJ2ZXIgcG9ydHMgaW4gbmFtZSBzZXJ2ZXIgaGlzdG9yeSxcclxuICogMDE6IG5hbWUgc2VydmVyOyAwMjogcHJlcHJvY2Vzc29yOyAwNDogc2NyaXB0IHNlcnZlcjsgMDU6IHN0YXRpc3RpY3Mgc2VydmVyIC8gZGlzZXJ2ZXI7XHJcbiAqIDA2OiB3ZWIgZGlzcGF0Y2hlcjsgMDc6IHhzZW5naW5lOyAxMCBjb21waWxlc2VydmVyOyAxMSBkcHNlcnZlcjsgMTIgZXNzZXJ2ZXI7IDI5IHhzY29udHJvbGxlclxyXG4gKi9cclxuY29uc3QgX05PTl9JTkRFWF9TRVJWRVJfUE9SVFMgPSBbJzAxJywgJzAyJywgJzA0JywgJzA1JywgJzA2JywgJzA3JywgJzEwJywgJzExJywgJzEyJywgJzI5J107XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBpZ25vcmVkIGxpbmUgbnVtYmVyIGZyb20gdGFpbCAoRm9yIHNvbWUgcmVhc29uLCBoYW5hIHN0dWRpbyB3aWxsIGFiYW5kb24gdGhlIGxhc3QgbGluZSBvZiBuYW1lc2VydmVyIGhpc3RvcnkgdHJhY2UgZmlsZSkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWdub3JlZExpbmVOdW1Gcm9tVGFpbCgpIHtcclxuICAgIHJldHVybiBfSUdOT1JFRF9MSU5FX0ZST01fVEFJTDtcclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCB0aGUgcG9ydCB0aGF0IG5lZWRzIHRvIGJlIGRpc3BsYXllZCBmcm9tIHBvcnRzIGxpc3QgdmlhIHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAqIEBwYXJhbSBwb3J0cyBvdmVyYWxsIHBvcnRzIGxpc3RcclxuICogQHBhcmFtIHBvcnQgdGhlIHNlbGVjdGVkIHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5UG9ydChwb3J0czogc3RyaW5nW10sIHBvcnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgaWYgKHBvcnRzICE9IG51bGwgJiYgcG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgaWYgKHBvcnQgPT0gbnVsbCB8fCBwb3J0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAvLyBpZiBubyBwb3J0IGlzIHNlbGVjdGVkXHJcbiAgICAgIGlmIChwb3J0cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAvLyBub3QgbWRjIHN5c3RlbSwgd2lsbCBkaXNwbGF5IHRoZSBvbmx5IG9uZVxyXG4gICAgICAgIHBvcnQgPSBwb3J0c1swXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IHNlcnZpY2UgKG5vdCBpbiBfTk9OX0lOREVYX1NFUlZFUl9QT1JUUyBsaXN0KVxyXG4gICAgICAgIHBvcnQgPSBnZXRSZWFsUG9ydHMocG9ydHMpLmZpbmQocCA9PiBfTk9OX0lOREVYX1NFUlZFUl9QT1JUUy5pbmRleE9mKHAuc2xpY2UoLTIpKSA8IDApO1xyXG4gICAgICAgIGlmIChwb3J0ID09IG51bGwpIHtcclxuICAgICAgICAgIHBvcnQgPSBnZXRSZWFsUG9ydHMocG9ydHMpWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZ2V0IHJlYWwgcG9ydCBpcyBwb3J0IGlzIHNvbWUgdGhpbmcgbGlrZSAzKiowM1xyXG4gICAgICBpZiAocG9ydC5zbGljZSgxLCAzKSA9PT0gJyoqJykge1xyXG4gICAgICAgIHBvcnQgPSBwb3J0cy5maW5kKGtleSA9PiBrZXkuc2xpY2UoLTIpID09PSBwb3J0LnNsaWNlKC0yKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcG9ydCA9IHBvcnRzLmZpbmQoa2V5ID0+IGtleSA9PT0gcG9ydCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgcG9ydCA9IHZvaWQgMDtcclxuICB9XHJcbiAgcmV0dXJuIHBvcnQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZSB0aGUgcG9ydHMgZm9yIG5neC1zZWxlY3QuXHJcbiAqIElmIHRoZSBwcm92aWRlZCBwb3J0cyBpcyBub3QgbnVsbCBhbmQgbm8gcG9ydCBoYXMgYmVlbiBzZWxlY3RlZCxcclxuICogd2lsbCBjaG9vc2UgdGhlIGZpcnN0IGl0ZW0gd2hpY2ggaXMgbm90IDAxIChuYW1lc2VydmVyKSBvciAwNyAoeHNlbmdpbmUpXHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQb3J0cyhwb3J0czogc3RyaW5nW10gPSBudWxsLCBzZWxlY3RlZFBvcnQ6IHN0cmluZyA9IG51bGwpOiBQb3J0W10ge1xyXG4gIGlmIChwb3J0cyA9PSBudWxsKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gaWYgbm8gc2VsZWN0aW9uLCBjaG9vc2UgdGhlIGZpcnN0IGl0ZW0gd2hpY2ggaXMgbm90IDAxIChuYW1lc2VydmVyKSBvciAwNyAoeHNlbmdpbmUpXHJcbiAgICBpZiAoc2VsZWN0ZWRQb3J0ID09IG51bGwgfHwgc2VsZWN0ZWRQb3J0ID09PSAnJykge1xyXG4gICAgICBjb25zdCBmaXJzdEluZGV4U2VydmVyID0gcG9ydHMuZmluZChwID0+IF9OT05fSU5ERVhfU0VSVkVSX1BPUlRTLmluZGV4T2YocC5zbGljZSgtMikpIDwgMCk7XHJcbiAgICAgIHNlbGVjdGVkUG9ydCA9IGZpcnN0SW5kZXhTZXJ2ZXIgPyBmaXJzdEluZGV4U2VydmVyIDogcG9ydHNbMF07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGluZGV4ID0gcG9ydHMuZmluZEluZGV4KHBvcnQgPT4gcG9ydCA9PT0gc2VsZWN0ZWRQb3J0KTtcclxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgLy8gc2VsZWN0aW9uIGlzIG5vdCBleGlzdHMgaW4gdGhlIGZpbGVcclxuICAgICAgaW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3UG9ydHM6IFBvcnRbXSA9IHBvcnRzLm1hcChwb3J0ID0+ICh7aWQ6IHBvcnQsIHRleHQ6IHBvcnR9KSk7XHJcbiAgICBuZXdQb3J0c1tpbmRleF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG5ld1BvcnRzO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCB1bml0IGZhY3RvciBieSB1bml0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pdEZhY3Rvcih1bml0VHlwZTogVW5pdFR5cGUpOiBudW1iZXIge1xyXG4gIGxldCB1bml0RmFjdG9yID0gMTtcclxuICBzd2l0Y2ggKHVuaXRUeXBlKSB7XHJcbiAgICBjYXNlIFVuaXRUeXBlLlR5cGVHQjpcclxuICAgICAgLy8gQllURSB0byBHQlxyXG4gICAgICB1bml0RmFjdG9yID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgVW5pdFR5cGUuVHlwZU1COlxyXG4gICAgY2FzZSBVbml0VHlwZS5UeXBlTUJTZWM6XHJcbiAgICAgIC8vIEJZVEUgdG8gTUJcclxuICAgICAgdW5pdEZhY3RvciA9IDEwMjQgKiAxMDI0O1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgVW5pdFR5cGUuVHlwZVNlY1NlYzpcclxuICAgICAgLy8gbWljcm8gc2Vjb25kIHRvIHNlY29uZFxyXG4gICAgICB1bml0RmFjdG9yID0gMTAwMDAwMDtcclxuICB9XHJcbiAgcmV0dXJuIHVuaXRGYWN0b3I7XHJcbn1cclxuLyoqXHJcbiAqIGdldCB2YWx1ZSBieSB1bml0IChkaXZpZGVkIGJ5IHRoZSB1bml0IGZhY3RvcikuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVCeVVuaXQodmFsdWU6IG51bWJlciwgdW5pdDogVW5pdFR5cGUpOiBudW1iZXIge1xyXG4gIHJldHVybiAodmFsdWUgLyBnZXRVbml0RmFjdG9yKHVuaXQpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCByb3VuZGVkIHZhbHVlOiBpZiB2YWx1ZSA+PSAxMCwgcm91bmQgdG8gaW50ZWdlcjsgaWYgdmFsdWUgPCAxMCwgcm91bmQgdG8gYXQgbW9zdCAyIGRlY2ltYWwgcGxhY2VzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91bmRlZFZhbHVlKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gIHJldHVybiB2YWx1ZSA+PSAxMCA/IE1hdGgucm91bmQgKHZhbHVlKSA6IE1hdGgucm91bmQodmFsdWUgKiAxMDApIC8gMTAwO1xyXG59XHJcblxyXG4vKipcclxuICogY2hlY2sgd2hldGhlciB1bml0IGlzIHRpbWUgcmVsYXRlZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1VuaXRUaW1lUmVsYXRlZCAodW5pdDogVW5pdFR5cGUpOiBib29sZWFuIHtcclxuICByZXR1cm4gdW5pdCA9PT0gVW5pdFR5cGUuVHlwZU1CU2VjIHx8IHVuaXQgPT09IFVuaXRUeXBlLlR5cGVTZWMgfHwgdW5pdCA9PT0gVW5pdFR5cGUuVHlwZVNlY1NlYztcclxufVxyXG5cclxuLyoqXHJcbiAqIGNhbGN1bGF0ZSBZU2NhbGUgYmFzZSBvbiB0aGUgcHJvdmlkZWQgdmFsdWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVZU2NhbGUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgLy8gcm91bmQgdXAgdG8gbmV4dCAyLDUsMTAsMjAsNTAsMTAwLC4uLlxyXG4gIGlmICh2YWx1ZSA8PSAwKSB7XHJcbiAgICByZXR1cm4gMTAwO1xyXG4gIH1cclxuICBjb25zdCBzY2FsZSA9IE1hdGgucG93KCAxMCwgTWF0aC5mbG9vcihNYXRoLmxvZzEwKHZhbHVlKSkpO1xyXG4gIGlmIChzY2FsZSA+PSB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHNjYWxlO1xyXG4gIH1cclxuICBpZiAoMiAqIHNjYWxlID49IHZhbHVlKSB7XHJcbiAgICByZXR1cm4gMiAqIHNjYWxlO1xyXG4gIH1cclxuICBpZiAoIDUgKiBzY2FsZSA+PSB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIDUgKiBzY2FsZTtcclxuICB9XHJcblxyXG4gIHJldHVybiAxMCAqIHNjYWxlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eURhdGEoZGF0YTogQ2hhcnRDb250ZW50RGF0YSk6IGJvb2xlYW4ge1xyXG4gIGlmIChkYXRhKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGF0YSkuZmluZEluZGV4KHBvcnQgPT4ge1xyXG4gICAgICBpZiAocG9ydCAhPSBudWxsICYmIGRhdGFbcG9ydF0pIHtcclxuICAgICAgICByZXR1cm4gZGF0YVtwb3J0XS5maW5kSW5kZXgocm93ID0+IHJvdyAmJiByb3cubGVuZ3RoID4gMCkgPj0gMDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KSA8IDA7XHJcbiAgfVxyXG4gIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAgKHRpbWU6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENoYXJ0SGVpZ2h0KG5zQWxsLCBuc0NvbnRlbnQpOiB2b2lkIHtcclxuICAvLyBjb25zdCBpdGVtMSA9IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduYW1lc2VydmVyLWhpc3RvcnktYWxsJykgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pWzBdO1xyXG4gIC8vIGNvbnN0IGl0ZW0yID0gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50JykgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pWzBdO1xyXG4gIGlmIChuc0FsbCAmJiBuc0NvbnRlbnQpIHtcclxuICAgIGNvbnN0IGNoYXJ0SGVpZ2h0ID0gbnNBbGwub2Zmc2V0V2lkdGggKiAwLjc1IC8gMiArIDEwO1xyXG4gICAgbnNDb250ZW50LnN0eWxlLmhlaWdodCA9IGAke2NoYXJ0SGVpZ2h0fXB4YDtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL3V0aWxzL3VpLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUMsUUFBUSxFQUF5QixNQUFNLFVBQVUsQ0FBQztBQUUxRDs7R0FFRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBRWxDOzs7O0dBSUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFN0Y7O0dBRUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCO0lBQ3JDLE9BQU8sdUJBQXVCLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWUsRUFBRSxJQUFZO0lBQzFELElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNyQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMseUJBQXlCO1lBQ3pCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLDRDQUE0QztnQkFDNUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQjtpQkFBTTtnQkFDTCxpRUFBaUU7Z0JBQ2pFLElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FB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QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBc0I7SUFDaEQsSUFBSSxJQUFJLEVBQUU7UUFDUixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoRTtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1I7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsS0FBSyxDQUFFLElBQVk7SUFDakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTO0lBQzdDLGlIQUFpSDtJQUNqSCxxSEFBcUg7SUFDckgsSUFBSSxLQUFLLElBQUksU0FBUyxFQUFFO1FBQ3RCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNqRCxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFdBQVcsSUFBSSxDQUFDO0tBQzdDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFJlYWxQb3J0cyB9IGZyb20gJy4vZmlsZS11dGlsJztcclxuaW1wb3J0IHtVbml0VHlwZSwgUG9ydCwgQ2hhcnRDb250ZW50RGF0YX0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIEZvciBzb21lIHJlYXNvbiwgaGFuYSBzdHVkaW8gd2lsbCBhYmFuZG9uIHRoZSBsYXN0IGxpbmUgb2YgbmFtZXNlcnZlciBoaXN0b3J5IHRyYWNlIGZpbGVcclxuICovXHJcbmNvbnN0IF9JR05PUkVEX0xJTkVfRlJPTV9UQUlMID0gMTtcclxuXHJcbi8qKlxyXG4gKiBOb25lIGluZGV4IHNlcnZlciBwb3J0cyBpbiBuYW1lIHNlcnZlciBoaXN0b3J5LFxyXG4gKiAwMTogbmFtZSBzZXJ2ZXI7IDAyOiBwcmVwcm9jZXNzb3I7IDA0OiBzY3JpcHQgc2VydmVyOyAwNTogc3RhdGlzdGljcyBzZXJ2ZXIgLyBkaXNlcnZlcjtcclxuICogMDY6IHdlYiBkaXNwYXRjaGVyOyAwNzogeHNlbmdpbmU7IDEwIGNvbXBpbGVzZXJ2ZXI7IDExIGRwc2VydmVyOyAxMiBlc3NlcnZlcjsgMjkgeHNjb250cm9sbGVyXHJcbiAqL1xyXG5jb25zdCBfTk9OX0lOREVYX1NFUlZFUl9QT1JUUyA9IFsnMDEnLCAnMDInLCAnMDQnLCAnMDUnLCAnMDYnLCAnMDcnLCAnMTAnLCAnMTEnLCAnMTInLCAnMjknXTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIGlnbm9yZWQgbGluZSBudW1iZXIgZnJvbSB0YWlsIChGb3Igc29tZSByZWFzb24sIGhhbmEgc3R1ZGlvIHdpbGwgYWJhbmRvbiB0aGUgbGFzdCBsaW5lIG9mIG5hbWVzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlKS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJZ25vcmVkTGluZU51bUZyb21UYWlsKCkge1xyXG4gICAgcmV0dXJuIF9JR05PUkVEX0xJTkVfRlJPTV9UQUlMO1xyXG59XHJcblxyXG4vKipcclxuICogZ2V0IHRoZSBwb3J0IHRoYXQgbmVlZHMgdG8gYmUgZGlzcGxheWVkIGZyb20gcG9ydHMgbGlzdCB2aWEgdGhlIHNlbGVjdGVkIHBvcnRcclxuICogQHBhcmFtIHBvcnRzIG92ZXJhbGwgcG9ydHMgbGlzdFxyXG4gKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3BsYXlQb3J0KHBvcnRzOiBzdHJpbmdbXSwgcG9ydDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBpZiAocG9ydHMgIT0gbnVsbCAmJiBwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICBpZiAocG9ydCA9PSBudWxsIHx8IHBvcnQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIC8vIGlmIG5vIHBvcnQgaXMgc2VsZWN0ZWRcclxuICAgICAgaWYgKHBvcnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIC8vIG5vdCBtZGMgc3lzdGVtLCB3aWxsIGRpc3BsYXkgdGhlIG9ubHkgb25lXHJcbiAgICAgICAgcG9ydCA9IHBvcnRzWzBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHNlbGVjdCB0aGUgZmlyc3Qgc2VydmljZSAobm90IGluIF9OT05fSU5ERVhfU0VSVkVSX1BPUlRTIGxpc3QpXHJcbiAgICAgICAgcG9ydCA9IGdldFJlYWxQb3J0cyhwb3J0cykuZmluZChwID0+IF9OT05fSU5ERVhfU0VSVkVSX1BPUlRTLmluZGV4T2YocC5zbGljZSgtMikpIDwgMCk7XHJcbiAgICAgICAgaWYgKHBvcnQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgcG9ydCA9IGdldFJlYWxQb3J0cyhwb3J0cylbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBnZXQgcmVhbCBwb3J0IGlzIHBvcnQgaXMgc29tZSB0aGluZyBsaWtlIDMqKjAzXHJcbiAgICAgIGlmIChwb3J0LnNsaWNlKDEsIDMpID09PSAnKionKSB7XHJcbiAgICAgICAgcG9ydCA9IHBvcnRzLmZpbmQoa2V5ID0+IGtleS5zbGljZSgtMikgPT09IHBvcnQuc2xpY2UoLTIpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwb3J0ID0gcG9ydHMuZmluZChrZXkgPT4ga2V5ID09PSBwb3J0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBwb3J0ID0gdm9pZCAwO1xyXG4gIH1cclxuICByZXR1cm4gcG9ydDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHRoZSBwb3J0cyBmb3Igbmd4LXNlbGVjdC5cclxuICogSWYgdGhlIHByb3ZpZGVkIHBvcnRzIGlzIG5vdCBudWxsIGFuZCBubyBwb3J0IGhhcyBiZWVuIHNlbGVjdGVkLFxyXG4gKiB3aWxsIGNob29zZSB0aGUgZmlyc3QgaXRlbSB3aGljaCBpcyBub3QgMDEgKG5hbWVzZXJ2ZXIpIG9yIDA3ICh4c2VuZ2luZSlcclxuICpcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBvcnRzKHBvcnRzOiBzdHJpbmdbXSA9IG51bGwsIHNlbGVjdGVkUG9ydDogc3RyaW5nID0gbnVsbCk6IFBvcnRbXSB7XHJcbiAgaWYgKHBvcnRzID09IG51bGwpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBpZiBubyBzZWxlY3Rpb24sIGNob29zZSB0aGUgZmlyc3QgaXRlbSB3aGljaCBpcyBub3QgMDEgKG5hbWVzZXJ2ZXIpIG9yIDA3ICh4c2VuZ2luZSlcclxuICAgIGlmIChzZWxlY3RlZFBvcnQgPT0gbnVsbCB8fCBzZWxlY3RlZFBvcnQgPT09ICcnKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0SW5kZXhTZXJ2ZXIgPSBwb3J0cy5maW5kKHAgPT4gX05PTl9JTkRFWF9TRVJWRVJfUE9SVFMuaW5kZXhPZihwLnNsaWNlKC0yKSkgPCAwKTtcclxuICAgICAgc2VsZWN0ZWRQb3J0ID0gZmlyc3RJbmRleFNlcnZlciA/IGZpcnN0SW5kZXhTZXJ2ZXIgOiBwb3J0c1swXTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXggPSBwb3J0cy5maW5kSW5kZXgocG9ydCA9PiBwb3J0ID09PSBzZWxlY3RlZFBvcnQpO1xyXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICAvLyBzZWxlY3Rpb24gaXMgbm90IGV4aXN0cyBpbiB0aGUgZmlsZVxyXG4gICAgICBpbmRleCA9IDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdQb3J0czogUG9ydFtdID0gcG9ydHMubWFwKHBvcnQgPT4gKHtpZDogcG9ydCwgdGV4dDogcG9ydH0pKTtcclxuICAgIG5ld1BvcnRzW2luZGV4XS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICByZXR1cm4gbmV3UG9ydHM7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZ2V0IHVuaXQgZmFjdG9yIGJ5IHVuaXRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRVbml0RmFjdG9yKHVuaXRUeXBlOiBVbml0VHlwZSk6IG51bWJlciB7XHJcbiAgbGV0IHVuaXRGYWN0b3IgPSAxO1xyXG4gIHN3aXRjaCAodW5pdFR5cGUpIHtcclxuICAgIGNhc2UgVW5pdFR5cGUuVHlwZUdCOlxyXG4gICAgICAvLyBCWVRFIHRvIEdCXHJcbiAgICAgIHVuaXRGYWN0b3IgPSAxMDI0ICogMTAyNCAqIDEwMjQ7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBVbml0VHlwZS5UeXBlTUI6XHJcbiAgICBjYXNlIFVuaXRUeXBlLlR5cGVNQlNlYzpcclxuICAgICAgLy8gQllURSB0byBNQlxyXG4gICAgICB1bml0RmFjdG9yID0gMTAyNCAqIDEwMjQ7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSBVbml0VHlwZS5UeXBlU2VjU2VjOlxyXG4gICAgICAvLyBtaWNybyBzZWNvbmQgdG8gc2Vjb25kXHJcbiAgICAgIHVuaXRGYWN0b3IgPSAxMDAwMDAwO1xyXG4gIH1cclxuICByZXR1cm4gdW5pdEZhY3RvcjtcclxufVxyXG4vKipcclxuICogZ2V0IHZhbHVlIGJ5IHVuaXQgKGRpdmlkZWQgYnkgdGhlIHVuaXQgZmFjdG9yKS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUJ5VW5pdCh2YWx1ZTogbnVtYmVyLCB1bml0OiBVbml0VHlwZSk6IG51bWJlciB7XHJcbiAgcmV0dXJuICh2YWx1ZSAvIGdldFVuaXRGYWN0b3IodW5pdCkpO1xyXG59XHJcblxyXG4vKipcclxuICogZ2V0IHJvdW5kZWQgdmFsdWU6IGlmIHZhbHVlID49IDEwLCByb3VuZCB0byBpbnRlZ2VyOyBpZiB2YWx1ZSA8IDEwLCByb3VuZCB0byBhdCBtb3N0IDIgZGVjaW1hbCBwbGFjZXNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3VuZGVkVmFsdWUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgcmV0dXJuIHZhbHVlID49IDEwID8gTWF0aC5yb3VuZCAodmFsdWUpIDogTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMCkgLyAxMDA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjaGVjayB3aGV0aGVyIHVuaXQgaXMgdGltZSByZWxhdGVkLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5pdFRpbWVSZWxhdGVkICh1bml0OiBVbml0VHlwZSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiB1bml0ID09PSBVbml0VHlwZS5UeXBlTUJTZWMgfHwgdW5pdCA9PT0gVW5pdFR5cGUuVHlwZVNlYyB8fCB1bml0ID09PSBVbml0VHlwZS5UeXBlU2VjU2VjO1xyXG59XHJcblxyXG4vKipcclxuICogY2FsY3VsYXRlIFlTY2FsZSBiYXNlIG9uIHRoZSBwcm92aWRlZCB2YWx1ZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVlTY2FsZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAvLyByb3VuZCB1cCB0byBuZXh0IDIsNSwxMCwyMCw1MCwxMDAsLi4uXHJcbiAgaWYgKHZhbHVlIDw9IDApIHtcclxuICAgIHJldHVybiAxMDA7XHJcbiAgfVxyXG4gIGNvbnN0IHNjYWxlID0gTWF0aC5wb3coIDEwLCBNYXRoLmZsb29yKE1hdGgubG9nMTAodmFsdWUpKSk7XHJcbiAgaWYgKHNjYWxlID49IHZhbHVlKSB7XHJcbiAgICByZXR1cm4gc2NhbGU7XHJcbiAgfVxyXG4gIGlmICgyICogc2NhbGUgPj0gdmFsdWUpIHtcclxuICAgIHJldHVybiAyICogc2NhbGU7XHJcbiAgfVxyXG4gIGlmICggNSAqIHNjYWxlID49IHZhbHVlKSB7XHJcbiAgICByZXR1cm4gNSAqIHNjYWxlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIDEwICogc2NhbGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5RGF0YShkYXRhOiBDaGFydENvbnRlbnREYXRhKTogYm9vbGVhbiB7XHJcbiAgaWYgKGRhdGEpIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhkYXRhKS5maW5kSW5kZXgocG9ydCA9PiB7XHJcbiAgICAgIGlmIChwb3J0ICE9IG51bGwgJiYgZGF0YVtwb3J0XSkge1xyXG4gICAgICAgIHJldHVybiBkYXRhW3BvcnRdLmZpbmRJbmRleChyb3cgPT4gcm93ICYmIHJvdy5sZW5ndGggPiAwKSA+PSAwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pIDwgMDtcclxuICB9XHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzbGVlcCAodGltZTogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2hhcnRIZWlnaHQobnNBbGwsIG5zQ29udGVudCk6IHZvaWQge1xyXG4gIC8vIGNvbnN0IGl0ZW0xID0gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25hbWVzZXJ2ZXItaGlzdG9yeS1hbGwnKSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50PilbMF07XHJcbiAgLy8gY29uc3QgaXRlbTIgPSAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbmFtZXNlcnZlci1oaXN0b3J5LWNvbnRlbnQnKSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50PilbMF07XHJcbiAgaWYgKG5zQWxsICYmIG5zQ29udGVudCkge1xyXG4gICAgY29uc3QgY2hhcnRIZWlnaHQgPSBuc0FsbC5vZmZzZXRXaWR0aCAqIDAuNzUgLyAyO1xyXG4gICAgbnNDb250ZW50LnN0eWxlLmhlaWdodCA9IGAke2NoYXJ0SGVpZ2h0fXB4YDtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
|