@tilde-nlp/ngx-common 6.0.43 → 6.0.45

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.
@@ -199,7 +199,7 @@ export class FileUploadComponent {
199
199
  } if (rf & 2) {
200
200
  let _t;
201
201
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fileInput = _t.first);
202
- } }, inputs: { accept: "accept", useCompactUpload: "useCompactUpload", maxSize: "maxSize", multiple: "multiple", filePreviewProgress: "filePreviewProgress", allowEmpty: "allowEmpty", disabled: "disabled", dragZoneLabel: "dragZoneLabel", uploadIconName: "uploadIconName", uploadButtonLabel: "uploadButtonLabel", openExtensionPopupLabel: "openExtensionPopupLabel", minSupportedFormatCount: "minSupportedFormatCount", extendedAcceptList: "extendedAcceptList" }, outputs: { fileChange: "fileChange", errorEvent: "errorEvent" }, ngContentSelectors: _c1, decls: 7, vars: 8, consts: [["regularUpload", ""], ["fileInput", ""], ["inputButton", ""], [1, "file-upload", 3, "ngClass.lt-sm"], ["color", "primary", "class", "tld-file-upload-progress", 3, "value", 4, "ngIf"], [4, "ngIf", "ngIfElse"], ["type", "file", "name", "files", 1, "native-file-input", 3, "change", "accept", "multiple"], ["color", "primary", 1, "tld-file-upload-progress", 3, "value"], ["tldDragAndDrop", "", "mat-button", "", "type", "button", 1, "upload-button", "text-l", 3, "fileDropped", "click", "disabled"], [4, "ngIf"], ["tldDragAndDrop", "", 1, "upload-zone", 3, "fileDropped"], ["svgIcon", "file_upload_icon"], [1, "upload-zone-labels"], ["color", "primary-accent-darker", 1, "file-upload--btn", 3, "click"], ["fxHide.lt-sm", "", 1, "upload-label", 3, "innerHTML"], [1, "upload-zone-formats"], [4, "ngFor", "ngForOf"], [3, "innerHTML", 4, "ngIf"], [1, "supported-formats-btn"], [3, "innerHTML"], [1, "supported-formats-btn", 3, "click"]], template: function FileUploadComponent_Template(rf, ctx) { if (rf & 1) {
202
+ } }, inputs: { accept: "accept", useCompactUpload: "useCompactUpload", maxSize: "maxSize", multiple: "multiple", filePreviewProgress: "filePreviewProgress", allowEmpty: "allowEmpty", disabled: "disabled", dragZoneLabel: "dragZoneLabel", uploadIconName: "uploadIconName", uploadButtonLabel: "uploadButtonLabel", openExtensionPopupLabel: "openExtensionPopupLabel", minSupportedFormatCount: "minSupportedFormatCount", extendedAcceptList: "extendedAcceptList" }, outputs: { fileChange: "fileChange", errorEvent: "errorEvent" }, ngContentSelectors: _c1, decls: 7, vars: 9, consts: [["regularUpload", ""], ["fileInput", ""], ["inputButton", ""], [1, "file-upload", 3, "ngClass.lt-sm"], ["color", "primary", "class", "tld-file-upload-progress", 3, "value", 4, "ngIf"], [4, "ngIf", "ngIfElse"], ["type", "file", "name", "files", 1, "native-file-input", 3, "change", "accept", "multiple", "disabled"], ["color", "primary", 1, "tld-file-upload-progress", 3, "value"], ["tldDragAndDrop", "", "mat-button", "", "type", "button", 1, "upload-button", "text-l", 3, "fileDropped", "click", "disabled"], [4, "ngIf"], ["tldDragAndDrop", "", 1, "upload-zone", 3, "fileDropped"], ["svgIcon", "file_upload_icon"], [1, "upload-zone-labels"], ["color", "primary-accent-darker", 1, "file-upload--btn", 3, "click"], ["fxHide.lt-sm", "", 1, "upload-label", 3, "innerHTML"], [1, "upload-zone-formats"], [4, "ngFor", "ngForOf"], [3, "innerHTML", 4, "ngIf"], [1, "supported-formats-btn"], [3, "innerHTML"], [1, "supported-formats-btn", 3, "click"]], template: function FileUploadComponent_Template(rf, ctx) { if (rf & 1) {
203
203
  const _r1 = i0.ɵɵgetCurrentView();
204
204
  i0.ɵɵprojectionDef();
205
205
  i0.ɵɵelementStart(0, "div", 3);
@@ -216,12 +216,12 @@ export class FileUploadComponent {
216
216
  i0.ɵɵadvance();
217
217
  i0.ɵɵproperty("ngIf", ctx.useCompactUpload)("ngIfElse", regularUpload_r9);
218
218
  i0.ɵɵadvance(3);
219
- i0.ɵɵproperty("accept", ctx.allowedExtensions)("multiple", ctx.multiple);
220
- } }, dependencies: [i1.NgForOf, i1.NgIf, i2.MatProgressBar, i3.DefaultShowHideDirective, i3.DefaultClassDirective, i4.MatButton, i5.DragAndDropDirective, i6.MatIcon, i7.TranslatePipe], styles: ["[_nghost-%COMP%]{width:100%}.file-upload[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center;text-align:center}.file-upload[_ngcontent-%COMP%] .upload-button[_ngcontent-%COMP%], .file-upload[_ngcontent-%COMP%] .upload-zone[_ngcontent-%COMP%]{display:flex;border-radius:16px;border:1px dashed var(--base-65)}.file-upload[_ngcontent-%COMP%] .upload-button[_ngcontent-%COMP%]{padding:0;align-items:start;justify-content:start;min-height:fit-content;padding:15px 20px!important}.file-upload[_ngcontent-%COMP%] .upload-zone[_ngcontent-%COMP%]{flex-direction:column;justify-content:center;align-items:center;max-width:600px;width:100%;padding:42px 0}.file-upload[_ngcontent-%COMP%] .upload-zone-labels[_ngcontent-%COMP%]{margin-top:10px;font-size:16px;font-weight:600;line-height:24px;text-align:center}.file-upload[_ngcontent-%COMP%] .upload-zone-labels[_ngcontent-%COMP%] .upload-zone-formats[_ngcontent-%COMP%]{font-weight:400}.file-upload[_ngcontent-%COMP%] .supported-formats-btn[_ngcontent-%COMP%]{cursor:pointer;color:var(--primary-accent-darker);font-weight:400}.file-upload[_ngcontent-%COMP%] .disabled-upload-zone[_ngcontent-%COMP%]{cursor:not-allowed}.file-upload[_ngcontent-%COMP%] .file-upload--btn[_ngcontent-%COMP%], .file-upload[_ngcontent-%COMP%] .upload-label[_ngcontent-%COMP%]:not(.file-upload-mobile){margin-top:10px}.file-upload[_ngcontent-%COMP%] .file-upload--btn[_ngcontent-%COMP%]{cursor:pointer;align-self:center;max-width:fit-content;color:var(--primary-accent-darker)}.file-upload[_ngcontent-%COMP%] .file-upload--btn[_ngcontent-%COMP%]:hover{text-decoration:underline}.file-upload[_ngcontent-%COMP%] .upload-zone-formats[_ngcontent-%COMP%]{margin:10px 0 4px;color:var(--base-40)}.file-upload-mobile[_ngcontent-%COMP%] .upload-button[_ngcontent-%COMP%]{border:1px solid var(--base-65);padding:10px 15px!important}.disabled[_ngcontent-%COMP%] .file-upload--btn[_ngcontent-%COMP%]{pointer-events:none!important;text-decoration:none!important}.native-file-input[_ngcontent-%COMP%]{display:none}"] }); }
219
+ i0.ɵɵproperty("accept", ctx.allowedExtensions)("multiple", ctx.multiple)("disabled", ctx.disabled);
220
+ } }, dependencies: [i1.NgForOf, i1.NgIf, i2.MatProgressBar, i3.DefaultShowHideDirective, i3.DefaultClassDirective, i4.MatButton, i5.DragAndDropDirective, i6.MatIcon, i7.TranslatePipe], styles: ["[_nghost-%COMP%]{width:100%}.file-upload[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center;text-align:center}.file-upload[_ngcontent-%COMP%] .upload-button[_ngcontent-%COMP%], .file-upload[_ngcontent-%COMP%] .upload-zone[_ngcontent-%COMP%]{display:flex;border-radius:16px;border:1px dashed var(--base-65)}.file-upload[_ngcontent-%COMP%] .upload-button[_ngcontent-%COMP%]{padding:0;align-items:start;justify-content:start;min-height:fit-content;padding:15px 20px!important}.file-upload[_ngcontent-%COMP%] .upload-zone[_ngcontent-%COMP%]{flex-direction:column;justify-content:center;align-items:center;max-width:600px;width:100%;padding:42px 0}.file-upload[_ngcontent-%COMP%] .upload-zone-labels[_ngcontent-%COMP%]{margin-top:10px;font-size:16px;font-weight:600;line-height:24px;text-align:center}.file-upload[_ngcontent-%COMP%] .upload-zone-labels[_ngcontent-%COMP%] .upload-zone-formats[_ngcontent-%COMP%]{font-weight:400}.file-upload[_ngcontent-%COMP%] .supported-formats-btn[_ngcontent-%COMP%]{cursor:pointer;color:var(--primary-accent-darker);font-weight:400}.file-upload[_ngcontent-%COMP%] .disabled-upload-zone[_ngcontent-%COMP%]{cursor:not-allowed}.file-upload[_ngcontent-%COMP%] .file-upload--btn[_ngcontent-%COMP%], .file-upload[_ngcontent-%COMP%] .upload-label[_ngcontent-%COMP%]:not(.file-upload-mobile){margin-top:10px}.file-upload[_ngcontent-%COMP%] .file-upload--btn[_ngcontent-%COMP%]{cursor:pointer;align-self:center;max-width:fit-content;color:var(--primary-accent-darker)}.file-upload[_ngcontent-%COMP%] .file-upload--btn[_ngcontent-%COMP%]:hover{text-decoration:underline}.file-upload[_ngcontent-%COMP%] .upload-zone-formats[_ngcontent-%COMP%]{margin:10px 0 4px;color:var(--base-40)}.file-upload-mobile[_ngcontent-%COMP%] .upload-button[_ngcontent-%COMP%]{border:1px solid var(--base-65);padding:10px 15px!important}.disabled[_ngcontent-%COMP%] .file-upload--btn[_ngcontent-%COMP%]{pointer-events:none!important;text-decoration:none!important;color:var(--base-40)}.native-file-input[_ngcontent-%COMP%]{display:none}"] }); }
221
221
  }
222
222
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FileUploadComponent, [{
223
223
  type: Component,
224
- args: [{ selector: 'lib-file-upload', template: "<div class=\"file-upload\" [ngClass.lt-sm]=\"'file-upload-mobile'\" [class.disabled]=\"disabled\">\r\n <mat-progress-bar \r\n *ngIf=\"filePreviewProgress\"\r\n color=\"primary\" \r\n class=\"tld-file-upload-progress\" \r\n [value]=\"filePreviewProgress\"\r\n >\r\n </mat-progress-bar>\r\n\r\n <ng-container *ngIf=\"useCompactUpload; else regularUpload\">\r\n <button tldDragAndDrop #inputButton mat-button (fileDropped)=\"onFileDrop($event)\" [disabled]=\"disabled\" type=\"button\"\r\n (click)=\"fileInput.click()\" class=\"upload-button text-l\"\r\n >\r\n <mat-icon *ngIf=\"uploadIconName\">{{uploadIconName}}</mat-icon>\r\n <ng-content></ng-content>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #regularUpload>\r\n <div class=\"upload-zone\" tldDragAndDrop (fileDropped)=\"onFileDrop($event)\" [class.disabled-upload-zone]=\"disabled\">\r\n <mat-icon svgIcon=\"file_upload_icon\"></mat-icon>\r\n\r\n \r\n <div class=\"upload-zone-labels\">\r\n <a color=\"primary-accent-darker\" class=\"file-upload--btn\" (click)=\"fileInput.click()\">{{ uploadButtonLabel }}</a>\r\n \r\n <span fxHide.lt-sm class=\"upload-label\" [innerHTML]=\"dragZoneLabel\"></span>\r\n \r\n <p class=\"upload-zone-formats\">\r\n (<span *ngFor=\"let format of accept; let i = index\"\r\n >{{ format\r\n }}{{ accept.length - 1 === i ? \".\" : \", \" }}</span\r\n >\r\n\r\n <span *ngIf=\"maxSize\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate: { maxSize: maxSizeLabel }\"></span>)\r\n </p>\r\n \r\n @if (accept.length > minSupportedFormatCount) {\r\n <a class=\"supported-formats-btn\" (click)=\"openSupportedFormatModal()\">{{openExtensionPopupLabel}}</a>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<input \r\n #fileInput \r\n type=\"file\" \r\n name=\"files\" \r\n class=\"native-file-input\"\r\n [accept]=\"allowedExtensions\" \r\n [multiple]=\"multiple\" \r\n (change)=\"handleFileInput($event)\" \r\n/>\r\n", styles: [":host{width:100%}.file-upload{display:flex;flex-direction:column;justify-content:center;text-align:center}.file-upload .upload-button,.file-upload .upload-zone{display:flex;border-radius:16px;border:1px dashed var(--base-65)}.file-upload .upload-button{padding:0;align-items:start;justify-content:start;min-height:fit-content;padding:15px 20px!important}.file-upload .upload-zone{flex-direction:column;justify-content:center;align-items:center;max-width:600px;width:100%;padding:42px 0}.file-upload .upload-zone-labels{margin-top:10px;font-size:16px;font-weight:600;line-height:24px;text-align:center}.file-upload .upload-zone-labels .upload-zone-formats{font-weight:400}.file-upload .supported-formats-btn{cursor:pointer;color:var(--primary-accent-darker);font-weight:400}.file-upload .disabled-upload-zone{cursor:not-allowed}.file-upload .file-upload--btn,.file-upload .upload-label:not(.file-upload-mobile){margin-top:10px}.file-upload .file-upload--btn{cursor:pointer;align-self:center;max-width:fit-content;color:var(--primary-accent-darker)}.file-upload .file-upload--btn:hover{text-decoration:underline}.file-upload .upload-zone-formats{margin:10px 0 4px;color:var(--base-40)}.file-upload-mobile .upload-button{border:1px solid var(--base-65);padding:10px 15px!important}.disabled .file-upload--btn{pointer-events:none!important;text-decoration:none!important}.native-file-input{display:none}\n"] }]
224
+ args: [{ selector: 'lib-file-upload', template: "<div class=\"file-upload\" [ngClass.lt-sm]=\"'file-upload-mobile'\" [class.disabled]=\"disabled\">\r\n <mat-progress-bar \r\n *ngIf=\"filePreviewProgress\"\r\n color=\"primary\" \r\n class=\"tld-file-upload-progress\" \r\n [value]=\"filePreviewProgress\"\r\n >\r\n </mat-progress-bar>\r\n\r\n <ng-container *ngIf=\"useCompactUpload; else regularUpload\">\r\n <button tldDragAndDrop #inputButton mat-button (fileDropped)=\"onFileDrop($event)\" [disabled]=\"disabled\" type=\"button\"\r\n (click)=\"fileInput.click()\" class=\"upload-button text-l\"\r\n >\r\n <mat-icon *ngIf=\"uploadIconName\">{{uploadIconName}}</mat-icon>\r\n <ng-content></ng-content>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #regularUpload>\r\n <div class=\"upload-zone\" tldDragAndDrop (fileDropped)=\"onFileDrop($event)\" [class.disabled-upload-zone]=\"disabled\">\r\n <mat-icon svgIcon=\"file_upload_icon\"></mat-icon>\r\n\r\n \r\n <div class=\"upload-zone-labels\">\r\n <a color=\"primary-accent-darker\" class=\"file-upload--btn\" (click)=\"fileInput.click()\">{{ uploadButtonLabel }}</a>\r\n \r\n <span fxHide.lt-sm class=\"upload-label\" [innerHTML]=\"dragZoneLabel\"></span>\r\n \r\n <p class=\"upload-zone-formats\">\r\n (<span *ngFor=\"let format of accept; let i = index\"\r\n >{{ format\r\n }}{{ accept.length - 1 === i ? \".\" : \", \" }}</span\r\n >\r\n\r\n <span *ngIf=\"maxSize\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate: { maxSize: maxSizeLabel }\"></span>)\r\n </p>\r\n \r\n @if (accept.length > minSupportedFormatCount) {\r\n <a class=\"supported-formats-btn\" (click)=\"openSupportedFormatModal()\">{{openExtensionPopupLabel}}</a>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<input \r\n #fileInput \r\n type=\"file\" \r\n name=\"files\" \r\n class=\"native-file-input\"\r\n [accept]=\"allowedExtensions\" \r\n [multiple]=\"multiple\" \r\n [disabled]=\"disabled\"\r\n (change)=\"handleFileInput($event)\" \r\n/>\r\n", styles: [":host{width:100%}.file-upload{display:flex;flex-direction:column;justify-content:center;text-align:center}.file-upload .upload-button,.file-upload .upload-zone{display:flex;border-radius:16px;border:1px dashed var(--base-65)}.file-upload .upload-button{padding:0;align-items:start;justify-content:start;min-height:fit-content;padding:15px 20px!important}.file-upload .upload-zone{flex-direction:column;justify-content:center;align-items:center;max-width:600px;width:100%;padding:42px 0}.file-upload .upload-zone-labels{margin-top:10px;font-size:16px;font-weight:600;line-height:24px;text-align:center}.file-upload .upload-zone-labels .upload-zone-formats{font-weight:400}.file-upload .supported-formats-btn{cursor:pointer;color:var(--primary-accent-darker);font-weight:400}.file-upload .disabled-upload-zone{cursor:not-allowed}.file-upload .file-upload--btn,.file-upload .upload-label:not(.file-upload-mobile){margin-top:10px}.file-upload .file-upload--btn{cursor:pointer;align-self:center;max-width:fit-content;color:var(--primary-accent-darker)}.file-upload .file-upload--btn:hover{text-decoration:underline}.file-upload .upload-zone-formats{margin:10px 0 4px;color:var(--base-40)}.file-upload-mobile .upload-button{border:1px solid var(--base-65);padding:10px 15px!important}.disabled .file-upload--btn{pointer-events:none!important;text-decoration:none!important;color:var(--base-40)}.native-file-input{display:none}\n"] }]
225
225
  }], () => [], { fileInput: [{
226
226
  type: ViewChild,
227
227
  args: ['fileInput']
@@ -257,4 +257,4 @@ export class FileUploadComponent {
257
257
  type: Input
258
258
  }] }); })();
