@c80/ui 1.0.29 → 1.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm2022/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- export * from './lib/table/table.component';
1
+ export * from './lib/table';
2
2
  export * from './lib/icon/icon.component';
3
3
  export * from './lib/stat-card/stat-card.component';
4
4
  export * from './lib/card-level/index';
5
5
  export * from './lib/modal/index';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWJzL3VpL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHdCQUF3QixDQUFDO0FBRXZDLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pY29uL2ljb24uY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RhdC1jYXJkL3N0YXQtY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FyZC1sZXZlbC9pbmRleCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsL2luZGV4JztcbiJdfQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWJzL3VpL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUU1QixjQUFjLDJCQUEyQixDQUFDO0FBRTFDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx3QkFBd0IsQ0FBQztBQUV2QyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvdGFibGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pY29uL2ljb24uY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RhdC1jYXJkL3N0YXQtY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FyZC1sZXZlbC9pbmRleCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsL2luZGV4JztcbiJdfQ==
@@ -46,6 +46,8 @@ export class C80IconComponent {
46
46
  toggleOffIconTpl;
47
47
  searchIconTpl;
48
48
  uploadIconTpl;
49
+ pendingActionsIconTpl;
50
+ playCircleIconTpl;
49
51
  getIconTemplate() {
50
52
  switch (this.icon) {
51
53
  case 'check':
@@ -86,6 +88,10 @@ export class C80IconComponent {
86
88
  return this.searchIconTpl;
87
89
  case 'upload':
88
90
  return this.uploadIconTpl;
91
+ case 'pending_actions':
92
+ return this.pendingActionsIconTpl;
93
+ case 'play_circle':
94
+ return this.playCircleIconTpl;
89
95
  default:
90
96
  return this.defaultIconTpl;
91
97
  }
@@ -124,11 +130,11 @@ export class C80IconComponent {
124
130
  }
125
131
  }
126
132
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C80IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
127
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: C80IconComponent, isStandalone: true, selector: "c80-icon", inputs: { icon: "icon", color: "color", customColor: "customColor", disabled: "disabled", size: "size", button: "button", type: "type" }, outputs: { iconClick: "iconClick" }, viewQueries: [{ propertyName: "checkIconTpl", first: true, predicate: ["checkIcon"], descendants: true, static: true }, { propertyName: "cancelIconTpl", first: true, predicate: ["cancelIcon"], descendants: true, static: true }, { propertyName: "editIconTpl", first: true, predicate: ["editIcon"], descendants: true, static: true }, { propertyName: "deleteIconTpl", first: true, predicate: ["deleteIcon"], descendants: true, static: true }, { propertyName: "addIconTpl", first: true, predicate: ["addIcon"], descendants: true, static: true }, { propertyName: "viewIconTpl", first: true, predicate: ["viewIcon"], descendants: true, static: true }, { propertyName: "getIconTpl", first: true, predicate: ["getIcon"], descendants: true, static: true }, { propertyName: "defaultIconTpl", first: true, predicate: ["defaultIcon"], descendants: true, static: true }, { propertyName: "scheduleIconTpl", first: true, predicate: ["scheduleIcon"], descendants: true, static: true }, { propertyName: "refreshIconTpl", first: true, predicate: ["refreshIcon"], descendants: true, static: true }, { propertyName: "checkCircleIconTpl", first: true, predicate: ["checkCircleIcon"], descendants: true, static: true }, { propertyName: "cancelCircleIconTpl", first: true, predicate: ["cancelCircleIcon"], descendants: true, static: true }, { propertyName: "errorIconTpl", first: true, predicate: ["errorIcon"], descendants: true, static: true }, { propertyName: "queueIconTpl", first: true, predicate: ["queueIcon"], descendants: true, static: true }, { propertyName: "arrowUpIconTpl", first: true, predicate: ["arrowUpIcon"], descendants: true, static: true }, { propertyName: "arrowDownIconTpl", first: true, predicate: ["arrowDownIcon"], descendants: true, static: true }, { propertyName: "toggleOnIconTpl", first: true, predicate: ["toggleOnIcon"], descendants: true, static: true }, { propertyName: "toggleOffIconTpl", first: true, predicate: ["toggleOffIcon"], descendants: true, static: true }, { propertyName: "searchIconTpl", first: true, predicate: ["searchIcon"], descendants: true, static: true }, { propertyName: "uploadIconTpl", first: true, predicate: ["uploadIcon"], descendants: true, static: true }], ngImport: i0, template: "@if (button) {\r\n<button type=\"{{type}}\" [disabled]=\"disabled\" class=\"icon-button\" [style.width.px]=\"iconSize + 8\" [style.height.px]=\"iconSize + 8\" (click)=\"onButtonClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"getIconTemplate()\"></ng-container>\r\n</button>\r\n} @else {\r\n<span class=\"icon-span\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\">\r\n <ng-container *ngTemplateOutlet=\"getIconTemplate()\"></ng-container>\r\n</span>\r\n}\r\n\r\n<ng-template #checkIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M5 13l4 4L19 7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #cancelIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M6 6l12 12M6 18L18 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #editIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"5\" y=\"19\" width=\"14\" height=\"2\" rx=\"1\" [attr.fill]=\"iconColor\" />\r\n <path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #deleteIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" [attr.fill]=\"iconColor\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #addIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M12 5v14M5 12h14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #viewIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M12 5C7 5 2.73 8.11 1 12c1.73 3.89 6 7 11 7s9.27-3.11 11-7c-1.73-3.89-6-7-11-7z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #getIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"6\" cy=\"6\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <circle cx=\"18\" cy=\"18\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m8.5 8.5 7 7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <path d=\"m13 11 2 2-2 2\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #defaultIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #scheduleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <polyline points=\"12,6 12,12 16,14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #refreshIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M21 3v5h-5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M3 21v-5h5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #checkCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m9 12 2 2 4-4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #cancelCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m15 9-6 6m0-6 6 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #errorIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #queueIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M3 12h18m-9-9v18\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"6\" rx=\"1\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n <rect x=\"2\" y=\"15\" width=\"20\" height=\"6\" rx=\"1\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #arrowUpIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"m18 15-6-6-6 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #arrowDownIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"m6 9 6 6 6-6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #toggleOnIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" [attr.fill]=\"iconColor\" />\r\n <circle cx=\"16\" cy=\"12\" r=\"3\" fill=\"white\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #toggleOffIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n <circle cx=\"8\" cy=\"12\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #searchIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"m21 21-4.35-4.35\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #uploadIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <polyline points=\"7,10 12,5 17,10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>", styles: [":host .icon-button{display:inline-flex;align-items:center;justify-content:center;border:none;outline:none;background:transparent;border-radius:50%;min-width:0;min-height:0;padding:4px;cursor:pointer;transition:background .2s;box-sizing:border-box}:host .icon-button:focus-visible{outline:2px solid #1976d2;outline-offset:2px}:host .icon-button:hover:not(:disabled){background:#1976d214}:host .icon-button:active:not(:disabled){background:#1976d229}:host .icon-button:disabled{opacity:.5;cursor:default;background:transparent}:host .icon-span,:host .icon-button{margin-left:4px;margin-right:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
133
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: C80IconComponent, isStandalone: true, selector: "c80-icon", inputs: { icon: "icon", color: "color", customColor: "customColor", disabled: "disabled", size: "size", button: "button", type: "type" }, outputs: { iconClick: "iconClick" }, viewQueries: [{ propertyName: "checkIconTpl", first: true, predicate: ["checkIcon"], descendants: true, static: true }, { propertyName: "cancelIconTpl", first: true, predicate: ["cancelIcon"], descendants: true, static: true }, { propertyName: "editIconTpl", first: true, predicate: ["editIcon"], descendants: true, static: true }, { propertyName: "deleteIconTpl", first: true, predicate: ["deleteIcon"], descendants: true, static: true }, { propertyName: "addIconTpl", first: true, predicate: ["addIcon"], descendants: true, static: true }, { propertyName: "viewIconTpl", first: true, predicate: ["viewIcon"], descendants: true, static: true }, { propertyName: "getIconTpl", first: true, predicate: ["getIcon"], descendants: true, static: true }, { propertyName: "defaultIconTpl", first: true, predicate: ["defaultIcon"], descendants: true, static: true }, { propertyName: "scheduleIconTpl", first: true, predicate: ["scheduleIcon"], descendants: true, static: true }, { propertyName: "refreshIconTpl", first: true, predicate: ["refreshIcon"], descendants: true, static: true }, { propertyName: "checkCircleIconTpl", first: true, predicate: ["checkCircleIcon"], descendants: true, static: true }, { propertyName: "cancelCircleIconTpl", first: true, predicate: ["cancelCircleIcon"], descendants: true, static: true }, { propertyName: "errorIconTpl", first: true, predicate: ["errorIcon"], descendants: true, static: true }, { propertyName: "queueIconTpl", first: true, predicate: ["queueIcon"], descendants: true, static: true }, { propertyName: "arrowUpIconTpl", first: true, predicate: ["arrowUpIcon"], descendants: true, static: true }, { propertyName: "arrowDownIconTpl", first: true, predicate: ["arrowDownIcon"], descendants: true, static: true }, { propertyName: "toggleOnIconTpl", first: true, predicate: ["toggleOnIcon"], descendants: true, static: true }, { propertyName: "toggleOffIconTpl", first: true, predicate: ["toggleOffIcon"], descendants: true, static: true }, { propertyName: "searchIconTpl", first: true, predicate: ["searchIcon"], descendants: true, static: true }, { propertyName: "uploadIconTpl", first: true, predicate: ["uploadIcon"], descendants: true, static: true }, { propertyName: "pendingActionsIconTpl", first: true, predicate: ["pendingActionsIcon"], descendants: true, static: true }, { propertyName: "playCircleIconTpl", first: true, predicate: ["playCircleIcon"], descendants: true, static: true }], ngImport: i0, template: "@if (button) {\r\n<button type=\"{{type}}\" [disabled]=\"disabled\" class=\"icon-button\" [style.width.px]=\"iconSize + 8\" [style.height.px]=\"iconSize + 8\" (click)=\"onButtonClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"getIconTemplate()\"></ng-container>\r\n</button>\r\n} @else {\r\n<span class=\"icon-span\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\">\r\n <ng-container *ngTemplateOutlet=\"getIconTemplate()\"></ng-container>\r\n</span>\r\n}\r\n\r\n<ng-template #checkIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M5 13l4 4L19 7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #cancelIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M6 6l12 12M6 18L18 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #editIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"5\" y=\"19\" width=\"14\" height=\"2\" rx=\"1\" [attr.fill]=\"iconColor\" />\r\n <path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #deleteIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" [attr.fill]=\"iconColor\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #addIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M12 5v14M5 12h14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #viewIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M12 5C7 5 2.73 8.11 1 12c1.73 3.89 6 7 11 7s9.27-3.11 11-7c-1.73-3.89-6-7-11-7z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #getIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"6\" cy=\"6\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <circle cx=\"18\" cy=\"18\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m8.5 8.5 7 7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <path d=\"m13 11 2 2-2 2\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #defaultIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #scheduleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <polyline points=\"12,6 12,12 16,14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #refreshIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M21 3v5h-5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M3 21v-5h5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #checkCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m9 12 2 2 4-4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #cancelCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m15 9-6 6m0-6 6 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #errorIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #queueIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M3 12h18m-9-9v18\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"6\" rx=\"1\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n <rect x=\"2\" y=\"15\" width=\"20\" height=\"6\" rx=\"1\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #arrowUpIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"m18 15-6-6-6 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #arrowDownIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"m6 9 6 6 6-6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #toggleOnIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" [attr.fill]=\"iconColor\" />\r\n <circle cx=\"16\" cy=\"12\" r=\"3\" fill=\"white\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #toggleOffIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n <circle cx=\"8\" cy=\"12\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #searchIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"m21 21-4.35-4.35\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #uploadIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <polyline points=\"7,10 12,5 17,10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #pendingActionsIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <polyline points=\"12,6 12,12 16,14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M8 2v4M16 2v4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #playCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <polygon points=\"10,8 16,12 10,16\" [attr.fill]=\"iconColor\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #defaultIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"2\" [attr.fill]=\"iconColor\" />\r\n </svg>\r\n</ng-template>", styles: [":host .icon-button{display:inline-flex;align-items:center;justify-content:center;border:none;outline:none;background:transparent;border-radius:50%;min-width:0;min-height:0;padding:4px;cursor:pointer;transition:background .2s;box-sizing:border-box}:host .icon-button:focus-visible{outline:2px solid #1976d2;outline-offset:2px}:host .icon-button:hover:not(:disabled){background:#1976d214}:host .icon-button:active:not(:disabled){background:#1976d229}:host .icon-button:disabled{opacity:.5;cursor:default;background:transparent}:host .icon-span,:host .icon-button{margin-left:4px;margin-right:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
128
134
  }
129
135
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C80IconComponent, decorators: [{
130
136
  type: Component,
131
- args: [{ selector: 'c80-icon', standalone: true, imports: [CommonModule], template: "@if (button) {\r\n<button type=\"{{type}}\" [disabled]=\"disabled\" class=\"icon-button\" [style.width.px]=\"iconSize + 8\" [style.height.px]=\"iconSize + 8\" (click)=\"onButtonClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"getIconTemplate()\"></ng-container>\r\n</button>\r\n} @else {\r\n<span class=\"icon-span\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\">\r\n <ng-container *ngTemplateOutlet=\"getIconTemplate()\"></ng-container>\r\n</span>\r\n}\r\n\r\n<ng-template #checkIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M5 13l4 4L19 7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #cancelIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M6 6l12 12M6 18L18 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #editIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"5\" y=\"19\" width=\"14\" height=\"2\" rx=\"1\" [attr.fill]=\"iconColor\" />\r\n <path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #deleteIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" [attr.fill]=\"iconColor\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #addIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M12 5v14M5 12h14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #viewIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M12 5C7 5 2.73 8.11 1 12c1.73 3.89 6 7 11 7s9.27-3.11 11-7c-1.73-3.89-6-7-11-7z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #getIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"6\" cy=\"6\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <circle cx=\"18\" cy=\"18\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m8.5 8.5 7 7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <path d=\"m13 11 2 2-2 2\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #defaultIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #scheduleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <polyline points=\"12,6 12,12 16,14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #refreshIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M21 3v5h-5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M3 21v-5h5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #checkCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m9 12 2 2 4-4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #cancelCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m15 9-6 6m0-6 6 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #errorIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #queueIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M3 12h18m-9-9v18\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"6\" rx=\"1\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n <rect x=\"2\" y=\"15\" width=\"20\" height=\"6\" rx=\"1\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #arrowUpIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"m18 15-6-6-6 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #arrowDownIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"m6 9 6 6 6-6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #toggleOnIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" [attr.fill]=\"iconColor\" />\r\n <circle cx=\"16\" cy=\"12\" r=\"3\" fill=\"white\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #toggleOffIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n <circle cx=\"8\" cy=\"12\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #searchIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"m21 21-4.35-4.35\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #uploadIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <polyline points=\"7,10 12,5 17,10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>", styles: [":host .icon-button{display:inline-flex;align-items:center;justify-content:center;border:none;outline:none;background:transparent;border-radius:50%;min-width:0;min-height:0;padding:4px;cursor:pointer;transition:background .2s;box-sizing:border-box}:host .icon-button:focus-visible{outline:2px solid #1976d2;outline-offset:2px}:host .icon-button:hover:not(:disabled){background:#1976d214}:host .icon-button:active:not(:disabled){background:#1976d229}:host .icon-button:disabled{opacity:.5;cursor:default;background:transparent}:host .icon-span,:host .icon-button{margin-left:4px;margin-right:4px}\n"] }]
137
+ args: [{ selector: 'c80-icon', standalone: true, imports: [CommonModule], template: "@if (button) {\r\n<button type=\"{{type}}\" [disabled]=\"disabled\" class=\"icon-button\" [style.width.px]=\"iconSize + 8\" [style.height.px]=\"iconSize + 8\" (click)=\"onButtonClick($event)\">\r\n <ng-container *ngTemplateOutlet=\"getIconTemplate()\"></ng-container>\r\n</button>\r\n} @else {\r\n<span class=\"icon-span\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\">\r\n <ng-container *ngTemplateOutlet=\"getIconTemplate()\"></ng-container>\r\n</span>\r\n}\r\n\r\n<ng-template #checkIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M5 13l4 4L19 7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #cancelIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M6 6l12 12M6 18L18 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #editIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"5\" y=\"19\" width=\"14\" height=\"2\" rx=\"1\" [attr.fill]=\"iconColor\" />\r\n <path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #deleteIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z\" [attr.fill]=\"iconColor\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #addIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M12 5v14M5 12h14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #viewIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M12 5C7 5 2.73 8.11 1 12c1.73 3.89 6 7 11 7s9.27-3.11 11-7c-1.73-3.89-6-7-11-7z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #getIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"6\" cy=\"6\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <circle cx=\"18\" cy=\"18\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m8.5 8.5 7 7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <path d=\"m13 11 2 2-2 2\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #defaultIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #scheduleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <polyline points=\"12,6 12,12 16,14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #refreshIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M21 3v5h-5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M3 21v-5h5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #checkCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m9 12 2 2 4-4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #cancelCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <path d=\"m15 9-6 6m0-6 6 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #errorIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" />\r\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #queueIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M3 12h18m-9-9v18\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"6\" rx=\"1\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n <rect x=\"2\" y=\"15\" width=\"20\" height=\"6\" rx=\"1\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #arrowUpIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"m18 15-6-6-6 6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #arrowDownIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"m6 9 6 6 6-6\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #toggleOnIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" [attr.fill]=\"iconColor\" />\r\n <circle cx=\"16\" cy=\"12\" r=\"3\" fill=\"white\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #toggleOffIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <rect x=\"1\" y=\"5\" width=\"22\" height=\"14\" rx=\"7\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n <circle cx=\"8\" cy=\"12\" r=\"3\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" fill=\"none\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #searchIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"m21 21-4.35-4.35\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #uploadIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <polyline points=\"7,10 12,5 17,10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #pendingActionsIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <polyline points=\"12,6 12,12 16,14\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path d=\"M8 2v4M16 2v4\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #playCircleIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <polygon points=\"10,8 16,12 10,16\" [attr.fill]=\"iconColor\" />\r\n </svg>\r\n</ng-template>\r\n<ng-template #defaultIcon>\r\n <svg [attr.width]=\"iconSize\" [attr.height]=\"iconSize\" viewBox=\"0 0 24 24\" fill=\"none\" [style.opacity]=\"iconOpacity\">\r\n <circle cx=\"12\" cy=\"12\" r=\"2\" [attr.fill]=\"iconColor\" />\r\n </svg>\r\n</ng-template>", styles: [":host .icon-button{display:inline-flex;align-items:center;justify-content:center;border:none;outline:none;background:transparent;border-radius:50%;min-width:0;min-height:0;padding:4px;cursor:pointer;transition:background .2s;box-sizing:border-box}:host .icon-button:focus-visible{outline:2px solid #1976d2;outline-offset:2px}:host .icon-button:hover:not(:disabled){background:#1976d214}:host .icon-button:active:not(:disabled){background:#1976d229}:host .icon-button:disabled{opacity:.5;cursor:default;background:transparent}:host .icon-span,:host .icon-button{margin-left:4px;margin-right:4px}\n"] }]
132
138
  }], propDecorators: { icon: [{
133
139
  type: Input
134
140
  }], color: [{
@@ -205,5 +211,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
205
211
  }], uploadIconTpl: [{
206
212
  type: ViewChild,
207
213
  args: ['uploadIcon', { static: true }]
214
+ }], pendingActionsIconTpl: [{
215
+ type: ViewChild,
216
+ args: ['pendingActionsIcon', { static: true }]
217
+ }], playCircleIconTpl: [{
218
+ type: ViewChild,
219
+ args: ['playCircleIcon', { static: true }]
208
220
  }] } });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvaWNvbi9pY29uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9pY29uL2ljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFnQy9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0Isb0NBQW9DO0lBQ3BDLElBQUksUUFBUTtRQUNWLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNRLElBQUksR0FBUyxPQUFPLENBQUM7SUFDckIsS0FBSyxHQUFVLFNBQVMsQ0FBQztJQUN6QixXQUFXLENBQVUsQ0FBQywrQkFBK0I7SUFDckQsUUFBUSxHQUFhLEtBQUssQ0FBQztJQUMzQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLDhFQUE4RTtJQUN0RSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLElBQ0ksTUFBTSxDQUFDLEdBQXdDO1FBQ2pELHlGQUF5RjtRQUN6RixJQUFJLENBQUMsT0FBTztZQUNWLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLENBQUM7SUFDMUUsQ0FBQztJQUNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsaURBQWlEO0lBQ3hDLElBQUksR0FBa0MsUUFBUSxDQUFDO0lBQ3hELDhDQUE4QztJQUNwQyxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztJQUVOLFlBQVksQ0FBd0I7SUFFOUUsYUFBYSxDQUF3QjtJQUNJLFdBQVcsQ0FBd0I7SUFFNUUsYUFBYSxDQUF3QjtJQUNHLFVBQVUsQ0FBd0I7SUFDakMsV0FBVyxDQUF3QjtJQUNwQyxVQUFVLENBQXdCO0lBRTFFLGNBQWMsQ0FBd0I7SUFFdEMsZUFBZSxDQUF3QjtJQUV2QyxjQUFjLENBQXdCO0lBRXRDLGtCQUFrQixDQUF3QjtJQUUxQyxtQkFBbUIsQ0FBd0I7SUFDRCxZQUFZLENBQXdCO0lBQ3BDLFlBQVksQ0FBd0I7SUFDbEMsY0FBYyxDQUF3QjtJQUNwQyxnQkFBZ0IsQ0FBd0I7SUFDekMsZUFBZSxDQUF3QjtJQUN0QyxnQkFBZ0IsQ0FBd0I7SUFDM0MsYUFBYSxDQUF3QjtJQUNyQyxhQUFhLENBQXdCO0lBRWhGLGVBQWU7UUFDYixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQzNCLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDNUIsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMxQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzVCLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDekIsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMxQixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3pCLEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDOUIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM3QixLQUFLLGNBQWM7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ2pDLEtBQUssZUFBZTtnQkFDbEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDbEMsS0FBSyxPQUFPO2dCQUNWLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztZQUMzQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQzNCLEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDN0IsS0FBSyxZQUFZO2dCQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLEtBQUssV0FBVztnQkFDZCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDOUIsS0FBSyxZQUFZO2dCQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQy9CLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDNUIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUM1QjtnQkFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLFNBQVMsQ0FBQyxDQUFDLHFCQUFxQjtRQUN6QyxDQUFDO1FBRUQsMkVBQTJFO1FBQzNFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDO1FBRUQsMENBQTBDO1FBQzFDLE1BQU0sVUFBVSxHQUEwQjtZQUN4QyxPQUFPLEVBQUUsV0FBVztZQUNwQixTQUFTLEVBQUUsU0FBUztZQUNwQixJQUFJLEVBQUUsU0FBUztZQUNmLE9BQU8sRUFBRSxTQUFTO1NBQ25CLENBQUM7UUFFRixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFFRCx5RUFBeUU7UUFDekUsSUFDRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDO1lBQ3JELENBQUMsSUFBSSxDQUFDLFdBQVcsRUFDakIsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUVELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDLG9DQUFvQztJQUN0QyxhQUFhLENBQUMsS0FBWTtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO3dHQTNJVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQix3NEVDeEM3QiwyalNBaUljLDZvQkQ3RkYsWUFBWTs7NEZBSVgsZ0JBQWdCO2tCQVI1QixTQUFTOytCQUVFLFVBQVUsY0FDUixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7OEJBU2QsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUlGLE1BQU07c0JBRFQsS0FBSztnQkFVRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFFbUMsWUFBWTtzQkFBckQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUV4QyxhQUFhO3NCQURaLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFQSxXQUFXO3NCQUFuRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRXZDLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVELFVBQVU7c0JBQWpELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRyxXQUFXO3NCQUFuRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0MsVUFBVTtzQkFBakQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUV0QyxjQUFjO3NCQURiLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHMUMsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRzNDLGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUcxQyxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUc5QyxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVMLFlBQVk7c0JBQXJELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRSxZQUFZO3NCQUFyRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0ksY0FBYztzQkFBekQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNJLGdCQUFnQjtzQkFBN0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNDLGVBQWU7c0JBQTNELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRyxnQkFBZ0I7c0JBQTdELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRCxhQUFhO3NCQUF2RCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsYUFBYTtzQkFBdkQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5leHBvcnQgdHlwZSBJY29uID1cclxuICB8ICdjaGVjaydcclxuICB8ICdjYW5jZWwnXHJcbiAgfCAnZWRpdCdcclxuICB8ICdkZWxldGUnXHJcbiAgfCAnYWRkJ1xyXG4gIHwgJ3ZpZXcnXHJcbiAgfCAnZ2V0J1xyXG4gIHwgJ3NjaGVkdWxlJ1xyXG4gIHwgJ3JlZnJlc2gnXHJcbiAgfCAnY2hlY2tfY2lyY2xlJ1xyXG4gIHwgJ2NhbmNlbF9jaXJjbGUnXHJcbiAgfCAnZXJyb3InXHJcbiAgfCAncXVldWUnXHJcbiAgfCAnYXJyb3dfdXAnXHJcbiAgfCAnYXJyb3dfZG93bidcclxuICB8ICd0b2dnbGVfb24nXHJcbiAgfCAndG9nZ2xlX29mZidcclxuICB8ICdzZWFyY2gnXHJcbiAgfCAndXBsb2FkJztcclxuZXhwb3J0IHR5cGUgQ29sb3IgPSAncHJpbWFyeScgfCAnc2Vjb25kYXJ5JyB8ICd3YXJuJyB8ICdzdWNjZXNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdjODAtaWNvbicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaWNvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaWNvbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQzgwSWNvbkNvbXBvbmVudCB7XHJcbiAgLyoqIFRhbWHDsW8gYmFzZSBkZWwgaWNvbm8gKGVuIHB4KSAqL1xyXG4gIGdldCBpY29uU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDI0ICogdGhpcy5zaXplO1xyXG4gIH1cclxuICBASW5wdXQoKSBpY29uOiBJY29uID0gJ2NoZWNrJztcclxuICBASW5wdXQoKSBjb2xvcjogQ29sb3IgPSAncHJpbWFyeSc7XHJcbiAgQElucHV0KCkgY3VzdG9tQ29sb3I/OiBzdHJpbmc7IC8vIENvbG9yIHBlcnNvbmFsaXphZG8gb3BjaW9uYWxcclxuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaXplID0gMTtcclxuICAvKiogU2kgZXMgdHJ1ZSwgcmVuZGVyaXphIGNvbW8gPGJ1dHRvbj4gbmF0aXZvLCBzaSBlcyBmYWxzZSBzb2xvIGNvbW8gaWNvbm8gKi9cclxuICBwcml2YXRlIF9idXR0b24gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBidXR0b24odmFsOiBib29sZWFuIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gUGVybWl0ZSB1c2FyICdidXR0b24nIGEgc2VjYXMsIGN1YWxxdWllciB2YWxvciBxdWUgbm8gc2VhIG51bGwvdW5kZWZpbmVkL2ZhbHNlIGVzIHRydWVcclxuICAgIHRoaXMuX2J1dHRvbiA9XHJcbiAgICAgIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IGZhbHNlICYmIHZhbCAhPT0gJ2ZhbHNlJztcclxuICB9XHJcbiAgZ2V0IGJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9idXR0b247XHJcbiAgfVxyXG4gIC8qKiBUaXBvIGRlIGJvdMOzbiBuYXRpdm8gKHNvbG8gc2kgYnV0dG9uPXRydWUpICovXHJcbiAgQElucHV0KCkgdHlwZTogJ2J1dHRvbicgfCAnc3VibWl0JyB8ICdyZXNldCcgPSAnYnV0dG9uJztcclxuICAvKiogT3V0cHV0IHBhcmEgY2xpY2sgKHNvbG8gc2kgYnV0dG9uPXRydWUpICovXHJcbiAgQE91dHB1dCgpIGljb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NoZWNrSWNvbicsIHsgc3RhdGljOiB0cnVlIH0pIGNoZWNrSWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbmNlbEljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNhbmNlbEljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdlZGl0SWNvbicsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgnZGVsZXRlSWNvbicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZGVsZXRlSWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ2FkZEljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBhZGRJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgndmlld0ljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSB2aWV3SWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ2dldEljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBnZXRJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRlZmF1bHRJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgnc2NoZWR1bGVJY29uJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBzY2hlZHVsZUljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdyZWZyZXNoSWNvbicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcmVmcmVzaEljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdjaGVja0NpcmNsZUljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNoZWNrQ2lyY2xlSWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbmNlbENpcmNsZUljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNhbmNlbENpcmNsZUljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdlcnJvckljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBlcnJvckljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdxdWV1ZUljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBxdWV1ZUljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdhcnJvd1VwSWNvbicsIHsgc3RhdGljOiB0cnVlIH0pIGFycm93VXBJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgnYXJyb3dEb3duSWNvbicsIHsgc3RhdGljOiB0cnVlIH0pIGFycm93RG93bkljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCd0b2dnbGVPbkljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSB0b2dnbGVPbkljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCd0b2dnbGVPZmZJY29uJywgeyBzdGF0aWM6IHRydWUgfSkgdG9nZ2xlT2ZmSWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWFyY2hJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgndXBsb2FkSWNvbicsIHsgc3RhdGljOiB0cnVlIH0pIHVwbG9hZEljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgZ2V0SWNvblRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPHVua25vd24+IHtcclxuICAgIHN3aXRjaCAodGhpcy5pY29uKSB7XHJcbiAgICAgIGNhc2UgJ2NoZWNrJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0ljb25UcGw7XHJcbiAgICAgIGNhc2UgJ2NhbmNlbCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuY2VsSWNvblRwbDtcclxuICAgICAgY2FzZSAnZWRpdCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdEljb25UcGw7XHJcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlSWNvblRwbDtcclxuICAgICAgY2FzZSAnYWRkJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRJY29uVHBsO1xyXG4gICAgICBjYXNlICd2aWV3JzpcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3SWNvblRwbDtcclxuICAgICAgY2FzZSAnZ2V0JzpcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRJY29uVHBsO1xyXG4gICAgICBjYXNlICdzY2hlZHVsZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVJY29uVHBsO1xyXG4gICAgICBjYXNlICdyZWZyZXNoJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoSWNvblRwbDtcclxuICAgICAgY2FzZSAnY2hlY2tfY2lyY2xlJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0NpcmNsZUljb25UcGw7XHJcbiAgICAgIGNhc2UgJ2NhbmNlbF9jaXJjbGUnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbmNlbENpcmNsZUljb25UcGw7XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvckljb25UcGw7XHJcbiAgICAgIGNhc2UgJ3F1ZXVlJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZUljb25UcGw7XHJcbiAgICAgIGNhc2UgJ2Fycm93X3VwJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5hcnJvd1VwSWNvblRwbDtcclxuICAgICAgY2FzZSAnYXJyb3dfZG93bic6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJyb3dEb3duSWNvblRwbDtcclxuICAgICAgY2FzZSAndG9nZ2xlX29uJzpcclxuICAgICAgICByZXR1cm4gdGhpcy50b2dnbGVPbkljb25UcGw7XHJcbiAgICAgIGNhc2UgJ3RvZ2dsZV9vZmYnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZU9mZkljb25UcGw7XHJcbiAgICAgIGNhc2UgJ3NlYXJjaCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoSWNvblRwbDtcclxuICAgICAgY2FzZSAndXBsb2FkJzpcclxuICAgICAgICByZXR1cm4gdGhpcy51cGxvYWRJY29uVHBsO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRJY29uVHBsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGljb25Db2xvcigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuICcjYmRiZGJkJzsgLy8gZ3JpcyBkZXNoYWJpbGl0YWRvXHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2kgaGF5IHVuIGNvbG9yIHBlcnNvbmFsaXphZG8sIHVzYXJsbyBzaWVtcHJlIChleGNlcHRvIHNpIGVzdMOhIGRpc2FibGVkKVxyXG4gICAgaWYgKHRoaXMuY3VzdG9tQ29sb3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQ29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGFsZXRhIHNpbXBsaWZpY2FkYSAtIHNvbG8gY29sb3JlcyBiYXNlXHJcbiAgICBjb25zdCBiYXNlQ29sb3JzOiBSZWNvcmQ8Q29sb3IsIHN0cmluZz4gPSB7XHJcbiAgICAgIHByaW1hcnk6ICcjMDAzNzc1YzgnLFxyXG4gICAgICBzZWNvbmRhcnk6ICcjNmI3MjgwJyxcclxuICAgICAgd2FybjogJyNlNTM5MzUnLFxyXG4gICAgICBzdWNjZXNzOiAnIzRjYWY1MCcsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBiYXNlQ29sb3JzW3RoaXMuY29sb3JdID8/ICcjMjIyJztcclxuICB9XHJcblxyXG4gIGdldCBpY29uT3BhY2l0eSgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuIDAuNTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBcGxpY2FyIG9wYWNpdHkgMC43IGN1YW5kbyBlcyBjb2xvciBzZWNvbmRhcnkgbyB3YXJuIChzaW4gY3VzdG9tQ29sb3IpXHJcbiAgICBpZiAoXHJcbiAgICAgICh0aGlzLmNvbG9yID09PSAnc2Vjb25kYXJ5JyB8fCB0aGlzLmNvbG9yID09PSAnd2FybicpICYmXHJcbiAgICAgICF0aGlzLmN1c3RvbUNvbG9yXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIDAuNztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gMTtcclxuICB9IC8vIEhhbmRsZXIgcGFyYSBjbGljayBlbiBtb2RvIGJ1dHRvblxyXG4gIG9uQnV0dG9uQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5pY29uQ2xpY2suZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoYnV0dG9uKSB7XHJcbjxidXR0b24gdHlwZT1cInt7dHlwZX19XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY2xhc3M9XCJpY29uLWJ1dHRvblwiIFtzdHlsZS53aWR0aC5weF09XCJpY29uU2l6ZSArIDhcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImljb25TaXplICsgOFwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIj5cclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0SWNvblRlbXBsYXRlKClcIj48L25nLWNvbnRhaW5lcj5cclxuPC9idXR0b24+XHJcbn0gQGVsc2Uge1xyXG48c3BhbiBjbGFzcz1cImljb24tc3BhblwiIFtzdHlsZS53aWR0aC5weF09XCJpY29uU2l6ZVwiIFtzdHlsZS5oZWlnaHQucHhdPVwiaWNvblNpemVcIj5cclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0SWNvblRlbXBsYXRlKClcIj48L25nLWNvbnRhaW5lcj5cclxuPC9zcGFuPlxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI2NoZWNrSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxwYXRoIGQ9XCJNNSAxM2w0IDRMMTkgN1wiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjYW5jZWxJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPHBhdGggZD1cIk02IDZsMTIgMTJNNiAxOEwxOCA2XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNlZGl0SWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxyZWN0IHg9XCI1XCIgeT1cIjE5XCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjJcIiByeD1cIjFcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIC8+XHJcbiAgICA8cGF0aCBkPVwiTTE2LjUgMy41YTIuMTIxIDIuMTIxIDAgMCAxIDMgM0w3IDE5bC00IDEgMS00IDEyLjUtMTIuNXpcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjZGVsZXRlSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxwYXRoIGQ9XCJNNiAxOWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2FkZEljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8cGF0aCBkPVwiTTEyIDV2MTRNNSAxMmgxNFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjdmlld0ljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8cGF0aCBkPVwiTTEyIDVDNyA1IDIuNzMgOC4xMSAxIDEyYzEuNzMgMy44OSA2IDcgMTEgN3M5LjI3LTMuMTEgMTEtN2MtMS43My0zLjg5LTYtNy0xMS03elwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiM1wiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNnZXRJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPGNpcmNsZSBjeD1cIjZcIiBjeT1cIjZcIiByPVwiM1wiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgLz5cclxuICAgIDxjaXJjbGUgY3g9XCIxOFwiIGN5PVwiMThcIiByPVwiM1wiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgLz5cclxuICAgIDxwYXRoIGQ9XCJtOC41IDguNSA3IDdcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiAvPlxyXG4gICAgPHBhdGggZD1cIm0xMyAxMSAyIDItMiAyXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNzY2hlZHVsZUljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgPHBvbHlsaW5lIHBvaW50cz1cIjEyLDYgMTIsMTIgMTYsMTRcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjcmVmcmVzaEljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8cGF0aCBkPVwiTTMgMTJhOSA5IDAgMCAxIDktOSA5Ljc1IDkuNzUgMCAwIDEgNi43NCAyLjc0TDIxIDhcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICA8cGF0aCBkPVwiTTIxIDN2NWgtNVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgIDxwYXRoIGQ9XCJNMjEgMTJhOSA5IDAgMCAxLTkgOSA5Ljc1IDkuNzUgMCAwIDEtNi43NC0yLjc0TDMgMTZcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICA8cGF0aCBkPVwiTTMgMjF2LTVoNVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjaGVja0NpcmNsZUljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgPHBhdGggZD1cIm05IDEyIDIgMiA0LTRcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjY2FuY2VsQ2lyY2xlSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XHJcbiAgICA8cGF0aCBkPVwibTE1IDktNiA2bTAtNiA2IDZcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjZXJyb3JJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgLz5cclxuICAgIDxsaW5lIHgxPVwiMTVcIiB5MT1cIjlcIiB4Mj1cIjlcIiB5Mj1cIjE1XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cclxuICAgIDxsaW5lIHgxPVwiOVwiIHkxPVwiOVwiIHgyPVwiMTVcIiB5Mj1cIjE1XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNxdWV1ZUljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8cGF0aCBkPVwiTTMgMTJoMThtLTktOXYxOFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XHJcbiAgICA8cmVjdCB4PVwiMlwiIHk9XCIzXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjZcIiByeD1cIjFcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgIDxyZWN0IHg9XCIyXCIgeT1cIjE1XCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjZcIiByeD1cIjFcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGZpbGw9XCJub25lXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNhcnJvd1VwSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxwYXRoIGQ9XCJtMTggMTUtNi02LTYgNlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNhcnJvd0Rvd25JY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPHBhdGggZD1cIm02IDkgNiA2IDYtNlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICN0b2dnbGVPbkljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8cmVjdCB4PVwiMVwiIHk9XCI1XCIgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjE0XCIgcng9XCI3XCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiAvPlxyXG4gICAgPGNpcmNsZSBjeD1cIjE2XCIgY3k9XCIxMlwiIHI9XCIzXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICN0b2dnbGVPZmZJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPHJlY3QgeD1cIjFcIiB5PVwiNVwiIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIxNFwiIHJ4PVwiN1wiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjEyXCIgcj1cIjNcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGZpbGw9XCJub25lXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNzZWFyY2hJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxMVwiIHI9XCI4XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgPHBhdGggZD1cIm0yMSAyMS00LjM1LTQuMzVcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjdXBsb2FkSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxwYXRoIGQ9XCJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgIDxwb2x5bGluZSBwb2ludHM9XCI3LDEwIDEyLDUgMTcsMTBcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICA8bGluZSB4MT1cIjEyXCIgeTE9XCI1XCIgeDI9XCIxMlwiIHkyPVwiMTVcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvaWNvbi9pY29uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9pY29uL2ljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFrQy9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0Isb0NBQW9DO0lBQ3BDLElBQUksUUFBUTtRQUNWLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNRLElBQUksR0FBUyxPQUFPLENBQUM7SUFDckIsS0FBSyxHQUFVLFNBQVMsQ0FBQztJQUN6QixXQUFXLENBQVUsQ0FBQywrQkFBK0I7SUFDckQsUUFBUSxHQUFhLEtBQUssQ0FBQztJQUMzQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLDhFQUE4RTtJQUN0RSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLElBQ0ksTUFBTSxDQUFDLEdBQXdDO1FBQ2pELHlGQUF5RjtRQUN6RixJQUFJLENBQUMsT0FBTztZQUNWLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLENBQUM7SUFDMUUsQ0FBQztJQUNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQ0QsaURBQWlEO0lBQ3hDLElBQUksR0FBa0MsUUFBUSxDQUFDO0lBQ3hELDhDQUE4QztJQUNwQyxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVMs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RSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0MsZUFBZTtzQkFBM0QsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNHLGdCQUFnQjtzQkFBN0QsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNELGFBQWE7c0JBQXZELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRSxhQUFhO3NCQUF2RCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1UscUJBQXFCO3NCQUF2RSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRixpQkFBaUI7c0JBQS9ELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5leHBvcnQgdHlwZSBJY29uID1cclxuICB8ICdjaGVjaydcclxuICB8ICdjYW5jZWwnXHJcbiAgfCAnZWRpdCdcclxuICB8ICdkZWxldGUnXHJcbiAgfCAnYWRkJ1xyXG4gIHwgJ3ZpZXcnXHJcbiAgfCAnZ2V0J1xyXG4gIHwgJ3NjaGVkdWxlJ1xyXG4gIHwgJ3JlZnJlc2gnXHJcbiAgfCAnY2hlY2tfY2lyY2xlJ1xyXG4gIHwgJ2NhbmNlbF9jaXJjbGUnXHJcbiAgfCAnZXJyb3InXHJcbiAgfCAncXVldWUnXHJcbiAgfCAnYXJyb3dfdXAnXHJcbiAgfCAnYXJyb3dfZG93bidcclxuICB8ICd0b2dnbGVfb24nXHJcbiAgfCAndG9nZ2xlX29mZidcclxuICB8ICdzZWFyY2gnXHJcbiAgfCAndXBsb2FkJ1xyXG4gIHwgJ3BlbmRpbmdfYWN0aW9ucydcclxuICB8ICdwbGF5X2NpcmNsZSc7XHJcbmV4cG9ydCB0eXBlIENvbG9yID0gJ3ByaW1hcnknIHwgJ3NlY29uZGFyeScgfCAnd2FybicgfCAnc3VjY2Vzcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnYzgwLWljb24nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ljb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ljb24uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEM4MEljb25Db21wb25lbnQge1xyXG4gIC8qKiBUYW1hw7FvIGJhc2UgZGVsIGljb25vIChlbiBweCkgKi9cclxuICBnZXQgaWNvblNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAyNCAqIHRoaXMuc2l6ZTtcclxuICB9XHJcbiAgQElucHV0KCkgaWNvbjogSWNvbiA9ICdjaGVjayc7XHJcbiAgQElucHV0KCkgY29sb3I6IENvbG9yID0gJ3ByaW1hcnknO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNvbG9yPzogc3RyaW5nOyAvLyBDb2xvciBwZXJzb25hbGl6YWRvIG9wY2lvbmFsXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2l6ZSA9IDE7XHJcbiAgLyoqIFNpIGVzIHRydWUsIHJlbmRlcml6YSBjb21vIDxidXR0b24+IG5hdGl2bywgc2kgZXMgZmFsc2Ugc29sbyBjb21vIGljb25vICovXHJcbiAgcHJpdmF0ZSBfYnV0dG9uID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBzZXQgYnV0dG9uKHZhbDogYm9vbGVhbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgIC8vIFBlcm1pdGUgdXNhciAnYnV0dG9uJyBhIHNlY2FzLCBjdWFscXVpZXIgdmFsb3IgcXVlIG5vIHNlYSBudWxsL3VuZGVmaW5lZC9mYWxzZSBlcyB0cnVlXHJcbiAgICB0aGlzLl9idXR0b24gPVxyXG4gICAgICB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBmYWxzZSAmJiB2YWwgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG4gIGdldCBidXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnV0dG9uO1xyXG4gIH1cclxuICAvKiogVGlwbyBkZSBib3TDs24gbmF0aXZvIChzb2xvIHNpIGJ1dHRvbj10cnVlKSAqL1xyXG4gIEBJbnB1dCgpIHR5cGU6ICdidXR0b24nIHwgJ3N1Ym1pdCcgfCAncmVzZXQnID0gJ2J1dHRvbic7XHJcbiAgLyoqIE91dHB1dCBwYXJhIGNsaWNrIChzb2xvIHNpIGJ1dHRvbj10cnVlKSAqL1xyXG4gIEBPdXRwdXQoKSBpY29uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjaGVja0ljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBjaGVja0ljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdjYW5jZWxJY29uJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBjYW5jZWxJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgnZWRpdEljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBlZGl0SWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RlbGV0ZUljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGRlbGV0ZUljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdhZGRJY29uJywgeyBzdGF0aWM6IHRydWUgfSkgYWRkSWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ3ZpZXdJY29uJywgeyBzdGF0aWM6IHRydWUgfSkgdmlld0ljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdnZXRJY29uJywgeyBzdGF0aWM6IHRydWUgfSkgZ2V0SWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRJY29uJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkZWZhdWx0SWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NjaGVkdWxlSWNvbicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgc2NoZWR1bGVJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgncmVmcmVzaEljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHJlZnJlc2hJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgnY2hlY2tDaXJjbGVJY29uJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBjaGVja0NpcmNsZUljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdjYW5jZWxDaXJjbGVJY29uJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBjYW5jZWxDaXJjbGVJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgnZXJyb3JJY29uJywgeyBzdGF0aWM6IHRydWUgfSkgZXJyb3JJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgncXVldWVJY29uJywgeyBzdGF0aWM6IHRydWUgfSkgcXVldWVJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgnYXJyb3dVcEljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBhcnJvd1VwSWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ2Fycm93RG93bkljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBhcnJvd0Rvd25JY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgndG9nZ2xlT25JY29uJywgeyBzdGF0aWM6IHRydWUgfSkgdG9nZ2xlT25JY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgndG9nZ2xlT2ZmSWNvbicsIHsgc3RhdGljOiB0cnVlIH0pIHRvZ2dsZU9mZkljb25UcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hJY29uJywgeyBzdGF0aWM6IHRydWUgfSkgc2VhcmNoSWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG4gIEBWaWV3Q2hpbGQoJ3VwbG9hZEljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSB1cGxvYWRJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgncGVuZGluZ0FjdGlvbnNJY29uJywgeyBzdGF0aWM6IHRydWUgfSkgcGVuZGluZ0FjdGlvbnNJY29uVHBsITogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcbiAgQFZpZXdDaGlsZCgncGxheUNpcmNsZUljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBwbGF5Q2lyY2xlSWNvblRwbCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBnZXRJY29uVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8dW5rbm93bj4ge1xyXG4gICAgc3dpdGNoICh0aGlzLmljb24pIHtcclxuICAgICAgY2FzZSAnY2hlY2snOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrSWNvblRwbDtcclxuICAgICAgY2FzZSAnY2FuY2VsJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jYW5jZWxJY29uVHBsO1xyXG4gICAgICBjYXNlICdlZGl0JzpcclxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0SWNvblRwbDtcclxuICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVJY29uVHBsO1xyXG4gICAgICBjYXNlICdhZGQnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEljb25UcGw7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdJY29uVHBsO1xyXG4gICAgICBjYXNlICdnZXQnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEljb25UcGw7XHJcbiAgICAgIGNhc2UgJ3NjaGVkdWxlJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZUljb25UcGw7XHJcbiAgICAgIGNhc2UgJ3JlZnJlc2gnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hJY29uVHBsO1xyXG4gICAgICBjYXNlICdjaGVja19jaXJjbGUnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ2lyY2xlSWNvblRwbDtcclxuICAgICAgY2FzZSAnY2FuY2VsX2NpcmNsZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuY2VsQ2lyY2xlSWNvblRwbDtcclxuICAgICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9ySWNvblRwbDtcclxuICAgICAgY2FzZSAncXVldWUnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXVlSWNvblRwbDtcclxuICAgICAgY2FzZSAnYXJyb3dfdXAnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmFycm93VXBJY29uVHBsO1xyXG4gICAgICBjYXNlICdhcnJvd19kb3duJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5hcnJvd0Rvd25JY29uVHBsO1xyXG4gICAgICBjYXNlICd0b2dnbGVfb24nOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZU9uSWNvblRwbDtcclxuICAgICAgY2FzZSAndG9nZ2xlX29mZic6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlT2ZmSWNvblRwbDtcclxuICAgICAgY2FzZSAnc2VhcmNoJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hJY29uVHBsO1xyXG4gICAgICBjYXNlICd1cGxvYWQnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwbG9hZEljb25UcGw7XHJcbiAgICAgIGNhc2UgJ3BlbmRpbmdfYWN0aW9ucyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ0FjdGlvbnNJY29uVHBsO1xyXG4gICAgICBjYXNlICdwbGF5X2NpcmNsZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheUNpcmNsZUljb25UcGw7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEljb25UcGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaWNvbkNvbG9yKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm4gJyNiZGJkYmQnOyAvLyBncmlzIGRlc2hhYmlsaXRhZG9cclxuICAgIH1cclxuXHJcbiAgICAvLyBTaSBoYXkgdW4gY29sb3IgcGVyc29uYWxpemFkbywgdXNhcmxvIHNpZW1wcmUgKGV4Y2VwdG8gc2kgZXN0w6EgZGlzYWJsZWQpXHJcbiAgICBpZiAodGhpcy5jdXN0b21Db2xvcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21Db2xvcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQYWxldGEgc2ltcGxpZmljYWRhIC0gc29sbyBjb2xvcmVzIGJhc2VcclxuICAgIGNvbnN0IGJhc2VDb2xvcnM6IFJlY29yZDxDb2xvciwgc3RyaW5nPiA9IHtcclxuICAgICAgcHJpbWFyeTogJyMwMDM3NzVjOCcsXHJcbiAgICAgIHNlY29uZGFyeTogJyM2YjcyODAnLFxyXG4gICAgICB3YXJuOiAnI2U1MzkzNScsXHJcbiAgICAgIHN1Y2Nlc3M6ICcjNGNhZjUwJyxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGJhc2VDb2xvcnNbdGhpcy5jb2xvcl0gPz8gJyMyMjInO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGljb25PcGFjaXR5KCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm4gMC41O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFwbGljYXIgb3BhY2l0eSAwLjcgY3VhbmRvIGVzIGNvbG9yIHNlY29uZGFyeSBvIHdhcm4gKHNpbiBjdXN0b21Db2xvcilcclxuICAgIGlmIChcclxuICAgICAgKHRoaXMuY29sb3IgPT09ICdzZWNvbmRhcnknIHx8IHRoaXMuY29sb3IgPT09ICd3YXJuJykgJiZcclxuICAgICAgIXRoaXMuY3VzdG9tQ29sb3JcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gMC43O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAxO1xyXG4gIH0gLy8gSGFuZGxlciBwYXJhIGNsaWNrIGVuIG1vZG8gYnV0dG9uXHJcbiAgb25CdXR0b25DbGljayhldmVudDogRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmljb25DbGljay5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiQGlmIChidXR0b24pIHtcclxuPGJ1dHRvbiB0eXBlPVwie3t0eXBlfX1cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjbGFzcz1cImljb24tYnV0dG9uXCIgW3N0eWxlLndpZHRoLnB4XT1cImljb25TaXplICsgOFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiaWNvblNpemUgKyA4XCIgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRJY29uVGVtcGxhdGUoKVwiPjwvbmctY29udGFpbmVyPlxyXG48L2J1dHRvbj5cclxufSBAZWxzZSB7XHJcbjxzcGFuIGNsYXNzPVwiaWNvbi1zcGFuXCIgW3N0eWxlLndpZHRoLnB4XT1cImljb25TaXplXCIgW3N0eWxlLmhlaWdodC5weF09XCJpY29uU2l6ZVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRJY29uVGVtcGxhdGUoKVwiPjwvbmctY29udGFpbmVyPlxyXG48L3NwYW4+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY2hlY2tJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPHBhdGggZD1cIk01IDEzbDQgNEwxOSA3XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NhbmNlbEljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8cGF0aCBkPVwiTTYgNmwxMiAxMk02IDE4TDE4IDZcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2VkaXRJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPHJlY3QgeD1cIjVcIiB5PVwiMTlcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgLz5cclxuICAgIDxwYXRoIGQ9XCJNMTYuNSAzLjVhMi4xMjEgMi4xMjEgMCAwIDEgMyAzTDcgMTlsLTQgMSAxLTQgMTIuNS0xMi41elwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNkZWxldGVJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPHBhdGggZD1cIk02IDE5YTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjdINnYxMnpNMTkgNGgtMy41bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjYWRkSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxwYXRoIGQ9XCJNMTIgNXYxNE01IDEyaDE0XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICN2aWV3SWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxwYXRoIGQ9XCJNMTIgNUM3IDUgMi43MyA4LjExIDEgMTJjMS43MyAzLjg5IDYgNyAxMSA3czkuMjctMy4xMSAxMS03Yy0xLjczLTMuODktNi03LTExLTd6XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIzXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2dldEljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8Y2lyY2xlIGN4PVwiNlwiIGN5PVwiNlwiIHI9XCIzXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgPGNpcmNsZSBjeD1cIjE4XCIgY3k9XCIxOFwiIHI9XCIzXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgPHBhdGggZD1cIm04LjUgOC41IDcgN1wiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XHJcbiAgICA8cGF0aCBkPVwibTEzIDExIDIgMi0yIDJcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3NjaGVkdWxlSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XHJcbiAgICA8cG9seWxpbmUgcG9pbnRzPVwiMTIsNiAxMiwxMiAxNiwxNFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNyZWZyZXNoSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxwYXRoIGQ9XCJNMyAxMmE5IDkgMCAwIDEgOS05IDkuNzUgOS43NSAwIDAgMSA2Ljc0IDIuNzRMMjEgOFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgIDxwYXRoIGQ9XCJNMjEgM3Y1aC01XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgPHBhdGggZD1cIk0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgIDxwYXRoIGQ9XCJNMyAyMXYtNWg1XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NoZWNrQ2lyY2xlSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XHJcbiAgICA8cGF0aCBkPVwibTkgMTIgMiAyIDQtNFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjYW5jZWxDaXJjbGVJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgLz5cclxuICAgIDxwYXRoIGQ9XCJtMTUgOS02IDZtMC02IDYgNlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNlcnJvckljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgPGxpbmUgeDE9XCIxNVwiIHkxPVwiOVwiIHgyPVwiOVwiIHkyPVwiMTVcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiAvPlxyXG4gICAgPGxpbmUgeDE9XCI5XCIgeTE9XCI5XCIgeDI9XCIxNVwiIHkyPVwiMTVcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3F1ZXVlSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxwYXRoIGQ9XCJNMyAxMmgxOG0tOS05djE4XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cclxuICAgIDxyZWN0IHg9XCIyXCIgeT1cIjNcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiNlwiIHJ4PVwiMVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgPHJlY3QgeD1cIjJcIiB5PVwiMTVcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiNlwiIHJ4PVwiMVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2Fycm93VXBJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPHBhdGggZD1cIm0xOCAxNS02LTYtNiA2XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2Fycm93RG93bkljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8cGF0aCBkPVwibTYgOSA2IDYgNi02XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3RvZ2dsZU9uSWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxyZWN0IHg9XCIxXCIgeT1cIjVcIiB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMTRcIiByeD1cIjdcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIC8+XHJcbiAgICA8Y2lyY2xlIGN4PVwiMTZcIiBjeT1cIjEyXCIgcj1cIjNcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3RvZ2dsZU9mZkljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8cmVjdCB4PVwiMVwiIHk9XCI1XCIgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjE0XCIgcng9XCI3XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiMTJcIiByPVwiM1wiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3NlYXJjaEljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjhcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICA8cGF0aCBkPVwibTIxIDIxLTQuMzUtNC4zNVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICN1cGxvYWRJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPHBhdGggZD1cIk0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgPHBvbHlsaW5lIHBvaW50cz1cIjcsMTAgMTIsNSAxNywxMFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgIDxsaW5lIHgxPVwiMTJcIiB5MT1cIjVcIiB4Mj1cIjEyXCIgeTI9XCIxNVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjcGVuZGluZ0FjdGlvbnNJY29uPlxyXG4gIDxzdmcgW2F0dHIud2lkdGhdPVwiaWNvblNpemVcIiBbYXR0ci5oZWlnaHRdPVwiaWNvblNpemVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBbc3R5bGUub3BhY2l0eV09XCJpY29uT3BhY2l0eVwiPlxyXG4gICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgIDxwb2x5bGluZSBwb2ludHM9XCIxMiw2IDEyLDEyIDE2LDE0XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgPHBhdGggZD1cIk04IDJ2NE0xNiAydjRcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjcGxheUNpcmNsZUljb24+XHJcbiAgPHN2ZyBbYXR0ci53aWR0aF09XCJpY29uU2l6ZVwiIFthdHRyLmhlaWdodF09XCJpY29uU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIFtzdHlsZS5vcGFjaXR5XT1cImljb25PcGFjaXR5XCI+XHJcbiAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgPHBvbHlnb24gcG9pbnRzPVwiMTAsOCAxNiwxMiAxMCwxNlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SWNvbj5cclxuICA8c3ZnIFthdHRyLndpZHRoXT1cImljb25TaXplXCIgW2F0dHIuaGVpZ2h0XT1cImljb25TaXplXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgW3N0eWxlLm9wYWNpdHldPVwiaWNvbk9wYWNpdHlcIj5cclxuICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgLz5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -13,4 +13,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
13
13
  }], propDecorators: { cards: [{
14
14
  type: Input
15
15
  }] } });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdC1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9zdGF0LWNhcmQvc3RhdC1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9zdGF0LWNhcmQvc3RhdC1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQVEsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFnQmhFLE1BQU0sT0FBTyxvQkFBb0I7SUFDdEIsS0FBSyxHQUFjLEVBQUUsQ0FBQzt3R0FEcEIsb0JBQW9COzRGQUFwQixvQkFBb0IscUdDbEJqQyxtakJBY00sc3ZCREFNLFlBQVksK0JBQUUsZ0JBQWdCOzs0RkFJN0Isb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7OEJBS2hDLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSWNvbiwgQzgwSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYXJkRGVmIHtcclxuICBjb2xvcjogc3RyaW5nOyAvLyBBY2VwdGEgY3VhbHF1aWVyIGNvbG9yIENTU1xyXG4gIGljb246IEljb247XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGNvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYzgwLXN0YXQtY2FyZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDODBJY29uQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3RhdC1jYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zdGF0LWNhcmQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEM4MFN0YXRDYXJkQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBjYXJkczogQ2FyZERlZltdID0gW107XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN0YXRzLXNlY3Rpb24gcHktNFwiPlxyXG4gIEBmb3IgKGNhcmQgb2YgY2FyZHM7IHRyYWNrIGNhcmQudGV4dCkge1xyXG4gIDxkaXYgY2xhc3M9XCJzdGF0LWNhcmRcIiBbc3R5bGUuYm9yZGVyLWxlZnQtY29sb3JdPVwiY2FyZC5jb2xvclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInN0YXQtY2FyZC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdGF0LWNvbnRlbnRcIj5cclxuICAgICAgICA8YzgwLWljb24gW2ljb25dPVwiY2FyZC5pY29uXCIgW2NvbG9yXT1cIidzZWNvbmRhcnknXCIgW3NpemVdPVwiMS4xXCI+PC9jODAtaWNvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdC1pbmZvXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdC1udW1iZXJcIj57eyBjYXJkLmNvdW50IH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdC1sYWJlbFwiPnt7IGNhcmQudGV4dCB9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+Il19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdC1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9zdGF0LWNhcmQvc3RhdC1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi9zdGF0LWNhcmQvc3RhdC1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQVEsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFpQmhFLE1BQU0sT0FBTyxvQkFBb0I7SUFDdEIsS0FBSyxHQUFjLEVBQUUsQ0FBQzt3R0FEcEIsb0JBQW9COzRGQUFwQixvQkFBb0IscUdDbkJqQyxtakJBY00sc3ZCRENNLFlBQVksK0JBQUUsZ0JBQWdCOzs0RkFJN0Isb0JBQW9CO2tCQVJoQyxTQUFTOytCQUVFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7OEJBS2hDLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSWNvbiwgQzgwSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYXJkRGVmIHtcclxuICBjb2xvcjogc3RyaW5nOyAvLyBBY2VwdGEgY3VhbHF1aWVyIGNvbG9yIENTU1xyXG4gIGljb246IEljb247XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGNvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdjODAtc3RhdC1jYXJkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEM4MEljb25Db21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGF0LWNhcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3N0YXQtY2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQzgwU3RhdENhcmRDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGNhcmRzOiBDYXJkRGVmW10gPSBbXTtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic3RhdHMtc2VjdGlvbiBweS00XCI+XHJcbiAgQGZvciAoY2FyZCBvZiBjYXJkczsgdHJhY2sgY2FyZC50ZXh0KSB7XHJcbiAgPGRpdiBjbGFzcz1cInN0YXQtY2FyZFwiIFtzdHlsZS5ib3JkZXItbGVmdC1jb2xvcl09XCJjYXJkLmNvbG9yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3RhdC1jYXJkLWNvbnRlbnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN0YXQtY29udGVudFwiPlxyXG4gICAgICAgIDxjODAtaWNvbiBbaWNvbl09XCJjYXJkLmljb25cIiBbY29sb3JdPVwiJ3NlY29uZGFyeSdcIiBbc2l6ZV09XCIxLjFcIj48L2M4MC1pY29uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0LWluZm9cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0LW51bWJlclwiPnt7IGNhcmQuY291bnQgfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0LWxhYmVsXCI+e3sgY2FyZC50ZXh0IH19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './table.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvdGFibGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29tcG9uZW50JztcbiJdfQ==
