@eo-sdk/client 7.16.19 → 7.16.20
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/app/eo-framework-core/agent/agent.service.d.ts +3 -2
- package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.js +4199 -4167
- package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.js.map +1 -1
- package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.min.js +2 -2
- package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.min.js.map +1 -1
- package/bundles/eo-sdk-client.umd.js +11 -9
- package/bundles/eo-sdk-client.umd.js.map +1 -1
- package/bundles/eo-sdk-client.umd.min.js +1 -1
- package/bundles/eo-sdk-client.umd.min.js.map +1 -1
- package/eo-sdk-client.metadata.json +1 -1
- package/esm2015/app/eo-client/about-state/about-state.component.js +3 -3
- package/esm2015/app/eo-client/result-state/result-state.component.js +3 -3
- package/esm2015/app/eo-framework/app-shell/app-bar/app-search/app-search.component.js +2 -2
- package/esm2015/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.js +3 -3
- package/esm2015/app/eo-framework/object-form/object-form/object-form.component.js +4 -4
- package/esm2015/app/eo-framework-core/agent/agent.service.js +7 -5
- package/esm2015/projects/eo-sdk/core/lib/config/core-config.js +3 -1
- package/esm2015/projects/eo-sdk/core/lib/config/core-init.service.js +4 -2
- package/esm2015/projects/eo-sdk/core/lib/service/auth/auth.service.js +4 -3
- package/esm2015/projects/eo-sdk/core/lib/service/backend/backend.service.js +11 -7
- package/esm2015/projects/eo-sdk/core/lib/service/upload/upload.service.js +8 -4
- package/esm2015/projects/eo-sdk/core/lib/util/utils.js +25 -1
- package/fesm2015/eo-sdk-client-projects-eo-sdk-core.js +3703 -3671
- package/fesm2015/eo-sdk-client-projects-eo-sdk-core.js.map +1 -1
- package/fesm2015/eo-sdk-client.js +13 -11
- package/fesm2015/eo-sdk-client.js.map +1 -1
- package/package.json +2 -2
- package/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.metadata.json +1 -1
- package/projects/eo-sdk/core/lib/config/core-config.d.ts +1 -0
- package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts +3 -1
- package/projects/eo-sdk/core/lib/service/upload/upload.service.d.ts +3 -1
- package/projects/eo-sdk/core/lib/util/utils.d.ts +3 -0
- package/projects/eo-sdk/core/package.json +1 -1
|
@@ -2,7 +2,7 @@ import { PendingChangesService } from './../../../../eo-framework-core/pending-c
|
|
|
2
2
|
import { Component, forwardRef, HostListener, Input, ViewChild } from '@angular/core';
|
|
3
3
|
import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
4
4
|
import { GridService } from '../../../../eo-framework-core/api/grid.service';
|
|
5
|
-
import { SystemService, TranslateService } from '@eo-sdk/core';
|
|
5
|
+
import { SystemService, TranslateService, Utils } from '@eo-sdk/core';
|
|
6
6
|
import { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';
|
|
7
7
|
import { CsvExportModule } from '@ag-grid-community/csv-export';
|
|
8
8
|
import { forkJoin } from 'rxjs';
|
|
@@ -129,7 +129,7 @@ export class FormElementTableComponent extends UnsubscribeOnDestroy {
|
|
|
129
129
|
}
|
|
130
130
|
this.value = value instanceof Array ? value : [];
|
|
131
131
|
// create a clone of the actual value for internal usage
|
|
132
|
-
this.innerValue =
|
|
132
|
+
this.innerValue = Utils.formDataParse(Utils.formDataStringify(this.value));
|
|
133
133
|
if (this.gridOptions.api) {
|
|
134
134
|
this.gridOptions.api.setRowData(this.innerValue);
|
|
135
135
|
}
|
|
@@ -413,4 +413,4 @@ FormElementTableComponent.propDecorators = {
|
|
|
413
413
|
params: [{ type: Input }],
|
|
414
414
|
copyCellHandler: [{ type: HostListener, args: ['keydown.control.alt.shift.c', ['$event'],] }, { type: HostListener, args: ['keydown.control.shift.c', ['$event'],] }, { type: HostListener, args: ['keydown.control.alt.c', ['$event'],] }, { type: HostListener, args: ['keydown.control.c', ['$event'],] }]
|
|
415
415
|
};
|
|
416
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL29iamVjdC1mb3JtL29iamVjdC1mb3JtL2Zvcm0tZWxlbWVudC10YWJsZS9mb3JtLWVsZW1lbnQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlFQUF5RSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUUsYUFBYSxFQUF5QixNQUFNLGdCQUFnQixDQUFDO0FBRzlHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUMzRSxPQUFPLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saURBQWlELENBQUM7QUE4Q3JGLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxvQkFBb0I7SUFpRGpFLFlBQW9CLGFBQTRCLEVBQVUsY0FBcUMsRUFDdEYsT0FBb0IsRUFBVSxTQUEyQjtRQUNoRSxLQUFLLEVBQUUsQ0FBQztRQUZVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FB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QUNoRCxZQUFZLFNBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BlbmRpbmdDaGFuZ2VzU2VydmljZX0gZnJvbSAnLi8uLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9wZW5kaW5nLWNoYW5nZXMvcGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbXBvbmVudCwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRvciwgRm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtPYmplY3RGb3JtT3B0aW9uc30gZnJvbSAnLi4vLi4vb2JqZWN0LWZvcm0tb3B0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0dyaWRPcHRpb25zLCBDb2xEZWYsIE1vZHVsZX0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xyXG5pbXBvcnQge0dyaWRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9hcGkvZ3JpZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtTeXN0ZW1TZXJ2aWNlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAZW8tc2RrL2NvcmUnO1xyXG5pbXBvcnQge0NsaWVudFNpZGVSb3dNb2RlbE1vZHVsZX0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NsaWVudC1zaWRlLXJvdy1tb2RlbCc7XHJcbmltcG9ydCB7Q3N2RXhwb3J0TW9kdWxlfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvY3N2LWV4cG9ydCc7XHJcbmltcG9ydCB7Zm9ya0pvaW59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge21hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7Um93RWRpdENvbXBvbmVudH0gZnJvbSAnLi9yb3ctZWRpdC9yb3ctZWRpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1Vuc3Vic2NyaWJlT25EZXN0cm95fSBmcm9tICcuLi8uLi8uLi91dGlsL3Vuc3Vic2NyaWJlL3Vuc3Vic2NyaWJlLmNvbXBvbmVudCc7XHJcblxyXG4vLyBkYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgdGFibGUgY29tcG9uZW50XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb21wb25lbnRQYXJhbXMge1xyXG4gIC8vIGN1cnJlbnQgZm9ybSBzaXR1YXRpb24gKEVESVQsIFNFQVJDSCBvciBDUkVBVEUpXHJcbiAgc2l0dWF0aW9uOiBzdHJpbmc7XHJcbiAgLy8gdGFibGUgc2l6ZSAobWVkaXVtLCBsYXJnZSlcclxuICBzaXplOiBzdHJpbmc7XHJcbiAgLy8gdGhlIHRhYmxlcyBmcm9tIGVsZW1lbnRcclxuICBlbGVtZW50OiBhbnk7XHJcbn1cclxuXHJcbi8vIHJlcHJlc2VudGF0aW9uIG9mIGEgcm93IHdoaWxlIGVkaXRpbmdcclxuZXhwb3J0IGludGVyZmFjZSBFZGl0Um93IHtcclxuICBzaXR1YXRpb246IHN0cmluZztcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIGZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucztcclxuICB0YWJsZUVsZW1lbnQ6IGFueTtcclxufVxyXG5cclxuLy8gcmVzdWx0IG9mIGVkaXRpbmcgYSB0YWJsZXMgcm93XHJcbmV4cG9ydCBpbnRlcmZhY2UgRWRpdFJvd1Jlc3VsdCB7XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICByb3dEYXRhOiBhbnk7XHJcbiAgY3JlYXRlTmV3Um93OiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VvLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1lbGVtZW50LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2Zvcm0tZWxlbWVudC10YWJsZS5jb21wb25lbnQuc2NzcydcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9ybUVsZW1lbnRUYWJsZUNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb3JtRWxlbWVudFRhYmxlQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUVsZW1lbnRUYWJsZUNvbXBvbmVudCBleHRlbmRzIFVuc3Vic2NyaWJlT25EZXN0cm95IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XHJcblxyXG4gIHB1YmxpYyBtb2R1bGVzOiBNb2R1bGVbXSA9IFtDbGllbnRTaWRlUm93TW9kZWxNb2R1bGUsIENzdkV4cG9ydE1vZHVsZV07XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Jvd0VkaXQnKSByb3dFZGl0OiBSb3dFZGl0Q29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBwYXJhbXMocDogVGFibGVDb21wb25lbnRQYXJhbXMpIHtcclxuICAgIGlmIChwKSB7XHJcbiAgICAgIHRoaXMuX3BhcmFtcyA9IHA7XHJcbiAgICAgIGlmICh0aGlzLl9wYXJhbXMuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xyXG4gICAgICAgIHRoaXMuX3BhcmFtcy5zaXplID0gJ3N1cGVyc21hbGwnO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl9wYXJhbXMuc2l6ZSkge1xyXG4gICAgICAgIHRoaXMuX3BhcmFtcy5zaXplID0gJ3NtYWxsJztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdyaWRSZWFkeSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9lbGVtZW50cyA9IHAuZWxlbWVudC5lbGVtZW50cztcclxuICAgICAgdGhpcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzID0gdGhpcy5jcmVhdGVDb2x1bW5EZWZpbml0aW9uKCk7XHJcbiAgICAgIGlmICh0aGlzLl9wYXJhbXMuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xyXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcy5wdXNoKHtoZWFkZXJOYW1lOiAnJywgY29sSWQ6ICdhY3Rpb25zJywgd2lkdGg6IDM0LCBtaW5XaWR0aDogMzQsIHBpbm5lZDogJ3JpZ2h0JywgY2VsbFJlbmRlcmVyOiB0aGlzLmFjdGlvbnNDZWxsUmVuZGVyZXJ9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5jb2x1bW5EZWZzID0gdGhpcy5jcmVhdGVDb2x1bW5EZWZpbml0aW9uKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZ3JpZFJlYWR5ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJhbXM7XHJcbiAgfVxyXG5cclxuICBfcGFyYW1zOiBUYWJsZUNvbXBvbmVudFBhcmFtcztcclxuICBwcml2YXRlIF9lbGVtZW50czogYW55W107XHJcbiAgZ3JpZFJlYWR5ID0gZmFsc2U7XHJcbiAgdmFsdWU6IGFueVtdO1xyXG4gIGlubmVyVmFsdWU6IGFueVtdO1xyXG4gIGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucztcclxuICBvdmVybGF5R3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xyXG4gIGVkaXRpbmdSb3c6IEVkaXRSb3c7XHJcbiAgc2hvd0RpYWxvZyA9IGZhbHNlO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuYWx0LnNoaWZ0LmMnLCBbJyRldmVudCddKVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uY29udHJvbC5zaGlmdC5jJywgWyckZXZlbnQnXSlcclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuYWx0LmMnLCBbJyRldmVudCddKVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uY29udHJvbC5jJywgWyckZXZlbnQnXSlcclxuICBjb3B5Q2VsbEhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMuZ3JpZEFwaS5jb3B5VG9DbGlwYm9hcmQoZXZlbnQsIHRoaXMuZ3JpZE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLCBwcml2YXRlIHBlbmRpbmdDaGFuZ2VzOiBQZW5kaW5nQ2hhbmdlc1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgZ3JpZEFwaTogR3JpZFNlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5ncmlkT3B0aW9ucyA9IDxHcmlkT3B0aW9ucz57XHJcbiAgICAgIGNvbnRleHQ6IHRoaXMuZ3JpZEFwaS5nZXRDb250ZXh0KCksXHJcbiAgICAgIGhlYWRlckhlaWdodDogMzAsXHJcbiAgICAgIHJvd0hlaWdodDogMzAsXHJcbiAgICAgIHJvd0J1ZmZlcjogMjAsXHJcbiAgICAgIG11bHRpU29ydEtleTogJ2N0cmwnLFxyXG4gICAgICBhY2NlbnRlZFNvcnQ6IHRydWUsXHJcbiAgICAgIC8vIHN1cHByZXNzQ2VsbFNlbGVjdGlvbjogdHJ1ZSxcclxuICAgICAgcm93U2VsZWN0aW9uOiAnc2luZ2xlJyxcclxuICAgICAgc3VwcHJlc3NNb3ZhYmxlQ29sdW1uczogdHJ1ZSxcclxuICAgICAgZW5hYmxlRmlsdGVyOiBmYWxzZSxcclxuICAgICAgc3VwcHJlc3NOb1Jvd3NPdmVybGF5OiB0cnVlLFxyXG4gICAgICBzdXBwcmVzc0xvYWRpbmdPdmVybGF5OiB0cnVlLFxyXG4gICAgICBzdXBwcmVzc0NvbnRleHRNZW51OiB0cnVlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ncmlkT3B0aW9ucy5jb250ZXh0LnRhYmxlQ29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucyA9IDxHcmlkT3B0aW9ucz57XHJcbiAgICAgIGNvbnRleHQ6IHRoaXMuZ3JpZEFwaS5nZXRDb250ZXh0KCksXHJcbiAgICAgIGhlYWRlckhlaWdodDogMzAsXHJcbiAgICAgIHJvd0hlaWdodDogMzAsXHJcbiAgICAgIHJvd0J1ZmZlcjogMjAsXHJcbiAgICAgIG11bHRpU29ydEtleTogJ2N0cmwnLFxyXG4gICAgICBhY2NlbnRlZFNvcnQ6IHRydWUsXHJcbiAgICAgIC8vIHN1cHByZXNzQ2VsbFNlbGVjdGlvbjogdHJ1ZSxcclxuICAgICAgcm93U2VsZWN0aW9uOiAnc2luZ2xlJyxcclxuICAgICAgc3VwcHJlc3NNb3ZhYmxlQ29sdW1uczogdHJ1ZSxcclxuICAgICAgZW5hYmxlRmlsdGVyOiBmYWxzZSxcclxuICAgICAgc3VwcHJlc3NOb1Jvd3NPdmVybGF5OiB0cnVlLFxyXG4gICAgICBzdXBwcmVzc0xvYWRpbmdPdmVybGF5OiB0cnVlLFxyXG4gICAgICBzdXBwcmVzc0NvbnRleHRNZW51OiB0cnVlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuY29udGV4dC50YWJsZUNvbXBvbmVudCA9IHRoaXM7XHJcbiAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5yb3dDbGFzc1J1bGVzID0ge1xyXG4gICAgICAnbmV3LXJvdyc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcclxuICAgICAgICBpZiAocGFyYW1zLmRhdGEuaXNOZXdSb3cpIHtcclxuICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuZGF0YS5pc05ld1JvdztcclxuICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuY29udGV4dC50YWJsZUNvbXBvbmVudC5pbm5lclZhbHVlW3BhcmFtcy5jb250ZXh0LnRhYmxlQ29tcG9uZW50LmlubmVyVmFsdWUubGVuZ3RoIC0gMV0uaXNOZXdSb3c7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGVuZGluZ0NoYW5nZXMudGFza3MkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh0YXNrcyA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5zdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uID0gISF0aGlzLnJvd0VkaXQgJiYgISF0YXNrcy5pbmNsdWRlcyh0aGlzLnJvd0VkaXQucGVuZGluZ1Rhc2tJZCk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uc0NlbGxSZW5kZXJlcihwYXJhbXMpIHtcclxuICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHJcbiAgICBpZiAocGFyYW1zLmNvbnRleHQudGFibGVDb21wb25lbnQucGFyYW1zLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcclxuICAgICAgZGl2LmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPVwiYWN0aW9uLWljb25cIiBpZD1cImFjdGlvbkljb24tJHtwYXJhbXMucm93SW5kZXh9XCI+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgPHBhdGggZD1cIk0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6XCIvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+YDtcclxuICAgICAgbGV0IGNsZWFySWNvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKGAjYWN0aW9uSWNvbi0ke3BhcmFtcy5yb3dJbmRleH1gKVswXTtcclxuICAgICAgY2xlYXJJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gcGFyYW1zLmNvbnRleHQudGFibGVDb21wb25lbnQuY2xlYXJSb3cocGFyYW1zLnJvd0luZGV4KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkaXYuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9XCJhY3Rpb24taWNvblwiIGlkPVwiYWN0aW9uSWNvbi0ke3BhcmFtcy5yb3dJbmRleH1cIj5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICA8cGF0aCBkPVwiTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnpNMTkgNGgtMy41bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIi8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5gO1xyXG4gICAgICBsZXQgZGVsZXRlSWNvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKGAjYWN0aW9uSWNvbi0ke3BhcmFtcy5yb3dJbmRleH1gKVswXTtcclxuICAgICAgZGVsZXRlSWNvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHBhcmFtcy5jb250ZXh0LnRhYmxlQ29tcG9uZW50LmRlbGV0ZVJvdyhwYXJhbXMucm93SW5kZXgpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGl2O1xyXG4gIH1cclxuXHJcbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55W10pOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoIXZhbHVlICYmIHRoaXMuX3BhcmFtcy5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XHJcbiAgICAgIC8vIGZvciBzZWFyY2ggcm93IGRhdGEgd2lsbCBhbHdheXMgYmUgb25lIGVtcHR5IHJvd1xyXG4gICAgICAvLyB0b2RvOiByZS1lbmFibGUgYWdhaW4gd2hlbiBzZWFyY2ggaW4gdGFibGVzIGlzIHN1cHBvcnRlZFxyXG4gICAgICB2YWx1ZSA9IFt7fV07XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBBcnJheSA/IHZhbHVlIDogW107XHJcbiAgICAvLyBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgYWN0dWFsIHZhbHVlIGZvciBpbnRlcm5hbCB1c2FnZVxyXG4gICAgdGhpcy5pbm5lclZhbHVlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuYXBpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYXBpLnNldFJvd0RhdGEodGhpcy5pbm5lclZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RGF0YSA9IHRoaXMuaW5uZXJWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpKSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5zZXRSb3dEYXRhKHRoaXMuaW5uZXJWYWx1ZSk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZWxlY3RFZGl0Um93KCksIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMucm93RGF0YSA9IHRoaXMuaW5uZXJWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBjb2x1bW4gZGVmaW5pdGlvbiBmcm9tIGZvcm0gZWxlbWVudC5cclxuICAgKiBAcmV0dXJucyBjb2x1bW4gZGVmaW5pdGlvbiB0byBiZSBhZGRlZCB0byB0aGUgZ3JpZE9wdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbkRlZmluaXRpb24oKTogQ29sRGVmW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzLm1hcCgoZWwpID0+IHtcclxuICAgICAgbGV0IGNvbDogQ29sRGVmID0gdGhpcy5ncmlkQXBpLmdldENvbHVtbkRlZmluaXRpb24oZWwpO1xyXG4gICAgICBPYmplY3QuYXNzaWduKGNvbCwge1xyXG4gICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxyXG4gICAgICAgIHN1cHByZXNzTWVudTogdHJ1ZSxcclxuICAgICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICBmaWVsZDogZWwubmFtZSxcclxuICAgICAgICByZWZEYXRhOiB7XHJcbiAgICAgICAgICAuLi5jb2wucmVmRGF0YSxcclxuICAgICAgICAgIF9lb0Zvcm1FbGVtZW50OiBlbCxcclxuICAgICAgICAgIF9zaXR1YXRpb246IHRoaXMuX3BhcmFtcy5zaXR1YXRpb25cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY29sO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRSb3coKSB7XHJcbiAgICBjb25zdCByb3dEYXRhID0ge307XHJcbiAgICBjb25zdCBhc3luY0ZldGNoZXMgPSBbXTtcclxuICAgIHRoaXMuX2VsZW1lbnRzXHJcbiAgICAgIC5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICBpZiAoZWwuZGVmYXVsdHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJvd0RhdGFbZWwubmFtZV0gPSBlbC5kZWZhdWx0dmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlbC5kZWZhdWx0dmFsdWVmdW5jdGlvbikge1xyXG4gICAgICAgICAgcm93RGF0YVtlbC5uYW1lXSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXREZWZhdWx0VmFsdWUoZWwuZGVmYXVsdHZhbHVlZnVuY3Rpb24pO1xyXG4gICAgICAgICAgaWYgKGVsLmRlZmF1bHR2YWx1ZWZ1bmN0aW9uID09PSAnQ1VSUkVOVF9VU0VSJykge1xyXG4gICAgICAgICAgICBhc3luY0ZldGNoZXMucHVzaCh0aGlzLnJlc29sdmVPcmdEYXRhTWV0YShlbC5uYW1lLCByb3dEYXRhW2VsLm5hbWVdKSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIGlmIChhc3luY0ZldGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3JrSm9pbihhc3luY0ZldGNoZXMpLnN1YnNjcmliZSgocmVzOiB7a2V5OiBzdHJpbmcsIHZhbHVlOiBhbnl9W10pID0+IHtcclxuICAgICAgICByZXMuZm9yRWFjaChyID0+IHtcclxuICAgICAgICAgIHJvd0RhdGFbci5rZXldID0gci52YWx1ZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuc2V0RWRpdFJvdygtMSwgcm93RGF0YSk7XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldEVkaXRSb3coLTEsIHJvd0RhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlT3JnRGF0YU1ldGEoZWxlbWVudE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPcmdhbml6YXRpb25PYmplY3QodmFsdWUpLnBpcGUoXHJcbiAgICAgIG1hcChyZXMgPT4gKHtcclxuICAgICAgICBrZXk6IGAke2VsZW1lbnROYW1lfV9tZXRhYCxcclxuICAgICAgICB2YWx1ZTogcmVzXHJcbiAgICAgIH0pKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZWRpdFJvdyhldmVudCkge1xyXG4gICAgdGhpcy5zZXRFZGl0Um93KGV2ZW50Lm5vZGUuaWQsIGV2ZW50Lm5vZGUuZGF0YSk7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRDb21wbGV0ZShldmVudCkge1xyXG4gICAgLy90b2RvOiBpcyBpdCBvYnNvbGV0ZT9cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RWRpdFJvdyhpbmRleDogbnVtYmVyLCBkYXRhOiBhbnkpIHtcclxuICAgIC8vIHNldHVwIHRoZSByb3cgdG8gYmUgZWRpdGVkLiBCZXNpZGUgc29tZSBwcm9wZXJ0aWVzLCB0aGVcclxuICAgIC8vIHJvdyBjb250YWlucyBhIGZvcm0gbW9kZWwgYW5kIGZvcm0gZGF0YS4gSWYgdGhlIHBhcmVudCBmb3JtIG1vZGVsXHJcbiAgICAvLyBwcm92aWRlZCBhIHNjcmlwdCwgdGhpcyB3aWxsIGJlIGFkZGVkIGFzIHdlbGwsIHNvIGVkaXRpbmcgYSByb3cgd2lsbFxyXG4gICAgLy8gcmVzcGVjdCB0aGUgZm9ybSBzY3JpcHQuXHJcbiAgICB0aGlzLmVkaXRpbmdSb3cgPSB7XHJcbiAgICAgIHNpdHVhdGlvbjogdGhpcy5fcGFyYW1zLnNpdHVhdGlvbixcclxuICAgICAgaW5kZXg6IGluZGV4LFxyXG4gICAgICB0YWJsZUVsZW1lbnQ6IHRoaXMuX3BhcmFtcy5lbGVtZW50LFxyXG4gICAgICBmb3JtT3B0aW9uczoge1xyXG4gICAgICAgIGZvcm1Nb2RlbDoge1xyXG4gICAgICAgICAgc2l0dWF0aW9uOiB0aGlzLl9wYXJhbXMuc2l0dWF0aW9uLCAgLy8gcmVxdWlyZWQgYnkgb2JqZWN0IGZvcm0gZm9yIHJlYWRpbmcgZGF0YVxyXG4gICAgICAgICAgZWxlbWVudHM6IFt7XHJcbiAgICAgICAgICAgIHR5cGU6ICdvMm1Hcm91cCcsXHJcbiAgICAgICAgICAgIGVsZW1lbnRzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2VsZW1lbnRzKSlcclxuICAgICAgICAgIH1dXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLl9wYXJhbXMuZWxlbWVudC5yZWFkb25seVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5zaG93RGlhbG9nID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZWxlY3RFZGl0Um93KCksIDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RFZGl0Um93KCkge1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaSl7XHJcbiAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5kZXNlbGVjdEFsbCgpO1xyXG4gICAgICBpZiAodGhpcy5lZGl0aW5nUm93ICYmIHRoaXMuZWRpdGluZ1Jvdy5pbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBsZXQgcm93Tm9kZSA9IHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5nZXRSb3dOb2RlKCcnICsgdGhpcy5lZGl0aW5nUm93LmluZGV4KTtcclxuICAgICAgICByb3dOb2RlLnNldFNlbGVjdGVkKHRydWUsIHRydWUpO1xyXG4gICAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5lbnN1cmVOb2RlVmlzaWJsZShyb3dOb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUYWJsZVZhbHVlKCkge1xyXG4gICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2V0Um93RGF0YSh0aGlzLmlubmVyVmFsdWUpO1xyXG4gICAgaWYgKHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaSkge1xyXG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuc2V0Um93RGF0YSh0aGlzLmlubmVyVmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMucm93RGF0YSA9IHRoaXMuaW5uZXJWYWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMudmFsdWUgPSB0aGlzLmlubmVyVmFsdWU7XHJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy52YWx1ZS5pbmNsdWRlcygnaXNOZXdSb3cnKSkpIHtcclxuICAgICAgZGVsZXRlIHRoaXMudmFsdWVbJ2lzTmV3Um93J107XHJcbiAgICB9XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbFJvd0VkaXQoKSB7XHJcbiAgICBpZiAodGhpcy5yb3dFZGl0KSB7XHJcbiAgICAgIHRoaXMucm93RWRpdC5maW5pc2hQZW5kaW5nKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVkaXRpbmdSb3cgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3BhcmFtcy5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XHJcbiAgICAgIHRoaXMuc2hvd0RpYWxvZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbG9zZSgpIHtcclxuICAgIHRoaXMuZWRpdGluZ1JvdyA9IG51bGw7XHJcbiAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVJvdyhyb3dSZXN1bHQ6IGFueSkge1xyXG4gICAgY29uc3QgaXNOZXdSb3cgPSByb3dSZXN1bHQuaW5kZXggPT09IC0xO1xyXG4gICAgaWYgKGlzTmV3Um93KSB7XHJcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZS5wdXNoKHsuLi5yb3dSZXN1bHQucm93RGF0YSwgLi4ue2lzTmV3Um93OiB0cnVlfX0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy5pbm5lclZhbHVlW3Jvd1Jlc3VsdC5pbmRleF0gPSB7Li4udGhpcy5pbm5lclZhbHVlW3Jvd1Jlc3VsdC5pbmRleF0sIC4uLnJvd1Jlc3VsdC5yb3dEYXRhfTtcclxuICAgICAgICB0aGlzLmlubmVyVmFsdWVbcm93UmVzdWx0LmluZGV4XVtlbC5uYW1lXSA9IHJvd1Jlc3VsdC5yb3dEYXRhW2VsLm5hbWVdO1xyXG4gICAgICAgIGlmICh0aGlzLmlubmVyVmFsdWVbcm93UmVzdWx0LmluZGV4XVtlbC5uYW1lICsgJ19tZXRhJ10pIHtcclxuICAgICAgICAgIHRoaXMuaW5uZXJWYWx1ZVtyb3dSZXN1bHQuaW5kZXhdW2VsLm5hbWUgKyAnX21ldGEnXSA9IHJvd1Jlc3VsdC5yb3dEYXRhW2VsLm5hbWUgKyAnX21ldGEnXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVUYWJsZVZhbHVlKCk7XHJcbiAgICBpZiAodGhpcy5fcGFyYW1zLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcclxuICAgICAgdGhpcy5zaG93RGlhbG9nID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKGlzTmV3Um93ICYmICFyb3dSZXN1bHQuY3JlYXRlTmV3Um93KSB7XHJcbiAgICAgIHRoaXMuc2V0RWRpdFJvdyh0aGlzLmlubmVyVmFsdWUubGVuZ3RoIC0gMSwgdGhpcy5pbm5lclZhbHVlW3RoaXMuaW5uZXJWYWx1ZS5sZW5ndGggLSAxXSk7XHJcbiAgICB9IGVsc2UgaWYgKHJvd1Jlc3VsdC5jcmVhdGVOZXdSb3cpIHtcclxuICAgICAgdGhpcy5hZGRSb3coKTtcclxuICAgICAgbGV0IHJvd05vZGUgPSB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZ2V0Um93Tm9kZSgnJyArICh0aGlzLmlubmVyVmFsdWUubGVuZ3RoIC0gMSkpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZW5zdXJlTm9kZVZpc2libGUocm93Tm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldEVkaXRSb3cocm93UmVzdWx0LmluZGV4LCB0aGlzLmlubmVyVmFsdWVbcm93UmVzdWx0LmluZGV4XSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb3B5Um93KHJvd1Jlc3VsdDogYW55KSB7XHJcbiAgICByb3dSZXN1bHQuaW5kZXggPSAtMTtcclxuICAgIHRoaXMuaW5uZXJWYWx1ZS5wdXNoKHsuLi5yb3dSZXN1bHQucm93RGF0YSwgLi4ue2lzTmV3Um93OiB0cnVlfX0pO1xyXG4gICAgdGhpcy51cGRhdGVUYWJsZVZhbHVlKCk7XHJcbiAgICBpZiAocm93UmVzdWx0LmNyZWF0ZU5ld1Jvdykge1xyXG4gICAgICB0aGlzLmFkZFJvdygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRFZGl0Um93KHRoaXMuaW5uZXJWYWx1ZS5sZW5ndGggLSAxLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJvd1Jlc3VsdC5yb3dEYXRhKSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlUm93KGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLmlubmVyVmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRhYmxlVmFsdWUoKTtcclxuICAgICAgICBpZiAodGhpcy5pbm5lclZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggPT0gdGhpcy5pbm5lclZhbHVlLmxlbmd0aCA/IHRoaXMuaW5uZXJWYWx1ZS5sZW5ndGggLSAxIDogaW5kZXg7XHJcbiAgICAgICAgICB0aGlzLnNldEVkaXRSb3cobmV4dEluZGV4LCB0aGlzLmlubmVyVmFsdWVbbmV4dEluZGV4XSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2FuY2VsUm93RWRpdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJSb3coaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5pbm5lclZhbHVlW2luZGV4XSA9IHt9O1xyXG4gICAgdGhpcy51cGRhdGVUYWJsZVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRDU1YoKSB7XHJcbiAgICB0aGlzLmdyaWRPcHRpb25zLmFwaS5leHBvcnREYXRhQXNDc3Yoe1xyXG4gICAgICAuLi50aGlzLmdyaWRBcGkuY3N2RXhwb3J0UGFyYW1zLFxyXG4gICAgICBmaWxlTmFtZTogdGhpcy5fcGFyYW1zLmVsZW1lbnQubGFiZWxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2l6ZVRvRml0KG92ZXJsYXk/OiBib29sZWFuKSB7XHJcbiAgICBpZiAob3ZlcmxheSkge1xyXG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlbkRpYWxvZygpIHtcclxuICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5yZWZyZXNoVmlldygpO1xyXG4gICAgdGhpcy5zaG93RGlhbG9nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVUYWJsZURhdGEoKTogYm9vbGVhbiB7XHJcbiAgICAvLyB0b2RvOiBpbXBsZW1lbnRcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpIHtcclxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVGFibGVEYXRhKCkgPyBudWxsIDoge1xyXG4gICAgICB0YWJsZToge1xyXG4gICAgICAgIHZhbGlkOiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25Nb3VzZURvd24oJGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5zdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uKSB7XHJcbiAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5jaGVja0ZvclBlbmRpbmdUYXNrcyh0aGlzLnJvd0VkaXQucGVuZGluZ1Rhc2tJZCkpIHtcclxuICAgICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5zdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yb3dFZGl0LmZpbmlzaFBlbmRpbmcoKTtcclxuICAgICAgICBsZXQgcm93SW5kZXggPSB0aGlzLmdyaWRBcGkuZ2V0Um93SW5kZXgoJGV2ZW50LnRhcmdldCwgJ2FnLWJvZHknKTtcclxuICAgICAgICBpZiAocm93SW5kZXggIT09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5nZXRSb3dOb2RlKCcnICsgcm93SW5kZXgpLnNldFNlbGVjdGVkKHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgJGV2ZW50LnRhcmdldC5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAkZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU29ydENoYW5nZWQoKXtcclxuICAgIGxldCByb3dOb2RlID0gdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLmdldFJvd05vZGUoJycgKyB0aGlzLmVkaXRpbmdSb3cuaW5kZXgpO1xyXG4gICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLmVuc3VyZU5vZGVWaXNpYmxlKHJvd05vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25DZWxsQ2xpY2tlZCgkZXZlbnQpIHtcclxuICAgIGlmICgkZXZlbnQucm93SW5kZXggIT09IG51bGwpIHtcclxuICAgICAgaWYgKCEkZXZlbnQubm9kZS5ncm91cCAmJiAkZXZlbnQuZGF0YSkge1xyXG4gICAgICAgIGlmICgkZXZlbnQuY29sRGVmLmNlbGxDbGFzcyA9PT0gJ3JvdXRlci1saW5rLWNlbGwnKSB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRBcGkub3BlblJvdXRlckxpbmsoJGV2ZW50LmV2ZW50LCAnYWctcm93Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
416
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL29iamVjdC1mb3JtL29iamVjdC1mb3JtL2Zvcm0tZWxlbWVudC10YWJsZS9mb3JtLWVsZW1lbnQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlFQUF5RSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUUsYUFBYSxFQUF5QixNQUFNLGdCQUFnQixDQUFDO0FBRzlHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUMzRSxPQUFPLEVBQWlDLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEcsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDbEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQThDckYsTUFBTSxPQUFPLHlCQUEwQixTQUFRLG9CQUFvQjtJQWlEakUsWUFBb0IsYUFBNEIsRUFBVSxjQUFxQyxFQUN0RixPQUFvQixFQUFVLFNBQTJCO1FBQ2hFLEtBQUssRUFBRSxDQUFDO1FBRlUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxtQkFBYyxHQUFkLGNB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Q0FBQyxRQUFRLENBQUMsY0FDaEQsWUFBWSxTQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQZW5kaW5nQ2hhbmdlc1NlcnZpY2V9IGZyb20gJy4vLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcGVuZGluZy1jaGFuZ2VzL3BlbmRpbmctY2hhbmdlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb21wb25lbnQsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3IsIEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7T2JqZWN0Rm9ybU9wdGlvbnN9IGZyb20gJy4uLy4uL29iamVjdC1mb3JtLW9wdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtHcmlkT3B0aW9ucywgQ29sRGVmLCBNb2R1bGV9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcclxuaW1wb3J0IHtHcmlkU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvYXBpL2dyaWQuc2VydmljZSc7XHJcbmltcG9ydCB7RG1zT2JqZWN0LCBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBTeXN0ZW1TZXJ2aWNlLCBUcmFuc2xhdGVTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcclxuaW1wb3J0IHtDbGllbnRTaWRlUm93TW9kZWxNb2R1bGV9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jbGllbnQtc2lkZS1yb3ctbW9kZWwnO1xyXG5pbXBvcnQge0NzdkV4cG9ydE1vZHVsZX0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2Nzdi1leHBvcnQnO1xyXG5pbXBvcnQge2ZvcmtKb2lufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHttYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1Jvd0VkaXRDb21wb25lbnR9IGZyb20gJy4vcm93LWVkaXQvcm93LWVkaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHtVbnN1YnNjcmliZU9uRGVzdHJveX0gZnJvbSAnLi4vLi4vLi4vdXRpbC91bnN1YnNjcmliZS91bnN1YnNjcmliZS5jb21wb25lbnQnO1xyXG5cclxuLy8gZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIHRhYmxlIGNvbXBvbmVudFxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29tcG9uZW50UGFyYW1zIHtcclxuICAvLyBjdXJyZW50IGZvcm0gc2l0dWF0aW9uIChFRElULCBTRUFSQ0ggb3IgQ1JFQVRFKVxyXG4gIHNpdHVhdGlvbjogc3RyaW5nO1xyXG4gIC8vIHRhYmxlIHNpemUgKG1lZGl1bSwgbGFyZ2UpXHJcbiAgc2l6ZTogc3RyaW5nO1xyXG4gIC8vIHRoZSB0YWJsZXMgZnJvbSBlbGVtZW50XHJcbiAgZWxlbWVudDogYW55O1xyXG59XHJcblxyXG4vLyByZXByZXNlbnRhdGlvbiBvZiBhIHJvdyB3aGlsZSBlZGl0aW5nXHJcbmV4cG9ydCBpbnRlcmZhY2UgRWRpdFJvdyB7XHJcbiAgc2l0dWF0aW9uOiBzdHJpbmc7XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnM7XHJcbiAgdGFibGVFbGVtZW50OiBhbnk7XHJcbn1cclxuXHJcbi8vIHJlc3VsdCBvZiBlZGl0aW5nIGEgdGFibGVzIHJvd1xyXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRSb3dSZXN1bHQge1xyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgcm93RGF0YTogYW55O1xyXG4gIGNyZWF0ZU5ld1JvdzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlby10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZWxlbWVudC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9mb3JtLWVsZW1lbnQtdGFibGUuY29tcG9uZW50LnNjc3MnXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1FbGVtZW50VGFibGVDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9ybUVsZW1lbnRUYWJsZUNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1FbGVtZW50VGFibGVDb21wb25lbnQgZXh0ZW5kcyBVbnN1YnNjcmliZU9uRGVzdHJveSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xyXG5cclxuICBwdWJsaWMgbW9kdWxlczogTW9kdWxlW10gPSBbQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlLCBDc3ZFeHBvcnRNb2R1bGVdO1xyXG5cclxuICBAVmlld0NoaWxkKCdyb3dFZGl0Jykgcm93RWRpdDogUm93RWRpdENvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgcGFyYW1zKHA6IFRhYmxlQ29tcG9uZW50UGFyYW1zKSB7XHJcbiAgICBpZiAocCkge1xyXG4gICAgICB0aGlzLl9wYXJhbXMgPSBwO1xyXG4gICAgICBpZiAodGhpcy5fcGFyYW1zLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcclxuICAgICAgICB0aGlzLl9wYXJhbXMuc2l6ZSA9ICdzdXBlcnNtYWxsJztcclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fcGFyYW1zLnNpemUpIHtcclxuICAgICAgICB0aGlzLl9wYXJhbXMuc2l6ZSA9ICdzbWFsbCc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ncmlkUmVhZHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fZWxlbWVudHMgPSBwLmVsZW1lbnQuZWxlbWVudHM7XHJcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcyA9IHRoaXMuY3JlYXRlQ29sdW1uRGVmaW5pdGlvbigpO1xyXG4gICAgICBpZiAodGhpcy5fcGFyYW1zLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcclxuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmNvbHVtbkRlZnMucHVzaCh7aGVhZGVyTmFtZTogJycsIGNvbElkOiAnYWN0aW9ucycsIHdpZHRoOiAzNCwgbWluV2lkdGg6IDM0LCBwaW5uZWQ6ICdyaWdodCcsIGNlbGxSZW5kZXJlcjogdGhpcy5hY3Rpb25zQ2VsbFJlbmRlcmVyfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuY29sdW1uRGVmcyA9IHRoaXMuY3JlYXRlQ29sdW1uRGVmaW5pdGlvbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmdyaWRSZWFkeSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBwYXJhbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgX3BhcmFtczogVGFibGVDb21wb25lbnRQYXJhbXM7XHJcbiAgcHJpdmF0ZSBfZWxlbWVudHM6IGFueVtdO1xyXG4gIGdyaWRSZWFkeSA9IGZhbHNlO1xyXG4gIHZhbHVlOiBhbnlbXTtcclxuICBpbm5lclZhbHVlOiBhbnlbXTtcclxuICBncmlkT3B0aW9uczogR3JpZE9wdGlvbnM7XHJcbiAgb3ZlcmxheUdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucztcclxuICBlZGl0aW5nUm93OiBFZGl0Um93O1xyXG4gIHNob3dEaWFsb2cgPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5jb250cm9sLmFsdC5zaGlmdC5jJywgWyckZXZlbnQnXSlcclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuc2hpZnQuYycsIFsnJGV2ZW50J10pXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5jb250cm9sLmFsdC5jJywgWyckZXZlbnQnXSlcclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuYycsIFsnJGV2ZW50J10pXHJcbiAgY29weUNlbGxIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICB0aGlzLmdyaWRBcGkuY29weVRvQ2xpcGJvYXJkKGV2ZW50LCB0aGlzLmdyaWRPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSwgcHJpdmF0ZSBwZW5kaW5nQ2hhbmdlczogUGVuZGluZ0NoYW5nZXNTZXJ2aWNlLFxyXG4gICAgcHVibGljIGdyaWRBcGk6IEdyaWRTZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSA8R3JpZE9wdGlvbnM+e1xyXG4gICAgICBjb250ZXh0OiB0aGlzLmdyaWRBcGkuZ2V0Q29udGV4dCgpLFxyXG4gICAgICBoZWFkZXJIZWlnaHQ6IDMwLFxyXG4gICAgICByb3dIZWlnaHQ6IDMwLFxyXG4gICAgICByb3dCdWZmZXI6IDIwLFxyXG4gICAgICBtdWx0aVNvcnRLZXk6ICdjdHJsJyxcclxuICAgICAgYWNjZW50ZWRTb3J0OiB0cnVlLFxyXG4gICAgICAvLyBzdXBwcmVzc0NlbGxTZWxlY3Rpb246IHRydWUsXHJcbiAgICAgIHJvd1NlbGVjdGlvbjogJ3NpbmdsZScsXHJcbiAgICAgIHN1cHByZXNzTW92YWJsZUNvbHVtbnM6IHRydWUsXHJcbiAgICAgIGVuYWJsZUZpbHRlcjogZmFsc2UsXHJcbiAgICAgIHN1cHByZXNzTm9Sb3dzT3ZlcmxheTogdHJ1ZSxcclxuICAgICAgc3VwcHJlc3NMb2FkaW5nT3ZlcmxheTogdHJ1ZSxcclxuICAgICAgc3VwcHJlc3NDb250ZXh0TWVudTogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbnMuY29udGV4dC50YWJsZUNvbXBvbmVudCA9IHRoaXM7XHJcblxyXG4gICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMgPSA8R3JpZE9wdGlvbnM+e1xyXG4gICAgICBjb250ZXh0OiB0aGlzLmdyaWRBcGkuZ2V0Q29udGV4dCgpLFxyXG4gICAgICBoZWFkZXJIZWlnaHQ6IDMwLFxyXG4gICAgICByb3dIZWlnaHQ6IDMwLFxyXG4gICAgICByb3dCdWZmZXI6IDIwLFxyXG4gICAgICBtdWx0aVNvcnRLZXk6ICdjdHJsJyxcclxuICAgICAgYWNjZW50ZWRTb3J0OiB0cnVlLFxyXG4gICAgICAvLyBzdXBwcmVzc0NlbGxTZWxlY3Rpb246IHRydWUsXHJcbiAgICAgIHJvd1NlbGVjdGlvbjogJ3NpbmdsZScsXHJcbiAgICAgIHN1cHByZXNzTW92YWJsZUNvbHVtbnM6IHRydWUsXHJcbiAgICAgIGVuYWJsZUZpbHRlcjogZmFsc2UsXHJcbiAgICAgIHN1cHByZXNzTm9Sb3dzT3ZlcmxheTogdHJ1ZSxcclxuICAgICAgc3VwcHJlc3NMb2FkaW5nT3ZlcmxheTogdHJ1ZSxcclxuICAgICAgc3VwcHJlc3NDb250ZXh0TWVudTogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmNvbnRleHQudGFibGVDb21wb25lbnQgPSB0aGlzO1xyXG4gICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMucm93Q2xhc3NSdWxlcyA9IHtcclxuICAgICAgJ25ldy1yb3cnOiBmdW5jdGlvbiAocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKHBhcmFtcy5kYXRhLmlzTmV3Um93KSB7XHJcbiAgICAgICAgICBkZWxldGUgcGFyYW1zLmRhdGEuaXNOZXdSb3c7XHJcbiAgICAgICAgICBkZWxldGUgcGFyYW1zLmNvbnRleHQudGFibGVDb21wb25lbnQuaW5uZXJWYWx1ZVtwYXJhbXMuY29udGV4dC50YWJsZUNvbXBvbmVudC5pbm5lclZhbHVlLmxlbmd0aCAtIDFdLmlzTmV3Um93O1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBlbmRpbmdDaGFuZ2VzLnRhc2tzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQkKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUodGFza3MgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbiA9ICEhdGhpcy5yb3dFZGl0ICYmICEhdGFza3MuaW5jbHVkZXModGhpcy5yb3dFZGl0LnBlbmRpbmdUYXNrSWQpO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFjdGlvbnNDZWxsUmVuZGVyZXIocGFyYW1zKSB7XHJcbiAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblxyXG4gICAgaWYgKHBhcmFtcy5jb250ZXh0LnRhYmxlQ29tcG9uZW50LnBhcmFtcy5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XHJcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cImFjdGlvbi1pY29uXCIgaWQ9XCJhY3Rpb25JY29uLSR7cGFyYW1zLnJvd0luZGV4fVwiPlxyXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgIDxwYXRoIGQ9XCJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyelwiLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PmA7XHJcbiAgICAgIGxldCBjbGVhckljb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbChgI2FjdGlvbkljb24tJHtwYXJhbXMucm93SW5kZXh9YClbMF07XHJcbiAgICAgIGNsZWFySWNvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHBhcmFtcy5jb250ZXh0LnRhYmxlQ29tcG9uZW50LmNsZWFyUm93KHBhcmFtcy5yb3dJbmRleCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGl2LmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPVwiYWN0aW9uLWljb25cIiBpZD1cImFjdGlvbkljb24tJHtwYXJhbXMucm93SW5kZXh9XCI+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgPHBhdGggZD1cIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCIvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+YDtcclxuICAgICAgbGV0IGRlbGV0ZUljb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbChgI2FjdGlvbkljb24tJHtwYXJhbXMucm93SW5kZXh9YClbMF07XHJcbiAgICAgIGRlbGV0ZUljb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBwYXJhbXMuY29udGV4dC50YWJsZUNvbXBvbmVudC5kZWxldGVSb3cocGFyYW1zLnJvd0luZGV4KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpdjtcclxuICB9XHJcblxyXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueVtdKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCF2YWx1ZSAmJiB0aGlzLl9wYXJhbXMuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xyXG4gICAgICAvLyBmb3Igc2VhcmNoIHJvdyBkYXRhIHdpbGwgYWx3YXlzIGJlIG9uZSBlbXB0eSByb3dcclxuICAgICAgLy8gdG9kbzogcmUtZW5hYmxlIGFnYWluIHdoZW4gc2VhcmNoIGluIHRhYmxlcyBpcyBzdXBwb3J0ZWRcclxuICAgICAgdmFsdWUgPSBbe31dO1xyXG4gICAgfVxyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgPyB2YWx1ZSA6IFtdO1xyXG4gICAgLy8gY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGFjdHVhbCB2YWx1ZSBmb3IgaW50ZXJuYWwgdXNhZ2VcclxuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IFV0aWxzLmZvcm1EYXRhUGFyc2UoVXRpbHMuZm9ybURhdGFTdHJpbmdpZnkodGhpcy52YWx1ZSkpO1xyXG5cclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmFwaSkge1xyXG4gICAgICB0aGlzLmdyaWRPcHRpb25zLmFwaS5zZXRSb3dEYXRhKHRoaXMuaW5uZXJWYWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0RhdGEgPSB0aGlzLmlubmVyVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaSkge1xyXG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuc2V0Um93RGF0YSh0aGlzLmlubmVyVmFsdWUpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RWRpdFJvdygpLCAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLnJvd0RhdGEgPSB0aGlzLmlubmVyVmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgY29sdW1uIGRlZmluaXRpb24gZnJvbSBmb3JtIGVsZW1lbnQuXHJcbiAgICogQHJldHVybnMgY29sdW1uIGRlZmluaXRpb24gdG8gYmUgYWRkZWQgdG8gdGhlIGdyaWRPcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVDb2x1bW5EZWZpbml0aW9uKCk6IENvbERlZltdIHtcclxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50cy5tYXAoKGVsKSA9PiB7XHJcbiAgICAgIGxldCBjb2w6IENvbERlZiA9IHRoaXMuZ3JpZEFwaS5nZXRDb2x1bW5EZWZpbml0aW9uKGVsKTtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjb2wsIHtcclxuICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcclxuICAgICAgICBzdXBwcmVzc01lbnU6IHRydWUsXHJcbiAgICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgZmllbGQ6IGVsLm5hbWUsXHJcbiAgICAgICAgcmVmRGF0YToge1xyXG4gICAgICAgICAgLi4uY29sLnJlZkRhdGEsXHJcbiAgICAgICAgICBfZW9Gb3JtRWxlbWVudDogZWwsXHJcbiAgICAgICAgICBfc2l0dWF0aW9uOiB0aGlzLl9wYXJhbXMuc2l0dWF0aW9uXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNvbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkUm93KCkge1xyXG4gICAgY29uc3Qgcm93RGF0YSA9IHt9O1xyXG4gICAgY29uc3QgYXN5bmNGZXRjaGVzID0gW107XHJcbiAgICB0aGlzLl9lbGVtZW50c1xyXG4gICAgICAuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgaWYgKGVsLmRlZmF1bHR2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByb3dEYXRhW2VsLm5hbWVdID0gZWwuZGVmYXVsdHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZWwuZGVmYXVsdHZhbHVlZnVuY3Rpb24pIHtcclxuICAgICAgICAgIHJvd0RhdGFbZWwubmFtZV0gPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0RGVmYXVsdFZhbHVlKGVsLmRlZmF1bHR2YWx1ZWZ1bmN0aW9uKTtcclxuICAgICAgICAgIGlmIChlbC5kZWZhdWx0dmFsdWVmdW5jdGlvbiA9PT0gJ0NVUlJFTlRfVVNFUicpIHtcclxuICAgICAgICAgICAgYXN5bmNGZXRjaGVzLnB1c2godGhpcy5yZXNvbHZlT3JnRGF0YU1ldGEoZWwubmFtZSwgcm93RGF0YVtlbC5uYW1lXSkpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICBpZiAoYXN5bmNGZXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9ya0pvaW4oYXN5bmNGZXRjaGVzKS5zdWJzY3JpYmUoKHJlczoge2tleTogc3RyaW5nLCB2YWx1ZTogYW55fVtdKSA9PiB7XHJcbiAgICAgICAgcmVzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgICByb3dEYXRhW3Iua2V5XSA9IHIudmFsdWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNldEVkaXRSb3coLTEsIHJvd0RhdGEpO1xyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRFZGl0Um93KC0xLCByb3dEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZU9yZ0RhdGFNZXRhKGVsZW1lbnROYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uT2JqZWN0KHZhbHVlKS5waXBlKFxyXG4gICAgICBtYXAocmVzID0+ICh7XHJcbiAgICAgICAga2V5OiBgJHtlbGVtZW50TmFtZX1fbWV0YWAsXHJcbiAgICAgICAgdmFsdWU6IHJlc1xyXG4gICAgICB9KSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIGVkaXRSb3coZXZlbnQpIHtcclxuICAgIHRoaXMuc2V0RWRpdFJvdyhldmVudC5ub2RlLmlkLCBldmVudC5ub2RlLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgb25FZGl0Q29tcGxldGUoZXZlbnQpIHtcclxuICAgIC8vdG9kbzogaXMgaXQgb2Jzb2xldGU/XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEVkaXRSb3coaW5kZXg6IG51bWJlciwgZGF0YTogYW55KSB7XHJcbiAgICAvLyBzZXR1cCB0aGUgcm93IHRvIGJlIGVkaXRlZC4gQmVzaWRlIHNvbWUgcHJvcGVydGllcywgdGhlXHJcbiAgICAvLyByb3cgY29udGFpbnMgYSBmb3JtIG1vZGVsIGFuZCBmb3JtIGRhdGEuIElmIHRoZSBwYXJlbnQgZm9ybSBtb2RlbFxyXG4gICAgLy8gcHJvdmlkZWQgYSBzY3JpcHQsIHRoaXMgd2lsbCBiZSBhZGRlZCBhcyB3ZWxsLCBzbyBlZGl0aW5nIGEgcm93IHdpbGxcclxuICAgIC8vIHJlc3BlY3QgdGhlIGZvcm0gc2NyaXB0LlxyXG4gICAgdGhpcy5lZGl0aW5nUm93ID0ge1xyXG4gICAgICBzaXR1YXRpb246IHRoaXMuX3BhcmFtcy5zaXR1YXRpb24sXHJcbiAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgdGFibGVFbGVtZW50OiB0aGlzLl9wYXJhbXMuZWxlbWVudCxcclxuICAgICAgZm9ybU9wdGlvbnM6IHtcclxuICAgICAgICBmb3JtTW9kZWw6IHtcclxuICAgICAgICAgIHNpdHVhdGlvbjogdGhpcy5fcGFyYW1zLnNpdHVhdGlvbiwgIC8vIHJlcXVpcmVkIGJ5IG9iamVjdCBmb3JtIGZvciByZWFkaW5nIGRhdGFcclxuICAgICAgICAgIGVsZW1lbnRzOiBbe1xyXG4gICAgICAgICAgICB0eXBlOiAnbzJtR3JvdXAnLFxyXG4gICAgICAgICAgICBlbGVtZW50czogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9lbGVtZW50cykpXHJcbiAgICAgICAgICB9XVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBkaXNhYmxlZDogdGhpcy5fcGFyYW1zLmVsZW1lbnQucmVhZG9ubHlcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VsZWN0RWRpdFJvdygpLCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0RWRpdFJvdygpIHtcclxuICAgIGlmICh0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkpe1xyXG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZGVzZWxlY3RBbGwoKTtcclxuICAgICAgaWYgKHRoaXMuZWRpdGluZ1JvdyAmJiB0aGlzLmVkaXRpbmdSb3cuaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgbGV0IHJvd05vZGUgPSB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZ2V0Um93Tm9kZSgnJyArIHRoaXMuZWRpdGluZ1Jvdy5pbmRleCk7XHJcbiAgICAgICAgcm93Tm9kZS5zZXRTZWxlY3RlZCh0cnVlLCB0cnVlKTtcclxuICAgICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZW5zdXJlTm9kZVZpc2libGUocm93Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVGFibGVWYWx1ZSgpIHtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbnMuYXBpLnNldFJvd0RhdGEodGhpcy5pbm5lclZhbHVlKTtcclxuICAgIGlmICh0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkpIHtcclxuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLnNldFJvd0RhdGEodGhpcy5pbm5lclZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLnJvd0RhdGEgPSB0aGlzLmlubmVyVmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbm5lclZhbHVlO1xyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWUuaW5jbHVkZXMoJ2lzTmV3Um93JykpKSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlWydpc05ld1JvdyddO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxSb3dFZGl0KCkge1xyXG4gICAgaWYgKHRoaXMucm93RWRpdCkge1xyXG4gICAgICB0aGlzLnJvd0VkaXQuZmluaXNoUGVuZGluZygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lZGl0aW5nUm93ID0gbnVsbDtcclxuICAgIGlmICh0aGlzLl9wYXJhbXMuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xyXG4gICAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoKSB7XHJcbiAgICB0aGlzLmVkaXRpbmdSb3cgPSBudWxsO1xyXG4gICAgdGhpcy5zaG93RGlhbG9nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSb3cocm93UmVzdWx0OiBhbnkpIHtcclxuICAgIGNvbnN0IGlzTmV3Um93ID0gcm93UmVzdWx0LmluZGV4ID09PSAtMTtcclxuICAgIGlmIChpc05ld1Jvdykge1xyXG4gICAgICB0aGlzLmlubmVyVmFsdWUucHVzaCh7Li4ucm93UmVzdWx0LnJvd0RhdGEsIC4uLntpc05ld1JvdzogdHJ1ZX19KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgIC8vIHRoaXMuaW5uZXJWYWx1ZVtyb3dSZXN1bHQuaW5kZXhdID0gey4uLnRoaXMuaW5uZXJWYWx1ZVtyb3dSZXN1bHQuaW5kZXhdLCAuLi5yb3dSZXN1bHQucm93RGF0YX07XHJcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlW3Jvd1Jlc3VsdC5pbmRleF1bZWwubmFtZV0gPSByb3dSZXN1bHQucm93RGF0YVtlbC5uYW1lXTtcclxuICAgICAgICBpZiAodGhpcy5pbm5lclZhbHVlW3Jvd1Jlc3VsdC5pbmRleF1bZWwubmFtZSArICdfbWV0YSddKSB7XHJcbiAgICAgICAgICB0aGlzLmlubmVyVmFsdWVbcm93UmVzdWx0LmluZGV4XVtlbC5uYW1lICsgJ19tZXRhJ10gPSByb3dSZXN1bHQucm93RGF0YVtlbC5uYW1lICsgJ19tZXRhJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVGFibGVWYWx1ZSgpO1xyXG4gICAgaWYgKHRoaXMuX3BhcmFtcy5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XHJcbiAgICAgIHRoaXMuc2hvd0RpYWxvZyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmIChpc05ld1JvdyAmJiAhcm93UmVzdWx0LmNyZWF0ZU5ld1Jvdykge1xyXG4gICAgICB0aGlzLnNldEVkaXRSb3codGhpcy5pbm5lclZhbHVlLmxlbmd0aCAtIDEsIHRoaXMuaW5uZXJWYWx1ZVt0aGlzLmlubmVyVmFsdWUubGVuZ3RoIC0gMV0pO1xyXG4gICAgfSBlbHNlIGlmIChyb3dSZXN1bHQuY3JlYXRlTmV3Um93KSB7XHJcbiAgICAgIHRoaXMuYWRkUm93KCk7XHJcbiAgICAgIGxldCByb3dOb2RlID0gdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLmdldFJvd05vZGUoJycgKyAodGhpcy5pbm5lclZhbHVlLmxlbmd0aCAtIDEpKTtcclxuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLmVuc3VyZU5vZGVWaXNpYmxlKHJvd05vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRFZGl0Um93KHJvd1Jlc3VsdC5pbmRleCwgdGhpcy5pbm5lclZhbHVlW3Jvd1Jlc3VsdC5pbmRleF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29weVJvdyhyb3dSZXN1bHQ6IGFueSkge1xyXG4gICAgcm93UmVzdWx0LmluZGV4ID0gLTE7XHJcbiAgICB0aGlzLmlubmVyVmFsdWUucHVzaCh7Li4ucm93UmVzdWx0LnJvd0RhdGEsIC4uLntpc05ld1JvdzogdHJ1ZX19KTtcclxuICAgIHRoaXMudXBkYXRlVGFibGVWYWx1ZSgpO1xyXG4gICAgaWYgKHJvd1Jlc3VsdC5jcmVhdGVOZXdSb3cpIHtcclxuICAgICAgdGhpcy5hZGRSb3coKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0RWRpdFJvdyh0aGlzLmlubmVyVmFsdWUubGVuZ3RoIC0gMSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb3dSZXN1bHQucm93RGF0YSkpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZVJvdyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUYWJsZVZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5uZXJWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ID09IHRoaXMuaW5uZXJWYWx1ZS5sZW5ndGggPyB0aGlzLmlubmVyVmFsdWUubGVuZ3RoIC0gMSA6IGluZGV4O1xyXG4gICAgICAgICAgdGhpcy5zZXRFZGl0Um93KG5leHRJbmRleCwgdGhpcy5pbm5lclZhbHVlW25leHRJbmRleF0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNhbmNlbFJvd0VkaXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyUm93KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuaW5uZXJWYWx1ZVtpbmRleF0gPSB7fTtcclxuICAgIHRoaXMudXBkYXRlVGFibGVWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0Q1NWKCkge1xyXG4gICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuZXhwb3J0RGF0YUFzQ3N2KHtcclxuICAgICAgLi4udGhpcy5ncmlkQXBpLmNzdkV4cG9ydFBhcmFtcyxcclxuICAgICAgZmlsZU5hbWU6IHRoaXMuX3BhcmFtcy5lbGVtZW50LmxhYmVsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNpemVUb0ZpdChvdmVybGF5PzogYm9vbGVhbikge1xyXG4gICAgaWYgKG92ZXJsYXkpIHtcclxuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5EaWFsb2coKSB7XHJcbiAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkucmVmcmVzaFZpZXcoKTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlVGFibGVEYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gdG9kbzogaW1wbGVtZW50XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVRhYmxlRGF0YSgpID8gbnVsbCA6IHtcclxuICAgICAgdGFibGU6IHtcclxuICAgICAgICB2YWxpZDogZmFsc2VcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VEb3duKCRldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbikge1xyXG4gICAgICBpZiAoIXRoaXMucGVuZGluZ0NoYW5nZXMuY2hlY2tGb3JQZW5kaW5nVGFza3ModGhpcy5yb3dFZGl0LnBlbmRpbmdUYXNrSWQpKSB7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm93RWRpdC5maW5pc2hQZW5kaW5nKCk7XHJcbiAgICAgICAgbGV0IHJvd0luZGV4ID0gdGhpcy5ncmlkQXBpLmdldFJvd0luZGV4KCRldmVudC50YXJnZXQsICdhZy1ib2R5Jyk7XHJcbiAgICAgICAgaWYgKHJvd0luZGV4ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZ2V0Um93Tm9kZSgnJyArIHJvd0luZGV4KS5zZXRTZWxlY3RlZCh0cnVlLCB0cnVlKTtcclxuICAgICAgICAgICRldmVudC50YXJnZXQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgJGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNvcnRDaGFuZ2VkKCl7XHJcbiAgICBsZXQgcm93Tm9kZSA9IHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5nZXRSb3dOb2RlKCcnICsgdGhpcy5lZGl0aW5nUm93LmluZGV4KTtcclxuICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5lbnN1cmVOb2RlVmlzaWJsZShyb3dOb2RlKTtcclxuICB9XHJcblxyXG4gIG9uQ2VsbENsaWNrZWQoJGV2ZW50KSB7XHJcbiAgICBpZiAoJGV2ZW50LnJvd0luZGV4ICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICghJGV2ZW50Lm5vZGUuZ3JvdXAgJiYgJGV2ZW50LmRhdGEpIHtcclxuICAgICAgICBpZiAoJGV2ZW50LmNvbERlZi5jZWxsQ2xhc3MgPT09ICdyb3V0ZXItbGluay1jZWxsJykge1xyXG4gICAgICAgICAgdGhpcy5ncmlkQXBpLm9wZW5Sb3V0ZXJMaW5rKCRldmVudC5ldmVudCwgJ2FnLXJvdycpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -10,7 +10,7 @@ import { ObjectFormScriptService } from './object-form-script/object-form-script
|
|
|
10
10
|
import { ObjectFormHelperService } from '../object-form-helper.service';
|
|
11
11
|
import { UnsubscribeOnDestroy } from '../../util/unsubscribe/unsubscribe.component';
|
|
12
12
|
import { PluginsService } from '../../../eo-framework-core/api/plugins.service';
|
|
13
|
-
import { Logger, SystemService, SearchService } from '@eo-sdk/core';
|
|
13
|
+
import { Logger, SystemService, SearchService, Utils } from '@eo-sdk/core';
|
|
14
14
|
import { debounceTime, tap } from 'rxjs/operators';
|
|
15
15
|
import { ReferenceService } from '../../../eo-framework-core/references/reference.service';
|
|
16
16
|
import * as _ from 'lodash';
|
|
@@ -251,7 +251,7 @@ export class ObjectFormComponent extends UnsubscribeOnDestroy {
|
|
|
251
251
|
// check if indexdata has been changed
|
|
252
252
|
let currentFormData = this.getFormData();
|
|
253
253
|
let idxChange = compare ? JSON.stringify(this.formData) !== JSON.stringify(currentFormData) : false;
|
|
254
|
-
this.formData =
|
|
254
|
+
this.formData = Utils.formDataParse(Utils.formDataStringify(currentFormData));
|
|
255
255
|
if (this.form) {
|
|
256
256
|
this.statusChanged.emit({
|
|
257
257
|
invalid: this.form.invalid,
|
|
@@ -384,7 +384,7 @@ export class ObjectFormComponent extends UnsubscribeOnDestroy {
|
|
|
384
384
|
// copy by value for arrays of objects (e.g. table data)
|
|
385
385
|
value = [];
|
|
386
386
|
formElement.value.forEach((o) => {
|
|
387
|
-
value.push(
|
|
387
|
+
value.push(Utils.formDataParse(Utils.formDataStringify(o)));
|
|
388
388
|
});
|
|
389
389
|
}
|
|
390
390
|
else {
|
|
@@ -624,4 +624,4 @@ ObjectFormComponent.propDecorators = {
|
|
|
624
624
|
onFormReady: [{ type: Output }],
|
|
625
625
|
options: [{ type: Input, args: ['formOptions',] }]
|
|
626
626
|
};
|
|
627
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxFQUFFLElBQUksWUFBWSxFQUE0QixRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDNUUsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixVQUFVLEVBRVYsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFjLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBR3RFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUMsTUFBTSxFQUFnQixhQUFhLEVBQWMsYUFBYSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzVGLE9BQU8sRUFBQyxZQUFZLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdC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QUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsb0VBQW9FO0lBQ3BFLDBFQUEwRTtJQUNsRSxjQUFjO1FBQ3BCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsMEJBQTBCLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQzs7O1lBdHFCRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsOGRBQTJDO2dCQUUzQyxnRkFBZ0Y7Z0JBQ2hGLG1FQUFtRTtnQkFDbkUsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7O2FBRXJDOzs7WUFkTyxNQUFNO1lBaEJaLFVBQVU7WUFnQmtCLGFBQWE7WUFBYyxhQUFhO1lBTjlELHVCQUF1QjtZQUN2Qix1QkFBdUI7WUFJdkIsY0FBYztZQUdkLGdCQUFnQjtZQWhCdEIsaUJBQWlCOzs7K0JBK0JoQixLQUFLOzRCQUVMLE1BQU07MEJBRU4sTUFBTTtzQkFxQk4sS0FBSyxTQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge29mIGFzIG9ic2VydmFibGVPZiwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1WYWxpZGF0aW9ufSBmcm9tICcuL2Zvcm0tdmFsaWRhdGlvbi9mb3JtLXZhbGlkYXRpb24nO1xyXG5pbXBvcnQge09iamVjdEZvcm1Hcm91cH0gZnJvbSAnLi9vYmplY3QtZm9ybS1ncm91cCc7XHJcbmltcG9ydCB7VmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbH0gZnJvbSAnLi9vYmplY3QtZm9ybS1jb250cm9sJztcclxuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbFdyYXBwZXJ9IGZyb20gJy4vb2JqZWN0LWZvcm0tY29udHJvbC13cmFwcGVyJztcclxuaW1wb3J0IHtPYmplY3RGb3JtU2NyaXB0aW5nU2NvcGV9IGZyb20gJy4vb2JqZWN0LWZvcm0tc2NyaXB0L29iamVjdC1mb3JtLXNjcmlwdGluZy1zY29wZSc7XHJcbmltcG9ydCB7T2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2V9IGZyb20gJy4vb2JqZWN0LWZvcm0tc2NyaXB0L29iamVjdC1mb3JtLXNjcmlwdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtPYmplY3RGb3JtSGVscGVyU2VydmljZX0gZnJvbSAnLi4vb2JqZWN0LWZvcm0taGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge09iamVjdEZvcm1PcHRpb25zfSBmcm9tICcuLi9vYmplY3QtZm9ybS1vcHRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7Rm9ybVN0YXR1c0NoYW5nZWRFdmVudH0gZnJvbSAnLi4vZm9ybS1zdGF0dXMtY2hhbmdlZC1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1Vuc3Vic2NyaWJlT25EZXN0cm95fSBmcm9tICcuLi8uLi91dGlsL3Vuc3Vic2NyaWJlL3Vuc3Vic2NyaWJlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGx1Z2luc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2FwaS9wbHVnaW5zLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvZ2dlciwgU2VhcmNoRmlsdGVyLCBTeXN0ZW1TZXJ2aWNlLCBSYW5nZVZhbHVlLCBTZWFyY2hTZXJ2aWNlfSBmcm9tICdAZW8tc2RrL2NvcmUnO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcmVmZXJlbmNlcy9yZWZlcmVuY2Uuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VvLW9iamVjdC1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL29iamVjdC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgLy8gZGVmaW5lICdjaGlsZCBvbmx5JyBzZXJ2aWNlcyBmb3IgdGhlIGZvcm0gd2l0aG91dCBzZXR0aW5nIGl0IHVwIG9uIHRoZSBtb2R1bGVcclxuICAvLyB3aGljaCB3b3VsZCBjYXVzZSB0aGVtIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIHdob2xlIGFwcGxpY2F0aW9uXHJcbiAgcHJvdmlkZXJzOiBbT2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2VdLFxyXG4gIC8vZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgT2JqZWN0Rm9ybUNvbXBvbmVudCBleHRlbmRzIFVuc3Vic2NyaWJlT25EZXN0cm95IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQElucHV0KCkgaXNJbm5lclRhYmxlRm9ybTogYm9vbGVhbjtcclxuICAvLyB0cmlnZ2VyZWQgd2hlbiB0aGUgZm9ybXMgc3RhdGUgaGFzIGJlZW4gY2hhbmdlZFxyXG4gIEBPdXRwdXQoKSBzdGF0dXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50PigpO1xyXG4gIC8vIGhhbmRsZXIgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGZvcm0gaGFzIGJlZW4gc2V0IHVwXHJcbiAgQE91dHB1dCgpIG9uRm9ybVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBjb3VudGVyIGZvciBuYW1pbmcgdGhlIGZvcm1zIGdyb3Vwc1xyXG4gIGdDb3VudCA9IDA7XHJcbiAgcHVibGljIGZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucztcclxuICBwdWJsaWMgZGVmYXVsdEZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucztcclxuICAvLyB0aGUgYWN0dWFsIGZvcm0gaW5zdGFuY2VcclxuICBwdWJsaWMgZm9ybTtcclxuICAvLyBwcm9wZXJ0eSBmb3IgaG9sZGluZyB0aGUgZm9ybXMgZGF0YSB1c2VkIGZvciBjb21wYXJpc29uIHdoZW4gYSBmb3JtLWNoYW5nZWQtZXZlbnRcclxuICAvLyBpcyBmZXRjaGVkIHRvIGluZGljYXRlIHdoZXIgb3Igbm90IHRoZSBpbmRleGRhdGEgd2VyZSBjaGFuZ2VkIG9yIGp1c3QgdGhlIHByb3BlcnRpZXNcclxuICAvLyBvZiB0aGUgZm9ybSBlbGVtZW50cyAoZWcuIGZvcm0gc2NyaXB0IHNldHRpbmcgZmllbGRzIHRvIHJlYWRvbmx5KVxyXG4gIHByaXZhdGUgZm9ybURhdGE6IGFueTtcclxuICBwcml2YXRlIHNjcmlwdE1vZGVsID0ge307XHJcbiAgcHJpdmF0ZSBzY3JpcHRpbmdTY29wZTogT2JqZWN0Rm9ybVNjcmlwdGluZ1Njb3BlO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgLy8gbG9jYWwgc3RvcmUgZm9yIGFsbCB0aGUgZm9ybSBjb250cm9sIHJlZmVyZW5jZXNcclxuICBwcml2YXRlIGZvcm1Db250cm9scyA9IHt9O1xyXG4gIHByaXZhdGUgaW5pdGlhbFZhbGlkYXRvcnMgPSB7fTtcclxuXHJcblxyXG4gIEBJbnB1dCgnZm9ybU9wdGlvbnMnKVxyXG4gIHNldCBvcHRpb25zKGZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucykge1xyXG4gICAgdGhpcy5kZWZhdWx0Rm9ybU9wdGlvbnMgPSBmb3JtT3B0aW9ucztcclxuICAgIHRoaXMuZm9ybU9wdGlvbnMgPSBfLmNsb25lRGVlcChmb3JtT3B0aW9ucyk7XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1TY3JpcHRTZXJ2aWNlOiBPYmplY3RGb3JtU2NyaXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUhlbHBlclNlcnZpY2U6IE9iamVjdEZvcm1IZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbHVnaW5TZXJ2aWNlOiBQbHVnaW5zU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgLy8gaW5pdGlhbGl6ZSB0aGUgZm9ybSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZm9ybSBvcHRpb25zXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5mb3JtID0gbnVsbDtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRpYWxWYWxpZGF0b3JzID0ge307XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVBbGwoKTtcclxuICAgICAgdGhpcy5idWlsZFJlYWN0aXZlRm9ybSh0aGlzLmZvcm1PcHRpb25zIHx8IHt9KTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0T3B0aW9ucygpIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGVmYXVsdEZvcm1PcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0U2NyaXB0aW5nU2NvcGUoZm9ybU9wdGlvbnMsIGRhdGFGb3JtTW9kZWwpIHtcclxuICAgIGxldCB7ZGF0YSwgYWN0aW9ucywgb2JqZWN0cywgY29udGV4dH0gPSA8T2JqZWN0Rm9ybU9wdGlvbnM+KGZvcm1PcHRpb25zIHx8IHt9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zY3JpcHRpbmdTY29wZSkge1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLnNldE1vZGVsKHRoaXMuc2NyaXB0TW9kZWwpO1xyXG4gICAgICAvKiogcHJvdmlkZSBhY2Nlc3MgdG8gYWN0aW9ucyAodXNlZCBpbnNpZGUgb2YgQlBNLUZvcm1zKSAqL1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLmFjdGlvbnMgPSBhY3Rpb25zO1xyXG4gICAgICAvKiogcHJvdmlkZSBhY2Nlc3MgdG8gYWRkaXRpb25hbCBvYmplY3RzICh1c2VkIGZvciBleGFtcGxlIGluIEJQTS1TdGFydC1Gb3JtcyB0b1xyXG4gICAgICAgKiBhZGQgZGF0YSBvZiBETVMtT2JqZWN0cyB0byBzdGFydCB0aGUgcHJvY2VzcyBmb3IpXHJcbiAgICAgICAqL1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLm9iamVjdHMgPSBvYmplY3RzO1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAvKiogcHJvdmlkZSByZWFkb25seSBhY2Nlc3MgdG8gaW5pdGlhbCBmb3JtIGRhdGEgKHdoaWNoIG1heSBhbHNvIGNvbnRhaW4gdmFsdWVzIHRoYXRcclxuICAgICAgICogYXJlIG5vdCByZW5kZXJlZCBhcyBmb3JtIGVsZW1lbnRzIChpbnZpc2libGUgdmFsdWVzKSlcclxuICAgICAgICovXHJcbiAgICAgIHRoaXMuc2NyaXB0aW5nU2NvcGUuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgICAvKiogYnkgZGVmYXVsdCwgc2NyaXB0aW5nIHNjb3BlcyBhcmUgYXBwbGllZCB0byBmb3Jtcy4gQnV0IHRhYmxlIGVsZW1lbnRzIGNyZWF0ZSB0aGVpciBvd24gc2NvcGVcclxuICAgICAgICogZm9yIGVkaXRpbmcgcm93cy4gQmVpbmcgb25lIG9mIHRob3NlIGlubmVyIGZvcm1zIHNob3VsZCBub3QgcnVuIHRoZSBmb3JtIHNjcmlwdCBhZ2FpbiwgYnV0XHJcbiAgICAgICAqIGluc3RlYWQganVzdCBwcm92aWRlIHRoZSBvYnNlcnZpbmcgYWJpbGl0aWVzIG9mIHRoZSBzY3JpcHRpbmcgc2NvcGUuXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybU9wdGlvbnMuZGlzYWJsZWQgJiYgIXRoaXMuaXNJbm5lclRhYmxlRm9ybSAmJiBkYXRhRm9ybU1vZGVsKSB7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0TmFtZSA9IGRhdGFGb3JtTW9kZWwubmFtZSArICdfJyArIGRhdGFGb3JtTW9kZWwuc2l0dWF0aW9uO1xyXG5cclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnZXhlY3V0aW5nIGZvcm0gc2NyaXB0ICcgKyBzY3JpcHROYW1lKTtcclxuICAgICAgICB0aGlzLmZvcm1TY3JpcHRTZXJ2aWNlLnJ1bkZvcm1TY3JpcHQoXHJcbiAgICAgICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLFxyXG4gICAgICAgICAgZGF0YUZvcm1Nb2RlbC5zY3JpcHQsXHJcbiAgICAgICAgICBzY3JpcHROYW1lXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1c0Zvcm0oKSB7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rm9ybURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy5mb3JtT3B0aW9ucy5kYXRhID0gZGF0YTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXQoKTtcclxuICAgIH0sIDApO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3RzIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZm9ybSBtb2RlbC4gRWFjaCBmb3JtIHZhbHVlIGlzIHJlcHJlc2VudGVkIGJ5IG9uZVxyXG4gICAqIHByb3BlcnR5IG9uIHRoZSByZXN1bHQgb2JqZWN0IGhvbGRpbmcgdGhlIGZpZWxkcyB2YWx1ZS4gVGhlIGtleXMgKHByb3BlcnRpZXMpIGFyZSB0aGUgYG5hbWVgXHJcbiAgICogcHJvcGVydGllcyBvZiB0aGUgZm9ybSBlbGVtZW50IChpbiBTRUFSQ0ggc2l0dWF0aW9uIHRoZSBgcW5hbWVgIGZpZWxkIGlzIHVzZWQpLlxyXG4gICAqXHJcbiAgICogSG93IHZhbHVlcyBhcmUgZXh0cmFjdGVkIGlzIGluZmx1ZW5jZWQgYnkgdGhlIGZvcm1zIHNpdHVhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm4gb2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlyc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRGb3JtRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Ub0RhdGEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGb3JtUHJpc3RpbmUoKSB7XHJcbiAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICB9XHJcblxyXG4gIC8vIHJlc2V0IHRoZSBmb3JtIHRvIGl0cyBpbml0aWFsIHN0YXRlXHJcbiAgcHVibGljIHJlc2V0Rm9ybSgpIHtcclxuICAgIHRoaXMuaW5pdE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZW1pdEZvcm1DaGFuZ2VkRXZlbnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG9ic2VydmVkIG1vZGVsIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgY3VycmVudCBmb3JtIHNjcmlwdCBydW5uaW5nLiBJZiB0aGVyZSBpc1xyXG4gICAqIG5vIGZvcm0gc2NyaXB0LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBOVUxMLlxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHVibGljIGdldE9ic2VydmVkU2NyaXB0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY3JpcHRpbmdTY29wZSA/IHRoaXMuc2NyaXB0aW5nU2NvcGUuZ2V0TW9kZWwoKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBDcmVhdGUgYSByZWFjdGl2ZSBmb3JtIGZyb20gdGhlIGVuYWlvIGZvcm0gbW9kZWxcclxuICBwcml2YXRlIGJ1aWxkUmVhY3RpdmVGb3JtKGZvcm1PcHRpb25zKSB7XHJcblxyXG4gICAgdGhpcy5zY3JpcHRpbmdTY29wZSA9IG51bGw7XHJcbiAgICBjb25zdCBmb3JtTW9kZWwgPSB0aGlzLmRhdGFUb0Zvcm0oZm9ybU9wdGlvbnMuZm9ybU1vZGVsLCBmb3JtT3B0aW9ucy5kYXRhKTtcclxuXHJcbiAgICBpZiAoIWZvcm1Nb2RlbCkge1xyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIGEgc2NyaXB0IGlzIGF2YWlsYWJsZSwgd2UnbGwgaW5pdCB0aGUgZm9ybSBzY3JpcHRpbmcgZm9yIHRoZVxyXG4gICAgLy8gY3VycmVudCBmb3JtXHJcbiAgICBpZiAodGhpcy5pc0lubmVyVGFibGVGb3JtIHx8IChmb3JtTW9kZWwuc2NyaXB0ICYmIGZvcm1Nb2RlbC5zY3JpcHQubGVuZ3RoID4gMCkpIHtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FkZGluZyBmb3JtIHNjcmlwdGluZyBzY29wZScpO1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlID0gbmV3IE9iamVjdEZvcm1TY3JpcHRpbmdTY29wZShcclxuICAgICAgICBmb3JtTW9kZWwuc2l0dWF0aW9uLFxyXG4gICAgICAgIHRoaXMub25TY3JpcHRpbmdNb2RlbENoYW5nZWQsXHJcbiAgICAgICAgdGhpcy5wbHVnaW5TZXJ2aWNlLmdldEFwaSgpLFxyXG4gICAgICAgIHRoaXMuaXNJbm5lclRhYmxlRm9ybVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLm9iamVjdElkID0gdGhpcy5mb3JtT3B0aW9ucy5vYmplY3RJZDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZm9ybSA9IG5ldyBPYmplY3RGb3JtR3JvdXAoe30pO1xyXG4gICAgaWYgKGZvcm1Nb2RlbC5lbGVtZW50c1swXSAmJiBmb3JtTW9kZWwuZWxlbWVudHNbMF0uZWxlbWVudHMpIHtcclxuICAgICAgdGhpcy5hZGRGb3JtQ29udHJvbChmb3JtLCBmb3JtTW9kZWwuZWxlbWVudHNbMF0sICdjb3JlJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoZm9ybU1vZGVsLmVsZW1lbnRzWzFdICYmIGZvcm1Nb2RlbC5lbGVtZW50c1sxXS5lbGVtZW50cykge1xyXG4gICAgICB0aGlzLmFkZEZvcm1Db250cm9sKGZvcm0sIGZvcm1Nb2RlbC5lbGVtZW50c1sxXSwgJ2RhdGEnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybSkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5pbml0VmFsaWRhdG9ycyh0aGlzLmZvcm0pO1xyXG4gICAgICBsZXQgZm9ybVdhdGNoID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gIWZvcm1XYXRjaC5jbG9zZWQgJiYgdGhpcy5lbWl0Rm9ybUNoYW5nZWRFdmVudCgpKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZm9ybVdhdGNoKTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdFNjcmlwdGluZ1Njb3BlKGZvcm1PcHRpb25zLCBmb3JtTW9kZWwpO1xyXG5cclxuICAgICAgdGhpcy5vbkZvcm1SZWFkeS5lbWl0KCk7XHJcbiAgICAgIHRoaXMuZW1pdEZvcm1DaGFuZ2VkRXZlbnQoZmFsc2UpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIGluaXRWYWxpZGF0b3JzKGZvcm0pIHtcclxuICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgZm9yIChsZXQga2V5IGluIGZvcm0uY29udHJvbHMpIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybS5jb250cm9sc1trZXldO1xyXG4gICAgICAgIGlmIChjb250cm9sLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRWYWxpZGF0b3JzKGNvbnRyb2wpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYWxWYWxpZGF0b3JzW2NvbnRyb2wuX2VvRm9ybUVsZW1lbnQubmFtZV0gPSBjb250cm9sLnZhbGlkYXRvcjtcclxuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodGhpcy5nZXRWYWxpZGF0b3JzKGNvbnRyb2wuX2VvRm9ybUVsZW1lbnQpLmNvbmNhdChbdGhpcy5pbml0aWFsVmFsaWRhdG9yc1tjb250cm9sLl9lb0Zvcm1FbGVtZW50Lm5hbWVdXSkpKTtcclxuICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0Rm9ybUNoYW5nZWRFdmVudChjb21wYXJlID0gdHJ1ZSkge1xyXG5cclxuICAgIC8vIGNoZWNrIGlmIGluZGV4ZGF0YSBoYXMgYmVlbiBjaGFuZ2VkXHJcbiAgICBsZXQgY3VycmVudEZvcm1EYXRhID0gdGhpcy5nZXRGb3JtRGF0YSgpO1xyXG4gICAgbGV0IGlkeENoYW5nZSA9IGNvbXBhcmUgPyBKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm1EYXRhKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudEZvcm1EYXRhKSA6IGZhbHNlO1xyXG4gICAgdGhpcy5mb3JtRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudEZvcm1EYXRhKSk7XHJcbiAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICBpbnZhbGlkOiB0aGlzLmZvcm0uaW52YWxpZCxcclxuICAgICAgICBkaXJ0eTogdGhpcy5mb3JtLmRpcnR5LFxyXG4gICAgICAgIGRhdGE6IHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgaW5kZXhkYXRhQ2hhbmdlZDogaWR4Q2hhbmdlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lIHRoZSBzY3JpcHQgY2hhbmdlcyBpdHMgaW50ZXJuYWwgbW9kZWwuXHJcbiAgICogSXQgaXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgc2NyaXB0IGNoYW5nZXMgdG8gdGhlIGFjdHVhbCBmb3JtIG1vZGVsLlxyXG4gICAqXHJcbiAgICogVG8gZW5zdXJlIHRoZSByaWdodCBjb250ZXh0LCB3ZSBkZWZpbmUgYW4gaW5zdGFuY2UgbWV0aG9kIGFzIGNhbGxiYWNrIGZvciB0aGUgc2NyaXB0aW5nIHNjb3BlXHJcbiAgICogQHNlZTogaHR0cHM6Ly9ibG9nLmpvaG5ueXJlaWxseS5jb20vMjAxNC8wNC90eXBlc2NyaXB0LWluc3RhbmNlLW1ldGhvZHMuaHRtbFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZvcm1Db250cm9sTmFtZVxyXG4gICAqIEBwYXJhbSBjaGFuZ2VcclxuICAgKi9cclxuICBwcml2YXRlIG9uU2NyaXB0aW5nTW9kZWxDaGFuZ2VkID0gKGZvcm1Db250cm9sTmFtZSwgY2hhbmdlKSA9PiB7XHJcblxyXG4gICAgLy8gZmluZCB0aGUgdGFyZ2V0IGNvbnRyb2xcclxuICAgIGxldCBmYzogT2JqZWN0Rm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sc1tmb3JtQ29udHJvbE5hbWVdIGFzIE9iamVjdEZvcm1Db250cm9sO1xyXG4gICAgaWYgKGZjKSB7XHJcblxyXG4gICAgICAvLyBjaGFuZ2Ugb25seSBhbGxvd2VkIHByb3BlcnRpZXNcclxuICAgICAgc3dpdGNoIChjaGFuZ2UubmFtZSkge1xyXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzoge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlLm5ld1ZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NBcnJheVZhbHVlQ2hhbmdlKGZjLCBjaGFuZ2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQudmFsdWUgPSBjaGFuZ2UubmV3VmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChmYy52YWx1ZSAhPT0gY2hhbmdlLm5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZmMucGF0Y2hWYWx1ZShjaGFuZ2UubmV3VmFsdWUpO1xyXG4gICAgICAgICAgICAgIGZjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgICBmYy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlICdyZXF1aXJlZCc6IHtcclxuICAgICAgICAgIGlmIChmYy5fZW9Gb3JtRWxlbWVudC5yZXF1aXJlZCAhPT0gY2hhbmdlLm5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LnJlcXVpcmVkID0gY2hhbmdlLm5ld1ZhbHVlO1xyXG4gICAgICAgICAgICAvLyBhcHBseSBuZXcgdmFsaWRhdG9yc1xyXG4gICAgICAgICAgICAvLyBAc2VlOiBodHRwczovL3Njb3RjaC5pby90dXRvcmlhbHMvaG93LXRvLWltcGxlbWVudC1jb25kaXRpb25hbC12YWxpZGF0aW9uLWluLWFuZ3VsYXItMi1tb2RlbC1kcml2ZW4tZm9ybXNcclxuICAgICAgICAgICAgZmMuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodGhpcy5nZXRWYWxpZGF0b3JzKGZjLl9lb0Zvcm1FbGVtZW50KS5jb25jYXQoW3RoaXMuaW5pdGlhbFZhbGlkYXRvcnNbZmMuX2VvRm9ybUVsZW1lbnQubmFtZV1dKSkpO1xyXG4gICAgICAgICAgICAvLyBuZWVkIHRvIG1hcmsgZm9ybSBjb250cm9sIGFzIHRvdWNoZWQgYmVjYXVzZSBvdGhlcndpc2UgZm9ybSB2YWxpZGF0aW9uIHdpbGwgbm90IHNob3dcclxuICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZXNcclxuICAgICAgICAgICAgZmMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSAncmVhZG9ubHknOiB7XHJcbiAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5yZWFkb25seSA9IGNoYW5nZS5uZXdWYWx1ZTtcclxuICAgICAgICAgIGlmIChjaGFuZ2UubmV3VmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgZmMuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmMuZW5hYmxlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSAnZXJyb3InOiB7XHJcbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZmMuX2VvRm9ybUVsZW1lbnQuZXJyb3IpICE9PSBKU09OLnN0cmluZ2lmeShjaGFuZ2UubmV3VmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmVycm9yID0gY2hhbmdlLm5ld1ZhbHVlO1xyXG4gICAgICAgICAgICBmYy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIGZjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBuZXcgb25yb3dlZGl0IGZ1bmN0aW9uIHdhcyBhcHBsaWVkIGJ5IHRoZSBzY3JpcHRcclxuICAgICAgICBjYXNlICdvbnJvd2VkaXQnOiB7XHJcbiAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5vbnJvd2VkaXQgPSBjaGFuZ2UubmV3VmFsdWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbmV3IG9uY2hhbmdlIGZ1bmN0aW9uIHdhcyBhcHBsaWVkIGJ5IHRoZSBzY3JpcHRcclxuICAgICAgICBjYXNlICdvbmNoYW5nZSc6IHtcclxuICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50Lm9uY2hhbmdlID0gY2hhbmdlLm5ld1ZhbHVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG5ldyBjb250ZXh0SWQgd2FzIGFwcGxpZWQgYnkgdGhlIHNjcmlwdFxyXG4gICAgICAgIGNhc2UgJ2NvbnRleHRJZCc6IHtcclxuICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmNvbnRleHRJZCA9IGNoYW5nZS5uZXdWYWx1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZXNzQXJyYXlWYWx1ZUNoYW5nZShmYywgY2hhbmdlKSB7XHJcbiAgICBjb25zdCBuZXdWYWwgPSBjaGFuZ2UubmV3VmFsdWU7XHJcbiAgICBjb25zdCB0YXJnZXRUeXBlID0gZmMuX2VvRm9ybUVsZW1lbnQudHlwZTtcclxuICAgIC8vIGZvciBzb21lIHR5cGVzIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgbWV0YSBkYXRhIGFyZSBwcm92aWRlZCBhcyB3ZWxsXHJcbiAgICBzd2l0Y2ggKHRhcmdldFR5cGUpIHtcclxuICAgICAgY2FzZSAnT1JHQU5JWkFUSU9OJzoge1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YU1ldGEoZmMuX2VvRm9ybUVsZW1lbnQsIG5ld1ZhbCkuc3Vic2NyaWJlKG0gPT4ge1xyXG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZGF0YU1ldGEgPSBtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0NPREVTWVNURU0nOiB7XHJcbiAgICAgICAgaWYgKCFmYy5fZW9Gb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmVudHJpZXMpIHtcclxuICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmNvZGVzeXN0ZW0gPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Q29kZXN5c3RlbShmYy5fZW9Gb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnVEFCTEUnOiB7XHJcbiAgICAgICAgY29uc3QgZGF0YVRvQmVQcm9jZXNzZWQgPSB7fTtcclxuICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5lbGVtZW50cy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgaWYgKGUudHlwZSA9PT0gJ09SR0FOSVpBVElPTicgfHwgZS50eXBlID09PSAnQ09ERVNZU1RFTScpIHtcclxuICAgICAgICAgICAgZGF0YVRvQmVQcm9jZXNzZWRbZS5uYW1lXSA9IGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGFUb0JlUHJvY2Vzc2VkKS5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCBvYnMgPSBbXTtcclxuICAgICAgICAgIG5ld1ZhbC5mb3JFYWNoKHJvd0RhdGEgPT4ge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhyb3dEYXRhKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGFUb0JlUHJvY2Vzc2VkW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIG9icy5wdXNoKHRoaXMuZ2V0RGF0YU1ldGEoZGF0YVRvQmVQcm9jZXNzZWRba2V5XSwgcm93RGF0YVtrZXldKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICB0YXAobSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFba2V5ICsgJ19tZXRhJ10gPSBtO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm93RGF0YVtrZXkgKyAnX21ldGEnXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBmb3JrSm9pbihvYnMpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUFycmF5VmFsdWUoZmMsIG5ld1ZhbCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVBcnJheVZhbHVlKGZjLCBuZXdWYWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVBcnJheVZhbHVlKGZjLCBuZXdWYWx1ZSkge1xyXG4gICAgZmMuX2VvRm9ybUVsZW1lbnQudmFsdWUgPSBbXS5jb25jYXQobmV3VmFsdWUpO1xyXG4gICAgZmMucGF0Y2hWYWx1ZShbXS5jb25jYXQobmV3VmFsdWUpKTtcclxuICAgIGZjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIGZjLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERhdGFNZXRhKGZvcm1FbGVtZW50OiBhbnksIG5ld1ZhbHVlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cclxuICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICBzd2l0Y2ggKGZvcm1FbGVtZW50LnR5cGUpIHtcclxuICAgICAgICBjYXNlICdPUkdBTklaQVRJT04nOiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9yZ2FuaXphdGlvbk9iamVjdChuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ1JFRkVSRU5DRSc6IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZVNlcnZpY2UuZmV0Y2hJRFJlZmVyZW5jZU1ldGFEYXRhKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpID8gbmV3VmFsdWUgOiBbbmV3VmFsdWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSAnQ09ERVNZU1RFTSc6IHtcclxuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YodGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCkuZW50cmllcy5maW5kKChlbnRyeSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZW50cnkuZGVmYXVsdHJlcHJlc2VudGF0aW9uID09PSBuZXdWYWx1ZTtcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvYnNlcnZhYmxlT2YobnVsbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWN1cnNpdmUgbWV0aG9kIGFkZGluZyBhIG5ldyBGb3JtQ29udHJvbCAoZ3JvdXAgb3IgY29udHJvbCkgdG8gYSBwYXJlbnQgZm9ybSBncm91cFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHBhcmVudEdyb3VwIC0gdGhlIHBhcmVudCBncm91cCB0byBhZGQgdGhlIGNvbnRyb2wgdG9cclxuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnQgLSB0aGUgZW5haW8gZm9ybSBtb2RlbCBlbGVtZW50IHRvIGNyZWF0ZSB0aGUgY2hpbGQgY29udHJvbCBmcm9tXHJcbiAgICogQHBhcmFtIFt1c2VOYW1lXSAtIHVzZSB0aGlzIG5hbWUgaW5zdGVhZCBvZiB0aGUgb25lIGZyb20gdGhlIG1vZGVsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRGb3JtQ29udHJvbChwYXJlbnRHcm91cDogT2JqZWN0Rm9ybUdyb3VwLCBmb3JtRWxlbWVudDogYW55LCB1c2VOYW1lPzogc3RyaW5nKSB7XHJcblxyXG4gICAgbGV0IGN0cmw7XHJcbiAgICBsZXQgbmFtZTtcclxuXHJcbiAgICAvLyBhZGQgYSBmb3JtIGdyb3VwXHJcbiAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ28ybUdyb3VwJyB8fCBmb3JtRWxlbWVudC50eXBlID09PSAnbzJtR3JvdXBTdGFjaycpIHtcclxuXHJcbiAgICAgIC8vIGRvIG5vdCBhZGQgZ3JvdXBzIHRoYXQgYXJlIGVtcHR5XHJcbiAgICAgIGlmICghZm9ybUVsZW1lbnQuZWxlbWVudHMgfHwgZm9ybUVsZW1lbnQuZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZvdW5kIGVtcHR5IGZvcm0gZ3JvdXAnLCBmb3JtRWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjdHJsID0gbmV3IE9iamVjdEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgIGN0cmwuX2VvRm9ybUdyb3VwID0ge1xyXG4gICAgICAgIGxhYmVsOiBmb3JtRWxlbWVudC5sYWJlbCxcclxuICAgICAgICAvL2xheW91dGdyb3VwOiBmb3JtRWxlbWVudC5sYXlvdXRncm91cCxcclxuICAgICAgICBsYXlvdXQ6IGZvcm1FbGVtZW50LmxheW91dCxcclxuICAgICAgICB0eXBlOiBmb3JtRWxlbWVudC50eXBlXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAodXNlTmFtZSA9PT0gJ2NvcmUnIHx8IHVzZU5hbWUgPT09ICdkYXRhJykge1xyXG4gICAgICAgIGN0cmwuX2VvRm9ybUdyb3VwLmxhYmVsID0gdXNlTmFtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgZSBvZiBmb3JtRWxlbWVudC5lbGVtZW50cykge1xyXG4gICAgICAgIHRoaXMuYWRkRm9ybUNvbnRyb2woY3RybCwgZSk7XHJcbiAgICAgIH1cclxuICAgICAgbmFtZSA9IHVzZU5hbWUgfHwgJ2ZnJyArIHRoaXMuZ0NvdW50Kys7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBhZGQgZm9ybSBjb250cm9sXHJcbiAgICAgIC8vIFRvIGJlIGFibGUgdG8gaW50ZWdyYXRlIHJlY3Vyc2l2ZSBmb3JtIGNvbnRyb2xzIGludG8gdGhlIG1haW4gZm9ybSxcclxuICAgICAgLy8gd2UgaGF2ZSB0byB3cmFwIHRoZW0gaW4gYSBmb3JtIGdyb3VwXHJcbiAgICAgIGN0cmwgPSBuZXcgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyKHt9KTtcclxuICAgICAgY3RybC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIgPSB7XHJcbiAgICAgICAgLy8gdGhlIG5hbWUgb2YgdGhlIHdyYXBwZWQgRm9ybUNvbnRyb2xcclxuICAgICAgICBjb250cm9sTmFtZTogZm9ybUVsZW1lbnQubmFtZSxcclxuICAgICAgICBzaXR1YXRpb246IHRoaXMuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvblxyXG4gICAgICB9O1xyXG4gICAgICBpZiAodGhpcy5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uID09PSAnU0VBUkNIJyAmJiBmb3JtRWxlbWVudC52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGRvIG5vdCBzZXQgYSByZWZlcmVuY2UgYXMgdGhlIGZvcm0gY29udHJvbHMgdmFsdWVcclxuICAgICAgLy8gb3RoZXJ3aXNlIHdlIGNvdWxkIG5vdCByZXNldCB0aGUgZm9ybVxyXG4gICAgICBsZXQgdmFsdWU6IGFueTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybUVsZW1lbnQudmFsdWUpKSB7XHJcbiAgICAgICAgLy8gY29weSBieSB2YWx1ZSBmb3IgYXJyYXlzIG9mIG9iamVjdHMgKGUuZy4gdGFibGUgZGF0YSlcclxuICAgICAgICB2YWx1ZSA9IFtdO1xyXG4gICAgICAgIGZvcm1FbGVtZW50LnZhbHVlLmZvckVhY2goKG8pID0+IHtcclxuICAgICAgICAgIHZhbHVlLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvKSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlID0gZm9ybUVsZW1lbnQudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGZvciBjb2Rlc3lzdGVtIGVsZW1lbnRzIGFkZCBlbnRyaWVzIGlmIG5vdCB5ZXQgcHJvdmlkZWRcclxuICAgICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJyAmJiAhZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5lbnRyaWVzKSB7XHJcbiAgICAgICAgZm9ybUVsZW1lbnQuY29kZXN5c3RlbSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRDb2Rlc3lzdGVtKGZvcm1FbGVtZW50LmNvZGVzeXN0ZW0uaWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjcmVhdGUgdGhlIGFjdHVhbCBmb3JtIGNvbnRyb2xcclxuICAgICAgbGV0IGNvbnRyb2xEaXNhYmxlZCA9IHRoaXMuZm9ybU9wdGlvbnMuZGlzYWJsZWQgfHwgISFmb3JtRWxlbWVudC5yZWFkb25seTtcclxuICAgICAgbGV0IGZvcm1Db250cm9sID0gbmV3IE9iamVjdEZvcm1Db250cm9sKHtcclxuICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGNvbnRyb2xEaXNhYmxlZFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGZvcm1FbGVtZW50LnJlYWRvbmx5ID0gY29udHJvbERpc2FibGVkO1xyXG5cclxuICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudDtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbHNbZm9ybUVsZW1lbnQubmFtZV0gPSBmb3JtQ29udHJvbDtcclxuXHJcbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgfHwgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdTVFJJTkcnICYmIGZvcm1FbGVtZW50LmNsYXNzaWZpY2F0aW9uID09PSAnc2VsZWN0b3InKSkge1xyXG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmFwcGx5RmlsdGVyID0gKGZ1bmM6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5maWx0ZXJGdW5jdGlvbiA9IGZ1bmM7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5hcHBseURpc2FibGluZ0ZpbHRlciA9IChmdW5jOiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZGlzYWJsaW5nRmlsdGVyRnVuY3Rpb24gPSBmdW5jO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnU1RSSU5HJyAmJiBmb3JtRWxlbWVudC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3NlbGVjdG9yJykge1xyXG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnNldExpc3QgPSAobGlzdE9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5saXN0ID0gbGlzdE9iamVjdDtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ09SR0FOSVpBVElPTicpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRGaWx0ZXIgPSAoZmlsdGVyT2JqZWN0OiBhbnkpID0+IHtcclxuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmZpbHRlciA9IGZpbHRlck9iamVjdDtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1JFRkVSRU5DRScpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRRdWVyeUZpbHRlcnMgPSAocXVlcnlGaWx0ZXJzT2JqZWN0OiB7W2ZpZWxkUW5hbWU6IHN0cmluZ106IHtvOiBzdHJpbmcsIHYxOiBhbnksIHYyOiBhbnl9fSkgPT4ge1xyXG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQucXVlcnlGaWx0ZXJzID0gcXVlcnlGaWx0ZXJzT2JqZWN0O1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XHJcbiAgICAgICAgLy8gaW4gc2VhcmNoIHNpdHVhdGlvbiBldmVuIHJlYWRvbmx5IGZpZWxkcyBzaG91bGQgYmUgZWRpdGFibGUgLi4uXHJcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQucmVhZG9ubHkgPSBmYWxzZTtcclxuICAgICAgICAvLyAuLi4gYW5kIHJlcXVpcmVkIG1ha2VzIG5vIHNlbnNlIGhlcmVcclxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5yZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyByZW1vdmUgZW1wdHkgZGVzY3JpcHRpb25zXHJcbiAgICAgIGxldCBkZXNjID0gZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZGVzY3JpcHRpb247XHJcbiAgICAgIGlmIChkZXNjICYmIGRlc2MudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uID0gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWRkIHRoZSBmb3JtIGVsZW1lbnQgdG8gdGhlIHNjcmlwdCBtb2RlbCB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50b1xyXG4gICAgICAvLyB0aGUgZm9ybXMgc2NyaXB0aW5nIHNjb3BlIGxhdGVyIG9uXHJcbiAgICAgIHRoaXMuc2NyaXB0TW9kZWxbZm9ybUVsZW1lbnQubmFtZV0gPSBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudDtcclxuXHJcbiAgICAgIC8vIGFwcGx5IGNoYW5nZSBsaXN0ZW5lciB0byB0aGUgZm9ybSBjb250cm9sLCB0aGF0IHdpbGwgdHJpZ2dlclxyXG4gICAgICAvLyB0aGUgZm9ybSBlbGVtZW50cyBvbkNoYW5nZSBsaXN0ZW5lclxyXG4gICAgICBsZXQgY29udHJvbFdhdGNoID0gY3RybC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJyA/IDAgOiA1MDApKTtcclxuICAgICAgY29udHJvbFdhdGNoLnN1YnNjcmliZSgodikgPT4ge1xyXG4gICAgICAgIGlmIChmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC50eXBlID09PSAnUkVGRVJFTkNFJykge1xyXG4gICAgICAgICAgdGhpcy5nZXREYXRhTWV0YShmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudCwgdltmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5uYW1lXSkuc3Vic2NyaWJlKG0gPT4ge1xyXG4gICAgICAgICAgICBpZiAobSkge1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRhdGFNZXRhID0gZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubXVsdGlzZWxlY3QgPyBtIDogbVswXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkZWxldGUgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZGF0YU1ldGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zY3JpcHRpbmdTY29wZSkge1xyXG4gICAgICAgICAgdGhpcy5zY3JpcHRpbmdTY29wZS5tb2RlbENoYW5nZWQodik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY29udHJvbFdhdGNoKTtcclxuXHJcbiAgICAgIGN0cmwuYWRkQ29udHJvbChmb3JtRWxlbWVudC5uYW1lLCBmb3JtQ29udHJvbCk7XHJcbiAgICAgIG5hbWUgPSAnZmdfJyArIGZvcm1FbGVtZW50Lm5hbWU7XHJcbiAgICB9XHJcbiAgICBwYXJlbnRHcm91cC5hZGRDb250cm9sKG5hbWUsIGN0cmwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGQgdmFsaWRhdG9ycyBmb3IgdGhlIGdpdmVuIGZvcm0gZWxlbWVudCB0byBiZSBhdHRhY2hlZCB0b1xyXG4gICAqIGEgcmVhY3RpdmUgZm9ybUNvbnRyb2wuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnQgLSBmb3JtIGVsZW1lbnQgb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRWYWxpZGF0b3JzKGZvcm1FbGVtZW50OiBhbnkpOiBWYWxpZGF0b3JGbltdIHtcclxuICAgIGxldCBlbG1WYWxpZGF0b3JzID0gRm9ybVZhbGlkYXRpb24uZ2V0VmFsaWRhdG9ycyhmb3JtRWxlbWVudCwgdGhpcy5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uKTtcclxuXHJcbiAgICAvLyBhZGQgY3VzdG9tIHZhbGlkYXRvciBmb3Igc2NyaXB0IGVuYWJsZWQgZm9ybXNcclxuICAgIGlmICh0aGlzLnNjcmlwdGluZ1Njb3BlKSB7XHJcbiAgICAgIGVsbVZhbGlkYXRvcnMucHVzaChGb3JtVmFsaWRhdGlvbi5jdXN0b21TY3JpcHRpbmdWYWxpZGF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZWxtVmFsaWRhdG9ycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3QgdGhlIHZhbHVlcyBmcm9tIHRoZSBmb3JtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmb3JtVG9EYXRhKCkge1xyXG5cclxuICAgIHJldHVybiB0aGlzLmZvcm1IZWxwZXJTZXJ2aWNlLmV4dHJhY3RGb3JtRGF0YShcclxuICAgICAgdGhpcy5mb3JtLFxyXG4gICAgICB0aGlzLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24sXHJcbiAgICAgIHRoaXMuZm9ybU9wdGlvbnMuZGF0YSxcclxuICAgICAgdGhpcy5pc0lubmVyVGFibGVGb3JtXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWVyZ2UgZGF0YSBpbnRvIGEgZm9ybSBtb2RlbC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBtb2RlbCAtIGZvcm0gbW9kZWxcclxuICAgKiBAcGFyYW0gZGF0YSAtIGRhdGEgb2JqZWN0IG9yIGFycmF5IG9mIFNlYXJjaEZpbHRlciBvYmplY3RzIGluIGNhc2Ugb2YgYSBzZWFyY2ggZm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGF0YVRvRm9ybShtb2RlbDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIGlmIChtb2RlbCAmJiBkYXRhKSB7XHJcbiAgICAgIHRoaXMuc2V0RWxlbWVudFZhbHVlcyhtb2RlbC5lbGVtZW50cywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kZWw7XHJcbiAgfVxyXG5cclxuICAvLyByZWN1cnNpdmUgbWV0aG9kIGZvciBhZGRpbmcgdmFsdWVzIHRvIG1vZGVsIGVsZW1lbnRzXHJcbiAgcHJpdmF0ZSBzZXRFbGVtZW50VmFsdWVzKGVsZW1lbnRzLCBkYXRhKSB7XHJcblxyXG4gICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoZGF0YSwgZWxlbWVudCkpIHtcclxuXHJcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZGF0YSwgZWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQudmFsdWUpIHtcclxuICAgICAgICAgIC8vIGFkZCBtZXRhIGRhdGEgZm9yIHNvbWUgb2YgdGhlIHR5cGVzXHJcbiAgICAgICAgICB0aGlzLmZldGNoTWV0YURhdGEoZGF0YSwgZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRlbGV0ZSBlbGVtZW50LnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgIT09ICdUQUJMRScgJiYgZWxlbWVudC5lbGVtZW50cyAmJiBlbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNldEVsZW1lbnRWYWx1ZXMoZWxlbWVudC5lbGVtZW50cywgZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gaW4gc29tZSBjYXNlcyByZXF1aXJlZCBtZXRhIGRhdGEgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gdGhlIGVsZW1lbnQgaXRzZWxmXHJcbiAgLy8gc28gdGhleSBoYXZlIHRvIGJlIGZldGNoZWQgYW5kIGFkZGVkIHRvIHRoZSBlbGVtZW50IGZvciB0aGUgZm9ybSB0byBiZSBhYmxlXHJcbiAgLy8gdG8gcmVuZGVyIHRoZSBlbGVtZW50IGNvcnJlY3RseVxyXG4gIHByaXZhdGUgZmV0Y2hNZXRhRGF0YShkYXRhLCBlbGVtZW50KSB7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcclxuICAgICAgLy8gdG9kbzogaG93IHRvIGZldGNoIG1ldGEgZGF0YSBpbiBzZWFyY2ggc2l0dWF0aW9uXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnT1JHQU5JWkFUSU9OJyAmJiBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddKSB7XHJcbiAgICAgICAgZWxlbWVudC5kYXRhTWV0YSA9IGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ107XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgJiYgZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXSkge1xyXG4gICAgICAgIGVsZW1lbnQuZGF0YU1ldGEgPSBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddO1xyXG4gICAgICAgIGVsZW1lbnQuZGVmYXVsdHJlcHJlc2VudGF0aW9uID0gZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXS5kZWZhdWx0cmVwcmVzZW50YXRpb247XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC50eXBlID09PSAnUkVGRVJFTkNFJyAmJiBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddKSB7XHJcbiAgICAgICAgZWxlbWVudC5kYXRhTWV0YSA9IGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzVmFsdWUoZGF0YSwgZWxlbWVudCkge1xyXG5cclxuICAgIC8vIGRpZmZlciBiZXR3ZWVuIGFycmF5IG9mIFNlYXJjaEZpbHRlcnMgYW5kIGEgZm9ybSBkYXRhIG9iamVjdFxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJykge1xyXG4gICAgICAgIHJldHVybiAhIShkYXRhLmZpbmQoKGZpbHRlcikgPT4gZmlsdGVyLnByb3BlcnR5LnN0YXJ0c1dpdGgoZWxlbWVudC5xbmFtZSkpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEoZGF0YS5maW5kKChmaWx0ZXIpID0+IGZpbHRlci5wcm9wZXJ0eSA9PT0gZWxlbWVudC5xbmFtZSkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZGF0YS5oYXNPd25Qcm9wZXJ0eShlbGVtZW50Lm5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUYWJsZUZpbHRlcnMoZmlsdGVyczogU2VhcmNoRmlsdGVyW10sIHByb3BlcnR5TmFtZTogc3RyaW5nKTogU2VhcmNoRmlsdGVyW10ge1xyXG4gICAgcmV0dXJuIGZpbHRlcnMuZmlsdGVyKGYgPT4gZi5wcm9wZXJ0eS5zdGFydHNXaXRoKHByb3BlcnR5TmFtZSArICcuJykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRWYWx1ZShkYXRhLCBlbGVtZW50KSB7XHJcblxyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcclxuICAgICAgaWYgKHRoaXMuaXNJbm5lclRhYmxlRm9ybSkge1xyXG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdEQVRFVElNRScgfHwgZWxlbWVudC50eXBlID09PSAnTlVNQkVSJykge1xyXG4gICAgICAgICAgdmFsdWUgPSBTZWFyY2hTZXJ2aWNlLnRvUmFuZ2VWYWx1ZShkYXRhW2VsZW1lbnQubmFtZV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IGRhdGFbZWxlbWVudC5uYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC50eXBlID09PSAnVEFCTEUnKSB7XHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLnNlYXJjaFNlcnZpY2UudGFibGVGaWx0ZXJzVG9FbGVtZW50VmFsdWUodGhpcy5nZXRUYWJsZUZpbHRlcnMoZGF0YSwgZWxlbWVudC5xbmFtZSksIGVsZW1lbnQuZWxlbWVudHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGRhdGEuZmluZChmID0+IGYucHJvcGVydHkgPT09IGVsZW1lbnQucW5hbWUpO1xyXG4gICAgICAgIHZhbHVlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmZpbHRlclRvRWxlbWVudFZhbHVlKGZpbHRlciwgZWxlbWVudC50eXBlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdEQVRFVElNRScgJiYgZGF0YVtlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShgJHtkYXRhW2VsZW1lbnQubmFtZV19JHtlbGVtZW50LndpdGh0aW1lID8gJycgOiAnVDAwOjAwOjAwJ31gKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWx1ZSA9IGRhdGFbZWxlbWVudC5uYW1lXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIHVuc3Vic2NyaWJlIGZyb20gYWxsIHZhbHVlIGNoYW5nZSBsaXN0ZW5lcnMgZm9yIHRoZSBjdXJyZW50IGZvcm1cclxuICAvLyB0byBhdm9pZCBtZW1vcnkgbGVha3MuIFRoaXMgbWV0aG9kIHdpbGwgYWxzbyBiZSBjYWxsZWQgZXZlcnkgdGltZVxyXG4gIC8vIGEgbmV3IGZvcm0gaXMgcmVuZGVyZWQgdG8gZ2V0IHJpZCBvZiB0aGUgb2xkIGZvcm0gZWxlbWVudCBzdWJzY3JpcHRpb25zXHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUFsbCgpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCd1bnN1YnNjcmliZWQgZnJvbSAnICsgdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aCArICcgdmFsdWUgY2hhbmdlIGxpc3RlbmVycy4nKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
627
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxFQUFFLElBQUksWUFBWSxFQUE0QixRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDNUUsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixVQUFVLEVBRVYsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFjLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBR3RFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUMsTUFBTSxFQUFnQixhQUFhLEVBQUUsYUFBYSxFQUF5QixLQUFLLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDOUcsT0FBTyxFQUFDLFlBQVksRUFBRSxHQUFHLEVBQUMs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QWU7UUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsb0VBQW9FO0lBQ3BFLDBFQUEwRTtJQUNsRSxjQUFjO1FBQ3BCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsMEJBQTBCLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQzs7O1lBdnFCRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsOGRBQTJDO2dCQUUzQyxnRkFBZ0Y7Z0JBQ2hGLG1FQUFtRTtnQkFDbkUsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7O2FBRXJDOzs7WUFkTyxNQUFNO1lBaEJaLFVBQVU7WUFnQmtCLGFBQWE7WUFBRSxhQUFhO1lBTmxELHVCQUF1QjtZQUN2Qix1QkFBdUI7WUFJdkIsY0FBYztZQUdkLGdCQUFnQjtZQWhCdEIsaUJBQWlCOzs7K0JBK0JoQixLQUFLOzRCQUVMLE1BQU07MEJBRU4sTUFBTTtzQkFxQk4sS0FBSyxTQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge29mIGFzIG9ic2VydmFibGVPZiwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1WYWxpZGF0aW9ufSBmcm9tICcuL2Zvcm0tdmFsaWRhdGlvbi9mb3JtLXZhbGlkYXRpb24nO1xyXG5pbXBvcnQge09iamVjdEZvcm1Hcm91cH0gZnJvbSAnLi9vYmplY3QtZm9ybS1ncm91cCc7XHJcbmltcG9ydCB7VmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbH0gZnJvbSAnLi9vYmplY3QtZm9ybS1jb250cm9sJztcclxuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbFdyYXBwZXJ9IGZyb20gJy4vb2JqZWN0LWZvcm0tY29udHJvbC13cmFwcGVyJztcclxuaW1wb3J0IHtPYmplY3RGb3JtU2NyaXB0aW5nU2NvcGV9IGZyb20gJy4vb2JqZWN0LWZvcm0tc2NyaXB0L29iamVjdC1mb3JtLXNjcmlwdGluZy1zY29wZSc7XHJcbmltcG9ydCB7T2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2V9IGZyb20gJy4vb2JqZWN0LWZvcm0tc2NyaXB0L29iamVjdC1mb3JtLXNjcmlwdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtPYmplY3RGb3JtSGVscGVyU2VydmljZX0gZnJvbSAnLi4vb2JqZWN0LWZvcm0taGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge09iamVjdEZvcm1PcHRpb25zfSBmcm9tICcuLi9vYmplY3QtZm9ybS1vcHRpb25zLmludGVyZmFjZSc7XHJcbmltcG9ydCB7Rm9ybVN0YXR1c0NoYW5nZWRFdmVudH0gZnJvbSAnLi4vZm9ybS1zdGF0dXMtY2hhbmdlZC1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1Vuc3Vic2NyaWJlT25EZXN0cm95fSBmcm9tICcuLi8uLi91dGlsL3Vuc3Vic2NyaWJlL3Vuc3Vic2NyaWJlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGx1Z2luc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2FwaS9wbHVnaW5zLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvZ2dlciwgU2VhcmNoRmlsdGVyLCBTeXN0ZW1TZXJ2aWNlLCBTZWFyY2hTZXJ2aWNlLCBEbXNPYmplY3QsIFJhbmdlVmFsdWUsIFV0aWxzfSBmcm9tICdAZW8tc2RrL2NvcmUnO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcmVmZXJlbmNlcy9yZWZlcmVuY2Uuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VvLW9iamVjdC1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL29iamVjdC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgLy8gZGVmaW5lICdjaGlsZCBvbmx5JyBzZXJ2aWNlcyBmb3IgdGhlIGZvcm0gd2l0aG91dCBzZXR0aW5nIGl0IHVwIG9uIHRoZSBtb2R1bGVcclxuICAvLyB3aGljaCB3b3VsZCBjYXVzZSB0aGVtIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIHdob2xlIGFwcGxpY2F0aW9uXHJcbiAgcHJvdmlkZXJzOiBbT2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2VdLFxyXG4gIC8vZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgT2JqZWN0Rm9ybUNvbXBvbmVudCBleHRlbmRzIFVuc3Vic2NyaWJlT25EZXN0cm95IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQElucHV0KCkgaXNJbm5lclRhYmxlRm9ybTogYm9vbGVhbjtcclxuICAvLyB0cmlnZ2VyZWQgd2hlbiB0aGUgZm9ybXMgc3RhdGUgaGFzIGJlZW4gY2hhbmdlZFxyXG4gIEBPdXRwdXQoKSBzdGF0dXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50PigpO1xyXG4gIC8vIGhhbmRsZXIgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGZvcm0gaGFzIGJlZW4gc2V0IHVwXHJcbiAgQE91dHB1dCgpIG9uRm9ybVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBjb3VudGVyIGZvciBuYW1pbmcgdGhlIGZvcm1zIGdyb3Vwc1xyXG4gIGdDb3VudCA9IDA7XHJcbiAgcHVibGljIGZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucztcclxuICBwdWJsaWMgZGVmYXVsdEZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucztcclxuICAvLyB0aGUgYWN0dWFsIGZvcm0gaW5zdGFuY2VcclxuICBwdWJsaWMgZm9ybTtcclxuICAvLyBwcm9wZXJ0eSBmb3IgaG9sZGluZyB0aGUgZm9ybXMgZGF0YSB1c2VkIGZvciBjb21wYXJpc29uIHdoZW4gYSBmb3JtLWNoYW5nZWQtZXZlbnRcclxuICAvLyBpcyBmZXRjaGVkIHRvIGluZGljYXRlIHdoZXIgb3Igbm90IHRoZSBpbmRleGRhdGEgd2VyZSBjaGFuZ2VkIG9yIGp1c3QgdGhlIHByb3BlcnRpZXNcclxuICAvLyBvZiB0aGUgZm9ybSBlbGVtZW50cyAoZWcuIGZvcm0gc2NyaXB0IHNldHRpbmcgZmllbGRzIHRvIHJlYWRvbmx5KVxyXG4gIHByaXZhdGUgZm9ybURhdGE6IGFueTtcclxuICBwcml2YXRlIHNjcmlwdE1vZGVsID0ge307XHJcbiAgcHJpdmF0ZSBzY3JpcHRpbmdTY29wZTogT2JqZWN0Rm9ybVNjcmlwdGluZ1Njb3BlO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgLy8gbG9jYWwgc3RvcmUgZm9yIGFsbCB0aGUgZm9ybSBjb250cm9sIHJlZmVyZW5jZXNcclxuICBwcml2YXRlIGZvcm1Db250cm9scyA9IHt9O1xyXG4gIHByaXZhdGUgaW5pdGlhbFZhbGlkYXRvcnMgPSB7fTtcclxuXHJcblxyXG4gIEBJbnB1dCgnZm9ybU9wdGlvbnMnKVxyXG4gIHNldCBvcHRpb25zKGZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucykge1xyXG4gICAgdGhpcy5kZWZhdWx0Rm9ybU9wdGlvbnMgPSBmb3JtT3B0aW9ucztcclxuICAgIHRoaXMuZm9ybU9wdGlvbnMgPSBfLmNsb25lRGVlcChmb3JtT3B0aW9ucyk7XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1TY3JpcHRTZXJ2aWNlOiBPYmplY3RGb3JtU2NyaXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUhlbHBlclNlcnZpY2U6IE9iamVjdEZvcm1IZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbHVnaW5TZXJ2aWNlOiBQbHVnaW5zU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogUmVmZXJlbmNlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgLy8gaW5pdGlhbGl6ZSB0aGUgZm9ybSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZm9ybSBvcHRpb25zXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5mb3JtID0gbnVsbDtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRpYWxWYWxpZGF0b3JzID0ge307XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVBbGwoKTtcclxuICAgICAgdGhpcy5idWlsZFJlYWN0aXZlRm9ybSh0aGlzLmZvcm1PcHRpb25zIHx8IHt9KTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0T3B0aW9ucygpIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGVmYXVsdEZvcm1PcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0U2NyaXB0aW5nU2NvcGUoZm9ybU9wdGlvbnMsIGRhdGFGb3JtTW9kZWwpIHtcclxuICAgIGxldCB7ZGF0YSwgYWN0aW9ucywgb2JqZWN0cywgY29udGV4dH0gPSA8T2JqZWN0Rm9ybU9wdGlvbnM+KGZvcm1PcHRpb25zIHx8IHt9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zY3JpcHRpbmdTY29wZSkge1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLnNldE1vZGVsKHRoaXMuc2NyaXB0TW9kZWwpO1xyXG4gICAgICAvKiogcHJvdmlkZSBhY2Nlc3MgdG8gYWN0aW9ucyAodXNlZCBpbnNpZGUgb2YgQlBNLUZvcm1zKSAqL1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLmFjdGlvbnMgPSBhY3Rpb25zO1xyXG4gICAgICAvKiogcHJvdmlkZSBhY2Nlc3MgdG8gYWRkaXRpb25hbCBvYmplY3RzICh1c2VkIGZvciBleGFtcGxlIGluIEJQTS1TdGFydC1Gb3JtcyB0b1xyXG4gICAgICAgKiBhZGQgZGF0YSBvZiBETVMtT2JqZWN0cyB0byBzdGFydCB0aGUgcHJvY2VzcyBmb3IpXHJcbiAgICAgICAqL1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLm9iamVjdHMgPSBvYmplY3RzO1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAvKiogcHJvdmlkZSByZWFkb25seSBhY2Nlc3MgdG8gaW5pdGlhbCBmb3JtIGRhdGEgKHdoaWNoIG1heSBhbHNvIGNvbnRhaW4gdmFsdWVzIHRoYXRcclxuICAgICAgICogYXJlIG5vdCByZW5kZXJlZCBhcyBmb3JtIGVsZW1lbnRzIChpbnZpc2libGUgdmFsdWVzKSlcclxuICAgICAgICovXHJcbiAgICAgIHRoaXMuc2NyaXB0aW5nU2NvcGUuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgICAvKiogYnkgZGVmYXVsdCwgc2NyaXB0aW5nIHNjb3BlcyBhcmUgYXBwbGllZCB0byBmb3Jtcy4gQnV0IHRhYmxlIGVsZW1lbnRzIGNyZWF0ZSB0aGVpciBvd24gc2NvcGVcclxuICAgICAgICogZm9yIGVkaXRpbmcgcm93cy4gQmVpbmcgb25lIG9mIHRob3NlIGlubmVyIGZvcm1zIHNob3VsZCBub3QgcnVuIHRoZSBmb3JtIHNjcmlwdCBhZ2FpbiwgYnV0XHJcbiAgICAgICAqIGluc3RlYWQganVzdCBwcm92aWRlIHRoZSBvYnNlcnZpbmcgYWJpbGl0aWVzIG9mIHRoZSBzY3JpcHRpbmcgc2NvcGUuXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybU9wdGlvbnMuZGlzYWJsZWQgJiYgIXRoaXMuaXNJbm5lclRhYmxlRm9ybSAmJiBkYXRhRm9ybU1vZGVsKSB7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0TmFtZSA9IGRhdGFGb3JtTW9kZWwubmFtZSArICdfJyArIGRhdGFGb3JtTW9kZWwuc2l0dWF0aW9uO1xyXG5cclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnZXhlY3V0aW5nIGZvcm0gc2NyaXB0ICcgKyBzY3JpcHROYW1lKTtcclxuICAgICAgICB0aGlzLmZvcm1TY3JpcHRTZXJ2aWNlLnJ1bkZvcm1TY3JpcHQoXHJcbiAgICAgICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLFxyXG4gICAgICAgICAgZGF0YUZvcm1Nb2RlbC5zY3JpcHQsXHJcbiAgICAgICAgICBzY3JpcHROYW1lXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1c0Zvcm0oKSB7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rm9ybURhdGEoZGF0YSkge1xyXG4gICAgdGhpcy5mb3JtT3B0aW9ucy5kYXRhID0gZGF0YTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXQoKTtcclxuICAgIH0sIDApO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3RzIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZm9ybSBtb2RlbC4gRWFjaCBmb3JtIHZhbHVlIGlzIHJlcHJlc2VudGVkIGJ5IG9uZVxyXG4gICAqIHByb3BlcnR5IG9uIHRoZSByZXN1bHQgb2JqZWN0IGhvbGRpbmcgdGhlIGZpZWxkcyB2YWx1ZS4gVGhlIGtleXMgKHByb3BlcnRpZXMpIGFyZSB0aGUgYG5hbWVgXHJcbiAgICogcHJvcGVydGllcyBvZiB0aGUgZm9ybSBlbGVtZW50IChpbiBTRUFSQ0ggc2l0dWF0aW9uIHRoZSBgcW5hbWVgIGZpZWxkIGlzIHVzZWQpLlxyXG4gICAqXHJcbiAgICogSG93IHZhbHVlcyBhcmUgZXh0cmFjdGVkIGlzIGluZmx1ZW5jZWQgYnkgdGhlIGZvcm1zIHNpdHVhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm4gb2JqZWN0IG9mIGtleSB2YWx1ZSBwYWlyc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRGb3JtRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Ub0RhdGEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGb3JtUHJpc3RpbmUoKSB7XHJcbiAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICB9XHJcblxyXG4gIC8vIHJlc2V0IHRoZSBmb3JtIHRvIGl0cyBpbml0aWFsIHN0YXRlXHJcbiAgcHVibGljIHJlc2V0Rm9ybSgpIHtcclxuICAgIHRoaXMuaW5pdE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZW1pdEZvcm1DaGFuZ2VkRXZlbnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG9ic2VydmVkIG1vZGVsIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgY3VycmVudCBmb3JtIHNjcmlwdCBydW5uaW5nLiBJZiB0aGVyZSBpc1xyXG4gICAqIG5vIGZvcm0gc2NyaXB0LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBOVUxMLlxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHVibGljIGdldE9ic2VydmVkU2NyaXB0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY3JpcHRpbmdTY29wZSA/IHRoaXMuc2NyaXB0aW5nU2NvcGUuZ2V0TW9kZWwoKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBDcmVhdGUgYSByZWFjdGl2ZSBmb3JtIGZyb20gdGhlIGVuYWlvIGZvcm0gbW9kZWxcclxuICBwcml2YXRlIGJ1aWxkUmVhY3RpdmVGb3JtKGZvcm1PcHRpb25zKSB7XHJcblxyXG4gICAgdGhpcy5zY3JpcHRpbmdTY29wZSA9IG51bGw7XHJcbiAgICBjb25zdCBmb3JtTW9kZWwgPSB0aGlzLmRhdGFUb0Zvcm0oZm9ybU9wdGlvbnMuZm9ybU1vZGVsLCBmb3JtT3B0aW9ucy5kYXRhKTtcclxuXHJcbiAgICBpZiAoIWZvcm1Nb2RlbCkge1xyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIGEgc2NyaXB0IGlzIGF2YWlsYWJsZSwgd2UnbGwgaW5pdCB0aGUgZm9ybSBzY3JpcHRpbmcgZm9yIHRoZVxyXG4gICAgLy8gY3VycmVudCBmb3JtXHJcbiAgICBpZiAodGhpcy5pc0lubmVyVGFibGVGb3JtIHx8IChmb3JtTW9kZWwuc2NyaXB0ICYmIGZvcm1Nb2RlbC5zY3JpcHQubGVuZ3RoID4gMCkpIHtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FkZGluZyBmb3JtIHNjcmlwdGluZyBzY29wZScpO1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlID0gbmV3IE9iamVjdEZvcm1TY3JpcHRpbmdTY29wZShcclxuICAgICAgICBmb3JtTW9kZWwuc2l0dWF0aW9uLFxyXG4gICAgICAgIHRoaXMub25TY3JpcHRpbmdNb2RlbENoYW5nZWQsXHJcbiAgICAgICAgdGhpcy5wbHVnaW5TZXJ2aWNlLmdldEFwaSgpLFxyXG4gICAgICAgIHRoaXMuaXNJbm5lclRhYmxlRm9ybVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNjcmlwdGluZ1Njb3BlLm9iamVjdElkID0gdGhpcy5mb3JtT3B0aW9ucy5vYmplY3RJZDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZm9ybSA9IG5ldyBPYmplY3RGb3JtR3JvdXAoe30pO1xyXG4gICAgaWYgKGZvcm1Nb2RlbC5lbGVtZW50c1swXSAmJiBmb3JtTW9kZWwuZWxlbWVudHNbMF0uZWxlbWVudHMpIHtcclxuICAgICAgdGhpcy5hZGRGb3JtQ29udHJvbChmb3JtLCBmb3JtTW9kZWwuZWxlbWVudHNbMF0sICdjb3JlJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoZm9ybU1vZGVsLmVsZW1lbnRzWzFdICYmIGZvcm1Nb2RlbC5lbGVtZW50c1sxXS5lbGVtZW50cykge1xyXG4gICAgICB0aGlzLmFkZEZvcm1Db250cm9sKGZvcm0sIGZvcm1Nb2RlbC5lbGVtZW50c1sxXSwgJ2RhdGEnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybSkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5pbml0VmFsaWRhdG9ycyh0aGlzLmZvcm0pO1xyXG4gICAgICBsZXQgZm9ybVdhdGNoID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gIWZvcm1XYXRjaC5jbG9zZWQgJiYgdGhpcy5lbWl0Rm9ybUNoYW5nZWRFdmVudCgpKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZm9ybVdhdGNoKTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdFNjcmlwdGluZ1Njb3BlKGZvcm1PcHRpb25zLCBmb3JtTW9kZWwpO1xyXG5cclxuICAgICAgdGhpcy5vbkZvcm1SZWFkeS5lbWl0KCk7XHJcbiAgICAgIHRoaXMuZW1pdEZvcm1DaGFuZ2VkRXZlbnQoZmFsc2UpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIGluaXRWYWxpZGF0b3JzKGZvcm0pIHtcclxuICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgZm9yIChsZXQga2V5IGluIGZvcm0uY29udHJvbHMpIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybS5jb250cm9sc1trZXldO1xyXG4gICAgICAgIGlmIChjb250cm9sLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRWYWxpZGF0b3JzKGNvbnRyb2wpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYWxWYWxpZGF0b3JzW2NvbnRyb2wuX2VvRm9ybUVsZW1lbnQubmFtZV0gPSBjb250cm9sLnZhbGlkYXRvcjtcclxuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodGhpcy5nZXRWYWxpZGF0b3JzKGNvbnRyb2wuX2VvRm9ybUVsZW1lbnQpLmNvbmNhdChbdGhpcy5pbml0aWFsVmFsaWRhdG9yc1tjb250cm9sLl9lb0Zvcm1FbGVtZW50Lm5hbWVdXSkpKTtcclxuICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0Rm9ybUNoYW5nZWRFdmVudChjb21wYXJlID0gdHJ1ZSkge1xyXG5cclxuICAgIC8vIGNoZWNrIGlmIGluZGV4ZGF0YSBoYXMgYmVlbiBjaGFuZ2VkXHJcbiAgICBsZXQgY3VycmVudEZvcm1EYXRhID0gdGhpcy5nZXRGb3JtRGF0YSgpO1xyXG4gICAgbGV0IGlkeENoYW5nZSA9IGNvbXBhcmUgPyBKU09OLnN0cmluZ2lmeSh0aGlzLmZvcm1EYXRhKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudEZvcm1EYXRhKSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuZm9ybURhdGEgPSBVdGlscy5mb3JtRGF0YVBhcnNlKFV0aWxzLmZvcm1EYXRhU3RyaW5naWZ5KGN1cnJlbnRGb3JtRGF0YSkpO1xyXG4gICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICB0aGlzLnN0YXR1c0NoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgaW52YWxpZDogdGhpcy5mb3JtLmludmFsaWQsXHJcbiAgICAgICAgZGlydHk6IHRoaXMuZm9ybS5kaXJ0eSxcclxuICAgICAgICBkYXRhOiB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIGluZGV4ZGF0YUNoYW5nZWQ6IGlkeENoYW5nZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgc2NyaXB0IGNoYW5nZXMgaXRzIGludGVybmFsIG1vZGVsLlxyXG4gICAqIEl0IGlzIHVzZWQgdG8gdHJhbnNmZXIgdGhlIHNjcmlwdCBjaGFuZ2VzIHRvIHRoZSBhY3R1YWwgZm9ybSBtb2RlbC5cclxuICAgKlxyXG4gICAqIFRvIGVuc3VyZSB0aGUgcmlnaHQgY29udGV4dCwgd2UgZGVmaW5lIGFuIGluc3RhbmNlIG1ldGhvZCBhcyBjYWxsYmFjayBmb3IgdGhlIHNjcmlwdGluZyBzY29wZVxyXG4gICAqIEBzZWU6IGh0dHBzOi8vYmxvZy5qb2hubnlyZWlsbHkuY29tLzIwMTQvMDQvdHlwZXNjcmlwdC1pbnN0YW5jZS1tZXRob2RzLmh0bWxcclxuICAgKlxyXG4gICAqIEBwYXJhbSBmb3JtQ29udHJvbE5hbWVcclxuICAgKiBAcGFyYW0gY2hhbmdlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvblNjcmlwdGluZ01vZGVsQ2hhbmdlZCA9IChmb3JtQ29udHJvbE5hbWUsIGNoYW5nZSkgPT4ge1xyXG5cclxuICAgIC8vIGZpbmQgdGhlIHRhcmdldCBjb250cm9sXHJcbiAgICBsZXQgZmM6IE9iamVjdEZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbHNbZm9ybUNvbnRyb2xOYW1lXSBhcyBPYmplY3RGb3JtQ29udHJvbDtcclxuICAgIGlmIChmYykge1xyXG5cclxuICAgICAgLy8gY2hhbmdlIG9ubHkgYWxsb3dlZCBwcm9wZXJ0aWVzXHJcbiAgICAgIHN3aXRjaCAoY2hhbmdlLm5hbWUpIHtcclxuICAgICAgICBjYXNlICd2YWx1ZSc6IHtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYW5nZS5uZXdWYWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQXJyYXlWYWx1ZUNoYW5nZShmYywgY2hhbmdlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LnZhbHVlID0gY2hhbmdlLm5ld1ZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoZmMudmFsdWUgIT09IGNoYW5nZS5uZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGZjLnBhdGNoVmFsdWUoY2hhbmdlLm5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgZmMubWFya0FzRGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSAncmVxdWlyZWQnOiB7XHJcbiAgICAgICAgICBpZiAoZmMuX2VvRm9ybUVsZW1lbnQucmVxdWlyZWQgIT09IGNoYW5nZS5uZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5yZXF1aXJlZCA9IGNoYW5nZS5uZXdWYWx1ZTtcclxuICAgICAgICAgICAgLy8gYXBwbHkgbmV3IHZhbGlkYXRvcnNcclxuICAgICAgICAgICAgLy8gQHNlZTogaHR0cHM6Ly9zY290Y2guaW8vdHV0b3JpYWxzL2hvdy10by1pbXBsZW1lbnQtY29uZGl0aW9uYWwtdmFsaWRhdGlvbi1pbi1hbmd1bGFyLTItbW9kZWwtZHJpdmVuLWZvcm1zXHJcbiAgICAgICAgICAgIGZjLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKHRoaXMuZ2V0VmFsaWRhdG9ycyhmYy5fZW9Gb3JtRWxlbWVudCkuY29uY2F0KFt0aGlzLmluaXRpYWxWYWxpZGF0b3JzW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdXSkpKTtcclxuICAgICAgICAgICAgLy8gbmVlZCB0byBtYXJrIGZvcm0gY29udHJvbCBhcyB0b3VjaGVkIGJlY2F1c2Ugb3RoZXJ3aXNlIGZvcm0gdmFsaWRhdGlvbiB3aWxsIG5vdCBzaG93XHJcbiAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2VzXHJcbiAgICAgICAgICAgIGZjLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgZmMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ3JlYWRvbmx5Jzoge1xyXG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQucmVhZG9ubHkgPSBjaGFuZ2UubmV3VmFsdWU7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlLm5ld1ZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGZjLmRpc2FibGUoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZjLmVuYWJsZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ2Vycm9yJzoge1xyXG4gICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGZjLl9lb0Zvcm1FbGVtZW50LmVycm9yKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlLm5ld1ZhbHVlKSkge1xyXG4gICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5lcnJvciA9IGNoYW5nZS5uZXdWYWx1ZTtcclxuICAgICAgICAgICAgZmMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbmV3IG9ucm93ZWRpdCBmdW5jdGlvbiB3YXMgYXBwbGllZCBieSB0aGUgc2NyaXB0XHJcbiAgICAgICAgY2FzZSAnb25yb3dlZGl0Jzoge1xyXG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQub25yb3dlZGl0ID0gY2hhbmdlLm5ld1ZhbHVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG5ldyBvbmNoYW5nZSBmdW5jdGlvbiB3YXMgYXBwbGllZCBieSB0aGUgc2NyaXB0XHJcbiAgICAgICAgY2FzZSAnb25jaGFuZ2UnOiB7XHJcbiAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5vbmNoYW5nZSA9IGNoYW5nZS5uZXdWYWx1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBuZXcgY29udGV4dElkIHdhcyBhcHBsaWVkIGJ5IHRoZSBzY3JpcHRcclxuICAgICAgICBjYXNlICdjb250ZXh0SWQnOiB7XHJcbiAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5jb250ZXh0SWQgPSBjaGFuZ2UubmV3VmFsdWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc0FycmF5VmFsdWVDaGFuZ2UoZmMsIGNoYW5nZSkge1xyXG4gICAgY29uc3QgbmV3VmFsID0gY2hhbmdlLm5ld1ZhbHVlO1xyXG4gICAgY29uc3QgdGFyZ2V0VHlwZSA9IGZjLl9lb0Zvcm1FbGVtZW50LnR5cGU7XHJcbiAgICAvLyBmb3Igc29tZSB0eXBlcyB3ZSBoYXZlIHRvIGVuc3VyZSB0aGF0IG1ldGEgZGF0YSBhcmUgcHJvdmlkZWQgYXMgd2VsbFxyXG4gICAgc3dpdGNoICh0YXJnZXRUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ09SR0FOSVpBVElPTic6IHtcclxuICAgICAgICB0aGlzLmdldERhdGFNZXRhKGZjLl9lb0Zvcm1FbGVtZW50LCBuZXdWYWwpLnN1YnNjcmliZShtID0+IHtcclxuICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmRhdGFNZXRhID0gbTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdDT0RFU1lTVEVNJzoge1xyXG4gICAgICAgIGlmICghZmMuX2VvRm9ybUVsZW1lbnQuY29kZXN5c3RlbS5lbnRyaWVzKSB7XHJcbiAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5jb2Rlc3lzdGVtID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZmMuX2VvRm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ1RBQkxFJzoge1xyXG4gICAgICAgIGNvbnN0IGRhdGFUb0JlUHJvY2Vzc2VkID0ge307XHJcbiAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZWxlbWVudHMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdPUkdBTklaQVRJT04nIHx8IGUudHlwZSA9PT0gJ0NPREVTWVNURU0nKSB7XHJcbiAgICAgICAgICAgIGRhdGFUb0JlUHJvY2Vzc2VkW2UubmFtZV0gPSBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhVG9CZVByb2Nlc3NlZCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQgb2JzID0gW107XHJcbiAgICAgICAgICBuZXdWYWwuZm9yRWFjaChyb3dEYXRhID0+IHtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMocm93RGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhVG9CZVByb2Nlc3NlZFtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICBvYnMucHVzaCh0aGlzLmdldERhdGFNZXRhKGRhdGFUb0JlUHJvY2Vzc2VkW2tleV0sIHJvd0RhdGFba2V5XSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgdGFwKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2tleSArICdfbWV0YSddID0gbTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvd0RhdGFba2V5ICsgJ19tZXRhJ107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZm9ya0pvaW4ob2JzKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVBcnJheVZhbHVlKGZjLCBuZXdWYWwpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlQXJyYXlWYWx1ZShmYywgbmV3VmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXJyYXlWYWx1ZShmYywgbmV3VmFsdWUpIHtcclxuICAgIGZjLl9lb0Zvcm1FbGVtZW50LnZhbHVlID0gW10uY29uY2F0KG5ld1ZhbHVlKTtcclxuICAgIGZjLnBhdGNoVmFsdWUoW10uY29uY2F0KG5ld1ZhbHVlKSk7XHJcbiAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICBmYy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREYXRhTWV0YShmb3JtRWxlbWVudDogYW55LCBuZXdWYWx1ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHJcbiAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgc3dpdGNoIChmb3JtRWxlbWVudC50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnT1JHQU5JWkFUSU9OJzoge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPcmdhbml6YXRpb25PYmplY3QobmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlICdSRUZFUkVOQ0UnOiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLmZldGNoSURSZWZlcmVuY2VNZXRhRGF0YShBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSA/IG5ld1ZhbHVlIDogW25ld1ZhbHVlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ0NPREVTWVNURU0nOiB7XHJcbiAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKHRoaXMuc3lzdGVtU2VydmljZS5nZXRDb2Rlc3lzdGVtKGZvcm1FbGVtZW50LmNvZGVzeXN0ZW0uaWQpLmVudHJpZXMuZmluZCgoZW50cnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmRlZmF1bHRyZXByZXNlbnRhdGlvbiA9PT0gbmV3VmFsdWU7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjdXJzaXZlIG1ldGhvZCBhZGRpbmcgYSBuZXcgRm9ybUNvbnRyb2wgKGdyb3VwIG9yIGNvbnRyb2wpIHRvIGEgcGFyZW50IGZvcm0gZ3JvdXBcclxuICAgKlxyXG4gICAqIEBwYXJhbSBwYXJlbnRHcm91cCAtIHRoZSBwYXJlbnQgZ3JvdXAgdG8gYWRkIHRoZSBjb250cm9sIHRvXHJcbiAgICogQHBhcmFtIGZvcm1FbGVtZW50IC0gdGhlIGVuYWlvIGZvcm0gbW9kZWwgZWxlbWVudCB0byBjcmVhdGUgdGhlIGNoaWxkIGNvbnRyb2wgZnJvbVxyXG4gICAqIEBwYXJhbSBbdXNlTmFtZV0gLSB1c2UgdGhpcyBuYW1lIGluc3RlYWQgb2YgdGhlIG9uZSBmcm9tIHRoZSBtb2RlbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRkRm9ybUNvbnRyb2wocGFyZW50R3JvdXA6IE9iamVjdEZvcm1Hcm91cCwgZm9ybUVsZW1lbnQ6IGFueSwgdXNlTmFtZT86IHN0cmluZykge1xyXG5cclxuICAgIGxldCBjdHJsO1xyXG4gICAgbGV0IG5hbWU7XHJcblxyXG4gICAgLy8gYWRkIGEgZm9ybSBncm91cFxyXG4gICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdvMm1Hcm91cCcgfHwgZm9ybUVsZW1lbnQudHlwZSA9PT0gJ28ybUdyb3VwU3RhY2snKSB7XHJcblxyXG4gICAgICAvLyBkbyBub3QgYWRkIGdyb3VwcyB0aGF0IGFyZSBlbXB0eVxyXG4gICAgICBpZiAoIWZvcm1FbGVtZW50LmVsZW1lbnRzIHx8IGZvcm1FbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGb3VuZCBlbXB0eSBmb3JtIGdyb3VwJywgZm9ybUVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3RybCA9IG5ldyBPYmplY3RGb3JtR3JvdXAoe30pO1xyXG4gICAgICBjdHJsLl9lb0Zvcm1Hcm91cCA9IHtcclxuICAgICAgICBsYWJlbDogZm9ybUVsZW1lbnQubGFiZWwsXHJcbiAgICAgICAgLy9sYXlvdXRncm91cDogZm9ybUVsZW1lbnQubGF5b3V0Z3JvdXAsXHJcbiAgICAgICAgbGF5b3V0OiBmb3JtRWxlbWVudC5sYXlvdXQsXHJcbiAgICAgICAgdHlwZTogZm9ybUVsZW1lbnQudHlwZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKHVzZU5hbWUgPT09ICdjb3JlJyB8fCB1c2VOYW1lID09PSAnZGF0YScpIHtcclxuICAgICAgICBjdHJsLl9lb0Zvcm1Hcm91cC5sYWJlbCA9IHVzZU5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAobGV0IGUgb2YgZm9ybUVsZW1lbnQuZWxlbWVudHMpIHtcclxuICAgICAgICB0aGlzLmFkZEZvcm1Db250cm9sKGN0cmwsIGUpO1xyXG4gICAgICB9XHJcbiAgICAgIG5hbWUgPSB1c2VOYW1lIHx8ICdmZycgKyB0aGlzLmdDb3VudCsrO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gYWRkIGZvcm0gY29udHJvbFxyXG4gICAgICAvLyBUbyBiZSBhYmxlIHRvIGludGVncmF0ZSByZWN1cnNpdmUgZm9ybSBjb250cm9scyBpbnRvIHRoZSBtYWluIGZvcm0sXHJcbiAgICAgIC8vIHdlIGhhdmUgdG8gd3JhcCB0aGVtIGluIGEgZm9ybSBncm91cFxyXG4gICAgICBjdHJsID0gbmV3IE9iamVjdEZvcm1Db250cm9sV3JhcHBlcih7fSk7XHJcbiAgICAgIGN0cmwuX2VvRm9ybUNvbnRyb2xXcmFwcGVyID0ge1xyXG4gICAgICAgIC8vIHRoZSBuYW1lIG9mIHRoZSB3cmFwcGVkIEZvcm1Db250cm9sXHJcbiAgICAgICAgY29udHJvbE5hbWU6IGZvcm1FbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgc2l0dWF0aW9uOiB0aGlzLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb25cclxuICAgICAgfTtcclxuICAgICAgaWYgKHRoaXMuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcgJiYgZm9ybUVsZW1lbnQudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICBmb3JtRWxlbWVudC5pc05vdFNldFZhbHVlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICAvLyBkbyBub3Qgc2V0IGEgcmVmZXJlbmNlIGFzIHRoZSBmb3JtIGNvbnRyb2xzIHZhbHVlXHJcbiAgICAgIC8vIG90aGVyd2lzZSB3ZSBjb3VsZCBub3QgcmVzZXQgdGhlIGZvcm1cclxuICAgICAgbGV0IHZhbHVlOiBhbnk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1FbGVtZW50LnZhbHVlKSkge1xyXG4gICAgICAgIC8vIGNvcHkgYnkgdmFsdWUgZm9yIGFycmF5cyBvZiBvYmplY3RzIChlLmcuIHRhYmxlIGRhdGEpXHJcbiAgICAgICAgdmFsdWUgPSBbXTtcclxuICAgICAgICBmb3JtRWxlbWVudC52YWx1ZS5mb3JFYWNoKChvKSA9PiB7XHJcbiAgICAgICAgICB2YWx1ZS5wdXNoKFV0aWxzLmZvcm1EYXRhUGFyc2UoVXRpbHMuZm9ybURhdGFTdHJpbmdpZnkobykpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWx1ZSA9IGZvcm1FbGVtZW50LnZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBmb3IgY29kZXN5c3RlbSBlbGVtZW50cyBhZGQgZW50cmllcyBpZiBub3QgeWV0IHByb3ZpZGVkXHJcbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgJiYgIWZvcm1FbGVtZW50LmNvZGVzeXN0ZW0uZW50cmllcykge1xyXG4gICAgICAgIGZvcm1FbGVtZW50LmNvZGVzeXN0ZW0gPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Q29kZXN5c3RlbShmb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmlkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gY3JlYXRlIHRoZSBhY3R1YWwgZm9ybSBjb250cm9sXHJcbiAgICAgIGxldCBjb250cm9sRGlzYWJsZWQgPSB0aGlzLmZvcm1PcHRpb25zLmRpc2FibGVkIHx8ICEhZm9ybUVsZW1lbnQucmVhZG9ubHk7XHJcbiAgICAgIGxldCBmb3JtQ29udHJvbCA9IG5ldyBPYmplY3RGb3JtQ29udHJvbCh7XHJcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgIGRpc2FibGVkOiBjb250cm9sRGlzYWJsZWRcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBmb3JtRWxlbWVudC5yZWFkb25seSA9IGNvbnRyb2xEaXNhYmxlZDtcclxuXHJcbiAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2xzW2Zvcm1FbGVtZW50Lm5hbWVdID0gZm9ybUNvbnRyb2w7XHJcblxyXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ0NPREVTWVNURU0nIHx8IChmb3JtRWxlbWVudC50eXBlID09PSAnU1RSSU5HJyAmJiBmb3JtRWxlbWVudC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3NlbGVjdG9yJykpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5hcHBseUZpbHRlciA9IChmdW5jOiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZmlsdGVyRnVuY3Rpb24gPSBmdW5jO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuYXBwbHlEaXNhYmxpbmdGaWx0ZXIgPSAoZnVuYzogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRpc2FibGluZ0ZpbHRlckZ1bmN0aW9uID0gZnVuYztcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1NUUklORycgJiYgZm9ybUVsZW1lbnQuY2xhc3NpZmljYXRpb24gPT09ICdzZWxlY3RvcicpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRMaXN0ID0gKGxpc3RPYmplY3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubGlzdCA9IGxpc3RPYmplY3Q7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdPUkdBTklaQVRJT04nKSB7XHJcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuc2V0RmlsdGVyID0gKGZpbHRlck9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5maWx0ZXIgPSBmaWx0ZXJPYmplY3Q7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdSRUZFUkVOQ0UnKSB7XHJcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuc2V0UXVlcnlGaWx0ZXJzID0gKHF1ZXJ5RmlsdGVyc09iamVjdDoge1tmaWVsZFFuYW1lOiBzdHJpbmddOiB7bzogc3RyaW5nLCB2MTogYW55LCB2MjogYW55fX0pID0+IHtcclxuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnF1ZXJ5RmlsdGVycyA9IHF1ZXJ5RmlsdGVyc09iamVjdDtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xyXG4gICAgICAgIC8vIGluIHNlYXJjaCBzaXR1YXRpb24gZXZlbiByZWFkb25seSBmaWVsZHMgc2hvdWxkIGJlIGVkaXRhYmxlIC4uLlxyXG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnJlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgLy8gLi4uIGFuZCByZXF1aXJlZCBtYWtlcyBubyBzZW5zZSBoZXJlXHJcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQucmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gcmVtb3ZlIGVtcHR5IGRlc2NyaXB0aW9uc1xyXG4gICAgICBsZXQgZGVzYyA9IGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uO1xyXG4gICAgICBpZiAoZGVzYyAmJiBkZXNjLnRyaW0oKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5kZXNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCB0aGUgZm9ybSBlbGVtZW50IHRvIHRoZSBzY3JpcHQgbW9kZWwgdGhhdCB3aWxsIGJlIGluamVjdGVkIGludG9cclxuICAgICAgLy8gdGhlIGZvcm1zIHNjcmlwdGluZyBzY29wZSBsYXRlciBvblxyXG4gICAgICB0aGlzLnNjcmlwdE1vZGVsW2Zvcm1FbGVtZW50Lm5hbWVdID0gZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQ7XHJcblxyXG4gICAgICAvLyBhcHBseSBjaGFuZ2UgbGlzdGVuZXIgdG8gdGhlIGZvcm0gY29udHJvbCwgdGhhdCB3aWxsIHRyaWdnZXJcclxuICAgICAgLy8gdGhlIGZvcm0gZWxlbWVudHMgb25DaGFuZ2UgbGlzdGVuZXJcclxuICAgICAgbGV0IGNvbnRyb2xXYXRjaCA9IGN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKGZvcm1FbGVtZW50LnR5cGUgPT09ICdUQUJMRScgPyAwIDogNTAwKSk7XHJcbiAgICAgIGNvbnRyb2xXYXRjaC5zdWJzY3JpYmUoKHYpID0+IHtcclxuICAgICAgICBpZiAoZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQudHlwZSA9PT0gJ1JFRkVSRU5DRScpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0RGF0YU1ldGEoZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQsIHZbZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubmFtZV0pLnN1YnNjcmliZShtID0+IHtcclxuICAgICAgICAgICAgaWYgKG0pIHtcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5kYXRhTWV0YSA9IGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50Lm11bHRpc2VsZWN0ID8gbSA6IG1bMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGVsZXRlIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRhdGFNZXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2NyaXB0aW5nU2NvcGUpIHtcclxuICAgICAgICAgIHRoaXMuc2NyaXB0aW5nU2NvcGUubW9kZWxDaGFuZ2VkKHYpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGNvbnRyb2xXYXRjaCk7XHJcblxyXG4gICAgICBjdHJsLmFkZENvbnRyb2woZm9ybUVsZW1lbnQubmFtZSwgZm9ybUNvbnRyb2wpO1xyXG4gICAgICBuYW1lID0gJ2ZnXycgKyBmb3JtRWxlbWVudC5uYW1lO1xyXG4gICAgfVxyXG4gICAgcGFyZW50R3JvdXAuYWRkQ29udHJvbChuYW1lLCBjdHJsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkIHZhbGlkYXRvcnMgZm9yIHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQgdG8gYmUgYXR0YWNoZWQgdG9cclxuICAgKiBhIHJlYWN0aXZlIGZvcm1Db250cm9sLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZvcm1FbGVtZW50IC0gZm9ybSBlbGVtZW50IG9iamVjdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0VmFsaWRhdG9ycyhmb3JtRWxlbWVudDogYW55KTogVmFsaWRhdG9yRm5bXSB7XHJcbiAgICBsZXQgZWxtVmFsaWRhdG9ycyA9IEZvcm1WYWxpZGF0aW9uLmdldFZhbGlkYXRvcnMoZm9ybUVsZW1lbnQsIHRoaXMuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbik7XHJcblxyXG4gICAgLy8gYWRkIGN1c3RvbSB2YWxpZGF0b3IgZm9yIHNjcmlwdCBlbmFibGVkIGZvcm1zXHJcbiAgICBpZiAodGhpcy5zY3JpcHRpbmdTY29wZSkge1xyXG4gICAgICBlbG1WYWxpZGF0b3JzLnB1c2goRm9ybVZhbGlkYXRpb24uY3VzdG9tU2NyaXB0aW5nVmFsaWRhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVsbVZhbGlkYXRvcnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgZm9ybVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZm9ybVRvRGF0YSgpIHtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5mb3JtSGVscGVyU2VydmljZS5leHRyYWN0Rm9ybURhdGEoXHJcbiAgICAgIHRoaXMuZm9ybSxcclxuICAgICAgdGhpcy5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uLFxyXG4gICAgICB0aGlzLmZvcm1PcHRpb25zLmRhdGEsXHJcbiAgICAgIHRoaXMuaXNJbm5lclRhYmxlRm9ybVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1lcmdlIGRhdGEgaW50byBhIGZvcm0gbW9kZWwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbW9kZWwgLSBmb3JtIG1vZGVsXHJcbiAgICogQHBhcmFtIGRhdGEgLSBkYXRhIG9iamVjdCBvciBhcnJheSBvZiBTZWFyY2hGaWx0ZXIgb2JqZWN0cyBpbiBjYXNlIG9mIGEgc2VhcmNoIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIGRhdGFUb0Zvcm0obW9kZWw6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICBpZiAobW9kZWwgJiYgZGF0YSkge1xyXG4gICAgICB0aGlzLnNldEVsZW1lbnRWYWx1ZXMobW9kZWwuZWxlbWVudHMsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vZGVsO1xyXG4gIH1cclxuXHJcbiAgLy8gcmVjdXJzaXZlIG1ldGhvZCBmb3IgYWRkaW5nIHZhbHVlcyB0byBtb2RlbCBlbGVtZW50c1xyXG4gIHByaXZhdGUgc2V0RWxlbWVudFZhbHVlcyhlbGVtZW50cywgZGF0YSkge1xyXG5cclxuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKGRhdGEsIGVsZW1lbnQpKSB7XHJcblxyXG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSB0aGlzLmdldFZhbHVlKGRhdGEsIGVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChlbGVtZW50LnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyBhZGQgbWV0YSBkYXRhIGZvciBzb21lIG9mIHRoZSB0eXBlc1xyXG4gICAgICAgICAgdGhpcy5mZXRjaE1ldGFEYXRhKGRhdGEsIGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkZWxldGUgZWxlbWVudC52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxlbWVudC50eXBlICE9PSAnVEFCTEUnICYmIGVsZW1lbnQuZWxlbWVudHMgJiYgZWxlbWVudC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50VmFsdWVzKGVsZW1lbnQuZWxlbWVudHMsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGluIHNvbWUgY2FzZXMgcmVxdWlyZWQgbWV0YSBkYXRhIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIHRoZSBlbGVtZW50IGl0c2VsZlxyXG4gIC8vIHNvIHRoZXkgaGF2ZSB0byBiZSBmZXRjaGVkIGFuZCBhZGRlZCB0byB0aGUgZWxlbWVudCBmb3IgdGhlIGZvcm0gdG8gYmUgYWJsZVxyXG4gIC8vIHRvIHJlbmRlciB0aGUgZWxlbWVudCBjb3JyZWN0bHlcclxuICBwcml2YXRlIGZldGNoTWV0YURhdGEoZGF0YSwgZWxlbWVudCkge1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XHJcbiAgICAgIC8vIHRvZG86IGhvdyB0byBmZXRjaCBtZXRhIGRhdGEgaW4gc2VhcmNoIHNpdHVhdGlvblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ09SR0FOSVpBVElPTicgJiYgZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXSkge1xyXG4gICAgICAgIGVsZW1lbnQuZGF0YU1ldGEgPSBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0NPREVTWVNURU0nICYmIGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ10pIHtcclxuICAgICAgICBlbGVtZW50LmRhdGFNZXRhID0gZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXTtcclxuICAgICAgICBlbGVtZW50LmRlZmF1bHRyZXByZXNlbnRhdGlvbiA9IGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ10uZGVmYXVsdHJlcHJlc2VudGF0aW9uO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ1JFRkVSRU5DRScgJiYgZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXSkge1xyXG4gICAgICAgIGVsZW1lbnQuZGF0YU1ldGEgPSBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc1ZhbHVlKGRhdGEsIGVsZW1lbnQpIHtcclxuXHJcbiAgICAvLyBkaWZmZXIgYmV0d2VlbiBhcnJheSBvZiBTZWFyY2hGaWx0ZXJzIGFuZCBhIGZvcm0gZGF0YSBvYmplY3RcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdUQUJMRScpIHtcclxuICAgICAgICByZXR1cm4gISEoZGF0YS5maW5kKChmaWx0ZXIpID0+IGZpbHRlci5wcm9wZXJ0eS5zdGFydHNXaXRoKGVsZW1lbnQucW5hbWUpKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGRhdGEuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXIucHJvcGVydHkgPT09IGVsZW1lbnQucW5hbWUpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGRhdGEuaGFzT3duUHJvcGVydHkoZWxlbWVudC5uYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGFibGVGaWx0ZXJzKGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlcltdIHtcclxuICAgIHJldHVybiBmaWx0ZXJzLmZpbHRlcihmID0+IGYucHJvcGVydHkuc3RhcnRzV2l0aChwcm9wZXJ0eU5hbWUgKyAnLicpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWUoZGF0YSwgZWxlbWVudCkge1xyXG5cclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzSW5uZXJUYWJsZUZvcm0pIHtcclxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnREFURVRJTUUnIHx8IGVsZW1lbnQudHlwZSA9PT0gJ05VTUJFUicpIHtcclxuICAgICAgICAgIHZhbHVlID0gU2VhcmNoU2VydmljZS50b1JhbmdlVmFsdWUoZGF0YVtlbGVtZW50Lm5hbWVdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2VsZW1lbnQubmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJykge1xyXG4gICAgICAgIHZhbHVlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnRhYmxlRmlsdGVyc1RvRWxlbWVudFZhbHVlKHRoaXMuZ2V0VGFibGVGaWx0ZXJzKGRhdGEsIGVsZW1lbnQucW5hbWUpLCBlbGVtZW50LmVsZW1lbnRzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBkYXRhLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBlbGVtZW50LnFuYW1lKTtcclxuICAgICAgICB2YWx1ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5maWx0ZXJUb0VsZW1lbnRWYWx1ZShmaWx0ZXIsIGVsZW1lbnQudHlwZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnREFURVRJTUUnICYmIGRhdGFbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoYCR7ZGF0YVtlbGVtZW50Lm5hbWVdfSR7ZWxlbWVudC53aXRodGltZSA/ICcnIDogJ1QwMDowMDowMCd9YCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsdWUgPSBkYXRhW2VsZW1lbnQubmFtZV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvLyB1bnN1YnNjcmliZSBmcm9tIGFsbCB2YWx1ZSBjaGFuZ2UgbGlzdGVuZXJzIGZvciB0aGUgY3VycmVudCBmb3JtXHJcbiAgLy8gdG8gYXZvaWQgbWVtb3J5IGxlYWtzLiBUaGlzIG1ldGhvZCB3aWxsIGFsc28gYmUgY2FsbGVkIGV2ZXJ5IHRpbWVcclxuICAvLyBhIG5ldyBmb3JtIGlzIHJlbmRlcmVkIHRvIGdldCByaWQgb2YgdGhlIG9sZCBmb3JtIGVsZW1lbnQgc3Vic2NyaXB0aW9uc1xyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVBbGwoKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygndW5zdWJzY3JpYmVkIGZyb20gJyArIHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGggKyAnIHZhbHVlIGNoYW5nZSBsaXN0ZW5lcnMuJyk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|