259
259
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FileUploadComponent, { className: "FileUploadComponent", filePath: "lib\\file-upload\\file-upload.component.ts", lineNumber: 14 }); })();
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7SUNMM0Qsc0NBTW1COzs7SUFGakIsa0RBQTZCOzs7SUFRM0IsZ0NBQWlDO0lBQUEsWUFBa0I7SUFBQSxpQkFBVzs7O0lBQTdCLGNBQWtCO0lBQWxCLDJDQUFrQjs7OztJQUp2RCw2QkFBMkQ7SUFDekQsb0NBRUM7SUFEQyxBQUQ2QywwTUFBZSx5QkFBa0IsS0FBQyxvTUFDdEUsb0JBQWlCLEtBQUM7SUFFM0IsNkZBQWlDO0lBQ2pDLGtCQUF5QjtJQUMzQixpQkFBUzs7OztJQUx5RSxjQUFxQjtJQUFyQiwwQ0FBcUI7SUFHMUYsZUFBb0I7SUFBcEIsNENBQW9COzs7SUFnQjFCLDRCQUNFO0lBQUEsWUFDMkM7SUFBQSxpQkFDN0M7Ozs7O0lBRkUsY0FDMkM7SUFE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QS9CLEtBQUs7WUFDRyx1QkFBdUI7a0JBQS9CLEtBQUs7WUFHRyxrQkFBa0I7a0JBQTFCLEtBQUs7O2tGQXpCSyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkRXJyb3JUeXBlRW51bSB9IGZyb20gJy4vbW9kZWxzL2ZpbGUtdXBsb2FkLWVycm9yLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWRFcnJvciB9IGZyb20gJy4vbW9kZWxzL2ZpbGUtdXBsb2FkLWVycm9yLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRXh0ZW5zaW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZXh0ZW5zaW9uLWRpYWxvZyc7XHJcbmltcG9ydCB7IEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBGSUxFX1VQTE9BRF9JQ09OIH0gZnJvbSAnLi9tb2RlbHMvZmlsZS11cGxvYWQuaWNvbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1maWxlLXVwbG9hZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAT3V0cHV0KCkgZmlsZUNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbGVbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVbXT4oKTtcclxuICBAT3V0cHV0KCkgZXJyb3JFdmVudDogRXZlbnRFbWl0dGVyPEZpbGVVcGxvYWRFcnJvcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVVcGxvYWRFcnJvcj4oKTtcclxuICBwcml2YXRlIF9hY2NlcHQ6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgc2V0IGFjY2VwdCh2YWw6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLl9hY2NlcHQgPSB2YWw7XHJcbiAgICB0aGlzLmFsbG93ZWRFeHRlbnNpb25zID0gdmFsID8gdmFsLmpvaW4oXCIsXCIpIDogXCJcIjtcclxuICB9XHJcbiAgZ2V0IGFjY2VwdCgpIHsgcmV0dXJuIHRoaXMuX2FjY2VwdCB9XHJcbiAgQElucHV0KCkgdXNlQ29tcGFjdFVwbG9hZCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIG1heFNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWxlUHJldmlld1Byb2dyZXNzITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGFsbG93RW1wdHkhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkcmFnWm9uZUxhYmVsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHVwbG9hZEljb25OYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHVwbG9hZEJ1dHRvbkxhYmVsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG9wZW5FeHRlbnNpb25Qb3B1cExhYmVsITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1pblN1cHBvcnRlZEZvcm1hdENvdW50OiBudW1iZXIgPSA5O1xyXG5cclxuICAvKiogc2FtZSBhcyBhY2NlcHQgYnV0IGZvciByZWdpc3RlcmVkIHVzZXJzLiBJdCBjaGFuZ2VzIGVycm9yIG1lc3NhZ2UgaWYgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCBmb3IgcmVnaXN0ZXJlZCB1c2Vycy4gKi9cclxuICBASW5wdXQoKSBleHRlbmRlZEFjY2VwdExpc3QhOiBzdHJpbmdbXTtcclxuXHJcbiAgbWF4U2l6ZUxhYmVsITogc3RyaW5nO1xyXG4gIGFsbG93ZWRFeHRlbnNpb25zITogc3RyaW5nO1xyXG5cclxuICAjZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XHJcbiAgI2ljb24gPSBpbmplY3QoSWNvblNlcnZpY2UpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuI2ljb24ucmVnaXN0ZXJJY29ucyh7RklMRV9VUExPQURfSUNPTn0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuc2V0TWF4U2l6ZUxhYmVsKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuU3VwcG9ydGVkRm9ybWF0TW9kYWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLiNkaWFsb2cub3BlbihFeHRlbnNpb25EaWFsb2dDb21wb25lbnQsIHtkYXRhOiB7IGV4dGVuc2lvbnM6IHRoaXMuYWNjZXB0Lm1hcChpdGVtID0+IGl0ZW0ucmVwbGFjZSgnLicsICcnKSkgfX0pXHJcbiAgfVxyXG5cclxuICBoYW5kbGVGaWxlSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGNvbnN0IGZpbGVzID0gdGFyZ2V0LmZpbGVzIGFzIEZpbGVMaXN0O1xyXG4gICAgdGhpcy52YWxpZGF0ZShmaWxlcyk7XHJcbiAgfVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIG9uRmlsZURyb3AoZmlsZXM6IGFueSkge1xyXG4gICAgdGhpcy52YWxpZGF0ZShmaWxlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1heFNpemVMYWJlbCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IE1CID0gMTAyNDtcclxuICAgIGNvbnN0IHNpemVJbk1CID0gdGhpcy5tYXhTaXplIC8gTUIgKiogMjtcclxuXHJcbiAgICBpZiAoc2l6ZUluTUIgPj0gTUIpIHtcclxuICAgICAgY29uc3Qgc2l6ZUluR0IgPSBzaXplSW5NQiAvIE1CO1xyXG4gICAgICB0aGlzLm1heFNpemVMYWJlbCA9IGAke3NpemVJbkdCfSBHQmA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1heFNpemVMYWJlbCA9IGAke3NpemVJbk1CfSBNQmA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXQoZmlsZXM6IEZpbGVbXSkge1xyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQoZmlsZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0RXJyb3IoZXJyb3I6IEZpbGVVcGxvYWRFcnJvcikge1xyXG4gICAgdGhpcy5lcnJvckV2ZW50LmVtaXQoZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZShmaWxlczogRmlsZUxpc3QpIHtcclxuICAgIC8vbGV0IHNpemUgPSAwO1xyXG4gICAgY29uc3QgdmFsaWRGaWxlczogRmlsZVtdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcclxuICAgICAgaWYgKCF0aGlzLmFsbG93RW1wdHkgJiYgZmlsZS5zaXplID09IDApIHtcclxuICAgICAgICB0aGlzLmVtaXRFcnJvcih7IGNvZGU6IEZpbGVVcGxvYWRFcnJvclR5cGVFbnVtLkZJTEVfRU1QVFksIGVycm9yOiBcIkZpbGUgaXMgZW1wdHlcIiwgZmlsZU5hbWU6IGZpbGUubmFtZSwgbWF4U2l6ZUxhYmVsOiB0aGlzLm1heFNpemVMYWJlbCB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy9zaXplICs9IGZpbGUuc2l6ZTtcclxuICAgICAgY29uc3QgZXh0ZW5zaW9uRXJyb3JDb2RlID0gdGhpcy5nZXRFeHRlbnNpb25FcnJvckNvZGUoZmlsZS5uYW1lKTtcclxuICAgICAgaWYgKGV4dGVuc2lvbkVycm9yQ29kZSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0geyBjb2RlOiBleHRlbnNpb25FcnJvckNvZGUsIGVycm9yOiBcIk5vdCB2YWxpZCBleHRlbnNpb24uXCIsIGZpbGVOYW1lOiBmaWxlLm5hbWUsIG1heFNpemVMYWJlbDogdGhpcy5tYXhTaXplTGFiZWwgfTtcclxuICAgICAgICB0aGlzLmVtaXRFcnJvcihlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5tYXhTaXplICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4U2l6ZSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0geyBjb2RlOiBGaWxlVXBsb2FkRXJyb3JUeXBlRW51bS5NQVhfU0laRSwgZXJyb3I6IFwiTWF4aW11bSBhbGxvd2VkIGZpbGUgc2l6ZSBleGNlZWRlZC5cIiwgZmlsZU5hbWU6IGZpbGUubmFtZSwgbWF4U2l6ZUxhYmVsOiB0aGlzLm1heFNpemVMYWJlbH07XHJcbiAgICAgICAgdGhpcy5lbWl0RXJyb3IoZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHZhbGlkRmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW1pdCh2YWxpZEZpbGVzKTtcclxuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RXh0ZW5zaW9uRXJyb3JDb2RlKGZpbGVOYW1lOiBzdHJpbmcpOiBGaWxlVXBsb2FkRXJyb3JUeXBlRW51bSB8IG51bGwge1xyXG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZU5hbWUuc2xpY2UoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSkudG9Mb3dlckNhc2UoKVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmFjY2VwdC5sZW5ndGggPT0gMCB8fCAodGhpcy5hY2NlcHQubGVuZ3RoID09IDEgJiYgdGhpcy5hY2NlcHRbMF0gPT0gJyonKSB8fCB0aGlzLmFjY2VwdC5pbmNsdWRlcyhleHRlbnNpb24pKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV4dGVuZGVkQWNjZXB0TGlzdD8uaW5jbHVkZXMoZXh0ZW5zaW9uKSA/IEZpbGVVcGxvYWRFcnJvclR5cGVFbnVtLkZJTEVfVVBMT0FEX1VOU1VQUE9SVEVEX0ZPUk1BVF9SRUdJU1RFUiA6IEZpbGVVcGxvYWRFcnJvclR5cGVFbnVtLkZJTEVfVVBMT0FEX1VOU1VQUE9SVEVEX0ZPUk1BVDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkXCIgW25nQ2xhc3MubHQtc21dPVwiJ2ZpbGUtdXBsb2FkLW1vYmlsZSdcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICA8bWF0LXByb2dyZXNzLWJhciBcclxuICAgICpuZ0lmPVwiZmlsZVByZXZpZXdQcm9ncmVzc1wiXHJcbiAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgIGNsYXNzPVwidGxkLWZpbGUtdXBsb2FkLXByb2dyZXNzXCIgXHJcbiAgICBbdmFsdWVdPVwiZmlsZVByZXZpZXdQcm9ncmVzc1wiXHJcbiAgICA+XHJcbiAgPC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlQ29tcGFjdFVwbG9hZDsgZWxzZSByZWd1bGFyVXBsb2FkXCI+XHJcbiAgICA8YnV0dG9uIHRsZERyYWdBbmREcm9wICNpbnB1dEJ1dHRvbiBtYXQtYnV0dG9uIChmaWxlRHJvcHBlZCk9XCJvbkZpbGVEcm9wKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCIgY2xhc3M9XCJ1cGxvYWQtYnV0dG9uIHRleHQtbFwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInVwbG9hZEljb25OYW1lXCI+e3t1cGxvYWRJY29uTmFtZX19PC9tYXQtaWNvbj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjcmVndWxhclVwbG9hZD5cclxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtem9uZVwiIHRsZERyYWdBbmREcm9wIChmaWxlRHJvcHBlZCk9XCJvbkZpbGVEcm9wKCRldmVudClcIiBbY2xhc3MuZGlzYWJsZWQtdXBsb2FkLXpvbmVdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmaWxlX3VwbG9hZF9pY29uXCI+PC9tYXQtaWNvbj5cclxuXHJcbiAgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtem9uZS1sYWJlbHNcIj5cclxuICAgICAgICA8YSBjb2xvcj1cInByaW1hcnktYWNjZW50LWRhcmtlclwiIGNsYXNzPVwiZmlsZS11cGxvYWQtLWJ0blwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPnt7IHVwbG9hZEJ1dHRvbkxhYmVsIH19PC9hPlxyXG4gICAgICAgIFxyXG4gICAgICAgIDxzcGFuIGZ4SGlkZS5sdC1zbSBjbGFzcz1cInVwbG9hZC1sYWJlbFwiIFtpbm5lckhUTUxdPVwiZHJhZ1pvbmVMYWJlbFwiPjwvc3Bhbj5cclxuICBcclxuICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC16b25lLWZvcm1hdHNcIj5cclxuICAgICAgICAgICg8c3BhbiAqbmdGb3I9XCJsZXQgZm9ybWF0IG9mIGFjY2VwdDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgID57eyBmb3JtYXRcclxuICAgICAgICAgICAgfX17eyBhY2NlcHQubGVuZ3RoIC0gMSA9PT0gaSA/IFwiLlwiIDogXCIsIFwiIH19PC9zcGFuXHJcbiAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXhTaXplXCIgW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuTElNSVRTX01CJyB8IHRyYW5zbGF0ZTogeyBtYXhTaXplOiBtYXhTaXplTGFiZWwgfVwiPjwvc3Bhbj4pXHJcbiAgICAgICAgPC9wPlxyXG4gIFxyXG4gICAgICAgIEBpZiAoYWNjZXB0Lmxlbmd0aCA+IG1pblN1cHBvcnRlZEZvcm1hdENvdW50KSB7XHJcbiAgICAgICAgICA8YSBjbGFzcz1cInN1cHBvcnRlZC1mb3JtYXRzLWJ0blwiIChjbGljayk9XCJvcGVuU3VwcG9ydGVkRm9ybWF0TW9kYWwoKVwiPnt7b3BlbkV4dGVuc2lvblBvcHVwTGFiZWx9fTwvYT5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48aW5wdXQgXHJcbiAgI2ZpbGVJbnB1dCBcclxuICB0eXBlPVwiZmlsZVwiIFxyXG4gIG5hbWU9XCJmaWxlc1wiIFxyXG4gIGNsYXNzPVwibmF0aXZlLWZpbGUtaW5wdXRcIlxyXG4gIFthY2NlcHRdPVwiYWxsb3dlZEV4dGVuc2lvbnNcIiBcclxuICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIiBcclxuICAoY2hhbmdlKT1cImhhbmRsZUZpbGVJbnB1dCgkZXZlbnQpXCIgXHJcbi8+XHJcbiJdfQ==
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7SUNMM0Qsc0NBTW1COzs7SUFGakIsa0RBQTZCOzs7SUFRM0IsZ0NBQWlDO0lBQUEsWUFBa0I7SUFBQSxpQkFBVzs7O0lBQTdCLGNBQWtCO0lBQWxCLDJDQUFrQjs7OztJQUp2RCw2QkFBMkQ7SUFDekQsb0NBRUM7SUFEQyxBQUQ2QywwTUFBZSx5QkFBa0IsS0FBQyxvTUFDdEUsb0JBQWlCLEtBQUM7SUFFM0IsNkZBQWlDO0lBQ2pDLGtCQUF5QjtJQUMzQixpQkFBUzs7OztJQUx5RSxjQUFxQjtJQUFyQiwwQ0FBcUI7SUFHMUYsZUFBb0I7SUFBcEIsNENBQW9COzs7SUFnQjFCLDRCQUNFO0lBQUEsWUFDMkM7SUFBQSxpQkFDN0M7Ozs7O0lBRkUsY0FDMkM7SUFE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LHVCQUF1QjtrQkFBL0IsS0FBSztZQUNHLHVCQUF1QjtrQkFBL0IsS0FBSztZQUdHLGtCQUFrQjtrQkFBMUIsS0FBSzs7a0ZBekJLLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWRFcnJvclR5cGVFbnVtIH0gZnJvbSAnLi9tb2RlbHMvZmlsZS11cGxvYWQtZXJyb3ItdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZEVycm9yIH0gZnJvbSAnLi9tb2RlbHMvZmlsZS11cGxvYWQtZXJyb3IubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9leHRlbnNpb24tZGlhbG9nJztcclxuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEZJTEVfVVBMT0FEX0lDT04gfSBmcm9tICcuL21vZGVscy9maWxlLXVwbG9hZC5pY29uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZpbGUtdXBsb2FkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbGVVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBPdXRwdXQoKSBmaWxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVtdPigpO1xyXG4gIEBPdXRwdXQoKSBlcnJvckV2ZW50OiBFdmVudEVtaXR0ZXI8RmlsZVVwbG9hZEVycm9yPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVVwbG9hZEVycm9yPigpO1xyXG4gIHByaXZhdGUgX2FjY2VwdDogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzZXQgYWNjZXB0KHZhbDogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuX2FjY2VwdCA9IHZhbDtcclxuICAgIHRoaXMuYWxsb3dlZEV4dGVuc2lvbnMgPSB2YWwgPyB2YWwuam9pbihcIixcIikgOiBcIlwiO1xyXG4gIH1cclxuICBnZXQgYWNjZXB0KCkgeyByZXR1cm4gdGhpcy5fYWNjZXB0IH1cclxuICBASW5wdXQoKSB1c2VDb21wYWN0VXBsb2FkID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgbWF4U2l6ZSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZpbGVQcmV2aWV3UHJvZ3Jlc3MhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYWxsb3dFbXB0eSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGlzYWJsZWQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRyYWdab25lTGFiZWwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdXBsb2FkSWNvbk5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdXBsb2FkQnV0dG9uTGFiZWwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3BlbkV4dGVuc2lvblBvcHVwTGFiZWwhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWluU3VwcG9ydGVkRm9ybWF0Q291bnQ6IG51bWJlciA9IDk7XHJcblxyXG4gIC8qKiBzYW1lIGFzIGFjY2VwdCBidXQgZm9yIHJlZ2lzdGVyZWQgdXNlcnMuIEl0IGNoYW5nZXMgZXJyb3IgbWVzc2FnZSBpZiBleHRlbnNpb24gaXMgc3VwcG9ydGVkIGZvciByZWdpc3RlcmVkIHVzZXJzLiAqL1xyXG4gIEBJbnB1dCgpIGV4dGVuZGVkQWNjZXB0TGlzdCE6IHN0cmluZ1tdO1xyXG5cclxuICBtYXhTaXplTGFiZWwhOiBzdHJpbmc7XHJcbiAgYWxsb3dlZEV4dGVuc2lvbnMhOiBzdHJpbmc7XHJcblxyXG4gICNkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcclxuICAjaWNvbiA9IGluamVjdChJY29uU2VydmljZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy4jaWNvbi5yZWdpc3Rlckljb25zKHtGSUxFX1VQTE9BRF9JQ09OfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgdGhpcy5zZXRNYXhTaXplTGFiZWwoKTtcclxuICB9XHJcblxyXG4gIG9wZW5TdXBwb3J0ZWRGb3JtYXRNb2RhbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuI2RpYWxvZy5vcGVuKEV4dGVuc2lvbkRpYWxvZ0NvbXBvbmVudCwge2RhdGE6IHsgZXh0ZW5zaW9uczogdGhpcy5hY2NlcHQubWFwKGl0ZW0gPT4gaXRlbS5yZXBsYWNlKCcuJywgJycpKSB9fSlcclxuICB9XHJcblxyXG4gIGhhbmRsZUZpbGVJbnB1dChldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgY29uc3QgZmlsZXMgPSB0YXJnZXQuZmlsZXMgYXMgRmlsZUxpc3Q7XHJcbiAgICB0aGlzLnZhbGlkYXRlKGZpbGVzKTtcclxuICB9XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgb25GaWxlRHJvcChmaWxlczogYW55KSB7XHJcbiAgICB0aGlzLnZhbGlkYXRlKGZpbGVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TWF4U2l6ZUxhYmVsKCk6IHZvaWQge1xyXG4gICAgY29uc3QgTUIgPSAxMDI0O1xyXG4gICAgY29uc3Qgc2l6ZUluTUIgPSB0aGlzLm1heFNpemUgLyBNQiAqKiAyO1xyXG5cclxuICAgIGlmIChzaXplSW5NQiA+PSBNQikge1xyXG4gICAgICBjb25zdCBzaXplSW5HQiA9IHNpemVJbk1CIC8gTUI7XHJcbiAgICAgIHRoaXMubWF4U2l6ZUxhYmVsID0gYCR7c2l6ZUluR0J9IEdCYDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWF4U2l6ZUxhYmVsID0gYCR7c2l6ZUluTUJ9IE1CYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdChmaWxlczogRmlsZVtdKSB7XHJcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZpbGVDaGFuZ2UuZW1pdChmaWxlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRFcnJvcihlcnJvcjogRmlsZVVwbG9hZEVycm9yKSB7XHJcbiAgICB0aGlzLmVycm9yRXZlbnQuZW1pdChlcnJvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlKGZpbGVzOiBGaWxlTGlzdCkge1xyXG4gICAgLy9sZXQgc2l6ZSA9IDA7XHJcbiAgICBjb25zdCB2YWxpZEZpbGVzOiBGaWxlW10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldO1xyXG4gICAgICBpZiAoIXRoaXMuYWxsb3dFbXB0eSAmJiBmaWxlLnNpemUgPT0gMCkge1xyXG4gICAgICAgIHRoaXMuZW1pdEVycm9yKHsgY29kZTogRmlsZVVwbG9hZEVycm9yVHlwZUVudW0uRklMRV9FTVBUWSwgZXJyb3I6IFwiRmlsZSBpcyBlbXB0eVwiLCBmaWxlTmFtZTogZmlsZS5uYW1lLCBtYXhTaXplTGFiZWw6IHRoaXMubWF4U2l6ZUxhYmVsIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvL3NpemUgKz0gZmlsZS5zaXplO1xyXG4gICAgICBjb25zdCBleHRlbnNpb25FcnJvckNvZGUgPSB0aGlzLmdldEV4dGVuc2lvbkVycm9yQ29kZShmaWxlLm5hbWUpO1xyXG4gICAgICBpZiAoZXh0ZW5zaW9uRXJyb3JDb2RlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IGNvZGU6IGV4dGVuc2lvbkVycm9yQ29kZSwgZXJyb3I6IFwiTm90IHZhbGlkIGV4dGVuc2lvbi5cIiwgZmlsZU5hbWU6IGZpbGUubmFtZSwgbWF4U2l6ZUxhYmVsOiB0aGlzLm1heFNpemVMYWJlbCB9O1xyXG4gICAgICAgIHRoaXMuZW1pdEVycm9yKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLm1heFNpemUgJiYgZmlsZS5zaXplID4gdGhpcy5tYXhTaXplKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IGNvZGU6IEZpbGVVcGxvYWRFcnJvclR5cGVFbnVtLk1BWF9TSVpFLCBlcnJvcjogXCJNYXhpbXVtIGFsbG93ZWQgZmlsZSBzaXplIGV4Y2VlZGVkLlwiLCBmaWxlTmFtZTogZmlsZS5uYW1lLCBtYXhTaXplTGFiZWw6IHRoaXMubWF4U2l6ZUxhYmVsfTtcclxuICAgICAgICB0aGlzLmVtaXRFcnJvcihlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdmFsaWRGaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbWl0KHZhbGlkRmlsZXMpO1xyXG4gICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFeHRlbnNpb25FcnJvckNvZGUoZmlsZU5hbWU6IHN0cmluZyk6IEZpbGVVcGxvYWRFcnJvclR5cGVFbnVtIHwgbnVsbCB7XHJcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlTmFtZS5zbGljZShmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpKS50b0xvd2VyQ2FzZSgpXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuYWNjZXB0Lmxlbmd0aCA9PSAwIHx8ICh0aGlzLmFjY2VwdC5sZW5ndGggPT0gMSAmJiB0aGlzLmFjY2VwdFswXSA9PSAnKicpIHx8IHRoaXMuYWNjZXB0LmluY2x1ZGVzKGV4dGVuc2lvbikpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kZWRBY2NlcHRMaXN0Py5pbmNsdWRlcyhleHRlbnNpb24pID8gRmlsZVVwbG9hZEVycm9yVHlwZUVudW0uRklMRV9VUExPQURfVU5TVVBQT1JURURfRk9STUFUX1JFR0lTVEVSIDogRmlsZVVwbG9hZEVycm9yVHlwZUVudW0uRklMRV9VUExPQURfVU5TVVBQT1JURURfRk9STUFUO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWRcIiBbbmdDbGFzcy5sdC1zbV09XCInZmlsZS11cGxvYWQtbW9iaWxlJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxyXG4gIDxtYXQtcHJvZ3Jlc3MtYmFyIFxyXG4gICAgKm5nSWY9XCJmaWxlUHJldmlld1Byb2dyZXNzXCJcclxuICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgY2xhc3M9XCJ0bGQtZmlsZS11cGxvYWQtcHJvZ3Jlc3NcIiBcclxuICAgIFt2YWx1ZV09XCJmaWxlUHJldmlld1Byb2dyZXNzXCJcclxuICAgID5cclxuICA8L21hdC1wcm9ncmVzcy1iYXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VDb21wYWN0VXBsb2FkOyBlbHNlIHJlZ3VsYXJVcGxvYWRcIj5cclxuICAgIDxidXR0b24gdGxkRHJhZ0FuZERyb3AgI2lucHV0QnV0dG9uIG1hdC1idXR0b24gKGZpbGVEcm9wcGVkKT1cIm9uRmlsZURyb3AoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cInVwbG9hZC1idXR0b24gdGV4dC1sXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwidXBsb2FkSWNvbk5hbWVcIj57e3VwbG9hZEljb25OYW1lfX08L21hdC1pY29uPlxyXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNyZWd1bGFyVXBsb2FkPlxyXG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZC16b25lXCIgdGxkRHJhZ0FuZERyb3AgKGZpbGVEcm9wcGVkKT1cIm9uRmlsZURyb3AoJGV2ZW50KVwiIFtjbGFzcy5kaXNhYmxlZC11cGxvYWQtem9uZV09XCJkaXNhYmxlZFwiPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImZpbGVfdXBsb2FkX2ljb25cIj48L21hdC1pY29uPlxyXG5cclxuICBcclxuICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC16b25lLWxhYmVsc1wiPlxyXG4gICAgICAgIDxhIGNvbG9yPVwicHJpbWFyeS1hY2NlbnQtZGFya2VyXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC0tYnRuXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+e3sgdXBsb2FkQnV0dG9uTGFiZWwgfX08L2E+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPHNwYW4gZnhIaWRlLmx0LXNtIGNsYXNzPVwidXBsb2FkLWxhYmVsXCIgW2lubmVySFRNTF09XCJkcmFnWm9uZUxhYmVsXCI+PC9zcGFuPlxyXG4gIFxyXG4gICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXpvbmUtZm9ybWF0c1wiPlxyXG4gICAgICAgICAgKDxzcGFuICpuZ0Zvcj1cImxldCBmb3JtYXQgb2YgYWNjZXB0OyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgPnt7IGZvcm1hdFxyXG4gICAgICAgICAgICB9fXt7IGFjY2VwdC5sZW5ndGggLSAxID09PSBpID8gXCIuXCIgOiBcIiwgXCIgfX08L3NwYW5cclxuICAgICAgICAgID5cclxuXHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1heFNpemVcIiBbaW5uZXJIVE1MXT1cIidGSUxFX1VQTE9BRC5MSU1JVFNfTUInIHwgdHJhbnNsYXRlOiB7IG1heFNpemU6IG1heFNpemVMYWJlbCB9XCI+PC9zcGFuPilcclxuICAgICAgICA8L3A+XHJcbiAgXHJcbiAgICAgICAgQGlmIChhY2NlcHQubGVuZ3RoID4gbWluU3VwcG9ydGVkRm9ybWF0Q291bnQpIHtcclxuICAgICAgICAgIDxhIGNsYXNzPVwic3VwcG9ydGVkLWZvcm1hdHMtYnRuXCIgKGNsaWNrKT1cIm9wZW5TdXBwb3J0ZWRGb3JtYXRNb2RhbCgpXCI+e3tvcGVuRXh0ZW5zaW9uUG9wdXBMYWJlbH19PC9hPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxpbnB1dCBcclxuICAjZmlsZUlucHV0IFxyXG4gIHR5cGU9XCJmaWxlXCIgXHJcbiAgbmFtZT1cImZpbGVzXCIgXHJcbiAgY2xhc3M9XCJuYXRpdmUtZmlsZS1pbnB1dFwiXHJcbiAgW2FjY2VwdF09XCJhbGxvd2VkRXh0ZW5zaW9uc1wiIFxyXG4gIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiIFxyXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgKGNoYW5nZSk9XCJoYW5kbGVGaWxlSW5wdXQoJGV2ZW50KVwiIFxyXG4vPlxyXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tb2RlbHMvbXVsdGktZnVuY3Rpb25hbC10YWJsZS1jb25maWcubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZVwiO1xyXG5pbXBvcnQgeyBCYXRjaENvbmZpZyB9IGZyb20gXCIuL2JhdGNoLWNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RDb25maWcgfSBmcm9tIFwiLi9jb2x1bW4tc2VsZWN0LWNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBFeHBvcnRDb25maWcgfSBmcm9tIFwiLi9leHBvcnQtY29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZpbHRlckNvbmZpZyB9IGZyb20gXCIuL2ZpbHRlci1jb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgU3RhdHVzRGlzcGxheUNvbmZpZyB9IGZyb20gXCIuLi8uLi9zdGF0dXMtZGlzcGxheS9tb2RlbHMvc3RhdHVzLWRpc3BsYXktY29uZmlnLm1vZGVsXCI7XHJcblxyXG4vKipcclxuICogQ29uZmlndXJhdGlvbiBmb3IgdGFibGUgd2l0aCBtdWx0aXBsZSBwcmVkZWZpbmVkIGFjdG9pbnMgYWdhaW5zdCBtYXQgdGFibGUuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnPFQ+IHtcclxuICAvKipcclxuICAgKiBNYXQgdGFibGUgZGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPjtcclxuICAvKipcclxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0b2dnbGluZyBkaXNwbGF5ZWQgY29sdW1ucyBpbiBtYXQgdGFibGVcclxuICAgKi9cclxuICBjb2x1bW5TZWxlY3Q/OiBDb2x1bW5TZWxlY3RDb25maWc7XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgZmlsdGVycy4gRm9yIGZpbHRlcmluZyBjdXN0b20gZmlsdGVyQmFyIGNvbXBvbmVudCBpcyB1c2VkLiBOb3RlIHRoYXQgY29tcG9uZW50IGRvZXMgbm90IGZpbHRlciBkYXRhc291cmNlIGJ5IGl0c2VsZiBidXQgb25seSBlbWl0cyBldmVudCB3aGVuIGZpbHRlcnMgYXJlIGNoYW5nZWQuXHJcbiAgICovXHJcbiAgZmlsdGVyPzogRmlsdGVyQ29uZmlnO1xyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGV4cG9ydGluZyBkYXRhLlxyXG4gICAqL1xyXG4gIGV4cG9ydD86IEV4cG9ydENvbmZpZztcclxuICAvKipcclxuICAgKiBMb2NhbCBzdG9yYWdlIGtleSB0byBzdG9yZSBzZWxlY3RlZCBjb2x1bW5zIGFuZCBmaWx0ZXIgdmlzaWJpbHR5LlxyXG4gICAqL1xyXG4gIGxvY2FsU3RvcmFnZUtleT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0ZXh0cyBhbmQgaWNvbiBmb3Igbm8gZGF0YSByb3cuXHJcbiAgICovXHJcbiAgbm9EYXRhUm93PzogU3RhdHVzRGlzcGxheUNvbmZpZztcclxuICBiYXRjaENvbmZpZz86IEJhdGNoQ29uZmlnO1xyXG4gIHN0aWNreUhlYWRlcj86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciByb3cgY2xpY2suXHJcbiAgICAqL1xyXG4gIHJvd0NsaWNrQ2FsbGJhY2s/OiAocGFyYW06IFQpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICAqIFByb3ZpZGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIHJvdyBjbGlja2luZyBzaG91bGQgYmUgZGlzYWJsZWQuXHJcbiAgICAqL1xyXG4gIGRpc2FibGVSb3dDbGljaz86IChwYXJhbTogVCkgPT4gYm9vbGVhbjtcclxufVxyXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tb2RlbHMvbXVsdGktZnVuY3Rpb25hbC10YWJsZS1jb25maWcubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZVwiO1xyXG5pbXBvcnQgeyBCYXRjaENvbmZpZyB9IGZyb20gXCIuL2JhdGNoLWNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RDb25maWcgfSBmcm9tIFwiLi9jb2x1bW4tc2VsZWN0LWNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBFeHBvcnRDb25maWcgfSBmcm9tIFwiLi9leHBvcnQtY29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZpbHRlckNvbmZpZyB9IGZyb20gXCIuL2ZpbHRlci1jb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgU3RhdHVzRGlzcGxheUNvbmZpZyB9IGZyb20gXCIuLi8uLi9zdGF0dXMtZGlzcGxheS9tb2RlbHMvc3RhdHVzLWRpc3BsYXktY29uZmlnLm1vZGVsXCI7XHJcblxyXG4vKipcclxuICogQ29uZmlndXJhdGlvbiBmb3IgdGFibGUgd2l0aCBtdWx0aXBsZSBwcmVkZWZpbmVkIGFjdG9pbnMgYWdhaW5zdCBtYXQgdGFibGUuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnPFQ+IHtcclxuICAvKipcclxuICAgKiBNYXQgdGFibGUgZGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPjtcclxuICAvKipcclxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0b2dnbGluZyBkaXNwbGF5ZWQgY29sdW1ucyBpbiBtYXQgdGFibGVcclxuICAgKi9cclxuICBjb2x1bW5TZWxlY3Q/OiBDb2x1bW5TZWxlY3RDb25maWc7XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgZmlsdGVycy4gRm9yIGZpbHRlcmluZyBjdXN0b20gZmlsdGVyQmFyIGNvbXBvbmVudCBpcyB1c2VkLiBOb3RlIHRoYXQgY29tcG9uZW50IGRvZXMgbm90IGZpbHRlciBkYXRhc291cmNlIGJ5IGl0c2VsZiBidXQgb25seSBlbWl0cyBldmVudCB3aGVuIGZpbHRlcnMgYXJlIGNoYW5nZWQuXHJcbiAgICovXHJcbiAgZmlsdGVyPzogRmlsdGVyQ29uZmlnO1xyXG4gIC8qKlxyXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIGV4cG9ydGluZyBkYXRhLlxyXG4gICAqL1xyXG4gIGV4cG9ydD86IEV4cG9ydENvbmZpZztcclxuICAvKipcclxuICAgKiBMb2NhbCBzdG9yYWdlIGtleSB0byBzdG9yZSBzZWxlY3RlZCBjb2x1bW5zIGFuZCBmaWx0ZXIgdmlzaWJpbHR5LlxyXG4gICAqL1xyXG4gIGxvY2FsU3RvcmFnZUtleT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBTZXQgdG8gdHJ1ZSwgaWYgbW91c2UgZHJhZ2dpbmcgaXMgbm90IHJlcXVpcmVkLlxyXG4gICAqL1xyXG4gIGRpc2FibGVPdmVyZmxvd01vdXNlRHJhZz86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGV4dHMgYW5kIGljb24gZm9yIG5vIGRhdGEgcm93LlxyXG4gICAqL1xyXG4gIG5vRGF0YVJvdz86IFN0YXR1c0Rpc3BsYXlDb25maWc7XHJcbiAgYmF0Y2hDb25maWc/OiBCYXRjaENvbmZpZztcclxuICBzdGlja3lIZWFkZXI/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igcm93IGNsaWNrLlxyXG4gICAgKi9cclxuICByb3dDbGlja0NhbGxiYWNrPzogKHBhcmFtOiBUKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAgKiBQcm92aWRlIGNvbmRpdGlvbiB1bmRlciB3aGljaCByb3cgY2xpY2tpbmcgc2hvdWxkIGJlIGRpc2FibGVkLlxyXG4gICAgKi9cclxuICBkaXNhYmxlUm93Q2xpY2s/OiAocGFyYW06IFQpID0+IGJvb2xlYW47XHJcbn1cclxuIl19
@@ -344,6 +344,9 @@ export class MultiFunctionalTableComponent {
344
344
  this.matSelection.toggle(element);
345
345
  }