@@ -18,7 +18,7 @@ import * as i0 from "@angular/core";
18
18
  * - Valores NO vacíos: 0, false (son valores válidos)
19
19
  * - EXCEPCIONES IMPORTANTES:
20
20
  * * En modo creación (creating=true) estas columnas SÍ se muestran
21
- * * En modo edición de una fila específica también se muestran
21
+ * * En modo edición de una fila específica se muestran SOLO si esa fila tiene valor
22
22
  *
23
23
  * 3. POR DEFECTO - Columnas normales
24
24
  * - Se muestran siempre (visualización, creación y edición)
@@ -695,6 +695,32 @@ import * as i0 from "@angular/core";
695
695
  const selectedItems = this.data().filter(item => selectedIds.has(item['id']));
696
696
  this.selectable.emit(selectedItems);
697
697
  }
698
+ /**
699
+ * Verifica si un valor individual está vacío/nulo
700
+ */
701
+ isValueEmpty(value) {
702
+ // Considerar vacío: null, undefined, ''
703
+ if (value === null || value === undefined || value === '') {
704
+ return true;
705
+ }
706
+ // Para números, 0 se considera como valor válido, no vacío
707
+ if (typeof value === 'number') {
708
+ return false;
709
+ }
710
+ // Para booleanos, false se considera como valor válido, no vacío
711
+ if (typeof value === 'boolean') {
712
+ return false;
713
+ }
714
+ // Para arrays vacíos
715
+ if (Array.isArray(value) && value.length === 0) {
716
+ return true;
717
+ }
718
+ // Para objetos vacíos
719
+ if (typeof value === 'object' && value !== null && Object.keys(value).length === 0) {
720
+ return true;
721
+ }
722
+ return false;
723
+ }
698
724
  /**
699
725
  * Verifica si todos los valores de una columna están vacíos/nulos
700
726
  */
