@esfaenza/core 15.2.196 → 15.2.198

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.
@@ -1,5 +1,6 @@
1
- import { Title } from "@angular/platform-browser";
2
1
  import { ActivatedRoute, Router, UrlTree } from "@angular/router";
2
+ import { Title } from "@angular/platform-browser";
3
+ import { AppEmbeddingExtensions } from "@esfaenza/extensions";
3
4
  import { AppState } from "@esfaenza/core/services";
4
5
  import * as i0 from "@angular/core";
5
6
  export declare class Breadcrumb {
@@ -7,9 +8,11 @@ export declare class Breadcrumb {
7
8
  private router;
8
9
  private _activatedRoute;
9
10
  private _titleService;
11
+ private emb;
10
12
  MainLink: BreadcrumbItem;
11
13
  SubLinks: BreadcrumbItem[];
12
- constructor(_state: AppState, router: Router, _activatedRoute: ActivatedRoute, _titleService: Title);
14
+ constructor(_state: AppState, router: Router, _activatedRoute: ActivatedRoute, _titleService: Title, emb: AppEmbeddingExtensions);
15
+ handleNavigation(title: string, internal: boolean, tree?: UrlTree): void;
13
16
  ngOnInit(): void;
14
17
  onSubNavigation(tree: UrlTree, title: string): void;
15
18
  onMainNavigation(tree: UrlTree, title: string): void;
@@ -1,19 +1,22 @@
1
1
  // Angular
2
- import { Component, ViewEncapsulation } from "@angular/core";
3
2
  import { NavigationEnd, RouterLink } from "@angular/router";
3
+ import { Component, ViewEncapsulation } from "@angular/core";
4
4
  import { NgFor, NgIf } from "@angular/common";
5
- import { of, combineLatest } from "rxjs";
5
+ // Librerie
6
6
  import { filter, map, mergeMap } from "rxjs/operators";
7
+ import { of, combineLatest } from "rxjs";
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@esfaenza/core/services";
9
10
  import * as i2 from "@angular/router";
10
11
  import * as i3 from "@angular/platform-browser";
12
+ import * as i4 from "@esfaenza/extensions";
11
13
  export class Breadcrumb {
12
- constructor(_state, router, _activatedRoute, _titleService) {
14
+ constructor(_state, router, _activatedRoute, _titleService, emb) {
13
15
  this._state = _state;
14
16
  this.router = router;
15
17
  this._activatedRoute = _activatedRoute;
16
18
  this._titleService = _titleService;
19
+ this.emb = emb;
17
20
  this.MainLink = { title: "Dashboard", routerLink: ["/pages/dashboard"] };
18
21
  this.SubLinks = [];
19
22
  this.router.events.pipe(filter(event => event instanceof NavigationEnd), map((event) => { return { event: event, route: this._activatedRoute }; }), map((routeWithEvent) => {
@@ -27,14 +30,22 @@ export class Breadcrumb {
27
30
  // false = MAIN - ricerca/dashboard
28
31
  let internalNavigation = data["InternalNavigation"];
29
32
  let title = data["title"];
30
- if (internalNavigation) {
31
- this.onSubNavigation(tree, title);
32
- }
33
- else {
34
- this.onMainNavigation(tree, title);
35
- }
36
- this._titleService.setTitle(myconfig.AppData.ModuleDescription + " > " + title);
33
+ this.handleNavigation(title, internalNavigation, tree);
37
34
  });
35
+ this.emb.MessageObserver.pipe(filter(ev => ev.event == "navigation")).subscribe(event => {
36
+ let internalNavigation = event?.data?.internalNavigation;
37
+ let title = event?.data?.title;
38
+ this.handleNavigation(title, internalNavigation);
39
+ });
40
+ }
41
+ handleNavigation(title, internal, tree = null) {
42
+ if (internal) {
43
+ this.onSubNavigation(tree, title);
44
+ }
45
+ else {
46
+ this.onMainNavigation(tree, title);
47
+ }
48
+ this._titleService.setTitle(myconfig.AppData.ModuleDescription + (title ? (" > " + title) : ''));
38
49
  }
39
50
  ngOnInit() { }
40
51
  onSubNavigation(tree, title) {
@@ -45,11 +56,11 @@ export class Breadcrumb {
45
56
  this.SubLinks.pop();
46
57
  }
47
58
  if (index == -1 && this.MainLink.title != title)
48
- this.SubLinks.push({ title: title, routerLink: this.getRouterLink(tree) });
59
+ this.SubLinks.push({ title: title, routerLink: tree ? this.getRouterLink(tree) : null });
49
60
  }
50
61
  onMainNavigation(tree, title) {
51
62
  this.SubLinks = [];
52
- this.MainLink = { title: title, routerLink: this.getRouterLink(tree) };
63
+ this.MainLink = { title: title, routerLink: tree ? this.getRouterLink(tree) : null };
53
64
  }
54
65
  getRouterLink(tree) {
55
66
  let segs = tree?.root?.children?.["primary"]?.segments ?? [];
@@ -58,12 +69,12 @@ export class Breadcrumb {
58
69
  return [route, params];
59
70
  }
60
71
  }
61
- Breadcrumb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Breadcrumb, deps: [{ token: i1.AppState }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.Title }], target: i0.ɵɵFactoryTarget.Component });
62
- Breadcrumb.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Breadcrumb, isStandalone: true, selector: "breadcrumb", ngImport: i0, template: "<ol class=\"breadcrumb app-no-selection\">\r\n <li class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"['/pages/dashboard']\">Dashboard</li>\r\n <li *ngIf=\"MainLink?.title != 'Dashboard'\" [routerLink]=\"MainLink.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{MainLink.title}}</li>\r\n <li *ngFor=\"let link of SubLinks\" class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"link.routerLink\">{{link.title}}</li>\r\n</ol>", styles: [".breadcrumb{padding:0;margin:0;background:transparent;color:#344154;font-size:14px}.breadcrumb-item+.breadcrumb-item:before{font-weight:400!important;color:#fff;font-family:\"Font Awesome 6 Pro\";font-size:.6rem;line-height:1.4rem;content:\"\\f054\"}.breadcrumb-item{float:left}.breadcrumb-link{cursor:pointer;font-weight:500;color:#fff!important}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], encapsulation: i0.ViewEncapsulation.None });
72
+ Breadcrumb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Breadcrumb, deps: [{ token: i1.AppState }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.Title }, { token: i4.AppEmbeddingExtensions }], target: i0.ɵɵFactoryTarget.Component });
73
+ Breadcrumb.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: Breadcrumb, isStandalone: true, selector: "breadcrumb", ngImport: i0, template: "<ol class=\"breadcrumb app-no-selection\">\r\n <li class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"['/pages/dashboard']\">Dashboard</li>\r\n <li *ngIf=\"MainLink?.title != 'Dashboard'\" [routerLink]=\"MainLink.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{MainLink.title}}</li>\r\n \r\n <ng-container *ngFor=\"let link of SubLinks\">\r\n <li *ngIf=\"link.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"link.routerLink\">{{link.title}}</li>\r\n <li *ngIf=\"!link.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{link.title}}</li>\r\n </ng-container>\r\n</ol>", styles: [".breadcrumb{padding:0;margin:0;background:transparent;color:#344154;font-size:14px}.breadcrumb-item+.breadcrumb-item:before{font-weight:400!important;color:#fff;font-family:\"Font Awesome 6 Pro\";font-size:.6rem;line-height:1.4rem;content:\"\\f054\"}.breadcrumb-item{float:left}.breadcrumb-link{cursor:pointer;font-weight:500;color:#fff!important}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], encapsulation: i0.ViewEncapsulation.None });
63
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: Breadcrumb, decorators: [{
64
75
  type: Component,
65
- args: [{ selector: "breadcrumb", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf, NgFor, RouterLink], template: "<ol class=\"breadcrumb app-no-selection\">\r\n <li class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"['/pages/dashboard']\">Dashboard</li>\r\n <li *ngIf=\"MainLink?.title != 'Dashboard'\" [routerLink]=\"MainLink.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{MainLink.title}}</li>\r\n <li *ngFor=\"let link of SubLinks\" class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"link.routerLink\">{{link.title}}</li>\r\n</ol>", styles: [".breadcrumb{padding:0;margin:0;background:transparent;color:#344154;font-size:14px}.breadcrumb-item+.breadcrumb-item:before{font-weight:400!important;color:#fff;font-family:\"Font Awesome 6 Pro\";font-size:.6rem;line-height:1.4rem;content:\"\\f054\"}.breadcrumb-item{float:left}.breadcrumb-link{cursor:pointer;font-weight:500;color:#fff!important}\n"] }]
66
- }], ctorParameters: function () { return [{ type: i1.AppState }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.Title }]; } });
76
+ args: [{ selector: "breadcrumb", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf, NgFor, RouterLink], template: "<ol class=\"breadcrumb app-no-selection\">\r\n <li class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"['/pages/dashboard']\">Dashboard</li>\r\n <li *ngIf=\"MainLink?.title != 'Dashboard'\" [routerLink]=\"MainLink.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{MainLink.title}}</li>\r\n \r\n <ng-container *ngFor=\"let link of SubLinks\">\r\n <li *ngIf=\"link.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"link.routerLink\">{{link.title}}</li>\r\n <li *ngIf=\"!link.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{link.title}}</li>\r\n </ng-container>\r\n</ol>", styles: [".breadcrumb{padding:0;margin:0;background:transparent;color:#344154;font-size:14px}.breadcrumb-item+.breadcrumb-item:before{font-weight:400!important;color:#fff;font-family:\"Font Awesome 6 Pro\";font-size:.6rem;line-height:1.4rem;content:\"\\f054\"}.breadcrumb-item{float:left}.breadcrumb-link{cursor:pointer;font-weight:500;color:#fff!important}\n"] }]
77
+ }], ctorParameters: function () { return [{ type: i1.AppState }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.Title }, { type: i4.AppEmbeddingExtensions }]; } });
67
78
  export class BreadcrumbItem {
68
79
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQXdCLGFBQWEsRUFBVSxVQUFVLEVBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSzlDLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVl2RCxNQUFNLE9BQU8sVUFBVTtJQUluQixZQUFtQixNQUFnQixFQUFVLE1BQWMsRUFBVSxlQUErQixFQUFVLGFBQW9CO1FBQS9HLFdBQU0sR0FBTixNQUFNLENBQVU7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQU87UUFIM0gsYUFBUSxHQUFtQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ3BGLGFBQVEsR0FBcUIsRUFBRSxDQUFDO1FBR25DLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFF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RSxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDM0UsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFhO1FBQy9CLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUM3RCxJQUFJLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBRS9DLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7dUdBeERRLFVBQVU7MkZBQVYsVUFBVSxzRUN0QnZCLGlmQUlLLHVaRGdCUyxJQUFJLDZGQUFFLEtBQUssbUhBQUUsVUFBVTsyRkFFeEIsVUFBVTtrQkFSdEIsU0FBUzsrQkFDSSxZQUFZLGlCQUNQLGlCQUFpQixDQUFDLElBQUksY0FHekIsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUM7O0FBNkR0QyxNQUFNLE9BQU8sY0FBYztDQUcxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIERhdGEsIE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyTGluaywgVXJsVHJlZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTmdGb3IsIE5nSWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBcHBTdGF0ZSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBFbnZPcHRpb25zIH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL2RvbWFpblwiO1xyXG5pbXBvcnQgeyBvZiwgY29tYmluZUxhdGVzdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBtZXJnZU1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuZGVjbGFyZSB2YXIgbXljb25maWc6IEVudk9wdGlvbnM7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImJyZWFkY3J1bWJcIixcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vYnJlYWRjcnVtYi5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ0ZvciwgUm91dGVyTGlua11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWIge1xyXG4gICAgcHVibGljIE1haW5MaW5rOiBCcmVhZGNydW1iSXRlbSA9IHsgdGl0bGU6IFwiRGFzaGJvYXJkXCIsIHJvdXRlckxpbms6IFtcIi9wYWdlcy9kYXNoYm9hcmRcIl0gfTtcclxuICAgIHB1YmxpYyBTdWJMaW5rczogQnJlYWRjcnVtYkl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBfc3RhdGU6IEFwcFN0YXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgX3RpdGxlU2VydmljZTogVGl0bGUpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcclxuICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXHJcbiAgICAgICAgICAgIG1hcCgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHsgcmV0dXJuIHsgZXZlbnQ6IGV2ZW50LCByb3V0ZTogdGhpcy5fYWN0aXZhdGVkUm91dGUgfSB9KSxcclxuICAgICAgICAgICAgbWFwKChyb3V0ZVdpdGhFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJvdXRlV2l0aEV2ZW50LnJvdXRlLmZpcnN0Q2hpbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgcm91dGVXaXRoRXZlbnQucm91dGUgPSByb3V0ZVdpdGhFdmVudC5yb3V0ZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdXRlV2l0aEV2ZW50O1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbWVyZ2VNYXAocm91dGVXaXRoRXZlbnQgPT5cclxuICAgICAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgb2Yocm91dGVXaXRoRXZlbnQuZXZlbnQudXJsKS5waXBlKG1hcCh1cmwgPT4gdGhpcy5yb3V0ZXIucGFyc2VVcmwodXJsKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlV2l0aEV2ZW50LnJvdXRlLmRhdGEpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLnN1YnNjcmliZSgodHJlZVBsdXNEYXRhOiBbVXJsVHJlZSwgRGF0YV0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSB0cmVlUGx1c0RhdGFbMV07XHJcbiAgICAgICAgICAgIGxldCB0cmVlID0gdHJlZVBsdXNEYXRhWzBdO1xyXG5cclxuICAgICAgICAgICAgLy8gdHJ1ZSA9IFNVQiAtIGRldHRhZ2xpb1xyXG4gICAgICAgICAgICAvLyBmYWxzZSA9IE1BSU4gLSByaWNlcmNhL2Rhc2hib2FyZFxyXG4gICAgICAgICAgICBsZXQgaW50ZXJuYWxOYXZpZ2F0aW9uID0gZGF0YVtcIkludGVybmFsTmF2aWdhdGlvblwiXTtcclxuICAgICAgICAgICAgbGV0IHRpdGxlID0gZGF0YVtcInRpdGxlXCJdO1xyXG4gICAgICAgICAgICBpZiAoaW50ZXJuYWxOYXZpZ2F0aW9uKSB7IHRoaXMub25TdWJOYXZpZ2F0aW9uKHRyZWUsIHRpdGxlKTsgfVxyXG4gICAgICAgICAgICBlbHNlIHsgdGhpcy5vbk1haW5OYXZpZ2F0aW9uKHRyZWUsIHRpdGxlKTsgfVxyXG4gICAgICAgICAgICB0aGlzLl90aXRsZVNlcnZpY2Uuc2V0VGl0bGUobXljb25maWcuQXBwRGF0YS5Nb2R1bGVEZXNjcmlwdGlvbiArIFwiID4gXCIgKyB0aXRsZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7IH1cclxuXHJcbiAgICBvblN1Yk5hdmlnYXRpb24odHJlZTogVXJsVHJlZSwgdGl0bGU6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuU3ViTGlua3MuaW5kZXhPZih0aGlzLlN1YkxpbmtzLmZpbmQoZiA9PiBmLnRpdGxlID09IHRpdGxlKSk7XHJcbiAgICAgICAgbGV0IGRpZmZlcmVuY2UgPSB0aGlzLlN1YkxpbmtzLmxlbmd0aCAtIChpbmRleCArIDEpXHJcbiAgICAgICAgaWYgKGluZGV4ICE9IC0xICYmIChpbmRleCArIDEpICE9IHRoaXMuU3ViTGlua3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZmVyZW5jZTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5TdWJMaW5rcy5wb3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZGV4ID09IC0xICYmIHRoaXMuTWFpbkxpbmsudGl0bGUgIT0gdGl0bGUpXHJcbiAgICAgICAgICAgIHRoaXMuU3ViTGlua3MucHVzaCh7IHRpdGxlOiB0aXRsZSwgcm91dGVyTGluazogdGhpcy5nZXRSb3V0ZXJMaW5rKHRyZWUpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWFpbk5hdmlnYXRpb24odHJlZTogVXJsVHJlZSwgdGl0bGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuU3ViTGlua3MgPSBbXTtcclxuICAgICAgICB0aGlzLk1haW5MaW5rID0geyB0aXRsZTogdGl0bGUsIHJvdXRlckxpbms6IHRoaXMuZ2V0Um91dGVyTGluayh0cmVlKSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Um91dGVyTGluayh0cmVlOiBVcmxUcmVlKSB7XHJcbiAgICAgICAgbGV0IHNlZ3MgPSB0cmVlPy5yb290Py5jaGlsZHJlbj8uW1wicHJpbWFyeVwiXT8uc2VnbWVudHMgPz8gW107XHJcbiAgICAgICAgbGV0IHJvdXRlID0gXCIvXCIgKyBzZWdzLm1hcCh0ID0+IHQucGF0aCkuam9pbignLycpO1xyXG4gICAgICAgIGxldCBwYXJhbXMgPSBzZWdzW3NlZ3MubGVuZ3RoIC0gMV0/LnBhcmFtZXRlcnM7XHJcblxyXG4gICAgICAgIHJldHVybiBbcm91dGUsIHBhcmFtc107XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1iSXRlbSB7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgcm91dGVyTGluazogYW55W107XHJcbn0iLCI8b2wgY2xhc3M9XCJicmVhZGNydW1iIGFwcC1uby1zZWxlY3Rpb25cIj5cclxuICAgIDxsaSBjbGFzcz1cImJyZWFkY3J1bWItaXRlbSB0ZXh0LXVwcGVyY2FzZSBicmVhZGNydW1iLWxpbmtcIiBbcm91dGVyTGlua109XCJbJy9wYWdlcy9kYXNoYm9hcmQnXVwiPkRhc2hib2FyZDwvbGk+XHJcbiAgICA8bGkgKm5nSWY9XCJNYWluTGluaz8udGl0bGUgIT0gJ0Rhc2hib2FyZCdcIiBbcm91dGVyTGlua109XCJNYWluTGluay5yb3V0ZXJMaW5rXCIgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW0gdGV4dC11cHBlcmNhc2UgYnJlYWRjcnVtYi1saW5rXCI+e3tNYWluTGluay50aXRsZX19PC9saT5cclxuICAgIDxsaSAqbmdGb3I9XCJsZXQgbGluayBvZiBTdWJMaW5rc1wiIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtIHRleHQtdXBwZXJjYXNlIGJyZWFkY3J1bWItbGlua1wiIFtyb3V0ZXJMaW5rXT1cImxpbmsucm91dGVyTGlua1wiPnt7bGluay50aXRsZX19PC9saT5cclxuPC9vbD4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvc3JjL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUF3QixhQUFhLEVBQVUsVUFBVSxFQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTzlDLFdBQVc7QUFDWCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBWXpDLE1BQU0sT0FBTyxVQUFVO0lBSW5CLFlBQW1CLE1BQWdCLEVBQVUsTUFBYyxFQUFVLGVBQStCLEVBQVUsYUFBb0IsRUFBVSxHQUEyQjtRQUFwSixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFPO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBd0I7UUFIaEssYUFBUSxHQUFtQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ3BGLGFBQVEsR0FBcUIsRUFBRSxDQUFDO1FBR25DLElBQUksQ0FBQyxNQUFNLENB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LEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBRS9DLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0IsQ0FBQzs7dUdBcEVRLFVBQVU7MkZBQVYsVUFBVSxzRUN6QnZCLDJyQkFRSyx1WkRlUyxJQUFJLDZGQUFFLEtBQUssbUhBQUUsVUFBVTsyRkFFeEIsVUFBVTtrQkFSdEIsU0FBUzsrQkFDSSxZQUFZLGlCQUNQLGlCQUFpQixDQUFDLElBQUksY0FHekIsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUM7O0FBeUV0QyxNQUFNLE9BQU8sY0FBYztDQUcxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIERhdGEsIE5hdmlnYXRpb25FbmQsIFJvdXRlciwgUm91dGVyTGluaywgVXJsVHJlZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgTmdGb3IsIE5nSWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBBcHBFbWJlZGRpbmdFeHRlbnNpb25zIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcbmltcG9ydCB7IEFwcFN0YXRlIH0gZnJvbSBcIkBlc2ZhZW56YS9jb3JlL3NlcnZpY2VzXCI7XHJcbmltcG9ydCB7IEVudk9wdGlvbnMgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCI7XHJcblxyXG4vLyBMaWJyZXJpZVxyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgb2YsIGNvbWJpbmVMYXRlc3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZGVjbGFyZSB2YXIgbXljb25maWc6IEVudk9wdGlvbnM7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImJyZWFkY3J1bWJcIixcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vYnJlYWRjcnVtYi5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ0ZvciwgUm91dGVyTGlua11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWIge1xyXG4gICAgcHVibGljIE1haW5MaW5rOiBCcmVhZGNydW1iSXRlbSA9IHsgdGl0bGU6IFwiRGFzaGJvYXJkXCIsIHJvdXRlckxpbms6IFtcIi9wYWdlcy9kYXNoYm9hcmRcIl0gfTtcclxuICAgIHB1YmxpYyBTdWJMaW5rczogQnJlYWRjcnVtYkl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBfc3RhdGU6IEFwcFN0YXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgX3RpdGxlU2VydmljZTogVGl0bGUsIHByaXZhdGUgZW1iOiBBcHBFbWJlZGRpbmdFeHRlbnNpb25zKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXHJcbiAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxyXG4gICAgICAgICAgICBtYXAoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7IHJldHVybiB7IGV2ZW50OiBldmVudCwgcm91dGU6IHRoaXMuX2FjdGl2YXRlZFJvdXRlIH0gfSksXHJcbiAgICAgICAgICAgIG1hcCgocm91dGVXaXRoRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChyb3V0ZVdpdGhFdmVudC5yb3V0ZS5maXJzdENoaWxkKVxyXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlV2l0aEV2ZW50LnJvdXRlID0gcm91dGVXaXRoRXZlbnQucm91dGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByb3V0ZVdpdGhFdmVudDtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG1lcmdlTWFwKHJvdXRlV2l0aEV2ZW50ID0+XHJcbiAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIG9mKHJvdXRlV2l0aEV2ZW50LmV2ZW50LnVybCkucGlwZShtYXAodXJsID0+IHRoaXMucm91dGVyLnBhcnNlVXJsKHVybCkpKSxcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZVdpdGhFdmVudC5yb3V0ZS5kYXRhKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKHRyZWVQbHVzRGF0YTogW1VybFRyZWUsIERhdGFdKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gdHJlZVBsdXNEYXRhWzFdO1xyXG4gICAgICAgICAgICBsZXQgdHJlZSA9IHRyZWVQbHVzRGF0YVswXTtcclxuXHJcbiAgICAgICAgICAgIC8vIHRydWUgPSBTVUIgLSBkZXR0YWdsaW9cclxuICAgICAgICAgICAgLy8gZmFsc2UgPSBNQUlOIC0gcmljZXJjYS9kYXNoYm9hcmRcclxuICAgICAgICAgICAgbGV0IGludGVybmFsTmF2aWdhdGlvbiA9IGRhdGFbXCJJbnRlcm5hbE5hdmlnYXRpb25cIl07XHJcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGRhdGFbXCJ0aXRsZVwiXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGlvbih0aXRsZSwgaW50ZXJuYWxOYXZpZ2F0aW9uLCB0cmVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWIuTWVzc2FnZU9ic2VydmVyLnBpcGUoZmlsdGVyKGV2ID0+IGV2LmV2ZW50ID09IFwibmF2aWdhdGlvblwiKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgbGV0IGludGVybmFsTmF2aWdhdGlvbiA9IGV2ZW50Py5kYXRhPy5pbnRlcm5hbE5hdmlnYXRpb247XHJcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGV2ZW50Py5kYXRhPy50aXRsZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGlvbih0aXRsZSwgaW50ZXJuYWxOYXZpZ2F0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVOYXZpZ2F0aW9uKHRpdGxlOiBzdHJpbmcsIGludGVybmFsOiBib29sZWFuLCB0cmVlOiBVcmxUcmVlID0gbnVsbCl7XHJcbiAgICAgICAgaWYgKGludGVybmFsKSB7IHRoaXMub25TdWJOYXZpZ2F0aW9uKHRyZWUsIHRpdGxlKTsgfVxyXG4gICAgICAgIGVsc2UgeyB0aGlzLm9uTWFpbk5hdmlnYXRpb24odHJlZSwgdGl0bGUpOyB9XHJcbiAgICAgICAgdGhpcy5fdGl0bGVTZXJ2aWNlLnNldFRpdGxlKG15Y29uZmlnLkFwcERhdGEuTW9kdWxlRGVzY3JpcHRpb24gKyAodGl0bGUgPyAoXCIgPiBcIiArIHRpdGxlKSA6ICcnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7IH1cclxuXHJcbiAgICBvblN1Yk5hdmlnYXRpb24odHJlZTogVXJsVHJlZSwgdGl0bGU6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuU3ViTGlua3MuaW5kZXhPZih0aGlzLlN1YkxpbmtzLmZpbmQoZiA9PiBmLnRpdGxlID09IHRpdGxlKSk7XHJcbiAgICAgICAgbGV0IGRpZmZlcmVuY2UgPSB0aGlzLlN1YkxpbmtzLmxlbmd0aCAtIChpbmRleCArIDEpXHJcbiAgICAgICAgaWYgKGluZGV4ICE9IC0xICYmIChpbmRleCArIDEpICE9IHRoaXMuU3ViTGlua3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZmVyZW5jZTsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5TdWJMaW5rcy5wb3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGluZGV4ID09IC0xICYmIHRoaXMuTWFpbkxpbmsudGl0bGUgIT0gdGl0bGUpXHJcbiAgICAgICAgICAgIHRoaXMuU3ViTGlua3MucHVzaCh7IHRpdGxlOiB0aXRsZSwgcm91dGVyTGluazogdHJlZSA/IHRoaXMuZ2V0Um91dGVyTGluayh0cmVlKSA6IG51bGwgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NYWluTmF2aWdhdGlvbih0cmVlOiBVcmxUcmVlLCB0aXRsZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5TdWJMaW5rcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuTWFpbkxpbmsgPSB7IHRpdGxlOiB0aXRsZSwgcm91dGVyTGluazogdHJlZSA/IHRoaXMuZ2V0Um91dGVyTGluayh0cmVlKSA6IG51bGwgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJvdXRlckxpbmsodHJlZTogVXJsVHJlZSkge1xyXG4gICAgICAgIGxldCBzZWdzID0gdHJlZT8ucm9vdD8uY2hpbGRyZW4/LltcInByaW1hcnlcIl0/LnNlZ21lbnRzID8/IFtdO1xyXG4gICAgICAgIGxldCByb3V0ZSA9IFwiL1wiICsgc2Vncy5tYXAodCA9PiB0LnBhdGgpLmpvaW4oJy8nKTtcclxuICAgICAgICBsZXQgcGFyYW1zID0gc2Vnc1tzZWdzLmxlbmd0aCAtIDFdPy5wYXJhbWV0ZXJzO1xyXG5cclxuICAgICAgICByZXR1cm4gW3JvdXRlLCBwYXJhbXNdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYkl0ZW0ge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIHJvdXRlckxpbms6IGFueVtdO1xyXG59IiwiPG9sIGNsYXNzPVwiYnJlYWRjcnVtYiBhcHAtbm8tc2VsZWN0aW9uXCI+XHJcbiAgICA8bGkgY2xhc3M9XCJicmVhZGNydW1iLWl0ZW0gdGV4dC11cHBlcmNhc2UgYnJlYWRjcnVtYi1saW5rXCIgW3JvdXRlckxpbmtdPVwiWycvcGFnZXMvZGFzaGJvYXJkJ11cIj5EYXNoYm9hcmQ8L2xpPlxyXG4gICAgPGxpICpuZ0lmPVwiTWFpbkxpbms/LnRpdGxlICE9ICdEYXNoYm9hcmQnXCIgW3JvdXRlckxpbmtdPVwiTWFpbkxpbmsucm91dGVyTGlua1wiIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtIHRleHQtdXBwZXJjYXNlIGJyZWFkY3J1bWItbGlua1wiPnt7TWFpbkxpbmsudGl0bGV9fTwvbGk+XHJcbiAgICBcclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpbmsgb2YgU3ViTGlua3NcIj5cclxuICAgICAgICA8bGkgKm5nSWY9XCJsaW5rLnJvdXRlckxpbmtcIiBjbGFzcz1cImJyZWFkY3J1bWItaXRlbSB0ZXh0LXVwcGVyY2FzZSBicmVhZGNydW1iLWxpbmtcIiBbcm91dGVyTGlua109XCJsaW5rLnJvdXRlckxpbmtcIj57e2xpbmsudGl0bGV9fTwvbGk+XHJcbiAgICAgICAgPGxpICpuZ0lmPVwiIWxpbmsucm91dGVyTGlua1wiIGNsYXNzPVwiYnJlYWRjcnVtYi1pdGVtIHRleHQtdXBwZXJjYXNlIGJyZWFkY3J1bWItbGlua1wiPnt7bGluay50aXRsZX19PC9saT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L29sPiJdfQ==