346
346
  onMouseDown(event) {
347
+ if (this.config.disableOverflowMouseDrag) {
348
+ return;
349
+ }
347
350
  this.isDragging = true;
348
351
  this.startX = event.pageX - this.tableContainer.nativeElement.offsetLeft;
349
352
  this.startY = event.pageY - this.tableContainer.nativeElement.offsetTop;
@@ -355,6 +358,9 @@ export class MultiFunctionalTableComponent {
355
358
  }
356
359
  }
357
360
  onMouseMove(event) {
361
+ if (this.config.disableOverflowMouseDrag) {
362
+ return;
363
+ }
358
364
  this.checkTableOverflow();
359
365
  if (!this.isDragging) {
360
366
  return;
@@ -378,6 +384,9 @@ export class MultiFunctionalTableComponent {
378
384
  }
379
385
  }
380
386
  onMouseUp() {
387
+ if (this.config.disableOverflowMouseDrag) {
388
+ return;
389
+ }
381
390
  this.isDragging = false;
382
391
  // canceling any pending animation
383
392
  if (this.scrollMovement !== null) {
@@ -524,7 +533,7 @@ export class MultiFunctionalTableComponent {
524
533
  i0.ɵɵadvance(2);
525
534
  i0.ɵɵproperty("ngIf", ctx.config.filter && ctx.config.filter.enabled);
526
535
  i0.ɵɵadvance(2);
527
- i0.ɵɵclassProp("table-sticky-header", ctx.config == null ? null : ctx.config.stickyHeader)("table-dragable", ctx.tableOverflow);
536
+ i0.ɵɵclassProp("table-sticky-header", ctx.config == null ? null : ctx.config.stickyHeader)("table-dragable", ctx.tableOverflow && !(ctx.config == null ? null : ctx.config.disableOverflowMouseDrag));
528
537
  i0.ɵɵadvance(2);
529
538
  i0.ɵɵproperty("dataSource", ctx.config.dataSource)("trackBy", ctx.trackByFn);
530
539
  i0.ɵɵadvance(3);
@@ -545,7 +554,7 @@ export class MultiFunctionalTableComponent {
545
554
  }
546
555
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MultiFunctionalTableComponent, [{
547
556
  type: Component,
548
- args: [{ selector: 'tld-multi-functional-table', template: "<div [ngClass.lt-md]=\"'mobile'\" fxLayout=\"column\" fxLayoutGap=\"0.75rem\">\r\n\r\n <div fxLayout=\"row\" fxLayout.lt-md=\"column\" fxLayoutGap.lt-md=\"0.75rem\">\r\n <div fxFlex fxLayout.lt-md=\"column\" fxLayoutGap=\"0.75rem\" fxLayoutAlign=\"start center\" fxLayoutAlign.lt-md=\"start start\" class=\"action-row\">\r\n <button class=\"export-data\" mat-stroked-button color=\"primary-accent-darker\" *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n\r\n <div *ngIf=\"filterActive && showFilterToggle\" fxFlex fxLayoutGap=\"0.5rem\" fxLayoutAlign=\"start center\">\r\n <button [class.filter-active]=\"filterBarVisible\" mat-stroked-button color=\"primary-accent-darker\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n \r\n <div *ngIf=\"showFilterReset\" class=\"clear-filters-wrapper\">\r\n <button mat-icon-button (click)=\"clearFilters()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showSearch\" fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"wild-search-wrapper\">\r\n <mat-icon [matTooltip]=\"hideSearchTooltip ? '' : searchTooltip | translate\">search</mat-icon>\r\n <input #wildSearch type=\"text\" [placeholder]=\"searchTitle | translate\" (keyup)=\"search($event)\">\r\n <button *ngIf=\"showSearchClearButton\" mat-icon-button class=\"wild-search-clear-btn\" (click)=\"wildSearch.value = ''; search({ target: { value: '' } })\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" #filterBar [filterRowVisible]=\"filterBarVisible\" [settings]=\"config.filter.settings\"\r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <ng-content select=\"[batchActions]\"></ng-content>\r\n\r\n <div \r\n #tableContainer\r\n class=\"table-overflow\"\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\" [trackBy]=\"trackByFn\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr \r\n mat-row \r\n *matRowDef=\"let row; \r\n columns: displayColumns\" \r\n (click)=\"config?.rowClickCallback && !config?.disableRowClick(row) ? config?.rowClickCallback(row) : null\"\r\n (mouseover)=\"hoveredRow = row\" \r\n (mouseleave)=\"hoveredRow = null\" \r\n [class.row-clickable]=\"config?.rowClickCallback && !config?.disableRowClick(row)\" \r\n [class.highlight-error]=\"highlightErrorElement(row)\" \r\n [class.highlight]=\"row === hoveredRow || highlightElement(row)\">\r\n </tr>\r\n \r\n <ng-container [matColumnDef]=\"columnSelectColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <div class=\"column-selector-wrapper\">\r\n <button class=\"column-selector\" mat-icon-button color=\"primary-accent-darker\" [matMenuTriggerFor]=\"columnMenu\">\r\n <span class=\"material-icons\">more_vert</span>\r\n </button>\r\n </div>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-menu\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <div class=\"column-select-save\">\r\n <button mat-flat-button color=\"primary-accent-darker\" (click)=\"updateDisplayColumns()\">{{ \"MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT_SAVE\" | translate }}</button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}:host ::ng-deep td+.cdk-column-columnSelect{display:none}:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button,:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:36px!important;width:36px!important}:host ::ng-deep .clear-filters-wrapper mat-icon{margin-top:-2px;margin-left:-2px}:host ::ng-deep .filter-active{background-color:var(--neutral-95)}table{width:100%}.wild-search-wrapper{position:relative;padding:5px 10px;border-radius:4px;border:1px solid var(--neutral-50);margin:0 8px}.wild-search-wrapper input{margin-right:30px}.wild-search-wrapper .wild-search-clear-btn{position:absolute;right:3px}.wild-search-wrapper .mat-mdc-icon-button,.wild-search-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:33px!important;width:33px!important}.wild-search-wrapper .mat-mdc-icon-button mat-icon,.wild-search-wrapper .mat-mdc-icon-button .material-icons,.wild-search-wrapper .mat-mdc-icon-button .material-icons-outlined{top:5px!important;left:5px!important}.mobile .wild-search-wrapper{margin:0}.column-selector-wrapper{display:flex;justify-content:end}.column-select-menu{padding:8px 18px 8px 8px}.column-select-save{padding-left:8px;padding-top:8px}.column-select-save button{width:100%}.row-clickable{cursor:pointer}.row-clickable:active{background-color:var(--base-70)!important}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"] }]
557
+ args: [{ selector: 'tld-multi-functional-table', template: "<div [ngClass.lt-md]=\"'mobile'\" fxLayout=\"column\" fxLayoutGap=\"0.75rem\">\r\n\r\n <div fxLayout=\"row\" fxLayout.lt-md=\"column\" fxLayoutGap.lt-md=\"0.75rem\">\r\n <div fxFlex fxLayout.lt-md=\"column\" fxLayoutGap=\"0.75rem\" fxLayoutAlign=\"start center\" fxLayoutAlign.lt-md=\"start start\" class=\"action-row\">\r\n <button class=\"export-data\" mat-stroked-button color=\"primary-accent-darker\" *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n\r\n <div *ngIf=\"filterActive && showFilterToggle\" fxFlex fxLayoutGap=\"0.5rem\" fxLayoutAlign=\"start center\">\r\n <button [class.filter-active]=\"filterBarVisible\" mat-stroked-button color=\"primary-accent-darker\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n \r\n <div *ngIf=\"showFilterReset\" class=\"clear-filters-wrapper\">\r\n <button mat-icon-button (click)=\"clearFilters()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showSearch\" fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"wild-search-wrapper\">\r\n <mat-icon [matTooltip]=\"hideSearchTooltip ? '' : searchTooltip | translate\">search</mat-icon>\r\n <input #wildSearch type=\"text\" [placeholder]=\"searchTitle | translate\" (keyup)=\"search($event)\">\r\n <button *ngIf=\"showSearchClearButton\" mat-icon-button class=\"wild-search-clear-btn\" (click)=\"wildSearch.value = ''; search({ target: { value: '' } })\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" #filterBar [filterRowVisible]=\"filterBarVisible\" [settings]=\"config.filter.settings\"\r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <ng-content select=\"[batchActions]\"></ng-content>\r\n\r\n <div \r\n #tableContainer\r\n class=\"table-overflow\"\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow && !config?.disableOverflowMouseDrag\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table #table mat-table [dataSource]=\"config.dataSource\" [trackBy]=\"trackByFn\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox \r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" \r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled || (preselectedItems.includes(element) && disablePreselectedItems)\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"></tr>\r\n <tr \r\n mat-row \r\n *matRowDef=\"let row; \r\n columns: displayColumns\" \r\n (click)=\"config?.rowClickCallback && !config?.disableRowClick(row) ? config?.rowClickCallback(row) : null\"\r\n (mouseover)=\"hoveredRow = row\" \r\n (mouseleave)=\"hoveredRow = null\" \r\n [class.row-clickable]=\"config?.rowClickCallback && !config?.disableRowClick(row)\" \r\n [class.highlight-error]=\"highlightErrorElement(row)\" \r\n [class.highlight]=\"row === hoveredRow || highlightElement(row)\">\r\n </tr>\r\n \r\n <ng-container [matColumnDef]=\"columnSelectColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <div class=\"column-selector-wrapper\">\r\n <button class=\"column-selector\" mat-icon-button color=\"primary-accent-darker\" [matMenuTriggerFor]=\"columnMenu\">\r\n <span class=\"material-icons\">more_vert</span>\r\n </button>\r\n </div>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-menu\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <div class=\"column-select-save\">\r\n <button mat-flat-button color=\"primary-accent-darker\" (click)=\"updateDisplayColumns()\">{{ \"MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT_SAVE\" | translate }}</button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}:host ::ng-deep td+.cdk-column-columnSelect{display:none}:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button,:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:36px!important;width:36px!important}:host ::ng-deep .clear-filters-wrapper mat-icon{margin-top:-2px;margin-left:-2px}:host ::ng-deep .filter-active{background-color:var(--neutral-95)}table{width:100%}.wild-search-wrapper{position:relative;padding:5px 10px;border-radius:4px;border:1px solid var(--neutral-50);margin:0 8px}.wild-search-wrapper input{margin-right:30px}.wild-search-wrapper .wild-search-clear-btn{position:absolute;right:3px}.wild-search-wrapper .mat-mdc-icon-button,.wild-search-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:33px!important;width:33px!important}.wild-search-wrapper .mat-mdc-icon-button mat-icon,.wild-search-wrapper .mat-mdc-icon-button .material-icons,.wild-search-wrapper .mat-mdc-icon-button .material-icons-outlined{top:5px!important;left:5px!important}.mobile .wild-search-wrapper{margin:0}.column-selector-wrapper{display:flex;justify-content:end}.column-select-menu{padding:8px 18px 8px 8px}.column-select-save{padding-left:8px;padding-top:8px}.column-select-save button{width:100%}.row-clickable{cursor:pointer}.row-clickable:active{background-color:var(--base-70)!important}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"] }]
549
558
  }], () => [{ type: i1.DOMService }, { type: i2.TranslateService }], { config: [{
550
559
  type: Input
551
560
  }], highlightedElements: [{
@@ -595,4 +604,4 @@ export class MultiFunctionalTableComponent {
595
604
  args: [MatTable, { read: ElementRef }]
596
605
  }] }); })();
597
606
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MultiFunctionalTableComponent, { className: "MultiFunctionalTableComponent", filePath: "lib\\multi-functional-table\\multi-functional-table.component.ts", lineNumber: 25 }); })();
598
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBbUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRyxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNQbEMsa0NBQXFIO0lBQW5CLDRMQUFTLGVBQVEsS0FBQztJQUNsSCxnQ0FBc0M7SUFBQSw4QkFBYztJQUFBLGlCQUFPO0lBQzNELDRCQUFNO0lBQUEsWUFBK0M7O0lBQ3ZELEFBRHVELGlCQUFPLEVBQ3JEOztJQURELGVBQStDO0lBQS9DLDJFQUErQzs7OztJQVVuRCxBQURGLCtCQUEyRCxpQkFDUjtJQUF6QixnTUFBUyxxQkFBYyxLQUFDO0lBQzlDLGdDQUFVO0lBQUEscUJBQUs7SUFFbkIsQUFERSxBQURpQixpQkFBVyxFQUNuQixFQUNMOzs7O0lBVE4sQUFERiwrQkFBdUcsaUJBQ3lCO0lBQTVCLHlMQUFTLHdCQUFpQixLQUFDO0lBQzNILGdDQUE2QjtJQUFBLDJCQUFXO0lBQUEsaUJBQU87SUFDL0MsNEJBQU07SUFBQSxZQUFzRDs7SUFDOUQsQUFEOEQsaUJBQU8sRUFDNUQ7SUFFVCxxRkFBMkQ7SUFLN0QsaUJBQU07OztJQVZJLGNBQXdDO0lBQXhDLHdEQUF3QztJQUV4QyxlQUFzRDtJQUF0RCxrRkFBc0Q7SUFHeEQsZUFBcUI7SUFBckIsNkNBQXFCOzs7O0lBVzdCLGtDQUF1SjtJQUFuRSwrUEFBNEIsRUFBRSx3QkFBRSxjQUFPLFVBQVUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUM7SUFDcEosZ0NBQVU7SUFBQSxxQkFBSztJQUNqQixBQURpQixpQkFBVyxFQUNuQjs7OztJQUpULEFBREYsK0JBQWdHLG1CQUNsQjs7SUFBQSxzQkFBTTtJQUFBLGlCQUFXO0lBQzdGLG9DQUFnRzs7SUFBekIsOExBQVMscUJBQWMsS0FBQztJQUEvRixpQkFBZ0c7SUFDaEcsMkZBQXVKO0lBR3pKLGlCQUFNOzs7SUFMTSxjQUFpRTtJQUFqRSx1R0FBaUU7SUFDNUMsZUFBdUM7SUFBdkMsc0VBQXVDO0lBQzdELGVBQTJCO0lBQTNCLG1EQUEyQjs7OztJQVF4Qyw2Q0FDNkM7SUFBM0Msc09BQW1CLDZCQUFzQixLQUFDO0lBQzVDLGlCQUFpQjs7O0lBRitGLEFBQXRDLDBEQUFxQywyQ0FBb0M7Ozs7SUFvQjNJLEFBREYsOEJBQXdFLHVCQUdOOztJQUZpRSxrTUFBVSw4QkFBdUIsS0FBQztJQUlySyxBQURFLGlCQUFlLEVBQ1o7OztJQUpXLGNBQThEO0lBRTFFLEFBREEsQUFEMkUsQUFBL0Qsc0ZBQThELDBEQUFvRCxxRUFDeEUsNEVBQ087Ozs7SUFJL0Qsd0NBRzBGOztJQUF4RixBQUR1SCxrTEFBUyx3QkFBd0IsS0FBQyxzUEFDL0ksMENBQStCLEtBQUM7SUFDNUMsaUJBQWU7Ozs7SUFEOEIsQUFEM0MsQUFEQSxrRkFBMEQsNklBQzRELHdEQUMvQjs7O0lBSjNGLDhCQUF5RTtJQUN2RSx1R0FHMEY7SUFFNUYsaUJBQUs7Ozs7SUFKMkQsY0FBOEY7SUFBOUYsNElBQThGOzs7SUFNaEsseUJBQWlHOzs7O0lBQ2pHLDhCQVNrRTtJQUhoRSxBQURBLEFBREEsdWFBQXFHLElBQUksS0FBQywyT0FDNUUsdU1BQ0gsSUFBSSxLQUFDO0lBSWxDLGlCQUFLOzs7O0lBREgsQUFEQSxBQURBLDRLQUFpRiwwREFDN0IsZ0ZBQ1c7OztJQU96RCxBQURGLEFBREYsQUFERiw4QkFBd0UsY0FDakMsaUJBQzRFLGVBQ2hGO0lBQUEseUJBQVM7SUFHNUMsQUFERSxBQURFLEFBRHdDLGlCQUFPLEVBQ3RDLEVBQ0wsRUFDSDs7OztJQUo2RSxlQUFnQztJQUFoQyxrREFBZ0M7OztJQUtsSCx5QkFDSzs7O0lBS0gsQUFGRiwwQkFBa0IsYUFFQztJQUNmLHlDQUFvRTtJQUV4RSxBQURFLGlCQUFLLEVBQ0Y7OztJQUZtQixlQUEwQjtJQUExQiwrQ0FBMEI7OztJQUpwRCw2QkFBc0M7SUFDcEMsNkZBQWtCOzs7OztJQWNwQixBQURGLDJCQUFnRCx1QkFDRjtJQUE5Qix3VEFBNkI7SUFDekMsWUFDRjs7SUFDRixBQURFLGlCQUFlLEVBQ1g7OztJQUhVLGNBQTZCO0lBQTdCLG1EQUE2QjtJQUN6QyxjQUNGO0lBREUsNkVBQ0Y7O0FEcEZOLE1BQU0sT0FBTyw2QkFBNkI7SUFPeEMsSUFBYSxTQUFTLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQThCRCxJQUFJLG1CQUFtQixLQUFLLE9BQU8sNkJBQTZCLENBQUEsQ0FBQyxDQUFDO0lBbUNsRSxJQUFJLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUQsSUFBSSxnQkFBZ0IsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBRXhFLElBQUksZUFBZSxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFBLENBQUMsQ0FBQztJQU1wSCxZQUE2QixVQUFzQixFQUNoQyxnQkFBa0M7UUFEeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBbkY1QyxpQkFBWSxHQUFHLElBQUksY0FBYyxDQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQVV4RCx5RUFBeUU7UUFDaEUsK0JBQTBCLEdBQUcsSUFBSSxDQUFDO1FBRWxDLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUV6QywyQkFBMkI7UUFDakIsb0JBQWUsR0FBdUMsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDL0YsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3RELG9CQUFlLEdBQW9CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFxQzlJLGtCQUFhLEdBQUcsZUFBZSxDQUFDO1FBWXhCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsY0FBUyxHQUFHLENBQUMsQ0FBQztRQVFiLG9CQUFlLEdBQUcsT0FBTyxDQUFDO1FBQzFCLDJCQUFzQixHQUFHLGNBQWMsQ0FBQztJQUdRLENBQUM7SUFFMUQsaUNBQWlDO0lBQ2pDLFFBQVE7UUFDTixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxJQUFJLDJCQUEyQixDQUFDO1FBQ2hHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsSUFBSSxtQkFBbUIsQ0FBQztRQUNwRixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQztRQUM1RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixJQUFJLElBQUksQ0FBQztRQUN6RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFDRCxZQUFZO0lBRVosTUFBTSxDQUFDLEtBQW9EO1FBQ3pELE1BQU0sS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUEyQixFQUFFLEtBQUssQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsS0FBSztRQUNsQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM1RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFaEYsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUVELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM1QixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLE1BQU0sQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDaEYsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLG9FQUFvRTtnQkFDcEUsaUJBQWlCLENBQUMsT0FBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQzVELENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0Isa0JBQWtCLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9DLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzFELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBNkI7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFDLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkQsTUFBTSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQVU7UUFDekIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFVO1FBQzlCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLGFBQWE7UUFDWCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNuRCxPQUFPLFdBQVcsS0FBSyxPQUFPLENBQUM7SUFDakMsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ2pDLCtEQUErRDtnQkFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQ3hCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2xHLENBQUM7Z0JBQ0YsT0FBTztZQUNULENBQUM7aUJBQ0ksQ0FBQztnQkFDSixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMxQixPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxPQUFVO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBaUI7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUN6RSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1FBQy9ELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBRTdELHlDQUF5QztRQUN6QyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFFQSxtREFBbUQ7UUFDbkQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN4QixPQUFPO2dCQUNULENBQUM7Z0JBRUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQ3JFLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO2dCQUVwRSwwQ0FBMEM7Z0JBQzFDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRXBDLDRCQUE0QjtnQkFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN2RSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBRXJFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFeEIsa0NBQWtDO1FBQ2xDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxZQUFZO0lBRUosa0JBQWtCO1FBQ3hCLGlFQUFpRTtRQUNqRSwrR0FBK0c7UUFDL0csaUpBQWlKO1FBQ2pKLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFLLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDO1lBQzNFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFDeEgsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBRXpILElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDN0IsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ2pELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksU0FBd0IsQ0FBQztRQUM3QixRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QyxLQUFLLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDdEI7Z0JBQ0UsU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUM7Z0JBQzdCLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzdHLE1BQU07UUFDVixDQUFDO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRyxjQUFjLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLGtCQUFrQixJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQTBDO1FBQ25FLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFDSCxDQUFDO0lBQ08sb0JBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDOUYsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO1lBQ0gsQ0FBQztZQUNELG9DQUFvQztZQUNwQyxNQUFNLENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDM0UsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUM7SUFDM0csQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDOzhIQXpXVSw2QkFBNkI7b0VBQTdCLDZCQUE2Qjt3Q0EwQjFCLFlBQVk7d0NBSFQsZUFBZTt3Q0FDZixTQUFTO3dDQUNULFlBQVk7Ozs7Ozs7OzJCQUdsQixRQUFROzJCQUNSLE9BQU87OzsyQkFNUCxRQUFRLEtBQVUsVUFBVTs7Ozs7Ozs7Ozs7WUN4RHJDLEFBREYsQUFGRiw4QkFBd0UsYUFFRSxhQUNzRTtZQU0xSSxBQUxBLG9GQUFxSCxpRUFLZDtZQVl6RyxpQkFBTTtZQUVOLCtFQUFnRztZQVFoRyxrQkFBc0Q7WUFDeEQsaUJBQU07WUFFTixxR0FDNkM7WUFHN0MscUJBQWlEO1lBRWpELGtDQVNDO1lBREMsQUFEQSxBQURBLEFBREEsMkpBQWEsdUJBQW1CLEtBQUMsb0lBQ3RCLGVBQVcsS0FBQywwSUFDVCxlQUFXLEtBQUMsOElBQ2IsdUJBQW1CLEtBQUM7WUFFakMscUNBQStFO1lBQzdFLHNCQUF5QjtZQUN6QixrQ0FBK0M7WUFPN0MsQUFOQSwrRUFBd0Usa0VBTUM7O1lBUzNFLEFBREEsK0VBQTRGLGtFQVUxQjtZQUdsRSxrQ0FBc0Q7WUFRcEQsQUFQQSwrRUFBd0Usa0VBT0M7O1lBRzNFLG1HQUFzQztZQVU1QyxBQURFLEFBREUsaUJBQVEsRUFDSixFQUNGO1lBR0osQUFERiwwQ0FBZ0MsZUFDcUM7WUFBbkMsb0pBQVMsd0JBQXdCLEtBQUM7WUFDaEUsaUZBQWdEO1lBTzlDLEFBREYsZ0NBQWdDLGtCQUN5RDtZQUFqQyxpSkFBUywwQkFBc0IsS0FBQztZQUFDLGFBQTZEOztZQUcxSixBQURFLEFBREUsQUFEc0osaUJBQVMsRUFDekosRUFDRixFQUNHOzs7WUFuSE4sd0NBQTBCO1lBSXFELGVBQWtCO1lBQWxCLHVDQUFrQjtZQUsxRixjQUFzQztZQUF0QywrREFBc0M7WUFjeEMsY0FBZ0I7WUFBaEIscUNBQWdCO1lBV1AsZUFBNEM7WUFBNUMscUVBQTRDO1lBUzNELGVBQWtEO1lBQ2xELEFBREEsMEZBQWtELHFDQUNaO1lBTWQsZUFBZ0M7WUFBQyxBQUFqQyxrREFBZ0MsMEJBQXNCO1lBRTlELGVBQWdDO1lBQWhDLGtEQUFnQztZQWUxQixlQUFpQztZQUFBLEFBQWpDLG9EQUFpQyxpSkFBcUM7WUFJekYsY0FBdUI7WUFBdkIscURBQXVCO1lBU1YsY0FBdUM7WUFBdkMseURBQXVDO1lBV3RDLGVBQXFCO1lBQXJCLDBDQUFxQjtZQWNkLGVBQXNCO1lBQXRCLGlEQUFzQjtZQU8yQyxlQUE2RDtZQUE3RCx5RkFBNkQ7OztpRkR4RjdJLDZCQUE2QjtjQU56QyxTQUFTOzJCQUVFLDRCQUE0QjswRUFPN0IsTUFBTTtrQkFBZCxLQUFLO1lBQ0csbUJBQW1CO2tCQUEzQixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLHdCQUF3QjtrQkFBaEMsS0FBSztZQUNPLFNBQVM7a0JBQXJCLEtBQUs7WUFLRywwQkFBMEI7a0JBQWxDLEtBQUs7WUFFRyx1QkFBdUI7a0JBQS9CLEtBQUs7WUFHSSxlQUFlO2tCQUF4QixNQUFNO1lBQ0csUUFBUTtrQkFBakIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU07WUFJMkIsYUFBYTtrQkFBOUMsZUFBZTttQkFBQyxlQUFlO1lBQ21CLE9BQU87a0JBQXpELGVBQWU7bUJBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtZQUNsQixVQUFVO2tCQUF4QyxlQUFlO21CQUFDLFlBQVk7WUFDRCxTQUFTO2tCQUFwQyxZQUFZO21CQUFDLFlBQVk7WUFFYSxLQUFLO2tCQUEzQyxTQUFTO21CQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDakIsSUFBSTtrQkFBdkIsU0FBUzttQkFBQyxPQUFPO1lBRVcsY0FBYztrQkFBMUMsU0FBUzttQkFBQyxnQkFBZ0I7WUFDSCxTQUFTO2tCQUFoQyxTQUFTO21CQUFDLFdBQVc7WUFHcUIsZUFBZTtrQkFBekQsU0FBUzttQkFBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOztrRkFuQzlCLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRIZWFkZXJSb3dEZWYsIE1hdE5vRGF0YVJvdywgTWF0Um93RGVmLCBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRmlsdGVyQmFyQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi9maWx0ZXItYmFyL21vZGVscy9maWx0ZXItYmFyLWNoYW5nZS1ldmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEh0bWxFbGVtZW50UGFyc2VIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgU2F2ZUZpbGVIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3NhdmUtZmlsZS5oZWxwZXInO1xyXG5pbXBvcnQgeyBET01TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBESVNBQkxFX0VYUE9SVF9BVFRSSUJVVEVfTkFNRSB9IGZyb20gJy4vY29uc3RhbnRzL2Rpc2FibGUtZXhwb3J0LWF0dHJpYnV0ZS1uYW1lLmNvbnN0JztcclxuaW1wb3J0IHsgRXhwb3J0Rm9ybWF0IH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2x1bW5Db25maWcgfSBmcm9tICcuL21vZGVscy9jb2x1bW4tY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgTXVsdGlGdW5jdGlvbmFsVGFibGVDb25maWcgfSBmcm9tICcuL21vZGVscy9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvc2VsZWN0ZWQtY29sdW1uLWxvY2FsLXN0b3JhZ2UtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU3RhdHVzRGlzcGxheUNvbmZpZyB9IGZyb20gJy4uL3N0YXR1cy1kaXNwbGF5L21vZGVscy9zdGF0dXMtZGlzcGxheS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXItYmFyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICd0bGQtbXVsdGktZnVuY3Rpb25hbC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlGdW5jdGlvbmFsVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIHJlYWRvbmx5IG1hdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSk7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnPFQ+O1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRWxlbWVudHMhOiBUW107XHJcbiAgQElucHV0KCkgdHJhY2tCeUZuITogKGl4OiBudW1iZXIsIHJvdzogVCkgPT4gc3RyaW5nIHwgbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRXJyb3JFbGVtZW50cyE6IFRbXTtcclxuICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uKHZhbHVlOiBUW10pIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnNldFNlbGVjdGlvbiguLi4odmFsdWUgPz8gW10pKTtcclxuICB9XHJcblxyXG4gIC8vIFNldCB0aGlzIHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgY2hlY2tib3hlcyBvbmx5IG9uIHJvdyBob3Zlci5cclxuICBASW5wdXQoKSBpc1Jvd0NoZWNrYm94QWx3YXlzVmlzaWJsZSA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVQcmVzZWxlY3RlZEl0ZW1zID0gZmFsc2U7XHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJCYXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckJhckNoYW5nZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBleHBvcnRlZDogRXZlbnRFbWl0dGVyPFRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBPYnNlcnZhYmxlPFRbXT4gPSB0aGlzLm1hdFNlbGVjdGlvbi5jaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKCgpID0+IHsgcmV0dXJuIHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkOyB9KSk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gUHJvcGVydGllcyBmb3IgbWF0IHRhYmxlIHdyYXBwZXJcclxuICBAQ29udGVudENoaWxkcmVuKE1hdEhlYWRlclJvd0RlZikgaGVhZGVyUm93RGVmcyE6IFF1ZXJ5TGlzdDxNYXRIZWFkZXJSb3dEZWY+O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0Um93RGVmLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJvd0RlZnMhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPFQ+PjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdENvbHVtbkRlZikgY29sdW1uRGVmcyE6IFF1ZXJ5TGlzdDxNYXRDb2x1bW5EZWY+O1xyXG4gIEBDb250ZW50Q2hpbGQoTWF0Tm9EYXRhUm93KSBub0RhdGFSb3chOiBNYXROb0RhdGFSb3c7XHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlITogTWF0VGFibGU8VD47XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0ITogTWF0U29ydDtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGVDb250YWluZXInKSB0YWJsZUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlckJhcicpIGZpbHRlckJhciE6IEZpbHRlckJhckNvbXBvbmVudDtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHRhYmxlRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBwcmVzZWxlY3RlZEl0ZW1zITogVFtdO1xyXG5cclxuICBnZXQgaWdub3JlQXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIERJU0FCTEVfRVhQT1JUX0FUVFJJQlVURV9OQU1FIH1cclxuICBkaXNwbGF5Q29sdW1ucyE6IHN0cmluZ1tdO1xyXG5cclxuICBjb2x1bW5TZWxlY3RBY3RpdmUhOiBib29sZWFuO1xyXG4gIGV4cG9ydEFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgbm9EYXRhUm93QWN0aXZlITogYm9vbGVhbjtcclxuXHJcbiAgZmlsdGVycyE6IEZpbHRlckJhckNoYW5nZUV2ZW50O1xyXG4gIGZpbHRlckJhclZpc2libGUhOiBib29sZWFuO1xyXG5cclxuICBoaWRlU2VhcmNoVG9vbHRpcCE6IGJvb2xlYW47XHJcbiAgc2hvd1NlYXJjaCE6IGJvb2xlYW47XHJcbiAgc2hvd1NlYXJjaENsZWFyQnV0dG9uITogYm9vbGVhbjtcclxuICBzZWFyY2hUaXRsZSE6IHN0cmluZztcclxuICBzZWFyY2hUb29sdGlwITogc3RyaW5nO1xyXG5cclxuICBub0RhdGFSb3dDb25maWchOiBTdGF0dXNEaXNwbGF5Q29uZmlnO1xyXG4gIG5vRGF0YVJvd0ljb24gPSBcIm1hbmFnZV9zZWFyY2hcIjtcclxuXHJcbiAgY29uZmlndXJhYmxlQ29sdW1ucyE6IENvbHVtbkNvbmZpZ1tdO1xyXG4gIGJhdGNoU2VsZWN0ZWRFbmFibGVkITogYm9vbGVhbjtcclxuXHJcbiAgLy8gaXMgdXNlZCBpbiBodG1sIHRvIGRpc3BsYXkgYmF0Y2ggY2hlY2tib3ggb24gaG92ZXJlZCByb3dcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGhvdmVyZWRSb3c6IGFueTtcclxuXHJcbiAgLy8gcHJvcGVydGllcyBmb3Igb3ZlcmZsb3cgc2Nyb2xsaW5nIHdpdGggbW91c2UgY2xpY2tcclxuICB0YWJsZU92ZXJmbG93ITogYm9vbGVhbjtcclxuICBwcml2YXRlIHNjcm9sbE1vdmVtZW50ITogbnVtYmVyIHwgbnVsbDtcclxuICBwcml2YXRlIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIHN0YXJ0WCA9IDA7XHJcbiAgcHJpdmF0ZSBzdGFydFkgPSAwO1xyXG4gIHByaXZhdGUgc2Nyb2xsTGVmdCA9IDA7XHJcbiAgcHJpdmF0ZSBzY3JvbGxUb3AgPSAwO1xyXG5cclxuICBnZXQgZmlsdGVyQWN0aXZlKCkgeyByZXR1cm4gdGhpcy5jb25maWcuZmlsdGVyPy5lbmFibGVkOyB9XHJcbiAgZ2V0IHNob3dGaWx0ZXJUb2dnbGUoKSB7IHJldHVybiAhdGhpcy5jb25maWcuZmlsdGVyPy5oaWRlRmlsdGVyVG9nZ2xlOyB9XHJcblxyXG4gIGdldCBzaG93RmlsdGVyUmVzZXQoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWx0ZXI/LnNldHRpbmdzLmZpbHRlcnM/LmZpbmQoZmlsdGVyID0+IGZpbHRlci5zZWxlY3RlZFZhbHVlcz8ubGVuZ3RoKSB9XHJcblxyXG4gIHByaXZhdGUgbG9jYWxTdG9yYWdlVmFsdWUhOiBTZWxlY3RlZENvbHVtbkxvY2FsU3RvcmFnZUNvbmZpZztcclxuICByZWFkb25seSBiYXRjaENvbHVtbk5hbWUgPSBcImJhdGNoXCI7XHJcbiAgcmVhZG9ubHkgY29sdW1uU2VsZWN0Q29sdW1uTmFtZSA9IFwiY29sdW1uU2VsZWN0XCI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZG9tU2VydmljZTogRE9NU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XHJcblxyXG4gIC8vI3JlZ2lvbiBBbmd1bGFyIGxpZmVjeWNsZSBob29rc1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWFkRnJvbUxvY2FsU3RvcmFnZSgpO1xyXG4gICAgdGhpcy5zZXRGaWx0ZXJWaXNpYmlsaXR5KCk7XHJcbiAgICB0aGlzLnNldENvbHVtblNlbGVjdFByb3BlcnRpZXMoKTtcclxuICAgIHRoaXMuc2V0RXhwb3J0UHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5zZXROb0RhdGFSb3dQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnByZXNlbGVjdGVkSXRlbXMgPSB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZDtcclxuICAgIHRoaXMuc2VhcmNoVG9vbHRpcCA9IHRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LnNlYXJjaFRvb2x0aXAgPz8gJ0ZJTFRFUl9CQVIuU0VBUkNIX1RPT0xUSVAnO1xyXG4gICAgdGhpcy5zZWFyY2hUaXRsZSA9IHRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LnNlYXJjaFRpdGxlID8/ICdGSUxURVJfQkFSLlNFQVJDSCc7XHJcbiAgICB0aGlzLnNob3dTZWFyY2ggPSAhdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uaGlkZVNlYXJjaDtcclxuICAgIHRoaXMuc2hvd1NlYXJjaENsZWFyQnV0dG9uID0gdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uc2hvd1NlYXJjaENsZWFyQnV0dG9uID8/IHRydWU7XHJcbiAgICB0aGlzLmhpZGVTZWFyY2hUb29sdGlwID0gIXRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LmhpZGVUb29sdGlwO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgdGhpcy5jb2x1bW5EZWZzLmZvckVhY2goY29sdW1uRGVmID0+IHRoaXMudGFibGUuYWRkQ29sdW1uRGVmKGNvbHVtbkRlZikpO1xyXG4gICAgdGhpcy5yb3dEZWZzLmZvckVhY2gocm93RGVmID0+IHRoaXMudGFibGUuYWRkUm93RGVmKHJvd0RlZikpO1xyXG4gICAgdGhpcy5oZWFkZXJSb3dEZWZzLmZvckVhY2goaGVhZGVyUm93RGVmID0+IHRoaXMudGFibGUuYWRkSGVhZGVyUm93RGVmKGhlYWRlclJvd0RlZikpO1xyXG4gICAgdGhpcy5oZWFkZXJSb3dEZWZzLmZvckVhY2goaGVhZGVyUm93RGVmID0+IHRoaXMudGFibGUuYWRkSGVhZGVyUm93RGVmKGhlYWRlclJvd0RlZikpO1xyXG4gICAgdGhpcy50YWJsZS5zZXROb0RhdGFSb3codGhpcy5ub0RhdGFSb3cpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWcuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgc2VhcmNoKGV2ZW50OiB7IHRhcmdldDogeyB2YWx1ZTogc3RyaW5nIH0gfSB8IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8udmFsdWU7XHJcbiAgICB0aGlzLmNvbmZpZy5maWx0ZXIhLnNldHRpbmdzLnNlYXJjaElucHV0ID0gaW5wdXQ7XHJcbiAgICB0aGlzLmZpbHRlckJhckNoYW5nZS5lbWl0KHsgLi4udGhpcy5maWx0ZXJzLCBpbnB1dCB9KTsgICAgXHJcbiAgfVxyXG5cclxuICB1cGRhdGVEaXNwbGF5Q29sdW1ucyhpbml0aWFsID0gZmFsc2UpIHtcclxuICAgIHRoaXMuYmF0Y2hTZWxlY3RlZEVuYWJsZWQgPSB0aGlzLmNvbmZpZy5iYXRjaENvbmZpZz8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmNvbmZpZy5jb2x1bW5TZWxlY3Q/LmNvbHVtbnMgPz8gW107XHJcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zID0gW107XHJcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5ub3RDb25maWd1cmFibGUpO1xyXG5cclxuICAgIGlmICh0aGlzLmJhdGNoU2VsZWN0ZWRFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaCh0aGlzLmJhdGNoQ29sdW1uTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhbGxDb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9jYWxTdG9yYWdlVmFsdWUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID8/IHt9O1xyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBpZiAoaW5pdGlhbCkge1xyXG4gICAgICAgIGNvbHVtbi5zZWxlY3RlZCA9IGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnM/Lltjb2x1bW4ubmFtZV0gPz8gY29sdW1uLnNlbGVjdGVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucyFbY29sdW1uLm5hbWVdID0gY29sdW1uLnNlbGVjdGVkO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoY29sdW1uLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucy5wdXNoKGNvbHVtbi5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy5jb2x1bW5TZWxlY3RBY3RpdmUpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucy5wdXNoKHRoaXMuY29sdW1uU2VsZWN0Q29sdW1uTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpbml0aWFsKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlTG9jYWxTdG9yYWdlKGxvY2FsU3RvcmFnZVZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlckJhcigpIHtcclxuICAgIGNvbnN0IGxvY2Fsc3RvcmFnZU9iamVjdCA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPz8ge307XHJcbiAgICBpZiAoIWxvY2Fsc3RvcmFnZU9iamVjdC5maWx0ZXIpIHtcclxuICAgICAgbG9jYWxzdG9yYWdlT2JqZWN0LmZpbHRlciA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyQmFyVmlzaWJsZSA9ICF0aGlzLmZpbHRlckJhclZpc2libGU7XHJcbiAgICBsb2NhbHN0b3JhZ2VPYmplY3QuZmlsdGVyLnZpc2libGUgPSB0aGlzLmZpbHRlckJhclZpc2libGU7XHJcbiAgICB0aGlzLnVwZGF0ZUxvY2FsU3RvcmFnZShsb2NhbHN0b3JhZ2VPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyc0NoYW5nZWQoZmlsdGVyczogRmlsdGVyQmFyQ2hhbmdlRXZlbnQpIHtcclxuICAgIHRoaXMuZmlsdGVycyA9IHsuLi5maWx0ZXJzLCBpbnB1dDogdGhpcy5jb25maWcuZmlsdGVyIS5zZXR0aW5ncy5zZWFyY2hJbnB1dCA/PyAnJ307XHJcbiAgICB0aGlzLmZpbHRlckJhckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5maWx0ZXI/LnNldHRpbmdzLmZpbHRlcnM/LmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICBmaWx0ZXIuc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5maWx0ZXJCYXIucmVtb3ZlQWxsRmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0KCkge1xyXG4gICAgdGhpcy5jb25maWcuZGF0YVNvdXJjZS5jb25uZWN0KCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgdGhpcy5leHBvcnRlZC5lbWl0KGRhdGEpO1xyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuZXhwb3J0Py5maWxlT3B0aW9ucykge1xyXG4gICAgICB0aGlzLmV4cG9ydFRvRmlsZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRFbGVtZW50KGVsZW1lbnQ6IFQpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodGVkRWxlbWVudHM/LmluY2x1ZGVzKGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0RXJyb3JFbGVtZW50KGVsZW1lbnQ6IFQpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodGVkRXJyb3JFbGVtZW50cz8uaW5jbHVkZXMoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gTWV0aG9kcyBmb3IgYmF0Y2ggc2VsZWN0aW9uXHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuY29uZmlnLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XHJcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVBbGxSb3dTZWxlY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcclxuICAgICAgaWYgKHRoaXMuZGlzYWJsZVByZXNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAvLyBkZXNlbGVjdCBvbmx5IHRob3NlIGl0ZW1zIHdoaWNoIHdlcmUgbm90IGFscmVhZHkgcHJlc2VsZWN0ZWRcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdGlvbi5kZXNlbGVjdChcclxuICAgICAgICAgIC4uLnRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcihlbG0gPT4gIXRoaXMucHJlc2VsZWN0ZWRJdGVtcy5tYXAoZWxtID0+IGVsbSkuaW5jbHVkZXMoZWxtKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdCguLi50aGlzLmNvbmZpZy5kYXRhU291cmNlLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRWxlbWVudFNlbGVjdGlvbihlbGVtZW50OiBUKSB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdGlvbi50b2dnbGUoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQucGFnZVggLSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcclxuICAgIHRoaXMuc3RhcnRZID0gZXZlbnQucGFnZVkgLSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgdGhpcy5zY3JvbGxMZWZ0ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XHJcbiAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XHJcblxyXG4gICAgLy8gY2FuY2VsaW5nIGFueSBwcmV2aW91cyBhbmltYXRpb24gZnJhbWVcclxuICAgIGlmICh0aGlzLnNjcm9sbE1vdmVtZW50ICE9PSBudWxsKSB7XHJcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2Nyb2xsTW92ZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5jaGVja1RhYmxlT3ZlcmZsb3coKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgIC8vIHVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSBmb3Igc21vb3RoZXIgdXBkYXRlc1xyXG4gICAgIGlmICh0aGlzLnNjcm9sbE1vdmVtZW50ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsTW92ZW1lbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy50YWJsZU92ZXJmbG93KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHggPSBldmVudC5wYWdlWCAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICAgIGNvbnN0IHkgPSBldmVudC5wYWdlWSAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcblxyXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBtb3ZlbWVudFxyXG4gICAgICAgIGNvbnN0IHdhbGtYID0gKHggLSB0aGlzLnN0YXJ0WCkgKiAyO1xyXG4gICAgICAgIGNvbnN0IHdhbGtZID0gKHkgLSB0aGlzLnN0YXJ0WSkgKiAyO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGluZyBzY3JvbGwgcG9zaXRpb25zXHJcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQgLSB3YWxrWDtcclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxUb3AgLSB3YWxrWTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBvbk1vdXNlVXAoKSB7XHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBjYW5jZWxpbmcgYW55IHBlbmRpbmcgYW5pbWF0aW9uXHJcbiAgICBpZiAodGhpcy5zY3JvbGxNb3ZlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbE1vdmVtZW50KTtcclxuICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIGNoZWNrVGFibGVPdmVyZmxvdygpOiB2b2lkIHtcclxuICAgIC8vIHdoZW4gZGF0YSBpcyBhdmFpbGFibGUgd2Ugc2hvdWxkIGNoZWNrIG9uY2UgZm9yIHRhYmxlIG92ZXJmbG93XHJcbiAgICAvLyB3aGVuIHRoZXJlIHdhc250IG92ZXJmbG93LCBidXQgd2lkdGggb2YgdGhlIHRhYmxlIGJlY2FtZSBiaWdnZXIsIHRoZW4gd2UgYXJlIHJlc2V0aW5nIHRhYmxlT3ZlcmZsb3cgdmFyaWFibGVcclxuICAgIC8vIHNhbWUgZm9yIHdoZW4gdGhlcmUgd2FzIG92ZXJmbG93LCBidXQgc2l6ZSBvZiB0aGUgdGFibGUgaXMgc2FtZSBhcyBjb250YWluZXIsIHNvIG92ZXJmbG93IGlzIGdvbmUgYW5kIHdlIHJlc2V0aW5nIHRhYmxlT3ZlcmZsb3cgdmFyaWFibGUgYWdhaW5cclxuICAgIGlmICgodGhpcy5jb25maWcuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAmJiAgdGhpcy50YWJsZU92ZXJmbG93ID09PSB1bmRlZmluZWQpIHx8XHJcbiAgICAgICghdGhpcy50YWJsZU92ZXJmbG93ICYmIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA8ICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB8fFxyXG4gICAgICAodGhpcy50YWJsZU92ZXJmbG93ICYmIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA9PT0gdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA8IHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgIHRoaXMudGFibGVPdmVyZmxvdyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudGFibGVPdmVyZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9GaWxlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zPy5zYXZlVG9GaWxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZmlsZVN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZXh0ZW5zaW9uITogRXhwb3J0Rm9ybWF0O1xyXG4gICAgc3dpdGNoICh0aGlzLmNvbmZpZy5leHBvcnQuZmlsZU9wdGlvbnMuZm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgRXhwb3J0Rm9ybWF0LkNTVjpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBleHRlbnNpb24gPSBFeHBvcnRGb3JtYXQuQ1NWO1xyXG4gICAgICAgIGZpbGVTdHJpbmcgPSBIdG1sRWxlbWVudFBhcnNlSGVscGVyLnRhYmxlQXNDc3YodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5pZ25vcmVBdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNvbnN0IHRyYW5zbGF0ZWRGaWxlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLmV4cG9ydC5maWxlT3B0aW9ucy5maWxlTmFtZSk7XHJcbiAgICBTYXZlRmlsZUhlbHBlci5zYXZlRmlsZShmaWxlU3RyaW5nLCBgJHt0cmFuc2xhdGVkRmlsZU5hbWV9LiR7ZXh0ZW5zaW9ufWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVMb2NhbFN0b3JhZ2UobmV3VmFsdWU6IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5ICYmIG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LnNldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHJlYWRGcm9tTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxvY2FsU3RvcmFnZUtleSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZVN0cmluZyA9IHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5KTtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICAgICAgY2F0Y2gge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtblNlbGVjdFByb3BlcnRpZXMoKSB7XHJcbiAgICB0aGlzLmNvbHVtblNlbGVjdEFjdGl2ZSA9IHRoaXMuY29uZmlnLmNvbHVtblNlbGVjdD8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlRGlzcGxheUNvbHVtbnModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlclZpc2liaWxpdHkoKSB7XHJcbiAgICB0aGlzLmZpbHRlckJhclZpc2libGUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlPy5maWx0ZXI/LnZpc2libGUgPz8gdGhpcy5jb25maWc/LmZpbHRlcj8udmlzaWJsZSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Tm9EYXRhUm93UHJvcGVydGllcygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5ub0RhdGFSb3cpIHtcclxuICAgICAgdGhpcy5ub0RhdGFSb3dBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0NvbmZpZyA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdztcclxuICAgICAgdGhpcy5ub0RhdGFSb3dDb25maWcuaWNvbiA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdz8uaWNvbiA/PyB0aGlzLm5vRGF0YVJvd0ljb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEV4cG9ydFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZXhwb3J0Py5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0QWN0aXZlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBbbmdDbGFzcy5sdC1tZF09XCInbW9iaWxlJ1wiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIwLjc1cmVtXCI+XHJcblxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dC5sdC1tZD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwLmx0LW1kPVwiMC43NXJlbVwiPlxyXG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQubHQtbWQ9XCJjb2x1bW5cIiBmeExheW91dEdhcD1cIjAuNzVyZW1cIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhMYXlvdXRBbGlnbi5sdC1tZD1cInN0YXJ0IHN0YXJ0XCIgY2xhc3M9XCJhY3Rpb24tcm93XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtZGF0YVwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnktYWNjZW50LWRhcmtlclwiICpuZ0lmPVwiZXhwb3J0QWN0aXZlXCIgKGNsaWNrKT1cImV4cG9ydCgpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmNsb3VkX2Rvd25sb2FkPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7J01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuRVhQT1JUJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJBY3RpdmUgJiYgc2hvd0ZpbHRlclRvZ2dsZVwiIGZ4RmxleCBmeExheW91dEdhcD1cIjAuNXJlbVwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIFtjbGFzcy5maWx0ZXItYWN0aXZlXT1cImZpbHRlckJhclZpc2libGVcIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5LWFjY2VudC1kYXJrZXJcIiAoY2xpY2spPVwidG9nZ2xlRmlsdGVyQmFyKClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5maWx0ZXJfbGlzdDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPnt7J01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuRklMVEVSX1RPR0dMRScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICBcclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0ZpbHRlclJlc2V0XCIgY2xhc3M9XCJjbGVhci1maWx0ZXJzLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dTZWFyY2hcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBjbGFzcz1cIndpbGQtc2VhcmNoLXdyYXBwZXJcIj5cclxuICAgICAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cImhpZGVTZWFyY2hUb29sdGlwID8gJycgOiBzZWFyY2hUb29sdGlwIHwgdHJhbnNsYXRlXCI+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgPGlucHV0ICN3aWxkU2VhcmNoIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFRpdGxlIHwgdHJhbnNsYXRlXCIgKGtleXVwKT1cInNlYXJjaCgkZXZlbnQpXCI+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93U2VhcmNoQ2xlYXJCdXR0b25cIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJ3aWxkLXNlYXJjaC1jbGVhci1idG5cIiAoY2xpY2spPVwid2lsZFNlYXJjaC52YWx1ZSA9ICcnOyBzZWFyY2goeyB0YXJnZXQ6IHsgdmFsdWU6ICcnIH0gfSlcIj5cclxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthZGRpdGlvbmFsQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDx0bGQtZmlsdGVyLWJhciAqbmdJZj1cImNvbmZpZy5maWx0ZXIgJiYgY29uZmlnLmZpbHRlci5lbmFibGVkXCIgI2ZpbHRlckJhciBbZmlsdGVyUm93VmlzaWJsZV09XCJmaWx0ZXJCYXJWaXNpYmxlXCIgW3NldHRpbmdzXT1cImNvbmZpZy5maWx0ZXIuc2V0dGluZ3NcIlxyXG4gICAgKGZpbHRlckJhckNoYW5nZSk9XCJmaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgPC90bGQtZmlsdGVyLWJhcj5cclxuXHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JhdGNoQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XHJcblxyXG4gIDxkaXYgXHJcbiAgICAjdGFibGVDb250YWluZXJcclxuICAgIGNsYXNzPVwidGFibGUtb3ZlcmZsb3dcIlxyXG4gICAgW2NsYXNzLnRhYmxlLXN0aWNreS1oZWFkZXJdPVwiY29uZmlnPy5zdGlja3lIZWFkZXJcIlxyXG4gICAgW2NsYXNzLnRhYmxlLWRyYWdhYmxlXT1cInRhYmxlT3ZlcmZsb3dcIlxyXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcclxuICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgpXCJcclxuICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VVcCgpXCJcclxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gICAgPHRhYmxlICN0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwiY29uZmlnLmRhdGFTb3VyY2VcIiBbdHJhY2tCeV09XCJ0cmFja0J5Rm5cIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiYmF0Y2hDb2x1bW5OYW1lXCI+XHJcbiAgICAgICAgPHRoIGNsYXNzPVwicm93LXNlbGVjdFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBkaXNhYmxlLWV4cG9ydD5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggW21hdFRvb2x0aXBdPVwiJ01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuU0VMRUNUX0FMTCcgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiY29uZmlnLmJhdGNoQ29uZmlnIS5jaGVja0JveGVzRGlzYWJsZWRcIiAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd1NlbGVjdGlvbigpXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwibWF0U2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwibWF0U2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuU0VMRUNUJyB8IHRyYW5zbGF0ZVwiICpuZ0lmPVwiaXNSb3dDaGVja2JveEFsd2F5c1Zpc2libGUgfHwgaG92ZXJlZFJvdyA9PT0gZWxlbWVudCB8fCBtYXRTZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KVwiIFxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29uZmlnLmJhdGNoQ29uZmlnIS5jaGVja0JveGVzRGlzYWJsZWQgfHwgKHByZXNlbGVjdGVkSXRlbXMuaW5jbHVkZXMoZWxlbWVudCkgJiYgZGlzYWJsZVByZXNlbGVjdGVkSXRlbXMpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRWxlbWVudFNlbGVjdGlvbihlbGVtZW50KVwiIFtjaGVja2VkXT1cIm1hdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGVsZW1lbnQpXCI+XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5Q29sdW1uczsgc3RpY2t5OiBjb25maWc/LnN0aWNreUhlYWRlciA/PyBmYWxzZVwiPjwvdHI+XHJcbiAgICAgIDx0ciBcclxuICAgICAgICBtYXQtcm93IFxyXG4gICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBcclxuICAgICAgICBjb2x1bW5zOiBkaXNwbGF5Q29sdW1uc1wiIFxyXG4gICAgICAgIChjbGljayk9XCJjb25maWc/LnJvd0NsaWNrQ2FsbGJhY2sgJiYgIWNvbmZpZz8uZGlzYWJsZVJvd0NsaWNrKHJvdykgPyBjb25maWc/LnJvd0NsaWNrQ2FsbGJhY2socm93KSA6IG51bGxcIlxyXG4gICAgICAgIChtb3VzZW92ZXIpPVwiaG92ZXJlZFJvdyA9IHJvd1wiIFxyXG4gICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRSb3cgPSBudWxsXCIgXHJcbiAgICAgICAgW2NsYXNzLnJvdy1jbGlja2FibGVdPVwiY29uZmlnPy5yb3dDbGlja0NhbGxiYWNrICYmICFjb25maWc/LmRpc2FibGVSb3dDbGljayhyb3cpXCIgXHJcbiAgICAgICAgW2NsYXNzLmhpZ2hsaWdodC1lcnJvcl09XCJoaWdobGlnaHRFcnJvckVsZW1lbnQocm93KVwiIFxyXG4gICAgICAgIFtjbGFzcy5oaWdobGlnaHRdPVwicm93ID09PSBob3ZlcmVkUm93IHx8IGhpZ2hsaWdodEVsZW1lbnQocm93KVwiPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICBcclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblNlbGVjdENvbHVtbk5hbWVcIj5cclxuICAgICAgICA8dGggY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1zZWxlY3Rvci13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb2x1bW4tc2VsZWN0b3JcIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5LWFjY2VudC1kYXJrZXJcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29sdW1uTWVudVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5tb3JlX3ZlcnQ8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhUm93QWN0aXZlXCI+XHJcbiAgICAgICAgPHRyICptYXROb0RhdGFSb3c+XHJcbiAgICAgICAgICA8IS0tIGFkZCByYW5kb20gbnVtYmVyIHRvIG1ha2Ugc3VyZSBpdCB0YWtlcyBmdWxsIHdpZHRoIC0tPlxyXG4gICAgICAgICAgPHRkIGNvbHNwYW49XCI5OVwiPlxyXG4gICAgICAgICAgICA8bGliLXN0YXR1cy1kaXNwbGF5IFtjb25maWddPVwibm9EYXRhUm93Q29uZmlnXCI+PC9saWItc3RhdHVzLWRpc3BsYXk+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC90YWJsZT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bWF0LW1lbnUgI2NvbHVtbk1lbnU9XCJtYXRNZW51XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbHVtbi1zZWxlY3QtbWVudVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb25maWd1cmFibGVDb2x1bW5zXCI+XHJcbiAgICAgIDxtYXQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJjb2x1bW4uc2VsZWN0ZWRcIj5cclxuICAgICAgICB7e2NvbHVtbi5kaXNwbGF5TmFtZSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbi1zZWxlY3Qtc2F2ZVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnktYWNjZW50LWRhcmtlclwiIChjbGljayk9XCJ1cGRhdGVEaXNwbGF5Q29sdW1ucygpXCI+e3sgXCJNVUxUSV9GVU5DVElPTkFMX1RBQkxFLkNPTFVNTl9TRUxFQ1RfU0FWRVwiIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9tYXQtbWVudT5cclxuIl19
607
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBbUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRyxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNQbEMsa0NBQXFIO0lBQW5CLDRMQUFTLGVBQVEsS0FBQztJQUNsSCxnQ0FBc0M7SUFBQSw4QkFB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QUVhLEtBQUs7a0JBQTNDLFNBQVM7bUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUNqQixJQUFJO2tCQUF2QixTQUFTO21CQUFDLE9BQU87WUFFVyxjQUFjO2tCQUExQyxTQUFTO21CQUFDLGdCQUFnQjtZQUNILFNBQVM7a0JBQWhDLFNBQVM7bUJBQUMsV0FBVztZQUdxQixlQUFlO2tCQUF6RCxTQUFTO21CQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O2tGQW5DOUIsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRDb2x1bW5EZWYsIE1hdEhlYWRlclJvd0RlZiwgTWF0Tm9EYXRhUm93LCBNYXRSb3dEZWYsIE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJDaGFuZ2VFdmVudCB9IGZyb20gJy4uL2ZpbHRlci1iYXIvbW9kZWxzL2ZpbHRlci1iYXItY2hhbmdlLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgSHRtbEVsZW1lbnRQYXJzZUhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBTYXZlRmlsZUhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvc2F2ZS1maWxlLmhlbHBlcic7XHJcbmltcG9ydCB7IERPTVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IERJU0FCTEVfRVhQT1JUX0FUVFJJQlVURV9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMvZGlzYWJsZS1leHBvcnQtYXR0cmlidXRlLW5hbWUuY29uc3QnO1xyXG5pbXBvcnQgeyBFeHBvcnRGb3JtYXQgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IENvbHVtbkNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2NvbHVtbi1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBNdWx0aUZ1bmN0aW9uYWxUYWJsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL211bHRpLWZ1bmN0aW9uYWwtdGFibGUtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWcgfSBmcm9tICcuL21vZGVscy9zZWxlY3RlZC1jb2x1bW4tbG9jYWwtc3RvcmFnZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTdGF0dXNEaXNwbGF5Q29uZmlnIH0gZnJvbSAnLi4vc3RhdHVzLWRpc3BsYXkvbW9kZWxzL3N0YXR1cy1kaXNwbGF5LWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlckJhckNvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlci1iYXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ3RsZC1tdWx0aS1mdW5jdGlvbmFsLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aUZ1bmN0aW9uYWxUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcmVhZG9ubHkgbWF0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcclxuXHJcbiAgQElucHV0KCkgY29uZmlnITogTXVsdGlGdW5jdGlvbmFsVGFibGVDb25maWc8VD47XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0ZWRFbGVtZW50cyE6IFRbXTtcclxuICBASW5wdXQoKSB0cmFja0J5Rm4hOiAoaXg6IG51bWJlciwgcm93OiBUKSA9PiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0ZWRFcnJvckVsZW1lbnRzITogVFtdO1xyXG4gIEBJbnB1dCgpIHNldCBzZWxlY3Rpb24odmFsdWU6IFRbXSkge1xyXG4gICAgdGhpcy5tYXRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKC4uLih2YWx1ZSA/PyBbXSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gU2V0IHRoaXMgdG8gZmFsc2UgaWYgeW91IHdhbnQgdG8gZGlzcGxheSBjaGVja2JveGVzIG9ubHkgb24gcm93IGhvdmVyLlxyXG4gIEBJbnB1dCgpIGlzUm93Q2hlY2tib3hBbHdheXNWaXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZVByZXNlbGVjdGVkSXRlbXMgPSBmYWxzZTtcclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dCBwcm9wZXJ0aWVzXHJcbiAgQE91dHB1dCgpIGZpbHRlckJhckNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbHRlckJhckNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIGV4cG9ydGVkOiBFdmVudEVtaXR0ZXI8VFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2U6IE9ic2VydmFibGU8VFtdPiA9IHRoaXMubWF0U2VsZWN0aW9uLmNoYW5nZWQuYXNPYnNlcnZhYmxlKCkucGlwZShtYXAoKCkgPT4geyByZXR1cm4gdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQ7IH0pKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzIGZvciBtYXQgdGFibGUgd3JhcHBlclxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0SGVhZGVyUm93RGVmKSBoZWFkZXJSb3dEZWZzITogUXVlcnlMaXN0PE1hdEhlYWRlclJvd0RlZj47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRSb3dEZWYsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm93RGVmcyE6IFF1ZXJ5TGlzdDxNYXRSb3dEZWY8VD4+O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0Q29sdW1uRGVmKSBjb2x1bW5EZWZzITogUXVlcnlMaXN0PE1hdENvbHVtbkRlZj47XHJcbiAgQENvbnRlbnRDaGlsZChNYXROb0RhdGFSb3cpIG5vRGF0YVJvdyE6IE1hdE5vRGF0YVJvdztcclxuXHJcbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGUhOiBNYXRUYWJsZTxUPjtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQhOiBNYXRTb3J0O1xyXG5cclxuICBAVmlld0NoaWxkKCd0YWJsZUNvbnRhaW5lcicpIHRhYmxlQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyQmFyJykgZmlsdGVyQmFyITogRmlsdGVyQmFyQ29tcG9uZW50O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgdGFibGVFbGVtZW50UmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIHByZXNlbGVjdGVkSXRlbXMhOiBUW107XHJcblxyXG4gIGdldCBpZ25vcmVBdHRyaWJ1dGVOYW1lKCkgeyByZXR1cm4gRElTQUJMRV9FWFBPUlRfQVRUUklCVVRFX05BTUUgfVxyXG4gIGRpc3BsYXlDb2x1bW5zITogc3RyaW5nW107XHJcblxyXG4gIGNvbHVtblNlbGVjdEFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgZXhwb3J0QWN0aXZlITogYm9vbGVhbjtcclxuICBub0RhdGFSb3dBY3RpdmUhOiBib29sZWFuO1xyXG5cclxuICBmaWx0ZXJzITogRmlsdGVyQmFyQ2hhbmdlRXZlbnQ7XHJcbiAgZmlsdGVyQmFyVmlzaWJsZSE6IGJvb2xlYW47XHJcblxyXG4gIGhpZGVTZWFyY2hUb29sdGlwITogYm9vbGVhbjtcclxuICBzaG93U2VhcmNoITogYm9vbGVhbjtcclxuICBzaG93U2VhcmNoQ2xlYXJCdXR0b24hOiBib29sZWFuO1xyXG4gIHNlYXJjaFRpdGxlITogc3RyaW5nO1xyXG4gIHNlYXJjaFRvb2x0aXAhOiBzdHJpbmc7XHJcblxyXG4gIG5vRGF0YVJvd0NvbmZpZyE6IFN0YXR1c0Rpc3BsYXlDb25maWc7XHJcbiAgbm9EYXRhUm93SWNvbiA9IFwibWFuYWdlX3NlYXJjaFwiO1xyXG5cclxuICBjb25maWd1cmFibGVDb2x1bW5zITogQ29sdW1uQ29uZmlnW107XHJcbiAgYmF0Y2hTZWxlY3RlZEVuYWJsZWQhOiBib29sZWFuO1xyXG5cclxuICAvLyBpcyB1c2VkIGluIGh0bWwgdG8gZGlzcGxheSBiYXRjaCBjaGVja2JveCBvbiBob3ZlcmVkIHJvd1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgaG92ZXJlZFJvdzogYW55O1xyXG5cclxuICAvLyBwcm9wZXJ0aWVzIGZvciBvdmVyZmxvdyBzY3JvbGxpbmcgd2l0aCBtb3VzZSBjbGlja1xyXG4gIHRhYmxlT3ZlcmZsb3chOiBib29sZWFuO1xyXG4gIHByaXZhdGUgc2Nyb2xsTW92ZW1lbnQhOiBudW1iZXIgfCBudWxsO1xyXG4gIHByaXZhdGUgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc3RhcnRYID0gMDtcclxuICBwcml2YXRlIHN0YXJ0WSA9IDA7XHJcbiAgcHJpdmF0ZSBzY3JvbGxMZWZ0ID0gMDtcclxuICBwcml2YXRlIHNjcm9sbFRvcCA9IDA7XHJcblxyXG4gIGdldCBmaWx0ZXJBY3RpdmUoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWx0ZXI/LmVuYWJsZWQ7IH1cclxuICBnZXQgc2hvd0ZpbHRlclRvZ2dsZSgpIHsgcmV0dXJuICF0aGlzLmNvbmZpZy5maWx0ZXI/LmhpZGVGaWx0ZXJUb2dnbGU7IH1cclxuXHJcbiAgZ2V0IHNob3dGaWx0ZXJSZXNldCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3MuZmlsdGVycz8uZmluZChmaWx0ZXIgPT4gZmlsdGVyLnNlbGVjdGVkVmFsdWVzPy5sZW5ndGgpIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VWYWx1ZSE6IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnO1xyXG4gIHJlYWRvbmx5IGJhdGNoQ29sdW1uTmFtZSA9IFwiYmF0Y2hcIjtcclxuICByZWFkb25seSBjb2x1bW5TZWxlY3RDb2x1bW5OYW1lID0gXCJjb2x1bW5TZWxlY3RcIjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkb21TZXJ2aWNlOiBET01TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgLy8jcmVnaW9uIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2tzXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlYWRGcm9tTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB0aGlzLnNldEZpbHRlclZpc2liaWxpdHkoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uU2VsZWN0UHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5zZXRFeHBvcnRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnNldE5vRGF0YVJvd1Byb3BlcnRpZXMoKTtcclxuICAgIHRoaXMucHJlc2VsZWN0ZWRJdGVtcyA9IHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkO1xyXG4gICAgdGhpcy5zZWFyY2hUb29sdGlwID0gdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uc2VhcmNoVG9vbHRpcCA/PyAnRklMVEVSX0JBUi5TRUFSQ0hfVE9PTFRJUCc7XHJcbiAgICB0aGlzLnNlYXJjaFRpdGxlID0gdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uc2VhcmNoVGl0bGUgPz8gJ0ZJTFRFUl9CQVIuU0VBUkNIJztcclxuICAgIHRoaXMuc2hvd1NlYXJjaCA9ICF0aGlzLmNvbmZpZy5maWx0ZXI/LnNldHRpbmdzPy5oaWRlU2VhcmNoO1xyXG4gICAgdGhpcy5zaG93U2VhcmNoQ2xlYXJCdXR0b24gPSB0aGlzLmNvbmZpZy5maWx0ZXI/LnNldHRpbmdzPy5zaG93U2VhcmNoQ2xlYXJCdXR0b24gPz8gdHJ1ZTtcclxuICAgIHRoaXMuaGlkZVNlYXJjaFRvb2x0aXAgPSAhdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uaGlkZVRvb2x0aXA7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICB0aGlzLmNvbHVtbkRlZnMuZm9yRWFjaChjb2x1bW5EZWYgPT4gdGhpcy50YWJsZS5hZGRDb2x1bW5EZWYoY29sdW1uRGVmKSk7XHJcbiAgICB0aGlzLnJvd0RlZnMuZm9yRWFjaChyb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRSb3dEZWYocm93RGVmKSk7XHJcbiAgICB0aGlzLmhlYWRlclJvd0RlZnMuZm9yRWFjaChoZWFkZXJSb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRIZWFkZXJSb3dEZWYoaGVhZGVyUm93RGVmKSk7XHJcbiAgICB0aGlzLmhlYWRlclJvd0RlZnMuZm9yRWFjaChoZWFkZXJSb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRIZWFkZXJSb3dEZWYoaGVhZGVyUm93RGVmKSk7XHJcbiAgICB0aGlzLnRhYmxlLnNldE5vRGF0YVJvdyh0aGlzLm5vRGF0YVJvdyk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBzZWFyY2goZXZlbnQ6IHsgdGFyZ2V0OiB7IHZhbHVlOiBzdHJpbmcgfSB9IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5wdXQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy52YWx1ZTtcclxuICAgIHRoaXMuY29uZmlnLmZpbHRlciEuc2V0dGluZ3Muc2VhcmNoSW5wdXQgPSBpbnB1dDtcclxuICAgIHRoaXMuZmlsdGVyQmFyQ2hhbmdlLmVtaXQoeyAuLi50aGlzLmZpbHRlcnMsIGlucHV0IH0pOyAgICBcclxuICB9XHJcblxyXG4gIHVwZGF0ZURpc3BsYXlDb2x1bW5zKGluaXRpYWwgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5iYXRjaFNlbGVjdGVkRW5hYmxlZCA9IHRoaXMuY29uZmlnLmJhdGNoQ29uZmlnPy5lbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtblNlbGVjdD8uY29sdW1ucyA/PyBbXTtcclxuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMgPSBbXTtcclxuICAgIHRoaXMuY29uZmlndXJhYmxlQ29sdW1ucyA9IGFsbENvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLm5vdENvbmZpZ3VyYWJsZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuYmF0Y2hTZWxlY3RlZEVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucy5wdXNoKHRoaXMuYmF0Y2hDb2x1bW5OYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWFsbENvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2VWYWx1ZSA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPz8ge307XHJcbiAgICBpZiAoIWxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnMpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGFsbENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChpbml0aWFsKSB7XHJcbiAgICAgICAgY29sdW1uLnNlbGVjdGVkID0gbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucz8uW2NvbHVtbi5uYW1lXSA/PyBjb2x1bW4uc2VsZWN0ZWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICBsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zIVtjb2x1bW4ubmFtZV0gPSBjb2x1bW4uc2VsZWN0ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmIChjb2x1bW4uc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlDb2x1bW5zLnB1c2goY29sdW1uLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0aGlzLmNvbHVtblNlbGVjdEFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5zLnB1c2godGhpcy5jb2x1bW5TZWxlY3RDb2x1bW5OYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWluaXRpYWwpIHtcclxuICAgICAgdGhpcy51cGRhdGVMb2NhbFN0b3JhZ2UobG9jYWxTdG9yYWdlVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRmlsdGVyQmFyKCkge1xyXG4gICAgY29uc3QgbG9jYWxzdG9yYWdlT2JqZWN0ID0gdGhpcy5sb2NhbFN0b3JhZ2VWYWx1ZSA/PyB7fTtcclxuICAgIGlmICghbG9jYWxzdG9yYWdlT2JqZWN0LmZpbHRlcikge1xyXG4gICAgICBsb2NhbHN0b3JhZ2VPYmplY3QuZmlsdGVyID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJCYXJWaXNpYmxlID0gIXRoaXMuZmlsdGVyQmFyVmlzaWJsZTtcclxuICAgIGxvY2Fsc3RvcmFnZU9iamVjdC5maWx0ZXIudmlzaWJsZSA9IHRoaXMuZmlsdGVyQmFyVmlzaWJsZTtcclxuICAgIHRoaXMudXBkYXRlTG9jYWxTdG9yYWdlKGxvY2Fsc3RvcmFnZU9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJzQ2hhbmdlZChmaWx0ZXJzOiBGaWx0ZXJCYXJDaGFuZ2VFdmVudCkge1xyXG4gICAgdGhpcy5maWx0ZXJzID0gey4uLmZpbHRlcnMsIGlucHV0OiB0aGlzLmNvbmZpZy5maWx0ZXIhLnNldHRpbmdzLnNlYXJjaElucHV0ID8/ICcnfTtcclxuICAgIHRoaXMuZmlsdGVyQmFyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzKTtcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVycygpIHtcclxuICAgIHRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3MuZmlsdGVycz8uZm9yRWFjaCgoZmlsdGVyKSA9PiB7XHJcbiAgICAgIGZpbHRlci5zZWxlY3RlZFZhbHVlcyA9IFtdO1xyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmZpbHRlckJhci5yZW1vdmVBbGxGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQoKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhU291cmNlLmNvbm5lY3QoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmV4cG9ydGVkLmVtaXQoZGF0YSk7XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0VG9GaWxlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZ2hsaWdodEVsZW1lbnQoZWxlbWVudDogVCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRFbGVtZW50cz8uaW5jbHVkZXMoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRFcnJvckVsZW1lbnQoZWxlbWVudDogVCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRFcnJvckVsZW1lbnRzPy5pbmNsdWRlcyhlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBNZXRob2RzIGZvciBiYXRjaCBzZWxlY3Rpb25cclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XHJcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5jb25maWcuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFJvd1NlbGVjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xyXG4gICAgICBpZiAodGhpcy5kaXNhYmxlUHJlc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgIC8vIGRlc2VsZWN0IG9ubHkgdGhvc2UgaXRlbXMgd2hpY2ggd2VyZSBub3QgYWxyZWFkeSBwcmVzZWxlY3RlZFxyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0aW9uLmRlc2VsZWN0KFxyXG4gICAgICAgICAgLi4udGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQuZmlsdGVyKGVsbSA9PiAhdGhpcy5wcmVzZWxlY3RlZEl0ZW1zLm1hcChlbG0gPT4gZWxtKS5pbmNsdWRlcyhlbG0pKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0aW9uLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuY29uZmlnLmRhdGFTb3VyY2UuZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVFbGVtZW50U2VsZWN0aW9uKGVsZW1lbnQ6IFQpIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnRvZ2dsZShlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZGlzYWJsZU92ZXJmbG93TW91c2VEcmFnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydFggPSBldmVudC5wYWdlWCAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5wYWdlWSAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICB0aGlzLnNjcm9sbExlZnQgPSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcclxuXHJcbiAgICAvLyBjYW5jZWxpbmcgYW55IHByZXZpb3VzIGFuaW1hdGlvbiBmcmFtZVxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsTW92ZW1lbnQgIT09IG51bGwpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY3JvbGxNb3ZlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZGlzYWJsZU92ZXJmbG93TW91c2VEcmFnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoZWNrVGFibGVPdmVyZmxvdygpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAgLy8gdXNpbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGZvciBzbW9vdGhlciB1cGRhdGVzXHJcbiAgICAgaWYgKHRoaXMuc2Nyb2xsTW92ZW1lbnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlT3ZlcmZsb3cpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgeCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XHJcbiAgICAgICAgY29uc3QgeSA9IGV2ZW50LnBhZ2VZIC0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIG1vdmVtZW50XHJcbiAgICAgICAgY29uc3Qgd2Fsa1ggPSAoeCAtIHRoaXMuc3RhcnRYKSAqIDI7XHJcbiAgICAgICAgY29uc3Qgd2Fsa1kgPSAoeSAtIHRoaXMuc3RhcnRZKSAqIDI7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0aW5nIHNjcm9sbCBwb3NpdGlvbnNcclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdCAtIHdhbGtYO1xyXG4gICAgICAgIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcCAtIHdhbGtZO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbE1vdmVtZW50ID0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIG9uTW91c2VVcCgpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5kaXNhYmxlT3ZlcmZsb3dNb3VzZURyYWcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBjYW5jZWxpbmcgYW55IHBlbmRpbmcgYW5pbWF0aW9uXHJcbiAgICBpZiAodGhpcy5zY3JvbGxNb3ZlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbE1vdmVtZW50KTtcclxuICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIGNoZWNrVGFibGVPdmVyZmxvdygpOiB2b2lkIHtcclxuICAgIC8vIHdoZW4gZGF0YSBpcyBhdmFpbGFibGUgd2Ugc2hvdWxkIGNoZWNrIG9uY2UgZm9yIHRhYmxlIG92ZXJmbG93XHJcbiAgICAvLyB3aGVuIHRoZXJlIHdhc250IG92ZXJmbG93LCBidXQgd2lkdGggb2YgdGhlIHRhYmxlIGJlY2FtZSBiaWdnZXIsIHRoZW4gd2UgYXJlIHJlc2V0aW5nIHRhYmxlT3ZlcmZsb3cgdmFyaWFibGVcclxuICAgIC8vIHNhbWUgZm9yIHdoZW4gdGhlcmUgd2FzIG92ZXJmbG93LCBidXQgc2l6ZSBvZiB0aGUgdGFibGUgaXMgc2FtZSBhcyBjb250YWluZXIsIHNvIG92ZXJmbG93IGlzIGdvbmUgYW5kIHdlIHJlc2V0aW5nIHRhYmxlT3ZlcmZsb3cgdmFyaWFibGUgYWdhaW5cclxuICAgIGlmICgodGhpcy5jb25maWcuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAmJiAgdGhpcy50YWJsZU92ZXJmbG93ID09PSB1bmRlZmluZWQpIHx8XHJcbiAgICAgICghdGhpcy50YWJsZU92ZXJmbG93ICYmIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA8ICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB8fFxyXG4gICAgICAodGhpcy50YWJsZU92ZXJmbG93ICYmIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA9PT0gdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA8IHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIHtcclxuICAgICAgICAgIHRoaXMudGFibGVPdmVyZmxvdyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudGFibGVPdmVyZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9GaWxlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zPy5zYXZlVG9GaWxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZmlsZVN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZXh0ZW5zaW9uITogRXhwb3J0Rm9ybWF0O1xyXG4gICAgc3dpdGNoICh0aGlzLmNvbmZpZy5leHBvcnQuZmlsZU9wdGlvbnMuZm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgRXhwb3J0Rm9ybWF0LkNTVjpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBleHRlbnNpb24gPSBFeHBvcnRGb3JtYXQuQ1NWO1xyXG4gICAgICAgIGZpbGVTdHJpbmcgPSBIdG1sRWxlbWVudFBhcnNlSGVscGVyLnRhYmxlQXNDc3YodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5pZ25vcmVBdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNvbnN0IHRyYW5zbGF0ZWRGaWxlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLmV4cG9ydC5maWxlT3B0aW9ucy5maWxlTmFtZSk7XHJcbiAgICBTYXZlRmlsZUhlbHBlci5zYXZlRmlsZShmaWxlU3RyaW5nLCBgJHt0cmFuc2xhdGVkRmlsZU5hbWV9LiR7ZXh0ZW5zaW9ufWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVMb2NhbFN0b3JhZ2UobmV3VmFsdWU6IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5ICYmIG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LnNldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHJlYWRGcm9tTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxvY2FsU3RvcmFnZUtleSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZVN0cmluZyA9IHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5KTtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICAgICAgY2F0Y2gge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtblNlbGVjdFByb3BlcnRpZXMoKSB7XHJcbiAgICB0aGlzLmNvbHVtblNlbGVjdEFjdGl2ZSA9IHRoaXMuY29uZmlnLmNvbHVtblNlbGVjdD8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlRGlzcGxheUNvbHVtbnModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlclZpc2liaWxpdHkoKSB7XHJcbiAgICB0aGlzLmZpbHRlckJhclZpc2libGUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlPy5maWx0ZXI/LnZpc2libGUgPz8gdGhpcy5jb25maWc/LmZpbHRlcj8udmlzaWJsZSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Tm9EYXRhUm93UHJvcGVydGllcygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5ub0RhdGFSb3cpIHtcclxuICAgICAgdGhpcy5ub0RhdGFSb3dBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0NvbmZpZyA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdztcclxuICAgICAgdGhpcy5ub0RhdGFSb3dDb25maWcuaWNvbiA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdz8uaWNvbiA/PyB0aGlzLm5vRGF0YVJvd0ljb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEV4cG9ydFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZXhwb3J0Py5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0QWN0aXZlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBbbmdDbGFzcy5sdC1tZF09XCInbW9iaWxlJ1wiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIwLjc1cmVtXCI+XHJcblxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dC5sdC1tZD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwLmx0LW1kPVwiMC43NXJlbVwiPlxyXG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQubHQtbWQ9XCJjb2x1bW5cIiBmeExheW91dEdhcD1cIjAuNzVyZW1cIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhMYXlvdXRBbGlnbi5sdC1tZD1cInN0YXJ0IHN0YXJ0XCIgY2xhc3M9XCJhY3Rpb24tcm93XCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtZGF0YVwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnktYWNjZW50LWRhcmtlclwiICpuZ0lmPVwiZXhwb3J0QWN0aXZlXCIgKGNsaWNrKT1cImV4cG9ydCgpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmNsb3VkX2Rvd25sb2FkPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7J01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuRVhQT1JUJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJBY3RpdmUgJiYgc2hvd0ZpbHRlclRvZ2dsZVwiIGZ4RmxleCBmeExheW91dEdhcD1cIjAuNXJlbVwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIFtjbGFzcy5maWx0ZXItYWN0aXZlXT1cImZpbHRlckJhclZpc2libGVcIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5LWFjY2VudC1kYXJrZXJcIiAoY2xpY2spPVwidG9nZ2xlRmlsdGVyQmFyKClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5maWx0ZXJfbGlzdDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPnt7J01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuRklMVEVSX1RPR0dMRScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICBcclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0ZpbHRlclJlc2V0XCIgY2xhc3M9XCJjbGVhci1maWx0ZXJzLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dTZWFyY2hcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBjbGFzcz1cIndpbGQtc2VhcmNoLXdyYXBwZXJcIj5cclxuICAgICAgPG1hdC1pY29uIFttYXRUb29sdGlwXT1cImhpZGVTZWFyY2hUb29sdGlwID8gJycgOiBzZWFyY2hUb29sdGlwIHwgdHJhbnNsYXRlXCI+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgPGlucHV0ICN3aWxkU2VhcmNoIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFRpdGxlIHwgdHJhbnNsYXRlXCIgKGtleXVwKT1cInNlYXJjaCgkZXZlbnQpXCI+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93U2VhcmNoQ2xlYXJCdXR0b25cIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJ3aWxkLXNlYXJjaC1jbGVhci1idG5cIiAoY2xpY2spPVwid2lsZFNlYXJjaC52YWx1ZSA9ICcnOyBzZWFyY2goeyB0YXJnZXQ6IHsgdmFsdWU6ICcnIH0gfSlcIj5cclxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthZGRpdGlvbmFsQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDx0bGQtZmlsdGVyLWJhciAqbmdJZj1cImNvbmZpZy5maWx0ZXIgJiYgY29uZmlnLmZpbHRlci5lbmFibGVkXCIgI2ZpbHRlckJhciBbZmlsdGVyUm93VmlzaWJsZV09XCJmaWx0ZXJCYXJWaXNpYmxlXCIgW3NldHRpbmdzXT1cImNvbmZpZy5maWx0ZXIuc2V0dGluZ3NcIlxyXG4gICAgKGZpbHRlckJhckNoYW5nZSk9XCJmaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgPC90bGQtZmlsdGVyLWJhcj5cclxuXHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JhdGNoQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XHJcblxyXG4gIDxkaXYgXHJcbiAgICAjdGFibGVDb250YWluZXJcclxuICAgIGNsYXNzPVwidGFibGUtb3ZlcmZsb3dcIlxyXG4gICAgW2NsYXNzLnRhYmxlLXN0aWNreS1oZWFkZXJdPVwiY29uZmlnPy5zdGlja3lIZWFkZXJcIlxyXG4gICAgW2NsYXNzLnRhYmxlLWRyYWdhYmxlXT1cInRhYmxlT3ZlcmZsb3cgJiYgIWNvbmZpZz8uZGlzYWJsZU92ZXJmbG93TW91c2VEcmFnXCJcclxuICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiXHJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoKVwiXHJcbiAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlVXAoKVwiXHJcbiAgICAobW91c2Vtb3ZlKT1cIm9uTW91c2VNb3ZlKCRldmVudClcIlxyXG4gID5cclxuICAgIDx0YWJsZSAjdGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImNvbmZpZy5kYXRhU291cmNlXCIgW3RyYWNrQnldPVwidHJhY2tCeUZuXCI+XHJcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImJhdGNoQ29sdW1uTmFtZVwiPlxyXG4gICAgICAgIDx0aCBjbGFzcz1cInJvdy1zZWxlY3RcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgZGlzYWJsZS1leHBvcnQ+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IFttYXRUb29sdGlwXT1cIidNVUxUSV9GVU5DVElPTkFMX1RBQkxFLlNFTEVDVF9BTEwnIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cImNvbmZpZy5iYXRjaENvbmZpZyEuY2hlY2tCb3hlc0Rpc2FibGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dTZWxlY3Rpb24oKVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm1hdFNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIGlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm1hdFNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIj5cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwicm93LXNlbGVjdFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBkaXNhYmxlLWV4cG9ydD5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidNVUxUSV9GVU5DVElPTkFMX1RBQkxFLlNFTEVDVCcgfCB0cmFuc2xhdGVcIiAqbmdJZj1cImlzUm93Q2hlY2tib3hBbHdheXNWaXNpYmxlIHx8IGhvdmVyZWRSb3cgPT09IGVsZW1lbnQgfHwgbWF0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIiBcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZy5iYXRjaENvbmZpZyEuY2hlY2tCb3hlc0Rpc2FibGVkIHx8IChwcmVzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGVsZW1lbnQpICYmIGRpc2FibGVQcmVzZWxlY3RlZEl0ZW1zKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oZWxlbWVudClcIiBbY2hlY2tlZF09XCJtYXRTZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KVwiPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheUNvbHVtbnM7IHN0aWNreTogY29uZmlnPy5zdGlja3lIZWFkZXIgPz8gZmFsc2VcIj48L3RyPlxyXG4gICAgICA8dHIgXHJcbiAgICAgICAgbWF0LXJvdyBcclxuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgXHJcbiAgICAgICAgY29sdW1uczogZGlzcGxheUNvbHVtbnNcIiBcclxuICAgICAgICAoY2xpY2spPVwiY29uZmlnPy5yb3dDbGlja0NhbGxiYWNrICYmICFjb25maWc/LmRpc2FibGVSb3dDbGljayhyb3cpID8gY29uZmlnPy5yb3dDbGlja0NhbGxiYWNrKHJvdykgOiBudWxsXCJcclxuICAgICAgICAobW91c2VvdmVyKT1cImhvdmVyZWRSb3cgPSByb3dcIiBcclxuICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkUm93ID0gbnVsbFwiIFxyXG4gICAgICAgIFtjbGFzcy5yb3ctY2xpY2thYmxlXT1cImNvbmZpZz8ucm93Q2xpY2tDYWxsYmFjayAmJiAhY29uZmlnPy5kaXNhYmxlUm93Q2xpY2socm93KVwiIFxyXG4gICAgICAgIFtjbGFzcy5oaWdobGlnaHQtZXJyb3JdPVwiaGlnaGxpZ2h0RXJyb3JFbGVtZW50KHJvdylcIiBcclxuICAgICAgICBbY2xhc3MuaGlnaGxpZ2h0XT1cInJvdyA9PT0gaG92ZXJlZFJvdyB8fCBoaWdobGlnaHRFbGVtZW50KHJvdylcIj5cclxuICAgICAgPC90cj5cclxuICAgICAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW5TZWxlY3RDb2x1bW5OYW1lXCI+XHJcbiAgICAgICAgPHRoIGNsYXNzPVwicm93LXNlbGVjdFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBkaXNhYmxlLWV4cG9ydD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tc2VsZWN0b3Itd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29sdW1uLXNlbGVjdG9yXCIgbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeS1hY2NlbnQtZGFya2VyXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbHVtbk1lbnVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+bW9yZV92ZXJ0PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwicm93LXNlbGVjdFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBkaXNhYmxlLWV4cG9ydD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YVJvd0FjdGl2ZVwiPlxyXG4gICAgICAgIDx0ciAqbWF0Tm9EYXRhUm93PlxyXG4gICAgICAgICAgPCEtLSBhZGQgcmFuZG9tIG51bWJlciB0byBtYWtlIHN1cmUgaXQgdGFrZXMgZnVsbCB3aWR0aCAtLT5cclxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiOTlcIj5cclxuICAgICAgICAgICAgPGxpYi1zdGF0dXMtZGlzcGxheSBbY29uZmlnXT1cIm5vRGF0YVJvd0NvbmZpZ1wiPjwvbGliLXN0YXR1cy1kaXNwbGF5PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG1hdC1tZW51ICNjb2x1bW5NZW51PVwibWF0TWVudVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4tc2VsZWN0LW1lbnVcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29uZmlndXJhYmxlQ29sdW1uc1wiPlxyXG4gICAgICA8bWF0LWNoZWNrYm94IFsobmdNb2RlbCldPVwiY29sdW1uLnNlbGVjdGVkXCI+XHJcbiAgICAgICAge3tjb2x1bW4uZGlzcGxheU5hbWUgfCB0cmFuc2xhdGV9fVxyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tc2VsZWN0LXNhdmVcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5LWFjY2VudC1kYXJrZXJcIiAoY2xpY2spPVwidXBkYXRlRGlzcGxheUNvbHVtbnMoKVwiPnt7IFwiTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5DT0xVTU5fU0VMRUNUX1NBVkVcIiB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LW1lbnU+XHJcbiJdfQ==