@@ -705,27 +731,7 @@ import * as i0 from "@angular/core";
705
731
  }
706
732
  return currentData.every(row => {
707
733
  const value = this.getCellValue(row, column.accessor);
708
- // Considerar vacío: null, undefined, '', 0 (para números), false (para booleanos), arrays/objetos vacíos
709
- if (value === null || value === undefined || value === '') {
710
- return true;
711
- }
712
- // Para números, 0 se considera como valor válido, no vacío
713
- if (typeof value === 'number') {
714
- return false;
715
- }
716
- // Para booleanos, false se considera como valor válido, no vacío
717
- if (typeof value === 'boolean') {
718
- return false;
719
- }
720
- // Para arrays vacíos
721
- if (Array.isArray(value) && value.length === 0) {
722
- return true;
723
- }
724
- // Para objetos vacíos
725
- if (typeof value === 'object' && value !== null && Object.keys(value).length === 0) {
726
- return true;
727
- }
728
- return false;
734
+ return this.isValueEmpty(value);
729
735
  });
730
736
  }
731
737
  /**
@@ -758,7 +764,7 @@ import * as i0 from "@angular/core";
758
764
  * Los headers se muestran si la columna es visible en cualquiera de estos casos:
759
765
  * - Visualización normal
760
766
  * - Modo creación
761
- * - Hay alguna fila en modo edición
767
+ * - Hay una fila en modo edición y esa fila tiene valor en la columna
762
768
  *
763
769
  * @param column - La definición de la columna
764
770
  */
@@ -771,9 +777,18 @@ import * as i0 from "@angular/core";
771
777
  if (this.creating() && column.hideIfAllValuesAreNull === true) {
772
778
  return true;
773
779
  }
774
- // Si hay alguna fila en modo edición, mostrar columnas con hideIfAllValuesAreNull
780
+ // Si hay una fila en modo edición y la columna tiene hideIfAllValuesAreNull
775
781
  if (this.editing() !== null && column.hideIfAllValuesAreNull === true) {
776
- return true;
782
+ // Buscar la fila que se está editando
783
+ const editingRowId = this.editing();
784
+ const editingRow = this.data().find(row => row['id'] === editingRowId);
785
+ if (editingRow) {
786
+ // Solo mostrar el header si la fila en edición tiene valor en esta columna
787
+ const cellValue = this.getCellValue(editingRow, column.accessor);
788
+ return !this.isValueEmpty(cellValue);
789
+ }
790
+ // Si no se encuentra la fila, no mostrar el header
791
+ return false;
777
792
  }
778
793
  // Si hideIfAllValuesAreNull es true y todos los valores están vacíos, ocultar
779
794
  if (column.hideIfAllValuesAreNull === true && this.areAllColumnValuesEmpty(column)) {
@@ -784,7 +799,7 @@ import * as i0 from "@angular/core";
784
799
  }
