awf-test-lib 0.1.15 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,25 +1,96 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import jwt_decode from 'jwt-decode';
2
3
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/router";
4
+ import * as i1 from "@angular/router";
5
+ import * as i2 from "@angular/common";
5
6
  export class MenuGePortalComponent {
6
- constructor() {
7
+ constructor(router) {
8
+ this.router = router;
7
9
  this.logOutClick = new EventEmitter();
8
10
  this.hideMenu = new EventEmitter();
11
+ this.displayViewAs = false;
12
+ this.displayViewAs = !this.isTokenExpired();
9
13
  }
10
14
  logout() {
11
- this.logOutClick.emit();
15
+ this.displayViewAs = !this.isTokenExpired();
16
+ if (this.displayViewAs) {
17
+ this.deleteConnexionInfo();
18
+ this.navigate("/ge");
19
+ }
20
+ else {
21
+ this.logOutClick.emit();
22
+ }
12
23
  }
13
- hideMenuMethode() {
24
+ menuMethode(path) {
25
+ this.redirectByPath(path);
14
26
  this.hideMenu.emit();
15
27
  }
28
+ isTokenExpired() {
29
+ const token = sessionStorage.getItem("va-token");
30
+ if (!token) {
31
+ return true; // Token absent, considéré comme expiré
32
+ }
33
+ const tokenData = jwt_decode(token);
34
+ const expirationTime = tokenData?.exp; // Convertir en millisecondes
35
+ const currentTimeInSeconds = Math.floor(Date.now() / 1000); // Temps actuel en secondes
36
+ const isExpired = expirationTime ? expirationTime < currentTimeInSeconds : true;
37
+ if (isExpired) {
38
+ this.deleteConnexionInfo();
39
+ }
40
+ return isExpired;
41
+ }
42
+ redirectByPath(path) {
43
+ this.displayViewAs = !this.isTokenExpired();
44
+ if (this.displayViewAs) {
45
+ switch (path) {
46
+ case null || undefined || '':
47
+ this.navigate('/ge/view-as/home');
48
+ break;
49
+ case 'contact':
50
+ this.navigate('/ge/view-as/contact');
51
+ break;
52
+ case 'maintenance':
53
+ this.navigate('/ge/view-as/maintenance');
54
+ break;
55
+ case 'systems':
56
+ this.navigate('/ge/view-as/systems');
57
+ break;
58
+ default: this.navigate('/ge/view-as/home');
59
+ }
60
+ }
61
+ else {
62
+ switch (path) {
63
+ case null || undefined || '':
64
+ this.navigate('/ge');
65
+ break;
66
+ case 'contact':
67
+ this.navigate('/ge/contact');
68
+ break;
69
+ case 'maintenance':
70
+ this.navigate('/ge/maintenance');
71
+ break;
72
+ case 'systems':
73
+ this.navigate('/ge/systems');
74
+ break;
75
+ default: this.navigate('/ge');
76
+ }
77
+ }
78
+ }
79
+ deleteConnexionInfo() {
80
+ sessionStorage.removeItem("va-token");
81
+ sessionStorage.removeItem("va-email");
82
+ sessionStorage.setItem("va", "false");
83
+ }
84
+ navigate(route) {
85
+ this.router.navigate([route]);
86
+ }
16
87
  }
17
- MenuGePortalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: MenuGePortalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
- MenuGePortalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.10", type: MenuGePortalComponent, selector: "awf-menu-ge-portal", inputs: { translate: "translate", isAdmin: "isAdmin" }, outputs: { logOutClick: "logOutClick", hideMenu: "hideMenu" }, ngImport: i0, template: "<div class=\"layout-menu\" *ngIf=\"translate\">\r\n <div class=\"menu\" routerLink=\"./\" (click)=\"hideMenuMethode()\"> <i class=\"pi pi-home\"></i> {{translate.home}}</div>\r\n <div class=\"menu\" routerLink=\"./contact\" (click)=\"hideMenuMethode()\"> <i class=\"pi pi-phone\"></i> {{translate.contact}}</div>\r\n <div class=\"menu\" routerLink=\"./systems\" (click)=\"hideMenuMethode()\"> <i class=\"pi pi-eye\"></i> {{translate.systems}}</div>\r\n <div class=\"menu\" routerLink=\"./maintenance\" (click)=\"hideMenuMethode()\"> <i class=\"pi pi-inbox\"></i> {{translate.maintenance}}</div>\r\n <div class=\"menu\" (click)=\"logout()\"> <i class=\"pi pi-power-off\"></i> {{translate.logout}}</div>\r\n</div> ", styles: [".layout-menu{margin-left:50px}.layout-menu .menu{display:block;color:#8da1b5;font-weight:300;padding:1rem 0 .5rem;font-size:16px;cursor:pointer}.layout-menu .menu:hover{font-weight:700;color:var(--primarycolor)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
88
+ MenuGePortalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: MenuGePortalComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
89
+ MenuGePortalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.10", type: MenuGePortalComponent, selector: "awf-menu-ge-portal", inputs: { translate: "translate", isAdmin: "isAdmin" }, outputs: { logOutClick: "logOutClick", hideMenu: "hideMenu" }, ngImport: i0, template: "<div class=\"layout-menu\" *ngIf=\"translate\">\r\n <div class=\"menu\" (click)=\"menuMethode()\"> <i class=\"pi pi-home\"></i> {{translate.home}}</div>\r\n <div class=\"menu\" (click)=\"menuMethode('contact')\"> <i class=\"pi pi-phone\"></i> {{translate.contact}}</div>\r\n <div class=\"menu\" (click)=\"menuMethode('systems')\"> <i class=\"pi pi-eye\"></i> {{translate.systems}}</div>\r\n <div class=\"menu\" (click)=\"menuMethode('maintenance')\"> <i class=\"pi pi-inbox\"></i> {{translate.maintenance}}</div>\r\n <div class=\"menu\" (click)=\"logout()\"> <i class=\"pi pi-power-off\"></i> {{translate.logout}}</div>\r\n</div> ", styles: [".layout-menu{margin-left:50px}.layout-menu .menu{display:block;color:#8da1b5;font-weight:300;padding:1rem 0 .5rem;font-size:16px;cursor:pointer}.layout-menu .menu:hover{font-weight:700;color:var(--primarycolor)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
19
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: MenuGePortalComponent, decorators: [{
20
91
  type: Component,
21
- args: [{ selector: 'awf-menu-ge-portal', template: "<div class=\"layout-menu\" *ngIf=\"translate\">\r\n <div class=\"menu\" routerLink=\"./\" (click)=\"hideMenuMethode()\"> <i class=\"pi pi-home\"></i> {{translate.home}}</div>\r\n <div class=\"menu\" routerLink=\"./contact\" (click)=\"hideMenuMethode()\"> <i class=\"pi pi-phone\"></i> {{translate.contact}}</div>\r\n <div class=\"menu\" routerLink=\"./systems\" (click)=\"hideMenuMethode()\"> <i class=\"pi pi-eye\"></i> {{translate.systems}}</div>\r\n <div class=\"menu\" routerLink=\"./maintenance\" (click)=\"hideMenuMethode()\"> <i class=\"pi pi-inbox\"></i> {{translate.maintenance}}</div>\r\n <div class=\"menu\" (click)=\"logout()\"> <i class=\"pi pi-power-off\"></i> {{translate.logout}}</div>\r\n</div> ", styles: [".layout-menu{margin-left:50px}.layout-menu .menu{display:block;color:#8da1b5;font-weight:300;padding:1rem 0 .5rem;font-size:16px;cursor:pointer}.layout-menu .menu:hover{font-weight:700;color:var(--primarycolor)}\n"] }]
22
- }], ctorParameters: function () { return []; }, propDecorators: { logOutClick: [{
92
+ args: [{ selector: 'awf-menu-ge-portal', template: "<div class=\"layout-menu\" *ngIf=\"translate\">\r\n <div class=\"menu\" (click)=\"menuMethode()\"> <i class=\"pi pi-home\"></i> {{translate.home}}</div>\r\n <div class=\"menu\" (click)=\"menuMethode('contact')\"> <i class=\"pi pi-phone\"></i> {{translate.contact}}</div>\r\n <div class=\"menu\" (click)=\"menuMethode('systems')\"> <i class=\"pi pi-eye\"></i> {{translate.systems}}</div>\r\n <div class=\"menu\" (click)=\"menuMethode('maintenance')\"> <i class=\"pi pi-inbox\"></i> {{translate.maintenance}}</div>\r\n <div class=\"menu\" (click)=\"logout()\"> <i class=\"pi pi-power-off\"></i> {{translate.logout}}</div>\r\n</div> ", styles: [".layout-menu{margin-left:50px}.layout-menu .menu{display:block;color:#8da1b5;font-weight:300;padding:1rem 0 .5rem;font-size:16px;cursor:pointer}.layout-menu .menu:hover{font-weight:700;color:var(--primarycolor)}\n"] }]
93
+ }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { logOutClick: [{
23
94
  type: Output
24
95
  }], translate: [{
25
96
  type: Input
@@ -28,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImpo
28
99
  }], hideMenu: [{
29
100
  type: Output
30
101
  }] } });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1nZS1wb3J0YWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXdmLXRlc3QtbGliL3NyYy9saWIvY29yZS9tZW51LWdlLXBvcnRhbC9tZW51LWdlLXBvcnRhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hd2YtdGVzdC1saWIvc3JjL2xpYi9jb3JlL21lbnUtZ2UtcG9ydGFsL21lbnUtZ2UtcG9ydGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPdkUsTUFBTSxPQUFPLHFCQUFxQjtJQUs5QjtRQUpVLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHcEQsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFHakIsTUFBTTtRQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGVBQWU7UUFFWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7O21IQWRRLHFCQUFxQjt1R0FBckIscUJBQXFCLGlMQ1BsQyx5dEJBTU87NEZEQ00scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLG9CQUFvQjswRUFLcEIsV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhd2YtbWVudS1nZS1wb3J0YWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUtZ2UtcG9ydGFsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL21lbnUtZ2UtcG9ydGFsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVHZVBvcnRhbENvbXBvbmVudCAge1xyXG4gICAgQE91dHB1dCgpIGxvZ091dENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBJbnB1dCgpIHRyYW5zbGF0ZSE6IGFueTtcclxuICAgIEBJbnB1dCgpIGlzQWRtaW4hOiBib29sZWFuO1xyXG4gICAgQE91dHB1dCgpIGhpZGVNZW51OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG5cclxuICAgIGxvZ291dCgpIHsgdGhpcy5sb2dPdXRDbGljay5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZU1lbnVNZXRob2RlKClcclxuICAgIHtcclxuICAgICAgICB0aGlzLmhpZGVNZW51LmVtaXQoKTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImxheW91dC1tZW51XCIgKm5nSWY9XCJ0cmFuc2xhdGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtZW51XCIgcm91dGVyTGluaz1cIi4vXCIgKGNsaWNrKT1cImhpZGVNZW51TWV0aG9kZSgpXCI+IDxpIGNsYXNzPVwicGkgcGktaG9tZVwiPjwvaT4ge3t0cmFuc2xhdGUuaG9tZX19PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWVudVwiIHJvdXRlckxpbms9XCIuL2NvbnRhY3RcIiAoY2xpY2spPVwiaGlkZU1lbnVNZXRob2RlKClcIj4gPGkgY2xhc3M9XCJwaSBwaS1waG9uZVwiPjwvaT4ge3t0cmFuc2xhdGUuY29udGFjdH19PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWVudVwiIHJvdXRlckxpbms9XCIuL3N5c3RlbXNcIiAoY2xpY2spPVwiaGlkZU1lbnVNZXRob2RlKClcIj4gPGkgY2xhc3M9XCJwaSBwaS1leWVcIj48L2k+IHt7dHJhbnNsYXRlLnN5c3RlbXN9fTwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1lbnVcIiByb3V0ZXJMaW5rPVwiLi9tYWludGVuYW5jZVwiIChjbGljayk9XCJoaWRlTWVudU1ldGhvZGUoKVwiPiA8aSBjbGFzcz1cInBpIHBpLWluYm94XCI+PC9pPiB7e3RyYW5zbGF0ZS5tYWludGVuYW5jZX19PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWVudVwiIChjbGljayk9XCJsb2dvdXQoKVwiPiA8aSBjbGFzcz1cInBpIHBpLXBvd2VyLW9mZlwiPjwvaT4ge3t0cmFuc2xhdGUubG9nb3V0fX08L2Rpdj5cclxuPC9kaXY+ICJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1nZS1wb3J0YWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXdmLXRlc3QtbGliL3NyYy9saWIvY29yZS9tZW51LWdlLXBvcnRhbC9tZW51LWdlLXBvcnRhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hd2YtdGVzdC1saWIvc3JjL2xpYi9jb3JlL21lbnUtZ2UtcG9ydGFsL21lbnUtZ2UtcG9ydGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxVQUFVLE1BQU0sWUFBWSxDQUFDOzs7O0FBT3BDLE1BQU0sT0FBTyxxQkFBcUI7SUFPOUIsWUFBNkIsTUFBZTtRQUFmLFdBQU0sR0FBTixNQUFNLENBQVM7UUFObEMsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUdwRCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0Qsa0JBQWEsR0FBYSxLQUFLLENBQUM7UUFHNUIsSUFBSSxDQUFDLGFBQWEsR0FBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0MsSUFBRyxJQUFJLENBQUMsYUFBYSxFQUFDO1lBQ25CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDdEI7YUFBSTtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWM7UUFDdEIs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QkFDSSxvQkFBb0I7NkZBS3BCLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0UsU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCBqd3RfZGVjb2RlIGZyb20gJ2p3dC1kZWNvZGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2F3Zi1tZW51LWdlLXBvcnRhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1nZS1wb3J0YWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbWVudS1nZS1wb3J0YWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudUdlUG9ydGFsQ29tcG9uZW50ICB7XHJcbiAgICBAT3V0cHV0KCkgbG9nT3V0Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQElucHV0KCkgdHJhbnNsYXRlITogYW55O1xyXG4gICAgQElucHV0KCkgaXNBZG1pbiE6IGJvb2xlYW47XHJcbiAgICBAT3V0cHV0KCkgaGlkZU1lbnU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgZGlzcGxheVZpZXdBcyA6IGJvb2xlYW4gPSBmYWxzZTsgXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb3V0ZXIgOiBSb3V0ZXIpIHsgXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5Vmlld0FzICA9ICF0aGlzLmlzVG9rZW5FeHBpcmVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9nb3V0KCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheVZpZXdBcyAgPSAhdGhpcy5pc1Rva2VuRXhwaXJlZCgpO1xyXG4gICAgICAgIGlmKHRoaXMuZGlzcGxheVZpZXdBcyl7XHJcbiAgICAgICAgICAgdGhpcy5kZWxldGVDb25uZXhpb25JbmZvKCk7XHJcbiAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZShcIi9nZVwiKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLmxvZ091dENsaWNrLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWVudU1ldGhvZGUocGF0aD8gOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0QnlQYXRoKHBhdGgpO1xyXG4gICAgICAgIHRoaXMuaGlkZU1lbnUuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVG9rZW5FeHBpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInZhLXRva2VuXCIpXHJcbiAgICAgICAgaWYgKCF0b2tlbikge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRva2VuIGFic2VudCwgY29uc2lkw6lyw6kgY29tbWUgZXhwaXLDqVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0b2tlbkRhdGEgOiBhbnkgPSBqd3RfZGVjb2RlKHRva2VuKTtcclxuICAgICAgICBjb25zdCBleHBpcmF0aW9uVGltZSA9IHRva2VuRGF0YT8uZXhwOyAvLyBDb252ZXJ0aXIgZW4gbWlsbGlzZWNvbmRlc1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lSW5TZWNvbmRzID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7IC8vIFRlbXBzIGFjdHVlbCBlbiBzZWNvbmRlc1xyXG4gICAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IGV4cGlyYXRpb25UaW1lID8gZXhwaXJhdGlvblRpbWUgPCBjdXJyZW50VGltZUluU2Vjb25kcyAgOiB0cnVlO1xyXG4gICAgICAgIGlmKGlzRXhwaXJlZCl7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlQ29ubmV4aW9uSW5mbygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNFeHBpcmVkXHJcbiAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIHJlZGlyZWN0QnlQYXRoKHBhdGg/IDogc3RyaW5nKXtcclxuICAgICAgICB0aGlzLmRpc3BsYXlWaWV3QXMgID0gIXRoaXMuaXNUb2tlbkV4cGlyZWQoKTtcclxuICAgICAgICAgICAgaWYodGhpcy5kaXNwbGF5Vmlld0FzKXtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAocGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbnVsbCB8fCB1bmRlZmluZWQgfHwgJycgIDogdGhpcy5uYXZpZ2F0ZSgnL2dlL3ZpZXctYXMvaG9tZScpOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdjb250YWN0JyA6IHRoaXMubmF2aWdhdGUoJy9nZS92aWV3LWFzL2NvbnRhY3QnKTsgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdtYWludGVuYW5jZScgOiB0aGlzLm5hdmlnYXRlKCcvZ2Uvdmlldy1hcy9tYWludGVuYW5jZScpOyAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3lzdGVtcycgOiB0aGlzLm5hdmlnYXRlKCcvZ2Uvdmlldy1hcy9zeXN0ZW1zJyk7ICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aGlzLm5hdmlnYXRlKCcvZ2Uvdmlldy1hcy9ob21lJyk7XHJcbiAgICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIG51bGwgfHwgdW5kZWZpbmVkIHx8ICcnIDogdGhpcy5uYXZpZ2F0ZSgnL2dlJyk7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRhY3QnIDogdGhpcy5uYXZpZ2F0ZSgnL2dlL2NvbnRhY3QnKTsgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdtYWludGVuYW5jZScgOiB0aGlzLm5hdmlnYXRlKCcvZ2UvbWFpbnRlbmFuY2UnKTsgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N5c3RlbXMnIDogdGhpcy5uYXZpZ2F0ZSgnL2dlL3N5c3RlbXMnKTsgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRoaXMubmF2aWdhdGUoJy9nZScpO1xyXG4gICAgICAgICAgICAgICAgICB9ICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZUNvbm5leGlvbkluZm8oKXtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFwidmEtdG9rZW5cIik7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShcInZhLWVtYWlsXCIpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJ2YVwiLFwiZmFsc2VcIilcclxuICAgICAgfVxyXG4gICAgICBuYXZpZ2F0ZShyb3V0ZTogc3RyaW5nKTp2b2lke1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0pXHJcbiAgICAgIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImxheW91dC1tZW51XCIgKm5nSWY9XCJ0cmFuc2xhdGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtZW51XCIgKGNsaWNrKT1cIm1lbnVNZXRob2RlKClcIj4gPGkgY2xhc3M9XCJwaSBwaS1ob21lXCI+PC9pPiB7e3RyYW5zbGF0ZS5ob21lfX08L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtZW51XCIgKGNsaWNrKT1cIm1lbnVNZXRob2RlKCdjb250YWN0JylcIj4gPGkgY2xhc3M9XCJwaSBwaS1waG9uZVwiPjwvaT4ge3t0cmFuc2xhdGUuY29udGFjdH19PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWVudVwiIChjbGljayk9XCJtZW51TWV0aG9kZSgnc3lzdGVtcycpXCI+IDxpIGNsYXNzPVwicGkgcGktZXllXCI+PC9pPiB7e3RyYW5zbGF0ZS5zeXN0ZW1zfX08L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtZW51XCIgKGNsaWNrKT1cIm1lbnVNZXRob2RlKCdtYWludGVuYW5jZScpXCI+IDxpIGNsYXNzPVwicGkgcGktaW5ib3hcIj48L2k+IHt7dHJhbnNsYXRlLm1haW50ZW5hbmNlfX08L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtZW51XCIgKGNsaWNrKT1cImxvZ291dCgpXCI+IDxpIGNsYXNzPVwicGkgcGktcG93ZXItb2ZmXCI+PC9pPiB7e3RyYW5zbGF0ZS5sb2dvdXR9fTwvZGl2PlxyXG48L2Rpdj4gIl19