@hestia-earth/ui-components 0.27.11 → 0.27.12

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.
@@ -19,10 +19,10 @@ export class ShelfDialogComponent {
19
19
  this.showContent.set(false);
20
20
  }
21
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ShelfDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
22
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: ShelfDialogComponent, isStandalone: true, selector: "he-shelf-dialog", inputs: { headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, bottom: { classPropertyName: "bottom", publicName: "bottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<div [style.bottom]=\"bottom()\" class=\"shelf-dialog | is-fixed\">\n <header class=\"shelf-dialog__header | p-4 is-flex is-rounded has-text-white is-align-items-center\">\n <div class=\"is-flex-grow-1\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate() ?? defaultTemplate\"/>\n </div>\n <button (click)=\"showContent.set(!showContent())\" class=\"ml-3 dialog-btn has-text-white\">\n <svg-icon class=\"is-size-4\" [name]=\"toggleIcon()\"/>\n </button>\n <button (click)=\"closed.emit()\" class=\"ml-3 dialog-btn has-text-white\">\n <svg-icon class=\"is-size-4\" name=\"far-close\"/>\n </button>\n </header>\n <div [class.max-h-0]=\"!showContent()\" class=\"shelf-dialog__content | has-background-white\">\n <div>\n <div class=\"p-4\">\n <ng-content/>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultTemplate>\n {{ title() }}\n</ng-template>\n", styles: [".shelf-dialog{min-width:360px;right:10%;border-radius:.5em .5em 0 0;overflow:hidden;box-shadow:0 8px 8px #00000026;z-index:9}.shelf-dialog__header{background:#4c7194}.shelf-dialog__content{overflow:hidden;display:grid;grid-template-rows:1fr;transition:grid-template-rows 125ms}.shelf-dialog__content>*{overflow:hidden}.shelf-dialog .dialog-btn{background:transparent;border:none;cursor:pointer;width:1.5rem;height:1.5rem}.shelf-dialog .dialog-btn fa-icon{font-size:1.5rem}.max-h-0{grid-template-rows:0fr}@media screen and (max-width: 767px){.shelf-dialog{width:100dvw;right:0;border-radius:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "ngmodule", type: HeSvgIconsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: ShelfDialogComponent, isStandalone: true, selector: "he-shelf-dialog", inputs: { headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, bottom: { classPropertyName: "bottom", publicName: "bottom", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, ngImport: i0, template: "<div [style.bottom]=\"bottom()\" class=\"shelf-dialog | is-fixed\">\n <header class=\"shelf-dialog__header | px-4 py-2 is-flex is-rounded has-text-white is-align-items-center\">\n <div class=\"is-flex-grow-1\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate() ?? defaultTemplate\"/>\n </div>\n <button (click)=\"showContent.set(!showContent())\" class=\"ml-3 dialog-btn has-text-white\">\n <svg-icon class=\"is-size-4\" [name]=\"toggleIcon()\"/>\n </button>\n <button (click)=\"closed.emit()\" class=\"ml-3 dialog-btn has-text-white\">\n <svg-icon class=\"is-size-4\" name=\"far-close\"/>\n </button>\n </header>\n <div [class.max-h-0]=\"!showContent()\" class=\"shelf-dialog__content | has-background-white\">\n <div>\n <div class=\"p-4\">\n <ng-content/>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultTemplate>\n {{ title() }}\n</ng-template>\n", styles: [".shelf-dialog{min-width:360px;right:10%;border-radius:.5em .5em 0 0;overflow:hidden;box-shadow:0 8px 8px #00000026;z-index:9}.shelf-dialog__header{background:#4c7194}.shelf-dialog__content{overflow:hidden;display:grid;grid-template-rows:1fr;transition:grid-template-rows 125ms}.shelf-dialog__content>*{overflow:hidden}.shelf-dialog .dialog-btn{background:transparent;border:none;cursor:pointer;width:1.5rem;height:1.5rem}.shelf-dialog .dialog-btn fa-icon{font-size:1.5rem}.max-h-0{grid-template-rows:0fr}@media screen and (max-width: 767px){.shelf-dialog{width:100dvw;right:0;border-radius:0}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "ngmodule", type: HeSvgIconsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
23
  }
24
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ShelfDialogComponent, decorators: [{
25
25
  type: Component,
26
- args: [{ selector: 'he-shelf-dialog', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgTemplateOutlet, SvgIconComponent, HeSvgIconsModule], template: "<div [style.bottom]=\"bottom()\" class=\"shelf-dialog | is-fixed\">\n <header class=\"shelf-dialog__header | p-4 is-flex is-rounded has-text-white is-align-items-center\">\n <div class=\"is-flex-grow-1\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate() ?? defaultTemplate\"/>\n </div>\n <button (click)=\"showContent.set(!showContent())\" class=\"ml-3 dialog-btn has-text-white\">\n <svg-icon class=\"is-size-4\" [name]=\"toggleIcon()\"/>\n </button>\n <button (click)=\"closed.emit()\" class=\"ml-3 dialog-btn has-text-white\">\n <svg-icon class=\"is-size-4\" name=\"far-close\"/>\n </button>\n </header>\n <div [class.max-h-0]=\"!showContent()\" class=\"shelf-dialog__content | has-background-white\">\n <div>\n <div class=\"p-4\">\n <ng-content/>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultTemplate>\n {{ title() }}\n</ng-template>\n", styles: [".shelf-dialog{min-width:360px;right:10%;border-radius:.5em .5em 0 0;overflow:hidden;box-shadow:0 8px 8px #00000026;z-index:9}.shelf-dialog__header{background:#4c7194}.shelf-dialog__content{overflow:hidden;display:grid;grid-template-rows:1fr;transition:grid-template-rows 125ms}.shelf-dialog__content>*{overflow:hidden}.shelf-dialog .dialog-btn{background:transparent;border:none;cursor:pointer;width:1.5rem;height:1.5rem}.shelf-dialog .dialog-btn fa-icon{font-size:1.5rem}.max-h-0{grid-template-rows:0fr}@media screen and (max-width: 767px){.shelf-dialog{width:100dvw;right:0;border-radius:0}}\n"] }]
26
+ args: [{ selector: 'he-shelf-dialog', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgTemplateOutlet, SvgIconComponent, HeSvgIconsModule], template: "<div [style.bottom]=\"bottom()\" class=\"shelf-dialog | is-fixed\">\n <header class=\"shelf-dialog__header | px-4 py-2 is-flex is-rounded has-text-white is-align-items-center\">\n <div class=\"is-flex-grow-1\">\n <ng-container [ngTemplateOutlet]=\"headerTemplate() ?? defaultTemplate\"/>\n </div>\n <button (click)=\"showContent.set(!showContent())\" class=\"ml-3 dialog-btn has-text-white\">\n <svg-icon class=\"is-size-4\" [name]=\"toggleIcon()\"/>\n </button>\n <button (click)=\"closed.emit()\" class=\"ml-3 dialog-btn has-text-white\">\n <svg-icon class=\"is-size-4\" name=\"far-close\"/>\n </button>\n </header>\n <div [class.max-h-0]=\"!showContent()\" class=\"shelf-dialog__content | has-background-white\">\n <div>\n <div class=\"p-4\">\n <ng-content/>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultTemplate>\n {{ title() }}\n</ng-template>\n", styles: [".shelf-dialog{min-width:360px;right:10%;border-radius:.5em .5em 0 0;overflow:hidden;box-shadow:0 8px 8px #00000026;z-index:9}.shelf-dialog__header{background:#4c7194}.shelf-dialog__content{overflow:hidden;display:grid;grid-template-rows:1fr;transition:grid-template-rows 125ms}.shelf-dialog__content>*{overflow:hidden}.shelf-dialog .dialog-btn{background:transparent;border:none;cursor:pointer;width:1.5rem;height:1.5rem}.shelf-dialog .dialog-btn fa-icon{font-size:1.5rem}.max-h-0{grid-template-rows:0fr}@media screen and (max-width: 767px){.shelf-dialog{width:100dvw;right:0;border-radius:0}}\n"] }]
27
27
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGYtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tb24vc2hlbGYtZGlhbG9nL3NoZWxmLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL3NoZWxmLWRpYWxvZy9zaGVsZi1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBVW5ELE1BQU0sT0FBTyxvQkFBb0I7SUFSakM7UUFTcUIsbUJBQWMsR0FBRyxLQUFLLEVBQW9CLENBQUM7UUFFM0MsVUFBSyxHQUFHLEtBQUssRUFBVSxDQUFDO1FBRXhCLFdBQU0sR0FBRyxLQUFLLENBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLFdBQU0sR0FBRyxNQUFNLEVBQVEsQ0FBQztRQUV4QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0tBUzlHO0lBUFEsTUFBTTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0FuQlUsb0JBQW9CO2tHQUFwQixvQkFBb0IsNGZDYmpDLHk1QkF3QkEsNm9CRGJZLGdCQUFnQixvSkFBRSxnQkFBZ0IsOEtBQUUsZ0JBQWdCOzsyRkFFbkQsb0JBQW9CO2tCQVJoQyxTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3ZnSWNvbkNvbXBvbmVudCB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgSGVTdmdJY29uc01vZHVsZSB9IGZyb20gJy4uLy4uL3N2Zy1pY29ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLXNoZWxmLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaGVsZi1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaGVsZi1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0LCBTdmdJY29uQ29tcG9uZW50LCBIZVN2Z0ljb25zTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBTaGVsZkRpYWxvZ0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBoZWFkZXJUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBib3R0b20gPSBpbnB1dDxzdHJpbmcgfCBudW1iZXI+KCcwJyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNsb3NlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzaG93Q29udGVudCA9IHNpZ25hbCh0cnVlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9nZ2xlSWNvbiA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnNob3dDb250ZW50KCkgPyAnZmFyLWNoZXZyb24tZG93bicgOiAnZmFyLWNoZXZyb24tdXAnKSk7XG5cbiAgcHVibGljIGV4cGFuZCgpIHtcbiAgICB0aGlzLnNob3dDb250ZW50LnNldCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICB0aGlzLnNob3dDb250ZW50LnNldChmYWxzZSk7XG4gIH1cbn1cbiIsIjxkaXYgW3N0eWxlLmJvdHRvbV09XCJib3R0b20oKVwiIGNsYXNzPVwic2hlbGYtZGlhbG9nIHwgaXMtZml4ZWRcIj5cbiAgPGhlYWRlciBjbGFzcz1cInNoZWxmLWRpYWxvZ19faGVhZGVyIHwgcC00IGlzLWZsZXggaXMtcm91bmRlZCBoYXMtdGV4dC13aGl0ZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaXMtZmxleC1ncm93LTFcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyVGVtcGxhdGUoKSA/PyBkZWZhdWx0VGVtcGxhdGVcIi8+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd0NvbnRlbnQuc2V0KCFzaG93Q29udGVudCgpKVwiIGNsYXNzPVwibWwtMyBkaWFsb2ctYnRuIGhhcy10ZXh0LXdoaXRlXCI+XG4gICAgICA8c3ZnLWljb24gY2xhc3M9XCJpcy1zaXplLTRcIiBbbmFtZV09XCJ0b2dnbGVJY29uKClcIi8+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VkLmVtaXQoKVwiIGNsYXNzPVwibWwtMyBkaWFsb2ctYnRuIGhhcy10ZXh0LXdoaXRlXCI+XG4gICAgICA8c3ZnLWljb24gY2xhc3M9XCJpcy1zaXplLTRcIiBuYW1lPVwiZmFyLWNsb3NlXCIvPlxuICAgIDwvYnV0dG9uPlxuICA8L2hlYWRlcj5cbiAgPGRpdiBbY2xhc3MubWF4LWgtMF09XCIhc2hvd0NvbnRlbnQoKVwiIGNsYXNzPVwic2hlbGYtZGlhbG9nX19jb250ZW50IHwgaGFzLWJhY2tncm91bmQtd2hpdGVcIj5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInAtNFwiPlxuICAgICAgICA8bmctY29udGVudC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGU+XG4gIHt7IHRpdGxlKCkgfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGYtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tb24vc2hlbGYtZGlhbG9nL3NoZWxmLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL3NoZWxmLWRpYWxvZy9zaGVsZi1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBVW5ELE1BQU0sT0FBTyxvQkFBb0I7SUFSakM7UUFTcUIsbUJBQWMsR0FBRyxLQUFLLEVBQW9CLENBQUM7UUFFM0MsVUFBSyxHQUFHLEtBQUssRUFBVSxDQUFDO1FBRXhCLFdBQU0sR0FBRyxLQUFLLENBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLFdBQU0sR0FBRyxNQUFNLEVBQVEsQ0FBQztRQUV4QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0tBUzlHO0lBUFEsTUFBTTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0FuQlUsb0JBQW9CO2tHQUFwQixvQkFBb0IsNGZDYmpDLCs1QkF3QkEsNm9CRGJZLGdCQUFnQixvSkFBRSxnQkFBZ0IsOEtBQUUsZ0JBQWdCOzsyRkFFbkQsb0JBQW9CO2tCQVJoQyxTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3ZnSWNvbkNvbXBvbmVudCB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgSGVTdmdJY29uc01vZHVsZSB9IGZyb20gJy4uLy4uL3N2Zy1pY29ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLXNoZWxmLWRpYWxvZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaGVsZi1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaGVsZi1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0LCBTdmdJY29uQ29tcG9uZW50LCBIZVN2Z0ljb25zTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBTaGVsZkRpYWxvZ0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBoZWFkZXJUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBib3R0b20gPSBpbnB1dDxzdHJpbmcgfCBudW1iZXI+KCcwJyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNsb3NlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzaG93Q29udGVudCA9IHNpZ25hbCh0cnVlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9nZ2xlSWNvbiA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnNob3dDb250ZW50KCkgPyAnZmFyLWNoZXZyb24tZG93bicgOiAnZmFyLWNoZXZyb24tdXAnKSk7XG5cbiAgcHVibGljIGV4cGFuZCgpIHtcbiAgICB0aGlzLnNob3dDb250ZW50LnNldCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICB0aGlzLnNob3dDb250ZW50LnNldChmYWxzZSk7XG4gIH1cbn1cbiIsIjxkaXYgW3N0eWxlLmJvdHRvbV09XCJib3R0b20oKVwiIGNsYXNzPVwic2hlbGYtZGlhbG9nIHwgaXMtZml4ZWRcIj5cbiAgPGhlYWRlciBjbGFzcz1cInNoZWxmLWRpYWxvZ19faGVhZGVyIHwgcHgtNCBweS0yIGlzLWZsZXggaXMtcm91bmRlZCBoYXMtdGV4dC13aGl0ZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaXMtZmxleC1ncm93LTFcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyVGVtcGxhdGUoKSA/PyBkZWZhdWx0VGVtcGxhdGVcIi8+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd0NvbnRlbnQuc2V0KCFzaG93Q29udGVudCgpKVwiIGNsYXNzPVwibWwtMyBkaWFsb2ctYnRuIGhhcy10ZXh0LXdoaXRlXCI+XG4gICAgICA8c3ZnLWljb24gY2xhc3M9XCJpcy1zaXplLTRcIiBbbmFtZV09XCJ0b2dnbGVJY29uKClcIi8+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VkLmVtaXQoKVwiIGNsYXNzPVwibWwtMyBkaWFsb2ctYnRuIGhhcy10ZXh0LXdoaXRlXCI+XG4gICAgICA8c3ZnLWljb24gY2xhc3M9XCJpcy1zaXplLTRcIiBuYW1lPVwiZmFyLWNsb3NlXCIvPlxuICAgIDwvYnV0dG9uPlxuICA8L2hlYWRlcj5cbiAgPGRpdiBbY2xhc3MubWF4LWgtMF09XCIhc2hvd0NvbnRlbnQoKVwiIGNsYXNzPVwic2hlbGYtZGlhbG9nX19jb250ZW50IHwgaGFzLWJhY2tncm91bmQtd2hpdGVcIj5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInAtNFwiPlxuICAgICAgICA8bmctY29udGVudC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGU+XG4gIHt7IHRpdGxlKCkgfX1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -97,8 +97,8 @@ export class CyclesNodesComponent {
97
97
  this.View = View;
98
98
  this.viewIcon = viewIcon;
99
99
  this.showView = computed(() => ({
100
- [View.chart]: this.selectedNodeKey() === BlankNodesKey.emissions ? this.cycles().length > 1 : true,
101
- [View.logs]: !this.isOriginal() && this.hasRecalculatedNodes(),
100
+ [View.chart]: this.selectedNodeKey() === BlankNodesKey.emissions ? this.cycles().length > 1 : this.hasData(),
101
+ [View.logs]: !this.isOriginal(),
102
102
  [View.table]: true,
103
103
  [View.timeline]: this.enableTimeline()
104
104
  }));
@@ -195,7 +195,7 @@ export class CyclesNodesComponent {
195
195
  return 'term' in cycle ? cycle.term : cycle;
196
196
  }
197
197
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CyclesNodesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
198
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: CyclesNodesComponent, isStandalone: true, selector: "he-cycles-nodes", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKeys: { classPropertyName: "nodeKeys", publicName: "nodeKeys", isSignal: true, isRequired: true, transformFunction: null }, nodeKeyGroup: { classPropertyName: "nodeKeyGroup", publicName: "nodeKeyGroup", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isGroupNode()) {\n <div class=\"tabs is-mb-1\">\n <ul>\n @for (term of groupNodeTerms(); track term) {\n <li [class.is-active]=\"selectedGroupTerm() === term\">\n <a (click)=\"selectedGroupTerm.set(term)\">{{ term.name }}</a>\n </li>\n }\n </ul>\n </div>\n}\n\n@if (hasData()) {\n <div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (selectedView() === View.table) {\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n [disableTooltip]=\"showDownload\"\n placement=\"bottom\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\"></fa-icon>\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n </div>\n}\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @if (data()[dataKey]?.length) {\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span [innerHtml]=\"node.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(cycleIndex, cycle); let cycleIndex = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycleNode(cycle)\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycle\"></he-cycles-functional-unit-measure>\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (node.value.values[cycle['@id']]) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: node.value.values[cycle['@id']], cycle: cycle, key: dataKey })\n \">\n <span pointer>\n {{\n propertyValue(node.value.values[cycle['@id']].value, node.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"node.value.values[cycle['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n @switch (firstNodeKey()) {\n @case (BlankNodesKey.inputs) {\n <he-cycles-result [cycles]=\"cycles()\"></he-cycles-result>\n }\n @case (BlankNodesKey.emissions) {\n <he-cycles-emissions-chart [cycles]=\"cycles()\"></he-cycles-emissions-chart>\n }\n }\n }\n @case (View.timeline) {\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline\n [recalculatedValues]=\"timelineValues()\"\n [dataState]=\"dataState()\"></he-cycles-nodes-timeline>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n </div>\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n @if (nodeKeys().length > 1) {\n <div class=\"tabs is-mb-2\">\n <ul>\n @for (nodeKey of nodeKeys(); track nodeKey) {\n <li [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n }\n </ul>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-node-logs-models>\n }\n }\n }\n}\n\n@if (showDownload) {\n <he-node-csv-export-confirm\n [nodes]=\"cycles()\"\n [filename]=\"csvFilename()\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys()\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n}\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n\n<ng-template #selectCycle>\n @if (cycles().length > 1) {\n <div class=\"field has-addons is-py-2 is-px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of cycles(); track value; let cycleIndex = $index) {\n <option [value]=\"cycleIndex\">{{ cycleIndex + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"], dependencies: [{ kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["search"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "component", type: CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: ["cycle"] }, { kind: "directive", type: NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: CyclesResultComponent, selector: "he-cycles-result", inputs: ["cycles"] }, { kind: "component", type: CyclesEmissionsChartComponent, selector: "he-cycles-emissions-chart", inputs: ["cycles"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CyclesNodesTimelineComponent, selector: "he-cycles-nodes-timeline", inputs: ["recalculatedValues", "dataState"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
198
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: CyclesNodesComponent, isStandalone: true, selector: "he-cycles-nodes", inputs: { dataState: { classPropertyName: "dataState", publicName: "dataState", isSignal: true, isRequired: false, transformFunction: null }, nodeKeys: { classPropertyName: "nodeKeys", publicName: "nodeKeys", isSignal: true, isRequired: true, transformFunction: null }, nodeKeyGroup: { classPropertyName: "nodeKeyGroup", publicName: "nodeKeyGroup", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isGroupNode()) {\n <div class=\"tabs is-mb-1\">\n <ul>\n @for (term of groupNodeTerms(); track term) {\n <li [class.is-active]=\"selectedGroupTerm() === term\">\n <a (click)=\"selectedGroupTerm.set(term)\">{{ term.name }}</a>\n </li>\n }\n </ul>\n </div>\n}\n\n<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n [disableTooltip]=\"showDownload\"\n placement=\"bottom\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\"></fa-icon>\n </button>\n }\n </div>\n @if (hasData() && selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @if (data()[dataKey]?.length) {\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span [innerHtml]=\"node.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(cycleIndex, cycle); let cycleIndex = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycleNode(cycle)\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycle\"></he-cycles-functional-unit-measure>\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (node.value.values[cycle['@id']]) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: node.value.values[cycle['@id']], cycle: cycle, key: dataKey })\n \">\n <span pointer>\n {{\n propertyValue(node.value.values[cycle['@id']].value, node.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"node.value.values[cycle['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n @switch (firstNodeKey()) {\n @case (BlankNodesKey.inputs) {\n <he-cycles-result [cycles]=\"cycles()\"></he-cycles-result>\n }\n @case (BlankNodesKey.emissions) {\n <he-cycles-emissions-chart [cycles]=\"cycles()\"></he-cycles-emissions-chart>\n }\n }\n }\n @case (View.timeline) {\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline\n [recalculatedValues]=\"timelineValues()\"\n [dataState]=\"dataState()\"></he-cycles-nodes-timeline>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n </div>\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n @if (nodeKeys().length > 1) {\n <div class=\"tabs is-mb-2\">\n <ul>\n @for (nodeKey of nodeKeys(); track nodeKey) {\n <li [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n }\n </ul>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-node-logs-models>\n }\n }\n }\n}\n\n@if (showDownload) {\n <he-node-csv-export-confirm\n [nodes]=\"cycles()\"\n [filename]=\"csvFilename()\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys()\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n}\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n\n<ng-template #selectCycle>\n @if (cycles().length > 1) {\n <div class=\"field has-addons is-py-2 is-px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of cycles(); track value; let cycleIndex = $index) {\n <option [value]=\"cycleIndex\">{{ cycleIndex + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"], dependencies: [{ kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["search"] }, { kind: "component", type: DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "component", type: CyclesFunctionalUnitMeasureComponent, selector: "he-cycles-functional-unit-measure", inputs: ["cycle"] }, { kind: "directive", type: NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: CyclesResultComponent, selector: "he-cycles-result", inputs: ["cycles"] }, { kind: "component", type: CyclesEmissionsChartComponent, selector: "he-cycles-emissions-chart", inputs: ["cycles"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CyclesNodesTimelineComponent, selector: "he-cycles-nodes-timeline", inputs: ["recalculatedValues", "dataState"] }, { kind: "component", type: NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataState", "dataKey"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "pipe", type: CompoundPipe, name: "compound" }, { kind: "pipe", type: DefaultPipe, name: "default" }, { kind: "pipe", type: EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: KeyToLabelPipe, name: "keyToLabel" }, { kind: "pipe", type: PrecisionPipe, name: "precision" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
199
199
  }
200
200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CyclesNodesComponent, decorators: [{
201
201
  type: Component,
@@ -223,6 +223,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
223
223
  EllipsisPipe,
224
224
  KeyToLabelPipe,
225
225
  PrecisionPipe
226
- ], template: "@if (isGroupNode()) {\n <div class=\"tabs is-mb-1\">\n <ul>\n @for (term of groupNodeTerms(); track term) {\n <li [class.is-active]=\"selectedGroupTerm() === term\">\n <a (click)=\"selectedGroupTerm.set(term)\">{{ term.name }}</a>\n </li>\n }\n </ul>\n </div>\n}\n\n@if (hasData()) {\n <div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (selectedView() === View.table) {\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n [disableTooltip]=\"showDownload\"\n placement=\"bottom\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\"></fa-icon>\n </button>\n }\n </div>\n @if (selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n </div>\n}\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @if (data()[dataKey]?.length) {\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span [innerHtml]=\"node.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(cycleIndex, cycle); let cycleIndex = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycleNode(cycle)\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycle\"></he-cycles-functional-unit-measure>\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (node.value.values[cycle['@id']]) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: node.value.values[cycle['@id']], cycle: cycle, key: dataKey })\n \">\n <span pointer>\n {{\n propertyValue(node.value.values[cycle['@id']].value, node.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"node.value.values[cycle['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n @switch (firstNodeKey()) {\n @case (BlankNodesKey.inputs) {\n <he-cycles-result [cycles]=\"cycles()\"></he-cycles-result>\n }\n @case (BlankNodesKey.emissions) {\n <he-cycles-emissions-chart [cycles]=\"cycles()\"></he-cycles-emissions-chart>\n }\n }\n }\n @case (View.timeline) {\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline\n [recalculatedValues]=\"timelineValues()\"\n [dataState]=\"dataState()\"></he-cycles-nodes-timeline>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n </div>\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n @if (nodeKeys().length > 1) {\n <div class=\"tabs is-mb-2\">\n <ul>\n @for (nodeKey of nodeKeys(); track nodeKey) {\n <li [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n }\n </ul>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-node-logs-models>\n }\n }\n }\n}\n\n@if (showDownload) {\n <he-node-csv-export-confirm\n [nodes]=\"cycles()\"\n [filename]=\"csvFilename()\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys()\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n}\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n\n<ng-template #selectCycle>\n @if (cycles().length > 1) {\n <div class=\"field has-addons is-py-2 is-px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of cycles(); track value; let cycleIndex = $index) {\n <option [value]=\"cycleIndex\">{{ cycleIndex + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"] }]
226
+ ], template: "@if (isGroupNode()) {\n <div class=\"tabs is-mb-1\">\n <ul>\n @for (term of groupNodeTerms(); track term) {\n <li [class.is-active]=\"selectedGroupTerm() === term\">\n <a (click)=\"selectedGroupTerm.set(term)\">{{ term.name }}</a>\n </li>\n }\n </ul>\n </div>\n}\n\n<div class=\"columns is-variable is-align-items-center is-2 is-m-0\">\n <div class=\"column\">\n @if (hasData() && selectedView() === View.table) {\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n [disableTooltip]=\"showDownload\"\n placement=\"bottom\">\n <fa-icon [icon]=\"faDownload\" size=\"lg\"></fa-icon>\n </button>\n }\n </div>\n @if (hasData() && selectedView() === View.table) {\n <div class=\"column is-narrow\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter terms by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n }\n @if (views()?.length > 1) {\n <div class=\"column is-narrow\">\n <div class=\"field has-addons\">\n @for (view of views(); track view) {\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView() === view\"\n (click)=\"selectedView.set(view)\">\n <span class=\"icon is-small\">\n <fa-icon [icon]=\"viewIcon[view]\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">{{ view }}</span>\n </button>\n </div>\n }\n </div>\n </div>\n }\n</div>\n\n@if (isNodeKeyAllowed()) {\n @switch (selectedView()) {\n @case (View.table) {\n <div class=\"is-px-3 is-pb-3\">\n @if (hasData()) {\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n @if (dataKeys().length > 1) {\n <tr class=\"has-text-weight-bold\">\n <th class=\"width-auto\"></th>\n <th [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @if (data()[dataKey]?.length) {\n <th [attr.colspan]=\"data()[dataKey].length\" [class.has-border-right]=\"!dataKeyLast\">\n <span>{{ dataKey | keyToLabel }}</span>\n </th>\n }\n }\n </tr>\n }\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\"></th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.name\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <he-node-link [node]=\"node.value.term\">\n <span [innerHtml]=\"node.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n }\n }\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <a [href]=\"baseUrl + '/schema/Cycle#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <th\n [attr.title]=\"node.value.term.units\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n <span [innerHtml]=\"node.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"node.value.term\"></he-terms-units-description>\n </th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (cycle of cycles(); track trackById(cycleIndex, cycle); let cycleIndex = $index) {\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycleNode(cycle)\">\n <span>{{ cycleIndex + 1 }}. {{ defaultLabel(cycle) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [class.is-hidden]=\"isGroupNode()\">\n <he-cycles-functional-unit-measure [cycle]=\"cycle\"></he-cycles-functional-unit-measure>\n </td>\n @for (dataKey of dataKeys(); track dataKey; let dataKeyLast = $last) {\n @for (node of data()[dataKey]; track node; let nodeLast = $last) {\n <td\n class=\"is-nowrap\"\n [class.has-border-right]=\"dataKeys().length > 1 && !dataKeyLast && nodeLast\">\n @if (node.value.values[cycle['@id']]) {\n <span\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, { data: node.value.values[cycle['@id']], cycle: cycle, key: dataKey })\n \">\n <span pointer>\n {{\n propertyValue(node.value.values[cycle['@id']].value, node.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"dataState()\"\n [node]=\"node.value.values[cycle['@id']].node\"\n key=\"value\"></he-blank-node-state>\n </span>\n } @else {\n <span>-</span>\n }\n </td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n </he-data-table>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n } @else {\n <div class=\"is-pt-3 has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n @if (showSwitchToRecalculated()) {\n <span>\n Switch to\n <code>recalculated</code>\n version.\n </span>\n }\n </div>\n }\n </div>\n }\n @case (View.chart) {\n @switch (firstNodeKey()) {\n @case (BlankNodesKey.inputs) {\n <he-cycles-result [cycles]=\"cycles()\"></he-cycles-result>\n }\n @case (BlankNodesKey.emissions) {\n <he-cycles-emissions-chart [cycles]=\"cycles()\"></he-cycles-emissions-chart>\n }\n }\n }\n @case (View.timeline) {\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n <div class=\"is-px-3 is-pb-3\">\n <he-cycles-nodes-timeline\n [recalculatedValues]=\"timelineValues()\"\n [dataState]=\"dataState()\"></he-cycles-nodes-timeline>\n <he-blank-node-state-notice [dataState]=\"dataState()\"></he-blank-node-state-notice>\n </div>\n }\n @case (View.logs) {\n <ng-container *ngTemplateOutlet=\"selectCycle\"></ng-container>\n @if (nodeKeys().length > 1) {\n <div class=\"tabs is-mb-2\">\n <ul>\n @for (nodeKey of nodeKeys(); track nodeKey) {\n <li [class.is-active]=\"selectedNodeKey() === nodeKey\">\n <a (click)=\"selectedNodeKey.set(nodeKey)\">{{ nodeKey | keyToLabel }}</a>\n </li>\n }\n </ul>\n </div>\n }\n @if (selectedNode()) {\n <he-node-logs-models\n [node]=\"selectedNode()\"\n [nodeKey]=\"selectedNodeKey()\"\n [logsKey]=\"selectedLogsKey()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [filterTermTypes]=\"filterTermTypes()\"></he-node-logs-models>\n }\n }\n }\n}\n\n@if (showDownload) {\n <he-node-csv-export-confirm\n [nodes]=\"cycles()\"\n [filename]=\"csvFilename()\"\n [isUpload]=\"false\"\n [headerKeys]=\"headerKeys()\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n}\n\n<ng-template #details let-node=\"cycle\" let-data=\"data\" let-key=\"key\">\n <p>\n <b>{{ defaultLabel(node) }}</b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"key\"></he-node-value-details>\n</ng-template>\n\n<ng-template #selectCycle>\n @if (cycles().length > 1) {\n <div class=\"field has-addons is-py-2 is-px-3\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n @for (value of cycles(); track value; let cycleIndex = $index) {\n <option [value]=\"cycleIndex\">{{ cycleIndex + 1 }}. {{ defaultLabel(value) }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}\n"] }]
227
227
  }], ctorParameters: () => [] });
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLW5vZGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jeWNsZXMvY3ljbGVzLW5vZGVzL2N5Y2xlcy1ub2Rlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1ub2Rlcy9jeWNsZXMtbm9kZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFJTCxRQUFRLEVBSVIsWUFBWSxFQUlaLGFBQWEsRUFFZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFnQixZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDdkcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFDckgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDakcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDeEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDdkgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sNEVBQTRFLENBQUM7QUFDbEksT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDdkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDM0YsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBRTVHLElBQUssSUFLSjtBQUxELFdBQUssSUFBSTtJQUNQLDRCQUFvQixDQUFBO0lBQ3BCLDRCQUFvQixDQUFBO0lBQ3BCLHdDQUFnQyxDQUFBO0lBQ2hDLG9DQUE0QixDQUFBO0FBQzlCLENBQUMsRUFMSSxJQUFJLEtBQUosSUFBSSxRQUtSO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQXNCbEQsTUFBTSxRQUFRLEdBRVY7SUFDRixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVO0lBQ3hCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVk7SUFDekIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTTtJQUNwQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTO0NBQzNCLENBQUM7QUFFRixNQUFNLFlBQVksR0FFZDtJQUNGLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzlELENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0QsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM3RCxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ2xFLENBQUM7QUFFRixNQUFNLHNCQUFzQixHQUV4QjtJQUNGLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztDQUNuRCxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQXdCLEVBQUUsRUFBRSxDQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQU1sRSxNQUFNLENBQU4sSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLHlDQUFtQixDQUFBO0lBQ25CLHlEQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFIVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBRzdCO0FBSUQsTUFBTSxjQUFjLEdBQ2xCLENBQUMsS0FBb0IsRUFBRSxFQUFFLENBQ3pCLENBQUMsSUFBa0IsRUFBaUQsRUFBRSxDQUFDLENBQUM7SUFDdEUsR0FBRyxJQUFJO0lBQ1AsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJO0lBQ2pCLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxrREFBa0Q7Q0FDekUsQ0FBQyxDQUFDO0FBRUwsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUE0QixFQUFFLEtBQW9CLEVBQWlCLEVBQUUsQ0FDNUYsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFdkQsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFFBQTRCLEVBQUUsTUFBc0IsRUFBRSxJQUFXLEVBQWlCLEVBQUUsQ0FDbEgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNqQixjQUFjLENBQUMsS0FBSyxDQUFDLENBQ25CLENBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQzFHLENBQ0YsQ0FBQztBQWtDSixNQUFNLE9BQU8sb0JBQW9CO0lBMkcvQjtRQTFHUSxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVuQyxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBRWpDLGNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLGFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFtQixDQUFDO1FBQzdDLGlCQUFZLEdBQUcsS0FBSyxFQUFzQixDQUFDO1FBRTNDLGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzlCLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsb0JBQWUsR0FBRyxNQUFNLENBQUMsU0FBMEIsQ0FBQyxDQUFDO1FBRXJELHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxTQUFpQixDQUFDLENBQUM7UUFFOUMsWUFBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzlCLGlCQUFZLEdBQUcsWUFBWSxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXJCLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDcEMsVUFBVTtZQUNWLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsb0JBQW9CO1lBQ3BCLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUMvRSxDQUFDLENBQUM7UUFFTyxTQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ1osYUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN0QixhQUFRLEdBQUcsUUFBUSxDQUN6QixHQUFHLEVBQUUsQ0FDSCxDQUFDO1lBQ0MsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ2xHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM5RCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO1lBQ2xCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7U0FDdkMsQ0FBZ0MsQ0FDcEMsQ0FBQztRQUNRLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFHLGlCQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxjQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQWUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEYsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5RixpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFbkcsaUNBQWlDO1FBQ3ZCLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUN2QyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzdGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQ3pCLENBQUM7UUFDUSxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUMvQixJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzVGLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQ3hCLENBQUM7UUFFTSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQiwwQkFBcUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RixrQkFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLG9CQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLDJCQUFzQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLCtCQUEwQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RywwREFBMEQ7UUFDaEQsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3JDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsQ0FBQyxDQUFDO2dCQUNFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUN2QixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3BCLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWTthQUNsQztZQUNILENBQUMsQ0FBQyxJQUFJLENBQ1QsQ0FBQztRQUVNLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRSxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUxRix5QkFBb0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEYsNkJBQXdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBRTVGLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUcsbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVoRSxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXJHLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdGLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXJGLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoRixTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUM3QixJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNyRyxDQUFDO1FBQ1EsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFcEQsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV2RSxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLGVBQVUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEIsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUd6RSxNQUFNLENBQ0osR0FBRyxFQUFFO1lBQ0gsMkNBQTJDO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDNUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztRQUVGLE1BQU0sQ0FDSixHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNqRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztRQUVGLE1BQU0sQ0FDSixHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZSxDQVdyQixFQUFFLE9BQU8sRUFBSztRQUNkLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUNwQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQ2IsT0FBTyxFQUNQLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFDckIsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUNuQyxDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQ3hDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDYixhQUFhLENBQUMsU0FBUyxFQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLEVBQ3JCLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FDbkMsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUE2QixPQUFPLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEcsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckUsVUFBVTtZQUNWLGVBQWUsRUFBRSxlQUFlLENBQUMsVUFBVSxDQUFDO1NBQzdDLENBQUMsQ0FBQyxFQUNILENBQUMsaUJBQWlCLENBQUMsRUFDbkIsQ0FBQyxLQUFLLENBQUMsQ0FDUixDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUM3RixDQUFDO0lBQ3hCLENBQUM7SUFFUyxTQUFTLENBQUMsTUFBYyxFQUFFLElBQWdDO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFUyxhQUFhLENBQUMsT0FBWSxFQUFFLE9BQVk7UUFDaEQsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRVMsWUFBWSxDQUFDLElBQVk7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVTLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVTLFNBQVMsQ0FBQyxLQUFpQztRQUNuRCxPQUFPLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM5QyxDQUFDOzhHQXRNVSxvQkFBb0I7a0dBQXBCLG9CQUFvQix3ZUMxS2pDLCs1VkF3UUEsZ1BEdkhJLFVBQVUsMlRBQ1YsZUFBZSxrUEFDZixxQkFBcUIseUlBQ3JCLGtCQUFrQix1R0FDbEIsaUJBQWlCLDRHQUNqQiw4QkFBOEIseUdBQzlCLG9DQUFvQyxpR0FDcEMsVUFBVSwyVUFDVix1QkFBdUIsbUpBQ3ZCLDZCQUE2QiwrSEFDN0IscUJBQXFCLGlGQUNyQiw2QkFBNkIsMEZBQzdCLGdCQUFnQixvSkFDaEIsNEJBQTRCLGtIQUM1Qix1QkFBdUIscU5BQ3ZCLDZCQUE2QixrS0FDN0IseUJBQXlCLHVIQUN6QixXQUFXLHVPQUNYLFlBQVksNENBQ1osV0FBVywyQ0FDWCxZQUFZLDRDQUNaLGNBQWMsOENBQ2QsYUFBYTs7MkZBR0osb0JBQW9CO2tCQWhDaEMsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDVixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixpQkFBaUI7d0JBQ2pCLDhCQUE4Qjt3QkFDOUIsb0NBQW9DO3dCQUNwQyxVQUFVO3dCQUNWLHVCQUF1Qjt3QkFDdkIsNkJBQTZCO3dCQUM3QixxQkFBcUI7d0JBQ3JCLDZCQUE2Qjt3QkFDN0IsZ0JBQWdCO3dCQUNoQiw0QkFBNEI7d0JBQzVCLHVCQUF1Qjt3QkFDdkIsNkJBQTZCO3dCQUM3Qix5QkFBeUI7d0JBQ3pCLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxhQUFhO3FCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHtcbiAgSUN5Y2xlSlNPTkxELFxuICBJbnB1dCBhcyBIZXN0aWFJbnB1dCxcbiAgUHJvZHVjdCxcbiAgTm9kZVR5cGUsXG4gIEFuaW1hbCxcbiAgRW1pc3Npb24sXG4gIFByYWN0aWNlLFxuICBUZXJtVGVybVR5cGUsXG4gIEVtaXNzaW9uTWV0aG9kVGllcixcbiAgVGVybSxcbiAgVHJhbnNmb3JtYXRpb24sXG4gIEJsYW5rTm9kZXNLZXksXG4gIGJsYW5rTm9kZXNUeXBlXG59IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC5vcmRlcmJ5JztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IE5nYlRvb2x0aXAsIE5nYlBvcG92ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBJY29uRGVmaW5pdGlvbiB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XG5cbmltcG9ydCB7IGZpbHRlckJsYW5rTm9kZSwgbWV0aG9kVGllck9yZGVyIH0gZnJvbSAnLi4vLi4vY29tbW9uL25vZGUtdXRpbHMnO1xuaW1wb3J0IHsgbG9nc0tleSB9IGZyb20gJy4uL2N5Y2xlcy5tb2RlbCc7XG5pbXBvcnQgeyBIZU5vZGVTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBncm91cE5vZGVzQnlUZXJtLCBJR3JvdXBlZEtleXMsIGdyb3VwcGVkS2V5cyB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwsIGRlZmF1bHRMYWJlbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBQcmVjaXNpb25QaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3ByZWNpc2lvbi5waXBlJztcbmltcG9ydCB7IEtleVRvTGFiZWxQaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2tleS10by1sYWJlbC5waXBlJztcbmltcG9ydCB7IEVsbGlwc2lzUGlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbGxpcHNpcy5waXBlJztcbmltcG9ydCB7IERlZmF1bHRQaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2RlZmF1bHQucGlwZSc7XG5pbXBvcnQgeyBDb21wb3VuZFBpcGUgfSBmcm9tICcuLi8uLi9jb21tb24vY29tcG91bmQucGlwZSc7XG5pbXBvcnQgeyBOb2RlVmFsdWVEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLXZhbHVlLWRldGFpbHMvbm9kZS12YWx1ZS1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVMb2dzTW9kZWxzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50JztcbmltcG9ydCB7IEN5Y2xlc05vZGVzVGltZWxpbmVDb21wb25lbnQgfSBmcm9tICcuLi9jeWNsZXMtbm9kZXMtdGltZWxpbmUvY3ljbGVzLW5vZGVzLXRpbWVsaW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEN5Y2xlc0VtaXNzaW9uc0NoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vY3ljbGVzLWVtaXNzaW9ucy1jaGFydC9jeWNsZXMtZW1pc3Npb25zLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDeWNsZXNSZXN1bHRDb21wb25lbnQgfSBmcm9tICcuLi9jeWNsZXMtcmVzdWx0L2N5Y2xlcy1yZXN1bHQuY29tcG9uZW50JztcbmltcG9ydCB7IEJsYW5rTm9kZVN0YXRlTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2JsYW5rLW5vZGUtc3RhdGUtbm90aWNlL2JsYW5rLW5vZGUtc3RhdGUtbm90aWNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbGFua05vZGVTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9ibGFuay1ub2RlLXN0YXRlL2JsYW5rLW5vZGUtc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEN5Y2xlc0Z1bmN0aW9uYWxVbml0TWVhc3VyZUNvbXBvbmVudCB9IGZyb20gJy4uL2N5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZS9jeWNsZXMtZnVuY3Rpb25hbC11bml0LW1lYXN1cmUuY29tcG9uZW50JztcbmltcG9ydCB7IFRlcm1zVW5pdHNEZXNjcmlwdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Rlcm1zL3Rlcm1zLXVuaXRzLWRlc2NyaXB0aW9uL3Rlcm1zLXVuaXRzLWRlc2NyaXB0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTGlua0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1saW5rL25vZGUtbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoRXh0ZW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlYXJjaC1leHRlbmQvc2VhcmNoLWV4dGVuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmFDYWxjdWxhdG9yLCBmYUNoYXJ0QmFyLCBmYURvd25sb2FkLCBmYUxpc3QsIGZhTGlzdEFsdCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ1RhYmxlIHZpZXcnLFxuICBjaGFydCA9ICdDaGFydCB2aWV3JyxcbiAgdGltZWxpbmUgPSAnT3BlcmF0aW9ucyBUaW1lbGluZScsXG4gIGxvZ3MgPSAnUmVjYWxjdWxhdGlvbnMgbG9ncydcbn1cblxuY29uc3QgdGltZWxpbmVUZXJtVHlwZSA9IFtUZXJtVGVybVR5cGUub3BlcmF0aW9uXTtcblxuaW50ZXJmYWNlIElDeWNsZUNvbmZpZyB7XG4gIG5vZGVLZXk6IEJsYW5rTm9kZXNLZXk7XG59XG5cbmludGVyZmFjZSBJQ3ljbGVDb25maWdBbmltYWwgZXh0ZW5kcyBJQ3ljbGVDb25maWcge1xuICBub2RlS2V5OiBCbGFua05vZGVzS2V5LmFuaW1hbHM7XG59XG5cbmludGVyZmFjZSBJQ3ljbGVDb25maWdFbWlzc2lvbiBleHRlbmRzIElDeWNsZUNvbmZpZyB7XG4gIG5vZGVLZXk6IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zO1xufVxuXG5pbnRlcmZhY2UgSUN5Y2xlQ29uZmlnSW5wdXQgZXh0ZW5kcyBJQ3ljbGVDb25maWcge1xuICBub2RlS2V5OiBCbGFua05vZGVzS2V5LmlucHV0cztcbn1cblxuaW50ZXJmYWNlIElDeWNsZUNvbmZpZ1ByYWN0aWNlIGV4dGVuZHMgSUN5Y2xlQ29uZmlnIHtcbiAgbm9kZUtleTogQmxhbmtOb2Rlc0tleS5wcmFjdGljZXM7XG59XG5cbmNvbnN0IHZpZXdJY29uOiB7XG4gIFt2aWV3IGluIFZpZXddOiBJY29uRGVmaW5pdGlvbjtcbn0gPSB7XG4gIFtWaWV3LmNoYXJ0XTogZmFDaGFydEJhcixcbiAgW1ZpZXcubG9nc106IGZhQ2FsY3VsYXRvcixcbiAgW1ZpZXcudGFibGVdOiBmYUxpc3QsXG4gIFtWaWV3LnRpbWVsaW5lXTogZmFMaXN0QWx0XG59O1xuXG5jb25zdCBub2RlS2V5Vmlld3M6IHtcbiAgW3R5cGUgaW4gQmxhbmtOb2Rlc0tleV0/OiBWaWV3W107XG59ID0ge1xuICBbQmxhbmtOb2Rlc0tleS5hbmltYWxzXTogW1ZpZXcudGFibGVdLFxuICBbQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnNdOiBbVmlldy50YWJsZSwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkuaW5wdXRzXTogW1ZpZXcudGFibGUsIFZpZXcuY2hhcnQsIFZpZXcubG9nc10sXG4gIFtCbGFua05vZGVzS2V5LnByb2R1Y3RzXTogW1ZpZXcudGFibGUsIFZpZXcuY2hhcnQsIFZpZXcubG9nc10sXG4gIFtCbGFua05vZGVzS2V5LnByYWN0aWNlc106IFtWaWV3LnRhYmxlLCBWaWV3LnRpbWVsaW5lLCBWaWV3LmxvZ3NdXG59O1xuXG5jb25zdCBub2RlS2V5RmlsdGVyVGVybVR5cGVzOiB7XG4gIFt0eXBlIGluIEJsYW5rTm9kZXNLZXldPzogVGVybVRlcm1UeXBlW107XG59ID0ge1xuICBbQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnNdOiBbVGVybVRlcm1UeXBlLmVtaXNzaW9uXVxufTtcblxuY29uc3QgZmlsdGVyVmFsdWVzVGltZWxpbmUgPSAodmFsdWVzOiBibGFua05vZGVzVHlwZVtdKSA9PlxuICB2YWx1ZXMuZmlsdGVyKHAgPT4gdGltZWxpbmVUZXJtVHlwZS5pbmNsdWRlcyhwLnRlcm0/LnRlcm1UeXBlKSk7XG5cbnR5cGUgZ3JvdXBlZEVtaXNzaW9ucyA9IHtcbiAgW21ldGhvZFRpZXIgaW4gRW1pc3Npb25NZXRob2RUaWVyXTogSUdyb3VwZWRLZXlzPEVtaXNzaW9uPltdO1xufTtcblxuZXhwb3J0IGVudW0gQ3ljbGVOb2Rlc0tleUdyb3VwIHtcbiAgYW5pbWFscyA9ICdhbmltYWxzJyxcbiAgdHJhbnNmb3JtYXRpb25zID0gJ3RyYW5zZm9ybWF0aW9ucydcbn1cblxudHlwZSBncm91cGVkTm9kZSA9IEFuaW1hbCB8IFRyYW5zZm9ybWF0aW9uO1xuXG5jb25zdCBjeWNsZUdyb3VwTm9kZSA9XG4gIChjeWNsZT86IElDeWNsZUpTT05MRCkgPT5cbiAgKG5vZGU/OiBncm91cGVkTm9kZSk6IGdyb3VwZWROb2RlICYgeyBuYW1lOiBzdHJpbmc7ICdAaWQnOiBzdHJpbmcgfSA9PiAoe1xuICAgIC4uLm5vZGUsXG4gICAgbmFtZTogY3ljbGU/Lm5hbWUsXG4gICAgJ0BpZCc6IGN5Y2xlPy5bJ0BpZCddIC8vIHNldCBAaWQgc28gd2UgY2FuIGZldGNoIHRoZSBsb2dzIGZyb20gdGhlIEN5Y2xlXG4gIH0pO1xuXG5jb25zdCBjeWNsZUdyb3VwTm9kZXMgPSAoZ3JvdXBLZXk6IEN5Y2xlTm9kZXNLZXlHcm91cCwgY3ljbGU/OiBJQ3ljbGVKU09OTEQpOiBncm91cGVkTm9kZVtdID0+XG4gIChjeWNsZT8uW2dyb3VwS2V5XSB8fCBbXSkubWFwKGN5Y2xlR3JvdXBOb2RlKGN5Y2xlKSk7XG5cbmNvbnN0IGZpbHRlckdyb3VwTm9kZXNCeVRlcm0gPSAoZ3JvdXBLZXk6IEN5Y2xlTm9kZXNLZXlHcm91cCwgY3ljbGVzOiBJQ3ljbGVKU09OTERbXSwgdGVybT86IFRlcm0pOiBncm91cGVkTm9kZVtdID0+XG4gIGN5Y2xlcy5tYXAoY3ljbGUgPT5cbiAgICBjeWNsZUdyb3VwTm9kZShjeWNsZSkoXG4gICAgICAoKGN5Y2xlPy5bZ3JvdXBLZXldIGFzIGdyb3VwZWROb2RlW10pIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZmluZChub2RlID0+IG5vZGUudGVybT8ubmFtZSA9PT0gdGVybT8ubmFtZSlcbiAgICApXG4gICk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWN5Y2xlcy1ub2RlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jeWNsZXMtbm9kZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtbm9kZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ2JUb29sdGlwLFxuICAgIEZhSWNvbkNvbXBvbmVudCxcbiAgICBTZWFyY2hFeHRlbmRDb21wb25lbnQsXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICAgIE5vZGVMaW5rQ29tcG9uZW50LFxuICAgIFRlcm1zVW5pdHNEZXNjcmlwdGlvbkNvbXBvbmVudCxcbiAgICBDeWNsZXNGdW5jdGlvbmFsVW5pdE1lYXN1cmVDb21wb25lbnQsXG4gICAgTmdiUG9wb3ZlcixcbiAgICBCbGFua05vZGVTdGF0ZUNvbXBvbmVudCxcbiAgICBCbGFua05vZGVTdGF0ZU5vdGljZUNvbXBvbmVudCxcbiAgICBDeWNsZXNSZXN1bHRDb21wb25lbnQsXG4gICAgQ3ljbGVzRW1pc3Npb25zQ2hhcnRDb21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBDeWNsZXNOb2Rlc1RpbWVsaW5lQ29tcG9uZW50LFxuICAgIE5vZGVMb2dzTW9kZWxzQ29tcG9uZW50LFxuICAgIE5vZGVDc3ZFeHBvcnRDb25maXJtQ29tcG9uZW50LFxuICAgIE5vZGVWYWx1ZURldGFpbHNDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tcG91bmRQaXBlLFxuICAgIERlZmF1bHRQaXBlLFxuICAgIEVsbGlwc2lzUGlwZSxcbiAgICBLZXlUb0xhYmVsUGlwZSxcbiAgICBQcmVjaXNpb25QaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ3ljbGVzTm9kZXNDb21wb25lbnQge1xuICBwcml2YXRlIG5vZGVTdG9yZVNlcnZpY2UgPSBpbmplY3QoSGVOb2RlU3RvcmVTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFEb3dubG9hZCA9IGZhRG93bmxvYWQ7XG5cbiAgcHJvdGVjdGVkIGRhdGFTdGF0ZSA9IGlucHV0KERhdGFTdGF0ZS5vcmlnaW5hbCk7XG4gIHByb3RlY3RlZCBub2RlS2V5cyA9IGlucHV0LnJlcXVpcmVkPEJsYW5rTm9kZXNLZXlbXT4oKTtcbiAgcHJvdGVjdGVkIG5vZGVLZXlHcm91cCA9IGlucHV0PEN5Y2xlTm9kZXNLZXlHcm91cD4oKTtcblxuICBwcm90ZWN0ZWQgQmxhbmtOb2Rlc0tleSA9IEJsYW5rTm9kZXNLZXk7XG4gIHByb3RlY3RlZCBmaXJzdE5vZGVLZXkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVLZXlzKCk/LlswXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZE5vZGVLZXkgPSBzaWduYWwodW5kZWZpbmVkIGFzIEJsYW5rTm9kZXNLZXkpO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZEdyb3VwVGVybSA9IHNpZ25hbCh1bmRlZmluZWQgYXMgVGVybSk7XG5cbiAgcHJvdGVjdGVkIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHJvdGVjdGVkIGRlZmF1bHRMYWJlbCA9IGRlZmF1bHRMYWJlbDtcbiAgcHJvdGVjdGVkIHNob3dEb3dubG9hZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBoZWFkZXJLZXlzID0gY29tcHV0ZWQoKCkgPT4gW1xuICAgICdjeWNsZS5pZCcsXG4gICAgJ2N5Y2xlLkBpZCcsXG4gICAgJ3RyYW5zZm9ybWF0aW9uLmlkJyxcbiAgICAndHJhbnNmb3JtYXRpb24uQGlkJyxcbiAgICAuLi50aGlzLm5vZGVLZXlzKCkuZmxhdE1hcChrZXkgPT4gW2BjeWNsZS4ke2tleX0uYCwgYHRyYW5zZm9ybWF0aW9uLiR7a2V5fS5gXSlcbiAgXSk7XG5cbiAgcHJvdGVjdGVkIFZpZXcgPSBWaWV3O1xuICBwcm90ZWN0ZWQgdmlld0ljb24gPSB2aWV3SWNvbjtcbiAgcHJpdmF0ZSBzaG93VmlldyA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBbVmlldy5jaGFydF06IHRoaXMuc2VsZWN0ZWROb2RlS2V5KCkgPT09IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zID8gdGhpcy5jeWNsZXMoKS5sZW5ndGggPiAxIDogdHJ1ZSxcbiAgICAgICAgW1ZpZXcubG9nc106ICF0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLmhhc1JlY2FsY3VsYXRlZE5vZGVzKCksXG4gICAgICAgIFtWaWV3LnRhYmxlXTogdHJ1ZSxcbiAgICAgICAgW1ZpZXcudGltZWxpbmVdOiB0aGlzLmVuYWJsZVRpbWVsaW5lKClcbiAgICAgIH0pIGFzIHsgW3ZpZXcgaW4gVmlld106IGJvb2xlYW4gfVxuICApO1xuICBwcm90ZWN0ZWQgdmlld3MgPSBjb21wdXRlZCgoKSA9PiBub2RlS2V5Vmlld3NbdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0/LmZpbHRlcih2aWV3ID0+IHRoaXMuc2hvd1ZpZXcoKVt2aWV3XSkgPz8gW10pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRWaWV3ID0gc2lnbmFsKFZpZXcudGFibGUpO1xuXG4gIHByaXZhdGUgX2FsbE5vZGVzID0gdG9TaWduYWwodGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmQkPElDeWNsZUpTT05MRD4oTm9kZVR5cGUuQ3ljbGUpKTtcbiAgcHJpdmF0ZSBvcmlnaW5hbE5vZGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYWxsTm9kZXMoKT8ubWFwKGRhdGEgPT4gZGF0YVtEYXRhU3RhdGUub3JpZ2luYWxdKSB8fCBbXSk7XG4gIHByaXZhdGUgY3VycmVudE5vZGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYWxsTm9kZXMoKT8ubWFwKGRhdGEgPT4gZGF0YVt0aGlzLmRhdGFTdGF0ZSgpXSkgfHwgW10pO1xuXG4gIC8vIGNhbiBiZSBDeWNsZSBvciBUcmFuc2Zvcm1hdGlvblxuICBwcm90ZWN0ZWQgb3JpZ2luYWxDeWNsZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMubm9kZUtleUdyb3VwKClcbiAgICAgID8gZmlsdGVyR3JvdXBOb2Rlc0J5VGVybSh0aGlzLm5vZGVLZXlHcm91cCgpLCB0aGlzLm9yaWdpbmFsTm9kZXMoKSwgdGhpcy5zZWxlY3RlZEdyb3VwVGVybSgpKVxuICAgICAgOiB0aGlzLm9yaWdpbmFsTm9kZXMoKVxuICApO1xuICBwcm90ZWN0ZWQgY3ljbGVzID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLm5vZGVLZXlHcm91cCgpXG4gICAgICA/IGZpbHRlckdyb3VwTm9kZXNCeVRlcm0odGhpcy5ub2RlS2V5R3JvdXAoKSwgdGhpcy5jdXJyZW50Tm9kZXMoKSwgdGhpcy5zZWxlY3RlZEdyb3VwVGVybSgpKVxuICAgICAgOiB0aGlzLmN1cnJlbnROb2RlcygpXG4gICk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIG9naXJpbmFsU2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3JpZ2luYWxDeWNsZXMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3ljbGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRMb2dzS2V5ID0gY29tcHV0ZWQoKCkgPT4gbG9nc0tleSh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRPcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub2dpcmluYWxTZWxlY3RlZEN5Y2xlKCk/Llt0aGlzLnNlbGVjdGVkTm9kZUtleSgpXSB8fCBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRDeWNsZSgpPy5bdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0gfHwgW10pO1xuICAvLyBUT0RPOiBoYW5kbGUgdHJhbnNmb3JtYXRpb24gYW5kIG5vbi1pbmRleGVkIG5vZGVzIG9uIENFXG4gIHByb3RlY3RlZCBzZWxlY3RlZE5vZGUgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuc2VsZWN0ZWRDeWNsZSgpXG4gICAgICA/IHtcbiAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ3ljbGUoKSxcbiAgICAgICAgICAnQHR5cGUnOiBOb2RlVHlwZS5DeWNsZSxcbiAgICAgICAgICB0eXBlOiBOb2RlVHlwZS5DeWNsZSxcbiAgICAgICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICAgICAgfVxuICAgICAgOiBudWxsXG4gICk7XG5cbiAgcHJpdmF0ZSBpc09yaWdpbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kYXRhU3RhdGUoKSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgcHJpdmF0ZSBvcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzT3JpZ2luYWwoKSA/IG51bGwgOiB0aGlzLm9yaWdpbmFsQ3ljbGVzKCkpIHx8IFtdKTtcblxuICBwcml2YXRlIGhhc1JlY2FsY3VsYXRlZE5vZGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jeWNsZXMoKS5zb21lKGN5Y2xlID0+ICFjeWNsZS5hZ2dyZWdhdGVkKSk7XG4gIHByb3RlY3RlZCBzaG93U3dpdGNoVG9SZWNhbGN1bGF0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLmhhc1JlY2FsY3VsYXRlZE5vZGVzKCkpO1xuXG4gIHByb3RlY3RlZCB0aW1lbGluZVZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGZpbHRlclZhbHVlc1RpbWVsaW5lKHRoaXMuc2VsZWN0ZWRDeWNsZSgpPy5bdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0gfHwgW10pKTtcbiAgcHJpdmF0ZSBlbmFibGVUaW1lbGluZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudGltZWxpbmVWYWx1ZXMoKS5sZW5ndGggPiAwKTtcblxuICBwcm90ZWN0ZWQgaXNOb2RlS2V5QWxsb3dlZCA9IGNvbXB1dGVkKCgpID0+IG5vZGVLZXlWaWV3c1t0aGlzLmZpcnN0Tm9kZUtleSgpXS5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVmlldygpKSk7XG5cbiAgcHJpdmF0ZSBncm91cGVkTm9kZXMgPSBjb21wdXRlZCgoKSA9PiBjeWNsZUdyb3VwTm9kZXModGhpcy5ub2RlS2V5R3JvdXAoKSwgdGhpcy5vcmlnaW5hbE5vZGVzKCk/LlswXSkpO1xuICBwcm90ZWN0ZWQgZ3JvdXBOb2RlVGVybXMgPSBjb21wdXRlZCgoKSA9PiB1bmlxdWUodGhpcy5ncm91cGVkTm9kZXMoKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKSkpO1xuICBwcm90ZWN0ZWQgaXNHcm91cE5vZGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVLZXlHcm91cCgpICYmIHRoaXMuZ3JvdXBlZE5vZGVzKCk/Lmxlbmd0aCA+IDApO1xuXG4gIHByb3RlY3RlZCBpc0VtaXNzaW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZE5vZGVLZXkoKSA9PT0gQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnMpO1xuXG4gIHByb3RlY3RlZCBkYXRhID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmlzRW1pc3Npb24oKVxuICAgICAgPyB0aGlzLmdyb3VwRW1pc3Npb25zKClcbiAgICAgIDogT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMubm9kZUtleXMoKS5tYXAobm9kZUtleSA9PiBbbm9kZUtleSwgdGhpcy5ncm91cE5vZGVzQnlLZXkoeyBub2RlS2V5IH0pXSkpXG4gICk7XG4gIHByb3RlY3RlZCBkYXRhS2V5cyA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC5rZXlzKHRoaXMuZGF0YSgpKSk7XG5cbiAgcHJvdGVjdGVkIGhhc0RhdGEgPSBjb21wdXRlZCgoKSA9PiBPYmplY3QudmFsdWVzKHRoaXMuZGF0YSgpKS5mbGF0KCkubGVuZ3RoID4gMCk7XG5cbiAgcHJvdGVjdGVkIGZpbHRlclRlcm1UeXBlcyA9IGNvbXB1dGVkKCgpID0+IG5vZGVLZXlGaWx0ZXJUZXJtVHlwZXNbdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0pO1xuICBwcm90ZWN0ZWQgZmlsdGVyVGVybSA9IHNpZ25hbCgnJyk7XG5cbiAgcHJvdGVjdGVkIGNzdkZpbGVuYW1lID0gY29tcHV0ZWQoKCkgPT4gYCR7dGhpcy5ub2RlS2V5cygpLmpvaW4oJy0nKX0uY3N2YCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBtYWtlIHN1cmUgbG9ncyBkb2VzIG5vdCByZW1haW4gZGlzcGxheWVkXG4gICAgICAgIGlmICgodGhpcy5pc09yaWdpbmFsKCkgJiYgdGhpcy5zZWxlY3RlZFZpZXcoKSA9PT0gVmlldy5sb2dzKSB8fCAhdGhpcy52aWV3cygpLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRWaWV3KCkpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcuc2V0KFZpZXcudGFibGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZUtleSgpIHx8ICF0aGlzLm5vZGVLZXlzKCkuaW5jbHVkZXModGhpcy5zZWxlY3RlZE5vZGVLZXkoKSkpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZUtleS5zZXQodGhpcy5maXJzdE5vZGVLZXkoKSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcuc2V0KFZpZXcudGFibGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXBUZXJtKCkgfHwgIXRoaXMuZ3JvdXBOb2RlVGVybXMoKS5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkR3JvdXBUZXJtKCkpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwVGVybS5zZXQodGhpcy5ncm91cE5vZGVUZXJtcygpWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdyb3VwTm9kZXNCeUtleTxcbiAgICBUIGV4dGVuZHMgSUN5Y2xlQ29uZmlnLFxuICAgIFIgPSBUIGV4dGVuZHMgSUN5Y2xlQ29uZmlnQW5pbWFsXG4gICAgICA/IEFuaW1hbFxuICAgICAgOiBUIGV4dGVuZHMgSUN5Y2xlQ29uZmlnRW1pc3Npb25cbiAgICAgICAgPyBFbWlzc2lvblxuICAgICAgICA6IFQgZXh0ZW5kcyBJQ3ljbGVDb25maWdJbnB1dFxuICAgICAgICAgID8gSGVzdGlhSW5wdXRcbiAgICAgICAgICA6IFQgZXh0ZW5kcyBJQ3ljbGVDb25maWdQcmFjdGljZVxuICAgICAgICAgICAgPyBQcmFjdGljZVxuICAgICAgICAgICAgOiBQcm9kdWN0XG4gID4oeyBub2RlS2V5IH06IFQpOiBJR3JvdXBlZEtleXM8Uj5bXSB7XG4gICAgY29uc3Qgbm9kZXNQZXJDeWNsZSA9IGdyb3VwTm9kZXNCeVRlcm08SUN5Y2xlSlNPTkxEIHwgZ3JvdXBlZE5vZGUsIFI+KFxuICAgICAgdGhpcy5jeWNsZXMoKSxcbiAgICAgIG5vZGVLZXksXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWVzKCksXG4gICAgICBmaWx0ZXJCbGFua05vZGUodGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICByZXR1cm4gb3JkZXJCeShncm91cHBlZEtleXMobm9kZXNQZXJDeWNsZSksIFsna2V5J10sIFsnYXNjJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEVtaXNzaW9ucygpIHtcbiAgICBjb25zdCBlbWlzc2lvbnNQZXJDeWNsZSA9IGdyb3VwTm9kZXNCeVRlcm08SUN5Y2xlSlNPTkxEIHwgZ3JvdXBlZE5vZGUsIEVtaXNzaW9uPihcbiAgICAgIHRoaXMuY3ljbGVzKCksXG4gICAgICBCbGFua05vZGVzS2V5LmVtaXNzaW9ucyxcbiAgICAgIHRoaXMub3JpZ2luYWxWYWx1ZXMoKSxcbiAgICAgIGZpbHRlckJsYW5rTm9kZSh0aGlzLmZpbHRlclRlcm0oKSlcbiAgICApO1xuICAgIGNvbnN0IHZhbHVlczogSUdyb3VwZWRLZXlzPEVtaXNzaW9uPltdID0gb3JkZXJCeShncm91cHBlZEtleXMoZW1pc3Npb25zUGVyQ3ljbGUpLCBbJ2tleSddLCBbJ2FzYyddKTtcbiAgICBjb25zdCBtZXRob2RUaWVycyA9IG9yZGVyQnkoXG4gICAgICB1bmlxdWUodmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZS5tZXRob2RUaWVyKSkubWFwKG1ldGhvZFRpZXIgPT4gKHtcbiAgICAgICAgbWV0aG9kVGllcixcbiAgICAgICAgbWV0aG9kVGllck9yZGVyOiBtZXRob2RUaWVyT3JkZXIobWV0aG9kVGllcilcbiAgICAgIH0pKSxcbiAgICAgIFsnbWV0aG9kVGllck9yZGVyJ10sXG4gICAgICBbJ2FzYyddXG4gICAgKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgbWV0aG9kVGllcnMubWFwKCh7IG1ldGhvZFRpZXIgfSkgPT4gW21ldGhvZFRpZXIsIHZhbHVlcy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUubWV0aG9kVGllciA9PT0gbWV0aG9kVGllcildKVxuICAgICkgYXMgZ3JvdXBlZEVtaXNzaW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0J5SWQoX2luZGV4OiBudW1iZXIsIGl0ZW06IElDeWNsZUpTT05MRCB8IGdyb3VwZWROb2RlKSB7XG4gICAgcmV0dXJuIGl0ZW1bJ0BpZCddO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVBvcG92ZXIocG9wb3ZlcjogYW55LCBjb250ZXh0OiBhbnkpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWx0ZXJCeVRlcm0odGVybTogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJUZXJtLnNldCh0ZXJtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RJbmRleCh7IHRhcmdldDogeyB2YWx1ZSB9IH0pIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KCt2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3ljbGVOb2RlKGN5Y2xlOiBJQ3ljbGVKU09OTEQgfCBncm91cGVkTm9kZSkge1xuICAgIHJldHVybiAndGVybScgaW4gY3ljbGUgPyBjeWNsZS50ZXJtIDogY3ljbGU7XG4gIH1cbn1cbiIsIkBpZiAoaXNHcm91cE5vZGUoKSkge1xuICA8ZGl2IGNsYXNzPVwidGFicyBpcy1tYi0xXCI+XG4gICAgPHVsPlxuICAgICAgQGZvciAodGVybSBvZiBncm91cE5vZGVUZXJtcygpOyB0cmFjayB0ZXJtKSB7XG4gICAgICAgIDxsaSBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkR3JvdXBUZXJtKCkgPT09IHRlcm1cIj5cbiAgICAgICAgICA8YSAoY2xpY2spPVwic2VsZWN0ZWRHcm91cFRlcm0uc2V0KHRlcm0pXCI+e3sgdGVybS5uYW1lIH19PC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgfVxuICAgIDwvdWw+XG4gIDwvZGl2PlxufVxuXG5AaWYgKGhhc0RhdGEoKSkge1xuICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtMiBpcy1tLTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICBAaWYgKHNlbGVjdGVkVmlldygpID09PSBWaWV3LnRhYmxlKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1naG9zdFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dEb3dubG9hZCA9IHRydWVcIlxuICAgICAgICAgIG5nYlRvb2x0aXA9XCJEb3dubG9hZCBhcyBDU1ZcIlxuICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCJzaG93RG93bmxvYWRcIlxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhRG93bmxvYWRcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoc2VsZWN0ZWRWaWV3KCkgPT09IFZpZXcudGFibGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCI+XG4gICAgICAgIDxoZS1zZWFyY2gtZXh0ZW5kXG4gICAgICAgICAgY2xhc3M9XCJpcy1zZWNvbmRhcnkgaXMtc21hbGxcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIHRlcm1zIGJ5IG5hbWVcIlxuICAgICAgICAgIChzZWFyY2gpPVwiZmlsdGVyQnlUZXJtKCRldmVudClcIj48L2hlLXNlYXJjaC1leHRlbmQ+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmICh2aWV3cygpPy5sZW5ndGggPiAxKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgICAgIEBmb3IgKHZpZXcgb2Ygdmlld3MoKTsgdHJhY2sgdmlldykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRWaWV3KCkgPT09IHZpZXdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFZpZXcuc2V0KHZpZXcpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJ2aWV3SWNvblt2aWV3XVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tbW9iaWxlXCI+e3sgdmlldyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbn1cblxuQGlmIChpc05vZGVLZXlBbGxvd2VkKCkpIHtcbiAgQHN3aXRjaCAoc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICBAY2FzZSAoVmlldy50YWJsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cImlzLXB4LTMgaXMtcGItM1wiPlxuICAgICAgICBAaWYgKGhhc0RhdGEoKSkge1xuICAgICAgICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIEBpZiAoZGF0YUtleXMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIFtjbGFzcy5pcy1oaWRkZW5dPVwiaXNHcm91cE5vZGUoKVwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGRhdGFLZXkgb2YgZGF0YUtleXMoKTsgdHJhY2sgZGF0YUtleTsgbGV0IGRhdGFLZXlMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGRhdGEoKVtkYXRhS2V5XT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggW2F0dHIuY29sc3Bhbl09XCJkYXRhKClbZGF0YUtleV0ubGVuZ3RoXCIgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiIWRhdGFLZXlMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRhdGFLZXkgfCBrZXlUb0xhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImhhcy10ZXh0LXdlaWdodC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cImlzR3JvdXBOb2RlKClcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgQGZvciAoZGF0YUtleSBvZiBkYXRhS2V5cygpOyB0cmFjayBkYXRhS2V5OyBsZXQgZGF0YUtleUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChub2RlIG9mIGRhdGEoKVtkYXRhS2V5XTsgdHJhY2sgbm9kZTsgbGV0IG5vZGVMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm5vZGUudmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oYXMtYm9yZGVyLXJpZ2h0XT1cImRhdGFLZXlzKCkubGVuZ3RoID4gMSAmJiAhZGF0YUtleUxhc3QgJiYgbm9kZUxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwibm9kZS52YWx1ZS50ZXJtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwibm9kZS52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczogMzAgfCBjb21wb3VuZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImlzLWl0YWxpYyBoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJpc0dyb3VwTm9kZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS9DeWNsZSNmdW5jdGlvbmFsVW5pdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5GdW5jdGlvbmFsIHVuaXQ8L2E+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgQGZvciAoZGF0YUtleSBvZiBkYXRhS2V5cygpOyB0cmFjayBkYXRhS2V5OyBsZXQgZGF0YUtleUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChub2RlIG9mIGRhdGEoKVtkYXRhS2V5XTsgdHJhY2sgbm9kZTsgbGV0IG5vZGVMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm5vZGUudmFsdWUudGVybS51bml0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLWJvcmRlci1yaWdodF09XCJkYXRhS2V5cygpLmxlbmd0aCA+IDEgJiYgIWRhdGFLZXlMYXN0ICYmIG5vZGVMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cIm5vZGUudmFsdWUudGVybS51bml0cyB8IGNvbXBvdW5kXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLW1sLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVybV09XCJub2RlLnZhbHVlLnRlcm1cIj48L2hlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAoY3ljbGUgb2YgY3ljbGVzKCk7IHRyYWNrIHRyYWNrQnlJZChjeWNsZUluZGV4LCBjeWNsZSk7IGxldCBjeWNsZUluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImRlZmF1bHRMYWJlbChjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImN5Y2xlTm9kZShjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGN5Y2xlSW5kZXggKyAxIH19LiB7eyBkZWZhdWx0TGFiZWwoY3ljbGUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJpc0dyb3VwTm9kZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGhlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZSBbY3ljbGVdPVwiY3ljbGVcIj48L2hlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZGF0YUtleSBvZiBkYXRhS2V5cygpOyB0cmFjayBkYXRhS2V5OyBsZXQgZGF0YUtleUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgZGF0YSgpW2RhdGFLZXldOyB0cmFjayBub2RlOyBsZXQgbm9kZUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiZGF0YUtleXMoKS5sZW5ndGggPiAxICYmICFkYXRhS2V5TGFzdCAmJiBub2RlTGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUudmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLXBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiZGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJpcy1uYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3A9XCJuZ2JQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZVBvcG92ZXIocCwgeyBkYXRhOiBub2RlLnZhbHVlLnZhbHVlc1tjeWNsZVsnQGlkJ11dLCBjeWNsZTogY3ljbGUsIGtleTogZGF0YUtleSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBwb2ludGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUobm9kZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXS52YWx1ZSwgbm9kZS52YWx1ZS50ZXJtWydAaWQnXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHJlY2lzaW9uOiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRlZmF1bHQ6ICctJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlXT1cIm5vZGUudmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0ubm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1cInZhbHVlXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+LTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2hlLWRhdGEtdGFibGU+XG4gICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlKClcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXMtcHQtMyBoYXMtdGV4dC1jZW50ZXJlZFwiPlxuICAgICAgICAgICAgPHNwYW4+Tm8gZGF0YSBhdmFpbGFibGU8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLXBsLTFcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFmaWx0ZXJUZXJtKClcIj5tYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XG4gICAgICAgICAgICBAaWYgKHNob3dTd2l0Y2hUb1JlY2FsY3VsYXRlZCgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIFN3aXRjaCB0b1xuICAgICAgICAgICAgICAgIDxjb2RlPnJlY2FsY3VsYXRlZDwvY29kZT5cbiAgICAgICAgICAgICAgICB2ZXJzaW9uLlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAY2FzZSAoVmlldy5jaGFydCkge1xuICAgICAgQHN3aXRjaCAoZmlyc3ROb2RlS2V5KCkpIHtcbiAgICAgICAgQGNhc2UgKEJsYW5rTm9kZXNLZXkuaW5wdXRzKSB7XG4gICAgICAgICAgPGhlLWN5Y2xlcy1yZXN1bHQgW2N5Y2xlc109XCJjeWNsZXMoKVwiPjwvaGUtY3ljbGVzLXJlc3VsdD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnMpIHtcbiAgICAgICAgICA8aGUtY3ljbGVzLWVtaXNzaW9ucy1jaGFydCBbY3ljbGVzXT1cImN5Y2xlcygpXCI+PC9oZS1jeWNsZXMtZW1pc3Npb25zLWNoYXJ0PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIEBjYXNlIChWaWV3LnRpbWVsaW5lKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0Q3ljbGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpcy1weC0zIGlzLXBiLTNcIj5cbiAgICAgICAgPGhlLWN5Y2xlcy1ub2Rlcy10aW1lbGluZVxuICAgICAgICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwidGltZWxpbmVWYWx1ZXMoKVwiXG4gICAgICAgICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiPjwvaGUtY3ljbGVzLW5vZGVzLXRpbWVsaW5lPlxuICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2U+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGNhc2UgKFZpZXcubG9ncykge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdEN5Y2xlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICBAaWYgKG5vZGVLZXlzKCkubGVuZ3RoID4gMSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGFicyBpcy1tYi0yXCI+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgQGZvciAobm9kZUtleSBvZiBub2RlS2V5cygpOyB0cmFjayBub2RlS2V5KSB7XG4gICAgICAgICAgICAgIDxsaSBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkTm9kZUtleSgpID09PSBub2RlS2V5XCI+XG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInNlbGVjdGVkTm9kZUtleS5zZXQobm9kZUtleSlcIj57eyBub2RlS2V5IHwga2V5VG9MYWJlbCB9fTwvYT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoc2VsZWN0ZWROb2RlKCkpIHtcbiAgICAgICAgPGhlLW5vZGUtbG9ncy1tb2RlbHNcbiAgICAgICAgICBbbm9kZV09XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgICAgICAgW25vZGVLZXldPVwic2VsZWN0ZWROb2RlS2V5KClcIlxuICAgICAgICAgIFtsb2dzS2V5XT1cInNlbGVjdGVkTG9nc0tleSgpXCJcbiAgICAgICAgICBbb3JpZ2luYWxWYWx1ZXNdPVwic2VsZWN0ZWRPcmlnaW5hbFZhbHVlcygpXCJcbiAgICAgICAgICBbcmVjYWxjdWxhdGVkVmFsdWVzXT1cInNlbGVjdGVkUmVjYWxjdWxhdGVkVmFsdWVzKClcIlxuICAgICAgICAgIFtmaWx0ZXJUZXJtVHlwZXNdPVwiZmlsdGVyVGVybVR5cGVzKClcIj48L2hlLW5vZGUtbG9ncy1tb2RlbHM+XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBpZiAoc2hvd0Rvd25sb2FkKSB7XG4gIDxoZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybVxuICAgIFtub2Rlc109XCJjeWNsZXMoKVwiXG4gICAgW2ZpbGVuYW1lXT1cImNzdkZpbGVuYW1lKClcIlxuICAgIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gICAgW2hlYWRlcktleXNdPVwiaGVhZGVyS2V5cygpXCJcbiAgICAoY2xvc2VkKT1cInNob3dEb3dubG9hZCA9IGZhbHNlXCI+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cbn1cblxuPG5nLXRlbXBsYXRlICNkZXRhaWxzIGxldC1ub2RlPVwiY3ljbGVcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQta2V5PVwia2V5XCI+XG4gIDxwPlxuICAgIDxiPnt7IGRlZmF1bHRMYWJlbChub2RlKSB9fTwvYj5cbiAgPC9wPlxuICA8aGUtbm9kZS12YWx1ZS1kZXRhaWxzXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiXG4gICAgW25vZGVUeXBlXT1cIm5vZGVbJ0B0eXBlJ11cIlxuICAgIFtkYXRhS2V5XT1cImtleVwiPjwvaGUtbm9kZS12YWx1ZS1kZXRhaWxzPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWxlY3RDeWNsZT5cbiAgQGlmIChjeWNsZXMoKS5sZW5ndGggPiAxKSB7XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgaXMtcHktMiBpcy1weC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1zdGF0aWMgaXMtc2Vjb25kYXJ5XCI+U2VsZWN0IGEgQ3ljbGU8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGwgaXMtZnVsbHdpZHRoIGlzLXNlY29uZGFyeVwiPlxuICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJzZWxlY3RJbmRleCgkZXZlbnQpXCI+XG4gICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiBjeWNsZXMoKTsgdHJhY2sgdmFsdWU7IGxldCBjeWNsZUluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImN5Y2xlSW5kZXhcIj57eyBjeWNsZUluZGV4ICsgMSB9fS4ge3sgZGVmYXVsdExhYmVsKHZhbHVlKSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLW5vZGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jeWNsZXMvY3ljbGVzLW5vZGVzL2N5Y2xlcy1ub2Rlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1ub2Rlcy9jeWNsZXMtbm9kZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFJTCxRQUFRLEVBSVIsWUFBWSxFQUlaLGFBQWEsRUFFZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFn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QXFCLGlGQUNyQiw2QkFBNkIsMEZBQzdCLGdCQUFnQixvSkFDaEIsNEJBQTRCLGtIQUM1Qix1QkFBdUIscU5BQ3ZCLDZCQUE2QixrS0FDN0IseUJBQXlCLHVIQUN6QixXQUFXLHVPQUNYLFlBQVksNENBQ1osV0FBVywyQ0FDWCxZQUFZLDRDQUNaLGNBQWMsOENBQ2QsYUFBYTs7MkZBR0osb0JBQW9CO2tCQWhDaEMsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsVUFBVTt3QkFDVixlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixpQkFBaUI7d0JBQ2pCLDhCQUE4Qjt3QkFDOUIsb0NBQW9DO3dCQUNwQyxVQUFVO3dCQUNWLHVCQUF1Qjt3QkFDdkIsNkJBQTZCO3dCQUM3QixxQkFBcUI7d0JBQ3JCLDZCQUE2Qjt3QkFDN0IsZ0JBQWdCO3dCQUNoQiw0QkFBNEI7d0JBQzVCLHVCQUF1Qjt3QkFDdkIsNkJBQTZCO3dCQUM3Qix5QkFBeUI7d0JBQ3pCLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxhQUFhO3FCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHtcbiAgSUN5Y2xlSlNPTkxELFxuICBJbnB1dCBhcyBIZXN0aWFJbnB1dCxcbiAgUHJvZHVjdCxcbiAgTm9kZVR5cGUsXG4gIEFuaW1hbCxcbiAgRW1pc3Npb24sXG4gIFByYWN0aWNlLFxuICBUZXJtVGVybVR5cGUsXG4gIEVtaXNzaW9uTWV0aG9kVGllcixcbiAgVGVybSxcbiAgVHJhbnNmb3JtYXRpb24sXG4gIEJsYW5rTm9kZXNLZXksXG4gIGJsYW5rTm9kZXNUeXBlXG59IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC5vcmRlcmJ5JztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IE5nYlRvb2x0aXAsIE5nYlBvcG92ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBJY29uRGVmaW5pdGlvbiB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XG5cbmltcG9ydCB7IGZpbHRlckJsYW5rTm9kZSwgbWV0aG9kVGllck9yZGVyIH0gZnJvbSAnLi4vLi4vY29tbW9uL25vZGUtdXRpbHMnO1xuaW1wb3J0IHsgbG9nc0tleSB9IGZyb20gJy4uL2N5Y2xlcy5tb2RlbCc7XG5pbXBvcnQgeyBIZU5vZGVTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9ub2RlL25vZGUtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBncm91cE5vZGVzQnlUZXJtLCBJR3JvdXBlZEtleXMsIGdyb3VwcGVkS2V5cyB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwsIGRlZmF1bHRMYWJlbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBQcmVjaXNpb25QaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3ByZWNpc2lvbi5waXBlJztcbmltcG9ydCB7IEtleVRvTGFiZWxQaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2tleS10by1sYWJlbC5waXBlJztcbmltcG9ydCB7IEVsbGlwc2lzUGlwZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbGxpcHNpcy5waXBlJztcbmltcG9ydCB7IERlZmF1bHRQaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2RlZmF1bHQucGlwZSc7XG5pbXBvcnQgeyBDb21wb3VuZFBpcGUgfSBmcm9tICcuLi8uLi9jb21tb24vY29tcG91bmQucGlwZSc7XG5pbXBvcnQgeyBOb2RlVmFsdWVEZXRhaWxzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLXZhbHVlLWRldGFpbHMvbm9kZS12YWx1ZS1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlQ3N2RXhwb3J0Q29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0vbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVMb2dzTW9kZWxzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50JztcbmltcG9ydCB7IEN5Y2xlc05vZGVzVGltZWxpbmVDb21wb25lbnQgfSBmcm9tICcuLi9jeWNsZXMtbm9kZXMtdGltZWxpbmUvY3ljbGVzLW5vZGVzLXRpbWVsaW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEN5Y2xlc0VtaXNzaW9uc0NoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vY3ljbGVzLWVtaXNzaW9ucy1jaGFydC9jeWNsZXMtZW1pc3Npb25zLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDeWNsZXNSZXN1bHRDb21wb25lbnQgfSBmcm9tICcuLi9jeWNsZXMtcmVzdWx0L2N5Y2xlcy1yZXN1bHQuY29tcG9uZW50JztcbmltcG9ydCB7IEJsYW5rTm9kZVN0YXRlTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2JsYW5rLW5vZGUtc3RhdGUtbm90aWNlL2JsYW5rLW5vZGUtc3RhdGUtbm90aWNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbGFua05vZGVTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9ibGFuay1ub2RlLXN0YXRlL2JsYW5rLW5vZGUtc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEN5Y2xlc0Z1bmN0aW9uYWxVbml0TWVhc3VyZUNvbXBvbmVudCB9IGZyb20gJy4uL2N5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZS9jeWNsZXMtZnVuY3Rpb25hbC11bml0LW1lYXN1cmUuY29tcG9uZW50JztcbmltcG9ydCB7IFRlcm1zVW5pdHNEZXNjcmlwdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Rlcm1zL3Rlcm1zLXVuaXRzLWRlc2NyaXB0aW9uL3Rlcm1zLXVuaXRzLWRlc2NyaXB0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlTGlua0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1saW5rL25vZGUtbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoRXh0ZW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlYXJjaC1leHRlbmQvc2VhcmNoLWV4dGVuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmFDYWxjdWxhdG9yLCBmYUNoYXJ0QmFyLCBmYURvd25sb2FkLCBmYUxpc3QsIGZhTGlzdEFsdCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ1RhYmxlIHZpZXcnLFxuICBjaGFydCA9ICdDaGFydCB2aWV3JyxcbiAgdGltZWxpbmUgPSAnT3BlcmF0aW9ucyBUaW1lbGluZScsXG4gIGxvZ3MgPSAnUmVjYWxjdWxhdGlvbnMgbG9ncydcbn1cblxuY29uc3QgdGltZWxpbmVUZXJtVHlwZSA9IFtUZXJtVGVybVR5cGUub3BlcmF0aW9uXTtcblxuaW50ZXJmYWNlIElDeWNsZUNvbmZpZyB7XG4gIG5vZGVLZXk6IEJsYW5rTm9kZXNLZXk7XG59XG5cbmludGVyZmFjZSBJQ3ljbGVDb25maWdBbmltYWwgZXh0ZW5kcyBJQ3ljbGVDb25maWcge1xuICBub2RlS2V5OiBCbGFua05vZGVzS2V5LmFuaW1hbHM7XG59XG5cbmludGVyZmFjZSBJQ3ljbGVDb25maWdFbWlzc2lvbiBleHRlbmRzIElDeWNsZUNvbmZpZyB7XG4gIG5vZGVLZXk6IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zO1xufVxuXG5pbnRlcmZhY2UgSUN5Y2xlQ29uZmlnSW5wdXQgZXh0ZW5kcyBJQ3ljbGVDb25maWcge1xuICBub2RlS2V5OiBCbGFua05vZGVzS2V5LmlucHV0cztcbn1cblxuaW50ZXJmYWNlIElDeWNsZUNvbmZpZ1ByYWN0aWNlIGV4dGVuZHMgSUN5Y2xlQ29uZmlnIHtcbiAgbm9kZUtleTogQmxhbmtOb2Rlc0tleS5wcmFjdGljZXM7XG59XG5cbmNvbnN0IHZpZXdJY29uOiB7XG4gIFt2aWV3IGluIFZpZXddOiBJY29uRGVmaW5pdGlvbjtcbn0gPSB7XG4gIFtWaWV3LmNoYXJ0XTogZmFDaGFydEJhcixcbiAgW1ZpZXcubG9nc106IGZhQ2FsY3VsYXRvcixcbiAgW1ZpZXcudGFibGVdOiBmYUxpc3QsXG4gIFtWaWV3LnRpbWVsaW5lXTogZmFMaXN0QWx0XG59O1xuXG5jb25zdCBub2RlS2V5Vmlld3M6IHtcbiAgW3R5cGUgaW4gQmxhbmtOb2Rlc0tleV0/OiBWaWV3W107XG59ID0ge1xuICBbQmxhbmtOb2Rlc0tleS5hbmltYWxzXTogW1ZpZXcudGFibGVdLFxuICBbQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnNdOiBbVmlldy50YWJsZSwgVmlldy5jaGFydCwgVmlldy5sb2dzXSxcbiAgW0JsYW5rTm9kZXNLZXkuaW5wdXRzXTogW1ZpZXcudGFibGUsIFZpZXcuY2hhcnQsIFZpZXcubG9nc10sXG4gIFtCbGFua05vZGVzS2V5LnByb2R1Y3RzXTogW1ZpZXcudGFibGUsIFZpZXcuY2hhcnQsIFZpZXcubG9nc10sXG4gIFtCbGFua05vZGVzS2V5LnByYWN0aWNlc106IFtWaWV3LnRhYmxlLCBWaWV3LnRpbWVsaW5lLCBWaWV3LmxvZ3NdXG59O1xuXG5jb25zdCBub2RlS2V5RmlsdGVyVGVybVR5cGVzOiB7XG4gIFt0eXBlIGluIEJsYW5rTm9kZXNLZXldPzogVGVybVRlcm1UeXBlW107XG59ID0ge1xuICBbQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnNdOiBbVGVybVRlcm1UeXBlLmVtaXNzaW9uXVxufTtcblxuY29uc3QgZmlsdGVyVmFsdWVzVGltZWxpbmUgPSAodmFsdWVzOiBibGFua05vZGVzVHlwZVtdKSA9PlxuICB2YWx1ZXMuZmlsdGVyKHAgPT4gdGltZWxpbmVUZXJtVHlwZS5pbmNsdWRlcyhwLnRlcm0/LnRlcm1UeXBlKSk7XG5cbnR5cGUgZ3JvdXBlZEVtaXNzaW9ucyA9IHtcbiAgW21ldGhvZFRpZXIgaW4gRW1pc3Npb25NZXRob2RUaWVyXTogSUdyb3VwZWRLZXlzPEVtaXNzaW9uPltdO1xufTtcblxuZXhwb3J0IGVudW0gQ3ljbGVOb2Rlc0tleUdyb3VwIHtcbiAgYW5pbWFscyA9ICdhbmltYWxzJyxcbiAgdHJhbnNmb3JtYXRpb25zID0gJ3RyYW5zZm9ybWF0aW9ucydcbn1cblxudHlwZSBncm91cGVkTm9kZSA9IEFuaW1hbCB8IFRyYW5zZm9ybWF0aW9uO1xuXG5jb25zdCBjeWNsZUdyb3VwTm9kZSA9XG4gIChjeWNsZT86IElDeWNsZUpTT05MRCkgPT5cbiAgKG5vZGU/OiBncm91cGVkTm9kZSk6IGdyb3VwZWROb2RlICYgeyBuYW1lOiBzdHJpbmc7ICdAaWQnOiBzdHJpbmcgfSA9PiAoe1xuICAgIC4uLm5vZGUsXG4gICAgbmFtZTogY3ljbGU/Lm5hbWUsXG4gICAgJ0BpZCc6IGN5Y2xlPy5bJ0BpZCddIC8vIHNldCBAaWQgc28gd2UgY2FuIGZldGNoIHRoZSBsb2dzIGZyb20gdGhlIEN5Y2xlXG4gIH0pO1xuXG5jb25zdCBjeWNsZUdyb3VwTm9kZXMgPSAoZ3JvdXBLZXk6IEN5Y2xlTm9kZXNLZXlHcm91cCwgY3ljbGU/OiBJQ3ljbGVKU09OTEQpOiBncm91cGVkTm9kZVtdID0+XG4gIChjeWNsZT8uW2dyb3VwS2V5XSB8fCBbXSkubWFwKGN5Y2xlR3JvdXBOb2RlKGN5Y2xlKSk7XG5cbmNvbnN0IGZpbHRlckdyb3VwTm9kZXNCeVRlcm0gPSAoZ3JvdXBLZXk6IEN5Y2xlTm9kZXNLZXlHcm91cCwgY3ljbGVzOiBJQ3ljbGVKU09OTERbXSwgdGVybT86IFRlcm0pOiBncm91cGVkTm9kZVtdID0+XG4gIGN5Y2xlcy5tYXAoY3ljbGUgPT5cbiAgICBjeWNsZUdyb3VwTm9kZShjeWNsZSkoXG4gICAgICAoKGN5Y2xlPy5bZ3JvdXBLZXldIGFzIGdyb3VwZWROb2RlW10pIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZmluZChub2RlID0+IG5vZGUudGVybT8ubmFtZSA9PT0gdGVybT8ubmFtZSlcbiAgICApXG4gICk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWN5Y2xlcy1ub2RlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jeWNsZXMtbm9kZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtbm9kZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ2JUb29sdGlwLFxuICAgIEZhSWNvbkNvbXBvbmVudCxcbiAgICBTZWFyY2hFeHRlbmRDb21wb25lbnQsXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICAgIE5vZGVMaW5rQ29tcG9uZW50LFxuICAgIFRlcm1zVW5pdHNEZXNjcmlwdGlvbkNvbXBvbmVudCxcbiAgICBDeWNsZXNGdW5jdGlvbmFsVW5pdE1lYXN1cmVDb21wb25lbnQsXG4gICAgTmdiUG9wb3ZlcixcbiAgICBCbGFua05vZGVTdGF0ZUNvbXBvbmVudCxcbiAgICBCbGFua05vZGVTdGF0ZU5vdGljZUNvbXBvbmVudCxcbiAgICBDeWNsZXNSZXN1bHRDb21wb25lbnQsXG4gICAgQ3ljbGVzRW1pc3Npb25zQ2hhcnRDb21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBDeWNsZXNOb2Rlc1RpbWVsaW5lQ29tcG9uZW50LFxuICAgIE5vZGVMb2dzTW9kZWxzQ29tcG9uZW50LFxuICAgIE5vZGVDc3ZFeHBvcnRDb25maXJtQ29tcG9uZW50LFxuICAgIE5vZGVWYWx1ZURldGFpbHNDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29tcG91bmRQaXBlLFxuICAgIERlZmF1bHRQaXBlLFxuICAgIEVsbGlwc2lzUGlwZSxcbiAgICBLZXlUb0xhYmVsUGlwZSxcbiAgICBQcmVjaXNpb25QaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ3ljbGVzTm9kZXNDb21wb25lbnQge1xuICBwcml2YXRlIG5vZGVTdG9yZVNlcnZpY2UgPSBpbmplY3QoSGVOb2RlU3RvcmVTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFEb3dubG9hZCA9IGZhRG93bmxvYWQ7XG5cbiAgcHJvdGVjdGVkIGRhdGFTdGF0ZSA9IGlucHV0KERhdGFTdGF0ZS5vcmlnaW5hbCk7XG4gIHByb3RlY3RlZCBub2RlS2V5cyA9IGlucHV0LnJlcXVpcmVkPEJsYW5rTm9kZXNLZXlbXT4oKTtcbiAgcHJvdGVjdGVkIG5vZGVLZXlHcm91cCA9IGlucHV0PEN5Y2xlTm9kZXNLZXlHcm91cD4oKTtcblxuICBwcm90ZWN0ZWQgQmxhbmtOb2Rlc0tleSA9IEJsYW5rTm9kZXNLZXk7XG4gIHByb3RlY3RlZCBmaXJzdE5vZGVLZXkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVLZXlzKCk/LlswXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZE5vZGVLZXkgPSBzaWduYWwodW5kZWZpbmVkIGFzIEJsYW5rTm9kZXNLZXkpO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZEdyb3VwVGVybSA9IHNpZ25hbCh1bmRlZmluZWQgYXMgVGVybSk7XG5cbiAgcHJvdGVjdGVkIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHJvdGVjdGVkIGRlZmF1bHRMYWJlbCA9IGRlZmF1bHRMYWJlbDtcbiAgcHJvdGVjdGVkIHNob3dEb3dubG9hZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBoZWFkZXJLZXlzID0gY29tcHV0ZWQoKCkgPT4gW1xuICAgICdjeWNsZS5pZCcsXG4gICAgJ2N5Y2xlLkBpZCcsXG4gICAgJ3RyYW5zZm9ybWF0aW9uLmlkJyxcbiAgICAndHJhbnNmb3JtYXRpb24uQGlkJyxcbiAgICAuLi50aGlzLm5vZGVLZXlzKCkuZmxhdE1hcChrZXkgPT4gW2BjeWNsZS4ke2tleX0uYCwgYHRyYW5zZm9ybWF0aW9uLiR7a2V5fS5gXSlcbiAgXSk7XG5cbiAgcHJvdGVjdGVkIFZpZXcgPSBWaWV3O1xuICBwcm90ZWN0ZWQgdmlld0ljb24gPSB2aWV3SWNvbjtcbiAgcHJpdmF0ZSBzaG93VmlldyA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBbVmlldy5jaGFydF06IHRoaXMuc2VsZWN0ZWROb2RlS2V5KCkgPT09IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zID8gdGhpcy5jeWNsZXMoKS5sZW5ndGggPiAxIDogdGhpcy5oYXNEYXRhKCksXG4gICAgICAgIFtWaWV3LmxvZ3NdOiAhdGhpcy5pc09yaWdpbmFsKCksXG4gICAgICAgIFtWaWV3LnRhYmxlXTogdHJ1ZSxcbiAgICAgICAgW1ZpZXcudGltZWxpbmVdOiB0aGlzLmVuYWJsZVRpbWVsaW5lKClcbiAgICAgIH0pIGFzIHsgW3ZpZXcgaW4gVmlld106IGJvb2xlYW4gfVxuICApO1xuICBwcm90ZWN0ZWQgdmlld3MgPSBjb21wdXRlZCgoKSA9PiBub2RlS2V5Vmlld3NbdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0/LmZpbHRlcih2aWV3ID0+IHRoaXMuc2hvd1ZpZXcoKVt2aWV3XSkgPz8gW10pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRWaWV3ID0gc2lnbmFsKFZpZXcudGFibGUpO1xuXG4gIHByaXZhdGUgX2FsbE5vZGVzID0gdG9TaWduYWwodGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmQkPElDeWNsZUpTT05MRD4oTm9kZVR5cGUuQ3ljbGUpKTtcbiAgcHJpdmF0ZSBvcmlnaW5hbE5vZGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYWxsTm9kZXMoKT8ubWFwKGRhdGEgPT4gZGF0YVtEYXRhU3RhdGUub3JpZ2luYWxdKSB8fCBbXSk7XG4gIHByaXZhdGUgY3VycmVudE5vZGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fYWxsTm9kZXMoKT8ubWFwKGRhdGEgPT4gZGF0YVt0aGlzLmRhdGFTdGF0ZSgpXSkgfHwgW10pO1xuXG4gIC8vIGNhbiBiZSBDeWNsZSBvciBUcmFuc2Zvcm1hdGlvblxuICBwcm90ZWN0ZWQgb3JpZ2luYWxDeWNsZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMubm9kZUtleUdyb3VwKClcbiAgICAgID8gZmlsdGVyR3JvdXBOb2Rlc0J5VGVybSh0aGlzLm5vZGVLZXlHcm91cCgpLCB0aGlzLm9yaWdpbmFsTm9kZXMoKSwgdGhpcy5zZWxlY3RlZEdyb3VwVGVybSgpKVxuICAgICAgOiB0aGlzLm9yaWdpbmFsTm9kZXMoKVxuICApO1xuICBwcm90ZWN0ZWQgY3ljbGVzID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLm5vZGVLZXlHcm91cCgpXG4gICAgICA/IGZpbHRlckdyb3VwTm9kZXNCeVRlcm0odGhpcy5ub2RlS2V5R3JvdXAoKSwgdGhpcy5jdXJyZW50Tm9kZXMoKSwgdGhpcy5zZWxlY3RlZEdyb3VwVGVybSgpKVxuICAgICAgOiB0aGlzLmN1cnJlbnROb2RlcygpXG4gICk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIG9naXJpbmFsU2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3JpZ2luYWxDeWNsZXMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRDeWNsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3ljbGVzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRMb2dzS2V5ID0gY29tcHV0ZWQoKCkgPT4gbG9nc0tleSh0aGlzLnNlbGVjdGVkQ3ljbGUoKSkpO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRPcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub2dpcmluYWxTZWxlY3RlZEN5Y2xlKCk/Llt0aGlzLnNlbGVjdGVkTm9kZUtleSgpXSB8fCBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRDeWNsZSgpPy5bdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0gfHwgW10pO1xuICAvLyBUT0RPOiBoYW5kbGUgdHJhbnNmb3JtYXRpb24gYW5kIG5vbi1pbmRleGVkIG5vZGVzIG9uIENFXG4gIHByb3RlY3RlZCBzZWxlY3RlZE5vZGUgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuc2VsZWN0ZWRDeWNsZSgpXG4gICAgICA/IHtcbiAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ3ljbGUoKSxcbiAgICAgICAgICAnQHR5cGUnOiBOb2RlVHlwZS5DeWNsZSxcbiAgICAgICAgICB0eXBlOiBOb2RlVHlwZS5DeWNsZSxcbiAgICAgICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICAgICAgfVxuICAgICAgOiBudWxsXG4gICk7XG5cbiAgcHJpdmF0ZSBpc09yaWdpbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kYXRhU3RhdGUoKSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgcHJpdmF0ZSBvcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzT3JpZ2luYWwoKSA/IG51bGwgOiB0aGlzLm9yaWdpbmFsQ3ljbGVzKCkpIHx8IFtdKTtcblxuICBwcml2YXRlIGhhc1JlY2FsY3VsYXRlZE5vZGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jeWNsZXMoKS5zb21lKGN5Y2xlID0+ICFjeWNsZS5hZ2dyZWdhdGVkKSk7XG4gIHByb3RlY3RlZCBzaG93U3dpdGNoVG9SZWNhbGN1bGF0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzT3JpZ2luYWwoKSAmJiB0aGlzLmhhc1JlY2FsY3VsYXRlZE5vZGVzKCkpO1xuXG4gIHByb3RlY3RlZCB0aW1lbGluZVZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IGZpbHRlclZhbHVlc1RpbWVsaW5lKHRoaXMuc2VsZWN0ZWRDeWNsZSgpPy5bdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0gfHwgW10pKTtcbiAgcHJpdmF0ZSBlbmFibGVUaW1lbGluZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudGltZWxpbmVWYWx1ZXMoKS5sZW5ndGggPiAwKTtcblxuICBwcm90ZWN0ZWQgaXNOb2RlS2V5QWxsb3dlZCA9IGNvbXB1dGVkKCgpID0+IG5vZGVLZXlWaWV3c1t0aGlzLmZpcnN0Tm9kZUtleSgpXS5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVmlldygpKSk7XG5cbiAgcHJpdmF0ZSBncm91cGVkTm9kZXMgPSBjb21wdXRlZCgoKSA9PiBjeWNsZUdyb3VwTm9kZXModGhpcy5ub2RlS2V5R3JvdXAoKSwgdGhpcy5vcmlnaW5hbE5vZGVzKCk/LlswXSkpO1xuICBwcm90ZWN0ZWQgZ3JvdXBOb2RlVGVybXMgPSBjb21wdXRlZCgoKSA9PiB1bmlxdWUodGhpcy5ncm91cGVkTm9kZXMoKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKSkpO1xuICBwcm90ZWN0ZWQgaXNHcm91cE5vZGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5vZGVLZXlHcm91cCgpICYmIHRoaXMuZ3JvdXBlZE5vZGVzKCk/Lmxlbmd0aCA+IDApO1xuXG4gIHByb3RlY3RlZCBpc0VtaXNzaW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZE5vZGVLZXkoKSA9PT0gQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnMpO1xuXG4gIHByb3RlY3RlZCBkYXRhID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmlzRW1pc3Npb24oKVxuICAgICAgPyB0aGlzLmdyb3VwRW1pc3Npb25zKClcbiAgICAgIDogT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMubm9kZUtleXMoKS5tYXAobm9kZUtleSA9PiBbbm9kZUtleSwgdGhpcy5ncm91cE5vZGVzQnlLZXkoeyBub2RlS2V5IH0pXSkpXG4gICk7XG4gIHByb3RlY3RlZCBkYXRhS2V5cyA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC5rZXlzKHRoaXMuZGF0YSgpKSk7XG5cbiAgcHJvdGVjdGVkIGhhc0RhdGEgPSBjb21wdXRlZCgoKSA9PiBPYmplY3QudmFsdWVzKHRoaXMuZGF0YSgpKS5mbGF0KCkubGVuZ3RoID4gMCk7XG5cbiAgcHJvdGVjdGVkIGZpbHRlclRlcm1UeXBlcyA9IGNvbXB1dGVkKCgpID0+IG5vZGVLZXlGaWx0ZXJUZXJtVHlwZXNbdGhpcy5zZWxlY3RlZE5vZGVLZXkoKV0pO1xuICBwcm90ZWN0ZWQgZmlsdGVyVGVybSA9IHNpZ25hbCgnJyk7XG5cbiAgcHJvdGVjdGVkIGNzdkZpbGVuYW1lID0gY29tcHV0ZWQoKCkgPT4gYCR7dGhpcy5ub2RlS2V5cygpLmpvaW4oJy0nKX0uY3N2YCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICAvLyBtYWtlIHN1cmUgbG9ncyBkb2VzIG5vdCByZW1haW4gZGlzcGxheWVkXG4gICAgICAgIGlmICgodGhpcy5pc09yaWdpbmFsKCkgJiYgdGhpcy5zZWxlY3RlZFZpZXcoKSA9PT0gVmlldy5sb2dzKSB8fCAhdGhpcy52aWV3cygpLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRWaWV3KCkpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcuc2V0KFZpZXcudGFibGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZUtleSgpIHx8ICF0aGlzLm5vZGVLZXlzKCkuaW5jbHVkZXModGhpcy5zZWxlY3RlZE5vZGVLZXkoKSkpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZUtleS5zZXQodGhpcy5maXJzdE5vZGVLZXkoKSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcuc2V0KFZpZXcudGFibGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXBUZXJtKCkgfHwgIXRoaXMuZ3JvdXBOb2RlVGVybXMoKS5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkR3JvdXBUZXJtKCkpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwVGVybS5zZXQodGhpcy5ncm91cE5vZGVUZXJtcygpWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdyb3VwTm9kZXNCeUtleTxcbiAgICBUIGV4dGVuZHMgSUN5Y2xlQ29uZmlnLFxuICAgIFIgPSBUIGV4dGVuZHMgSUN5Y2xlQ29uZmlnQW5pbWFsXG4gICAgICA/IEFuaW1hbFxuICAgICAgOiBUIGV4dGVuZHMgSUN5Y2xlQ29uZmlnRW1pc3Npb25cbiAgICAgICAgPyBFbWlzc2lvblxuICAgICAgICA6IFQgZXh0ZW5kcyBJQ3ljbGVDb25maWdJbnB1dFxuICAgICAgICAgID8gSGVzdGlhSW5wdXRcbiAgICAgICAgICA6IFQgZXh0ZW5kcyBJQ3ljbGVDb25maWdQcmFjdGljZVxuICAgICAgICAgICAgPyBQcmFjdGljZVxuICAgICAgICAgICAgOiBQcm9kdWN0XG4gID4oeyBub2RlS2V5IH06IFQpOiBJR3JvdXBlZEtleXM8Uj5bXSB7XG4gICAgY29uc3Qgbm9kZXNQZXJDeWNsZSA9IGdyb3VwTm9kZXNCeVRlcm08SUN5Y2xlSlNPTkxEIHwgZ3JvdXBlZE5vZGUsIFI+KFxuICAgICAgdGhpcy5jeWNsZXMoKSxcbiAgICAgIG5vZGVLZXksXG4gICAgICB0aGlzLm9yaWdpbmFsVmFsdWVzKCksXG4gICAgICBmaWx0ZXJCbGFua05vZGUodGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICByZXR1cm4gb3JkZXJCeShncm91cHBlZEtleXMobm9kZXNQZXJDeWNsZSksIFsna2V5J10sIFsnYXNjJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEVtaXNzaW9ucygpIHtcbiAgICBjb25zdCBlbWlzc2lvbnNQZXJDeWNsZSA9IGdyb3VwTm9kZXNCeVRlcm08SUN5Y2xlSlNPTkxEIHwgZ3JvdXBlZE5vZGUsIEVtaXNzaW9uPihcbiAgICAgIHRoaXMuY3ljbGVzKCksXG4gICAgICBCbGFua05vZGVzS2V5LmVtaXNzaW9ucyxcbiAgICAgIHRoaXMub3JpZ2luYWxWYWx1ZXMoKSxcbiAgICAgIGZpbHRlckJsYW5rTm9kZSh0aGlzLmZpbHRlclRlcm0oKSlcbiAgICApO1xuICAgIGNvbnN0IHZhbHVlczogSUdyb3VwZWRLZXlzPEVtaXNzaW9uPltdID0gb3JkZXJCeShncm91cHBlZEtleXMoZW1pc3Npb25zUGVyQ3ljbGUpLCBbJ2tleSddLCBbJ2FzYyddKTtcbiAgICBjb25zdCBtZXRob2RUaWVycyA9IG9yZGVyQnkoXG4gICAgICB1bmlxdWUodmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZS5tZXRob2RUaWVyKSkubWFwKG1ldGhvZFRpZXIgPT4gKHtcbiAgICAgICAgbWV0aG9kVGllcixcbiAgICAgICAgbWV0aG9kVGllck9yZGVyOiBtZXRob2RUaWVyT3JkZXIobWV0aG9kVGllcilcbiAgICAgIH0pKSxcbiAgICAgIFsnbWV0aG9kVGllck9yZGVyJ10sXG4gICAgICBbJ2FzYyddXG4gICAgKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgbWV0aG9kVGllcnMubWFwKCh7IG1ldGhvZFRpZXIgfSkgPT4gW21ldGhvZFRpZXIsIHZhbHVlcy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUubWV0aG9kVGllciA9PT0gbWV0aG9kVGllcildKVxuICAgICkgYXMgZ3JvdXBlZEVtaXNzaW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0J5SWQoX2luZGV4OiBudW1iZXIsIGl0ZW06IElDeWNsZUpTT05MRCB8IGdyb3VwZWROb2RlKSB7XG4gICAgcmV0dXJuIGl0ZW1bJ0BpZCddO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVBvcG92ZXIocG9wb3ZlcjogYW55LCBjb250ZXh0OiBhbnkpIHtcbiAgICByZXR1cm4gcG9wb3Zlci5pc09wZW4oKSA/IHBvcG92ZXIuY2xvc2UoKSA6IHBvcG92ZXIub3Blbihjb250ZXh0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaWx0ZXJCeVRlcm0odGVybTogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJUZXJtLnNldCh0ZXJtKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RJbmRleCh7IHRhcmdldDogeyB2YWx1ZSB9IH0pIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KCt2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3ljbGVOb2RlKGN5Y2xlOiBJQ3ljbGVKU09OTEQgfCBncm91cGVkTm9kZSkge1xuICAgIHJldHVybiAndGVybScgaW4gY3ljbGUgPyBjeWNsZS50ZXJtIDogY3ljbGU7XG4gIH1cbn1cbiIsIkBpZiAoaXNHcm91cE5vZGUoKSkge1xuICA8ZGl2IGNsYXNzPVwidGFicyBpcy1tYi0xXCI+XG4gICAgPHVsPlxuICAgICAgQGZvciAodGVybSBvZiBncm91cE5vZGVUZXJtcygpOyB0cmFjayB0ZXJtKSB7XG4gICAgICAgIDxsaSBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkR3JvdXBUZXJtKCkgPT09IHRlcm1cIj5cbiAgICAgICAgICA8YSAoY2xpY2spPVwic2VsZWN0ZWRHcm91cFRlcm0uc2V0KHRlcm0pXCI+e3sgdGVybS5uYW1lIH19PC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgfVxuICAgIDwvdWw+XG4gIDwvZGl2PlxufVxuXG48ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtMiBpcy1tLTBcIj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgIEBpZiAoaGFzRGF0YSgpICYmIHNlbGVjdGVkVmlldygpID09PSBWaWV3LnRhYmxlKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsIGlzLWdob3N0XCJcbiAgICAgICAgKGNsaWNrKT1cInNob3dEb3dubG9hZCA9IHRydWVcIlxuICAgICAgICBuZ2JUb29sdGlwPVwiRG93bmxvYWQgYXMgQ1NWXCJcbiAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cInNob3dEb3dubG9hZFwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiPlxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYURvd25sb2FkXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmIChoYXNEYXRhKCkgJiYgc2VsZWN0ZWRWaWV3KCkgPT09IFZpZXcudGFibGUpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgPGhlLXNlYXJjaC1leHRlbmRcbiAgICAgICAgY2xhc3M9XCJpcy1zZWNvbmRhcnkgaXMtc21hbGxcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciB0ZXJtcyBieSBuYW1lXCJcbiAgICAgICAgKHNlYXJjaCk9XCJmaWx0ZXJCeVRlcm0oJGV2ZW50KVwiPjwvaGUtc2VhcmNoLWV4dGVuZD5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKHZpZXdzKCk/Lmxlbmd0aCA+IDEpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgICAgQGZvciAodmlldyBvZiB2aWV3cygpOyB0cmFjayB2aWV3KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRWaWV3KCkgPT09IHZpZXdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRWaWV3LnNldCh2aWV3KVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJ2aWV3SWNvblt2aWV3XVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi1tb2JpbGVcIj57eyB2aWV3IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuQGlmIChpc05vZGVLZXlBbGxvd2VkKCkpIHtcbiAgQHN3aXRjaCAoc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICBAY2FzZSAoVmlldy50YWJsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cImlzLXB4LTMgaXMtcGItM1wiPlxuICAgICAgICBAaWYgKGhhc0RhdGEoKSkge1xuICAgICAgICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIEBpZiAoZGF0YUtleXMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIFtjbGFzcy5pcy1oaWRkZW5dPVwiaXNHcm91cE5vZGUoKVwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGRhdGFLZXkgb2YgZGF0YUtleXMoKTsgdHJhY2sgZGF0YUtleTsgbGV0IGRhdGFLZXlMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGRhdGEoKVtkYXRhS2V5XT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggW2F0dHIuY29sc3Bhbl09XCJkYXRhKClbZGF0YUtleV0ubGVuZ3RoXCIgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiIWRhdGFLZXlMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRhdGFLZXkgfCBrZXlUb0xhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImhhcy10ZXh0LXdlaWdodC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cImlzR3JvdXBOb2RlKClcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgQGZvciAoZGF0YUtleSBvZiBkYXRhS2V5cygpOyB0cmFjayBkYXRhS2V5OyBsZXQgZGF0YUtleUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChub2RlIG9mIGRhdGEoKVtkYXRhS2V5XTsgdHJhY2sgbm9kZTsgbGV0IG5vZGVMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm5vZGUudmFsdWUudGVybS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5oYXMtYm9yZGVyLXJpZ2h0XT1cImRhdGFLZXlzKCkubGVuZ3RoID4gMSAmJiAhZGF0YUtleUxhc3QgJiYgbm9kZUxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwibm9kZS52YWx1ZS50ZXJtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwibm9kZS52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczogMzAgfCBjb21wb3VuZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImlzLWl0YWxpYyBoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJpc0dyb3VwTm9kZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS9DeWNsZSNmdW5jdGlvbmFsVW5pdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5GdW5jdGlvbmFsIHVuaXQ8L2E+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgQGZvciAoZGF0YUtleSBvZiBkYXRhS2V5cygpOyB0cmFjayBkYXRhS2V5OyBsZXQgZGF0YUtleUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChub2RlIG9mIGRhdGEoKVtkYXRhS2V5XTsgdHJhY2sgbm9kZTsgbGV0IG5vZGVMYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIm5vZGUudmFsdWUudGVybS51bml0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLWJvcmRlci1yaWdodF09XCJkYXRhS2V5cygpLmxlbmd0aCA+IDEgJiYgIWRhdGFLZXlMYXN0ICYmIG5vZGVMYXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cIm5vZGUudmFsdWUudGVybS51bml0cyB8IGNvbXBvdW5kXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLW1sLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVybV09XCJub2RlLnZhbHVlLnRlcm1cIj48L2hlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAoY3ljbGUgb2YgY3ljbGVzKCk7IHRyYWNrIHRyYWNrQnlJZChjeWNsZUluZGV4LCBjeWNsZSk7IGxldCBjeWNsZUluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImRlZmF1bHRMYWJlbChjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImN5Y2xlTm9kZShjeWNsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGN5Y2xlSW5kZXggKyAxIH19LiB7eyBkZWZhdWx0TGFiZWwoY3ljbGUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJpc0dyb3VwTm9kZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGhlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZSBbY3ljbGVdPVwiY3ljbGVcIj48L2hlLWN5Y2xlcy1mdW5jdGlvbmFsLXVuaXQtbWVhc3VyZT5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZGF0YUtleSBvZiBkYXRhS2V5cygpOyB0cmFjayBkYXRhS2V5OyBsZXQgZGF0YUtleUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG5vZGUgb2YgZGF0YSgpW2RhdGFLZXldOyB0cmFjayBub2RlOyBsZXQgbm9kZUxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy1ib3JkZXItcmlnaHRdPVwiZGF0YUtleXMoKS5sZW5ndGggPiAxICYmICFkYXRhS2V5TGFzdCAmJiBub2RlTGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUudmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLXBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiZGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJpcy1uYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3A9XCJuZ2JQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZVBvcG92ZXIocCwgeyBkYXRhOiBub2RlLnZhbHVlLnZhbHVlc1tjeWNsZVsnQGlkJ11dLCBjeWNsZTogY3ljbGUsIGtleTogZGF0YUtleSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBwb2ludGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUobm9kZS52YWx1ZS52YWx1ZXNbY3ljbGVbJ0BpZCddXS52YWx1ZSwgbm9kZS52YWx1ZS50ZXJtWydAaWQnXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHJlY2lzaW9uOiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRlZmF1bHQ6ICctJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlXT1cIm5vZGUudmFsdWUudmFsdWVzW2N5Y2xlWydAaWQnXV0ubm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1cInZhbHVlXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+LTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2hlLWRhdGEtdGFibGU+XG4gICAgICAgICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlKClcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXMtcHQtMyBoYXMtdGV4dC1jZW50ZXJlZFwiPlxuICAgICAgICAgICAgPHNwYW4+Tm8gZGF0YSBhdmFpbGFibGU8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLXBsLTFcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFmaWx0ZXJUZXJtKClcIj5tYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPi48L3NwYW4+XG4gICAgICAgICAgICBAaWYgKHNob3dTd2l0Y2hUb1JlY2FsY3VsYXRlZCgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIFN3aXRjaCB0b1xuICAgICAgICAgICAgICAgIDxjb2RlPnJlY2FsY3VsYXRlZDwvY29kZT5cbiAgICAgICAgICAgICAgICB2ZXJzaW9uLlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAY2FzZSAoVmlldy5jaGFydCkge1xuICAgICAgQHN3aXRjaCAoZmlyc3ROb2RlS2V5KCkpIHtcbiAgICAgICAgQGNhc2UgKEJsYW5rTm9kZXNLZXkuaW5wdXRzKSB7XG4gICAgICAgICAgPGhlLWN5Y2xlcy1yZXN1bHQgW2N5Y2xlc109XCJjeWNsZXMoKVwiPjwvaGUtY3ljbGVzLXJlc3VsdD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoQmxhbmtOb2Rlc0tleS5lbWlzc2lvbnMpIHtcbiAgICAgICAgICA8aGUtY3ljbGVzLWVtaXNzaW9ucy1jaGFydCBbY3ljbGVzXT1cImN5Y2xlcygpXCI+PC9oZS1jeWNsZXMtZW1pc3Npb25zLWNoYXJ0PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIEBjYXNlIChWaWV3LnRpbWVsaW5lKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0Q3ljbGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpcy1weC0zIGlzLXBiLTNcIj5cbiAgICAgICAgPGhlLWN5Y2xlcy1ub2Rlcy10aW1lbGluZVxuICAgICAgICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwidGltZWxpbmVWYWx1ZXMoKVwiXG4gICAgICAgICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiPjwvaGUtY3ljbGVzLW5vZGVzLXRpbWVsaW5lPlxuICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2U+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGNhc2UgKFZpZXcubG9ncykge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdEN5Y2xlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICBAaWYgKG5vZGVLZXlzKCkubGVuZ3RoID4gMSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGFicyBpcy1tYi0yXCI+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgQGZvciAobm9kZUtleSBvZiBub2RlS2V5cygpOyB0cmFjayBub2RlS2V5KSB7XG4gICAgICAgICAgICAgIDxsaSBbY2xhc3MuaXMtYWN0aXZlXT1cInNlbGVjdGVkTm9kZUtleSgpID09PSBub2RlS2V5XCI+XG4gICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInNlbGVjdGVkTm9kZUtleS5zZXQobm9kZUtleSlcIj57eyBub2RlS2V5IHwga2V5VG9MYWJlbCB9fTwvYT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoc2VsZWN0ZWROb2RlKCkpIHtcbiAgICAgICAgPGhlLW5vZGUtbG9ncy1tb2RlbHNcbiAgICAgICAgICBbbm9kZV09XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgICAgICAgW25vZGVLZXldPVwic2VsZWN0ZWROb2RlS2V5KClcIlxuICAgICAgICAgIFtsb2dzS2V5XT1cInNlbGVjdGVkTG9nc0tleSgpXCJcbiAgICAgICAgICBbb3JpZ2luYWxWYWx1ZXNdPVwic2VsZWN0ZWRPcmlnaW5hbFZhbHVlcygpXCJcbiAgICAgICAgICBbcmVjYWxjdWxhdGVkVmFsdWVzXT1cInNlbGVjdGVkUmVjYWxjdWxhdGVkVmFsdWVzKClcIlxuICAgICAgICAgIFtmaWx0ZXJUZXJtVHlwZXNdPVwiZmlsdGVyVGVybVR5cGVzKClcIj48L2hlLW5vZGUtbG9ncy1tb2RlbHM+XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBpZiAoc2hvd0Rvd25sb2FkKSB7XG4gIDxoZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybVxuICAgIFtub2Rlc109XCJjeWNsZXMoKVwiXG4gICAgW2ZpbGVuYW1lXT1cImNzdkZpbGVuYW1lKClcIlxuICAgIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gICAgW2hlYWRlcktleXNdPVwiaGVhZGVyS2V5cygpXCJcbiAgICAoY2xvc2VkKT1cInNob3dEb3dubG9hZCA9IGZhbHNlXCI+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cbn1cblxuPG5nLXRlbXBsYXRlICNkZXRhaWxzIGxldC1ub2RlPVwiY3ljbGVcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQta2V5PVwia2V5XCI+XG4gIDxwPlxuICAgIDxiPnt7IGRlZmF1bHRMYWJlbChub2RlKSB9fTwvYj5cbiAgPC9wPlxuICA8aGUtbm9kZS12YWx1ZS1kZXRhaWxzXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGUoKVwiXG4gICAgW25vZGVUeXBlXT1cIm5vZGVbJ0B0eXBlJ11cIlxuICAgIFtkYXRhS2V5XT1cImtleVwiPjwvaGUtbm9kZS12YWx1ZS1kZXRhaWxzPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWxlY3RDeWNsZT5cbiAgQGlmIChjeWNsZXMoKS5sZW5ndGggPiAxKSB7XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgaXMtcHktMiBpcy1weC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1zdGF0aWMgaXMtc2Vjb25kYXJ5XCI+U2VsZWN0IGEgQ3ljbGU8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGwgaXMtZnVsbHdpZHRoIGlzLXNlY29uZGFyeVwiPlxuICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJzZWxlY3RJbmRleCgkZXZlbnQpXCI+XG4gICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiBjeWNsZXMoKTsgdHJhY2sgdmFsdWU7IGxldCBjeWNsZUluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImN5Y2xlSW5kZXhcIj57eyBjeWNsZUluZGV4ICsgMSB9fS4ge3sgZGVmYXVsdExhYmVsKHZhbHVlKSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -6,5 +6,5 @@ export const primaryProduct = ({ products }) => (products || []).find(({ primary
6
6
  * @param node Cycle or Transformation
7
7
  * @returns
8
8
  */
9
- export const logsKey = (node) => ((node.type || node['@type']) === NodeType.Cycle ? null : node.term['@id']);
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N5Y2xlcy9jeWNsZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQVE5RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFdkg7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9kZVR5cGUsIElDeWNsZUpTT05MRCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ3ljbGVKU09OTERFeHRlbmRlZCBleHRlbmRzIElDeWNsZUpTT05MRCB7XG4gIHJlbGF0ZWQ6IHtcbiAgICBbdHlwZSBpbiBOb2RlVHlwZV0/OiBzdHJpbmdbXTtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHByaW1hcnlQcm9kdWN0ID0gKHsgcHJvZHVjdHMgfTogUGFydGlhbDxJQ3ljbGVKU09OTEQ+KSA9PiAocHJvZHVjdHMgfHwgW10pLmZpbmQoKHsgcHJpbWFyeSB9KSA9PiBwcmltYXJ5KTtcblxuLyoqXG4gKiBJZiBUcmFuc2Zvcm1hdGlvbiwgcmV0dXJuIHRoZSBUcmFuc2Zvcm1hdGlvbiBUZXJtIEBpZC5cbiAqXG4gKiBAcGFyYW0gbm9kZSBDeWNsZSBvciBUcmFuc2Zvcm1hdGlvblxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvZ3NLZXkgPSAobm9kZTogYW55KSA9PiAoKG5vZGUudHlwZSB8fCBub2RlWydAdHlwZSddKSA9PT0gTm9kZVR5cGUuQ3ljbGUgPyBudWxsIDogbm9kZS50ZXJtWydAaWQnXSk7XG4iXX0=
9
+ export const logsKey = (node) => ((node.type || node['@type']) === NodeType.Cycle ? null : node?.term?.['@id']);
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N5Y2xlcy9jeWNsZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQVE5RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFdkg7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlVHlwZSwgSUN5Y2xlSlNPTkxEIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDeWNsZUpTT05MREV4dGVuZGVkIGV4dGVuZHMgSUN5Y2xlSlNPTkxEIHtcbiAgcmVsYXRlZDoge1xuICAgIFt0eXBlIGluIE5vZGVUeXBlXT86IHN0cmluZ1tdO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgcHJpbWFyeVByb2R1Y3QgPSAoeyBwcm9kdWN0cyB9OiBQYXJ0aWFsPElDeWNsZUpTT05MRD4pID0+IChwcm9kdWN0cyB8fCBbXSkuZmluZCgoeyBwcmltYXJ5IH0pID0+IHByaW1hcnkpO1xuXG4vKipcbiAqIElmIFRyYW5zZm9ybWF0aW9uLCByZXR1cm4gdGhlIFRyYW5zZm9ybWF0aW9uIFRlcm0gQGlkLlxuICpcbiAqIEBwYXJhbSBub2RlIEN5Y2xlIG9yIFRyYW5zZm9ybWF0aW9uXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgbG9nc0tleSA9IChub2RlOiBhbnkpID0+ICgobm9kZS50eXBlIHx8IG5vZGVbJ0B0eXBlJ10pID09PSBOb2RlVHlwZS5DeWNsZSA/IG51bGwgOiBub2RlPy50ZXJtPy5bJ0BpZCddKTtcbiJdfQ==