785
800
  /**
786
801
  * Determina si una columna debe ser visible en una fila específica considerando el modo edición.
787
- * En modo edición de esa fila específica, las columnas con hideIfAllValuesAreNull se muestran.
802
+ * En modo edición, las columnas con hideIfAllValuesAreNull se muestran solo si tienen valor.
788
803
  *
789
804
  * @param column - La definición de la columna
790
805
  * @param row - La fila actual
@@ -794,10 +809,12 @@ import * as i0 from "@angular/core";
794
809
  if (column.visible === false) {
795
810
  return false;
796
811
  }
797
- // PRIORIDAD 2: Si esta fila específica está en modo edición, mostrar columnas con hideIfAllValuesAreNull
812
+ // PRIORIDAD 2: Si esta fila específica está en modo edición y la columna tiene hideIfAllValuesAreNull
798
813
  const isEditingThisRow = this.editing() === row['id'];
799
814
  if (isEditingThisRow && column.hideIfAllValuesAreNull === true) {
800
- return true;
815
+ // En edición, solo mostrar si esta fila específica tiene valor en esta columna
816
+ const cellValue = this.getCellValue(row, column.accessor);
817
+ return !this.isValueEmpty(cellValue);
801
818
  }
802
819
  // PRIORIDAD 3: Si hideIfAllValuesAreNull es true y todos los valores están vacíos, ocultar
803
820
  if (column.hideIfAllValuesAreNull === true && this.areAllColumnValuesEmpty(column)) {
@@ -880,4 +897,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
880
897
  }], selectable: [{
881
898
  type: Output
882
899
  }] } });
883
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFlBQVksRUFHWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFrQjNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURHLENBUUgsTUFBTSxPQUFPLGlCQUFpQjtJQUNYLFlBQVksR0FBaUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFELEtBQUssQ0FBbUI7SUFDeEIsT0FBTyxHQUFxQixFQUFFLENBQUM7SUFDL0IsWUFBWSxDQUEwQixDQUFDLGlGQUFpRjtJQUN4SCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkRBQTZEO0lBQ3ZFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyx5Q0FBeUM7SUFFbkUsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLGdEQUFnRDtJQUN6RCxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXlELENBQUM7SUFDekYsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFxRSxDQUFDO0lBQ3JHLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBZ0QsQ0FBQztJQUNoRixZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWdELENBQUM7SUFDaEYsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7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SyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxNQUFNLGdiQ3BHckcsdTdXQXdQdUIsb2dIRC9KWCxnQkFBZ0IsNkpBQUUsaUJBQWlCOzs0RkFJbEMsaUJBQWlCO2tCQVIxQixTQUFTOytCQUVELFdBQVcsY0FDVCxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQzs4QkFNckMsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVOLFNBQVM7c0JBRFIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQXVCLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO2dCQUUzRixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQzgwSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQzgwTW9kYWxDb21wb25lbnQsIE1vZGFsU2VydmljZSB9IGZyb20gJy4uL21vZGFsJztcblxuZXhwb3J0IGludGVyZmFjZSBDODBUYWJsZUNvbERlZiB7XG4gIGFjY2Vzc29yOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHZpc2libGU/OiBib29sZWFuOyAvLyBTaSBubyBzZSBlc3BlY2lmaWNhLCBzZSBhc3VtZSB0cnVlLiBTaSBlcyBmYWxzZSwgbGEgY29sdW1uYSBzZSBvY3VsdGEgU0lFTVBSRSAobcOheGltYSBwcmlvcmlkYWQpXG4gIHR5cGU/OiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2ludGVnZXInIHwgJ2Jvb2xlYW4nIHwgJ3Bhc3N3b3JkJyB8ICdlbnVtJzsgLy8gVGlwbyBkZSBkYXRvIHBhcmEgbGEgY29sdW1uYVxuICBvcmRlcj86ICdBU0MnIHwgJ0RFU0MnOyAvLyBPcmRlbmFtaWVudG8gZGUgbGEgY29sdW1uYVxuICByZWFkT25seT86IGJvb2xlYW47IC8vIFNpIG5vIHNlIGVzcGVjaWZpY2EsIHNlIGFzdW1lIGZhbHNlXG4gIGVudW0/OiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+OyAvLyBPcGNpb25lcyBkZWwgZW51bSBwYXJhIHR5cGUgJ2VudW0nXG4gIGNvbG9yPzogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgc3RyaW5nPjsgLy8gQ29sb3JlcyBDU1MgYmFzYWRvcyBlbiBlbCB2YWxvciBkZSBsYSBjZWxkYVxuICBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsPzogYm9vbGVhbjsgLy8gU2kgZXMgdHJ1ZSwgb2N1bHRhIGxhIGNvbHVtbmEgY3VhbmRvIHRvZG9zIGxvcyB2YWxvcmVzIGVzdMOhbiB2YWPDrW9zIChkZWZhdWx0OiBmYWxzZSkuXG4gIC8vIFNvbG8gYXBsaWNhIHNpIHZpc2libGUgIT09IGZhbHNlLiBFWENFUENJw5NOOiBFbiBtb2RvIGNyZWFjacOzbiBZIGVkaWNpw7NuIHNpZW1wcmUgc2UgbXVlc3RyYS5cbiAgZGVmYXVsdD86IHVua25vd247IC8vIFZhbG9yIHBvciBkZWZlY3RvIHBhcmEgdXNhciBlbiBtb2RvIGNyZWFjacOzbi4gUHVlZGUgc2VyIHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBldGMuXG59XG5cbmV4cG9ydCB0eXBlIElEID0gbnVtYmVyIHwgc3RyaW5nO1xuXG4vKipcbiAqIEM4MFRhYmxlQ29tcG9uZW50IC0gQ29tcG9uZW50ZSBkZSB0YWJsYSBhdmFuemFkbyBjb24gZnVuY2lvbmFsaWRhZGVzIENSVURcbiAqXG4gKiBDT01QT1JUQU1JRU5UTyBERSBWSVNJQklMSURBRCBERSBDT0xVTU5BUzpcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKiAxLiBQUklPUklEQUQgTcOBWElNQSAtIHZpc2libGU6IGZhbHNlXG4gKiAgICAtIExhIGNvbHVtbmEgc2Ugb2N1bHRhIFNJRU1QUkUsIHNpbiBleGNlcGNpb25lc1xuICogICAgLSBOaSBlbiBtb2RvIGNyZWFjacOzbiBuaSBlbiBtb2RvIGVkaWNpw7NuIHNlIG11ZXN0cmFcbiAqXG4gKiAyLiBPQ1VMVEFDScOTTiBBVVRPTcOBVElDQSAtIGhpZGVJZkFsbFZhbHVlc0FyZU51bGw6IHRydWVcbiAqICAgIC0gTGEgY29sdW1uYSBzZSBvY3VsdGEgc29sbyBzaSBUT0RPUyBsb3MgdmFsb3JlcyBhY3R1YWxlcyBlc3TDoW4gdmFjw61vc1xuICogICAgLSBWYWxvcmVzIGNvbnNpZGVyYWRvcyB2YWPDrW9zOiBudWxsLCB1bmRlZmluZWQsICcnLCBbXSwge31cbiAqICAgIC0gVmFsb3JlcyBOTyB2YWPDrW9zOiAwLCBmYWxzZSAoc29uIHZhbG9yZXMgdsOhbGlkb3MpXG4gKiAgICAtIEVYQ0VQQ0lPTkVTIElNUE9SVEFOVEVTOlxuICogICAgICAqIEVuIG1vZG8gY3JlYWNpw7NuIChjcmVhdGluZz10cnVlKSBlc3RhcyBjb2x1bW5hcyBTw40gc2UgbXVlc3RyYW5cbiAqICAgICAgKiBFbiBtb2RvIGVkaWNpw7NuIGRlIHVuYSBmaWxhIGVzcGVjw61maWNhIHRhbWJpw6luIHNlIG11ZXN0cmFuXG4gKlxuICogMy4gUE9SIERFRkVDVE8gLSBDb2x1bW5hcyBub3JtYWxlc1xuICogICAgLSBTZSBtdWVzdHJhbiBzaWVtcHJlICh2aXN1YWxpemFjacOzbiwgY3JlYWNpw7NuIHkgZWRpY2nDs24pXG4gKlxuICogVkFMT1JFUyBQT1IgREVGRUNUTyBFTiBDUkVBQ0nDk046XG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKlxuICogLSBQcm9waWVkYWQgYGRlZmF1bHQ/OiB1bmtub3duYCBwZXJtaXRlIGRlZmluaXIgdmFsb3JlcyBwb3IgZGVmZWN0byBwYXJhIG1vZG8gY3JlYWNpw7NuXG4gKiAtIFNvbG8gc2UgYXBsaWNhIGN1YW5kbyBzZSBpbmljaWEgZWwgbW9kbyBjcmVhY2nDs24gKHN0YXJ0Q3JlYXRlKVxuICogLSBQdWVkZSBzZXIgY3VhbHF1aWVyIHRpcG86IHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBldGMuXG4gKiAtIFNpIG5vIHNlIGVzcGVjaWZpY2EgYGRlZmF1bHRgLCBzZSB1c2EgY2FkZW5hIHZhY8OtYSAoJycpXG4gKlxuICogVkFMT1JFUyBESU7DgU1JQ09TIEVOIENSRUFDScOTTiBZIEVESUNJw5NOOlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKlxuICogLSBJbnB1dCBgaW5wdXRWYWx1ZXMkPzogT2JzZXJ2YWJsZTxQYXJ0aWFsPFQ+PmAgcGVybWl0ZSBhY3R1YWxpemFyIHZhbG9yZXMgZGluw6FtaWNhbWVudGVcbiAqIC0gU29sbyBzZSBhcGxpY2EgZHVyYW50ZSBtb2RvIGNyZWFjacOzbiAoY3JlYXRpbmc9dHJ1ZSkgbyBlZGljacOzbiAoZWRpdGluZyE9bnVsbClcbiAqIC0gTG9zIHZhbG9yZXMgc2UgYXBsaWNhbiBhdXRvbcOhdGljYW1lbnRlIGN1YW5kbyBlbCBPYnNlcnZhYmxlIGVtaXRlXG4gKiAtIFBlcm1pdGUgY2FtYmlvcyBtw7psdGlwbGVzIGR1cmFudGUgZWwgbWlzbW8gbW9kbyBkZSBjcmVhY2nDs24vZWRpY2nDs25cbiAqIC0gTG9zIG51ZXZvcyB2YWxvcmVzIHNvYnJlc2NyaWJlbiBsb3MgZXhpc3RlbnRlcyAoc3ByZWFkIG9wZXJhdG9yKVxuICpcbiAqIFRJUE9TIERFIERBVE9TIFNPUE9SVEFET1M6XG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gKlxuICogLSAnc3RyaW5nJzogVGV4dG8gbm9ybWFsIChkZWZhdWx0KVxuICogLSAnbnVtYmVyJzogTsO6bWVyb3MgZGVjaW1hbGVzIChwcmVzZXJ2YSBkZWNpbWFsZXM6IDUuMyDihpIgNS4zKVxuICogLSAnaW50ZWdlcic6IE7Dum1lcm9zIGVudGVyb3MgKGNvbnZpZXJ0ZSBhIGVudGVybzogNS4zIOKGkiA1KVxuICogLSAnYm9vbGVhbic6IFZlcmRhZGVyby9GYWxzbyAoY2hlY2tib3gpXG4gKiAtICdwYXNzd29yZCc6IFRleHRvIG9jdWx0byAoaW5wdXQgdHlwZT1cInBhc3N3b3JkXCIpXG4gKiAtICdlbnVtJzogTGlzdGEgZGUgb3BjaW9uZXMgcHJlZGVmaW5pZGFzIChzZWxlY3QpXG4gKlxuICogRUpFTVBMT1M6XG4gKiAtIHsgYWNjZXNzb3I6ICdpZCcsIHZpc2libGU6IGZhbHNlIH0g4oaSIE5VTkNBIHNlIG11ZXN0cmFcbiAqIC0geyBhY2Nlc3NvcjogJ21vdG9yUG9zJywgaGlkZUlmQWxsVmFsdWVzQXJlTnVsbDogdHJ1ZSwgZGVmYXVsdDogMCwgdHlwZTogJ2ludGVnZXInIH0g4oaSIEVudGVybyAoNS43IOKGkiA1KVxuICogLSB7IGFjY2Vzc29yOiAnd2VpZ2h0JywgdHlwZTogJ251bWJlcicsIGRlZmF1bHQ6IDIuNSB9IOKGkiBEZWNpbWFsIHByZXNlcnZhZG8gKDUuNyDihpIgNS43KVxuICogLSB7IGFjY2Vzc29yOiAnc3RhdHVzJywgZGVmYXVsdDogJ2FjdGl2ZScgfSDihpIgU2UgYXV0b3JlbGxlbmEgY29uICdhY3RpdmUnIGVuIGNyZWFjacOzblxuICogLSB7IGFjY2Vzc29yOiAnbmFtZScgfSDihpIgU2llbXByZSB2aXNpYmxlLCBzaW4gdmFsb3IgcG9yIGRlZmVjdG8gKGNhZGVuYSB2YWPDrWEpXG4gKiAtIGlucHV0VmFsdWVzJCBlbWl0ZSB7IG1vdG9yUG9zOiA1LCB3ZWlnaHQ6IDIuMyB9IOKGkiBhY3R1YWxpemEgaW5wdXRzIGRpbsOhbWljYW1lbnRlXG4gKi9AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdjODAtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQzgwSWNvbkNvbXBvbmVudCwgQzgwTW9kYWxDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFibGUuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBDODBUYWJsZUNvbXBvbmVudDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG4gIEBJbnB1dCgpIGRhdGEkITogT2JzZXJ2YWJsZTxUW10+O1xuICBASW5wdXQoKSBjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdID0gW107XG4gIEBJbnB1dCgpIGlucHV0VmFsdWVzJD86IE9ic2VydmFibGU8UGFydGlhbDxUPj47IC8vIE9ic2VydmFibGUgcGFyYSBhY3R1YWxpemFyIHZhbG9yZXMgZGUgaW5wdXRzIGRpbsOhbWljYW1lbnRlIGVuIGNyZWFjacOzbi9lZGljacOzblxuICBASW5wdXQoKSBzaXplID0gMDsgLy8gVGFtYcOxbyBkZSBsYSB0YWJsYSAoMCA9IHNpbiBsw61taXRlLCA+IDAgYXBsaWNhIG1heC1oZWlnaHQpXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gdHJ1ZTsgLy8gUGVybWl0ZSBzZWxlY2Npw7NuIG3Dumx0aXBsZSBwb3IgZGVmZWN0b1xuICBASW5wdXQoeyB0cmFuc2Zvcm06ICh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykgPT4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZScgfSlcbiAgbm9Db25maXJtID0gZmFsc2U7IC8vIFNpIGVzIHRydWUsIG5vIG11ZXN0cmEgY29uZmlybWFjaW9uZXMgbW9kYWxlc1xuICBAT3V0cHV0KCkgY3JlYXRlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJvdzogUGFydGlhbDxUPjsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIHVwZGF0ZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogSUQ7IGNoYW5nZXM6IFBhcnRpYWw8VD47IGRvbmU6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQ7IH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuICBAT3V0cHV0KCkgY2FuY2VsQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBJRDsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIHZpZXdBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSB1cGxvYWRBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBnZXRSb3dCdXR0b25BY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBtb3ZlVXBBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuICBAT3V0cHV0KCkgbW92ZURvd25BY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuICBAT3V0cHV0KCkgZW5hYmxlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBJRDsgZW5hYmxlZDogYm9vbGVhbjsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaFRlcm0gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAT3V0cHV0KCkgZXJyb3JFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0YWJsZSA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xuXG4gIHJlYWRvbmx5IGRhdGEgPSBzaWduYWw8VFtdPihbXSk7XG4gIHJlYWRvbmx5IGtleXMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgY3JlYXRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBuZXdSb3cgPSBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBlZGl0aW5nID0gc2lnbmFsPElEIHwgbnVsbD4obnVsbCk7IC8vIGlkIG9mIHJvdyBiZWluZyBlZGl0ZWRcbiAgcmVhZG9ubHkgZWRpdFJvdyA9IHNpZ25hbDxQYXJ0aWFsPFQ+IHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMgPSBzaWduYWw8U2V0PElEPj4obmV3IFNldCgpKTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsQ2hlY2tlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBzZWFyY2hWYWx1ZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcblxuICAvLyBGbGFncyB0byBjaGVjayBpZiBldmVudHMgaGF2ZSBsaXN0ZW5lcnNcbiAgcmVhZG9ubHkgaGFzQ3JlYXRlQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNVcGRhdGVBY3Rpb25MaXN0ZW5lciA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc0RlbGV0ZUFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzQ2FuY2VsQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNWaWV3QWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNVcGxvYWRBY3Rpb25MaXN0ZW5lciA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc0dldFJvd0J1dHRvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzTW92ZVVwQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNNb3ZlRG93bkFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzRW5hYmxlQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNTZWFyY2hUZXJtTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNTZWxlY3RhYmxlTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgZGF0YVN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBpbnB1dFZhbHVlc1N1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnI6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHJldHVybiAoZXJyIGFzIGFueSk/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGNhcmdhciBkYXRvcyc7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGxhcyBrZXlzIGRlIGNvbHVtbmFzIHZpc2libGVzIGJhc8OhbmRvc2UgZW4gZWwgZXN0YWRvIGFjdHVhbFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlS2V5cygpOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IHRoaXMuaXNDb2x1bW5WaXNpYmxlSW5IZWFkZXIoY29sKSk7XG4gICAgdGhpcy5rZXlzLnNldCh2aXNpYmxlQ29sdW1ucy5tYXAoKGNvbCkgPT4gY29sLmFjY2Vzc29yKSk7XG4gIH1cblxuICAvKipcbiAgICogQXBsaWNhIHZhbG9yZXMgcGFyY2lhbGVzIGEgbG9zIGlucHV0cyBlbiBtb2RvIGNyZWFjacOzbiBvIGVkaWNpw7NuLlxuICAgKiBTb2xvIGFjdHVhbGl6YSBzaSBlc3RhbW9zIGVuIG1vZG8gY3JlYWNpw7NuIChjcmVhdGluZyA9IHRydWUpIG8gZWRpY2nDs24gKGVkaXRpbmcgIT0gbnVsbClcbiAgICovXG4gIHByaXZhdGUgYXBwbHlJbnB1dFZhbHVlcyhwYXJ0aWFsVmFsdWVzOiBQYXJ0aWFsPFQ+KTogdm9pZCB7XG4gICAgLy8gU29sbyBhcGxpY2FyIHZhbG9yZXMgc2kgZXN0YW1vcyBlbiBtb2RvIGNyZWFjacOzbiBvIGVkaWNpw7NuXG4gICAgaWYgKCF0aGlzLmNyZWF0aW5nKCkgJiYgdGhpcy5lZGl0aW5nKCkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBcGxpY2FyIHZhbG9yZXMgZW4gbW9kbyBjcmVhY2nDs25cbiAgICBpZiAodGhpcy5jcmVhdGluZygpKSB7XG4gICAgICBjb25zdCBjdXJyZW50Um93ID0gdGhpcy5uZXdSb3coKTtcbiAgICAgIGlmIChjdXJyZW50Um93KSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSB7IC4uLmN1cnJlbnRSb3csIC4uLnBhcnRpYWxWYWx1ZXMgfTtcbiAgICAgICAgdGhpcy5uZXdSb3cuc2V0KHVwZGF0ZWRSb3cpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwbGljYXIgdmFsb3JlcyBlbiBtb2RvIGVkaWNpw7NuXG4gICAgaWYgKHRoaXMuZWRpdGluZygpICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjdXJyZW50RWRpdFJvdyA9IHRoaXMuZWRpdFJvdygpO1xuICAgICAgaWYgKGN1cnJlbnRFZGl0Um93KSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRFZGl0Um93ID0geyAuLi5jdXJyZW50RWRpdFJvdywgLi4ucGFydGlhbFZhbHVlcyB9O1xuICAgICAgICB0aGlzLmVkaXRSb3cuc2V0KHVwZGF0ZWRFZGl0Um93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgb3V0cHV0cyBoYXZlIGxpc3RlbmVyc1xuICAgIHRoaXMuaGFzQ3JlYXRlQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMuY3JlYXRlQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc1VwZGF0ZUFjdGlvbkxpc3RlbmVyLnNldCh0aGlzLnVwZGF0ZUFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNEZWxldGVBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy5kZWxldGVBY3Rpb24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFzQ2FuY2VsQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMuY2FuY2VsQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc1ZpZXdBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy52aWV3QWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc1VwbG9hZEFjdGlvbkxpc3RlbmVyLnNldCh0aGlzLnVwbG9hZEFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNHZXRSb3dCdXR0b25MaXN0ZW5lci5zZXQodGhpcy5nZXRSb3dCdXR0b25BY3Rpb24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFzTW92ZVVwQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMubW92ZVVwQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc01vdmVEb3duQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMubW92ZURvd25BY3Rpb24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFzRW5hYmxlQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMuZW5hYmxlQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc1NlYXJjaFRlcm1MaXN0ZW5lci5zZXQodGhpcy5zZWFyY2hUZXJtLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc1NlbGVjdGFibGVMaXN0ZW5lci5zZXQodGhpcy5zZWxlY3RhYmxlLm9ic2VydmVkKTtcblxuICAgIGlmICghdGhpcy5kYXRhJCkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YVN1YiA9IHRoaXMuZGF0YSQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChpdGVtcykgPT4ge1xuICAgICAgICB0aGlzLmFwcGx5U29ydGluZyhpdGVtcyk7XG4gICAgICAgIHRoaXMuZGF0YS5zZXQoaXRlbXMpO1xuICAgICAgICAvLyBBY3R1YWxpemFyIGxhcyBjb2x1bW5hcyB2aXNpYmxlcyBiYXPDoW5kb3NlIGVuIGVsIGVzdGFkbyBhY3R1YWxcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlS2V5cygpO1xuICAgICAgICAvLyBNYW50ZW5lciBsYSBzZWxlY2Npw7NuIGV4aXN0ZW50ZSBkZXNwdcOpcyBkZSBhY3R1YWxpemFyIGxvcyBkYXRvc1xuICAgICAgICB0aGlzLnByZXNlcnZlU2VsZWN0aW9uKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT5cbiAgICAgICAgdGhpcy5lcnJvckV2ZW50LmVtaXQodGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyKSksXG4gICAgfSk7XG5cbiAgICAvLyBTdXNjcmliaXJzZSBhIGlucHV0VmFsdWVzJCBwYXJhIGFjdHVhbGl6YXIgdmFsb3JlcyBkaW7DoW1pY2FtZW50ZSBlbiBjcmVhY2nDs24vZWRpY2nDs25cbiAgICBpZiAodGhpcy5pbnB1dFZhbHVlcyQpIHtcbiAgICAgIHRoaXMuaW5wdXRWYWx1ZXNTdWIgPSB0aGlzLmlucHV0VmFsdWVzJC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocGFydGlhbFZhbHVlcykgPT4ge1xuICAgICAgICAgIHRoaXMuYXBwbHlJbnB1dFZhbHVlcyhwYXJ0aWFsVmFsdWVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT5cbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIGVuIGlucHV0VmFsdWVzJDonLCB0aGlzLmdldEVycm9yTWVzc2FnZShlcnIpKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGF0YVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmlucHV0VmFsdWVzU3ViPy51bnN1YnNjcmliZSgpO1xuXG4gICAgLy8gQ2xvc2UgYW55IG9wZW4gbW9kYWwgd2hlbiBjb21wb25lbnQgaXMgZGVzdHJveWVkXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuY2xvc2VNb2RhbCgpO1xuICB9XG5cbiAgb25JbnB1dChldmVudDogRXZlbnQsIGtleTogc3RyaW5nLCBjb2w/OiBDODBUYWJsZUNvbERlZikge1xuICAgIGlmIChjb2w/LnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICAgIHRoaXMudXBkYXRlTmV3Um93KGtleSwgY2hlY2tlZCk7XG4gICAgfSBlbHNlIGlmIChjb2w/LnR5cGUgPT09ICdlbnVtJykge1xuICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlTmV3Um93KGtleSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldC52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy51cGRhdGVOZXdSb3coa2V5LCB0YXJnZXQudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRGVsZXRlKHJvdzogVCkge1xuICAgIGNvbnN0IGlkID0gcm93WydpZCddIGFzIElEO1xuXG4gICAgbGV0IGNvbmZpcm1lZCA9IHRydWU7XG4gICAgaWYgKCF0aGlzLm5vQ29uZmlybSkge1xuICAgICAgY29uZmlybWVkID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgJ0NvbmZpcm1hciBlbGltaW5hY2nDs24nLFxuICAgICAgICAnwr9Fc3TDoSBzZWd1cm8gZGUgcXVlIGRlc2VhIGVsaW1pbmFyIGVzdGUgZWxlbWVudG8/IEVzdGEgYWNjacOzbiBubyBzZSBwdWVkZSBkZXNoYWNlci4nLFxuICAgICAgICAnRWxpbWluYXInLFxuICAgICAgICAnQ2FuY2VsYXInXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIHRoaXMuZGVsZXRlQWN0aW9uLmVtaXQoe1xuICAgICAgICBpZCxcbiAgICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2VzcykgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkNhbmNlbChyb3c6IFQpIHtcbiAgICBjb25zdCBpZCA9IHJvd1snaWQnXSBhcyBJRDtcblxuICAgIGxldCBjb25maXJtZWQgPSB0cnVlO1xuICAgIGlmICghdGhpcy5ub0NvbmZpcm0pIHtcbiAgICAgIGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICdDb25maXJtYXIgY2FuY2VsYWNpw7NuJyxcbiAgICAgICAgJ8K/RXN0w6Egc2VndXJvIGRlIHF1ZSBkZXNlYSBjYW5jZWxhciBlc3RlIGVsZW1lbnRvPycsXG4gICAgICAgICdDYW5jZWxhciBlbGVtZW50bycsXG4gICAgICAgICdObyBjYW5jZWxhcidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgdGhpcy5jYW5jZWxBY3Rpb24uZW1pdCh7XG4gICAgICAgIGlkLFxuICAgICAgICBkb25lOiAoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChzdWNjZXNzKSB0aGlzLmNhbmNlbEVkaXQoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0Q3JlYXRlKCkge1xuICAgIHRoaXMuY3JlYXRpbmcuc2V0KHRydWUpO1xuICAgIC8vIEFjdHVhbGl6YXIga2V5cyBkZSBjb2x1bW5hcyB2aXNpYmxlcyBjdWFuZG8gZW50cmFtb3MgZW4gbW9kbyBjcmVhY2nDs25cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVLZXlzKCk7XG4gICAgLy8gSW5pY2lhbGl6YSBuZXdSb3cgc29sbyBjb24gY29sdW1uYXMgdmlzaWJsZXMgeSBubyByZWFkT25seVxuICAgIC8vIEVuIG1vZG8gY3JlYWNpw7NuLCBtb3N0cmFtb3MgY29sdW1uYXMgY29uIGhpZGVJZkFsbFZhbHVlc0FyZU51bGwgcGFyYSBwZXJtaXRpciBlbnRyYWRhIGRlIGRhdG9zXG4gICAgY29uc3Qgcm93OiBQYXJ0aWFsPFQ+ID0ge307XG4gICAgdGhpcy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2wpID0+IHRoaXMuaXNDb2x1bW5WaXNpYmxlKGNvbCwgdHJ1ZSkgJiYgIWNvbC5yZWFkT25seSlcbiAgICAgIC5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgLy8gU2kgbGEgY29sdW1uYSB0aWVuZSB1biB2YWxvciBwb3IgZGVmZWN0bywgdXNhcmxvOyBzaSBubywgdXNhciBjYWRlbmEgdmFjw61hXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGNvbC5kZWZhdWx0ICE9PSB1bmRlZmluZWQgPyBjb2wuZGVmYXVsdCA6ICcnO1xuICAgICAgICAocm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtjb2wuYWNjZXNzb3JdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfSk7XG4gICAgdGhpcy5uZXdSb3cuc2V0KHJvdyk7XG4gIH1cblxuICBjYW5jZWxDcmVhdGUoKSB7XG4gICAgdGhpcy5jcmVhdGluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMubmV3Um93LnNldChudWxsKTtcbiAgICAvLyBBY3R1YWxpemFyIGtleXMgZGUgY29sdW1uYXMgdmlzaWJsZXMgY3VhbmRvIHNhbGltb3MgZGVsIG1vZG8gY3JlYWNpw7NuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlS2V5cygpO1xuICB9XG5cbiAgdXBkYXRlTmV3Um93KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLm5ld1JvdygpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuICAgIHRoaXMubmV3Um93LnNldCh7IC4uLmN1cnJlbnQsIFtrZXldOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIHNhdmVDcmVhdGUoKSB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5uZXdSb3coKTtcbiAgICBpZiAoIXJvdykgcmV0dXJuO1xuXG4gICAgLy8gVmFsaWRhciBjYW1wb3MgcmVxdWVyaWRvcyBhbnRlcyBkZSBjcmVhciAtIHNvbG8gY29sdW1uYXMgdmlzaWJsZXMgeSBubyByZWFkT25seVxuICAgIC8vIEVuIG1vZG8gY3JlYWNpw7NuLCBpbmNsdWltb3MgY29sdW1uYXMgY29uIGhpZGVJZkFsbFZhbHVlc0FyZU51bGxcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gdGhpcy5pc0NvbHVtblZpc2libGUoY29sLCB0cnVlKSAmJiAhY29sLnJlYWRPbmx5KTtcbiAgICBjb25zdCBjb252ZXJ0ZWQgPSB2aXNpYmxlQ29sdW1ucy5yZWR1Y2UoKGFjYywgY29sKSA9PiB7XG4gICAgICBhY2NbY29sLmFjY2Vzc29yXSA9IHRoaXMuY29udmVydENlbGxWYWx1ZShyb3dbY29sLmFjY2Vzc29yXSwgY29sKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIGFzIFBhcnRpYWw8VD47XG5cbiAgICB0aGlzLmNyZWF0ZUFjdGlvbi5lbWl0KHtcbiAgICAgIHJvdzogY29udmVydGVkLFxuICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbENyZWF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgY2VsbCB2YWx1ZSBiYXNlZCBvbiBjb2x1bW4gdHlwZSBvciBzYW1wbGUgZGF0YS5cbiAgICogSGFuZGxlcyBzdHJpbmdpZmljYXRpb24gb2Ygb2JqZWN0cyBmb3Igc3RyaW5nIGNvbHVtbnMuXG4gICAqL1xuICAvKipcbiAgICogQ29udmVydHMgYSBjZWxsIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiB0eXBlIG9yIHNhbXBsZSBkYXRhLlxuICAgKiBEZWxlZ2F0ZXMgdG8gdHlwZS1zcGVjaWZpYyBoZWxwZXJzIGZvciBjbGFyaXR5IGFuZCBtYWludGFpbmFiaWxpdHkuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRDZWxsVmFsdWUodmFsdWU6IHVua25vd24sIGNvbDogQzgwVGFibGVDb2xEZWYpOiB1bmtub3duIHtcbiAgICBpZiAoY29sLnR5cGUgPT09ICdib29sZWFuJykgcmV0dXJuIHRoaXMudG9Cb29sZWFuKHZhbHVlKTtcbiAgICBpZiAoY29sLnR5cGUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy50b051bWJlcih2YWx1ZSk7XG4gICAgaWYgKGNvbC50eXBlID09PSAnaW50ZWdlcicpIHJldHVybiB0aGlzLnRvSW50ZWdlcih2YWx1ZSk7XG4gICAgaWYgKGNvbC50eXBlID09PSAnc3RyaW5nJyB8fCBjb2wudHlwZSA9PT0gJ3Bhc3N3b3JkJylcbiAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nVmFsdWUodmFsdWUpO1xuXG4gICAgLy8gRmFsbGJhY2s6IHVzZSBzYW1wbGUgZGF0YSBpZiBhdmFpbGFibGVcbiAgICBjb25zdCBzYW1wbGUgPSB0aGlzLmRhdGEoKVswXTtcbiAgICBpZiAoc2FtcGxlKSB7XG4gICAgICBjb25zdCBzYW1wbGVWYWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHNhbXBsZSwgY29sLmFjY2Vzc29yKTtcbiAgICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIHRoaXMudG9Cb29sZWFuKHZhbHVlKTtcbiAgICAgIGlmICh0eXBlb2Ygc2FtcGxlVmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdGhpcy50b051bWJlcih2YWx1ZSk7XG4gICAgICBpZiAodHlwZW9mIHNhbXBsZVZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHRoaXMudG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0cyB2YWx1ZSB0byBib29sZWFuIHVzaW5nIGJlc3QgcHJhY3RpY2VzLiAqL1xuICBwcml2YXRlIHRvQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKVxuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHwgdmFsdWUudHJpbSgpID09PSAnMSc7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB2YWx1ZSA9PT0gMTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQ29udmVydHMgdmFsdWUgdG8gbnVtYmVyIHVzaW5nIGJlc3QgcHJhY3RpY2VzLiAqL1xuICBwcml2YXRlIHRvTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICAgICAgaWYgKHRyaW1tZWQgPT09ICcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHRyaW1tZWQpO1xuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyB1bmRlZmluZWQgOiBudW07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbHVlID8gMSA6IDA7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0cyB2YWx1ZSB0byBpbnRlZ2VyIHVzaW5nIGJlc3QgcHJhY3RpY2VzLiAqL1xuICBwcml2YXRlIHRvSW50ZWdlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkID09PSAnJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG51bSA9IE51bWJlcih0cmltbWVkKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gdW5kZWZpbmVkIDogTWF0aC5mbG9vcihudW0pO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiB2YWx1ZSA/IDEgOiAwO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQ29udmVydHMgdmFsdWUgdG8gc3RyaW5nIHVzaW5nIGJlc3QgcHJhY3RpY2VzLCBhbHdheXMgc3RyaW5naWZpZXMgb2JqZWN0cy4gKi9cbiAgcHJpdmF0ZSB0b1N0cmluZ1ZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpXG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gJ1tvYmplY3QgT2JqZWN0XSc7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEZvciBmdW5jdGlvbnMsIHN5bWJvbHMsIHVuZGVmaW5lZCwgZXRjLiwgcmV0dXJuIGVtcHR5IHN0cmluZ1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uRWRpdChyb3c6IFQpIHtcbiAgICB0aGlzLmVkaXRpbmcuc2V0KHJvd1snaWQnXSBhcyBJRCk7XG4gICAgLy8gQWN0dWFsaXphciBrZXlzIGRlIGNvbHVtbmFzIHZpc2libGVzIGN1YW5kbyBlbnRyYW1vcyBlbiBtb2RvIGVkaWNpw7NuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlS2V5cygpO1xuICAgIGNvbnN0IGVkaXQ6IFBhcnRpYWw8VD4gPSB7fTtcbiAgICB0aGlzLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gdGhpcy5pc0NvbHVtblZpc2libGUoY29sLCB0cnVlKSAmJiAhY29sLnJlYWRPbmx5KVxuICAgICAgLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKTtcbiAgICAgICAgKGVkaXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2NvbC5hY2Nlc3Nvcl0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZWRpdFJvdy5zZXQoZWRpdCk7XG4gIH1cblxuICBjYW5jZWxFZGl0KCkge1xuICAgIHRoaXMuZWRpdGluZy5zZXQobnVsbCk7XG4gICAgdGhpcy5lZGl0Um93LnNldChudWxsKTtcbiAgICAvLyBBY3R1YWxpemFyIGtleXMgZGUgY29sdW1uYXMgdmlzaWJsZXMgY3VhbmRvIHNhbGltb3MgZGVsIG1vZG8gZWRpY2nDs25cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVLZXlzKCk7XG4gIH1cblxuICBvbkVkaXRJbnB1dChldmVudDogRXZlbnQsIGtleTogc3RyaW5nLCBjb2w/OiBDODBUYWJsZUNvbERlZikge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmVkaXRSb3coKTtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcbiAgICBpZiAoY29sPy50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgICB0aGlzLmVkaXRSb3cuc2V0KHsgLi4uY3VycmVudCwgW2tleV06IGNoZWNrZWQgfSk7XG4gICAgfSBlbHNlIGlmIChjb2w/LnR5cGUgPT09ICdlbnVtJykge1xuICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50KS52YWx1ZTtcbiAgICAgIHRoaXMuZWRpdFJvdy5zZXQoeyAuLi5jdXJyZW50LCBba2V5XTogdmFsdWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0LnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmVkaXRSb3cuc2V0KHsgLi4uY3VycmVudCwgW2tleV06IHRhcmdldC52YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlRWRpdChyb3c6IFQpIHtcbiAgICBjb25zdCBpZCA9IHJvd1snaWQnXTtcbiAgICBpZiAoKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIGlkICE9PSAnbnVtYmVyJykgfHwgIXRoaXMuZWRpdFJvdygpKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2wpID0+IHRoaXMuaXNDb2x1bW5WaXNpYmxlKGNvbCwgdHJ1ZSkgJiYgIWNvbC5yZWFkT25seVxuICAgICk7XG4gICAgY29uc3QgY29udmVydGVkID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKChhY2MsIGNvbCkgPT4ge1xuICAgICAgYWNjW2NvbC5hY2Nlc3Nvcl0gPSB0aGlzLmNvbnZlcnRDZWxsVmFsdWUoXG4gICAgICAgIHRoaXMuZWRpdFJvdygpIVtjb2wuYWNjZXNzb3JdLFxuICAgICAgICBjb2xcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSBhcyBQYXJ0aWFsPFQ+O1xuXG4gICAgdGhpcy51cGRhdGVBY3Rpb24uZW1pdCh7XG4gICAgICBpZCxcbiAgICAgIGNoYW5nZXM6IGNvbnZlcnRlZCxcbiAgICAgIGRvbmU6IChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tCeSBmdW5jdGlvbiBmb3IgbmdGb3IgdG8gYXZvaWQgRE9NIHJlLWNyZWF0aW9uIChORzA5NTYgd2FybmluZykuXG4gICAqL1xuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgcm93OiBUKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICBjb25zdCBpZCA9XG4gICAgICByb3cgJiYgdHlwZW9mIHJvdyA9PT0gJ29iamVjdCcgJiYgJ2lkJyBpbiByb3dcbiAgICAgICAgPyAocm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVsnaWQnXVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdHlwZW9mIGlkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaWQgPT09ICdudW1iZXInID8gaWQgOiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgdmlldyBldmVudCB3aXRoIHRoZSBlbnRpcmUgcm93IGRhdGFcbiAgICovXG4gIG9uVmlldyhyb3c6IFQpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdBY3Rpb24uZW1pdChyb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBnZXRSb3dCdXR0b25BY3Rpb24gZXZlbnQgd2l0aCB0aGUgZW50aXJlIHJvdyBkYXRhXG4gICAqL1xuICBvbkdldFJvd0J1dHRvbihyb3c6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmdldFJvd0J1dHRvbkFjdGlvbi5lbWl0KHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIG1vdmVVcEFjdGlvbiBldmVudCB3aXRoIHRoZSByb3cgaWRcbiAgICovXG4gIGFzeW5jIG9uTW92ZVVwKHJvdzogVCkge1xuICAgIGNvbnN0IGlkID0gcm93WydpZCddIGFzIElEO1xuICAgIHRoaXMubW92ZVVwQWN0aW9uLmVtaXQoe1xuICAgICAgaWQsXG4gICAgICBkb25lOiAoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoc3VjY2VzcykgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBtb3ZlRG93bkFjdGlvbiBldmVudCB3aXRoIHRoZSByb3cgaWRcbiAgICovXG4gIGFzeW5jIG9uTW92ZURvd24ocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ10gYXMgSUQ7XG4gICAgdGhpcy5tb3ZlRG93bkFjdGlvbi5lbWl0KHtcbiAgICAgIGlkLFxuICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgZW5hYmxlQWN0aW9uIGV2ZW50IHdpdGggdGhlIHJvdyBpZCBhbmQgY3VycmVudCBlbmFibGVkIHN0YXR1c1xuICAgKi9cbiAgYXN5bmMgb25FbmFibGUocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ10gYXMgSUQ7XG4gICAgY29uc3QgY3VycmVudEVuYWJsZWQgPSByb3dbJ2VuYWJsZWQnXSBhcyBib29sZWFuO1xuICAgIHRoaXMuZW5hYmxlQWN0aW9uLmVtaXQoe1xuICAgICAgaWQsXG4gICAgICBlbmFibGVkOiAhY3VycmVudEVuYWJsZWQsIC8vIFRvZ2dsZSB0aGUgY3VycmVudCBzdGF0ZVxuICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHNlYXJjaCBpbnB1dCBjaGFuZ2VzIHdpdGggZGVib3VuY2luZ1xuICAgKi9cbiAgb25TZWFyY2hJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCh2YWx1ZSk7XG4gICAgdGhpcy5zZWFyY2hUZXJtLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgc2VhcmNoIGlucHV0XG4gICAqL1xuICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCgnJyk7XG4gICAgdGhpcy5zZWFyY2hUZXJtLmVtaXQoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIGZyb20gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbiAoZS5nLiwgJ3Rhc2submFtZScpXG4gICAqL1xuICBwcml2YXRlIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBhY2Nlc3Nvcjogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIGFjY2Vzc29yLnNwbGl0KCcuJykucmVkdWNlKChjdXJyZW50LCBrZXkpID0+IHtcbiAgICAgIHJldHVybiBjdXJyZW50ICYmIHR5cGVvZiBjdXJyZW50ID09PSAnb2JqZWN0JyA/IGN1cnJlbnRba2V5XSA6IHVuZGVmaW5lZDtcbiAgICB9LCBvYmopO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIGZvciBhIGNlbGwgdXNpbmcgdGhlIGFjY2Vzc29yLCBzdXBwb3J0aW5nIGRvdCBub3RhdGlvbiBmb3IgbmVzdGVkIHByb3BlcnRpZXNcbiAgICovXG4gIGdldENlbGxWYWx1ZShyb3c6IFQsIGFjY2Vzc29yOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBpZiAoYWNjZXNzb3IuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBhY2Nlc3Nvcik7XG4gICAgfVxuICAgIHJldHVybiAocm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVthY2Nlc3Nvcl07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGlzcGxheSB2YWx1ZSBmb3IgYSBjZWxsLCBzaG93aW5nICctJyBmb3IgZmFsc3kgdmFsdWVzIGV4Y2VwdCAwLCBmYWxzZSwgYW5kIGVtcHR5IG9iamVjdHMvYXJyYXlzXG4gICAqL1xuICBnZXREaXNwbGF5VmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIC8vIElmIHZhbHVlIGlzIDAsIHNob3cgaXRcbiAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgIHJldHVybiAnMCc7XG4gICAgfVxuICAgIC8vIElmIHZhbHVlIGlzIGZhbHNlLCBpdCBzaG91bGQgYmUgaGFuZGxlZCBieSBib29sZWFuIGxvZ2ljIGluIHRlbXBsYXRlLCBub3QgaGVyZVxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnZmFsc2UnO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgb2JqZWN0cyBhbmQgYXJyYXlzIChpbmNsdWRpbmcgZW1wdHkgb25lcylcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gJ1tvYmplY3QgT2JqZWN0XSc7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIElmIHZhbHVlIGlzIG90aGVyIGZhbHN5IHZhbHVlcyAobnVsbCwgdW5kZWZpbmVkLCAnJyksIHNob3cgJy0nXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgLy8gSGFuZGxlIG90aGVyIHR5cGVzIGV4cGxpY2l0bHlcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICAgICkge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIC8vIEZvciBhbnkgb3RoZXIgdHlwZSAoZnVuY3Rpb24sIHN5bWJvbCwgZXRjLiksIHJldHVybiBhIHNhZmUgZmFsbGJhY2tcbiAgICByZXR1cm4gJy0nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRpc3BsYXkgdGV4dCBmb3IgYW4gZW51bSB2YWx1ZVxuICAgKi9cbiAgZ2V0RW51bURpc3BsYXlWYWx1ZSh2YWx1ZTogdW5rbm93biwgY29sOiBDODBUYWJsZUNvbERlZik6IHN0cmluZyB7XG4gICAgaWYgKCFjb2wuZW51bSB8fCAodmFsdWUgIT09IDAgJiYgIXZhbHVlKSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gICAgY29uc3QgZGlzcGxheVZhbHVlID0gY29sLmVudW1bdmFsdWUgYXMgc3RyaW5nIHwgbnVtYmVyXTtcbiAgICByZXR1cm4gKFxuICAgICAgZGlzcGxheVZhbHVlIHx8XG4gICAgICAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInXG4gICAgICAgID8gU3RyaW5nKHZhbHVlKVxuICAgICAgICA6ICctJylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVudW0gb3B0aW9ucyBhcyBhbiBhcnJheSBmb3Igc2VsZWN0IGRyb3Bkb3duc1xuICAgKi9cbiAgZ2V0RW51bU9wdGlvbnMoXG4gICAgY29sOiBDODBUYWJsZUNvbERlZlxuICApOiB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7IGxhYmVsOiBzdHJpbmcgfVtdIHtcbiAgICBpZiAoIWNvbC5lbnVtKSByZXR1cm4gW107XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNvbC5lbnVtKS5tYXAoKFt2YWx1ZSwgbGFiZWxdKSA9PiAoe1xuICAgICAgdmFsdWU6IGlzTmFOKE51bWJlcih2YWx1ZSkpID8gdmFsdWUgOiBOdW1iZXIodmFsdWUpLFxuICAgICAgbGFiZWwsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIENTUyBjb2xvciBmb3IgYSBjZWxsIHZhbHVlIGJhc2VkIG9uIHRoZSBjb2x1bW4ncyBjb2xvciBjb25maWd1cmF0aW9uXG4gICAqL1xuICBnZXRDZWxsQ29sb3IodmFsdWU6IHVua25vd24sIGNvbDogQzgwVGFibGVDb2xEZWYpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghY29sLmNvbG9yIHx8ICh2YWx1ZSAhPT0gMCAmJiAhdmFsdWUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gY29sLmNvbG9yW3ZhbHVlIGFzIHN0cmluZyB8IG51bWJlcl07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYSBlbCBtYXgtaGVpZ2h0IGRlIGxhIHRhYmxhIGJhc2FkbyBlbiBlbCB0YW1hw7FvXG4gICAqIFNpIHNpemUgZXMgMCwgcmV0b3JuYSB1bmRlZmluZWQgKHNpbiBsw61taXRlIGRlIGFsdHVyYSlcbiAgICovXG4gIGdldFRhYmxlTWF4SGVpZ2h0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuc2l6ZSA8PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBTaW4gbMOtbWl0ZSBkZSBhbHR1cmFcbiAgICB9XG4gICAgLy8gQWx0dXJhIGJhc2UgZGUgNDAwcHggKiBzaXplXG4gICAgY29uc3QgYmFzZUhlaWdodCA9IDQwMDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLnJvdW5kKGJhc2VIZWlnaHQgKiB0aGlzLnNpemUpO1xuICAgIHJldHVybiBgJHttYXhIZWlnaHR9cHhgO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdGlvbiBtZXRob2RzXG4gICAqL1xuICBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc2V0KG5ldyBTZXQoKSk7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RBbGxTdGF0ZSgpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnRpZW5lIGxhIHNlbGVjY2nDs24gZXhpc3RlbnRlIGRlc3B1w6lzIGRlIGFjdHVhbGl6YXIgbG9zIGRhdG9zLFxuICAgKiBlbGltaW5hbmRvIHNvbG8gbG9zIElEcyBxdWUgeWEgbm8gZXhpc3RlbiBlbiBsb3MgbnVldm9zIGRhdG9zXG4gICAqL1xuICBwcml2YXRlIHByZXNlcnZlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcbiAgICBjb25zdCBjdXJyZW50RGF0YSA9IHRoaXMuZGF0YSgpO1xuXG4gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uc2l6ZSA9PT0gMCB8fCBjdXJyZW50RGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIFNpIG5vIGhheSBzZWxlY2Npw7NuIG8gbm8gaGF5IGRhdG9zLCBsaW1waWFyIGxhIHNlbGVjY2nDs25cbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPYnRlbmVyIGxvcyBJRHMgZGlzcG9uaWJsZXMgZW4gbG9zIG51ZXZvcyBkYXRvc1xuICAgIGNvbnN0IGF2YWlsYWJsZUlkcyA9IG5ldyBTZXQoY3VycmVudERhdGEubWFwKGl0ZW0gPT4gaXRlbVsnaWQnXSBhcyBJRCkpO1xuXG4gICAgLy8gRmlsdHJhciBsYSBzZWxlY2Npw7NuIGFjdHVhbCBwYXJhIG1hbnRlbmVyIHNvbG8gbG9zIElEcyBxdWUgYcO6biBleGlzdGVuXG4gICAgY29uc3QgcHJlc2VydmVkU2VsZWN0aW9uID0gbmV3IFNldChcbiAgICAgIEFycmF5LmZyb20oY3VycmVudFNlbGVjdGlvbikuZmlsdGVyKGlkID0+IGF2YWlsYWJsZUlkcy5oYXMoaWQpKVxuICAgICk7XG5cbiAgICAvLyBBY3R1YWxpemFyIGxhIHNlbGVjY2nDs24gY29uIGxvcyBJRHMgcHJlc2VydmFkb3NcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc2V0KHByZXNlcnZlZFNlbGVjdGlvbik7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RBbGxTdGF0ZSgpO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbigpO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcbiAgICBjb25zdCBhbGxJdGVtcyA9IHRoaXMuZGF0YSgpO1xuXG4gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24uc2l6ZSA9PT0gYWxsSXRlbXMubGVuZ3RoKSB7XG4gICAgICAvLyBEZXNlbGVjdCBhbGxcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VsZWN0IGFsbFxuICAgICAgY29uc3QgYWxsSWRzID0gbmV3IFNldChhbGxJdGVtcy5tYXAoaXRlbSA9PiBpdGVtWydpZCddIGFzIElEKSk7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc2V0KGFsbElkcyk7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbFN0YXRlKCk7XG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVJdGVtU2VsZWN0aW9uKGl0ZW06IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IGl0ZW1bJ2lkJ10gYXMgSUQ7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5zZWxlY3RlZEl0ZW1zKCkpO1xuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAvLyBTZWxlY2Npw7NuIHNpbXBsZTogc29sbyBwZXJtaXRpciB1biBlbGVtZW50byBzZWxlY2Npb25hZG9cbiAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLmhhcyhpZCkpIHtcbiAgICAgICAgLy8gRGVzZWxlY2Npb25hciBlbCBlbGVtZW50byBhY3R1YWxcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2VsZWNjaW9uYXIgc29sbyBlc3RlIGVsZW1lbnRvXG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbi5hZGQoaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY3VycmVudFNlbGVjdGlvbi5oYXMoaWQpKSB7XG4gICAgICAvLyBTZWxlY2Npw7NuIG3Dumx0aXBsZTogZGVzZWxlY2Npb25hciBlbGVtZW50byBleGlzdGVudGVcbiAgICAgIGN1cnJlbnRTZWxlY3Rpb24uZGVsZXRlKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VsZWNjacOzbiBtw7psdGlwbGU6IGFncmVnYXIgbnVldm8gZWxlbWVudG9cbiAgICAgIGN1cnJlbnRTZWxlY3Rpb24uYWRkKGlkKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc2V0KGN1cnJlbnRTZWxlY3Rpb24pO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUoKTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgfSBpc0l0ZW1TZWxlY3RlZChpdGVtOiBUKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaWQgPSBpdGVtWydpZCddIGFzIElEO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMoKS5oYXMoaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RBbGxTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCkuc2l6ZTtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5kYXRhKCkubGVuZ3RoO1xuXG4gICAgaWYgKHNlbGVjdGVkQ291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tlZC5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlLnNldChmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZENvdW50ID09PSB0b3RhbENvdW50KSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlLnNldChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tlZC5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5kYXRhKCkuZmlsdGVyKGl0ZW0gPT5cbiAgICAgIHNlbGVjdGVkSWRzLmhhcyhpdGVtWydpZCddIGFzIElEKVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RhYmxlLmVtaXQoc2VsZWN0ZWRJdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgdG9kb3MgbG9zIHZhbG9yZXMgZGUgdW5hIGNvbHVtbmEgZXN0w6FuIHZhY8Otb3MvbnVsb3NcbiAgICovXG4gIHByaXZhdGUgYXJlQWxsQ29sdW1uVmFsdWVzRW1wdHkoY29sdW1uOiBDODBUYWJsZUNvbERlZik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5kYXRhKCk7XG5cbiAgICBpZiAoY3VycmVudERhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gU2kgbm8gaGF5IGRhdG9zLCBjb25zaWRlcmFtb3MgbGEgY29sdW1uYSBjb21vIHZhY8OtYVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50RGF0YS5ldmVyeShyb3cgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3csIGNvbHVtbi5hY2Nlc3Nvcik7XG5cbiAgICAgIC8vIENvbnNpZGVyYXIgdmFjw61vOiBudWxsLCB1bmRlZmluZWQsICcnLCAwIChwYXJhIG7Dum1lcm9zKSwgZmFsc2UgKHBhcmEgYm9vbGVhbm9zKSwgYXJyYXlzL29iamV0b3MgdmFjw61vc1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJhIG7Dum1lcm9zLCAwIHNlIGNvbnNpZGVyYSBjb21vIHZhbG9yIHbDoWxpZG8sIG5vIHZhY8Otb1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJhIGJvb2xlYW5vcywgZmFsc2Ugc2UgY29uc2lkZXJhIGNvbW8gdmFsb3IgdsOhbGlkbywgbm8gdmFjw61vXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJhIGFycmF5cyB2YWPDrW9zXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJhIG9iamV0b3MgdmFjw61vc1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluYSBzaSB1bmEgY29sdW1uYSBkZWJlIHNlciB2aXNpYmxlIGJhc8OhbmRvc2UgZW4gc3UgY29uZmlndXJhY2nDs24geSBkYXRvcy5cbiAgICpcbiAgICogT3JkZW4gZGUgcHJpb3JpZGFkOlxuICAgKiAxLiBTaSB2aXNpYmxlID09PSBmYWxzZTogU0lFTVBSRSBzZSBvY3VsdGEgKG3DoXhpbWEgcHJpb3JpZGFkKVxuICAgKiAyLiBTaSBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsID09PSB0cnVlIFkgdG9kb3MgbG9zIHZhbG9yZXMgZXN0w6FuIHZhY8Otb3M6IHNlIG9jdWx0YVxuICAgKiAgICBFWENFUENJw5NOOiBFbiBtb2RvIGNyZWFjacOzbiAoY3JlYXRpbmcgPT09IHRydWUpLCBlc3RhcyBjb2x1bW5hcyBzZSBtdWVzdHJhbiBwYXJhIHBlcm1pdGlyIGVudHJhZGEgZGUgZGF0b3NcbiAgICogMy4gUG9yIGRlZmVjdG86IHNlIG11ZXN0cmFcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbiAtIExhIGRlZmluaWNpw7NuIGRlIGxhIGNvbHVtbmFcbiAgICogQHBhcmFtIGZvcmNlU2hvd0luQ3JlYXRpb24gLSBTaSBlcyB0cnVlLCBpZ25vcmEgaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCAodXNhZG8gZW4gbW9kbyBjcmVhY2nDs24pXG4gICAqL1xuICBpc0NvbHVtblZpc2libGUoY29sdW1uOiBDODBUYWJsZUNvbERlZiwgZm9yY2VTaG93SW5DcmVhdGlvbiA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgLy8gUFJJT1JJREFEIDE6IFNpIHZpc2libGUgZXN0w6EgZXhwbMOtY2l0YW1lbnRlIGVzdGFibGVjaWRvIGVuIGZhbHNlLCBTSUVNUFJFIG9jdWx0YXJcbiAgICBpZiAoY29sdW1uLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUFJJT1JJREFEIDI6IFNpIGhpZGVJZkFsbFZhbHVlc0FyZU51bGwgZXMgdHJ1ZSB5IHRvZG9zIGxvcyB2YWxvcmVzIGVzdMOhbiB2YWPDrW9zLCBvY3VsdGFyXG4gICAgLy8gRVhDRVBDScOTTjogRW4gbW9kbyBjcmVhY2nDs24sIG1vc3RyYW1vcyBlc3RhcyBjb2x1bW5hcyBwYXJhIHBlcm1pdGlyIGVudHJhZGEgZGUgZGF0b3NcbiAgICBpZiAoY29sdW1uLmhpZGVJZkFsbFZhbHVlc0FyZU51bGwgPT09IHRydWUgJiYgIWZvcmNlU2hvd0luQ3JlYXRpb24gJiYgdGhpcy5hcmVBbGxDb2x1bW5WYWx1ZXNFbXB0eShjb2x1bW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUG9yIGRlZmVjdG86IG1vc3RyYXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmEgc2kgdW5hIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZSBlbiBsb3MgaGVhZGVycy5cbiAgICogTG9zIGhlYWRlcnMgc2UgbXVlc3RyYW4gc2kgbGEgY29sdW1uYSBlcyB2aXNpYmxlIGVuIGN1YWxxdWllcmEgZGUgZXN0b3MgY2Fzb3M6XG4gICAqIC0gVmlzdWFsaXphY2nDs24gbm9ybWFsXG4gICAqIC0gTW9kbyBjcmVhY2nDs25cbiAgICogLSBIYXkgYWxndW5hIGZpbGEgZW4gbW9kbyBlZGljacOzblxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uIC0gTGEgZGVmaW5pY2nDs24gZGUgbGEgY29sdW1uYVxuICAgKi9cbiAgaXNDb2x1bW5WaXNpYmxlSW5IZWFkZXIoY29sdW1uOiBDODBUYWJsZUNvbERlZik6IGJvb2xlYW4ge1xuICAgIC8vIFBSSU9SSURBRCAxOiBTaSB2aXNpYmxlIGVzdMOhIGV4cGzDrWNpdGFtZW50ZSBlc3RhYmxlY2lkbyBlbiBmYWxzZSwgU0lFTVBSRSBvY3VsdGFyXG4gICAgaWYgKGNvbHVtbi52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNpIGVzdGFtb3MgZW4gbW9kbyBjcmVhY2nDs24sIG1vc3RyYXIgY29sdW1uYXMgY29uIGhpZGVJZkFsbFZhbHVlc0FyZU51bGxcbiAgICBpZiAodGhpcy5jcmVhdGluZygpICYmIGNvbHVtbi5oaWRlSWZBbGxWYWx1ZXNBcmVOdWxsID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTaSBoYXkgYWxndW5hIGZpbGEgZW4gbW9kbyBlZGljacOzbiwgbW9zdHJhciBjb2x1bW5hcyBjb24gaGlkZUlmQWxsVmFsdWVzQXJlTnVsbFxuICAgIGlmICh0aGlzLmVkaXRpbmcoKSAhPT0gbnVsbCAmJiBjb2x1bW4uaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2kgaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCBlcyB0cnVlIHkgdG9kb3MgbG9zIHZhbG9yZXMgZXN0w6FuIHZhY8Otb3MsIG9jdWx0YXJcbiAgICBpZiAoY29sdW1uLmhpZGVJZkFsbFZhbHVlc0FyZU51bGwgPT09IHRydWUgJiYgdGhpcy5hcmVBbGxDb2x1bW5WYWx1ZXNFbXB0eShjb2x1bW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUG9yIGRlZmVjdG86IG1vc3RyYXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmEgc2kgdW5hIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZSBlbiB1bmEgZmlsYSBlc3BlY8OtZmljYSBjb25zaWRlcmFuZG8gZWwgbW9kbyBlZGljacOzbi5cbiAgICogRW4gbW9kbyBlZGljacOzbiBkZSBlc2EgZmlsYSBlc3BlY8OtZmljYSwgbGFzIGNvbHVtbmFzIGNvbiBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsIHNlIG11ZXN0cmFuLlxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uIC0gTGEgZGVmaW5pY2nDs24gZGUgbGEgY29sdW1uYVxuICAgKiBAcGFyYW0gcm93IC0gTGEgZmlsYSBhY3R1YWxcbiAgICovXG4gIGlzQ29sdW1uVmlzaWJsZUZvclJvdyhjb2x1bW46IEM4MFRhYmxlQ29sRGVmLCByb3c6IFQpOiBib29sZWFuIHtcbiAgICAvLyBQUklPUklEQUQgMTogU2kgdmlzaWJsZSBlc3TDoSBleHBsw61jaXRhbWVudGUgZXN0YWJsZWNpZG8gZW4gZmFsc2UsIFNJRU1QUkUgb2N1bHRhclxuICAgIGlmIChjb2x1bW4udmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBQUklPUklEQUQgMjogU2kgZXN0YSBmaWxhIGVzcGVjw61maWNhIGVzdMOhIGVuIG1vZG8gZWRpY2nDs24sIG1vc3RyYXIgY29sdW1uYXMgY29uIGhpZGVJZkFsbFZhbHVlc0FyZU51bGxcbiAgICBjb25zdCBpc0VkaXRpbmdUaGlzUm93ID0gdGhpcy5lZGl0aW5nKCkgPT09IHJvd1snaWQnXTtcbiAgICBpZiAoaXNFZGl0aW5nVGhpc1JvdyAmJiBjb2x1bW4uaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gUFJJT1JJREFEIDM6IFNpIGhpZGVJZkFsbFZhbHVlc0FyZU51bGwgZXMgdHJ1ZSB5IHRvZG9zIGxvcyB2YWxvcmVzIGVzdMOhbiB2YWPDrW9zLCBvY3VsdGFyXG4gICAgaWYgKGNvbHVtbi5oaWRlSWZBbGxWYWx1ZXNBcmVOdWxsID09PSB0cnVlICYmIHRoaXMuYXJlQWxsQ29sdW1uVmFsdWVzRW1wdHkoY29sdW1uKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFBvciBkZWZlY3RvOiBtb3N0cmFyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U29ydGluZyhpdGVtczogVFtdKTogdm9pZCB7XG4gICAgY29uc3Qgb3JkZXJlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5vcmRlcik7XG4gICAgaWYgKG9yZGVyZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIG9yZGVyZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBpdGVtcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWVBID0gdGhpcy5nZXRDZWxsVmFsdWUoYSwgY29sLmFjY2Vzc29yKSBhcyBzdHJpbmcgfCBudW1iZXI7XG4gICAgICAgICAgY29uc3QgdmFsdWVCID0gdGhpcy5nZXRDZWxsVmFsdWUoYiwgY29sLmFjY2Vzc29yKSBhcyBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICAgICAgICBpZiAoY29sLm9yZGVyID09PSAnQVNDJykge1xuICAgICAgICAgICAgaWYgKHZhbHVlQSA+IHZhbHVlQikgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAodmFsdWVBIDwgdmFsdWVCKSByZXR1cm4gLTE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZhbHVlQSA8IHZhbHVlQikgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAodmFsdWVBID4gdmFsdWVCKSByZXR1cm4gLTE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25VcGxvYWQocm93OiBUKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRBY3Rpb24uZW1pdChyb3cpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImdldFRhYmxlTWF4SGVpZ2h0KClcIiBbc3R5bGUub3ZlcmZsb3cteV09XCJzaXplID4gMCA/ICdhdXRvJyA6ICd2aXNpYmxlJ1wiPlxuICA8IS0tIFNlYXJjaCBCYXIgLS0+XG4gIEBpZiAoaGFzU2VhcmNoVGVybUxpc3RlbmVyKCkpIHtcbiAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj5cbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cInNlYXJjaFwiIFtzaXplXT1cIi44XCI+PC9jODAtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIiBwbGFjZWhvbGRlcj1cIkJ1c2Nhci4uLlwiIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZSgpXCIgKGlucHV0KT1cIm9uU2VhcmNoSW5wdXQoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJCdXNjYXIgZW4gbGEgdGFibGFcIiAvPlxuICAgICAgICBAaWYgKHNlYXJjaFZhbHVlKCkpIHtcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLWJvcnJhclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiIHRpdGxlPVwiTGltcGlhciBiw7pzcXVlZGFcIj5cbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cImNhbmNlbFwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgfVxuXG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIGFsaWduLW1pZGRsZVwiPlxuICAgIDx0aGVhZCBjbGFzcz1cInRoZWFkIHRhYmxlLWxpZ2h0IHN0aWNreS1oZWFkZXJcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgQGlmIChoYXNTZWxlY3RhYmxlTGlzdGVuZXIoKSAmJiBkYXRhKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyIHNlbGVjdGlvbi1jb2x1bW5cIj5cbiAgICAgICAgICBAaWYgKG11bHRpcGxlKSB7XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cInNlbGVjdEFsbENoZWNrZWQoKVwiIFtpbmRldGVybWluYXRlXT1cInNlbGVjdEFsbEluZGV0ZXJtaW5hdGUoKVwiIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKClcIiBhcmlhLWxhYmVsPVwiU2VsZWNjaW9uYXIgdG9kb1wiIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RoPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayBjb2wpIHtcbiAgICAgICAgQGlmIChpc0NvbHVtblZpc2libGVJbkhlYWRlcihjb2wpKSB7XG4gICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlciBib29sZWFuLWNvbHVtblwiPnt7IGNvbC5sYWJlbCB9fTwvdGg+XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgKGNvbC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlciBudW1iZXItY29sdW1uXCI+e3sgY29sLmxhYmVsIH19PC90aD5cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgIDx0aD57eyBjb2wubGFiZWwgfX08L3RoPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGhhc0NyZWF0ZUFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNEZWxldGVBY3Rpb25MaXN0ZW5lcigpIHx8XG4gICAgICAgIGhhc0NhbmNlbEFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVmlld0FjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVXBsb2FkQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNHZXRSb3dCdXR0b25MaXN0ZW5lcigpIHx8XG4gICAgICAgIGhhc01vdmVVcEFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzTW92ZURvd25BY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgIDx0aCBjbGFzcz1cInRhYmxlLWFjdGlvbnMtaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtd3JhcHBlclwiPlxuICAgICAgICAgICAgPHNwYW4+QWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoaGFzQ3JlYXRlQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiYWRkXCIgW2Rpc2FibGVkXT1cImNyZWF0aW5nKClcIiB0aXRsZT1cIkFncmVnYXJcIiBbc2l6ZV09XCIuNlwiIChpY29uQ2xpY2spPVwic3RhcnRDcmVhdGUoKVwiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIH1cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICBAZm9yIChyb3cgb2YgZGF0YSgpOyB0cmFjayB0cmFja0J5SWQoaSwgcm93KTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDx0cj5cbiAgICAgICAgQGlmIChoYXNTZWxlY3RhYmxlTGlzdGVuZXIoKSAmJiBkYXRhKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyIHNlbGVjdGlvbi1jb2x1bW5cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXNJdGVtU2VsZWN0ZWQocm93KVwiIChjaGFuZ2UpPVwidG9nZ2xlSXRlbVNlbGVjdGlvbihyb3cpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VsZWNjaW9uYXIgZmlsYSAnICsgKGkgKyAxKVwiIC8+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrIGNvbCkge1xuICAgICAgICBAaWYgKGlzQ29sdW1uVmlzaWJsZUZvclJvdyhjb2wsIHJvdykpIHtcbiAgICAgICAgQGlmIChjb2wudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyIGJvb2xlYW4tY29sdW1uXCI+XG4gICAgICAgICAgQGlmIChlZGl0aW5nKCkgPT09IHJvd1snaWQnXSAmJiAhY29sLnJlYWRPbmx5KSB7XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIiEhZWRpdFJvdygpPy5bY29sLmFjY2Vzc29yXVwiIChjaGFuZ2UpPVwib25FZGl0SW5wdXQoJGV2ZW50LCBjb2wuYWNjZXNzb3IsIGNvbClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbC5sYWJlbFwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICBAaWYgKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvcikgPT09IHRydWUpIHtcbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cImNoZWNrXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSBpZiAoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cImNhbmNlbFwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmIChjb2wudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgbnVtYmVyLWNvbHVtblwiPlxuICAgICAgICAgIEBpZiAoZWRpdGluZygpID09PSByb3dbJ2lkJ10gJiYgIWNvbC5yZWFkT25seSkge1xuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiB0eXBlPVwibnVtYmVyXCIgW3ZhbHVlXT1cImVkaXRSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIiBbcGxhY2Vob2xkZXJdPVwiY29sLmxhYmVsXCIgKGlucHV0KT1cIm9uRWRpdElucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJnZXRDZWxsQ29sb3IoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSwgY29sKVwiPnt7IGdldERpc3BsYXlWYWx1ZShnZXRDZWxsVmFsdWUocm93LFxuICAgICAgICAgICAgY29sLmFjY2Vzc29yKSkgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgPHRkPlxuICAgICAgICAgIEBpZiAoZWRpdGluZygpID09PSByb3dbJ2lkJ10gJiYgIWNvbC5yZWFkT25seSkge1xuICAgICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdlbnVtJykge1xuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgW3ZhbHVlXT1cImVkaXRSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIiAoY2hhbmdlKT1cIm9uRWRpdElucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3sgY29sLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZ2V0RW51bU9wdGlvbnMoY29sKTsgdHJhY2sgb3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBvcHRpb24ubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBbdHlwZV09XCJjb2wudHlwZSA9PT0gJ3Bhc3N3b3JkJyA/ICdwYXNzd29yZCcgOiAndGV4dCdcIiBbdmFsdWVdPVwiZWRpdFJvdygpPy5bY29sLmFjY2Vzc29yXSA/PyAnJ1wiIFtwbGFjZWhvbGRlcl09XCJjb2wubGFiZWxcIiAoaW5wdXQpPVwib25FZGl0SW5wdXQoJGV2ZW50LCBjb2wuYWNjZXNzb3IsIGNvbClcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwiZ2V0Q2VsbENvbG9yKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvciksIGNvbClcIj4qKioqKio8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIGlmIChjb2wudHlwZSA9PT0gJ2VudW0nKSB7XG4gICAgICAgICAgPHNwYW4gW3N0eWxlLmNvbG9yXT1cImdldENlbGxDb2xvcihnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpLCBjb2wpXCI+e3tcbiAgICAgICAgICAgIGdldEVudW1EaXNwbGF5VmFsdWUoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSwgY29sKVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIGlmIChnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpID09PSB0cnVlKSB7XG4gICAgICAgICAgPGM4MC1pY29uIGljb249XCJjaGVja1wiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2UgaWYgKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvcikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgPGM4MC1pY29uIGljb249XCJjYW5jZWxcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwiZ2V0Q2VsbENvbG9yKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvciksIGNvbClcIj57eyBnZXREaXNwbGF5VmFsdWUoZ2V0Q2VsbFZhbHVlKHJvdyxcbiAgICAgICAgICAgIGNvbC5hY2Nlc3NvcikpIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaGFzQ3JlYXRlQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNVcGRhdGVBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc0RlbGV0ZUFjdGlvbkxpc3RlbmVyKCkgfHxcbiAgICAgICAgaGFzQ2FuY2VsQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNWaWV3QWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNVcGxvYWRBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc0dldFJvd0J1dHRvbkxpc3RlbmVyKCkgfHxcbiAgICAgICAgaGFzTW92ZVVwQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNNb3ZlRG93bkFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgYWN0aW9ucy1jZWxsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICBAaWYgKGVkaXRpbmcoKSA9PT0gcm93WydpZCddKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJjaGVja1wiIHRpdGxlPVwiR3VhcmRhclwiIChpY29uQ2xpY2spPVwic2F2ZUVkaXQocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImNhbmNlbFwiIGNvbG9yPVwid2FyblwiIHRpdGxlPVwiQ2FuY2VsYXJcIiAoaWNvbkNsaWNrKT1cImNhbmNlbEVkaXQoKVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAoaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiZWRpdFwiIHRpdGxlPVwiRWRpdGFyXCIgKGljb25DbGljayk9XCJvbkVkaXQocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzQ2FuY2VsQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiY2FuY2VsX2NpcmNsZVwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgdGl0bGU9XCJDYW5jZWxhclwiIChpY29uQ2xpY2spPVwib25DYW5jZWwocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzVmlld0FjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cInZpZXdcIiBjb2xvcj1cInByaW1hcnlcIiB0aXRsZT1cIlZlclwiIChpY29uQ2xpY2spPVwib25WaWV3KHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc1VwbG9hZEFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cInVwbG9hZFwiIGNvbG9yPVwicHJpbWFyeVwiIHRpdGxlPVwiU3ViaXJcIiAoaWNvbkNsaWNrKT1cIm9uVXBsb2FkKHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc0dldFJvd0J1dHRvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImdldFwiIGNvbG9yPVwic3VjY2Vzc1wiIHRpdGxlPVwiVmluY3VsYXJcIiAoaWNvbkNsaWNrKT1cIm9uR2V0Um93QnV0dG9uKHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc01vdmVVcEFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImFycm93X3VwXCIgY29sb3I9XCJzZWNvbmRhcnlcIiB0aXRsZT1cIk1vdmVyIGFycmliYVwiIChpY29uQ2xpY2spPVwib25Nb3ZlVXAocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzTW92ZURvd25BY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJhcnJvd19kb3duXCIgY29sb3I9XCJzZWNvbmRhcnlcIiB0aXRsZT1cIk1vdmVyIGFiYWpvXCIgKGljb25DbGljayk9XCJvbk1vdmVEb3duKHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc0VuYWJsZUFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gW2ljb25dPVwiZ2V0Q2VsbFZhbHVlKHJvdywgJ2VuYWJsZWQnKSA/ICd0b2dnbGVfb24nIDogJ3RvZ2dsZV9vZmYnXCIgW2NvbG9yXT1cImdldENlbGxWYWx1ZShyb3csICdlbmFibGVkJykgPyAnc3VjY2VzcycgOiAnc2Vjb25kYXJ5J1wiIFt0aXRsZV09XCJnZXRDZWxsVmFsdWUocm93LCAnZW5hYmxlZCcpID8gJ0Rlc2hhYmlsaXRhcicgOiAnSGFiaWxpdGFyJ1wiXG4gICAgICAgICAgICAgIChpY29uQ2xpY2spPVwib25FbmFibGUocm93KVwiIFtzaXplXT1cIi43XCI+XG4gICAgICAgICAgICA8L2M4MC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChoYXNEZWxldGVBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJkZWxldGVcIiBjb2xvcj1cIndhcm5cIiB0aXRsZT1cIkJvcnJhclwiIChpY29uQ2xpY2spPVwib25EZWxldGUocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICAgIH1cbiAgICAgIEBpZiAoY3JlYXRpbmcoKSAmJiBoYXNDcmVhdGVBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICA8dHI+XG4gICAgICAgIEBpZiAoaGFzU2VsZWN0YWJsZUxpc3RlbmVyKCkgJiYgZGF0YSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBzZWxlY3Rpb24tY29sdW1uXCI+XG4gICAgICAgICAgPCEtLSBFbXB0eSBjZWxsIGZvciBhbGlnbm1lbnQgLS0+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrIGNvbCkge1xuICAgICAgICBAaWYgKGlzQ29sdW1uVmlzaWJsZShjb2wsIHRydWUpKSB7XG4gICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIEBpZiAoIWNvbC5yZWFkT25seSkge1xuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCIhIW5ld1JvdygpPy5bY29sLmFjY2Vzc29yXVwiIChjaGFuZ2UpPVwib25JbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiY29sLmxhYmVsXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDwhLS0gUmVhZE9ubHkgYm9vbGVhbiBjb2x1bW4gaW4gY3JlYXRlIG1vZGUgc2hvd3MgZW1wdHkgLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+LTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH0gQGVsc2UgaWYgKGNvbC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBudW1iZXItY29sdW1uXCI+XG4gICAgICAgICAgQGlmICghY29sLnJlYWRPbmx5KSB7XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJudW1iZXJcIiBbdmFsdWVdPVwibmV3Um93KCk/Lltjb2wuYWNjZXNzb3JdID8/ICcnXCIgW3BsYWNlaG9sZGVyXT1cImNvbC5sYWJlbFwiIChpbnB1dCk9XCJvbklucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDwhLS0gUmVhZE9ubHkgbnVtYmVyIGNvbHVtbiBpbiBjcmVhdGUgbW9kZSBzaG93cyBlbXB0eSAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIj4tPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICBAaWYgKCFjb2wucmVhZE9ubHkpIHtcbiAgICAgICAgICBAaWYgKGNvbC50eXBlID09PSAnZW51bScpIHtcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIFt2YWx1ZV09XCJuZXdSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIiAoY2hhbmdlKT1cIm9uSW5wdXQoJGV2ZW50LCBjb2wuYWNjZXNzb3IsIGNvbClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57eyBjb2wubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBnZXRFbnVtT3B0aW9ucyhjb2wpOyB0cmFjayBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IG9wdGlvbi5sYWJlbCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cIm5ld1JvdygpPy5bY29sLmFjY2Vzc29yXSA/PyAnJ1wiIFtwbGFjZWhvbGRlcl09XCJjb2wubGFiZWxcIiAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgPCEtLSBSZWFkT25seSBjb2x1bW4gaW4gY3JlYXRlIG1vZGUgc2hvd3MgZW1wdHkgLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+LTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyIGFjdGlvbnMtY2VsbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiY2hlY2tcIiB0aXRsZT1cIkd1YXJkYXJcIiAoaWNvbkNsaWNrKT1cInNhdmVDcmVhdGUoKVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImNhbmNlbFwiIGNvbG9yPVwid2FyblwiIHRpdGxlPVwiQ2FuY2VsYXJcIiAoaWNvbkNsaWNrKT1cImNhbmNlbENyZWF0ZSgpXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICAgIH1cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuICBAaWYgKGRhdGEoKS5sZW5ndGggPT09IDAgJiYgIWNyZWF0aW5nKCkpIHtcbiAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtbXV0ZWQgcHktMyBzbWFsbFwiPlxuICAgIE5vIGhheSBkYXRvcyBwYXJhIG1vc3RyYXIuXG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPGM4MC1tb2RhbD48L2M4MC1tb2RhbD4iXX0=
900
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFlBQVksRUFHWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFrQjNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURHLENBUUgsTUFBTSxPQUFPLGlCQUFpQjtJQUNYLFlBQVksR0FBaUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFELEtBQUssQ0FBbUI7SUFDeEIsT0FBTyxHQUFxQixFQUFFLENBQUM7SUFDL0IsWUFBWSxDQUEwQixDQUFDLGlGQUFpRjtJQUN4SCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkRBQTZEO0lBQ3ZFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyx5Q0FBeUM7SUFFbkUsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLGdEQUFnRDtJQUN6RCxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXlELENBQUM7SUFDekYsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFxRSxDQUFDO0lBQ3JHLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBZ0QsQ0FBQztJQUNoRixZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWdELENBQUM7SUFDaEYsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7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QUFFLENBQUMsS0FBdUIsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7Z0JBRTNGLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDODBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDODBNb2RhbENvbXBvbmVudCwgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbW9kYWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEM4MFRhYmxlQ29sRGVmIHtcbiAgYWNjZXNzb3I6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmlzaWJsZT86IGJvb2xlYW47IC8vIFNpIG5vIHNlIGVzcGVjaWZpY2EsIHNlIGFzdW1lIHRydWUuIFNpIGVzIGZhbHNlLCBsYSBjb2x1bW5hIHNlIG9jdWx0YSBTSUVNUFJFIChtw6F4aW1hIHByaW9yaWRhZClcbiAgdHlwZT86ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnaW50ZWdlcicgfCAnYm9vbGVhbicgfCAncGFzc3dvcmQnIHwgJ2VudW0nOyAvLyBUaXBvIGRlIGRhdG8gcGFyYSBsYSBjb2x1bW5hXG4gIG9yZGVyPzogJ0FTQycgfCAnREVTQyc7IC8vIE9yZGVuYW1pZW50byBkZSBsYSBjb2x1bW5hXG4gIHJlYWRPbmx5PzogYm9vbGVhbjsgLy8gU2kgbm8gc2UgZXNwZWNpZmljYSwgc2UgYXN1bWUgZmFsc2VcbiAgZW51bT86IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIHN0cmluZz47IC8vIE9wY2lvbmVzIGRlbCBlbnVtIHBhcmEgdHlwZSAnZW51bSdcbiAgY29sb3I/OiBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+OyAvLyBDb2xvcmVzIENTUyBiYXNhZG9zIGVuIGVsIHZhbG9yIGRlIGxhIGNlbGRhXG4gIGhpZGVJZkFsbFZhbHVlc0FyZU51bGw/OiBib29sZWFuOyAvLyBTaSBlcyB0cnVlLCBvY3VsdGEgbGEgY29sdW1uYSBjdWFuZG8gdG9kb3MgbG9zIHZhbG9yZXMgZXN0w6FuIHZhY8Otb3MgKGRlZmF1bHQ6IGZhbHNlKS5cbiAgLy8gU29sbyBhcGxpY2Egc2kgdmlzaWJsZSAhPT0gZmFsc2UuIEVYQ0VQQ0nDk046IEVuIG1vZG8gY3JlYWNpw7NuIFkgZWRpY2nDs24gc2llbXByZSBzZSBtdWVzdHJhLlxuICBkZWZhdWx0PzogdW5rbm93bjsgLy8gVmFsb3IgcG9yIGRlZmVjdG8gcGFyYSB1c2FyIGVuIG1vZG8gY3JlYWNpw7NuLiBQdWVkZSBzZXIgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIGV0Yy5cbn1cblxuZXhwb3J0IHR5cGUgSUQgPSBudW1iZXIgfCBzdHJpbmc7XG5cbi8qKlxuICogQzgwVGFibGVDb21wb25lbnQgLSBDb21wb25lbnRlIGRlIHRhYmxhIGF2YW56YWRvIGNvbiBmdW5jaW9uYWxpZGFkZXMgQ1JVRFxuICpcbiAqIENPTVBPUlRBTUlFTlRPIERFIFZJU0lCSUxJREFEIERFIENPTFVNTkFTOlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICpcbiAqIDEuIFBSSU9SSURBRCBNw4FYSU1BIC0gdmlzaWJsZTogZmFsc2VcbiAqICAgIC0gTGEgY29sdW1uYSBzZSBvY3VsdGEgU0lFTVBSRSwgc2luIGV4Y2VwY2lvbmVzXG4gKiAgICAtIE5pIGVuIG1vZG8gY3JlYWNpw7NuIG5pIGVuIG1vZG8gZWRpY2nDs24gc2UgbXVlc3RyYVxuICpcbiAqIDIuIE9DVUxUQUNJw5NOIEFVVE9Nw4FUSUNBIC0gaGlkZUlmQWxsVmFsdWVzQXJlTnVsbDogdHJ1ZVxuICogICAgLSBMYSBjb2x1bW5hIHNlIG9jdWx0YSBzb2xvIHNpIFRPRE9TIGxvcyB2YWxvcmVzIGFjdHVhbGVzIGVzdMOhbiB2YWPDrW9zXG4gKiAgICAtIFZhbG9yZXMgY29uc2lkZXJhZG9zIHZhY8Otb3M6IG51bGwsIHVuZGVmaW5lZCwgJycsIFtdLCB7fVxuICogICAgLSBWYWxvcmVzIE5PIHZhY8Otb3M6IDAsIGZhbHNlIChzb24gdmFsb3JlcyB2w6FsaWRvcylcbiAqICAgIC0gRVhDRVBDSU9ORVMgSU1QT1JUQU5URVM6XG4gKiAgICAgICogRW4gbW9kbyBjcmVhY2nDs24gKGNyZWF0aW5nPXRydWUpIGVzdGFzIGNvbHVtbmFzIFPDjSBzZSBtdWVzdHJhblxuICogICAgICAqIEVuIG1vZG8gZWRpY2nDs24gZGUgdW5hIGZpbGEgZXNwZWPDrWZpY2Egc2UgbXVlc3RyYW4gU09MTyBzaSBlc2EgZmlsYSB0aWVuZSB2YWxvclxuICpcbiAqIDMuIFBPUiBERUZFQ1RPIC0gQ29sdW1uYXMgbm9ybWFsZXNcbiAqICAgIC0gU2UgbXVlc3RyYW4gc2llbXByZSAodmlzdWFsaXphY2nDs24sIGNyZWFjacOzbiB5IGVkaWNpw7NuKVxuICpcbiAqIFZBTE9SRVMgUE9SIERFRkVDVE8gRU4gQ1JFQUNJw5NOOlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICpcbiAqIC0gUHJvcGllZGFkIGBkZWZhdWx0PzogdW5rbm93bmAgcGVybWl0ZSBkZWZpbmlyIHZhbG9yZXMgcG9yIGRlZmVjdG8gcGFyYSBtb2RvIGNyZWFjacOzblxuICogLSBTb2xvIHNlIGFwbGljYSBjdWFuZG8gc2UgaW5pY2lhIGVsIG1vZG8gY3JlYWNpw7NuIChzdGFydENyZWF0ZSlcbiAqIC0gUHVlZGUgc2VyIGN1YWxxdWllciB0aXBvOiBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgZXRjLlxuICogLSBTaSBubyBzZSBlc3BlY2lmaWNhIGBkZWZhdWx0YCwgc2UgdXNhIGNhZGVuYSB2YWPDrWEgKCcnKVxuICpcbiAqIFZBTE9SRVMgRElOw4FNSUNPUyBFTiBDUkVBQ0nDk04gWSBFRElDScOTTjpcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICpcbiAqIC0gSW5wdXQgYGlucHV0VmFsdWVzJD86IE9ic2VydmFibGU8UGFydGlhbDxUPj5gIHBlcm1pdGUgYWN0dWFsaXphciB2YWxvcmVzIGRpbsOhbWljYW1lbnRlXG4gKiAtIFNvbG8gc2UgYXBsaWNhIGR1cmFudGUgbW9kbyBjcmVhY2nDs24gKGNyZWF0aW5nPXRydWUpIG8gZWRpY2nDs24gKGVkaXRpbmchPW51bGwpXG4gKiAtIExvcyB2YWxvcmVzIHNlIGFwbGljYW4gYXV0b23DoXRpY2FtZW50ZSBjdWFuZG8gZWwgT2JzZXJ2YWJsZSBlbWl0ZVxuICogLSBQZXJtaXRlIGNhbWJpb3MgbcO6bHRpcGxlcyBkdXJhbnRlIGVsIG1pc21vIG1vZG8gZGUgY3JlYWNpw7NuL2VkaWNpw7NuXG4gKiAtIExvcyBudWV2b3MgdmFsb3JlcyBzb2JyZXNjcmliZW4gbG9zIGV4aXN0ZW50ZXMgKHNwcmVhZCBvcGVyYXRvcilcbiAqXG4gKiBUSVBPUyBERSBEQVRPUyBTT1BPUlRBRE9TOlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PVxuICpcbiAqIC0gJ3N0cmluZyc6IFRleHRvIG5vcm1hbCAoZGVmYXVsdClcbiAqIC0gJ251bWJlcic6IE7Dum1lcm9zIGRlY2ltYWxlcyAocHJlc2VydmEgZGVjaW1hbGVzOiA1LjMg4oaSIDUuMylcbiAqIC0gJ2ludGVnZXInOiBOw7ptZXJvcyBlbnRlcm9zIChjb252aWVydGUgYSBlbnRlcm86IDUuMyDihpIgNSlcbiAqIC0gJ2Jvb2xlYW4nOiBWZXJkYWRlcm8vRmFsc28gKGNoZWNrYm94KVxuICogLSAncGFzc3dvcmQnOiBUZXh0byBvY3VsdG8gKGlucHV0IHR5cGU9XCJwYXNzd29yZFwiKVxuICogLSAnZW51bSc6IExpc3RhIGRlIG9wY2lvbmVzIHByZWRlZmluaWRhcyAoc2VsZWN0KVxuICpcbiAqIEVKRU1QTE9TOlxuICogLSB7IGFjY2Vzc29yOiAnaWQnLCB2aXNpYmxlOiBmYWxzZSB9IOKGkiBOVU5DQSBzZSBtdWVzdHJhXG4gKiAtIHsgYWNjZXNzb3I6ICdtb3RvclBvcycsIGhpZGVJZkFsbFZhbHVlc0FyZU51bGw6IHRydWUsIGRlZmF1bHQ6IDAsIHR5cGU6ICdpbnRlZ2VyJyB9IOKGkiBFbnRlcm8gKDUuNyDihpIgNSlcbiAqIC0geyBhY2Nlc3NvcjogJ3dlaWdodCcsIHR5cGU6ICdudW1iZXInLCBkZWZhdWx0OiAyLjUgfSDihpIgRGVjaW1hbCBwcmVzZXJ2YWRvICg1Ljcg4oaSIDUuNylcbiAqIC0geyBhY2Nlc3NvcjogJ3N0YXR1cycsIGRlZmF1bHQ6ICdhY3RpdmUnIH0g4oaSIFNlIGF1dG9yZWxsZW5hIGNvbiAnYWN0aXZlJyBlbiBjcmVhY2nDs25cbiAqIC0geyBhY2Nlc3NvcjogJ25hbWUnIH0g4oaSIFNpZW1wcmUgdmlzaWJsZSwgc2luIHZhbG9yIHBvciBkZWZlY3RvIChjYWRlbmEgdmFjw61hKVxuICogLSBpbnB1dFZhbHVlcyQgZW1pdGUgeyBtb3RvclBvczogNSwgd2VpZ2h0OiAyLjMgfSDihpIgYWN0dWFsaXphIGlucHV0cyBkaW7DoW1pY2FtZW50ZVxuICovQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYzgwLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0M4MEljb25Db21wb25lbnQsIEM4ME1vZGFsQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQzgwVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuICBASW5wdXQoKSBkYXRhJCE6IE9ic2VydmFibGU8VFtdPjtcbiAgQElucHV0KCkgY29sdW1uczogQzgwVGFibGVDb2xEZWZbXSA9IFtdO1xuICBASW5wdXQoKSBpbnB1dFZhbHVlcyQ/OiBPYnNlcnZhYmxlPFBhcnRpYWw8VD4+OyAvLyBPYnNlcnZhYmxlIHBhcmEgYWN0dWFsaXphciB2YWxvcmVzIGRlIGlucHV0cyBkaW7DoW1pY2FtZW50ZSBlbiBjcmVhY2nDs24vZWRpY2nDs25cbiAgQElucHV0KCkgc2l6ZSA9IDA7IC8vIFRhbWHDsW8gZGUgbGEgdGFibGEgKDAgPSBzaW4gbMOtbWl0ZSwgPiAwIGFwbGljYSBtYXgtaGVpZ2h0KVxuICBASW5wdXQoKSBtdWx0aXBsZSA9IHRydWU7IC8vIFBlcm1pdGUgc2VsZWNjacOzbiBtw7psdGlwbGUgcG9yIGRlZmVjdG9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiAodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpID0+IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnIH0pXG4gIG5vQ29uZmlybSA9IGZhbHNlOyAvLyBTaSBlcyB0cnVlLCBubyBtdWVzdHJhIGNvbmZpcm1hY2lvbmVzIG1vZGFsZXNcbiAgQE91dHB1dCgpIGNyZWF0ZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyByb3c6IFBhcnRpYWw8VD47IGRvbmU6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQ7IH0+KCk7XG4gIEBPdXRwdXQoKSB1cGRhdGVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBjaGFuZ2VzOiBQYXJ0aWFsPFQ+OyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBJRDsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogSUQ7IGRvbmU6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQ7IH0+KCk7XG4gIEBPdXRwdXQoKSB2aWV3QWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgdXBsb2FkQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgZ2V0Um93QnV0dG9uQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgbW92ZVVwQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBJRDsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIG1vdmVEb3duQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBJRDsgZG9uZTogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZDsgfT4oKTtcbiAgQE91dHB1dCgpIGVuYWJsZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogSUQ7IGVuYWJsZWQ6IGJvb2xlYW47IGRvbmU6IChyZXN1bHQ6IGJvb2xlYW4pID0+IHZvaWQ7IH0+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hUZXJtID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpIGVycm9yRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcblxuICByZWFkb25seSBkYXRhID0gc2lnbmFsPFRbXT4oW10pO1xuICByZWFkb25seSBrZXlzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG4gIGNyZWF0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgbmV3Um93ID0gc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgZWRpdGluZyA9IHNpZ25hbDxJRCB8IG51bGw+KG51bGwpOyAvLyBpZCBvZiByb3cgYmVpbmcgZWRpdGVkXG4gIHJlYWRvbmx5IGVkaXRSb3cgPSBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBzZWxlY3RlZEl0ZW1zID0gc2lnbmFsPFNldDxJRD4+KG5ldyBTZXQoKSk7XG4gIHJlYWRvbmx5IHNlbGVjdEFsbENoZWNrZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBzZWxlY3RBbGxJbmRldGVybWluYXRlID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2VhcmNoVmFsdWUgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgLy8gRmxhZ3MgdG8gY2hlY2sgaWYgZXZlbnRzIGhhdmUgbGlzdGVuZXJzXG4gIHJlYWRvbmx5IGhhc0NyZWF0ZUFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNEZWxldGVBY3Rpb25MaXN0ZW5lciA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc0NhbmNlbEFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzVmlld0FjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzVXBsb2FkQWN0aW9uTGlzdGVuZXIgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBoYXNHZXRSb3dCdXR0b25MaXN0ZW5lciA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc01vdmVVcEFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzTW92ZURvd25BY3Rpb25MaXN0ZW5lciA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc0VuYWJsZUFjdGlvbkxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzU2VhcmNoVGVybUxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzU2VsZWN0YWJsZUxpc3RlbmVyID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIGRhdGFTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaW5wdXRWYWx1ZXNTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGVyciBhcyBhbnkpPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBjYXJnYXIgZGF0b3MnO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBsYXMga2V5cyBkZSBjb2x1bW5hcyB2aXNpYmxlcyBiYXPDoW5kb3NlIGVuIGVsIGVzdGFkbyBhY3R1YWxcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUtleXMoKTogdm9pZCB7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiB0aGlzLmlzQ29sdW1uVmlzaWJsZUluSGVhZGVyKGNvbCkpO1xuICAgIHRoaXMua2V5cy5zZXQodmlzaWJsZUNvbHVtbnMubWFwKChjb2wpID0+IGNvbC5hY2Nlc3NvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwbGljYSB2YWxvcmVzIHBhcmNpYWxlcyBhIGxvcyBpbnB1dHMgZW4gbW9kbyBjcmVhY2nDs24gbyBlZGljacOzbi5cbiAgICogU29sbyBhY3R1YWxpemEgc2kgZXN0YW1vcyBlbiBtb2RvIGNyZWFjacOzbiAoY3JlYXRpbmcgPSB0cnVlKSBvIGVkaWNpw7NuIChlZGl0aW5nICE9IG51bGwpXG4gICAqL1xuICBwcml2YXRlIGFwcGx5SW5wdXRWYWx1ZXMocGFydGlhbFZhbHVlczogUGFydGlhbDxUPik6IHZvaWQge1xuICAgIC8vIFNvbG8gYXBsaWNhciB2YWxvcmVzIHNpIGVzdGFtb3MgZW4gbW9kbyBjcmVhY2nDs24gbyBlZGljacOzblxuICAgIGlmICghdGhpcy5jcmVhdGluZygpICYmIHRoaXMuZWRpdGluZygpID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXBsaWNhciB2YWxvcmVzIGVuIG1vZG8gY3JlYWNpw7NuXG4gICAgaWYgKHRoaXMuY3JlYXRpbmcoKSkge1xuICAgICAgY29uc3QgY3VycmVudFJvdyA9IHRoaXMubmV3Um93KCk7XG4gICAgICBpZiAoY3VycmVudFJvdykge1xuICAgICAgICBjb25zdCB1cGRhdGVkUm93ID0geyAuLi5jdXJyZW50Um93LCAuLi5wYXJ0aWFsVmFsdWVzIH07XG4gICAgICAgIHRoaXMubmV3Um93LnNldCh1cGRhdGVkUm93KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcGxpY2FyIHZhbG9yZXMgZW4gbW9kbyBlZGljacOzblxuICAgIGlmICh0aGlzLmVkaXRpbmcoKSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY3VycmVudEVkaXRSb3cgPSB0aGlzLmVkaXRSb3coKTtcbiAgICAgIGlmIChjdXJyZW50RWRpdFJvdykge1xuICAgICAgICBjb25zdCB1cGRhdGVkRWRpdFJvdyA9IHsgLi4uY3VycmVudEVkaXRSb3csIC4uLnBhcnRpYWxWYWx1ZXMgfTtcbiAgICAgICAgdGhpcy5lZGl0Um93LnNldCh1cGRhdGVkRWRpdFJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIG91dHB1dHMgaGF2ZSBsaXN0ZW5lcnNcbiAgICB0aGlzLmhhc0NyZWF0ZUFjdGlvbkxpc3RlbmVyLnNldCh0aGlzLmNyZWF0ZUFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNVcGRhdGVBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy51cGRhdGVBY3Rpb24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFzRGVsZXRlQWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMuZGVsZXRlQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc0NhbmNlbEFjdGlvbkxpc3RlbmVyLnNldCh0aGlzLmNhbmNlbEFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNWaWV3QWN0aW9uTGlzdGVuZXIuc2V0KHRoaXMudmlld0FjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNVcGxvYWRBY3Rpb25MaXN0ZW5lci5zZXQodGhpcy51cGxvYWRBY3Rpb24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFzR2V0Um93QnV0dG9uTGlzdGVuZXIuc2V0KHRoaXMuZ2V0Um93QnV0dG9uQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc01vdmVVcEFjdGlvbkxpc3RlbmVyLnNldCh0aGlzLm1vdmVVcEFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNNb3ZlRG93bkFjdGlvbkxpc3RlbmVyLnNldCh0aGlzLm1vdmVEb3duQWN0aW9uLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhc0VuYWJsZUFjdGlvbkxpc3RlbmVyLnNldCh0aGlzLmVuYWJsZUFjdGlvbi5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNTZWFyY2hUZXJtTGlzdGVuZXIuc2V0KHRoaXMuc2VhcmNoVGVybS5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYXNTZWxlY3RhYmxlTGlzdGVuZXIuc2V0KHRoaXMuc2VsZWN0YWJsZS5vYnNlcnZlZCk7XG5cbiAgICBpZiAoIXRoaXMuZGF0YSQpIHJldHVybjtcbiAgICB0aGlzLmRhdGFTdWIgPSB0aGlzLmRhdGEkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoaXRlbXMpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseVNvcnRpbmcoaXRlbXMpO1xuICAgICAgICB0aGlzLmRhdGEuc2V0KGl0ZW1zKTtcbiAgICAgICAgLy8gQWN0dWFsaXphciBsYXMgY29sdW1uYXMgdmlzaWJsZXMgYmFzw6FuZG9zZSBlbiBlbCBlc3RhZG8gYWN0dWFsXG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUtleXMoKTtcbiAgICAgICAgLy8gTWFudGVuZXIgbGEgc2VsZWNjacOzbiBleGlzdGVudGUgZGVzcHXDqXMgZGUgYWN0dWFsaXphciBsb3MgZGF0b3NcbiAgICAgICAgdGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbigpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+XG4gICAgICAgIHRoaXMuZXJyb3JFdmVudC5lbWl0KHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycikpLFxuICAgIH0pO1xuXG4gICAgLy8gU3VzY3JpYmlyc2UgYSBpbnB1dFZhbHVlcyQgcGFyYSBhY3R1YWxpemFyIHZhbG9yZXMgZGluw6FtaWNhbWVudGUgZW4gY3JlYWNpw7NuL2VkaWNpw7NuXG4gICAgaWYgKHRoaXMuaW5wdXRWYWx1ZXMkKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWVzU3ViID0gdGhpcy5pbnB1dFZhbHVlcyQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHBhcnRpYWxWYWx1ZXMpID0+IHtcbiAgICAgICAgICB0aGlzLmFwcGx5SW5wdXRWYWx1ZXMocGFydGlhbFZhbHVlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+XG4gICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBlbiBpbnB1dFZhbHVlcyQ6JywgdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyKSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRhdGFTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbnB1dFZhbHVlc1N1Yj8udW5zdWJzY3JpYmUoKTtcblxuICAgIC8vIENsb3NlIGFueSBvcGVuIG1vZGFsIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmNsb3NlTW9kYWwoKTtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZywgY29sPzogQzgwVGFibGVDb2xEZWYpIHtcbiAgICBpZiAoY29sPy50eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgICB0aGlzLnVwZGF0ZU5ld1JvdyhrZXksIGNoZWNrZWQpO1xuICAgIH0gZWxzZSBpZiAoY29sPy50eXBlID09PSAnZW51bScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZU5ld1JvdyhrZXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTmV3Um93KGtleSwgdGFyZ2V0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkRlbGV0ZShyb3c6IFQpIHtcbiAgICBjb25zdCBpZCA9IHJvd1snaWQnXSBhcyBJRDtcblxuICAgIGxldCBjb25maXJtZWQgPSB0cnVlO1xuICAgIGlmICghdGhpcy5ub0NvbmZpcm0pIHtcbiAgICAgIGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICdDb25maXJtYXIgZWxpbWluYWNpw7NuJyxcbiAgICAgICAgJ8K/RXN0w6Egc2VndXJvIGRlIHF1ZSBkZXNlYSBlbGltaW5hciBlc3RlIGVsZW1lbnRvPyBFc3RhIGFjY2nDs24gbm8gc2UgcHVlZGUgZGVzaGFjZXIuJyxcbiAgICAgICAgJ0VsaW1pbmFyJyxcbiAgICAgICAgJ0NhbmNlbGFyJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICB0aGlzLmRlbGV0ZUFjdGlvbi5lbWl0KHtcbiAgICAgICAgaWQsXG4gICAgICAgIGRvbmU6IChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25DYW5jZWwocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ10gYXMgSUQ7XG5cbiAgICBsZXQgY29uZmlybWVkID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMubm9Db25maXJtKSB7XG4gICAgICBjb25maXJtZWQgPSBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKFxuICAgICAgICAnQ29uZmlybWFyIGNhbmNlbGFjacOzbicsXG4gICAgICAgICfCv0VzdMOhIHNlZ3VybyBkZSBxdWUgZGVzZWEgY2FuY2VsYXIgZXN0ZSBlbGVtZW50bz8nLFxuICAgICAgICAnQ2FuY2VsYXIgZWxlbWVudG8nLFxuICAgICAgICAnTm8gY2FuY2VsYXInXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChjb25maXJtZWQpIHtcbiAgICAgIHRoaXMuY2FuY2VsQWN0aW9uLmVtaXQoe1xuICAgICAgICBpZCxcbiAgICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2VzcykgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdGFydENyZWF0ZSgpIHtcbiAgICB0aGlzLmNyZWF0aW5nLnNldCh0cnVlKTtcbiAgICAvLyBBY3R1YWxpemFyIGtleXMgZGUgY29sdW1uYXMgdmlzaWJsZXMgY3VhbmRvIGVudHJhbW9zIGVuIG1vZG8gY3JlYWNpw7NuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlS2V5cygpO1xuICAgIC8vIEluaWNpYWxpemEgbmV3Um93IHNvbG8gY29uIGNvbHVtbmFzIHZpc2libGVzIHkgbm8gcmVhZE9ubHlcbiAgICAvLyBFbiBtb2RvIGNyZWFjacOzbiwgbW9zdHJhbW9zIGNvbHVtbmFzIGNvbiBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsIHBhcmEgcGVybWl0aXIgZW50cmFkYSBkZSBkYXRvc1xuICAgIGNvbnN0IHJvdzogUGFydGlhbDxUPiA9IHt9O1xuICAgIHRoaXMuY29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiB0aGlzLmlzQ29sdW1uVmlzaWJsZShjb2wsIHRydWUpICYmICFjb2wucmVhZE9ubHkpXG4gICAgICAuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIC8vIFNpIGxhIGNvbHVtbmEgdGllbmUgdW4gdmFsb3IgcG9yIGRlZmVjdG8sIHVzYXJsbzsgc2kgbm8sIHVzYXIgY2FkZW5hIHZhY8OtYVxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBjb2wuZGVmYXVsdCAhPT0gdW5kZWZpbmVkID8gY29sLmRlZmF1bHQgOiAnJztcbiAgICAgICAgKHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbY29sLmFjY2Vzc29yXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH0pO1xuICAgIHRoaXMubmV3Um93LnNldChyb3cpO1xuICB9XG5cbiAgY2FuY2VsQ3JlYXRlKCkge1xuICAgIHRoaXMuY3JlYXRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm5ld1Jvdy5zZXQobnVsbCk7XG4gICAgLy8gQWN0dWFsaXphciBrZXlzIGRlIGNvbHVtbmFzIHZpc2libGVzIGN1YW5kbyBzYWxpbW9zIGRlbCBtb2RvIGNyZWFjacOzblxuICAgIHRoaXMudXBkYXRlVmlzaWJsZUtleXMoKTtcbiAgfVxuXG4gIHVwZGF0ZU5ld1JvdyhrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5uZXdSb3coKTtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcbiAgICB0aGlzLm5ld1Jvdy5zZXQoeyAuLi5jdXJyZW50LCBba2V5XTogdmFsdWUgfSk7XG4gIH1cblxuICBzYXZlQ3JlYXRlKCkge1xuICAgIGNvbnN0IHJvdyA9IHRoaXMubmV3Um93KCk7XG4gICAgaWYgKCFyb3cpIHJldHVybjtcblxuICAgIC8vIFZhbGlkYXIgY2FtcG9zIHJlcXVlcmlkb3MgYW50ZXMgZGUgY3JlYXIgLSBzb2xvIGNvbHVtbmFzIHZpc2libGVzIHkgbm8gcmVhZE9ubHlcbiAgICAvLyBFbiBtb2RvIGNyZWFjacOzbiwgaW5jbHVpbW9zIGNvbHVtbmFzIGNvbiBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsXG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IHRoaXMuaXNDb2x1bW5WaXNpYmxlKGNvbCwgdHJ1ZSkgJiYgIWNvbC5yZWFkT25seSk7XG4gICAgY29uc3QgY29udmVydGVkID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKChhY2MsIGNvbCkgPT4ge1xuICAgICAgYWNjW2NvbC5hY2Nlc3Nvcl0gPSB0aGlzLmNvbnZlcnRDZWxsVmFsdWUocm93W2NvbC5hY2Nlc3Nvcl0sIGNvbCk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSBhcyBQYXJ0aWFsPFQ+O1xuXG4gICAgdGhpcy5jcmVhdGVBY3Rpb24uZW1pdCh7XG4gICAgICByb3c6IGNvbnZlcnRlZCxcbiAgICAgIGRvbmU6IChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWxDcmVhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGNlbGwgdmFsdWUgYmFzZWQgb24gY29sdW1uIHR5cGUgb3Igc2FtcGxlIGRhdGEuXG4gICAqIEhhbmRsZXMgc3RyaW5naWZpY2F0aW9uIG9mIG9iamVjdHMgZm9yIHN0cmluZyBjb2x1bW5zLlxuICAgKi9cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgY2VsbCB2YWx1ZSBiYXNlZCBvbiBjb2x1bW4gdHlwZSBvciBzYW1wbGUgZGF0YS5cbiAgICogRGVsZWdhdGVzIHRvIHR5cGUtc3BlY2lmaWMgaGVscGVycyBmb3IgY2xhcml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0Q2VsbFZhbHVlKHZhbHVlOiB1bmtub3duLCBjb2w6IEM4MFRhYmxlQ29sRGVmKTogdW5rbm93biB7XG4gICAgaWYgKGNvbC50eXBlID09PSAnYm9vbGVhbicpIHJldHVybiB0aGlzLnRvQm9vbGVhbih2YWx1ZSk7XG4gICAgaWYgKGNvbC50eXBlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMudG9OdW1iZXIodmFsdWUpO1xuICAgIGlmIChjb2wudHlwZSA9PT0gJ2ludGVnZXInKSByZXR1cm4gdGhpcy50b0ludGVnZXIodmFsdWUpO1xuICAgIGlmIChjb2wudHlwZSA9PT0gJ3N0cmluZycgfHwgY29sLnR5cGUgPT09ICdwYXNzd29yZCcpXG4gICAgICByZXR1cm4gdGhpcy50b1N0cmluZ1ZhbHVlKHZhbHVlKTtcblxuICAgIC8vIEZhbGxiYWNrOiB1c2Ugc2FtcGxlIGRhdGEgaWYgYXZhaWxhYmxlXG4gICAgY29uc3Qgc2FtcGxlID0gdGhpcy5kYXRhKClbMF07XG4gICAgaWYgKHNhbXBsZSkge1xuICAgICAgY29uc3Qgc2FtcGxlVmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShzYW1wbGUsIGNvbC5hY2Nlc3Nvcik7XG4gICAgICBpZiAodHlwZW9mIHNhbXBsZVZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiB0aGlzLnRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICBpZiAodHlwZW9mIHNhbXBsZVZhbHVlID09PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMudG9OdW1iZXIodmFsdWUpO1xuICAgICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB0aGlzLnRvU3RyaW5nVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKiogQ29udmVydHMgdmFsdWUgdG8gYm9vbGVhbiB1c2luZyBiZXN0IHByYWN0aWNlcy4gKi9cbiAgcHJpdmF0ZSB0b0Jvb2xlYW4odmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJylcbiAgICAgIHJldHVybiB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8IHZhbHVlLnRyaW0oKSA9PT0gJzEnO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gdmFsdWUgPT09IDE7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHZhbHVlIHRvIG51bWJlciB1c2luZyBiZXN0IHByYWN0aWNlcy4gKi9cbiAgcHJpdmF0ZSB0b051bWJlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkID09PSAnJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG51bSA9IE51bWJlcih0cmltbWVkKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gdW5kZWZpbmVkIDogbnVtO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiB2YWx1ZSA/IDEgOiAwO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQ29udmVydHMgdmFsdWUgdG8gaW50ZWdlciB1c2luZyBiZXN0IHByYWN0aWNlcy4gKi9cbiAgcHJpdmF0ZSB0b0ludGVnZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZCA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBudW0gPSBOdW1iZXIodHJpbW1lZCk7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IHVuZGVmaW5lZCA6IE1hdGguZmxvb3IobnVtKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsdWUgPyAxIDogMDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHZhbHVlIHRvIHN0cmluZyB1c2luZyBiZXN0IHByYWN0aWNlcywgYWx3YXlzIHN0cmluZ2lmaWVzIG9iamVjdHMuICovXG4gIHByaXZhdGUgdG9TdHJpbmdWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuICdbb2JqZWN0IE9iamVjdF0nO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgZnVuY3Rpb25zLCBzeW1ib2xzLCB1bmRlZmluZWQsIGV0Yy4sIHJldHVybiBlbXB0eSBzdHJpbmdcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvbkVkaXQocm93OiBUKSB7XG4gICAgdGhpcy5lZGl0aW5nLnNldChyb3dbJ2lkJ10gYXMgSUQpO1xuICAgIC8vIEFjdHVhbGl6YXIga2V5cyBkZSBjb2x1bW5hcyB2aXNpYmxlcyBjdWFuZG8gZW50cmFtb3MgZW4gbW9kbyBlZGljacOzblxuICAgIHRoaXMudXBkYXRlVmlzaWJsZUtleXMoKTtcbiAgICBjb25zdCBlZGl0OiBQYXJ0aWFsPFQ+ID0ge307XG4gICAgdGhpcy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2wpID0+IHRoaXMuaXNDb2x1bW5WaXNpYmxlKGNvbCwgdHJ1ZSkgJiYgIWNvbC5yZWFkT25seSlcbiAgICAgIC5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3Nvcik7XG4gICAgICAgIChlZGl0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtjb2wuYWNjZXNzb3JdID0gdmFsdWU7XG4gICAgICB9KTtcbiAgICB0aGlzLmVkaXRSb3cuc2V0KGVkaXQpO1xuICB9XG5cbiAgY2FuY2VsRWRpdCgpIHtcbiAgICB0aGlzLmVkaXRpbmcuc2V0KG51bGwpO1xuICAgIHRoaXMuZWRpdFJvdy5zZXQobnVsbCk7XG4gICAgLy8gQWN0dWFsaXphciBrZXlzIGRlIGNvbHVtbmFzIHZpc2libGVzIGN1YW5kbyBzYWxpbW9zIGRlbCBtb2RvIGVkaWNpw7NuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlS2V5cygpO1xuICB9XG5cbiAgb25FZGl0SW5wdXQoZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZywgY29sPzogQzgwVGFibGVDb2xEZWYpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5lZGl0Um93KCk7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gICAgaWYgKGNvbD8udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgICAgdGhpcy5lZGl0Um93LnNldCh7IC4uLmN1cnJlbnQsIFtrZXldOiBjaGVja2VkIH0pO1xuICAgIH0gZWxzZSBpZiAoY29sPy50eXBlID09PSAnZW51bScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWU7XG4gICAgICB0aGlzLmVkaXRSb3cuc2V0KHsgLi4uY3VycmVudCwgW2tleV06IHZhbHVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldC52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lZGl0Um93LnNldCh7IC4uLmN1cnJlbnQsIFtrZXldOiB0YXJnZXQudmFsdWUgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZUVkaXQocm93OiBUKSB7XG4gICAgY29uc3QgaWQgPSByb3dbJ2lkJ107XG4gICAgaWYgKCh0eXBlb2YgaWQgIT09ICdzdHJpbmcnICYmIHR5cGVvZiBpZCAhPT0gJ251bWJlcicpIHx8ICF0aGlzLmVkaXRSb3coKSlcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sKSA9PiB0aGlzLmlzQ29sdW1uVmlzaWJsZShjb2wsIHRydWUpICYmICFjb2wucmVhZE9ubHlcbiAgICApO1xuICAgIGNvbnN0IGNvbnZlcnRlZCA9IHZpc2libGVDb2x1bW5zLnJlZHVjZSgoYWNjLCBjb2wpID0+IHtcbiAgICAgIGFjY1tjb2wuYWNjZXNzb3JdID0gdGhpcy5jb252ZXJ0Q2VsbFZhbHVlKFxuICAgICAgICB0aGlzLmVkaXRSb3coKSFbY29sLmFjY2Vzc29yXSxcbiAgICAgICAgY29sXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgYXMgUGFydGlhbDxUPjtcblxuICAgIHRoaXMudXBkYXRlQWN0aW9uLmVtaXQoe1xuICAgICAgaWQsXG4gICAgICBjaGFuZ2VzOiBjb252ZXJ0ZWQsXG4gICAgICBkb25lOiAoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrQnkgZnVuY3Rpb24gZm9yIG5nRm9yIHRvIGF2b2lkIERPTSByZS1jcmVhdGlvbiAoTkcwOTU2IHdhcm5pbmcpLlxuICAgKi9cbiAgdHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIHJvdzogVCk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgY29uc3QgaWQgPVxuICAgICAgcm93ICYmIHR5cGVvZiByb3cgPT09ICdvYmplY3QnICYmICdpZCcgaW4gcm93XG4gICAgICAgID8gKHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ2lkJ11cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGlkID09PSAnbnVtYmVyJyA/IGlkIDogaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIHZpZXcgZXZlbnQgd2l0aCB0aGUgZW50aXJlIHJvdyBkYXRhXG4gICAqL1xuICBvblZpZXcocm93OiBUKTogdm9pZCB7XG4gICAgdGhpcy52aWV3QWN0aW9uLmVtaXQocm93KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgZ2V0Um93QnV0dG9uQWN0aW9uIGV2ZW50IHdpdGggdGhlIGVudGlyZSByb3cgZGF0YVxuICAgKi9cbiAgb25HZXRSb3dCdXR0b24ocm93OiBUKTogdm9pZCB7XG4gICAgdGhpcy5nZXRSb3dCdXR0b25BY3Rpb24uZW1pdChyb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBtb3ZlVXBBY3Rpb24gZXZlbnQgd2l0aCB0aGUgcm93IGlkXG4gICAqL1xuICBhc3luYyBvbk1vdmVVcChyb3c6IFQpIHtcbiAgICBjb25zdCBpZCA9IHJvd1snaWQnXSBhcyBJRDtcbiAgICB0aGlzLm1vdmVVcEFjdGlvbi5lbWl0KHtcbiAgICAgIGlkLFxuICAgICAgZG9uZTogKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgbW92ZURvd25BY3Rpb24gZXZlbnQgd2l0aCB0aGUgcm93IGlkXG4gICAqL1xuICBhc3luYyBvbk1vdmVEb3duKHJvdzogVCkge1xuICAgIGNvbnN0IGlkID0gcm93WydpZCddIGFzIElEO1xuICAgIHRoaXMubW92ZURvd25BY3Rpb24uZW1pdCh7XG4gICAgICBpZCxcbiAgICAgIGRvbmU6IChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB0aGlzLmNhbmNlbEVkaXQoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgdGhlIGVuYWJsZUFjdGlvbiBldmVudCB3aXRoIHRoZSByb3cgaWQgYW5kIGN1cnJlbnQgZW5hYmxlZCBzdGF0dXNcbiAgICovXG4gIGFzeW5jIG9uRW5hYmxlKHJvdzogVCkge1xuICAgIGNvbnN0IGlkID0gcm93WydpZCddIGFzIElEO1xuICAgIGNvbnN0IGN1cnJlbnRFbmFibGVkID0gcm93WydlbmFibGVkJ10gYXMgYm9vbGVhbjtcbiAgICB0aGlzLmVuYWJsZUFjdGlvbi5lbWl0KHtcbiAgICAgIGlkLFxuICAgICAgZW5hYmxlZDogIWN1cnJlbnRFbmFibGVkLCAvLyBUb2dnbGUgdGhlIGN1cnJlbnQgc3RhdGVcbiAgICAgIGRvbmU6IChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChzdWNjZXNzKSB0aGlzLmNhbmNlbEVkaXQoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBzZWFyY2ggaW5wdXQgY2hhbmdlcyB3aXRoIGRlYm91bmNpbmdcbiAgICovXG4gIG9uU2VhcmNoSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsdWU7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZS5zZXQodmFsdWUpO1xuICAgIHRoaXMuc2VhcmNoVGVybS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHNlYXJjaCBpbnB1dFxuICAgKi9cbiAgY2xlYXJTZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZS5zZXQoJycpO1xuICAgIHRoaXMuc2VhcmNoVGVybS5lbWl0KCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24gKGUuZy4sICd0YXNrLm5hbWUnKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgYWNjZXNzb3I6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBhY2Nlc3Nvci5zcGxpdCgnLicpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiB7XG4gICAgICByZXR1cm4gY3VycmVudCAmJiB0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcgPyBjdXJyZW50W2tleV0gOiB1bmRlZmluZWQ7XG4gICAgfSwgb2JqKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBjZWxsIHVzaW5nIHRoZSBhY2Nlc3Nvciwgc3VwcG9ydGluZyBkb3Qgbm90YXRpb24gZm9yIG5lc3RlZCBwcm9wZXJ0aWVzXG4gICAqL1xuICBnZXRDZWxsVmFsdWUocm93OiBULCBhY2Nlc3Nvcjogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKGFjY2Vzc29yLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgYWNjZXNzb3IpO1xuICAgIH1cbiAgICByZXR1cm4gKHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbYWNjZXNzb3JdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRpc3BsYXkgdmFsdWUgZm9yIGEgY2VsbCwgc2hvd2luZyAnLScgZm9yIGZhbHN5IHZhbHVlcyBleGNlcHQgMCwgZmFsc2UsIGFuZCBlbXB0eSBvYmplY3RzL2FycmF5c1xuICAgKi9cbiAgZ2V0RGlzcGxheVZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAvLyBJZiB2YWx1ZSBpcyAwLCBzaG93IGl0XG4gICAgaWYgKHZhbHVlID09PSAwKSB7XG4gICAgICByZXR1cm4gJzAnO1xuICAgIH1cbiAgICAvLyBJZiB2YWx1ZSBpcyBmYWxzZSwgaXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgYm9vbGVhbiBsb2dpYyBpbiB0ZW1wbGF0ZSwgbm90IGhlcmVcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJ2ZhbHNlJztcbiAgICB9XG4gICAgLy8gSGFuZGxlIG9iamVjdHMgYW5kIGFycmF5cyAoaW5jbHVkaW5nIGVtcHR5IG9uZXMpXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuICdbb2JqZWN0IE9iamVjdF0nO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB2YWx1ZSBpcyBvdGhlciBmYWxzeSB2YWx1ZXMgKG51bGwsIHVuZGVmaW5lZCwgJycpLCBzaG93ICctJ1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBvdGhlciB0eXBlcyBleHBsaWNpdGx5XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbidcbiAgICApIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICAvLyBGb3IgYW55IG90aGVyIHR5cGUgKGZ1bmN0aW9uLCBzeW1ib2wsIGV0Yy4pLCByZXR1cm4gYSBzYWZlIGZhbGxiYWNrXG4gICAgcmV0dXJuICctJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkaXNwbGF5IHRleHQgZm9yIGFuIGVudW0gdmFsdWVcbiAgICovXG4gIGdldEVudW1EaXNwbGF5VmFsdWUodmFsdWU6IHVua25vd24sIGNvbDogQzgwVGFibGVDb2xEZWYpOiBzdHJpbmcge1xuICAgIGlmICghY29sLmVudW0gfHwgKHZhbHVlICE9PSAwICYmICF2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGNvbC5lbnVtW3ZhbHVlIGFzIHN0cmluZyB8IG51bWJlcl07XG4gICAgcmV0dXJuIChcbiAgICAgIGRpc3BsYXlWYWx1ZSB8fFxuICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJ1xuICAgICAgICA/IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgOiAnLScpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBlbnVtIG9wdGlvbnMgYXMgYW4gYXJyYXkgZm9yIHNlbGVjdCBkcm9wZG93bnNcbiAgICovXG4gIGdldEVudW1PcHRpb25zKFxuICAgIGNvbDogQzgwVGFibGVDb2xEZWZcbiAgKTogeyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyOyBsYWJlbDogc3RyaW5nIH1bXSB7XG4gICAgaWYgKCFjb2wuZW51bSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjb2wuZW51bSkubWFwKChbdmFsdWUsIGxhYmVsXSkgPT4gKHtcbiAgICAgIHZhbHVlOiBpc05hTihOdW1iZXIodmFsdWUpKSA/IHZhbHVlIDogTnVtYmVyKHZhbHVlKSxcbiAgICAgIGxhYmVsLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBDU1MgY29sb3IgZm9yIGEgY2VsbCB2YWx1ZSBiYXNlZCBvbiB0aGUgY29sdW1uJ3MgY29sb3IgY29uZmlndXJhdGlvblxuICAgKi9cbiAgZ2V0Q2VsbENvbG9yKHZhbHVlOiB1bmtub3duLCBjb2w6IEM4MFRhYmxlQ29sRGVmKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWNvbC5jb2xvciB8fCAodmFsdWUgIT09IDAgJiYgIXZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbC5jb2xvclt2YWx1ZSBhcyBzdHJpbmcgfCBudW1iZXJdO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGEgZWwgbWF4LWhlaWdodCBkZSBsYSB0YWJsYSBiYXNhZG8gZW4gZWwgdGFtYcOxb1xuICAgKiBTaSBzaXplIGVzIDAsIHJldG9ybmEgdW5kZWZpbmVkIChzaW4gbMOtbWl0ZSBkZSBhbHR1cmEpXG4gICAqL1xuICBnZXRUYWJsZU1heEhlaWdodCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnNpemUgPD0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gU2luIGzDrW1pdGUgZGUgYWx0dXJhXG4gICAgfVxuICAgIC8vIEFsdHVyYSBiYXNlIGRlIDQwMHB4ICogc2l6ZVxuICAgIGNvbnN0IGJhc2VIZWlnaHQgPSA0MDA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChiYXNlSGVpZ2h0ICogdGhpcy5zaXplKTtcbiAgICByZXR1cm4gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gbWV0aG9kc1xuICAgKi9cbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChuZXcgU2V0KCkpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUoKTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW50aWVuZSBsYSBzZWxlY2Npw7NuIGV4aXN0ZW50ZSBkZXNwdcOpcyBkZSBhY3R1YWxpemFyIGxvcyBkYXRvcyxcbiAgICogZWxpbWluYW5kbyBzb2xvIGxvcyBJRHMgcXVlIHlhIG5vIGV4aXN0ZW4gZW4gbG9zIG51ZXZvcyBkYXRvc1xuICAgKi9cbiAgcHJpdmF0ZSBwcmVzZXJ2ZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XG4gICAgY29uc3QgY3VycmVudERhdGEgPSB0aGlzLmRhdGEoKTtcblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLnNpemUgPT09IDAgfHwgY3VycmVudERhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBTaSBubyBoYXkgc2VsZWNjacOzbiBvIG5vIGhheSBkYXRvcywgbGltcGlhciBsYSBzZWxlY2Npw7NuXG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT2J0ZW5lciBsb3MgSURzIGRpc3BvbmlibGVzIGVuIGxvcyBudWV2b3MgZGF0b3NcbiAgICBjb25zdCBhdmFpbGFibGVJZHMgPSBuZXcgU2V0KGN1cnJlbnREYXRhLm1hcChpdGVtID0+IGl0ZW1bJ2lkJ10gYXMgSUQpKTtcblxuICAgIC8vIEZpbHRyYXIgbGEgc2VsZWNjacOzbiBhY3R1YWwgcGFyYSBtYW50ZW5lciBzb2xvIGxvcyBJRHMgcXVlIGHDum4gZXhpc3RlblxuICAgIGNvbnN0IHByZXNlcnZlZFNlbGVjdGlvbiA9IG5ldyBTZXQoXG4gICAgICBBcnJheS5mcm9tKGN1cnJlbnRTZWxlY3Rpb24pLmZpbHRlcihpZCA9PiBhdmFpbGFibGVJZHMuaGFzKGlkKSlcbiAgICApO1xuXG4gICAgLy8gQWN0dWFsaXphciBsYSBzZWxlY2Npw7NuIGNvbiBsb3MgSURzIHByZXNlcnZhZG9zXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChwcmVzZXJ2ZWRTZWxlY3Rpb24pO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsU3RhdGUoKTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XG4gICAgY29uc3QgYWxsSXRlbXMgPSB0aGlzLmRhdGEoKTtcblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uLnNpemUgPT09IGFsbEl0ZW1zLmxlbmd0aCkge1xuICAgICAgLy8gRGVzZWxlY3QgYWxsXG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlbGVjdCBhbGxcbiAgICAgIGNvbnN0IGFsbElkcyA9IG5ldyBTZXQoYWxsSXRlbXMubWFwKGl0ZW0gPT4gaXRlbVsnaWQnXSBhcyBJRCkpO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChhbGxJZHMpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxTdGF0ZSgpO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlSXRlbVNlbGVjdGlvbihpdGVtOiBUKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSBpdGVtWydpZCddIGFzIElEO1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRJdGVtcygpKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgLy8gU2VsZWNjacOzbiBzaW1wbGU6IHNvbG8gcGVybWl0aXIgdW4gZWxlbWVudG8gc2VsZWNjaW9uYWRvXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGlvbi5oYXMoaWQpKSB7XG4gICAgICAgIC8vIERlc2VsZWNjaW9uYXIgZWwgZWxlbWVudG8gYWN0dWFsXG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNlbGVjY2lvbmFyIHNvbG8gZXN0ZSBlbGVtZW50b1xuICAgICAgICBjdXJyZW50U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRTZWxlY3Rpb24uaGFzKGlkKSkge1xuICAgICAgLy8gU2VsZWNjacOzbiBtw7psdGlwbGU6IGRlc2VsZWNjaW9uYXIgZWxlbWVudG8gZXhpc3RlbnRlXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlbGVjY2nDs24gbcO6bHRpcGxlOiBhZ3JlZ2FyIG51ZXZvIGVsZW1lbnRvXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmFkZChpZCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNldChjdXJyZW50U2VsZWN0aW9uKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbFN0YXRlKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZChpdGVtOiBUKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaWQgPSBpdGVtWydpZCddIGFzIElEO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMoKS5oYXMoaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RBbGxTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCkuc2l6ZTtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5kYXRhKCkubGVuZ3RoO1xuXG4gICAgaWYgKHNlbGVjdGVkQ291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tlZC5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlLnNldChmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZENvdW50ID09PSB0b3RhbENvdW50KSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlLnNldChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tlZC5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3RBbGxJbmRldGVybWluYXRlLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5kYXRhKCkuZmlsdGVyKGl0ZW0gPT5cbiAgICAgIHNlbGVjdGVkSWRzLmhhcyhpdGVtWydpZCddIGFzIElEKVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RhYmxlLmVtaXQoc2VsZWN0ZWRJdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgdW4gdmFsb3IgaW5kaXZpZHVhbCBlc3TDoSB2YWPDrW8vbnVsb1xuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbHVlRW1wdHkodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICAvLyBDb25zaWRlcmFyIHZhY8OtbzogbnVsbCwgdW5kZWZpbmVkLCAnJ1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gUGFyYSBuw7ptZXJvcywgMCBzZSBjb25zaWRlcmEgY29tbyB2YWxvciB2w6FsaWRvLCBubyB2YWPDrW9cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFBhcmEgYm9vbGVhbm9zLCBmYWxzZSBzZSBjb25zaWRlcmEgY29tbyB2YWxvciB2w6FsaWRvLCBubyB2YWPDrW9cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBQYXJhIGFycmF5cyB2YWPDrW9zXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gUGFyYSBvYmpldG9zIHZhY8Otb3NcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgdG9kb3MgbG9zIHZhbG9yZXMgZGUgdW5hIGNvbHVtbmEgZXN0w6FuIHZhY8Otb3MvbnVsb3NcbiAgICovXG4gIHByaXZhdGUgYXJlQWxsQ29sdW1uVmFsdWVzRW1wdHkoY29sdW1uOiBDODBUYWJsZUNvbERlZik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5kYXRhKCk7XG5cbiAgICBpZiAoY3VycmVudERhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gU2kgbm8gaGF5IGRhdG9zLCBjb25zaWRlcmFtb3MgbGEgY29sdW1uYSBjb21vIHZhY8OtYVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50RGF0YS5ldmVyeShyb3cgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3csIGNvbHVtbi5hY2Nlc3Nvcik7XG4gICAgICByZXR1cm4gdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluYSBzaSB1bmEgY29sdW1uYSBkZWJlIHNlciB2aXNpYmxlIGJhc8OhbmRvc2UgZW4gc3UgY29uZmlndXJhY2nDs24geSBkYXRvcy5cbiAgICpcbiAgICogT3JkZW4gZGUgcHJpb3JpZGFkOlxuICAgKiAxLiBTaSB2aXNpYmxlID09PSBmYWxzZTogU0lFTVBSRSBzZSBvY3VsdGEgKG3DoXhpbWEgcHJpb3JpZGFkKVxuICAgKiAyLiBTaSBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsID09PSB0cnVlIFkgdG9kb3MgbG9zIHZhbG9yZXMgZXN0w6FuIHZhY8Otb3M6IHNlIG9jdWx0YVxuICAgKiAgICBFWENFUENJw5NOOiBFbiBtb2RvIGNyZWFjacOzbiAoY3JlYXRpbmcgPT09IHRydWUpLCBlc3RhcyBjb2x1bW5hcyBzZSBtdWVzdHJhbiBwYXJhIHBlcm1pdGlyIGVudHJhZGEgZGUgZGF0b3NcbiAgICogMy4gUG9yIGRlZmVjdG86IHNlIG11ZXN0cmFcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbiAtIExhIGRlZmluaWNpw7NuIGRlIGxhIGNvbHVtbmFcbiAgICogQHBhcmFtIGZvcmNlU2hvd0luQ3JlYXRpb24gLSBTaSBlcyB0cnVlLCBpZ25vcmEgaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCAodXNhZG8gZW4gbW9kbyBjcmVhY2nDs24pXG4gICAqL1xuICBpc0NvbHVtblZpc2libGUoY29sdW1uOiBDODBUYWJsZUNvbERlZiwgZm9yY2VTaG93SW5DcmVhdGlvbiA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgLy8gUFJJT1JJREFEIDE6IFNpIHZpc2libGUgZXN0w6EgZXhwbMOtY2l0YW1lbnRlIGVzdGFibGVjaWRvIGVuIGZhbHNlLCBTSUVNUFJFIG9jdWx0YXJcbiAgICBpZiAoY29sdW1uLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUFJJT1JJREFEIDI6IFNpIGhpZGVJZkFsbFZhbHVlc0FyZU51bGwgZXMgdHJ1ZSB5IHRvZG9zIGxvcyB2YWxvcmVzIGVzdMOhbiB2YWPDrW9zLCBvY3VsdGFyXG4gICAgLy8gRVhDRVBDScOTTjogRW4gbW9kbyBjcmVhY2nDs24sIG1vc3RyYW1vcyBlc3RhcyBjb2x1bW5hcyBwYXJhIHBlcm1pdGlyIGVudHJhZGEgZGUgZGF0b3NcbiAgICBpZiAoY29sdW1uLmhpZGVJZkFsbFZhbHVlc0FyZU51bGwgPT09IHRydWUgJiYgIWZvcmNlU2hvd0luQ3JlYXRpb24gJiYgdGhpcy5hcmVBbGxDb2x1bW5WYWx1ZXNFbXB0eShjb2x1bW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUG9yIGRlZmVjdG86IG1vc3RyYXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmEgc2kgdW5hIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZSBlbiBsb3MgaGVhZGVycy5cbiAgICogTG9zIGhlYWRlcnMgc2UgbXVlc3RyYW4gc2kgbGEgY29sdW1uYSBlcyB2aXNpYmxlIGVuIGN1YWxxdWllcmEgZGUgZXN0b3MgY2Fzb3M6XG4gICAqIC0gVmlzdWFsaXphY2nDs24gbm9ybWFsXG4gICAqIC0gTW9kbyBjcmVhY2nDs25cbiAgICogLSBIYXkgdW5hIGZpbGEgZW4gbW9kbyBlZGljacOzbiB5IGVzYSBmaWxhIHRpZW5lIHZhbG9yIGVuIGxhIGNvbHVtbmFcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbiAtIExhIGRlZmluaWNpw7NuIGRlIGxhIGNvbHVtbmFcbiAgICovXG4gIGlzQ29sdW1uVmlzaWJsZUluSGVhZGVyKGNvbHVtbjogQzgwVGFibGVDb2xEZWYpOiBib29sZWFuIHtcbiAgICAvLyBQUklPUklEQUQgMTogU2kgdmlzaWJsZSBlc3TDoSBleHBsw61jaXRhbWVudGUgZXN0YWJsZWNpZG8gZW4gZmFsc2UsIFNJRU1QUkUgb2N1bHRhclxuICAgIGlmIChjb2x1bW4udmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTaSBlc3RhbW9zIGVuIG1vZG8gY3JlYWNpw7NuLCBtb3N0cmFyIGNvbHVtbmFzIGNvbiBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsXG4gICAgaWYgKHRoaXMuY3JlYXRpbmcoKSAmJiBjb2x1bW4uaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2kgaGF5IHVuYSBmaWxhIGVuIG1vZG8gZWRpY2nDs24geSBsYSBjb2x1bW5hIHRpZW5lIGhpZGVJZkFsbFZhbHVlc0FyZU51bGxcbiAgICBpZiAodGhpcy5lZGl0aW5nKCkgIT09IG51bGwgJiYgY29sdW1uLmhpZGVJZkFsbFZhbHVlc0FyZU51bGwgPT09IHRydWUpIHtcbiAgICAgIC8vIEJ1c2NhciBsYSBmaWxhIHF1ZSBzZSBlc3TDoSBlZGl0YW5kb1xuICAgICAgY29uc3QgZWRpdGluZ1Jvd0lkID0gdGhpcy5lZGl0aW5nKCk7XG4gICAgICBjb25zdCBlZGl0aW5nUm93ID0gdGhpcy5kYXRhKCkuZmluZChyb3cgPT4gcm93WydpZCddID09PSBlZGl0aW5nUm93SWQpO1xuXG4gICAgICBpZiAoZWRpdGluZ1Jvdykge1xuICAgICAgICAvLyBTb2xvIG1vc3RyYXIgZWwgaGVhZGVyIHNpIGxhIGZpbGEgZW4gZWRpY2nDs24gdGllbmUgdmFsb3IgZW4gZXN0YSBjb2x1bW5hXG4gICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKGVkaXRpbmdSb3csIGNvbHVtbi5hY2Nlc3Nvcik7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1ZhbHVlRW1wdHkoY2VsbFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2kgbm8gc2UgZW5jdWVudHJhIGxhIGZpbGEsIG5vIG1vc3RyYXIgZWwgaGVhZGVyXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU2kgaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCBlcyB0cnVlIHkgdG9kb3MgbG9zIHZhbG9yZXMgZXN0w6FuIHZhY8Otb3MsIG9jdWx0YXJcbiAgICBpZiAoY29sdW1uLmhpZGVJZkFsbFZhbHVlc0FyZU51bGwgPT09IHRydWUgJiYgdGhpcy5hcmVBbGxDb2x1bW5WYWx1ZXNFbXB0eShjb2x1bW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUG9yIGRlZmVjdG86IG1vc3RyYXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmEgc2kgdW5hIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZSBlbiB1bmEgZmlsYSBlc3BlY8OtZmljYSBjb25zaWRlcmFuZG8gZWwgbW9kbyBlZGljacOzbi5cbiAgICogRW4gbW9kbyBlZGljacOzbiwgbGFzIGNvbHVtbmFzIGNvbiBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsIHNlIG11ZXN0cmFuIHNvbG8gc2kgdGllbmVuIHZhbG9yLlxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uIC0gTGEgZGVmaW5pY2nDs24gZGUgbGEgY29sdW1uYVxuICAgKiBAcGFyYW0gcm93IC0gTGEgZmlsYSBhY3R1YWxcbiAgICovXG4gIGlzQ29sdW1uVmlzaWJsZUZvclJvdyhjb2x1bW46IEM4MFRhYmxlQ29sRGVmLCByb3c6IFQpOiBib29sZWFuIHtcbiAgICAvLyBQUklPUklEQUQgMTogU2kgdmlzaWJsZSBlc3TDoSBleHBsw61jaXRhbWVudGUgZXN0YWJsZWNpZG8gZW4gZmFsc2UsIFNJRU1QUkUgb2N1bHRhclxuICAgIGlmIChjb2x1bW4udmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBQUklPUklEQUQgMjogU2kgZXN0YSBmaWxhIGVzcGVjw61maWNhIGVzdMOhIGVuIG1vZG8gZWRpY2nDs24geSBsYSBjb2x1bW5hIHRpZW5lIGhpZGVJZkFsbFZhbHVlc0FyZU51bGxcbiAgICBjb25zdCBpc0VkaXRpbmdUaGlzUm93ID0gdGhpcy5lZGl0aW5nKCkgPT09IHJvd1snaWQnXTtcbiAgICBpZiAoaXNFZGl0aW5nVGhpc1JvdyAmJiBjb2x1bW4uaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gRW4gZWRpY2nDs24sIHNvbG8gbW9zdHJhciBzaSBlc3RhIGZpbGEgZXNwZWPDrWZpY2EgdGllbmUgdmFsb3IgZW4gZXN0YSBjb2x1bW5hXG4gICAgICBjb25zdCBjZWxsVmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3csIGNvbHVtbi5hY2Nlc3Nvcik7XG4gICAgICByZXR1cm4gIXRoaXMuaXNWYWx1ZUVtcHR5KGNlbGxWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gUFJJT1JJREFEIDM6IFNpIGhpZGVJZkFsbFZhbHVlc0FyZU51bGwgZXMgdHJ1ZSB5IHRvZG9zIGxvcyB2YWxvcmVzIGVzdMOhbiB2YWPDrW9zLCBvY3VsdGFyXG4gICAgaWYgKGNvbHVtbi5oaWRlSWZBbGxWYWx1ZXNBcmVOdWxsID09PSB0cnVlICYmIHRoaXMuYXJlQWxsQ29sdW1uVmFsdWVzRW1wdHkoY29sdW1uKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFBvciBkZWZlY3RvOiBtb3N0cmFyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U29ydGluZyhpdGVtczogVFtdKTogdm9pZCB7XG4gICAgY29uc3Qgb3JkZXJlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5vcmRlcik7XG4gICAgaWYgKG9yZGVyZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIG9yZGVyZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBpdGVtcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWVBID0gdGhpcy5nZXRDZWxsVmFsdWUoYSwgY29sLmFjY2Vzc29yKSBhcyBzdHJpbmcgfCBudW1iZXI7XG4gICAgICAgICAgY29uc3QgdmFsdWVCID0gdGhpcy5nZXRDZWxsVmFsdWUoYiwgY29sLmFjY2Vzc29yKSBhcyBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICAgICAgICBpZiAoY29sLm9yZGVyID09PSAnQVNDJykge1xuICAgICAgICAgICAgaWYgKHZhbHVlQSA+IHZhbHVlQikgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAodmFsdWVBIDwgdmFsdWVCKSByZXR1cm4gLTE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZhbHVlQSA8IHZhbHVlQikgcmV0dXJuIDE7XG4gICAgICAgICAgICBpZiAodmFsdWVBID4gdmFsdWVCKSByZXR1cm4gLTE7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25VcGxvYWQocm93OiBUKTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRBY3Rpb24uZW1pdChyb3cpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImdldFRhYmxlTWF4SGVpZ2h0KClcIiBbc3R5bGUub3ZlcmZsb3cteV09XCJzaXplID4gMCA/ICdhdXRvJyA6ICd2aXNpYmxlJ1wiPlxuICA8IS0tIFNlYXJjaCBCYXIgLS0+XG4gIEBpZiAoaGFzU2VhcmNoVGVybUxpc3RlbmVyKCkpIHtcbiAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj5cbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cInNlYXJjaFwiIFtzaXplXT1cIi44XCI+PC9jODAtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIiBwbGFjZWhvbGRlcj1cIkJ1c2Nhci4uLlwiIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZSgpXCIgKGlucHV0KT1cIm9uU2VhcmNoSW5wdXQoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJCdXNjYXIgZW4gbGEgdGFibGFcIiAvPlxuICAgICAgICBAaWYgKHNlYXJjaFZhbHVlKCkpIHtcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLWJvcnJhclwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiIHRpdGxlPVwiTGltcGlhciBiw7pzcXVlZGFcIj5cbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cImNhbmNlbFwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgfVxuXG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIGFsaWduLW1pZGRsZVwiPlxuICAgIDx0aGVhZCBjbGFzcz1cInRoZWFkIHRhYmxlLWxpZ2h0IHN0aWNreS1oZWFkZXJcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgQGlmIChoYXNTZWxlY3RhYmxlTGlzdGVuZXIoKSAmJiBkYXRhKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyIHNlbGVjdGlvbi1jb2x1bW5cIj5cbiAgICAgICAgICBAaWYgKG11bHRpcGxlKSB7XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cInNlbGVjdEFsbENoZWNrZWQoKVwiIFtpbmRldGVybWluYXRlXT1cInNlbGVjdEFsbEluZGV0ZXJtaW5hdGUoKVwiIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKClcIiBhcmlhLWxhYmVsPVwiU2VsZWNjaW9uYXIgdG9kb1wiIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RoPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayBjb2wpIHtcbiAgICAgICAgQGlmIChpc0NvbHVtblZpc2libGVJbkhlYWRlcihjb2wpKSB7XG4gICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlciBib29sZWFuLWNvbHVtblwiPnt7IGNvbC5sYWJlbCB9fTwvdGg+XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgKGNvbC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlciBudW1iZXItY29sdW1uXCI+e3sgY29sLmxhYmVsIH19PC90aD5cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgIDx0aD57eyBjb2wubGFiZWwgfX08L3RoPlxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGhhc0NyZWF0ZUFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNEZWxldGVBY3Rpb25MaXN0ZW5lcigpIHx8XG4gICAgICAgIGhhc0NhbmNlbEFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVmlld0FjdGlvbkxpc3RlbmVyKCkgfHwgaGFzVXBsb2FkQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNHZXRSb3dCdXR0b25MaXN0ZW5lcigpIHx8XG4gICAgICAgIGhhc01vdmVVcEFjdGlvbkxpc3RlbmVyKCkgfHwgaGFzTW92ZURvd25BY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgIDx0aCBjbGFzcz1cInRhYmxlLWFjdGlvbnMtaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtd3JhcHBlclwiPlxuICAgICAgICAgICAgPHNwYW4+QWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoaGFzQ3JlYXRlQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiYWRkXCIgW2Rpc2FibGVkXT1cImNyZWF0aW5nKClcIiB0aXRsZT1cIkFncmVnYXJcIiBbc2l6ZV09XCIuNlwiIChpY29uQ2xpY2spPVwic3RhcnRDcmVhdGUoKVwiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIH1cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICBAZm9yIChyb3cgb2YgZGF0YSgpOyB0cmFjayB0cmFja0J5SWQoaSwgcm93KTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgIDx0cj5cbiAgICAgICAgQGlmIChoYXNTZWxlY3RhYmxlTGlzdGVuZXIoKSAmJiBkYXRhKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyIHNlbGVjdGlvbi1jb2x1bW5cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXNJdGVtU2VsZWN0ZWQocm93KVwiIChjaGFuZ2UpPVwidG9nZ2xlSXRlbVNlbGVjdGlvbihyb3cpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU2VsZWNjaW9uYXIgZmlsYSAnICsgKGkgKyAxKVwiIC8+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrIGNvbCkge1xuICAgICAgICBAaWYgKGlzQ29sdW1uVmlzaWJsZUZvclJvdyhjb2wsIHJvdykpIHtcbiAgICAgICAgQGlmIChjb2wudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyIGJvb2xlYW4tY29sdW1uXCI+XG4gICAgICAgICAgQGlmIChlZGl0aW5nKCkgPT09IHJvd1snaWQnXSAmJiAhY29sLnJlYWRPbmx5KSB7XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIiEhZWRpdFJvdygpPy5bY29sLmFjY2Vzc29yXVwiIChjaGFuZ2UpPVwib25FZGl0SW5wdXQoJGV2ZW50LCBjb2wuYWNjZXNzb3IsIGNvbClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbC5sYWJlbFwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICBAaWYgKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvcikgPT09IHRydWUpIHtcbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cImNoZWNrXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSBpZiAoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICA8YzgwLWljb24gaWNvbj1cImNhbmNlbFwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmIChjb2wudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgbnVtYmVyLWNvbHVtblwiPlxuICAgICAgICAgIEBpZiAoZWRpdGluZygpID09PSByb3dbJ2lkJ10gJiYgIWNvbC5yZWFkT25seSkge1xuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiB0eXBlPVwibnVtYmVyXCIgW3ZhbHVlXT1cImVkaXRSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIiBbcGxhY2Vob2xkZXJdPVwiY29sLmxhYmVsXCIgKGlucHV0KT1cIm9uRWRpdElucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJnZXRDZWxsQ29sb3IoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSwgY29sKVwiPnt7IGdldERpc3BsYXlWYWx1ZShnZXRDZWxsVmFsdWUocm93LFxuICAgICAgICAgICAgY29sLmFjY2Vzc29yKSkgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgPHRkPlxuICAgICAgICAgIEBpZiAoZWRpdGluZygpID09PSByb3dbJ2lkJ10gJiYgIWNvbC5yZWFkT25seSkge1xuICAgICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdlbnVtJykge1xuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgW3ZhbHVlXT1cImVkaXRSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIiAoY2hhbmdlKT1cIm9uRWRpdElucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3sgY29sLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZ2V0RW51bU9wdGlvbnMoY29sKTsgdHJhY2sgb3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBvcHRpb24ubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBbdHlwZV09XCJjb2wudHlwZSA9PT0gJ3Bhc3N3b3JkJyA/ICdwYXNzd29yZCcgOiAndGV4dCdcIiBbdmFsdWVdPVwiZWRpdFJvdygpPy5bY29sLmFjY2Vzc29yXSA/PyAnJ1wiIFtwbGFjZWhvbGRlcl09XCJjb2wubGFiZWxcIiAoaW5wdXQpPVwib25FZGl0SW5wdXQoJGV2ZW50LCBjb2wuYWNjZXNzb3IsIGNvbClcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwiZ2V0Q2VsbENvbG9yKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvciksIGNvbClcIj4qKioqKio8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIGlmIChjb2wudHlwZSA9PT0gJ2VudW0nKSB7XG4gICAgICAgICAgPHNwYW4gW3N0eWxlLmNvbG9yXT1cImdldENlbGxDb2xvcihnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpLCBjb2wpXCI+e3tcbiAgICAgICAgICAgIGdldEVudW1EaXNwbGF5VmFsdWUoZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKSwgY29sKVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIGlmIChnZXRDZWxsVmFsdWUocm93LCBjb2wuYWNjZXNzb3IpID09PSB0cnVlKSB7XG4gICAgICAgICAgPGM4MC1pY29uIGljb249XCJjaGVja1wiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2UgaWYgKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvcikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgPGM4MC1pY29uIGljb249XCJjYW5jZWxcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICA8c3BhbiBbc3R5bGUuY29sb3JdPVwiZ2V0Q2VsbENvbG9yKGdldENlbGxWYWx1ZShyb3csIGNvbC5hY2Nlc3NvciksIGNvbClcIj57eyBnZXREaXNwbGF5VmFsdWUoZ2V0Q2VsbFZhbHVlKHJvdyxcbiAgICAgICAgICAgIGNvbC5hY2Nlc3NvcikpIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaGFzQ3JlYXRlQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNVcGRhdGVBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc0RlbGV0ZUFjdGlvbkxpc3RlbmVyKCkgfHxcbiAgICAgICAgaGFzQ2FuY2VsQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNWaWV3QWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNVcGxvYWRBY3Rpb25MaXN0ZW5lcigpIHx8IGhhc0dldFJvd0J1dHRvbkxpc3RlbmVyKCkgfHxcbiAgICAgICAgaGFzTW92ZVVwQWN0aW9uTGlzdGVuZXIoKSB8fCBoYXNNb3ZlRG93bkFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgYWN0aW9ucy1jZWxsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICBAaWYgKGVkaXRpbmcoKSA9PT0gcm93WydpZCddKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJjaGVja1wiIHRpdGxlPVwiR3VhcmRhclwiIChpY29uQ2xpY2spPVwic2F2ZUVkaXQocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImNhbmNlbFwiIGNvbG9yPVwid2FyblwiIHRpdGxlPVwiQ2FuY2VsYXJcIiAoaWNvbkNsaWNrKT1cImNhbmNlbEVkaXQoKVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAoaGFzVXBkYXRlQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiZWRpdFwiIHRpdGxlPVwiRWRpdGFyXCIgKGljb25DbGljayk9XCJvbkVkaXQocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzQ2FuY2VsQWN0aW9uTGlzdGVuZXIoKSkge1xuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiY2FuY2VsX2NpcmNsZVwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgdGl0bGU9XCJDYW5jZWxhclwiIChpY29uQ2xpY2spPVwib25DYW5jZWwocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzVmlld0FjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cInZpZXdcIiBjb2xvcj1cInByaW1hcnlcIiB0aXRsZT1cIlZlclwiIChpY29uQ2xpY2spPVwib25WaWV3KHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc1VwbG9hZEFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cInVwbG9hZFwiIGNvbG9yPVwicHJpbWFyeVwiIHRpdGxlPVwiU3ViaXJcIiAoaWNvbkNsaWNrKT1cIm9uVXBsb2FkKHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc0dldFJvd0J1dHRvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImdldFwiIGNvbG9yPVwic3VjY2Vzc1wiIHRpdGxlPVwiVmluY3VsYXJcIiAoaWNvbkNsaWNrKT1cIm9uR2V0Um93QnV0dG9uKHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc01vdmVVcEFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImFycm93X3VwXCIgY29sb3I9XCJzZWNvbmRhcnlcIiB0aXRsZT1cIk1vdmVyIGFycmliYVwiIChpY29uQ2xpY2spPVwib25Nb3ZlVXAocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoaGFzTW92ZURvd25BY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJhcnJvd19kb3duXCIgY29sb3I9XCJzZWNvbmRhcnlcIiB0aXRsZT1cIk1vdmVyIGFiYWpvXCIgKGljb25DbGljayk9XCJvbk1vdmVEb3duKHJvdylcIiBbc2l6ZV09XCIuN1wiPjwvYzgwLWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGhhc0VuYWJsZUFjdGlvbkxpc3RlbmVyKCkpIHtcbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gW2ljb25dPVwiZ2V0Q2VsbFZhbHVlKHJvdywgJ2VuYWJsZWQnKSA/ICd0b2dnbGVfb24nIDogJ3RvZ2dsZV9vZmYnXCIgW2NvbG9yXT1cImdldENlbGxWYWx1ZShyb3csICdlbmFibGVkJykgPyAnc3VjY2VzcycgOiAnc2Vjb25kYXJ5J1wiIFt0aXRsZV09XCJnZXRDZWxsVmFsdWUocm93LCAnZW5hYmxlZCcpID8gJ0Rlc2hhYmlsaXRhcicgOiAnSGFiaWxpdGFyJ1wiXG4gICAgICAgICAgICAgIChpY29uQ2xpY2spPVwib25FbmFibGUocm93KVwiIFtzaXplXT1cIi43XCI+XG4gICAgICAgICAgICA8L2M4MC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChoYXNEZWxldGVBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICAgICAgICA8YzgwLWljb24gYnV0dG9uIGljb249XCJkZWxldGVcIiBjb2xvcj1cIndhcm5cIiB0aXRsZT1cIkJvcnJhclwiIChpY29uQ2xpY2spPVwib25EZWxldGUocm93KVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICAgIH1cbiAgICAgIEBpZiAoY3JlYXRpbmcoKSAmJiBoYXNDcmVhdGVBY3Rpb25MaXN0ZW5lcigpKSB7XG4gICAgICA8dHI+XG4gICAgICAgIEBpZiAoaGFzU2VsZWN0YWJsZUxpc3RlbmVyKCkgJiYgZGF0YSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBzZWxlY3Rpb24tY29sdW1uXCI+XG4gICAgICAgICAgPCEtLSBFbXB0eSBjZWxsIGZvciBhbGlnbm1lbnQgLS0+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrIGNvbCkge1xuICAgICAgICBAaWYgKGlzQ29sdW1uVmlzaWJsZShjb2wsIHRydWUpKSB7XG4gICAgICAgIEBpZiAoY29sLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIEBpZiAoIWNvbC5yZWFkT25seSkge1xuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCIhIW5ld1JvdygpPy5bY29sLmFjY2Vzc29yXVwiIChjaGFuZ2UpPVwib25JbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiY29sLmxhYmVsXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDwhLS0gUmVhZE9ubHkgYm9vbGVhbiBjb2x1bW4gaW4gY3JlYXRlIG1vZGUgc2hvd3MgZW1wdHkgLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+LTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH0gQGVsc2UgaWYgKGNvbC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlciBudW1iZXItY29sdW1uXCI+XG4gICAgICAgICAgQGlmICghY29sLnJlYWRPbmx5KSB7XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJudW1iZXJcIiBbdmFsdWVdPVwibmV3Um93KCk/Lltjb2wuYWNjZXNzb3JdID8/ICcnXCIgW3BsYWNlaG9sZGVyXT1cImNvbC5sYWJlbFwiIChpbnB1dCk9XCJvbklucHV0KCRldmVudCwgY29sLmFjY2Vzc29yLCBjb2wpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIDwhLS0gUmVhZE9ubHkgbnVtYmVyIGNvbHVtbiBpbiBjcmVhdGUgbW9kZSBzaG93cyBlbXB0eSAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIj4tPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx0ZD5cbiAgICAgICAgICBAaWYgKCFjb2wucmVhZE9ubHkpIHtcbiAgICAgICAgICBAaWYgKGNvbC50eXBlID09PSAnZW51bScpIHtcbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIFt2YWx1ZV09XCJuZXdSb3coKT8uW2NvbC5hY2Nlc3Nvcl0gPz8gJydcIiAoY2hhbmdlKT1cIm9uSW5wdXQoJGV2ZW50LCBjb2wuYWNjZXNzb3IsIGNvbClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57eyBjb2wubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBnZXRFbnVtT3B0aW9ucyhjb2wpOyB0cmFjayBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IG9wdGlvbi5sYWJlbCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cIm5ld1JvdygpPy5bY29sLmFjY2Vzc29yXSA/PyAnJ1wiIFtwbGFjZWhvbGRlcl09XCJjb2wubGFiZWxcIiAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQsIGNvbC5hY2Nlc3NvciwgY29sKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgPCEtLSBSZWFkT25seSBjb2x1bW4gaW4gY3JlYXRlIG1vZGUgc2hvd3MgZW1wdHkgLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+LTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyIGFjdGlvbnMtY2VsbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGM4MC1pY29uIGJ1dHRvbiBpY29uPVwiY2hlY2tcIiB0aXRsZT1cIkd1YXJkYXJcIiAoaWNvbkNsaWNrKT1cInNhdmVDcmVhdGUoKVwiIFtzaXplXT1cIi43XCI+PC9jODAtaWNvbj5cbiAgICAgICAgICAgIDxjODAtaWNvbiBidXR0b24gaWNvbj1cImNhbmNlbFwiIGNvbG9yPVwid2FyblwiIHRpdGxlPVwiQ2FuY2VsYXJcIiAoaWNvbkNsaWNrKT1cImNhbmNlbENyZWF0ZSgpXCIgW3NpemVdPVwiLjdcIj48L2M4MC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICAgIH1cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuICBAaWYgKGRhdGEoKS5sZW5ndGggPT09IDAgJiYgIWNyZWF0aW5nKCkpIHtcbiAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtbXV0ZWQgcHktMyBzbWFsbFwiPlxuICAgIE5vIGhheSBkYXRvcyBwYXJhIG1vc3RyYXIuXG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPGM4MC1tb2RhbD48L2M4MC1tb2RhbD4iXX0=
package/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from './lib/table/table.component';
1
+ export * from './lib/table';
2
2
  export * from './lib/icon/icon.component';
3
3
  export * from './lib/stat-card/stat-card.component';
4
4
  export * from './lib/card-level/index';
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter, TemplateRef } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export type Icon = 'check' | 'cancel' | 'edit' | 'delete' | 'add' | 'view' | 'get' | 'schedule' | 'refresh' | 'check_circle' | 'cancel_circle' | 'error' | 'queue' | 'arrow_up' | 'arrow_down' | 'toggle_on' | 'toggle_off' | 'search' | 'upload';
3
+ export type Icon = 'check' | 'cancel' | 'edit' | 'delete' | 'add' | 'view' | 'get' | 'schedule' | 'refresh' | 'check_circle' | 'cancel_circle' | 'error' | 'queue' | 'arrow_up' | 'arrow_down' | 'toggle_on' | 'toggle_off' | 'search' | 'upload' | 'pending_actions' | 'play_circle';
4
4
  export type Color = 'primary' | 'secondary' | 'warn' | 'success';
5
5
  export declare class C80IconComponent {
6
6
  /** Tamaño base del icono (en px) */
