@eqproject/eqp-attachments 0.1.15 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/bundles/eqproject-eqp-attachments.umd.js +14 -0
- package/bundles/eqproject-eqp-attachments.umd.js.map +1 -1
- package/bundles/eqproject-eqp-attachments.umd.min.js +1 -1
- package/bundles/eqproject-eqp-attachments.umd.min.js.map +1 -1
- package/eqproject-eqp-attachments.metadata.json +1 -1
- package/esm2015/lib/eqp-attachments.component.js +16 -2
- package/esm5/lib/eqp-attachments.component.js +16 -2
- package/fesm2015/eqproject-eqp-attachments.js +14 -0
- package/fesm2015/eqproject-eqp-attachments.js.map +1 -1
- package/fesm5/eqproject-eqp-attachments.js +14 -0
- package/fesm5/eqproject-eqp-attachments.js.map +1 -1
- package/lib/eqp-attachments.component.d.ts +11 -2
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __awaiter, __decorate } from "tslib";
|
|
2
|
-
import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';
|
|
2
|
+
import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';
|
|
3
3
|
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
4
4
|
import { base64ToFile, ImageCropperComponent } from 'ngx-image-cropper';
|
|
5
5
|
import imageCompression from 'browser-image-compression';
|
|
@@ -154,6 +154,14 @@ let EqpAttachmentsComponent = class EqpAttachmentsComponent {
|
|
|
154
154
|
* Evento di output che restituisce l'elemento eliminato prima che questo venga effettivamente rismosso dalla lista.
|
|
155
155
|
*/
|
|
156
156
|
this.onDeleteAttachment = new EventEmitter();
|
|
157
|
+
/**
|
|
158
|
+
* Evento di output scatenato durante l'AfterViewInit del componente che restituisce l'istanza corrente del componente.
|
|
159
|
+
* Questo evento avvisa quando il componente è stato renderizzato, utile per esempio quando si vogliono aggiungere delle colonne
|
|
160
|
+
* alla visualizzazione con allegati multipli lasciando però quelle pre esistenti. Questo si può fare intervenendo sulla
|
|
161
|
+
* proprietà "attachmentsColumns" di questo componente tramite l'istanza passata come paramentro oppure tramite ViewChild
|
|
162
|
+
* dal componente che lo ospita.
|
|
163
|
+
*/
|
|
164
|
+
this.onComponentLoaded = new EventEmitter();
|
|
157
165
|
//#endregion
|
|
158
166
|
//#region Proprietà per gestione caricamento nuovo allegato
|
|
159
167
|
this.newAttachment = {};
|
|
@@ -192,6 +200,9 @@ let EqpAttachmentsComponent = class EqpAttachmentsComponent {
|
|
|
192
200
|
this.attachmentsList = new Array();
|
|
193
201
|
this.checkAttachmentImage();
|
|
194
202
|
}
|
|
203
|
+
ngAfterViewInit() {
|
|
204
|
+
this.onComponentLoaded.emit(this);
|
|
205
|
+
}
|
|
195
206
|
reloadData() {
|
|
196
207
|
if (this.attachmentTable)
|
|
197
208
|
this.attachmentTable.reloadDatatable();
|
|
@@ -810,6 +821,9 @@ __decorate([
|
|
|
810
821
|
__decorate([
|
|
811
822
|
Output("onDeleteAttachment")
|
|
812
823
|
], EqpAttachmentsComponent.prototype, "onDeleteAttachment", void 0);
|
|
824
|
+
__decorate([
|
|
825
|
+
Output("onComponentLoaded")
|
|
826
|
+
], EqpAttachmentsComponent.prototype, "onComponentLoaded", void 0);
|
|
813
827
|
__decorate([
|
|
814
828
|
ViewChild('dialogAddAttachment', { static: true })
|
|
815
829
|
], EqpAttachmentsComponent.prototype, "dialogAddAttachment", void 0);
|
|
@@ -840,4 +854,4 @@ EqpAttachmentsComponent = __decorate([
|
|
|
840
854
|
], EqpAttachmentsComponent);
|
|
841
855
|
export { EqpAttachmentsComponent };
|
|
842
856
|
export { ɵ0 };
|
|
843
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWF0dGFjaG1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BlcXByb2plY3QvZXFwLWF0dGFjaG1lbnRzLyIsInNvdXJjZXMiOlsibGliL2VxcC1hdHRhY2htZW50cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBcUIscUJBQXFCLEVBQWtCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0csT0FBTyxnQkFBZ0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQzFFLE9BQU8sRUFBbUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7SUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNoQyxN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QUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO29FQUF1QztBQUM5QjtJQUEzRCxTQUFTLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7NEVBQStDO0FBT3hFO0lBQWpDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQzs2REFBcUM7QUFDN0M7SUFBeEIsU0FBUyxDQUFDLFlBQVksQ0FBQzsyREFBaUI7QUFXUTtJQUFoRCxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0VBQW9DO0FBQzlCO0lBQXJELFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztzRUFBeUM7QUFDaEQ7SUFBN0MsU0FBUyxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQzs4REFBaUM7QUFwTW5FLHVCQUF1QjtJQUxuQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLG12akJBQStDOztLQUVoRCxDQUFDO0dBQ1csdUJBQXVCLENBc3hCbkM7U0F0eEJZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGJhc2U2NFRvRmlsZSwgSW1hZ2VDcm9wcGVkRXZlbnQsIEltYWdlQ3JvcHBlckNvbXBvbmVudCwgSW1hZ2VUcmFuc2Zvcm0gfSBmcm9tICduZ3gtaW1hZ2UtY3JvcHBlcic7XHJcbmltcG9ydCBpbWFnZUNvbXByZXNzaW9uIGZyb20gJ2Jyb3dzZXItaW1hZ2UtY29tcHJlc3Npb24nXHJcbmltcG9ydCB7IEF0dGFjaG1lbnRUeXBlLCBJQXR0YWNobWVudERUTyB9IGZyb20gJy4vaW50ZXJmYWNlcy9JQXR0YWNobWVudCc7XHJcbmltcG9ydCB7IENvbmZpZ0NvbHVtbiwgRXFwVGFibGVDb21wb25lbnQsIFRvb2x0aXBQb3NpdGlvblR5cGUsIFR5cGVDb2x1bW4gfSBmcm9tICdAZXFwcm9qZWN0L2VxcC10YWJsZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEhlbHBlclNlcnZpY2UgfSBmcm9tICcuL2hlbHBlcnMvYXR0YWNobWVudC5oZWxwZXInO1xyXG5pbXBvcnQgeyBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXFwLWF0dGFjaG1lbnQtZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSU9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvSU9wdGlvbnMnO1xyXG5cclxuY29uc3QgdG9CYXNlNjQgPSBmaWxlID0+IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdC50b1N0cmluZygpKTtcclxuICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XHJcbn0pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlcXAtYXR0YWNobWVudHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lcXAtYXR0YWNobWVudHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VxcC1hdHRhY2htZW50cy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBBdHRhY2htZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIC8vI3JlZ2lvbiBASW5wdXQgZGVsIGNvbXBvbmVudGVcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgVFJVRSBhbGxvcmEgbmFzY29uZGUgbGEgY29sb25uYSBwZXIgbGUgYXppb25pIHN1bGwnYWxsZWdhdG8gKG5lbCBjYXNvIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkuXHJcbiAgICovXHJcbiAgQElucHV0KFwiZGlzYWJsZUFjdGlvblwiKSBkaXNhYmxlQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlIFRSVUUgbW9zdHJhIGlsIHRpdG9sbyBuZWxsJ2hlYWRlciBuZWwgY2FzbyBpbiBjdWkgXCJtdWx0aXBsZUF0dGFjaG1lbnRcIiDDqCBUUlVFIChcIkVsZW5jbyBhbGxlZ2F0aVwiIGRpIGRlZmF1bHQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcInNob3dIZWFkZXJcIikgc2hvd0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRpdG9sbyBkYSB2aXN1YWxpenphcmUgc2UgaWwgcGFyYW1ldHJvIFwic2hvd0hlYWRlclwiIMOoIFRSVUUuIERpIGRldmF1bHQgdmllbmUgdmlzdWFsaXp6YXRvIFwiRWxlbmNvIGFsbGVnYXRpXCIuXHJcbiAgICovXHJcbiAgQElucHV0KFwiaGVhZGVyVGl0bGVcIikgaGVhZGVyVGl0bGU6IHN0cmluZyA9IFwiRWxlbmNvIGFsbGVnYXRpXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcmdlbnRlIGRhdGkgZGEgdmlzdWFsaXp6YXJlLiBOZWwgY2FzbyBzaSB2dW9sZSBnZXN0aXJlIHVuIHNpbmdvbG8gYWxsZWdhdG8gdmEgcGFzc2F0byBpbiBvZ25pIGNhc28gY29tZSBBcnJheS5cclxuICAgKi9cclxuICBASW5wdXQoXCJhdHRhY2htZW50c0xpc3RcIikgYXR0YWNobWVudHNMaXN0OiBBcnJheTxJQXR0YWNobWVudERUTz4gPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBUUlVFIG5vbiBtb3N0cmEgbGEgTWF0Q2FyZCAobmVsIGNhc28gaW4gY3VpIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkuXHJcbiAgICovXHJcbiAgQElucHV0KFwic2hvd01hdENhcmRcIikgc2hvd01hdENhcmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBGQUxTRSBhbGxvcmEgaWwgY29tcG9uZW50ZSBtb3N0cmEgc29sbyBpbCBwdWxzYW50ZSBkaSBjYXJpY2FtZW50byBkaSB1biBzaW5nb2xvIGZpbGUsIHVuYSB2b2x0YSBjYXJpY2F0byBpbCBmaWxlIGludm9jYSBsJ2V2ZW50byBkaSBvdXRwdXQgXCJsb2NhbEVkaXRlZEF0dGFjaG1lbnRzXCIuXHJcbiAgICogU2UgVFJVRSBhbGxvcmEgaWwgY29tcG9uZW50ZSBtb3N0cmEgbCdlbGVuY28gZGkgdHV0dGkgZ2xpIGFsbGVnYXRpIHJpY2V2dXRvIG5lbCBwYXJhbWV0cm8gXCJhdHRhY2htZW50c0xpc3RcIi5cclxuICAgKi9cclxuICBASW5wdXQoXCJtdWx0aXBsZUF0dGFjaG1lbnRcIikgbXVsdGlwbGVBdHRhY2htZW50OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgYXNzdW1lIGlsIHZhbG9yZSBUUlVFIGFsbG9yYSBzYXLDoCBwb3NzaWJpbGUgY2FyaWNhcmUgcGnDuSBmaWxlIHBlciB2b2x0YS4gUXVlc3RhIGZ1bnppb25hbGl0w6Agw6ggYXR0aXZhXHJcbiAgICogU09MTyBzZSBzaSBnZXN0aXNjb25vIGFsbGVnYXRpIG11bHRpcGxpLCBxdWluZGkgc2UgbCdpbnB1dCAnbXVsdGlwbGVBdHRhY2htZW50JyBhc3N1bWUgaWwgdmFsb3JlIFRSVUUsIGFsdHJpbWVudGkgw6ggc2VtcHJlIGRpc2FiaWxpdGF0YS5cclxuICAgKi9cclxuICBASW5wdXQoXCJsb2FkTXVsdGlwbGVGaWxlc1wiKSBsb2FkTXVsdGlwbGVGaWxlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmF6aW9uZSBkZWxsZSBjb2xvbm5lIGRlbGxhIGVxcC10YWJsZSBwZXIgbGEgdmlzdWFsaXp6YXppb25lIGRlZ2xpIGFsbGVnYXRpIChjYXNvIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkuXHJcbiAgICovXHJcbiAgQElucHV0KFwiYXR0YWNobWVudHNDb2x1bW5zXCIpIGF0dGFjaG1lbnRzQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPiA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgaWwgbWVzc2FnZ2lvIGRhIHZpc3VhbGl6emFyZSBuZWwgY2FzbyBpbiBjdWkgbGEgdGFiZWxsYSBkZWdsaSBhbGxlZ2F0aSAobmVsIGNhc28gaW4gY3VpIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkgw6ggdnVvdGEuXHJcbiAgICovXHJcbiAgQElucHV0KFwiZW1wdHlUYWJsZU1lc3NhZ2VcIikgZW1wdHlUYWJsZU1lc3NhZ2U6IHN0cmluZyA9IFwiTmVzc3VuIGRhdG8gdHJvdmF0b1wiO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBUUlVFIGFsbG9yYSBwZXJtZXR0ZSBkaSBzZWxlemlvbmFyZSBzb2x0YW50byBmaWxlIGRpIHRpcG8gaW1tYWdpbmUsIGF2ZW50ZSB1bm8gZGVpIG1pbWV0eXBlXHJcbiAgICogc3BlY2lmaWNhdGkgZGVudHJvIEF0dGFjaG1lbnRIZWxwZXJTZXJ2aWNlLlxyXG4gICAqIFNlIEZBTFNFIHBlcm1ldHRlIGRpIHNlbGV6aW9uYXJlIHF1YWxzaWFzaSB0aXBvIGRpIGZpbGVcclxuICAgKi9cclxuICBASW5wdXQoXCJhbGxvd09ubHlJbWFnZXNcIikgYWxsb3dPbmx5SW1hZ2VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNwZWNpZmljYSBpIHRpcGkgZGkgZmlsZSBjaGUgw6ggcG9zc2liaWxlIGNhcmljYXJlXHJcbiAgICovXHJcbiAgQElucHV0KFwiYWNjZXB0ZWRGaWxlVHlwZXNcIikgYWNjZXB0ZWRGaWxlVHlwZXM6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgVFJVRSBkaXNhYmlsaXRhIGlsIHB1bHNhbnRlIGRpIEFnZ2l1bnRhIGFsbGVnYXRvIChhIHByZXNjaW5kZXJlIGRhbCB2YWxvcmUgZGVsIHBhcmFtZXRybyBcIm11bHRpcGxlQXR0YWNobWVudFwiKS5cclxuICAgKi9cclxuICBASW5wdXQoXCJpc0Rpc2FibGVkXCIpIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW9zdHJhL25hc2NvbmRlIGxhIGNvbG9ubmEgcGVyIHZpc3VhbGl6emFyZSBsJ2FudGVwcmltYSBkZWkgZmlsZSBuZWxsYSB0YWJlbGxhIChjYXNvIG11bHRpcGxlQXRhdGNobWVudHMgPSB0cnVlKS5cclxuICAgKi9cclxuICBASW5wdXQoXCJzaG93SW5saW5lUHJldmlld1wiKSBzaG93SW5saW5lUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdWVwcmFyZSBsJ0lBdHRhY2htZW50RFRPIGNvbXBsZXRvIGRhIHZlZGVyZSBuZWxsJ2FudGVwcmltYS4gTGEgY2hpYW1hdGEgc2Fyw6AgaW4gUE9TVCBlIG5lbCBib2R5XHJcbiAgICogY29udGVycsOgIGwnSUF0dGFjaG1lbnREVE8gc2VsZXppb25hdG8gZGFsbCd1dGVudGUuXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZXNlZ3VpdGEgc29sbyBwZXIgbCdhbnRlcHJpbWEgZGVsbGUgaW1tYWdpbmkgZXNzZW5kbyBuZWNlc3NhcmlvIGlsIGJhc2U2NCBjb21wbGV0byBkZWxsJ2ltbWFnaW5lIGEgZGltZW5zaW9uZSByZWFsZS5cclxuICAgKiBQZXIgZG9jdW1lbnRpL2xpbmsgYmFzdGEgY2hlIHNpYSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIEZpbGVQYXRoIGRpIElBdHRhY2htZW50RFRPLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcImdldEF0dGFjaG1lbnRFbmRwb2ludFwiKSBnZXRBdHRhY2htZW50RW5kcG9pbnQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhvc3RuYW1lIGRlbGwnYW1iaWVudGUgZGkgcHJvZHV6aW9uZSBkZWxsJ2FwcGxpY2F0aXZvLiBOZWNlc3NhcmlvIHBlciB2aXN1YWxpenphcmUgbCdhbnRlcHJpbWEgZGVpIGRvY3VtZW50aVxyXG4gICAqIHRyYW1pdGUgaWwgdmlld2VyIGRpIGdvb2dsZS5cclxuICAgKiBOT1RBOiBQZXIgdmlzdWFsaXp6YXJlIGwnYW50ZXByaW1hIMOoIG5lY2Vzc2FyaW8gY2hlIGxhIHByb3JpZXTDoCBGaWxlUGF0aCBkZWxsJ0lBdHRhY2htZW50RFRPIHNpYSBwb3BvbGF0YSBlIGNoZVxyXG4gICAqIHNpYSBhYmlsaXRhdG8gbCdhY2Nlc3NvIGFsbGEgY2FydGVsbGEgc3VsIHNlcnZlciB0cmFtaXRlIGhvc3RuYW1lLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcInByb2R1Y3Rpb25CYXNlVXJsXCIpIHByb2R1Y3Rpb25CYXNlVXJsOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBPcHppb25pIHBlciBsYSBjb21wcmVzc2lvbmUgZGVsbGUgaW1tYWdpbmkgY2FyaWNhdGUuXHJcbiAgICovXHJcbiAgQElucHV0KFwiY29tcHJlc3Npb25PcHRpb25zXCIpIGNvbXByZXNzaW9uT3B0aW9uczogSU9wdGlvbnMgPSB7IG1heFNpemVNQjogMC41LCBtYXhXaWR0aE9ySGVpZ2h0OiAxOTIwLCB1c2VXZWJXb3JrZXI6IHRydWUgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQXJyYXkgZGkgQXR0YWNobWVudFR5cGUgY2hlIHNpIHBvc3Nvbm8gYWdnaXVuZ2VyZVxyXG4gICAqL1xyXG4gIEBJbnB1dChcImFsbG93ZWRUeXBlc1wiKSBhbGxvd2VkVHlwZXM6IEFycmF5PEF0dGFjaG1lbnRUeXBlPiA9IFtBdHRhY2htZW50VHlwZS5GSUxFLCBBdHRhY2htZW50VHlwZS5MSU5LXTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgc3RhYmlsaXJlIHNlIGxhIGVxcC10YWJsZSBjb250ZW5lbnRlIGwnZWxlbmNvIGRlZ2xpIGFsbGVnYXRpIHV0aWxpenphXHJcbiAgICogaWwgbXVsdGlsaW5ndWEgb3BwdXJlIG5vXHJcbiAgICovXHJcbiAgQElucHV0KFwiaXNFcXBUYWJsZU11bHRpTGFuZ3VhZ2VcIikgaXNFcXBUYWJsZU11bHRpTGFuZ3VhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgc3RhYmlsaXJlLCBpbiBjYXNvIGRpIGdlc3Rpb25lIGFsbGVnYXRpIG11bHRpcGxpLCBzZSBsYSB0YWJlbGxhIGNvbnRlbmVudGUgbCdlbGVuY28gXHJcbiAgICogZGVnbGkgYWxsZWdhdGkgZGV2ZSBlc3NlcmUgcGFnaW5hdGEgb3BwdXJlIG5vXHJcbiAgICovXHJcbiAgQElucHV0KFwidGFibGVQYWdpbmF0b3JWaXNpYmxlXCIpIHRhYmxlUGFnaW5hdG9yVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluIGNhc28gZGkgZ2VzdGlvbmUgYWxsZWdhdGkgbXVsdGlwbGksIHBlcm1ldHRlIGRpIHN0YWJpbGlyZSBsYSBkaW1lbnNpb25lIHBhZ2luYSBkaSBkZWZhdWx0IFxyXG4gICAqIHBlciBsYSB0YWJlbGxhIGNvbnRlbmVudGUgbCdlbGVuY28gZGVnbGkgYWxsZWdhdGlcclxuICAgKi9cclxuICBASW5wdXQoXCJ0YWJsZVBhZ2luYXRvclNpemVcIikgdGFibGVQYWdpbmF0b3JTaXplOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCBwZXIgZGVmaW5pcmUgbGUgbGFiZWwgZGEgdXNhcmUgbmVsIGNvbXBvbmVudGVcclxuICAgKi9cclxuICBASW5wdXQoXCJkb3dubG9hZFRvb2x0aXBQb3NpdGlvblwiKSBkb3dubG9hZFRvb2x0aXBQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uVHlwZSA9IFRvb2x0aXBQb3NpdGlvblR5cGUuQmVsb3c7XHJcbiAgQElucHV0KFwib3BlbkxpbmtMYWJlbFwiKSBvcGVuTGlua0xhYmVsOiBzdHJpbmcgPSBcIkFwcmkgbGlua1wiO1xyXG4gIEBJbnB1dChcImFkZEJ1dHRvbkxhYmVsXCIpIGFkZEJ1dHRvbkxhYmVsOiBzdHJpbmcgPSBcIkFnZ2l1bmdpXCI7XHJcbiAgQElucHV0KFwiZG93bmxvYWRMYWJlbFwiKSBkb3dubG9hZExhYmVsOiBzdHJpbmcgPSBcIkRvd25sb2FkXCI7XHJcbiAgQElucHV0KFwiZGVsZXRlTGFiZWxcIikgZGVsZXRlTGFiZWw6IHN0cmluZyA9IFwiRWxpbWluYVwiO1xyXG4gIEBJbnB1dChcImZpbGVOYW1lTGFiZWxcIikgZmlsZU5hbWVMYWJlbDogc3RyaW5nID0gXCJOb21lIGZpbGVcIjtcclxuICBASW5wdXQoXCJwcmV2aWV3TGFiZWxcIikgcHJldmlld0xhYmVsOiBzdHJpbmcgPSBcIkFudGVwcmltYVwiO1xyXG4gIEBJbnB1dChcInVwbG9hZEZpbGVMYWJlbFwiKSB1cGxvYWRGaWxlTGFiZWw6IHN0cmluZyA9IFwiQ2FyaWNhIGZpbGVcIjtcclxuICBASW5wdXQoXCJjb25maXJtTGFiZWxcIikgY29uZmlybUxhYmVsOiBzdHJpbmcgPSBcIkNvbmZlcm1hXCI7XHJcbiAgQElucHV0KFwiYWJvcnRMYWJlbFwiKSBhYm9ydExhYmVsOiBzdHJpbmcgPSBcIkFubnVsbGFcIjtcclxuICBASW5wdXQoXCJzYXZlTGFiZWxcIikgc2F2ZUxhYmVsOiBzdHJpbmcgPSBcIlNhbHZhXCI7XHJcbiAgQElucHV0KFwiZXhpdExhYmVsXCIpIGV4aXRMYWJlbDogc3RyaW5nID0gXCJFc2NpXCI7XHJcbiAgQElucHV0KFwiZXFwVGFibGVTZWFyY2hUZXh0XCIpIGVxcFRhYmxlU2VhcmNoVGV4dDogc3RyaW5nID0gXCJDZXJjYVwiO1xyXG4gIEBJbnB1dChcImRlbGV0ZURpYWxvZ1RpdGxlXCIpIGRlbGV0ZURpYWxvZ1RpdGxlOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dChcImRlbGV0ZURpYWxvZ01lc3NhZ2VcIikgZGVsZXRlRGlhbG9nTWVzc2FnZTogc3RyaW5nID0gXCJTZWkgc2ljdXJvIGRpIHZvbGVyIGNhbmNlbGxhcmUgcXVlc3QnYWxsZWdhdG8/XCI7XHJcbiAgQElucHV0KFwibm9JbWFnZVNlbGVjdGVkRXJyb3JNZXNzYWdlXCIpIG5vSW1hZ2VTZWxlY3RlZEVycm9yTWVzc2FnZTogc3RyaW5nID0gXCJOb24gw6ggcG9zc2liaWxlIHNlbGV6aW9uYXJlIHVuIGZpbGUgY2hlIG5vbiBzaWEgdW4naW1tYWdpbmUuXCI7XHJcbiAgQElucHV0KFwid3JvbmdUeXBlU2VsZWN0ZWRFcnJvck1lc3NhZ2VcIikgd3JvbmdUeXBlU2VsZWN0ZWRFcnJvck1lc3NhZ2U6IHN0cmluZyA9IFwiTm9uIMOoIHBvc3NpYmlsZSBjYXJpY2FyZSBpbCBmaWxlIHNlbGV6aW9uYXRvLlwiO1xyXG4gIEBJbnB1dChcInZpZGVvUHJldmlld0Vycm9yTWVzc2FnZVwiKSB2aWRlb1ByZXZpZXdFcnJvck1lc3NhZ2U6IHN0cmluZyA9IFwiSW1wb3NzaWJpbGUgYXByaXJlIGwnYW50ZXByaW1hIGRpIHVuIGZpbGUgdmlkZW8uXCI7XHJcbiAgQElucHV0KFwidmlkZW9QcmV2aWV3RXJyb3JNZXNzYWdlXCIpIGF1ZGlvUHJldmlld0Vycm9yTWVzc2FnZTogc3RyaW5nID0gXCJJbXBvc3NpYmlsZSBhcHJpcmUgbCdhbnRlcHJpbWEgZGkgdW4gZmlsZSBhdWRpby5cIjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEBPdXRwdXQgZGVsIGNvbXBvbmVudGVcclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdGl0dWlzY2UgbGEgbGlzdGEgYWdnaW9ybmF0YSBkZWdsaSBhbGxlZ2F0aS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbG9jYWxFZGl0ZWRBdHRhY2htZW50czogRXZlbnRFbWl0dGVyPEFycmF5PElBdHRhY2htZW50RFRPPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElBdHRhY2htZW50RFRPPj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIHNjYXRlbmF0byBhbGxhIHByZXNzaW9uZSBkZWwgcHVsc2FudGUgRVNDSSBkZWxsYSBtb2RhbGUgZGkgY2FyaWNhbWVudG8gZmlsZS5cclxuICAgKi9cclxuICAgQE91dHB1dCgpIGFib3J0QWRkQXR0YWNobWVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGRpIG91dHB1dCBjaGUgcmVzdGl0dWlzY2UgbCdJQXR0YWNobWVudERUTyBzZWxlemlvbmF0byBwZXIgaWwgZG93bmxvYWQgbmVsIGNhc28gRmlsZURhdGFCYXNlNjQsIEZpbGVDb250ZW50VHlwZSBvIEZpbGVOYW1lIG5vbiBmb3NzZXJvIHNwZWNpZmljYXRpLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoXCJkb3dubG9hZEF0dGFjaG1lbnRcIikgZG93bmxvYWRBdHRhY2htZW50OiBFdmVudEVtaXR0ZXI8SUF0dGFjaG1lbnREVE8+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQXR0YWNobWVudERUTz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGRpIG91dHB1dCBjaGUgcmVzdGl0dWlzY2UgbCdlbGVtZW50byBlbGltaW5hdG8gcHJpbWEgY2hlIHF1ZXN0byB2ZW5nYSBlZmZldHRpdmFtZW50ZSByaXNtb3NzbyBkYWxsYSBsaXN0YS5cclxuICAgKi9cclxuICBAT3V0cHV0KFwib25EZWxldGVBdHRhY2htZW50XCIpIG9uRGVsZXRlQXR0YWNobWVudDogRXZlbnRFbWl0dGVyPElBdHRhY2htZW50RFRPPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUF0dGFjaG1lbnREVE8+KCk7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgZ2VzdGlvbmUgY2FyaWNhbWVudG8gbnVvdm8gYWxsZWdhdG9cclxuICBuZXdBdHRhY2htZW50OiBJQXR0YWNobWVudERUTyA9IHt9IGFzIElBdHRhY2htZW50RFRPO1xyXG4gIG5ld011bHRpcGxlQXR0YWNobWVudHM6IEFycmF5PElBdHRhY2htZW50RFRPPiA9IFtdO1xyXG4gIGRpYWxvZlJlZkFkZEF0dGFjaG1lbnQ6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBhdHRhY2htZW50VHlwZSA9IEF0dGFjaG1lbnRUeXBlO1xyXG4gIG5ld0F0dGFjaG1lbnRGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc2VsZWN0ZWRGaWxlOiBGaWxlID0gbnVsbDtcclxuICBzZWxlY3RlZEZpbGVzOiBBcnJheTxGaWxlPiA9IG51bGw7XHJcbiAgc2hvd0Nyb3BJbWFnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0FkZEF0dGFjaG1lbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dBZGRBdHRhY2htZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0FkZE11bHRpcGxlQXR0YWNobWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0FkZE11bHRpcGxlQXR0YWNobWVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGdlc3Rpb25lIHJpZGltZW5zaW9uYW1lbnRvIGZpbGUgZGkgdGlwbyBpbWFnZVxyXG4gIGltYWdlQ2hhbmdlZEV2ZW50OiBhbnkgPSAnJztcclxuICBjcm9wcGVkSW1hZ2U6IGFueSA9ICcnO1xyXG4gIHRyYW5zZm9ybTogSW1hZ2VUcmFuc2Zvcm0gPSB7fTtcclxuICBAVmlld0NoaWxkKEltYWdlQ3JvcHBlckNvbXBvbmVudCkgaW1hZ2VDcm9wcGVyOiBJbWFnZUNyb3BwZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnaW1hZ2VJbnB1dCcpIGltYWdlSW5wdXQ6IGFueTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZTtcclxuICBzZWxlY3RlZEF0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPO1xyXG5cclxuICBvcmlnaW5hbFdpZHRoOiBudW1iZXI7XHJcbiAgb3JpZ2luYWxIZWlnaHQ6IG51bWJlcjtcclxuICBjdXN0b21XaWR0aDogbnVtYmVyO1xyXG4gIGN1c3RvbUhlaWdodDogbnVtYmVyO1xyXG5cclxuICBAVmlld0NoaWxkKCdhdHRhY2htZW50VGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgYXR0YWNobWVudFRhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdpbmxpbmVQcmV2aWV3VGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbmxpbmVQcmV2aWV3VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZGlhbG9nUHJldmlldycsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ1ByZXZpZXc6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICAvL1NlIMOoIHN0YXRhIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBkZWxsZSBzb2xlIGltbWFnaW5pIGFsbG9yYSBpbXBvc3RhIGlsIGZpbHRybyBwZXIgbGUgZXN0ZW5zaW9uaSBwb3NzaWJpbGkgZGEgY2FyaWNhcmVcclxuICAgIGlmICghdGhpcy5hY2NlcHRlZEZpbGVUeXBlcylcclxuICAgICAgaWYgKHRoaXMuYWxsb3dPbmx5SW1hZ2VzID09IHRydWUpXHJcbiAgICAgICAgdGhpcy5hY2NlcHRlZEZpbGVUeXBlcyA9IFwiaW1hZ2UvKlwiO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5hY2NlcHRlZEZpbGVUeXBlcyA9IFwiKlwiO1xyXG5cclxuICAgIC8vIFNlIG5vbiBzb25vIHN0YXRpIHNwZWNpZmljYXRpIGkgdGlwaSBkYSBnZXN0aXJlIG1hIMOoIHN0YXRvIHBhc3NhdG8gbnVsbCBvIHVuIGFycmF5IHZ1b3RvIGltcG9zdG8gaSB0aXBpIGRpIGRlZmF1bHQuXHJcbiAgICBpZiAoIXRoaXMuYWxsb3dlZFR5cGVzIHx8IHRoaXMuYWxsb3dlZFR5cGVzLmxlbmd0aCA9PSAwKVxyXG4gICAgICB0aGlzLmFsbG93ZWRUeXBlcyA9IFtBdHRhY2htZW50VHlwZS5GSUxFLCBBdHRhY2htZW50VHlwZS5MSU5LXTtcclxuICAgIGVsc2UgaWYgKHRoaXMuYWxsb3dlZFR5cGVzLmZpbmQodCA9PiB0ICE9IEF0dGFjaG1lbnRUeXBlLkZJTEUgJiYgdCAhPSBBdHRhY2htZW50VHlwZS5MSU5LKSkge1xyXG4gICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5XYXJuaW5nKFwiQWxtZW5vIHVubyBkZWdsaSBBdHRhY2htZW50VHlwZSBzZWxlemlvbmF0aSBuZWwgcGFyYW1ldHJvIFxcXCJhbGxvd2VkVHlwZXNcXFwiIG5vbiBlc2lzdGUuXCIpXHJcbiAgICAgIHRoaXMuYWxsb3dlZFR5cGVzID0gW0F0dGFjaG1lbnRUeXBlLkZJTEUsIEF0dGFjaG1lbnRUeXBlLkxJTktdO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL1NlIMOoIHN0YXRhIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBtdWx0aXBsYSBkZWdsaSBhbGxlZ2F0aSBhbGxvcmEgY29uZmlndXJhIGwnZXFwLXRhYmxlXHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZUF0dGFjaG1lbnQgPT0gdHJ1ZSAmJiAoIXRoaXMuYXR0YWNobWVudHNDb2x1bW5zIHx8IHRoaXMuYXR0YWNobWVudHNDb2x1bW5zLmxlbmd0aCA9PSAwKSkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hdHRhY2htZW50c0xpc3QgPT0gbnVsbClcclxuICAgICAgdGhpcy5hdHRhY2htZW50c0xpc3QgPSBuZXcgQXJyYXk8SUF0dGFjaG1lbnREVE8+KCk7XHJcblxyXG4gICAgdGhpcy5jaGVja0F0dGFjaG1lbnRJbWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbG9hZERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5hdHRhY2htZW50VGFibGUpXHJcbiAgICAgIHRoaXMuYXR0YWNobWVudFRhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBdHRhY2htZW50SW1hZ2UoKSB7XHJcbiAgICB0aGlzLmF0dGFjaG1lbnRzTGlzdC5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICBhLklzSW1hZ2UgPSBBdHRhY2htZW50SGVscGVyU2VydmljZS5jaGVja0ltYWdlRnJvbU1pbWVUeXBlKGEuRmlsZUNvbnRlbnRUeXBlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdlc3Rpb25lIGVsZW5jbyBhbGxlZ2F0aVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmEgbGUgY29sb25uZSBwZXIgbCdlcXAtdGFibGUgbmVsIGNhc28gaW4gY3VpIGlsIHBhcmFtZXRybyBcIm11bHRpcGxlQXR0YWNobWVudHNcIiDDqCBUUlVFLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmF0dGFjaG1lbnRzQ29sdW1ucyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZUFjdGlvbiAhPSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYXR0YWNobWVudHNDb2x1bW5zLnB1c2goe1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIiwgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLCBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgbmFtZTogdGhpcy5kZWxldGVMYWJlbCwgaWNvbjogXCJkZWxldGVcIiwgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZUF0dGFjaG1lbnQoZWxlbWVudCkgfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBkb3dubG9hZENvbHVtbiA9IHtcclxuICAgICAga2V5OiBcImF0dGFjaG1lbnRcIiwgZGlzcGxheTogXCJcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5TaW1wbGVBY3Rpb24sIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAnJywgZm9udGF3ZXNvbWU6IHRydWUsXHJcbiAgICAgICAgICBpY29uOiAoZWxlbWVudCkgPT4geyByZXR1cm4gdGhpcy5zaG93SW5saW5lUHJldmlldyA/IChlbGVtZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUgPyBcImZhcyBmYS1jbG91ZC1kb3dubG9hZC1hbHRcIiA6IFwiZmFzIGZhLWV4dGVybmFsLWxpbmstYWx0XCIpIDogdGhpcy5nZXRBdHRhY2htZW50SWNvbihlbGVtZW50KTsgfSxcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgY29sLCBlbGVtZW50SW5kZXgpID0+IHRoaXMudmlld0F0dGFjaG1lbnQoZWxlbWVudCksXHJcbiAgICAgICAgICB0b29sdGlwOiB7IHRvb2x0aXBUZXh0OiAoZWxlbWVudCkgPT4geyByZXR1cm4gZWxlbWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5GSUxFID8gdGhpcy5kb3dubG9hZExhYmVsIDogdGhpcy5vcGVuTGlua0xhYmVsOyB9LCB0b29sdGlwUG9zaXRpb246IHRoaXMuZG93bmxvYWRUb29sdGlwUG9zaXRpb24gfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgbGV0IGlubGluZVByZXZpZXdDb2x1bW4gPSB7XHJcbiAgICAgIGtleTogXCJJbmxpbmVQcmV2aWV3XCIsIGRpc3BsYXk6IHRoaXMucHJldmlld0xhYmVsLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuaW5saW5lUHJldmlld1RlbXBsYXRlLFxyXG4gICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfVxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgZmlsZU5hbWVDb2x1bW4gPSB7IGtleTogXCJGaWxlTmFtZVwiLCBkaXNwbGF5OiB0aGlzLmZpbGVOYW1lTGFiZWwgfTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93SW5saW5lUHJldmlldykge1xyXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzQ29sdW1ucy5wdXNoKGlubGluZVByZXZpZXdDb2x1bW4pO1xyXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzQ29sdW1ucy5wdXNoKGZpbGVOYW1lQ29sdW1uKTtcclxuICAgICAgdGhpcy5hdHRhY2htZW50c0NvbHVtbnMucHVzaChkb3dubG9hZENvbHVtbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzQ29sdW1ucy5wdXNoKGRvd25sb2FkQ29sdW1uKTtcclxuICAgICAgdGhpcy5hdHRhY2htZW50c0NvbHVtbnMucHVzaChmaWxlTmFtZUNvbHVtbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbGltaW5hIHVuIGFsbGVnYXRvIGVsaW1pbmFuZG8gYW5jaGUgaWwgZmlsZSBwcmVzZW50ZSBuZWxsbyBzdG9yYWdlIGRpIGFyY2hpdmlhemlvbmUgdXRpbGl6emF0byAoQVdTIG8gY2FydGVsbGEgcHJvZ2V0dG8pXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgSUF0dGFjaG1lbnREVE8gZGEgY2FuY2VsbGFyZVxyXG4gICAqL1xyXG4gIGRlbGV0ZUF0dGFjaG1lbnQoZWxlbWVudDogSUF0dGFjaG1lbnREVE8pIHtcclxuICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkNvbmZpcm0odGhpcy5kZWxldGVEaWFsb2dNZXNzYWdlLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQXR0YWNobWVudEZyb21MaXN0KHRoaXMuYXR0YWNobWVudHNMaXN0LmluZGV4T2YoZWxlbWVudCkpO1xyXG4gICAgfSwgdHJ1ZSwgdGhpcy5kZWxldGVEaWFsb2dUaXRsZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaW11b3ZlIGwnYWxsZWdhdG8gc2VsZXppb25hdG8gZGFsbGEgbGlzdGEgXCJhdHRhY2htZW50c0xpc3RcIiBlIGludm9jYSBsJ2V2ZW50byBkaSBvdXRwdXQgY2hlIHJlc3RpdHVpc2NlIGxhIGxpc3RhIGFnZ2lvcm5hdGEuXHJcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRJbmRleCBJbmRpY2UgZGVsbCdhdHRhY2htZW50IGRhIHJpbXVvdmVyZVxyXG4gICAqL1xyXG4gIHJlbW92ZUF0dGFjaG1lbnRGcm9tTGlzdChhdHRhY2htZW50SW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5vbkRlbGV0ZUF0dGFjaG1lbnQuZW1pdCh0aGlzLmF0dGFjaG1lbnRzTGlzdFthdHRhY2htZW50SW5kZXhdKTtcclxuXHJcbiAgICB0aGlzLmF0dGFjaG1lbnRzTGlzdC5zcGxpY2UoYXR0YWNobWVudEluZGV4LCAxKTtcclxuICAgIGlmICh0aGlzLmF0dGFjaG1lbnRUYWJsZSlcclxuICAgICAgdGhpcy5hdHRhY2htZW50VGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB0aGlzLmxvY2FsRWRpdGVkQXR0YWNobWVudHMuZW1pdCh0aGlzLmF0dGFjaG1lbnRzTGlzdCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU2NhcmljYSBsJ2FsbGVnYXRvIG8gYXByZSBpbCBsaW5rXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgQWxsZWdhdG8gZGEgbW9zdHJhcmVcclxuICAgKi9cclxuICB2aWV3QXR0YWNobWVudChhdHRhY2htZW50OiBJQXR0YWNobWVudERUTykge1xyXG5cclxuICAgIGlmIChhdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkxJTkspIHtcclxuICAgICAgd2luZG93Lm9wZW4oYXR0YWNobWVudC5GaWxlUGF0aCwgJ19ibGFuaycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgJiYgYXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgJiYgYXR0YWNobWVudC5GaWxlTmFtZSkge1xyXG4gICAgICBsZXQgc291cmNlID0gYGRhdGE6JHthdHRhY2htZW50LkZpbGVDb250ZW50VHlwZX07YmFzZTY0LCR7YXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH1gO1xyXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgIGxpbmsuaHJlZiA9IHNvdXJjZTtcclxuICAgICAgbGluay5kb3dubG9hZCA9IGAke2F0dGFjaG1lbnQuRmlsZU5hbWV9YFxyXG4gICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRvd25sb2FkQXR0YWNobWVudC5lbWl0KGF0dGFjaG1lbnQpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpZGVmaW5pc2NlIGwnaWNvbmEgZGEgbW9zdHJhcmUgbmVsbGEgY29sb25uYSBkZWxsJ2VxcC10YWJsZSBwZXIgb2duaSBmaWxlLlxyXG4gICAqIEwnaWNvbmEgdmFyaWEgaW4gYmFzZSBhbGwnZXN0ZW5zaW9uZSBkZWwgZmlsZVxyXG4gICAqIEBwYXJhbSBhdHRhY2htZW50IFxyXG4gICAqL1xyXG4gIGdldEF0dGFjaG1lbnRJY29uKGF0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPKSB7XHJcbiAgICBpZiAoYXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LKVxyXG4gICAgICByZXR1cm4gXCJmYXMgZmEtbGlua1wiO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gQXR0YWNobWVudEhlbHBlclNlcnZpY2UuZ2V0SWNvbkZyb21GaWxlRXh0ZW5zaW9uZShhdHRhY2htZW50LkZpbGVFeHRlbnNpb24pO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcmUgbGEgbW9kYWxlIHBlciBsYSBkZWZpbml6aW9uZSBkZWkgcGFyYW1ldHJpIGRlbCBudW92byBmaWxlXHJcbiAgICovXHJcbiAgb3Blbk1vZGFsQWRkQXR0YWNobWVudChhdHRhY2htZW50VHlwZTogQXR0YWNobWVudFR5cGUpIHtcclxuXHJcbiAgICAvL1NlIMOoIHN0YXRvIHJpY2hpZXN0byBpbCBjYXJpY2FtZW50byBkaSB1biBMSU5LIG8gw6ggaW1wb3N0YXRvIGlsIGNhcmljYW1lbnRvIGRpIEZJTEUgU0lOR09MTyBhbGxvcmEgYXByZSBsYSBtb2RhbGUgcGVyXHJcbiAgICAvL2lsIGNhcmljYW1lbnRvIHNpbmdvbG8gZGVsIGZpbGUgYWx0cmltZW50aSBhcHJlIHF1ZWxsYSBwZXIgaWwgY2FyaWNhbWVudG8gbXVsdGlwbG9cclxuICAgIC8vIGlmIChhdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LIHx8IChhdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5GSUxFICYmIHRoaXMubG9hZE11bHRpcGxlRmlsZXMgIT0gdHJ1ZSkpIHtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudCA9IHt9IGFzIElBdHRhY2htZW50RFRPO1xyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50LklzSW1hZ2UgPSBmYWxzZTtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnRUeXBlO1xyXG4gICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG4gICAgaWYoYXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuTElOSylcclxuICAgICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzLnB1c2godGhpcy5uZXdBdHRhY2htZW50KTtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZUF0dGFjaG1lbnRGb3JtKCk7XHJcblxyXG4gICAgLy9BcHJlIGxhIG1vZGFsZVxyXG4gICAgdGhpcy5kaWFsb2ZSZWZBZGRBdHRhY2htZW50ID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0FkZEF0dGFjaG1lbnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6ICc2MCUnLFxyXG4gICAgICBtYXhIZWlnaHQ6ICc4MCUnXHJcbiAgICB9KTtcclxuICAgXHJcblxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQXR0YWNobWVudEZvcm0oKSB7XHJcbiAgICAvL0NyZWEgbGEgZm9ybSBwZXIgbGEgdmFsaWRhemlvbmUgZGVpIGNhbXBpXHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIHR5cGU6IFt0aGlzLm5ld0F0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBuYW1lOiBbdGhpcy5uZXdBdHRhY2htZW50LkZpbGVOYW1lXSxcclxuICAgICAgcGF0aDogW3RoaXMubmV3QXR0YWNobWVudC5GaWxlUGF0aF0sXHJcbiAgICAgIGN1c3RvbUhlaWdodDogW3RoaXMuY3VzdG9tSGVpZ2h0XSxcclxuICAgICAgY3VzdG9tV2lkdGg6IFt0aGlzLmN1c3RvbVdpZHRoXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZShlbWl0Q2xvc2VFdmVudCA9IHRydWUpIHtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudCA9IHt9IGFzIElBdHRhY2htZW50RFRPO1xyXG4gICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG4gICAgdGhpcy5hYm9ydEZpbGUoKTtcclxuICAgIGlmICh0aGlzLm5ld0F0dGFjaG1lbnRGb3JtKVxyXG4gICAgICB0aGlzLm5ld0F0dGFjaG1lbnRGb3JtLnJlc2V0KCk7XHJcblxyXG4gICAgdGhpcy5kaWFsb2ZSZWZBZGRBdHRhY2htZW50LmNsb3NlKCk7XHJcblxyXG5cclxuICAgIGlmKGVtaXRDbG9zZUV2ZW50ID09IHRydWUgJiYgdGhpcy5hYm9ydEFkZEF0dGFjaG1lbnQpXHJcbiAgICAgIHRoaXMuYWJvcnRBZGRBdHRhY2htZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluIGJhc2UgYWwgdGlwbyBkaSBhbGxlZ2F0byBjb250cm9sbGEgc2UgZGlzYWJpbGl0YXJlIG8gbWVubyBpbCBwdWxzYW50ZSBwZXIgc2FsdmFyZS5cclxuICAgKiBGdW56aW9uZSB1c2F0YSBuZWwgW2Rpc2FibGVdIGRlbCBwdWxzYW50ZSBcIlNhbHZhXCIgZGVsIGRpYWxvZyBwZXIgbCdhZ2dpdW50YSBkaSB1biBhbGxlZ2F0by5cclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBkaXNhYmxlU2F2ZSgpIHtcclxuICAgIGlmICh0aGlzLmxvYWRNdWx0aXBsZUZpbGVzICE9IHRydWUpIHtcclxuICAgICAgaWYgKHRoaXMubmV3QXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5GSUxFKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZVBhdGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzLmZpbHRlcihwID0+IChwLkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUgJiYgIXAuRmlsZURhdGFCYXNlNjQpIHx8IChwLkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkxJTksgJiYgIXAuRmlsZVBhdGgpKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGNvbmZpcm1BZGRBdHRhY2htZW50KCkge1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRNdWx0aXBsZUZpbGVzICE9IHRydWUpIHtcclxuICAgICAgaWYgKHRoaXMubmV3QXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LICYmICF0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZU5hbWUpXHJcbiAgICAgICAgdGhpcy5uZXdBdHRhY2htZW50LkZpbGVOYW1lID0gdGhpcy5uZXdBdHRhY2htZW50LkZpbGVQYXRoO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNMaXN0ID09IG51bGwpXHJcbiAgICAgICAgdGhpcy5hdHRhY2htZW50c0xpc3QgPSBuZXcgQXJyYXk8SUF0dGFjaG1lbnREVE8+KCk7XHJcblxyXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzTGlzdC5wdXNoKHRoaXMubmV3QXR0YWNobWVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyA9PSBudWxsIHx8IHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cy5sZW5ndGggPT0gMClcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c0xpc3QgPT0gbnVsbClcclxuICAgICAgICB0aGlzLmF0dGFjaG1lbnRzTGlzdCA9IG5ldyBBcnJheTxJQXR0YWNobWVudERUTz4oKTtcclxuXHJcbiAgICAgIHRoaXMuYXR0YWNobWVudHNMaXN0ID0gdGhpcy5hdHRhY2htZW50c0xpc3QuY29uY2F0KHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXR0YWNobWVudFRhYmxlKVxyXG4gICAgICB0aGlzLmF0dGFjaG1lbnRUYWJsZS5yZWxvYWREYXRhdGFibGUoKTtcclxuXHJcbiAgICB0aGlzLmxvY2FsRWRpdGVkQXR0YWNobWVudHMuZW1pdCh0aGlzLmF0dGFjaG1lbnRzTGlzdCk7XHJcbiAgICB0aGlzLmNsb3NlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcmUgaWwgZGlhbG9nIHBlciBsJ2FudGVwcmltYSBkZWxsJ2FsbGVnYXRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSByb3cgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgYXN5bmMgb3BlblByZXZpZXdEaWFsb2cocm93OiBJQXR0YWNobWVudERUTykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJvdykpO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5GSUxFKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUuc3RhcnRzV2l0aChcInZpZGVvXCIpKSB7XHJcbiAgICAgICAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UuV2FybmluZyh0aGlzLnZpZGVvUHJldmlld0Vycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVDb250ZW50VHlwZS5zdGFydHNXaXRoKFwiYXVkaW9cIikpIHtcclxuICAgICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5XYXJuaW5nKHRoaXMuYXVkaW9QcmV2aWV3RXJyb3JNZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5nZXRBdHRhY2htZW50RW5kcG9pbnQgJiYgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuSXNJbWFnZSAmJiAhdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRBdHRhY2htZW50QnlJRCgpXHJcbiAgICAgICAgLnRoZW4oKHJlcykgPT4geyB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IHJlcy5GaWxlRGF0YUJhc2U2NDsgfSlcclxuICAgICAgICAuY2F0Y2goKGVycikgPT4geyBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5FcnJvcihlcnIpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuTElOSykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5UcnVzdGVkVXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVQYXRoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuSXNJbWFnZSAmJiAhdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgJiYgIXRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVUaHVtYm5haWxCYXNlNjQpIHtcclxuICAgICAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UuSW5mbyhcIkltcG9zc2liaWxlIGFwcmlyZSBsJ2FudGVwcmltYSBkZWxsJ2FsbGVnYXRvLCBmaWxlIG1hbmNhbnRlLlwiKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5Jc0ltYWdlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlUGF0aCAmJiB0aGlzLnByb2R1Y3Rpb25CYXNlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuVHJ1c3RlZFVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChcclxuICAgICAgICAgIFwiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZ3ZpZXc/dXJsPVwiICtcclxuICAgICAgICAgIHRoaXMucHJvZHVjdGlvbkJhc2VVcmwgK1xyXG4gICAgICAgICAgXCIvXCIgK1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZVBhdGggK1xyXG4gICAgICAgICAgXCImZW1iZWRkZWQ9dHJ1ZVwiXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5JbmZvKFwiSW1wb3NzaWJpbGUgYXByaXJlIGwnYW50ZXByaW1hIGRlbCBkb2N1bWVudG8hXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dQcmV2aWV3LCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEF0dGFjaG1lbnRCeUlEKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElBdHRhY2htZW50RFRPPih0aGlzLmdldEF0dGFjaG1lbnRFbmRwb2ludCwgdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdlc3Rpb25lIGNhcmljYW1lbnRvIGZpbGVcclxuXHJcbiAgLyoqIFxyXG4gICAqIEV2ZW50byBzY2F0ZW5hdG8gYWxsYSBzZWxlemlvbmUgZGVsIGZpbGUgKG8gZGVpIGZpbGUpLlxyXG4gICAqIFNlIGlsIGNhcmljYW1lbnRvIMOoIFNJTkdPTE8gbyBzZSBjb211bnF1ZSDDqCBzdGF0byBzZWxlemlvbmF0byB1biBzb2xvIGZpbGUgYWxsb3JhIHNpIG9jY3VwYSBkaSBjb250cm9sbGFyZSBzZSBzaSB0cmF0dGEgZGkgdW4gaW1tYWdpbmUgaW4gbW9kbyBkYVxyXG4gICAqIG1vc3RyYXJlIGxlIGZ1bnppb25hbGl0w6AgZGVsIGNyb3BwaWUgKHBlciByaXRhZ2xpYXJlIGwnaW1tYWdpbmUpIG9wcHVyZSBuby5cclxuICAgKiBTZSBpbCBmaWxlIGNhcmljYXRvIG5vbiDDqCB1biBpbW1hZ2luZSBhbGxvcmEgZ2VuZXJhIGRpcmV0dGFtZW50ZSBpbCBiYXNlNjQgZSBsbyBhc3NvY2lhIGFsbCdhbGxlZ2F0byBkYSBzYWx2YXJlLlxyXG4gICAqIFNlIGludmVjZSBpbCBjYXJpY2FtZW50byBkZWkgZmlsZSDDqCBNVUxUSVBMTyBlIHNvbm8gcHJlc2VudGkgcGnDuSBmaWxlIGFsbG9yYSBlc2VndWUgbGUgc3Rlc3NlIG9wZXJhemlvbmkgaWdub3JhbmRvIHBlcsOyIGlsIGNvbnRybGxvXHJcbiAgICogaW1tYWdpbmUgcGVyIGlsIGNyb3BwaWUgKGluIGNhc28gZGkgY2FyaWNhbWVudG8gbXVsdGlwbG8gbGUgZnVuemlvbmFsaXTDoCBkZWwgY3JvcHBpZSBzb25vIGRpc2FiaWxpdGF0ZSkuXHJcbiAgICovXHJcbiAgYXN5bmMgb25GaWxlSW5wdXRDaGFuZ2UoZXZlbnQpIHtcclxuICAgIHRoaXMuc2hvd0Nyb3BJbWFnZSA9IGZhbHNlO1xyXG5cclxuICAgIC8vU2Ugw6ggc3RhdG8gcmljaGllc3RvIGlsIGNhcmljYW1lbnRvIFNJTkdPTE8gb3BwdXJlIHNlIGlsIGNhcmljYW1lbnRvIMOoIE1VTFRJUExPIG1hIMOoIHN0YXRvIHNlbGV6aW9uYXRvIHVuIHNvbG8gZmlsZVxyXG4gICAgLy9hbGxvcmEgdmVyaWZpY2Egc2UgaWwgZmlsZSDDqCB1biBpbW1hZ2luZSAocGVyIG1vc3RyYXJlIGlsIENST1BQSUUpXHJcbiAgICBpZiAoWy4uLmV2ZW50LnRhcmdldC5maWxlc10ubGVuZ3RoID09IDEgfHwgdGhpcy5sb2FkTXVsdGlwbGVGaWxlcyAhPSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBldmVudC50YXJnZXQuZmlsZXM7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGUpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgLy9NZW1vcml6emEgaSBkYXRpIHBlciBsJ2FsbGVnYXRvICAgICAgICBcclxuICAgICAgdGhpcy5uZXdBdHRhY2htZW50ID0gYXdhaXQgdGhpcy5jcmVhdGVBdHRhY2htZW50RnJvbVVwbG9hZGVkRmlsZSh0aGlzLnNlbGVjdGVkRmlsZSwgZmFsc2UpO1xyXG4gICAgICB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMgPSBuZXcgQXJyYXk8SUF0dGFjaG1lbnREVE8+KCk7XHJcbiAgICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cy5wdXNoKHRoaXMubmV3QXR0YWNobWVudCk7XHJcblxyXG4gICAgICAvL1NlIMOoIHN0YXRhIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBkZWxsZSBzb2xlIGltbWFnaW5pIG1hIHBlciBlcnJvcmUgw6ggc3RhdG8gc2VsZXppb25hdG8gdW4gZmlsZSBjaGUgbm9uIMOoIHVuIGltbWFnaW5lXHJcbiAgICAgIGxldCBjaGVja09ubHlJbWFnZSA9IHRoaXMuY2hlY2tBbGxvd09ubHlJbWFnZUZpbGUodGhpcy5uZXdBdHRhY2htZW50KTtcclxuICAgICAgaWYgKGNoZWNrT25seUltYWdlID09IGZhbHNlKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcblxyXG4gICAgICBpZiAodGhpcy5sb2FkTXVsdGlwbGVGaWxlcyA9PSB0cnVlICYmIFsuLi5ldmVudC50YXJnZXQuZmlsZXNdLmxlbmd0aCA9PSAxKVxyXG4gICAgICAgIHRoaXMuY3JlYXRlQXR0YWNobWVudEZvcm0oKTtcclxuXHJcbiAgICAgIC8vVmVyaWZpY2Egc2UgaWwgZmlsZSBjYXJpY2F0byDDqCB1bidpbW1hZ2luZSBvcHB1cmUgbm8uIFNlIMOoIHVuIGltbWFnaW5lLCBwcmltYSBkaSBjYXJpY2FybGEgbW9zdHJhIGlsIGNyb3BwaWUgcGVyIGlsIHJlc2l6ZS5cclxuICAgICAgLy9TZSBub24gw6ggdW4gaW1tYWdpbmUgYWxsb3JhIGdlbmVyYSBpbCBCYXNlNjQgXHJcbiAgICAgIGlmICh0aGlzLm5ld0F0dGFjaG1lbnQuSXNJbWFnZSA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5nZXRJbWFnZURpbWVuc2lvbnMoZXZlbnQudGFyZ2V0LmZpbGVzWzBdKVxyXG5cclxuICAgICAgICAvL01vc3RyYSBpbCBjcm9wcGllIGUgZGlzYWJpbGl0YSBsYSBmb3JtIGZpbmNow6ggbm9uIHRlcm1pbmEgbGEgbW9kaWZpY2EgZGVsbCdpbW1hZ2luZVxyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudEZvcm0uZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudEZvcm0uY29udHJvbHNbXCJjdXN0b21XaWR0aFwiXS5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLm5ld0F0dGFjaG1lbnRGb3JtLmNvbnRyb2xzW1wiY3VzdG9tSGVpZ2h0XCJdLmVuYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuc2hvd0Nyb3BJbWFnZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pbWFnZUNoYW5nZWRFdmVudCA9IGV2ZW50O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd0Nyb3BJbWFnZSA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBiYXNlNjRSZXN1bHQgPSBhd2FpdCB0aGlzLmdldEJhc2U2NEZyb21GaWxlKHRoaXMuc2VsZWN0ZWRGaWxlKTtcclxuICAgICAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSBiYXNlNjRSZXN1bHQuQmFzZTY0RmlsZTtcclxuICAgICAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlID0gYmFzZTY0UmVzdWx0LkNvbnRlbnRUeXBlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlcyB8fCB0aGlzLnNlbGVjdGVkRmlsZXMubGVuZ3RoID09IDApXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBuZXdBdHRhY2htZW50OiBJQXR0YWNobWVudERUTyA9IGF3YWl0IHRoaXMuY3JlYXRlQXR0YWNobWVudEZyb21VcGxvYWRlZEZpbGUodGhpcy5zZWxlY3RlZEZpbGVzW2ldLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLy9TZSDDqCBzdGF0YSByaWNoaWVzdGEgbGEgZ2VzdGlvbmUgZGVsbGUgc29sZSBpbW1hZ2luaSBtYSBwZXIgZXJyb3JlIMOoIHN0YXRvIHNlbGV6aW9uYXRvIHVuIGZpbGUgY2hlIG5vbiDDqCB1biBpbW1hZ2luZVxyXG4gICAgICAgIGxldCBjaGVja09ubHlJbWFnZSA9IHRoaXMuY2hlY2tBbGxvd09ubHlJbWFnZUZpbGUobmV3QXR0YWNobWVudCk7XHJcbiAgICAgICAgaWYgKGNoZWNrT25seUltYWdlID09IGZhbHNlKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMucHVzaChuZXdBdHRhY2htZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBwYXJ0aXJlIGRhbCBGSUxFIHJpY2V2dXRvIGluIGlucHV0IHJpY29zdHJ1aXNjZSBsJ29nZ2V0dG8gSUF0dGFjaG1lbnREVE8gZSBsbyByZXN0aXR1aXNjZS5cclxuICAgKiBTZSBpbCBwYXJhbWV0cm8gZ2V0QmFzZTY0IHZpZW5lIHBhc3NhdG8gYSBUUlVFIGFsbG9yYSwgc2VtcHJlIGEgcGFydGlyZSBkYWwgZmlsZSxnZW5lcmEgaWwgYmFzZTY0IGUgXHJcbiAgICogcmljYXZhIGlsIENvbnRlbnRUeXBlIGRhIGFzc29jaWFyZSBhbGwnb2dnZXR0byBJQXR0YWNobWVudERUTyBkYSByZXN0aXR1aXJlXHJcbiAgICogQHBhcmFtIGN1cnJlbnRGaWxlIE9nZ2V0dG8gRklMRSBkYSBwcm9jZXNzYXJlXHJcbiAgICogQHBhcmFtIGdldEJhc2U2NCBTZSBUUlVFIGFsbG9yYSBjYWxjb2xhIGJhc2U2NCBlIENvbnRlbnRUeXBlIGRlbCBmaWxlIHBhc3NhdG8gaW4gaW5wdXRcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBvZ2dldHRvIGRpIHRpcG8gSUF0dGFjaG1lbnREVE9cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUF0dGFjaG1lbnRGcm9tVXBsb2FkZWRGaWxlKGN1cnJlbnRGaWxlOiBGaWxlLCBnZXRCYXNlNjQ6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxJQXR0YWNobWVudERUTz4ge1xyXG4gICAgbGV0IG5ld0F0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPID0ge30gYXMgSUF0dGFjaG1lbnREVE87XHJcblxyXG4gICAgLy9NZW1vcml6emEgaSBkYXRpIHBlciBsJ2FsbGVnYXRvICAgICAgICBcclxuICAgIG5ld0F0dGFjaG1lbnQuQXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZS5GSUxFO1xyXG4gICAgbmV3QXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgPSBjdXJyZW50RmlsZS50eXBlO1xyXG4gICAgbmV3QXR0YWNobWVudC5GaWxlTmFtZSA9IGN1cnJlbnRGaWxlLm5hbWU7XHJcbiAgICBuZXdBdHRhY2htZW50LkZpbGVFeHRlbnNpb24gPSBjdXJyZW50RmlsZS5uYW1lLnN1YnN0cihjdXJyZW50RmlsZS5uYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcclxuICAgIG5ld0F0dGFjaG1lbnQuSXNJbWFnZSA9IEF0dGFjaG1lbnRIZWxwZXJTZXJ2aWNlLmNoZWNrSW1hZ2VGcm9tTWltZVR5cGUoY3VycmVudEZpbGUudHlwZSk7XHJcblxyXG4gICAgaWYgKGdldEJhc2U2NCA9PSB0cnVlKSB7XHJcbiAgICAgIGxldCBiYXNlNjRSZXN1bHQgPSBhd2FpdCB0aGlzLmdldEJhc2U2NEZyb21GaWxlKGN1cnJlbnRGaWxlKTtcclxuICAgICAgbmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IGJhc2U2NFJlc3VsdC5CYXNlNjRGaWxlO1xyXG4gICAgICBuZXdBdHRhY2htZW50LkZpbGVDb250ZW50VHlwZSA9IGJhc2U2NFJlc3VsdC5Db250ZW50VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3QXR0YWNobWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgcGFydGlyZSBkYWwgZmlsZSBwYXNzYXRvIGluIGlucHV0IHJlc3RpdHVpc2NlIHVuIG9nZ2V0dG9cclxuICAgKiBjb250ZW5lbnRlIGlsIGJhc2U2NCBkZWwgZmlsZSBlIGlsIHN1byBjb250ZW50VHlwZVxyXG4gICAqIEBwYXJhbSBjdXJyZW50RmlsZSBPZ2dldHRvIEZpbGUgZGEgY3VpIGVzdHJhcG9sYXJlIGJhc2U2NCBlIGNvbnRlbnRUeXBlXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW4gb2dnZXR0byBhdmVudGUgbGUgcHJvcHJpZXTDoCBCYXNlNjRGaWxlIGUgQ29udGVudFR5cGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGdldEJhc2U2NEZyb21GaWxlKGN1cnJlbnRGaWxlOiBGaWxlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGxldCBiYXNlNjRGaWxlID0gYXdhaXQgdG9CYXNlNjQoY3VycmVudEZpbGUpO1xyXG4gICAgbGV0IGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKGJhc2U2NEZpbGUpIHtcclxuICAgICAgLy8gTG9yaXMgMjAvMDEvMjAyMjogUFJPQkxFTUEgLSBRdWFuZG8gZXNlZ3VvIGwndXBsb2FkIGRpIHVuIGZpbGUgLnNxbCBub24gdmllbmUgc2FsdmF0by9zY2FyaWNhdG8gY29ycmV0dGFtZW50ZS5cclxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgUXVlc3RvIHN1Y2NlZGUgcGVyY2jDqCBub24gdmllbmUgcG9wb2xhdG8gaWwgRmlsZUNvbnRlbnRUeXBlLiBQZXIgcmlzb2x2ZXJlIGlsIHByb2JsZW1hXHJcbiAgICAgIC8vICAgICAgICAgICAgICAgICAgIGZhY2NpbyB1biBjb250cm9sbG8gZSBzZSBub24gZXNpc3RlIGlsIEZpbGVDb250ZW50VHlwZSBhbGxvcmEgbG8gcmVjdXBlcm8gZGFsIGJhc2U2NCBvdHRlbnV0by5cclxuICAgICAgY29udGVudFR5cGUgPSBiYXNlNjRGaWxlLnNwbGl0KFwiLFwiKVswXS5zcGxpdChcIjpcIilbMV0uc3BsaXQoXCI7XCIpWzBdO1xyXG4gICAgICAvLyBVbiBhbHRybyBtZXRvZG8gcGVyIGxlZ2dlcmUgaWwgY2NvbnRlbnQgdHlwZSBkZWwgZmlsZSDDqCB0cmFtaXRlIHVuYSByZWd1bGFyIGV4cHJlc3Npb246XHJcbiAgICAgIGJhc2U2NEZpbGUgPSBiYXNlNjRGaWxlLnNwbGl0KFwiLFwiKVsxXTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBCYXNlNjRGaWxlOiBiYXNlNjRGaWxlLFxyXG4gICAgICBDb250ZW50VHlwZTogY29udGVudFR5cGVcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbGxhIHNlIGlsIGZpbGUgY2hlIHNpIHN0YSBjYXJpY2FuZG8gw6ggc3VwcG9ydGF0byBkYWwgc2lzdGVtYS5cclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBwcml2YXRlIGNoZWNrQWNjZXB0ZWRGaWxlcygpOiBib29sZWFuIHtcclxuICAgIGlmICgodGhpcy5sb2FkTXVsdGlwbGVGaWxlcyAhPSB0cnVlICYmIHRoaXMuc2VsZWN0ZWRGaWxlLnR5cGUuc3RhcnRzV2l0aChcInZpZGVvXCIpKVxyXG4gICAgICB8fCAodGhpcy5sb2FkTXVsdGlwbGVGaWxlcyA9PSB0cnVlICYmIFsuLi50aGlzLnNlbGVjdGVkRmlsZXNdLmZpbHRlcihwID0+IHAudHlwZS5zdGFydHNXaXRoKFwidmlkZW9cIikpLmxlbmd0aCA+IDApKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRGaWxlVHlwZXMgPT0gXCIqXCIpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIC8vVmVyaWZpY2EgY2hlIGkgdGlwaSBkZWwgZmlsZSAobyBkZWkgZmlsZSkgY2FyaWNhdGkgc2lhbm8gY29lcmVudGkgY29uIHF1ZWxsaSBhY2NldHRhdGkgZGFsbGEgZGlyZXR0aXZhXHJcbiAgICBsZXQgYWNjZXB0ZWQ6IGJvb2xlYW4gPSB0cnVlXHJcbiAgICBpZiAodGhpcy5sb2FkTXVsdGlwbGVGaWxlcyAhPSB0cnVlKVxyXG4gICAgICBhY2NlcHRlZCA9IHRoaXMuYWNjZXB0ZWRGaWxlVHlwZXMuaW5jbHVkZXModGhpcy5zZWxlY3RlZEZpbGUudHlwZSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHVwbG9hZGVkRmlsZVR5cGVzOiBzdHJpbmdbXSA9IFsuLi50aGlzLnNlbGVjdGVkRmlsZXNdLm1hcChwID0+IHAudHlwZSk7XHJcbiAgICAgIHVwbG9hZGVkRmlsZVR5cGVzLmZvckVhY2godHlwZSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkRmlsZVR5cGVzLmluY2x1ZGVzKHR5cGUpKVxyXG4gICAgICAgICAgYWNjZXB0ZWQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9RdWVzdG8gY29udHJvbGxvIHBlcm1ldHRlIGRpIGdlc3RpcmUgbGUgY2FzaXN0aWNoZSBwZXIgY3VpIHZlbmdvbm8gaW5kaWNhdGkgY29tZSB0aXBpIHZhbGlkaSwgYWQgZXNlbXBpbywgJ2ltYWdlLyonXHJcbiAgICBpZiAoIWFjY2VwdGVkICYmIHRoaXMubG9hZE11bHRpcGxlRmlsZXMgIT0gdHJ1ZSkge1xyXG4gICAgICBmb3IgKGxldCB0IG9mIHRoaXMuYWNjZXB0ZWRGaWxlVHlwZXMuc3BsaXQoXCIsXCIpLmZpbHRlcih0ID0+IHQuaW5jbHVkZXMoXCIqXCIpKSkge1xyXG4gICAgICAgIGFjY2VwdGVkID0gdGhpcy5zZWxlY3RlZEZpbGUudHlwZS5zdGFydHNXaXRoKHQuc3BsaXQoXCIqXCIpWzBdKTtcclxuICAgICAgICBpZiAoYWNjZXB0ZWQpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjY2VwdGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2UgZXFwLWF0dGFjaG1lbnRzIMOoIHN0YXRhIGNvbmZpZ3VyYXRhIHBlciBpbCBjYXJpY2FtZW50byBkZWxsZSBzb2xlIGltbWFnaW5pIGFsbG9yYSB2ZXJpZmljYSBjaGUgaWwgZmlsZSBwYXNzYXRvIGluXHJcbiAgICogaW5wdXQgc2lhIGVmZmV0dGl2YW1lbnRlIHVuIGltbWFnaW5lIG8gbm8uXHJcbiAgICogU2UgaWwgY29udHJvbGxvIHZhIGEgYnVvbiBmaW5lIHJlc3RpdHVpc2NlIFRSVUUgYWx0cmltZW50aSBtb3N0cmEgdW4gbWVzc2FnZ2lvIGQnZXJyb3JlIGUgcmVzdGl0dWlzY2UgRkFMU0VcclxuICAgKi9cclxuICBwcml2YXRlIGNoZWNrQWxsb3dPbmx5SW1hZ2VGaWxlKG5ld0F0dGFjaG1lbnQpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmFsbG93T25seUltYWdlcyA9PSB0cnVlICYmIG5ld0F0dGFjaG1lbnQuSXNJbWFnZSAhPSB0cnVlKSB7XHJcbiAgICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkVycm9yKHRoaXMubm9JbWFnZVNlbGVjdGVkRXJyb3JNZXNzYWdlKTtcclxuICAgICAgdGhpcy5hYm9ydEZpbGUoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5jaGVja0FjY2VwdGVkRmlsZXMoKSkge1xyXG4gICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5FcnJvcih0aGlzLndyb25nVHlwZVNlbGVjdGVkRXJyb3JNZXNzYWdlKTtcclxuICAgICAgdGhpcy5hYm9ydEZpbGUoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VEaW1lbnNpb25zKGltZzogYW55KSB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1hZ2Uuc3JjID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICBpbWFnZS5vbmxvYWQgPSBycyA9PiB7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEhlaWdodCA9IHJzLmN1cnJlbnRUYXJnZXRbJ2hlaWdodCddO1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxXaWR0aCA9IHJzLmN1cnJlbnRUYXJnZXRbJ3dpZHRoJ107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9yaWdpbmFsV2lkdGggPiAxMjgwKSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbVdpZHRoID0gMTI4MDtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tSGVpZ2h0ID0gTWF0aC5yb3VuZCgoMTI4MCAqIHRoaXMub3JpZ2luYWxIZWlnaHQpIC8gdGhpcy5vcmlnaW5hbFdpZHRoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21IZWlnaHQgPSBycy5jdXJyZW50VGFyZ2V0WydoZWlnaHQnXTtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tV2lkdGggPSBycy5jdXJyZW50VGFyZ2V0Wyd3aWR0aCddO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpbWcpO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZU9yaWdpbmFsRGltZW5zaW9ucygpIHtcclxuICAgIHRoaXMuY3VzdG9tV2lkdGggPSB0aGlzLm9yaWdpbmFsV2lkdGg7XHJcbiAgICB0aGlzLmN1c3RvbUhlaWdodCA9IHRoaXMub3JpZ2luYWxIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBvbkRpbWVuc2lvbnNDaGFuZ2UoZGltZW5zaW9uOiBzdHJpbmcpIHtcclxuICAgIGlmIChkaW1lbnNpb24gPT0gXCJIXCIpIHtcclxuICAgICAgdGhpcy5jdXN0b21XaWR0aCA9IE1hdGgucm91bmQoKHRoaXMuY3VzdG9tSGVpZ2h0ICogdGhpcy5vcmlnaW5hbFdpZHRoKSAvIHRoaXMub3JpZ2luYWxIZWlnaHQpO1xyXG4gICAgfSBlbHNlIGlmIChkaW1lbnNpb24gPT0gXCJXXCIpIHtcclxuICAgICAgdGhpcy5jdXN0b21IZWlnaHQgPSBNYXRoLnJvdW5kKCh0aGlzLmN1c3RvbVdpZHRoICogdGhpcy5vcmlnaW5hbEhlaWdodCkgLyB0aGlzLm9yaWdpbmFsV2lkdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW1hZ2VDcm9wcGVkKGV2ZW50OiBJbWFnZUNyb3BwZWRFdmVudCkge1xyXG4gICAgdGhpcy5jcm9wcGVkSW1hZ2UgPSBldmVudC5iYXNlNjQ7XHJcbiAgICB0aGlzLmdldENyb3BwZWRBbmRVcGxvYWQodGhpcy5jcm9wcGVkSW1hZ2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3JvcHBlZEFuZFVwbG9hZChmaWxlKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgdmFyIGZpbGU6IGFueSA9IGJhc2U2NFRvRmlsZShmaWxlKTtcclxuXHJcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5jb21wcmVzc2lvbk9wdGlvbnM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wcmltZSBsJ2ltbWFnaW5lIHBhc3NhbmRvIGNvbWUgcGFyYW1ldHJpIGxlIG9wdGlvbnMgY3JlYXRlIG5lbGwnb2dnZXR0byBzb3ByYSwgZSBpbCBmaWxlIGRhbCByZWFkZXIgcHJpbmNpcGFsZVxyXG4gICAgICovXHJcbiAgICBpbWFnZUNvbXByZXNzaW9uKGZpbGUsIG9wdGlvbnMpLnRoZW4oKGZpbGVDb21wcmVzc2VkID0+IHtcclxuXHJcbiAgICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIC8vRmFjY2lvIGxhIHB1c2ggZGkgb2duaSBmaWxlIGFsbCdpbnRlcm5vIGRlbGwnYXJyYXkgZGkgZmlsZSBkZWxsJ2l0ZW0gZGEgbWFuZGFyZSBhbCBzZXJ2ZXJcclxuICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdFJlYWRlciA9IDxzdHJpbmc+ZmlsZVJlYWRlci5yZXN1bHQ7XHJcbiAgICAgICAgdmFyIG1hcmtlciA9ICc7YmFzZTY0LCc7XHJcbiAgICAgICAgc2VsZi5uZXdBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ID0gcmVzdWx0UmVhZGVyLnN1YnN0cmluZyhyZXN1bHRSZWFkZXIuaW5kZXhPZihtYXJrZXIpICsgbWFya2VyLmxlbmd0aCk7XHJcbiAgICAgICAgc2VsZi5zaG93Q3JvcEltYWdlID0gZmFsc2U7XHJcbiAgICAgICAgc2VsZi5uZXdBdHRhY2htZW50Rm9ybS5lbmFibGUoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlQ29tcHJlc3NlZCk7XHJcblxyXG4gICAgfSkpO1xyXG5cclxuICB9XHJcblxyXG4gIGNvbmZpcm1Dcm9wKCkge1xyXG4gICAgdGhpcy5pbWFnZUNyb3BwZXIuY3JvcCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW5udWxsYSBsYSBzZWxlemlvbmUgZGVsIGZpbGUsIHN2dW90YW5kbyBsJ2lucHV0IGUgcmVzZXR0YW5kbyB0dXR0ZSBsZSBwcm9wcmlldMOgIGRlbGwnSUF0dGFjaG1lbnREVE9cclxuICAgKi9cclxuICBhYm9ydEZpbGUoKSB7XHJcbiAgICB0aGlzLmltYWdlQ2hhbmdlZEV2ZW50ID0gJyc7XHJcbiAgICBpZiAodGhpcy5pbWFnZUlucHV0KVxyXG4gICAgICB0aGlzLmltYWdlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IG51bGw7XHJcbiAgICB0aGlzLnNob3dDcm9wSW1hZ2UgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnQuSXNJbWFnZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ID0gbnVsbDtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlTmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZUV4dGVuc2lvbiA9IG51bGw7XHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMgPSBuZXcgQXJyYXk8SUF0dGFjaG1lbnREVE8+KCk7XHJcblxyXG4gICAgdGhpcy5jdXN0b21IZWlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jdXN0b21XaWR0aCA9IG51bGw7XHJcbiAgICB0aGlzLm9yaWdpbmFsSGVpZ2h0ID0gbnVsbDtcclxuICAgIHRoaXMub3JpZ2luYWxXaWR0aCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufSJdfQ==
|
|
857
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWF0dGFjaG1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BlcXByb2plY3QvZXFwLWF0dGFjaG1lbnRzLyIsInNvdXJjZXMiOlsibGliL2VxcC1hdHRhY2htZW50cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pJLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQXFCLHFCQUFxQixFQUFrQixNQUFNLG1CQUFtQixDQUFDO0FBQzNHLE9BQU8sZ0JBQWdCLE1BQU0sMkJBQTJCLENBQUE7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBa0IsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRSxPQUFPLEVBQW1DLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO0lBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENB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QUt4RztJQUFULE1BQU0sRUFBRTttRUFBaUU7QUFLNUM7SUFBN0IsTUFBTSxDQUFDLG9CQUFvQixDQUFDO21FQUF1RjtBQUt0RjtJQUE3QixNQUFNLENBQUMsb0JBQW9CLENBQUM7bUVBQXVGO0FBU3ZGO0lBQTVCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztrRUFBd0c7QUFhaEY7SUFBbkQsU0FBUyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO29FQUF1QztBQUM5QjtJQUEzRCxTQUFTLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7NEVBQStDO0FBT3hFO0lBQWpDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQzs2REFBcUM7QUFDN0M7SUFBeEIsU0FBUyxDQUFDLFlBQVksQ0FBQzsyREFBaUI7QUFXUTtJQUFoRCxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0VBQW9DO0FBQzlCO0lBQXJELFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztzRUFBeUM7QUFDaEQ7SUFBN0MsU0FBUyxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQzs4REFBaUM7QUE3TW5FLHVCQUF1QjtJQUxuQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLG12akJBQStDOztLQUVoRCxDQUFDO0dBQ1csdUJBQXVCLENBbXlCbkM7U0FueUJZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGJhc2U2NFRvRmlsZSwgSW1hZ2VDcm9wcGVkRXZlbnQsIEltYWdlQ3JvcHBlckNvbXBvbmVudCwgSW1hZ2VUcmFuc2Zvcm0gfSBmcm9tICduZ3gtaW1hZ2UtY3JvcHBlcic7XHJcbmltcG9ydCBpbWFnZUNvbXByZXNzaW9uIGZyb20gJ2Jyb3dzZXItaW1hZ2UtY29tcHJlc3Npb24nXHJcbmltcG9ydCB7IEF0dGFjaG1lbnRUeXBlLCBJQXR0YWNobWVudERUTyB9IGZyb20gJy4vaW50ZXJmYWNlcy9JQXR0YWNobWVudCc7XHJcbmltcG9ydCB7IENvbmZpZ0NvbHVtbiwgRXFwVGFibGVDb21wb25lbnQsIFRvb2x0aXBQb3NpdGlvblR5cGUsIFR5cGVDb2x1bW4gfSBmcm9tICdAZXFwcm9qZWN0L2VxcC10YWJsZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQXR0YWNobWVudEhlbHBlclNlcnZpY2UgfSBmcm9tICcuL2hlbHBlcnMvYXR0YWNobWVudC5oZWxwZXInO1xyXG5pbXBvcnQgeyBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXFwLWF0dGFjaG1lbnQtZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSU9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvSU9wdGlvbnMnO1xyXG5cclxuY29uc3QgdG9CYXNlNjQgPSBmaWxlID0+IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdC50b1N0cmluZygpKTtcclxuICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XHJcbn0pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlcXAtYXR0YWNobWVudHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lcXAtYXR0YWNobWVudHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VxcC1hdHRhY2htZW50cy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBBdHRhY2htZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIC8vI3JlZ2lvbiBASW5wdXQgZGVsIGNvbXBvbmVudGVcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgVFJVRSBhbGxvcmEgbmFzY29uZGUgbGEgY29sb25uYSBwZXIgbGUgYXppb25pIHN1bGwnYWxsZWdhdG8gKG5lbCBjYXNvIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkuXHJcbiAgICovXHJcbiAgQElucHV0KFwiZGlzYWJsZUFjdGlvblwiKSBkaXNhYmxlQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlIFRSVUUgbW9zdHJhIGlsIHRpdG9sbyBuZWxsJ2hlYWRlciBuZWwgY2FzbyBpbiBjdWkgXCJtdWx0aXBsZUF0dGFjaG1lbnRcIiDDqCBUUlVFIChcIkVsZW5jbyBhbGxlZ2F0aVwiIGRpIGRlZmF1bHQpLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcInNob3dIZWFkZXJcIikgc2hvd0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRpdG9sbyBkYSB2aXN1YWxpenphcmUgc2UgaWwgcGFyYW1ldHJvIFwic2hvd0hlYWRlclwiIMOoIFRSVUUuIERpIGRldmF1bHQgdmllbmUgdmlzdWFsaXp6YXRvIFwiRWxlbmNvIGFsbGVnYXRpXCIuXHJcbiAgICovXHJcbiAgQElucHV0KFwiaGVhZGVyVGl0bGVcIikgaGVhZGVyVGl0bGU6IHN0cmluZyA9IFwiRWxlbmNvIGFsbGVnYXRpXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcmdlbnRlIGRhdGkgZGEgdmlzdWFsaXp6YXJlLiBOZWwgY2FzbyBzaSB2dW9sZSBnZXN0aXJlIHVuIHNpbmdvbG8gYWxsZWdhdG8gdmEgcGFzc2F0byBpbiBvZ25pIGNhc28gY29tZSBBcnJheS5cclxuICAgKi9cclxuICBASW5wdXQoXCJhdHRhY2htZW50c0xpc3RcIikgYXR0YWNobWVudHNMaXN0OiBBcnJheTxJQXR0YWNobWVudERUTz4gPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBUUlVFIG5vbiBtb3N0cmEgbGEgTWF0Q2FyZCAobmVsIGNhc28gaW4gY3VpIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkuXHJcbiAgICovXHJcbiAgQElucHV0KFwic2hvd01hdENhcmRcIikgc2hvd01hdENhcmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBGQUxTRSBhbGxvcmEgaWwgY29tcG9uZW50ZSBtb3N0cmEgc29sbyBpbCBwdWxzYW50ZSBkaSBjYXJpY2FtZW50byBkaSB1biBzaW5nb2xvIGZpbGUsIHVuYSB2b2x0YSBjYXJpY2F0byBpbCBmaWxlIGludm9jYSBsJ2V2ZW50byBkaSBvdXRwdXQgXCJsb2NhbEVkaXRlZEF0dGFjaG1lbnRzXCIuXHJcbiAgICogU2UgVFJVRSBhbGxvcmEgaWwgY29tcG9uZW50ZSBtb3N0cmEgbCdlbGVuY28gZGkgdHV0dGkgZ2xpIGFsbGVnYXRpIHJpY2V2dXRvIG5lbCBwYXJhbWV0cm8gXCJhdHRhY2htZW50c0xpc3RcIi5cclxuICAgKi9cclxuICBASW5wdXQoXCJtdWx0aXBsZUF0dGFjaG1lbnRcIikgbXVsdGlwbGVBdHRhY2htZW50OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgYXNzdW1lIGlsIHZhbG9yZSBUUlVFIGFsbG9yYSBzYXLDoCBwb3NzaWJpbGUgY2FyaWNhcmUgcGnDuSBmaWxlIHBlciB2b2x0YS4gUXVlc3RhIGZ1bnppb25hbGl0w6Agw6ggYXR0aXZhXHJcbiAgICogU09MTyBzZSBzaSBnZXN0aXNjb25vIGFsbGVnYXRpIG11bHRpcGxpLCBxdWluZGkgc2UgbCdpbnB1dCAnbXVsdGlwbGVBdHRhY2htZW50JyBhc3N1bWUgaWwgdmFsb3JlIFRSVUUsIGFsdHJpbWVudGkgw6ggc2VtcHJlIGRpc2FiaWxpdGF0YS5cclxuICAgKi9cclxuICBASW5wdXQoXCJsb2FkTXVsdGlwbGVGaWxlc1wiKSBsb2FkTXVsdGlwbGVGaWxlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmF6aW9uZSBkZWxsZSBjb2xvbm5lIGRlbGxhIGVxcC10YWJsZSBwZXIgbGEgdmlzdWFsaXp6YXppb25lIGRlZ2xpIGFsbGVnYXRpIChjYXNvIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkuXHJcbiAgICovXHJcbiAgQElucHV0KFwiYXR0YWNobWVudHNDb2x1bW5zXCIpIGF0dGFjaG1lbnRzQ29sdW1uczogQXJyYXk8Q29uZmlnQ29sdW1uPiA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9zdGEgaWwgbWVzc2FnZ2lvIGRhIHZpc3VhbGl6emFyZSBuZWwgY2FzbyBpbiBjdWkgbGEgdGFiZWxsYSBkZWdsaSBhbGxlZ2F0aSAobmVsIGNhc28gaW4gY3VpIFwibXVsdGlwbGVBdHRhY2htZW50XCIgw6ggVFJVRSkgw6ggdnVvdGEuXHJcbiAgICovXHJcbiAgQElucHV0KFwiZW1wdHlUYWJsZU1lc3NhZ2VcIikgZW1wdHlUYWJsZU1lc3NhZ2U6IHN0cmluZyA9IFwiTmVzc3VuIGRhdG8gdHJvdmF0b1wiO1xyXG5cclxuICAvKipcclxuICAgKiBTZSBUUlVFIGFsbG9yYSBwZXJtZXR0ZSBkaSBzZWxlemlvbmFyZSBzb2x0YW50byBmaWxlIGRpIHRpcG8gaW1tYWdpbmUsIGF2ZW50ZSB1bm8gZGVpIG1pbWV0eXBlXHJcbiAgICogc3BlY2lmaWNhdGkgZGVudHJvIEF0dGFjaG1lbnRIZWxwZXJTZXJ2aWNlLlxyXG4gICAqIFNlIEZBTFNFIHBlcm1ldHRlIGRpIHNlbGV6aW9uYXJlIHF1YWxzaWFzaSB0aXBvIGRpIGZpbGVcclxuICAgKi9cclxuICBASW5wdXQoXCJhbGxvd09ubHlJbWFnZXNcIikgYWxsb3dPbmx5SW1hZ2VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNwZWNpZmljYSBpIHRpcGkgZGkgZmlsZSBjaGUgw6ggcG9zc2liaWxlIGNhcmljYXJlXHJcbiAgICovXHJcbiAgQElucHV0KFwiYWNjZXB0ZWRGaWxlVHlwZXNcIikgYWNjZXB0ZWRGaWxlVHlwZXM6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogU2UgVFJVRSBkaXNhYmlsaXRhIGlsIHB1bHNhbnRlIGRpIEFnZ2l1bnRhIGFsbGVnYXRvIChhIHByZXNjaW5kZXJlIGRhbCB2YWxvcmUgZGVsIHBhcmFtZXRybyBcIm11bHRpcGxlQXR0YWNobWVudFwiKS5cclxuICAgKi9cclxuICBASW5wdXQoXCJpc0Rpc2FibGVkXCIpIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW9zdHJhL25hc2NvbmRlIGxhIGNvbG9ubmEgcGVyIHZpc3VhbGl6emFyZSBsJ2FudGVwcmltYSBkZWkgZmlsZSBuZWxsYSB0YWJlbGxhIChjYXNvIG11bHRpcGxlQXRhdGNobWVudHMgPSB0cnVlKS5cclxuICAgKi9cclxuICBASW5wdXQoXCJzaG93SW5saW5lUHJldmlld1wiKSBzaG93SW5saW5lUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdWVwcmFyZSBsJ0lBdHRhY2htZW50RFRPIGNvbXBsZXRvIGRhIHZlZGVyZSBuZWxsJ2FudGVwcmltYS4gTGEgY2hpYW1hdGEgc2Fyw6AgaW4gUE9TVCBlIG5lbCBib2R5XHJcbiAgICogY29udGVycsOgIGwnSUF0dGFjaG1lbnREVE8gc2VsZXppb25hdG8gZGFsbCd1dGVudGUuXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZXNlZ3VpdGEgc29sbyBwZXIgbCdhbnRlcHJpbWEgZGVsbGUgaW1tYWdpbmkgZXNzZW5kbyBuZWNlc3NhcmlvIGlsIGJhc2U2NCBjb21wbGV0byBkZWxsJ2ltbWFnaW5lIGEgZGltZW5zaW9uZSByZWFsZS5cclxuICAgKiBQZXIgZG9jdW1lbnRpL2xpbmsgYmFzdGEgY2hlIHNpYSBwb3BvbGF0YSBsYSBwcm9wcmlldMOgIEZpbGVQYXRoIGRpIElBdHRhY2htZW50RFRPLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcImdldEF0dGFjaG1lbnRFbmRwb2ludFwiKSBnZXRBdHRhY2htZW50RW5kcG9pbnQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhvc3RuYW1lIGRlbGwnYW1iaWVudGUgZGkgcHJvZHV6aW9uZSBkZWxsJ2FwcGxpY2F0aXZvLiBOZWNlc3NhcmlvIHBlciB2aXN1YWxpenphcmUgbCdhbnRlcHJpbWEgZGVpIGRvY3VtZW50aVxyXG4gICAqIHRyYW1pdGUgaWwgdmlld2VyIGRpIGdvb2dsZS5cclxuICAgKiBOT1RBOiBQZXIgdmlzdWFsaXp6YXJlIGwnYW50ZXByaW1hIMOoIG5lY2Vzc2FyaW8gY2hlIGxhIHByb3JpZXTDoCBGaWxlUGF0aCBkZWxsJ0lBdHRhY2htZW50RFRPIHNpYSBwb3BvbGF0YSBlIGNoZVxyXG4gICAqIHNpYSBhYmlsaXRhdG8gbCdhY2Nlc3NvIGFsbGEgY2FydGVsbGEgc3VsIHNlcnZlciB0cmFtaXRlIGhvc3RuYW1lLlxyXG4gICAqL1xyXG4gIEBJbnB1dChcInByb2R1Y3Rpb25CYXNlVXJsXCIpIHByb2R1Y3Rpb25CYXNlVXJsOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBPcHppb25pIHBlciBsYSBjb21wcmVzc2lvbmUgZGVsbGUgaW1tYWdpbmkgY2FyaWNhdGUuXHJcbiAgICovXHJcbiAgQElucHV0KFwiY29tcHJlc3Npb25PcHRpb25zXCIpIGNvbXByZXNzaW9uT3B0aW9uczogSU9wdGlvbnMgPSB7IG1heFNpemVNQjogMC41LCBtYXhXaWR0aE9ySGVpZ2h0OiAxOTIwLCB1c2VXZWJXb3JrZXI6IHRydWUgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQXJyYXkgZGkgQXR0YWNobWVudFR5cGUgY2hlIHNpIHBvc3Nvbm8gYWdnaXVuZ2VyZVxyXG4gICAqL1xyXG4gIEBJbnB1dChcImFsbG93ZWRUeXBlc1wiKSBhbGxvd2VkVHlwZXM6IEFycmF5PEF0dGFjaG1lbnRUeXBlPiA9IFtBdHRhY2htZW50VHlwZS5GSUxFLCBBdHRhY2htZW50VHlwZS5MSU5LXTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgc3RhYmlsaXJlIHNlIGxhIGVxcC10YWJsZSBjb250ZW5lbnRlIGwnZWxlbmNvIGRlZ2xpIGFsbGVnYXRpIHV0aWxpenphXHJcbiAgICogaWwgbXVsdGlsaW5ndWEgb3BwdXJlIG5vXHJcbiAgICovXHJcbiAgQElucHV0KFwiaXNFcXBUYWJsZU11bHRpTGFuZ3VhZ2VcIikgaXNFcXBUYWJsZU11bHRpTGFuZ3VhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWV0dGUgZGkgc3RhYmlsaXJlLCBpbiBjYXNvIGRpIGdlc3Rpb25lIGFsbGVnYXRpIG11bHRpcGxpLCBzZSBsYSB0YWJlbGxhIGNvbnRlbmVudGUgbCdlbGVuY28gXHJcbiAgICogZGVnbGkgYWxsZWdhdGkgZGV2ZSBlc3NlcmUgcGFnaW5hdGEgb3BwdXJlIG5vXHJcbiAgICovXHJcbiAgQElucHV0KFwidGFibGVQYWdpbmF0b3JWaXNpYmxlXCIpIHRhYmxlUGFnaW5hdG9yVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluIGNhc28gZGkgZ2VzdGlvbmUgYWxsZWdhdGkgbXVsdGlwbGksIHBlcm1ldHRlIGRpIHN0YWJpbGlyZSBsYSBkaW1lbnNpb25lIHBhZ2luYSBkaSBkZWZhdWx0IFxyXG4gICAqIHBlciBsYSB0YWJlbGxhIGNvbnRlbmVudGUgbCdlbGVuY28gZGVnbGkgYWxsZWdhdGlcclxuICAgKi9cclxuICBASW5wdXQoXCJ0YWJsZVBhZ2luYXRvclNpemVcIikgdGFibGVQYWdpbmF0b3JTaXplOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCBwZXIgZGVmaW5pcmUgbGUgbGFiZWwgZGEgdXNhcmUgbmVsIGNvbXBvbmVudGVcclxuICAgKi9cclxuICBASW5wdXQoXCJkb3dubG9hZFRvb2x0aXBQb3NpdGlvblwiKSBkb3dubG9hZFRvb2x0aXBQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uVHlwZSA9IFRvb2x0aXBQb3NpdGlvblR5cGUuQmVsb3c7XHJcbiAgQElucHV0KFwib3BlbkxpbmtMYWJlbFwiKSBvcGVuTGlua0xhYmVsOiBzdHJpbmcgPSBcIkFwcmkgbGlua1wiO1xyXG4gIEBJbnB1dChcImFkZEJ1dHRvbkxhYmVsXCIpIGFkZEJ1dHRvbkxhYmVsOiBzdHJpbmcgPSBcIkFnZ2l1bmdpXCI7XHJcbiAgQElucHV0KFwiZG93bmxvYWRMYWJlbFwiKSBkb3dubG9hZExhYmVsOiBzdHJpbmcgPSBcIkRvd25sb2FkXCI7XHJcbiAgQElucHV0KFwiZGVsZXRlTGFiZWxcIikgZGVsZXRlTGFiZWw6IHN0cmluZyA9IFwiRWxpbWluYVwiO1xyXG4gIEBJbnB1dChcImZpbGVOYW1lTGFiZWxcIikgZmlsZU5hbWVMYWJlbDogc3RyaW5nID0gXCJOb21lIGZpbGVcIjtcclxuICBASW5wdXQoXCJwcmV2aWV3TGFiZWxcIikgcHJldmlld0xhYmVsOiBzdHJpbmcgPSBcIkFudGVwcmltYVwiO1xyXG4gIEBJbnB1dChcInVwbG9hZEZpbGVMYWJlbFwiKSB1cGxvYWRGaWxlTGFiZWw6IHN0cmluZyA9IFwiQ2FyaWNhIGZpbGVcIjtcclxuICBASW5wdXQoXCJjb25maXJtTGFiZWxcIikgY29uZmlybUxhYmVsOiBzdHJpbmcgPSBcIkNvbmZlcm1hXCI7XHJcbiAgQElucHV0KFwiYWJvcnRMYWJlbFwiKSBhYm9ydExhYmVsOiBzdHJpbmcgPSBcIkFubnVsbGFcIjtcclxuICBASW5wdXQoXCJzYXZlTGFiZWxcIikgc2F2ZUxhYmVsOiBzdHJpbmcgPSBcIlNhbHZhXCI7XHJcbiAgQElucHV0KFwiZXhpdExhYmVsXCIpIGV4aXRMYWJlbDogc3RyaW5nID0gXCJFc2NpXCI7XHJcbiAgQElucHV0KFwiZXFwVGFibGVTZWFyY2hUZXh0XCIpIGVxcFRhYmxlU2VhcmNoVGV4dDogc3RyaW5nID0gXCJDZXJjYVwiO1xyXG4gIEBJbnB1dChcImRlbGV0ZURpYWxvZ1RpdGxlXCIpIGRlbGV0ZURpYWxvZ1RpdGxlOiBzdHJpbmcgPSBudWxsO1xyXG4gIEBJbnB1dChcImRlbGV0ZURpYWxvZ01lc3NhZ2VcIikgZGVsZXRlRGlhbG9nTWVzc2FnZTogc3RyaW5nID0gXCJTZWkgc2ljdXJvIGRpIHZvbGVyIGNhbmNlbGxhcmUgcXVlc3QnYWxsZWdhdG8/XCI7XHJcbiAgQElucHV0KFwibm9JbWFnZVNlbGVjdGVkRXJyb3JNZXNzYWdlXCIpIG5vSW1hZ2VTZWxlY3RlZEVycm9yTWVzc2FnZTogc3RyaW5nID0gXCJOb24gw6ggcG9zc2liaWxlIHNlbGV6aW9uYXJlIHVuIGZpbGUgY2hlIG5vbiBzaWEgdW4naW1tYWdpbmUuXCI7XHJcbiAgQElucHV0KFwid3JvbmdUeXBlU2VsZWN0ZWRFcnJvck1lc3NhZ2VcIikgd3JvbmdUeXBlU2VsZWN0ZWRFcnJvck1lc3NhZ2U6IHN0cmluZyA9IFwiTm9uIMOoIHBvc3NpYmlsZSBjYXJpY2FyZSBpbCBmaWxlIHNlbGV6aW9uYXRvLlwiO1xyXG4gIEBJbnB1dChcInZpZGVvUHJldmlld0Vycm9yTWVzc2FnZVwiKSB2aWRlb1ByZXZpZXdFcnJvck1lc3NhZ2U6IHN0cmluZyA9IFwiSW1wb3NzaWJpbGUgYXByaXJlIGwnYW50ZXByaW1hIGRpIHVuIGZpbGUgdmlkZW8uXCI7XHJcbiAgQElucHV0KFwidmlkZW9QcmV2aWV3RXJyb3JNZXNzYWdlXCIpIGF1ZGlvUHJldmlld0Vycm9yTWVzc2FnZTogc3RyaW5nID0gXCJJbXBvc3NpYmlsZSBhcHJpcmUgbCdhbnRlcHJpbWEgZGkgdW4gZmlsZSBhdWRpby5cIjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEBPdXRwdXQgZGVsIGNvbXBvbmVudGVcclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdGl0dWlzY2UgbGEgbGlzdGEgYWdnaW9ybmF0YSBkZWdsaSBhbGxlZ2F0aS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbG9jYWxFZGl0ZWRBdHRhY2htZW50czogRXZlbnRFbWl0dGVyPEFycmF5PElBdHRhY2htZW50RFRPPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElBdHRhY2htZW50RFRPPj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIHNjYXRlbmF0byBhbGxhIHByZXNzaW9uZSBkZWwgcHVsc2FudGUgRVNDSSBkZWxsYSBtb2RhbGUgZGkgY2FyaWNhbWVudG8gZmlsZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWJvcnRBZGRBdHRhY2htZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZGkgb3V0cHV0IGNoZSByZXN0aXR1aXNjZSBsJ0lBdHRhY2htZW50RFRPIHNlbGV6aW9uYXRvIHBlciBpbCBkb3dubG9hZCBuZWwgY2FzbyBGaWxlRGF0YUJhc2U2NCwgRmlsZUNvbnRlbnRUeXBlIG8gRmlsZU5hbWUgbm9uIGZvc3Nlcm8gc3BlY2lmaWNhdGkuXHJcbiAgICovXHJcbiAgQE91dHB1dChcImRvd25sb2FkQXR0YWNobWVudFwiKSBkb3dubG9hZEF0dGFjaG1lbnQ6IEV2ZW50RW1pdHRlcjxJQXR0YWNobWVudERUTz4gPSBuZXcgRXZlbnRFbWl0dGVyPElBdHRhY2htZW50RFRPPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudG8gZGkgb3V0cHV0IGNoZSByZXN0aXR1aXNjZSBsJ2VsZW1lbnRvIGVsaW1pbmF0byBwcmltYSBjaGUgcXVlc3RvIHZlbmdhIGVmZmV0dGl2YW1lbnRlIHJpc21vc3NvIGRhbGxhIGxpc3RhLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoXCJvbkRlbGV0ZUF0dGFjaG1lbnRcIikgb25EZWxldGVBdHRhY2htZW50OiBFdmVudEVtaXR0ZXI8SUF0dGFjaG1lbnREVE8+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQXR0YWNobWVudERUTz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnRvIGRpIG91dHB1dCBzY2F0ZW5hdG8gZHVyYW50ZSBsJ0FmdGVyVmlld0luaXQgZGVsIGNvbXBvbmVudGUgY2hlIHJlc3RpdHVpc2NlIGwnaXN0YW56YSBjb3JyZW50ZSBkZWwgY29tcG9uZW50ZS5cclxuICAgKiBRdWVzdG8gZXZlbnRvIGF2dmlzYSBxdWFuZG8gaWwgY29tcG9uZW50ZSDDqCBzdGF0byByZW5kZXJpenphdG8sIHV0aWxlIHBlciBlc2VtcGlvIHF1YW5kbyBzaSB2b2dsaW9ubyBhZ2dpdW5nZXJlIGRlbGxlIGNvbG9ubmUgXHJcbiAgICogYWxsYSB2aXN1YWxpenphemlvbmUgY29uIGFsbGVnYXRpIG11bHRpcGxpIGxhc2NpYW5kbyBwZXLDsiBxdWVsbGUgcHJlIGVzaXN0ZW50aS4gUXVlc3RvIHNpIHB1w7IgZmFyZSBpbnRlcnZlbmVuZG8gc3VsbGEgXHJcbiAgICogcHJvcHJpZXTDoCBcImF0dGFjaG1lbnRzQ29sdW1uc1wiIGRpIHF1ZXN0byBjb21wb25lbnRlIHRyYW1pdGUgbCdpc3RhbnphIHBhc3NhdGEgY29tZSBwYXJhbWVudHJvIG9wcHVyZSB0cmFtaXRlIFZpZXdDaGlsZCBcclxuICAgKiBkYWwgY29tcG9uZW50ZSBjaGUgbG8gb3NwaXRhLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoXCJvbkNvbXBvbmVudExvYWRlZFwiKSBvbkNvbXBvbmVudExvYWRlZDogRXZlbnRFbWl0dGVyPEVxcEF0dGFjaG1lbnRzQ29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXFwQXR0YWNobWVudHNDb21wb25lbnQ+KCk7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgZ2VzdGlvbmUgY2FyaWNhbWVudG8gbnVvdm8gYWxsZWdhdG9cclxuICBuZXdBdHRhY2htZW50OiBJQXR0YWNobWVudERUTyA9IHt9IGFzIElBdHRhY2htZW50RFRPO1xyXG4gIG5ld011bHRpcGxlQXR0YWNobWVudHM6IEFycmF5PElBdHRhY2htZW50RFRPPiA9IFtdO1xyXG4gIGRpYWxvZlJlZkFkZEF0dGFjaG1lbnQ6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICBhdHRhY2htZW50VHlwZSA9IEF0dGFjaG1lbnRUeXBlO1xyXG4gIG5ld0F0dGFjaG1lbnRGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc2VsZWN0ZWRGaWxlOiBGaWxlID0gbnVsbDtcclxuICBzZWxlY3RlZEZpbGVzOiBBcnJheTxGaWxlPiA9IG51bGw7XHJcbiAgc2hvd0Nyb3BJbWFnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0FkZEF0dGFjaG1lbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dBZGRBdHRhY2htZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0FkZE11bHRpcGxlQXR0YWNobWVudCcsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0FkZE11bHRpcGxlQXR0YWNobWVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFByb3ByaWV0w6AgcGVyIGdlc3Rpb25lIHJpZGltZW5zaW9uYW1lbnRvIGZpbGUgZGkgdGlwbyBpbWFnZVxyXG4gIGltYWdlQ2hhbmdlZEV2ZW50OiBhbnkgPSAnJztcclxuICBjcm9wcGVkSW1hZ2U6IGFueSA9ICcnO1xyXG4gIHRyYW5zZm9ybTogSW1hZ2VUcmFuc2Zvcm0gPSB7fTtcclxuICBAVmlld0NoaWxkKEltYWdlQ3JvcHBlckNvbXBvbmVudCkgaW1hZ2VDcm9wcGVyOiBJbWFnZUNyb3BwZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnaW1hZ2VJbnB1dCcpIGltYWdlSW5wdXQ6IGFueTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQXR0YWNobWVudFR5cGUgPSBBdHRhY2htZW50VHlwZTtcclxuICBzZWxlY3RlZEF0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPO1xyXG5cclxuICBvcmlnaW5hbFdpZHRoOiBudW1iZXI7XHJcbiAgb3JpZ2luYWxIZWlnaHQ6IG51bWJlcjtcclxuICBjdXN0b21XaWR0aDogbnVtYmVyO1xyXG4gIGN1c3RvbUhlaWdodDogbnVtYmVyO1xyXG5cclxuICBAVmlld0NoaWxkKCdhdHRhY2htZW50VGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgYXR0YWNobWVudFRhYmxlOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdpbmxpbmVQcmV2aWV3VGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbmxpbmVQcmV2aWV3VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZGlhbG9nUHJldmlldycsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ1ByZXZpZXc6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICAvL1NlIMOoIHN0YXRhIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBkZWxsZSBzb2xlIGltbWFnaW5pIGFsbG9yYSBpbXBvc3RhIGlsIGZpbHRybyBwZXIgbGUgZXN0ZW5zaW9uaSBwb3NzaWJpbGkgZGEgY2FyaWNhcmVcclxuICAgIGlmICghdGhpcy5hY2NlcHRlZEZpbGVUeXBlcylcclxuICAgICAgaWYgKHRoaXMuYWxsb3dPbmx5SW1hZ2VzID09IHRydWUpXHJcbiAgICAgICAgdGhpcy5hY2NlcHRlZEZpbGVUeXBlcyA9IFwiaW1hZ2UvKlwiO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5hY2NlcHRlZEZpbGVUeXBlcyA9IFwiKlwiO1xyXG5cclxuICAgIC8vIFNlIG5vbiBzb25vIHN0YXRpIHNwZWNpZmljYXRpIGkgdGlwaSBkYSBnZXN0aXJlIG1hIMOoIHN0YXRvIHBhc3NhdG8gbnVsbCBvIHVuIGFycmF5IHZ1b3RvIGltcG9zdG8gaSB0aXBpIGRpIGRlZmF1bHQuXHJcbiAgICBpZiAoIXRoaXMuYWxsb3dlZFR5cGVzIHx8IHRoaXMuYWxsb3dlZFR5cGVzLmxlbmd0aCA9PSAwKVxyXG4gICAgICB0aGlzLmFsbG93ZWRUeXBlcyA9IFtBdHRhY2htZW50VHlwZS5GSUxFLCBBdHRhY2htZW50VHlwZS5MSU5LXTtcclxuICAgIGVsc2UgaWYgKHRoaXMuYWxsb3dlZFR5cGVzLmZpbmQodCA9PiB0ICE9IEF0dGFjaG1lbnRUeXBlLkZJTEUgJiYgdCAhPSBBdHRhY2htZW50VHlwZS5MSU5LKSkge1xyXG4gICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5XYXJuaW5nKFwiQWxtZW5vIHVubyBkZWdsaSBBdHRhY2htZW50VHlwZSBzZWxlemlvbmF0aSBuZWwgcGFyYW1ldHJvIFxcXCJhbGxvd2VkVHlwZXNcXFwiIG5vbiBlc2lzdGUuXCIpXHJcbiAgICAgIHRoaXMuYWxsb3dlZFR5cGVzID0gW0F0dGFjaG1lbnRUeXBlLkZJTEUsIEF0dGFjaG1lbnRUeXBlLkxJTktdO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL1NlIMOoIHN0YXRhIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBtdWx0aXBsYSBkZWdsaSBhbGxlZ2F0aSBhbGxvcmEgY29uZmlndXJhIGwnZXFwLXRhYmxlXHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZUF0dGFjaG1lbnQgPT0gdHJ1ZSAmJiAoIXRoaXMuYXR0YWNobWVudHNDb2x1bW5zIHx8IHRoaXMuYXR0YWNobWVudHNDb2x1bW5zLmxlbmd0aCA9PSAwKSkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hdHRhY2htZW50c0xpc3QgPT0gbnVsbClcclxuICAgICAgdGhpcy5hdHRhY2htZW50c0xpc3QgPSBuZXcgQXJyYXk8SUF0dGFjaG1lbnREVE8+KCk7XHJcblxyXG4gICAgdGhpcy5jaGVja0F0dGFjaG1lbnRJbWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNvbXBvbmVudExvYWRlZC5lbWl0KHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbG9hZERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5hdHRhY2htZW50VGFibGUpXHJcbiAgICAgIHRoaXMuYXR0YWNobWVudFRhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBdHRhY2htZW50SW1hZ2UoKSB7XHJcbiAgICB0aGlzLmF0dGFjaG1lbnRzTGlzdC5mb3JFYWNoKGEgPT4ge1xyXG4gICAgICBhLklzSW1hZ2UgPSBBdHRhY2htZW50SGVscGVyU2VydmljZS5jaGVja0ltYWdlRnJvbU1pbWVUeXBlKGEuRmlsZUNvbnRlbnRUeXBlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdlc3Rpb25lIGVsZW5jbyBhbGxlZ2F0aVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmEgbGUgY29sb25uZSBwZXIgbCdlcXAtdGFibGUgbmVsIGNhc28gaW4gY3VpIGlsIHBhcmFtZXRybyBcIm11bHRpcGxlQXR0YWNobWVudHNcIiDDqCBUUlVFLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmF0dGFjaG1lbnRzQ29sdW1ucyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZUFjdGlvbiAhPSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYXR0YWNobWVudHNDb2x1bW5zLnB1c2goe1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIiwgZGlzcGxheTogXCJcIixcclxuICAgICAgICB0eXBlOiBUeXBlQ29sdW1uLk1lbnVBY3Rpb24sIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLCBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgbmFtZTogdGhpcy5kZWxldGVMYWJlbCwgaWNvbjogXCJkZWxldGVcIiwgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZUF0dGFjaG1lbnQoZWxlbWVudCkgfSxcclxuICAgICAgICBdLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBkb3dubG9hZENvbHVtbiA9IHtcclxuICAgICAga2V5OiBcImF0dGFjaG1lbnRcIiwgZGlzcGxheTogXCJcIixcclxuICAgICAgdHlwZTogVHlwZUNvbHVtbi5TaW1wbGVBY3Rpb24sIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAnJywgZm9udGF3ZXNvbWU6IHRydWUsXHJcbiAgICAgICAgICBpY29uOiAoZWxlbWVudCkgPT4geyByZXR1cm4gdGhpcy5zaG93SW5saW5lUHJldmlldyA/IChlbGVtZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUgPyBcImZhcyBmYS1jbG91ZC1kb3dubG9hZC1hbHRcIiA6IFwiZmFzIGZhLWV4dGVybmFsLWxpbmstYWx0XCIpIDogdGhpcy5nZXRBdHRhY2htZW50SWNvbihlbGVtZW50KTsgfSxcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgY29sLCBlbGVtZW50SW5kZXgpID0+IHRoaXMudmlld0F0dGFjaG1lbnQoZWxlbWVudCksXHJcbiAgICAgICAgICB0b29sdGlwOiB7IHRvb2x0aXBUZXh0OiAoZWxlbWVudCkgPT4geyByZXR1cm4gZWxlbWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5GSUxFID8gdGhpcy5kb3dubG9hZExhYmVsIDogdGhpcy5vcGVuTGlua0xhYmVsOyB9LCB0b29sdGlwUG9zaXRpb246IHRoaXMuZG93bmxvYWRUb29sdGlwUG9zaXRpb24gfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgbGV0IGlubGluZVByZXZpZXdDb2x1bW4gPSB7XHJcbiAgICAgIGtleTogXCJJbmxpbmVQcmV2aWV3XCIsIGRpc3BsYXk6IHRoaXMucHJldmlld0xhYmVsLFxyXG4gICAgICB0eXBlOiBUeXBlQ29sdW1uLkV4dGVybmFsVGVtcGxhdGUsXHJcbiAgICAgIGV4dGVybmFsVGVtcGxhdGU6IHRoaXMuaW5saW5lUHJldmlld1RlbXBsYXRlLFxyXG4gICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgMTAlXCIgfVxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgZmlsZU5hbWVDb2x1bW4gPSB7IGtleTogXCJGaWxlTmFtZVwiLCBkaXNwbGF5OiB0aGlzLmZpbGVOYW1lTGFiZWwgfTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93SW5saW5lUHJldmlldykge1xyXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzQ29sdW1ucy5wdXNoKGlubGluZVByZXZpZXdDb2x1bW4pO1xyXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzQ29sdW1ucy5wdXNoKGZpbGVOYW1lQ29sdW1uKTtcclxuICAgICAgdGhpcy5hdHRhY2htZW50c0NvbHVtbnMucHVzaChkb3dubG9hZENvbHVtbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzQ29sdW1ucy5wdXNoKGRvd25sb2FkQ29sdW1uKTtcclxuICAgICAgdGhpcy5hdHRhY2htZW50c0NvbHVtbnMucHVzaChmaWxlTmFtZUNvbHVtbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbGltaW5hIHVuIGFsbGVnYXRvIGVsaW1pbmFuZG8gYW5jaGUgaWwgZmlsZSBwcmVzZW50ZSBuZWxsbyBzdG9yYWdlIGRpIGFyY2hpdmlhemlvbmUgdXRpbGl6emF0byAoQVdTIG8gY2FydGVsbGEgcHJvZ2V0dG8pXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgSUF0dGFjaG1lbnREVE8gZGEgY2FuY2VsbGFyZVxyXG4gICAqL1xyXG4gIGRlbGV0ZUF0dGFjaG1lbnQoZWxlbWVudDogSUF0dGFjaG1lbnREVE8pIHtcclxuICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkNvbmZpcm0odGhpcy5kZWxldGVEaWFsb2dNZXNzYWdlLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQXR0YWNobWVudEZyb21MaXN0KHRoaXMuYXR0YWNobWVudHNMaXN0LmluZGV4T2YoZWxlbWVudCkpO1xyXG4gICAgfSwgdHJ1ZSwgdGhpcy5kZWxldGVEaWFsb2dUaXRsZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaW11b3ZlIGwnYWxsZWdhdG8gc2VsZXppb25hdG8gZGFsbGEgbGlzdGEgXCJhdHRhY2htZW50c0xpc3RcIiBlIGludm9jYSBsJ2V2ZW50byBkaSBvdXRwdXQgY2hlIHJlc3RpdHVpc2NlIGxhIGxpc3RhIGFnZ2lvcm5hdGEuXHJcbiAgICogQHBhcmFtIGF0dGFjaG1lbnRJbmRleCBJbmRpY2UgZGVsbCdhdHRhY2htZW50IGRhIHJpbXVvdmVyZVxyXG4gICAqL1xyXG4gIHJlbW92ZUF0dGFjaG1lbnRGcm9tTGlzdChhdHRhY2htZW50SW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5vbkRlbGV0ZUF0dGFjaG1lbnQuZW1pdCh0aGlzLmF0dGFjaG1lbnRzTGlzdFthdHRhY2htZW50SW5kZXhdKTtcclxuXHJcbiAgICB0aGlzLmF0dGFjaG1lbnRzTGlzdC5zcGxpY2UoYXR0YWNobWVudEluZGV4LCAxKTtcclxuICAgIGlmICh0aGlzLmF0dGFjaG1lbnRUYWJsZSlcclxuICAgICAgdGhpcy5hdHRhY2htZW50VGFibGUucmVsb2FkRGF0YXRhYmxlKCk7XHJcbiAgICB0aGlzLmxvY2FsRWRpdGVkQXR0YWNobWVudHMuZW1pdCh0aGlzLmF0dGFjaG1lbnRzTGlzdCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU2NhcmljYSBsJ2FsbGVnYXRvIG8gYXByZSBpbCBsaW5rXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgQWxsZWdhdG8gZGEgbW9zdHJhcmVcclxuICAgKi9cclxuICB2aWV3QXR0YWNobWVudChhdHRhY2htZW50OiBJQXR0YWNobWVudERUTykge1xyXG5cclxuICAgIGlmIChhdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkxJTkspIHtcclxuICAgICAgd2luZG93Lm9wZW4oYXR0YWNobWVudC5GaWxlUGF0aCwgJ19ibGFuaycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgJiYgYXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgJiYgYXR0YWNobWVudC5GaWxlTmFtZSkge1xyXG4gICAgICBsZXQgc291cmNlID0gYGRhdGE6JHthdHRhY2htZW50LkZpbGVDb250ZW50VHlwZX07YmFzZTY0LCR7YXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH1gO1xyXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgIGxpbmsuaHJlZiA9IHNvdXJjZTtcclxuICAgICAgbGluay5kb3dubG9hZCA9IGAke2F0dGFjaG1lbnQuRmlsZU5hbWV9YFxyXG4gICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRvd25sb2FkQXR0YWNobWVudC5lbWl0KGF0dGFjaG1lbnQpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpZGVmaW5pc2NlIGwnaWNvbmEgZGEgbW9zdHJhcmUgbmVsbGEgY29sb25uYSBkZWxsJ2VxcC10YWJsZSBwZXIgb2duaSBmaWxlLlxyXG4gICAqIEwnaWNvbmEgdmFyaWEgaW4gYmFzZSBhbGwnZXN0ZW5zaW9uZSBkZWwgZmlsZVxyXG4gICAqIEBwYXJhbSBhdHRhY2htZW50IFxyXG4gICAqL1xyXG4gIGdldEF0dGFjaG1lbnRJY29uKGF0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPKSB7XHJcbiAgICBpZiAoYXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LKVxyXG4gICAgICByZXR1cm4gXCJmYXMgZmEtbGlua1wiO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gQXR0YWNobWVudEhlbHBlclNlcnZpY2UuZ2V0SWNvbkZyb21GaWxlRXh0ZW5zaW9uZShhdHRhY2htZW50LkZpbGVFeHRlbnNpb24pO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcmUgbGEgbW9kYWxlIHBlciBsYSBkZWZpbml6aW9uZSBkZWkgcGFyYW1ldHJpIGRlbCBudW92byBmaWxlXHJcbiAgICovXHJcbiAgb3Blbk1vZGFsQWRkQXR0YWNobWVudChhdHRhY2htZW50VHlwZTogQXR0YWNobWVudFR5cGUpIHtcclxuXHJcbiAgICAvL1NlIMOoIHN0YXRvIHJpY2hpZXN0byBpbCBjYXJpY2FtZW50byBkaSB1biBMSU5LIG8gw6ggaW1wb3N0YXRvIGlsIGNhcmljYW1lbnRvIGRpIEZJTEUgU0lOR09MTyBhbGxvcmEgYXByZSBsYSBtb2RhbGUgcGVyXHJcbiAgICAvL2lsIGNhcmljYW1lbnRvIHNpbmdvbG8gZGVsIGZpbGUgYWx0cmltZW50aSBhcHJlIHF1ZWxsYSBwZXIgaWwgY2FyaWNhbWVudG8gbXVsdGlwbG9cclxuICAgIC8vIGlmIChhdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LIHx8IChhdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5GSUxFICYmIHRoaXMubG9hZE11bHRpcGxlRmlsZXMgIT0gdHJ1ZSkpIHtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudCA9IHt9IGFzIElBdHRhY2htZW50RFRPO1xyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50LklzSW1hZ2UgPSBmYWxzZTtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnRUeXBlO1xyXG4gICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG4gICAgaWYgKGF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkxJTkspXHJcbiAgICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cy5wdXNoKHRoaXMubmV3QXR0YWNobWVudCk7XHJcblxyXG4gICAgdGhpcy5jcmVhdGVBdHRhY2htZW50Rm9ybSgpO1xyXG5cclxuICAgIC8vQXByZSBsYSBtb2RhbGVcclxuICAgIHRoaXMuZGlhbG9mUmVmQWRkQXR0YWNobWVudCA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dBZGRBdHRhY2htZW50LCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAnNjAlJyxcclxuICAgICAgbWF4SGVpZ2h0OiAnODAlJ1xyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIGNyZWF0ZUF0dGFjaG1lbnRGb3JtKCkge1xyXG4gICAgLy9DcmVhIGxhIGZvcm0gcGVyIGxhIHZhbGlkYXppb25lIGRlaSBjYW1waVxyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICB0eXBlOiBbdGhpcy5uZXdBdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgbmFtZTogW3RoaXMubmV3QXR0YWNobWVudC5GaWxlTmFtZV0sXHJcbiAgICAgIHBhdGg6IFt0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZVBhdGhdLFxyXG4gICAgICBjdXN0b21IZWlnaHQ6IFt0aGlzLmN1c3RvbUhlaWdodF0sXHJcbiAgICAgIGN1c3RvbVdpZHRoOiBbdGhpcy5jdXN0b21XaWR0aF1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoZW1pdENsb3NlRXZlbnQgPSB0cnVlKSB7XHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnQgPSB7fSBhcyBJQXR0YWNobWVudERUTztcclxuICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyA9IG5ldyBBcnJheTxJQXR0YWNobWVudERUTz4oKTtcclxuICAgIHRoaXMuYWJvcnRGaWxlKCk7XHJcbiAgICBpZiAodGhpcy5uZXdBdHRhY2htZW50Rm9ybSlcclxuICAgICAgdGhpcy5uZXdBdHRhY2htZW50Rm9ybS5yZXNldCgpO1xyXG5cclxuICAgIHRoaXMuZGlhbG9mUmVmQWRkQXR0YWNobWVudC5jbG9zZSgpO1xyXG5cclxuXHJcbiAgICBpZiAoZW1pdENsb3NlRXZlbnQgPT0gdHJ1ZSAmJiB0aGlzLmFib3J0QWRkQXR0YWNobWVudClcclxuICAgICAgdGhpcy5hYm9ydEFkZEF0dGFjaG1lbnQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW4gYmFzZSBhbCB0aXBvIGRpIGFsbGVnYXRvIGNvbnRyb2xsYSBzZSBkaXNhYmlsaXRhcmUgbyBtZW5vIGlsIHB1bHNhbnRlIHBlciBzYWx2YXJlLlxyXG4gICAqIEZ1bnppb25lIHVzYXRhIG5lbCBbZGlzYWJsZV0gZGVsIHB1bHNhbnRlIFwiU2FsdmFcIiBkZWwgZGlhbG9nIHBlciBsJ2FnZ2l1bnRhIGRpIHVuIGFsbGVnYXRvLlxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGRpc2FibGVTYXZlKCkge1xyXG4gICAgaWYgKHRoaXMubG9hZE11bHRpcGxlRmlsZXMgIT0gdHJ1ZSkge1xyXG4gICAgICBpZiAodGhpcy5uZXdBdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMubmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMubmV3QXR0YWNobWVudC5GaWxlUGF0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMuZmlsdGVyKHAgPT4gKHAuQXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuRklMRSAmJiAhcC5GaWxlRGF0YUJhc2U2NCkgfHwgKHAuQXR0YWNobWVudFR5cGUgPT0gQXR0YWNobWVudFR5cGUuTElOSyAmJiAhcC5GaWxlUGF0aCkpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY29uZmlybUFkZEF0dGFjaG1lbnQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZE11bHRpcGxlRmlsZXMgIT0gdHJ1ZSkge1xyXG4gICAgICBpZiAodGhpcy5uZXdBdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkxJTksgJiYgIXRoaXMubmV3QXR0YWNobWVudC5GaWxlTmFtZSlcclxuICAgICAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZU5hbWUgPSB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZVBhdGg7XHJcblxyXG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c0xpc3QgPT0gbnVsbClcclxuICAgICAgICB0aGlzLmF0dGFjaG1lbnRzTGlzdCA9IG5ldyBBcnJheTxJQXR0YWNobWVudERUTz4oKTtcclxuXHJcbiAgICAgIHRoaXMuYXR0YWNobWVudHNMaXN0LnB1c2godGhpcy5uZXdBdHRhY2htZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzID09IG51bGwgfHwgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzTGlzdCA9PSBudWxsKVxyXG4gICAgICAgIHRoaXMuYXR0YWNobWVudHNMaXN0ID0gbmV3IEFycmF5PElBdHRhY2htZW50RFRPPigpO1xyXG5cclxuICAgICAgdGhpcy5hdHRhY2htZW50c0xpc3QgPSB0aGlzLmF0dGFjaG1lbnRzTGlzdC5jb25jYXQodGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hdHRhY2htZW50VGFibGUpXHJcbiAgICAgIHRoaXMuYXR0YWNobWVudFRhYmxlLnJlbG9hZERhdGF0YWJsZSgpO1xyXG5cclxuICAgIHRoaXMubG9jYWxFZGl0ZWRBdHRhY2htZW50cy5lbWl0KHRoaXMuYXR0YWNobWVudHNMaXN0KTtcclxuICAgIHRoaXMuY2xvc2UoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXByZSBpbCBkaWFsb2cgcGVyIGwnYW50ZXByaW1hIGRlbGwnYWxsZWdhdG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIHJvdyBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBhc3luYyBvcGVuUHJldmlld0RpYWxvZyhyb3c6IElBdHRhY2htZW50RFRPKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm93KSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkF0dGFjaG1lbnRUeXBlID09IEF0dGFjaG1lbnRUeXBlLkZJTEUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVDb250ZW50VHlwZS5zdGFydHNXaXRoKFwidmlkZW9cIikpIHtcclxuICAgICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5XYXJuaW5nKHRoaXMudmlkZW9QcmV2aWV3RXJyb3JNZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoXCJhdWRpb1wiKSkge1xyXG4gICAgICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLldhcm5pbmcodGhpcy5hdWRpb1ByZXZpZXdFcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdldEF0dGFjaG1lbnRFbmRwb2ludCAmJiB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5Jc0ltYWdlICYmICF0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCkge1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEF0dGFjaG1lbnRCeUlEKClcclxuICAgICAgICAudGhlbigocmVzKSA9PiB7IHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ID0gcmVzLkZpbGVEYXRhQmFzZTY0OyB9KVxyXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7IEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkVycm9yKGVycik7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9PSBBdHRhY2htZW50VHlwZS5MSU5LKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LlRydXN0ZWRVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZVBhdGgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5Jc0ltYWdlICYmICF0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCAmJiAhdGhpcy5zZWxlY3RlZEF0dGFjaG1lbnQuRmlsZVRodW1ibmFpbEJhc2U2NCkge1xyXG4gICAgICBFcXBBdHRhY2htZW50RGlhbG9nU2VydmljZS5JbmZvKFwiSW1wb3NzaWJpbGUgYXByaXJlIGwnYW50ZXByaW1hIGRlbGwnYWxsZWdhdG8sIGZpbGUgbWFuY2FudGUuXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LklzSW1hZ2UpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2htZW50LkZpbGVQYXRoICYmIHRoaXMucHJvZHVjdGlvbkJhc2VVcmwpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5UcnVzdGVkVXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKFxyXG4gICAgICAgICAgXCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9ndmlldz91cmw9XCIgK1xyXG4gICAgICAgICAgdGhpcy5wcm9kdWN0aW9uQmFzZVVybCArXHJcbiAgICAgICAgICBcIi9cIiArXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQXR0YWNobWVudC5GaWxlUGF0aCArXHJcbiAgICAgICAgICBcIiZlbWJlZGRlZD10cnVlXCJcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkluZm8oXCJJbXBvc3NpYmlsZSBhcHJpcmUgbCdhbnRlcHJpbWEgZGVsIGRvY3VtZW50byFcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ1ByZXZpZXcsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0QXR0YWNobWVudEJ5SUQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SUF0dGFjaG1lbnREVE8+KHRoaXMuZ2V0QXR0YWNobWVudEVuZHBvaW50LCB0aGlzLnNlbGVjdGVkQXR0YWNobWVudCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR2VzdGlvbmUgY2FyaWNhbWVudG8gZmlsZVxyXG5cclxuICAvKiogXHJcbiAgICogRXZlbnRvIHNjYXRlbmF0byBhbGxhIHNlbGV6aW9uZSBkZWwgZmlsZSAobyBkZWkgZmlsZSkuXHJcbiAgICogU2UgaWwgY2FyaWNhbWVudG8gw6ggU0lOR09MTyBvIHNlIGNvbXVucXVlIMOoIHN0YXRvIHNlbGV6aW9uYXRvIHVuIHNvbG8gZmlsZSBhbGxvcmEgc2kgb2NjdXBhIGRpIGNvbnRyb2xsYXJlIHNlIHNpIHRyYXR0YSBkaSB1biBpbW1hZ2luZSBpbiBtb2RvIGRhXHJcbiAgICogbW9zdHJhcmUgbGUgZnVuemlvbmFsaXTDoCBkZWwgY3JvcHBpZSAocGVyIHJpdGFnbGlhcmUgbCdpbW1hZ2luZSkgb3BwdXJlIG5vLlxyXG4gICAqIFNlIGlsIGZpbGUgY2FyaWNhdG8gbm9uIMOoIHVuIGltbWFnaW5lIGFsbG9yYSBnZW5lcmEgZGlyZXR0YW1lbnRlIGlsIGJhc2U2NCBlIGxvIGFzc29jaWEgYWxsJ2FsbGVnYXRvIGRhIHNhbHZhcmUuXHJcbiAgICogU2UgaW52ZWNlIGlsIGNhcmljYW1lbnRvIGRlaSBmaWxlIMOoIE1VTFRJUExPIGUgc29ubyBwcmVzZW50aSBwacO5IGZpbGUgYWxsb3JhIGVzZWd1ZSBsZSBzdGVzc2Ugb3BlcmF6aW9uaSBpZ25vcmFuZG8gcGVyw7IgaWwgY29udHJsbG9cclxuICAgKiBpbW1hZ2luZSBwZXIgaWwgY3JvcHBpZSAoaW4gY2FzbyBkaSBjYXJpY2FtZW50byBtdWx0aXBsbyBsZSBmdW56aW9uYWxpdMOgIGRlbCBjcm9wcGllIHNvbm8gZGlzYWJpbGl0YXRlKS5cclxuICAgKi9cclxuICBhc3luYyBvbkZpbGVJbnB1dENoYW5nZShldmVudCkge1xyXG4gICAgdGhpcy5zaG93Q3JvcEltYWdlID0gZmFsc2U7XHJcblxyXG4gICAgLy9TZSDDqCBzdGF0byByaWNoaWVzdG8gaWwgY2FyaWNhbWVudG8gU0lOR09MTyBvcHB1cmUgc2UgaWwgY2FyaWNhbWVudG8gw6ggTVVMVElQTE8gbWEgw6ggc3RhdG8gc2VsZXppb25hdG8gdW4gc29sbyBmaWxlXHJcbiAgICAvL2FsbG9yYSB2ZXJpZmljYSBzZSBpbCBmaWxlIMOoIHVuIGltbWFnaW5lIChwZXIgbW9zdHJhcmUgaWwgQ1JPUFBJRSlcclxuICAgIGlmIChbLi4uZXZlbnQudGFyZ2V0LmZpbGVzXS5sZW5ndGggPT0gMSB8fCB0aGlzLmxvYWRNdWx0aXBsZUZpbGVzICE9IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IGV2ZW50LnRhcmdldC5maWxlcztcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmlsZSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAvL01lbW9yaXp6YSBpIGRhdGkgcGVyIGwnYWxsZWdhdG8gICAgICAgIFxyXG4gICAgICB0aGlzLm5ld0F0dGFjaG1lbnQgPSBhd2FpdCB0aGlzLmNyZWF0ZUF0dGFjaG1lbnRGcm9tVXBsb2FkZWRGaWxlKHRoaXMuc2VsZWN0ZWRGaWxlLCBmYWxzZSk7XHJcbiAgICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyA9IG5ldyBBcnJheTxJQXR0YWNobWVudERUTz4oKTtcclxuICAgICAgdGhpcy5uZXdNdWx0aXBsZUF0dGFjaG1lbnRzLnB1c2godGhpcy5uZXdBdHRhY2htZW50KTtcclxuXHJcbiAgICAgIC8vU2Ugw6ggc3RhdGEgcmljaGllc3RhIGxhIGdlc3Rpb25lIGRlbGxlIHNvbGUgaW1tYWdpbmkgbWEgcGVyIGVycm9yZSDDqCBzdGF0byBzZWxlemlvbmF0byB1biBmaWxlIGNoZSBub24gw6ggdW4gaW1tYWdpbmVcclxuICAgICAgbGV0IGNoZWNrT25seUltYWdlID0gdGhpcy5jaGVja0FsbG93T25seUltYWdlRmlsZSh0aGlzLm5ld0F0dGFjaG1lbnQpO1xyXG4gICAgICBpZiAoY2hlY2tPbmx5SW1hZ2UgPT0gZmFsc2UpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuXHJcbiAgICAgIGlmICh0aGlzLmxvYWRNdWx0aXBsZUZpbGVzID09IHRydWUgJiYgWy4uLmV2ZW50LnRhcmdldC5maWxlc10ubGVuZ3RoID09IDEpXHJcbiAgICAgICAgdGhpcy5jcmVhdGVBdHRhY2htZW50Rm9ybSgpO1xyXG5cclxuICAgICAgLy9WZXJpZmljYSBzZSBpbCBmaWxlIGNhcmljYXRvIMOoIHVuJ2ltbWFnaW5lIG9wcHVyZSBuby4gU2Ugw6ggdW4gaW1tYWdpbmUsIHByaW1hIGRpIGNhcmljYXJsYSBtb3N0cmEgaWwgY3JvcHBpZSBwZXIgaWwgcmVzaXplLlxyXG4gICAgICAvL1NlIG5vbiDDqCB1biBpbW1hZ2luZSBhbGxvcmEgZ2VuZXJhIGlsIEJhc2U2NCBcclxuICAgICAgaWYgKHRoaXMubmV3QXR0YWNobWVudC5Jc0ltYWdlID09IHRydWUpIHtcclxuICAgICAgICB0aGlzLmdldEltYWdlRGltZW5zaW9ucyhldmVudC50YXJnZXQuZmlsZXNbMF0pXHJcblxyXG4gICAgICAgIC8vTW9zdHJhIGlsIGNyb3BwaWUgZSBkaXNhYmlsaXRhIGxhIGZvcm0gZmluY2jDqCBub24gdGVybWluYSBsYSBtb2RpZmljYSBkZWxsJ2ltbWFnaW5lXHJcbiAgICAgICAgdGhpcy5uZXdBdHRhY2htZW50Rm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5uZXdBdHRhY2htZW50Rm9ybS5jb250cm9sc1tcImN1c3RvbVdpZHRoXCJdLmVuYWJsZSgpO1xyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudEZvcm0uY29udHJvbHNbXCJjdXN0b21IZWlnaHRcIl0uZW5hYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zaG93Q3JvcEltYWdlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmltYWdlQ2hhbmdlZEV2ZW50ID0gZXZlbnQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93Q3JvcEltYWdlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGJhc2U2NFJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QmFzZTY0RnJvbUZpbGUodGhpcy5zZWxlY3RlZEZpbGUpO1xyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IGJhc2U2NFJlc3VsdC5CYXNlNjRGaWxlO1xyXG4gICAgICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgPSBiYXNlNjRSZXN1bHQuQ29udGVudFR5cGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBldmVudC50YXJnZXQuZmlsZXM7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGVzIHx8IHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGggPT0gMClcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLm5ld011bHRpcGxlQXR0YWNobWVudHMgPSBuZXcgQXJyYXk8SUF0dGFjaG1lbnREVE8+KCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZEZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IG5ld0F0dGFjaG1lbnQ6IElBdHRhY2htZW50RFRPID0gYXdhaXQgdGhpcy5jcmVhdGVBdHRhY2htZW50RnJvbVVwbG9hZGVkRmlsZSh0aGlzLnNlbGVjdGVkRmlsZXNbaV0sIHRydWUpO1xyXG5cclxuICAgICAgICAvL1NlIMOoIHN0YXRhIHJpY2hpZXN0YSBsYSBnZXN0aW9uZSBkZWxsZSBzb2xlIGltbWFnaW5pIG1hIHBlciBlcnJvcmUgw6ggc3RhdG8gc2VsZXppb25hdG8gdW4gZmlsZSBjaGUgbm9uIMOoIHVuIGltbWFnaW5lXHJcbiAgICAgICAgbGV0IGNoZWNrT25seUltYWdlID0gdGhpcy5jaGVja0FsbG93T25seUltYWdlRmlsZShuZXdBdHRhY2htZW50KTtcclxuICAgICAgICBpZiAoY2hlY2tPbmx5SW1hZ2UgPT0gZmFsc2UpXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cy5wdXNoKG5ld0F0dGFjaG1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIHBhcnRpcmUgZGFsIEZJTEUgcmljZXZ1dG8gaW4gaW5wdXQgcmljb3N0cnVpc2NlIGwnb2dnZXR0byBJQXR0YWNobWVudERUTyBlIGxvIHJlc3RpdHVpc2NlLlxyXG4gICAqIFNlIGlsIHBhcmFtZXRybyBnZXRCYXNlNjQgdmllbmUgcGFzc2F0byBhIFRSVUUgYWxsb3JhLCBzZW1wcmUgYSBwYXJ0aXJlIGRhbCBmaWxlLGdlbmVyYSBpbCBiYXNlNjQgZSBcclxuICAgKiByaWNhdmEgaWwgQ29udGVudFR5cGUgZGEgYXNzb2NpYXJlIGFsbCdvZ2dldHRvIElBdHRhY2htZW50RFRPIGRhIHJlc3RpdHVpcmVcclxuICAgKiBAcGFyYW0gY3VycmVudEZpbGUgT2dnZXR0byBGSUxFIGRhIHByb2Nlc3NhcmVcclxuICAgKiBAcGFyYW0gZ2V0QmFzZTY0IFNlIFRSVUUgYWxsb3JhIGNhbGNvbGEgYmFzZTY0IGUgQ29udGVudFR5cGUgZGVsIGZpbGUgcGFzc2F0byBpbiBpbnB1dFxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIG9nZ2V0dG8gZGkgdGlwbyBJQXR0YWNobWVudERUT1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlQXR0YWNobWVudEZyb21VcGxvYWRlZEZpbGUoY3VycmVudEZpbGU6IEZpbGUsIGdldEJhc2U2NDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPElBdHRhY2htZW50RFRPPiB7XHJcbiAgICBsZXQgbmV3QXR0YWNobWVudDogSUF0dGFjaG1lbnREVE8gPSB7fSBhcyBJQXR0YWNobWVudERUTztcclxuXHJcbiAgICAvL01lbW9yaXp6YSBpIGRhdGkgcGVyIGwnYWxsZWdhdG8gICAgICAgIFxyXG4gICAgbmV3QXR0YWNobWVudC5BdHRhY2htZW50VHlwZSA9IEF0dGFjaG1lbnRUeXBlLkZJTEU7XHJcbiAgICBuZXdBdHRhY2htZW50LkZpbGVDb250ZW50VHlwZSA9IGN1cnJlbnRGaWxlLnR5cGU7XHJcbiAgICBuZXdBdHRhY2htZW50LkZpbGVOYW1lID0gY3VycmVudEZpbGUubmFtZTtcclxuICAgIG5ld0F0dGFjaG1lbnQuRmlsZUV4dGVuc2lvbiA9IGN1cnJlbnRGaWxlLm5hbWUuc3Vic3RyKGN1cnJlbnRGaWxlLm5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xyXG4gICAgbmV3QXR0YWNobWVudC5Jc0ltYWdlID0gQXR0YWNobWVudEhlbHBlclNlcnZpY2UuY2hlY2tJbWFnZUZyb21NaW1lVHlwZShjdXJyZW50RmlsZS50eXBlKTtcclxuXHJcbiAgICBpZiAoZ2V0QmFzZTY0ID09IHRydWUpIHtcclxuICAgICAgbGV0IGJhc2U2NFJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QmFzZTY0RnJvbUZpbGUoY3VycmVudEZpbGUpO1xyXG4gICAgICBuZXdBdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0ID0gYmFzZTY0UmVzdWx0LkJhc2U2NEZpbGU7XHJcbiAgICAgIG5ld0F0dGFjaG1lbnQuRmlsZUNvbnRlbnRUeXBlID0gYmFzZTY0UmVzdWx0LkNvbnRlbnRUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdBdHRhY2htZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQSBwYXJ0aXJlIGRhbCBmaWxlIHBhc3NhdG8gaW4gaW5wdXQgcmVzdGl0dWlzY2UgdW4gb2dnZXR0b1xyXG4gICAqIGNvbnRlbmVudGUgaWwgYmFzZTY0IGRlbCBmaWxlIGUgaWwgc3VvIGNvbnRlbnRUeXBlXHJcbiAgICogQHBhcmFtIGN1cnJlbnRGaWxlIE9nZ2V0dG8gRmlsZSBkYSBjdWkgZXN0cmFwb2xhcmUgYmFzZTY0IGUgY29udGVudFR5cGVcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1biBvZ2dldHRvIGF2ZW50ZSBsZSBwcm9wcmlldMOgIEJhc2U2NEZpbGUgZSBDb250ZW50VHlwZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgZ2V0QmFzZTY0RnJvbUZpbGUoY3VycmVudEZpbGU6IEZpbGUpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IGJhc2U2NEZpbGUgPSBhd2FpdCB0b0Jhc2U2NChjdXJyZW50RmlsZSk7XHJcbiAgICBsZXQgY29udGVudFR5cGU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBpZiAoYmFzZTY0RmlsZSkge1xyXG4gICAgICAvLyBMb3JpcyAyMC8wMS8yMDIyOiBQUk9CTEVNQSAtIFF1YW5kbyBlc2VndW8gbCd1cGxvYWQgZGkgdW4gZmlsZSAuc3FsIG5vbiB2aWVuZSBzYWx2YXRvL3NjYXJpY2F0byBjb3JyZXR0YW1lbnRlLlxyXG4gICAgICAvLyAgICAgICAgICAgICAgICAgICBRdWVzdG8gc3VjY2VkZSBwZXJjaMOoIG5vbiB2aWVuZSBwb3BvbGF0byBpbCBGaWxlQ29udGVudFR5cGUuIFBlciByaXNvbHZlcmUgaWwgcHJvYmxlbWFcclxuICAgICAgLy8gICAgICAgICAgICAgICAgICAgZmFjY2lvIHVuIGNvbnRyb2xsbyBlIHNlIG5vbiBlc2lzdGUgaWwgRmlsZUNvbnRlbnRUeXBlIGFsbG9yYSBsbyByZWN1cGVybyBkYWwgYmFzZTY0IG90dGVudXRvLlxyXG4gICAgICBjb250ZW50VHlwZSA9IGJhc2U2NEZpbGUuc3BsaXQoXCIsXCIpWzBdLnNwbGl0KFwiOlwiKVsxXS5zcGxpdChcIjtcIilbMF07XHJcbiAgICAgIC8vIFVuIGFsdHJvIG1ldG9kbyBwZXIgbGVnZ2VyZSBpbCBjY29udGVudCB0eXBlIGRlbCBmaWxlIMOoIHRyYW1pdGUgdW5hIHJlZ3VsYXIgZXhwcmVzc2lvbjpcclxuICAgICAgYmFzZTY0RmlsZSA9IGJhc2U2NEZpbGUuc3BsaXQoXCIsXCIpWzFdO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgIEJhc2U2NEZpbGU6IGJhc2U2NEZpbGUsXHJcbiAgICAgIENvbnRlbnRUeXBlOiBjb250ZW50VHlwZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb250cm9sbGEgc2UgaWwgZmlsZSBjaGUgc2kgc3RhIGNhcmljYW5kbyDDqCBzdXBwb3J0YXRvIGRhbCBzaXN0ZW1hLlxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hlY2tBY2NlcHRlZEZpbGVzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCh0aGlzLmxvYWRNdWx0aXBsZUZpbGVzICE9IHRydWUgJiYgdGhpcy5zZWxlY3RlZEZpbGUudHlwZS5zdGFydHNXaXRoKFwidmlkZW9cIikpXHJcbiAgICAgIHx8ICh0aGlzLmxvYWRNdWx0aXBsZUZpbGVzID09IHRydWUgJiYgWy4uLnRoaXMuc2VsZWN0ZWRGaWxlc10uZmlsdGVyKHAgPT4gcC50eXBlLnN0YXJ0c1dpdGgoXCJ2aWRlb1wiKSkubGVuZ3RoID4gMCkpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5hY2NlcHRlZEZpbGVUeXBlcyA9PSBcIipcIilcclxuICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgLy9WZXJpZmljYSBjaGUgaSB0aXBpIGRlbCBmaWxlIChvIGRlaSBmaWxlKSBjYXJpY2F0aSBzaWFubyBjb2VyZW50aSBjb24gcXVlbGxpIGFjY2V0dGF0aSBkYWxsYSBkaXJldHRpdmFcclxuICAgIGxldCBhY2NlcHRlZDogYm9vbGVhbiA9IHRydWVcclxuICAgIGlmICh0aGlzLmxvYWRNdWx0aXBsZUZpbGVzICE9IHRydWUpXHJcbiAgICAgIGFjY2VwdGVkID0gdGhpcy5hY2NlcHRlZEZpbGVUeXBlcy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkRmlsZS50eXBlKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgdXBsb2FkZWRGaWxlVHlwZXM6IHN0cmluZ1tdID0gWy4uLnRoaXMuc2VsZWN0ZWRGaWxlc10ubWFwKHAgPT4gcC50eXBlKTtcclxuICAgICAgdXBsb2FkZWRGaWxlVHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYWNjZXB0ZWRGaWxlVHlwZXMuaW5jbHVkZXModHlwZSkpXHJcbiAgICAgICAgICBhY2NlcHRlZCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL1F1ZXN0byBjb250cm9sbG8gcGVybWV0dGUgZGkgZ2VzdGlyZSBsZSBjYXNpc3RpY2hlIHBlciBjdWkgdmVuZ29ubyBpbmRpY2F0aSBjb21lIHRpcGkgdmFsaWRpLCBhZCBlc2VtcGlvLCAnaW1hZ2UvKidcclxuICAgIGlmICghYWNjZXB0ZWQgJiYgdGhpcy5sb2FkTXVsdGlwbGVGaWxlcyAhPSB0cnVlKSB7XHJcbiAgICAgIGZvciAobGV0IHQgb2YgdGhpcy5hY2NlcHRlZEZpbGVUeXBlcy5zcGxpdChcIixcIikuZmlsdGVyKHQgPT4gdC5pbmNsdWRlcyhcIipcIikpKSB7XHJcbiAgICAgICAgYWNjZXB0ZWQgPSB0aGlzLnNlbGVjdGVkRmlsZS50eXBlLnN0YXJ0c1dpdGgodC5zcGxpdChcIipcIilbMF0pO1xyXG4gICAgICAgIGlmIChhY2NlcHRlZClcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjZXB0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZSBlcXAtYXR0YWNobWVudHMgw6ggc3RhdGEgY29uZmlndXJhdGEgcGVyIGlsIGNhcmljYW1lbnRvIGRlbGxlIHNvbGUgaW1tYWdpbmkgYWxsb3JhIHZlcmlmaWNhIGNoZSBpbCBmaWxlIHBhc3NhdG8gaW5cclxuICAgKiBpbnB1dCBzaWEgZWZmZXR0aXZhbWVudGUgdW4gaW1tYWdpbmUgbyBuby5cclxuICAgKiBTZSBpbCBjb250cm9sbG8gdmEgYSBidW9uIGZpbmUgcmVzdGl0dWlzY2UgVFJVRSBhbHRyaW1lbnRpIG1vc3RyYSB1biBtZXNzYWdnaW8gZCdlcnJvcmUgZSByZXN0aXR1aXNjZSBGQUxTRVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hlY2tBbGxvd09ubHlJbWFnZUZpbGUobmV3QXR0YWNobWVudCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dPbmx5SW1hZ2VzID09IHRydWUgJiYgbmV3QXR0YWNobWVudC5Jc0ltYWdlICE9IHRydWUpIHtcclxuICAgICAgRXFwQXR0YWNobWVudERpYWxvZ1NlcnZpY2UuRXJyb3IodGhpcy5ub0ltYWdlU2VsZWN0ZWRFcnJvck1lc3NhZ2UpO1xyXG4gICAgICB0aGlzLmFib3J0RmlsZSgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNoZWNrQWNjZXB0ZWRGaWxlcygpKSB7XHJcbiAgICAgIEVxcEF0dGFjaG1lbnREaWFsb2dTZXJ2aWNlLkVycm9yKHRoaXMud3JvbmdUeXBlU2VsZWN0ZWRFcnJvck1lc3NhZ2UpO1xyXG4gICAgICB0aGlzLmFib3J0RmlsZSgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXRJbWFnZURpbWVuc2lvbnMoaW1nOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWFnZS5zcmMgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgIGltYWdlLm9ubG9hZCA9IHJzID0+IHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsSGVpZ2h0ID0gcnMuY3VycmVudFRhcmdldFsnaGVpZ2h0J107XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbFdpZHRoID0gcnMuY3VycmVudFRhcmdldFsnd2lkdGgnXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxXaWR0aCA+IDEyODApIHtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tV2lkdGggPSAxMjgwO1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21IZWlnaHQgPSBNYXRoLnJvdW5kKCgxMjgwICogdGhpcy5vcmlnaW5hbEhlaWdodCkgLyB0aGlzLm9yaWdpbmFsV2lkdGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbUhlaWdodCA9IHJzLmN1cnJlbnRUYXJnZXRbJ2hlaWdodCddO1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21XaWR0aCA9IHJzLmN1cnJlbnRUYXJnZXRbJ3dpZHRoJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGltZyk7XHJcbiAgfVxyXG5cclxuICByZXN0b3JlT3JpZ2luYWxEaW1lbnNpb25zKCkge1xyXG4gICAgdGhpcy5jdXN0b21XaWR0aCA9IHRoaXMub3JpZ2luYWxXaWR0aDtcclxuICAgIHRoaXMuY3VzdG9tSGVpZ2h0ID0gdGhpcy5vcmlnaW5hbEhlaWdodDtcclxuICB9XHJcblxyXG4gIG9uRGltZW5zaW9uc0NoYW5nZShkaW1lbnNpb246IHN0cmluZykge1xyXG4gICAgaWYgKGRpbWVuc2lvbiA9PSBcIkhcIikge1xyXG4gICAgICB0aGlzLmN1c3RvbVdpZHRoID0gTWF0aC5yb3VuZCgodGhpcy5jdXN0b21IZWlnaHQgKiB0aGlzLm9yaWdpbmFsV2lkdGgpIC8gdGhpcy5vcmlnaW5hbEhlaWdodCk7XHJcbiAgICB9IGVsc2UgaWYgKGRpbWVuc2lvbiA9PSBcIldcIikge1xyXG4gICAgICB0aGlzLmN1c3RvbUhlaWdodCA9IE1hdGgucm91bmQoKHRoaXMuY3VzdG9tV2lkdGggKiB0aGlzLm9yaWdpbmFsSGVpZ2h0KSAvIHRoaXMub3JpZ2luYWxXaWR0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbWFnZUNyb3BwZWQoZXZlbnQ6IEltYWdlQ3JvcHBlZEV2ZW50KSB7XHJcbiAgICB0aGlzLmNyb3BwZWRJbWFnZSA9IGV2ZW50LmJhc2U2NDtcclxuICAgIHRoaXMuZ2V0Q3JvcHBlZEFuZFVwbG9hZCh0aGlzLmNyb3BwZWRJbWFnZSk7XHJcbiAgfVxyXG5cclxuICBnZXRDcm9wcGVkQW5kVXBsb2FkKGZpbGUpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICB2YXIgZmlsZTogYW55ID0gYmFzZTY0VG9GaWxlKGZpbGUpO1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmNvbXByZXNzaW9uT3B0aW9ucztcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXByaW1lIGwnaW1tYWdpbmUgcGFzc2FuZG8gY29tZSBwYXJhbWV0cmkgbGUgb3B0aW9ucyBjcmVhdGUgbmVsbCdvZ2dldHRvIHNvcHJhLCBlIGlsIGZpbGUgZGFsIHJlYWRlciBwcmluY2lwYWxlXHJcbiAgICAgKi9cclxuICAgIGltYWdlQ29tcHJlc3Npb24oZmlsZSwgb3B0aW9ucykudGhlbigoZmlsZUNvbXByZXNzZWQgPT4ge1xyXG5cclxuICAgICAgbGV0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgLy9GYWNjaW8gbGEgcHVzaCBkaSBvZ25pIGZpbGUgYWxsJ2ludGVybm8gZGVsbCdhcnJheSBkaSBmaWxlIGRlbGwnaXRlbSBkYSBtYW5kYXJlIGFsIHNlcnZlclxyXG4gICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgcmVzdWx0UmVhZGVyID0gPHN0cmluZz5maWxlUmVhZGVyLnJlc3VsdDtcclxuICAgICAgICB2YXIgbWFya2VyID0gJztiYXNlNjQsJztcclxuICAgICAgICBzZWxmLm5ld0F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSByZXN1bHRSZWFkZXIuc3Vic3RyaW5nKHJlc3VsdFJlYWRlci5pbmRleE9mKG1hcmtlcikgKyBtYXJrZXIubGVuZ3RoKTtcclxuICAgICAgICBzZWxmLnNob3dDcm9wSW1hZ2UgPSBmYWxzZTtcclxuICAgICAgICBzZWxmLm5ld0F0dGFjaG1lbnRGb3JtLmVuYWJsZSgpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGVDb21wcmVzc2VkKTtcclxuXHJcbiAgICB9KSk7XHJcblxyXG4gIH1cclxuXHJcbiAgY29uZmlybUNyb3AoKSB7XHJcbiAgICB0aGlzLmltYWdlQ3JvcHBlci5jcm9wKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbm51bGxhIGxhIHNlbGV6aW9uZSBkZWwgZmlsZSwgc3Z1b3RhbmRvIGwnaW5wdXQgZSByZXNldHRhbmRvIHR1dHRlIGxlIHByb3ByaWV0w6AgZGVsbCdJQXR0YWNobWVudERUT1xyXG4gICAqL1xyXG4gIGFib3J0RmlsZSgpIHtcclxuICAgIHRoaXMuaW1hZ2VDaGFuZ2VkRXZlbnQgPSAnJztcclxuICAgIGlmICh0aGlzLmltYWdlSW5wdXQpXHJcbiAgICAgIHRoaXMuaW1hZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gbnVsbDtcclxuICAgIHRoaXMuc2hvd0Nyb3BJbWFnZSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5Jc0ltYWdlID0gZmFsc2U7XHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSBudWxsO1xyXG4gICAgdGhpcy5uZXdBdHRhY2htZW50LkZpbGVOYW1lID0gbnVsbDtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uID0gbnVsbDtcclxuICAgIHRoaXMubmV3QXR0YWNobWVudC5GaWxlQ29udGVudFR5cGUgPSBudWxsO1xyXG5cclxuICAgIHRoaXMubmV3TXVsdGlwbGVBdHRhY2htZW50cyA9IG5ldyBBcnJheTxJQXR0YWNobWVudERUTz4oKTtcclxuXHJcbiAgICB0aGlzLmN1c3RvbUhlaWdodCA9IG51bGw7XHJcbiAgICB0aGlzLmN1c3RvbVdpZHRoID0gbnVsbDtcclxuICAgIHRoaXMub3JpZ2luYWxIZWlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5vcmlnaW5hbFdpZHRoID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG59Il19
|