@@ -38,6 +38,8 @@ export declare class C80IconComponent {
38
38
  toggleOffIconTpl: TemplateRef<unknown>;
39
39
  searchIconTpl: TemplateRef<unknown>;
40
40
  uploadIconTpl: TemplateRef<unknown>;
41
+ pendingActionsIconTpl: TemplateRef<unknown>;
42
+ playCircleIconTpl: TemplateRef<unknown>;
41
43
  getIconTemplate(): TemplateRef<unknown>;
42
44
  get iconColor(): string;
43
45
  get iconOpacity(): number;
@@ -0,0 +1 @@
1
+ export * from './table.component';
@@ -30,7 +30,7 @@ export type ID = number | string;
30
30
  * - Valores NO vacíos: 0, false (son valores válidos)
31
31
  * - EXCEPCIONES IMPORTANTES:
32
32
  * * En modo creación (creating=true) estas columnas SÍ se muestran
33
- * * En modo edición de una fila específica también se muestran
33
+ * * En modo edición de una fila específica se muestran SOLO si esa fila tiene valor
34
34
  *
35
35
  * 3. POR DEFECTO - Columnas normales
36
36
  * - Se muestran siempre (visualización, creación y edición)
@@ -255,6 +255,10 @@ export type ID = number | string;
255
255
  isItemSelected(item: T): boolean;
256
256
  private updateSelectAllState;
257
257
  private emitSelection;
258
+ /**
259
+ * Verifica si un valor individual está vacío/nulo
260
+ */
261
+ private isValueEmpty;
258
262
  /**
259
263
  * Verifica si todos los valores de una columna están vacíos/nulos
260
264
  */
@@ -277,14 +281,14 @@ export type ID = number | string;
277
281
  * Los headers se muestran si la columna es visible en cualquiera de estos casos:
278
282
  * - Visualización normal
279
283
  * - Modo creación
280
- * - Hay alguna fila en modo edición
284
+ * - Hay una fila en modo edición y esa fila tiene valor en la columna
281
285
  *
282
286
  * @param column - La definición de la columna
283
287
  */
284
288
  isColumnVisibleInHeader(column: C80TableColDef): boolean;
285
289
  /**
286
290
  * Determina si una columna debe ser visible en una fila específica considerando el modo edición.
287
- * En modo edición de esa fila específica, las columnas con hideIfAllValuesAreNull se muestran.
291
+ * En modo edición, las columnas con hideIfAllValuesAreNull se muestran solo si tienen valor.
288
292
  *
289
293
  * @param column - La definición de la columna
290
294
  * @param row - La fila actual
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c80/ui",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
4
4
  "peerDependencies": {
5
5
  "@angular/core": "^18.2.0",
6
6
  "rxjs": "~7.8.0",