common-header-lib 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/assets/.gitkeep +0 -0
- package/assets/i18n/ar.json +83 -0
- package/assets/i18n/de.json +83 -0
- package/assets/i18n/en.json +83 -0
- package/assets/i18n/es.json +83 -0
- package/assets/i18n/fr.json +83 -0
- package/assets/i18n/hi.json +83 -0
- package/assets/i18n/ja.json +83 -0
- package/assets/i18n/ko.json +83 -0
- package/assets/images/APP019.svg +6 -0
- package/assets/images/APP020.svg +4 -0
- package/assets/images/APP021.svg +6 -0
- package/assets/images/APP022.svg +6 -0
- package/assets/images/APP023.svg +11 -0
- package/assets/images/APP024.svg +9 -0
- package/assets/images/APP025.svg +8 -0
- package/assets/images/APP026.svg +4 -0
- package/assets/images/APP027.svg +5 -0
- package/assets/images/APP028.svg +6 -0
- package/assets/images/APP029.svg +12 -0
- package/assets/images/APP030.svg +20 -0
- package/assets/images/APP031.svg +14 -0
- package/assets/images/APP032.svg +17 -0
- package/assets/images/Frame.svg +104 -0
- package/assets/images/apps-1.svg +22 -0
- package/assets/images/bell-icon.svg +3 -0
- package/assets/images/check_circle.svg +3 -0
- package/assets/images/close copy.svg +5 -0
- package/assets/images/close.svg +5 -0
- package/assets/images/copy-img.svg +3 -0
- package/assets/images/cross-search.svg +4 -0
- package/assets/images/domain_img.svg +3 -0
- package/assets/images/east.svg +3 -0
- package/assets/images/error.svg +3 -0
- package/assets/images/filepath.svg +8 -0
- package/assets/images/flag1.svg +3 -0
- package/assets/images/gc-mail.svg +3 -0
- package/assets/images/grey-arrow.svg +3 -0
- package/assets/images/info.svg +3 -0
- package/assets/images/local.svg +3 -0
- package/assets/images/lock-pass.svg +3 -0
- package/assets/images/lock1.svg +3 -0
- package/assets/images/login-bg/default_bg.svg +448 -0
- package/assets/images/login-bg/visibility.svg +3 -0
- package/assets/images/login-bg/visibility_off.svg +3 -0
- package/assets/images/logo.png +0 -0
- package/assets/images/logout.svg +3 -0
- package/assets/images/mail-icon.svg +3 -0
- package/assets/images/marker-pin.svg +4 -0
- package/assets/images/noti_ticket.svg +3 -0
- package/assets/images/pass-img.svg +3 -0
- package/assets/images/refresh-1.svg +3 -0
- package/assets/images/schedule.svg +1 -0
- package/assets/images/search-filter.svg +3 -0
- package/assets/images/search-icon.svg +3 -0
- package/assets/images/settings.svg +3 -0
- package/assets/images/successful.svg +10 -0
- package/assets/images/user-name.svg +3 -0
- package/assets/scss/_sidebar.scss +267 -0
- package/assets/scss/styles.scss +577 -0
- package/esm2020/common-header-lib.mjs +5 -0
- package/esm2020/lib/Validators/noSpaceAllowed.mjs +16 -0
- package/esm2020/lib/common-header-lib.component.mjs +612 -0
- package/esm2020/lib/common-header-lib.module.mjs +208 -0
- package/esm2020/lib/common-header-lib.service.mjs +200 -0
- package/esm2020/lib/components/confirm-dialog/confirm-dialog.component.mjs +49 -0
- package/esm2020/lib/components/general-configuration/general-configuration.component.mjs +402 -0
- package/esm2020/lib/components/general-configuration/landingpg-config/landingpg-config.component.mjs +124 -0
- package/esm2020/lib/components/general-configuration/timezone-configuration/timezone-configuration.component.mjs +138 -0
- package/esm2020/lib/components/grid-pagination/grid-pagination.component.mjs +39 -0
- package/esm2020/lib/components/ng-translation/ng-translation.component.mjs +65 -0
- package/esm2020/lib/components/no-service-my-access-pg/no-service-my-access-pg.component.mjs +19 -0
- package/esm2020/lib/components/notification-sidebar/notification-sidebar.component.mjs +40 -0
- package/esm2020/lib/components/side-popup/side-popup.component.mjs +34 -0
- package/esm2020/lib/components/user-mailbox/user-mailbox.component.mjs +173 -0
- package/esm2020/lib/components/user-sidebar/user-sidebar.component.mjs +279 -0
- package/esm2020/lib/components/viewpassword-popup/viewpassword-popup.component.mjs +196 -0
- package/esm2020/lib/model/data_model.mjs +217 -0
- package/esm2020/lib/pipes/custome-dateformat.pipe.mjs +27 -0
- package/esm2020/lib/pipes/date-diff.pipe.mjs +56 -0
- package/esm2020/lib/pipes/slice-to-two.pipe.mjs +34 -0
- package/esm2020/lib/services/EncrypDecryp_RSA.service.mjs +100 -0
- package/esm2020/lib/services/async-passwordcheck.service.mjs +72 -0
- package/esm2020/lib/services/cookie-storage-manager.service.mjs +78 -0
- package/esm2020/lib/services/encrpdata.service.mjs +55 -0
- package/esm2020/lib/services/encrydecrydata.service.mjs +207 -0
- package/esm2020/lib/services/event.service.mjs +133 -0
- package/esm2020/lib/services/http/http-common.service.mjs +216 -0
- package/esm2020/lib/services/http/http-general-config.service.mjs +84 -0
- package/esm2020/lib/services/rest-login-form.service.mjs +296 -0
- package/esm2020/lib/services/rest-signalr.service.mjs +100 -0
- package/esm2020/lib/services/storage.service.mjs +33 -0
- package/esm2020/lib/services/toast-msg.service.mjs +95 -0
- package/esm2020/lib/services/vapt-validation.service.mjs +31 -0
- package/esm2020/public-api.mjs +13 -0
- package/fesm2015/common-header-lib.mjs +4165 -0
- package/fesm2015/common-header-lib.mjs.map +1 -0
- package/fesm2020/common-header-lib.mjs +4146 -0
- package/fesm2020/common-header-lib.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/Validators/noSpaceAllowed.d.ts +2 -0
- package/lib/common-header-lib.component.d.ts +148 -0
- package/lib/common-header-lib.module.d.ts +43 -0
- package/lib/common-header-lib.service.d.ts +25 -0
- package/lib/components/confirm-dialog/confirm-dialog.component.d.ts +13 -0
- package/lib/components/general-configuration/general-configuration.component.d.ts +86 -0
- package/lib/components/general-configuration/landingpg-config/landingpg-config.component.d.ts +37 -0
- package/lib/components/general-configuration/timezone-configuration/timezone-configuration.component.d.ts +38 -0
- package/lib/components/grid-pagination/grid-pagination.component.d.ts +20 -0
- package/lib/components/ng-translation/ng-translation.component.d.ts +22 -0
- package/lib/components/no-service-my-access-pg/no-service-my-access-pg.component.d.ts +8 -0
- package/lib/components/notification-sidebar/notification-sidebar.component.d.ts +16 -0
- package/lib/components/side-popup/side-popup.component.d.ts +14 -0
- package/lib/components/user-mailbox/user-mailbox.component.d.ts +40 -0
- package/lib/components/user-sidebar/user-sidebar.component.d.ts +61 -0
- package/lib/components/viewpassword-popup/viewpassword-popup.component.d.ts +47 -0
- package/lib/model/data_model.d.ts +184 -0
- package/lib/pipes/custome-dateformat.pipe.d.ts +8 -0
- package/lib/pipes/date-diff.pipe.d.ts +9 -0
- package/lib/pipes/slice-to-two.pipe.d.ts +7 -0
- package/lib/services/EncrypDecryp_RSA.service.d.ts +15 -0
- package/lib/services/async-passwordcheck.service.d.ts +18 -0
- package/lib/services/cookie-storage-manager.service.d.ts +16 -0
- package/lib/services/encrpdata.service.d.ts +12 -0
- package/lib/services/encrydecrydata.service.d.ts +33 -0
- package/lib/services/event.service.d.ts +30 -0
- package/lib/services/http/http-common.service.d.ts +30 -0
- package/lib/services/http/http-general-config.service.d.ts +15 -0
- package/lib/services/rest-login-form.service.d.ts +39 -0
- package/lib/services/rest-signalr.service.d.ts +23 -0
- package/lib/services/storage.service.d.ts +11 -0
- package/lib/services/toast-msg.service.d.ts +21 -0
- package/lib/services/vapt-validation.service.d.ts +7 -0
- package/package.json +49 -0
- package/public-api.d.ts +8 -0
- package/src/assets/i18n/ar.json +83 -0
- package/src/assets/i18n/de.json +83 -0
- package/src/assets/i18n/en.json +83 -0
- package/src/assets/i18n/es.json +83 -0
- package/src/assets/i18n/fr.json +83 -0
- package/src/assets/i18n/hi.json +83 -0
- package/src/assets/i18n/ja.json +83 -0
- package/src/assets/i18n/ko.json +83 -0
- package/src/assets/images/APP019.svg +6 -0
- package/src/assets/images/APP020.svg +4 -0
- package/src/assets/images/APP021.svg +6 -0
- package/src/assets/images/APP022.svg +6 -0
- package/src/assets/images/APP023.svg +11 -0
- package/src/assets/images/APP024.svg +9 -0
- package/src/assets/images/APP025.svg +8 -0
- package/src/assets/images/APP026.svg +4 -0
- package/src/assets/images/APP027.svg +5 -0
- package/src/assets/images/APP028.svg +6 -0
- package/src/assets/images/APP029.svg +12 -0
- package/src/assets/images/APP030.svg +20 -0
- package/src/assets/images/APP031.svg +14 -0
- package/src/assets/images/APP032.svg +17 -0
- package/src/assets/images/Frame.svg +104 -0
- package/src/assets/images/apps-1.svg +22 -0
- package/src/assets/images/bell-icon.svg +3 -0
- package/src/assets/images/check_circle.svg +3 -0
- package/src/assets/images/close copy.svg +5 -0
- package/src/assets/images/close.svg +5 -0
- package/src/assets/images/copy-img.svg +3 -0
- package/src/assets/images/cross-search.svg +4 -0
- package/src/assets/images/domain_img.svg +3 -0
- package/src/assets/images/east.svg +3 -0
- package/src/assets/images/error.svg +3 -0
- package/src/assets/images/filepath.svg +8 -0
- package/src/assets/images/flag1.svg +3 -0
- package/src/assets/images/gc-mail.svg +3 -0
- package/src/assets/images/grey-arrow.svg +3 -0
- package/src/assets/images/info.svg +3 -0
- package/src/assets/images/local.svg +3 -0
- package/src/assets/images/lock-pass.svg +3 -0
- package/src/assets/images/lock1.svg +3 -0
- package/src/assets/images/login-bg/default_bg.svg +448 -0
- package/src/assets/images/login-bg/visibility.svg +3 -0
- package/src/assets/images/login-bg/visibility_off.svg +3 -0
- package/src/assets/images/logo.png +0 -0
- package/src/assets/images/logout.svg +3 -0
- package/src/assets/images/mail-icon.svg +3 -0
- package/src/assets/images/marker-pin.svg +4 -0
- package/src/assets/images/noti_ticket.svg +3 -0
- package/src/assets/images/pass-img.svg +3 -0
- package/src/assets/images/refresh-1.svg +3 -0
- package/src/assets/images/schedule.svg +1 -0
- package/src/assets/images/search-filter.svg +3 -0
- package/src/assets/images/search-icon.svg +3 -0
- package/src/assets/images/settings.svg +3 -0
- package/src/assets/images/successful.svg +10 -0
- package/src/assets/images/user-name.svg +3 -0
- package/src/assets/scss/_sidebar.scss +267 -0
- package/src/assets/scss/styles.scss +577 -0
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { Router } from '@angular/router';
|
|
2
|
+
import { Component, EventEmitter, Output, } from '@angular/core';
|
|
3
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
4
|
+
import { CookieStorageManagerService } from '../../services/cookie-storage-manager.service';
|
|
5
|
+
import { DialogService } from 'primeng/dynamicdialog';
|
|
6
|
+
import { ToastMsgService } from '../../services/toast-msg.service';
|
|
7
|
+
import { GlobalConstants, RoutePaths, errorMsg } from '../../model/data_model';
|
|
8
|
+
import { CommonHeaderLibService } from '../../common-header-lib.service';
|
|
9
|
+
import { GeneralConfigurationComponent } from '../general-configuration/general-configuration.component';
|
|
10
|
+
import { StorageService } from '../../services/storage.service';
|
|
11
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
12
|
+
import { HttpCommonService } from '../../services/http/http-common.service';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "primeng/dynamicdialog";
|
|
15
|
+
import * as i2 from "../../services/cookie-storage-manager.service";
|
|
16
|
+
import * as i3 from "@angular/router";
|
|
17
|
+
import * as i4 from "../../services/toast-msg.service";
|
|
18
|
+
import * as i5 from "../../services/storage.service";
|
|
19
|
+
import * as i6 from "../../common-header-lib.service";
|
|
20
|
+
import * as i7 from "@ngx-translate/core";
|
|
21
|
+
import * as i8 from "../../services/http/http-common.service";
|
|
22
|
+
import * as i9 from "@angular/common";
|
|
23
|
+
import * as i10 from "primeng/skeleton";
|
|
24
|
+
import * as i11 from "../ng-translation/ng-translation.component";
|
|
25
|
+
import * as i12 from "../../pipes/slice-to-two.pipe";
|
|
26
|
+
export class UserSidebarComponent {
|
|
27
|
+
constructor(dialogService, _cookieService, route, msgService, _localStorage, libService, translateService, httpCommonService) {
|
|
28
|
+
this.dialogService = dialogService;
|
|
29
|
+
this._cookieService = _cookieService;
|
|
30
|
+
this.route = route;
|
|
31
|
+
this.msgService = msgService;
|
|
32
|
+
this._localStorage = _localStorage;
|
|
33
|
+
this.libService = libService;
|
|
34
|
+
this.translateService = translateService;
|
|
35
|
+
this.httpCommonService = httpCommonService;
|
|
36
|
+
// @Input() apiURL: string = '';
|
|
37
|
+
// @Output('langChange') langChange = new EventEmitter<any>();
|
|
38
|
+
this.userDetails = {};
|
|
39
|
+
this.showProfile = false;
|
|
40
|
+
this.userdisplayName = '';
|
|
41
|
+
this.userFirstName = '';
|
|
42
|
+
this.userLastName = '';
|
|
43
|
+
this.userLastLoggedIn = '';
|
|
44
|
+
// private LoggedInUserID: string = '';
|
|
45
|
+
this.unsubscribeAPIEventListenerData = new Subject();
|
|
46
|
+
this.closeDialogBox = new EventEmitter();
|
|
47
|
+
// public userSessionID: string = '';
|
|
48
|
+
this.sec = 1;
|
|
49
|
+
this.min = 2;
|
|
50
|
+
this.Hr = 30;
|
|
51
|
+
this.isOpenSidePopup = false;
|
|
52
|
+
this.showUserDetails = false;
|
|
53
|
+
// private themeService: ThemeService,
|
|
54
|
+
// private fontService: FontService,
|
|
55
|
+
// private cookieService: CookieService,
|
|
56
|
+
// this.fetchedSavedData();
|
|
57
|
+
}
|
|
58
|
+
ngOnInit() {
|
|
59
|
+
this.getLoggedInuserDteils();
|
|
60
|
+
}
|
|
61
|
+
//Method: Open User Setting Panel
|
|
62
|
+
openUserSettingPanel() {
|
|
63
|
+
this.ref = this.dialogService.open(GeneralConfigurationComponent, {
|
|
64
|
+
header: this.translateService.instant('Generic_lib.GeneralConfiguration'),
|
|
65
|
+
styleClass: 'general-configuration',
|
|
66
|
+
// data: {
|
|
67
|
+
// apiURL: this.apiURL,
|
|
68
|
+
// },
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
getLoggedInuserDteils() {
|
|
72
|
+
this.httpCommonService
|
|
73
|
+
.getLoggedInUserDetails()
|
|
74
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
75
|
+
.subscribe((result) => {
|
|
76
|
+
if (result && result['success'] && result['result']) {
|
|
77
|
+
console.log('UserDetails: ', this.userDetails);
|
|
78
|
+
this.userDetails = result['result'];
|
|
79
|
+
this.userdisplayName = this.userDetails['userDisplayName'];
|
|
80
|
+
this.showProfile = true;
|
|
81
|
+
this.getTotalSessionTime();
|
|
82
|
+
this.setLoggedInUserName(this.userdisplayName);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.showProfile = false;
|
|
86
|
+
this.userDetails = {};
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
setLoggedInUserName(userdisplayName) {
|
|
91
|
+
if (userdisplayName && userdisplayName.includes(' ')) {
|
|
92
|
+
let splitStringArr = userdisplayName.split(' ');
|
|
93
|
+
this.userFirstName = splitStringArr[0];
|
|
94
|
+
this.userLastName = splitStringArr[1];
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
this.userdisplayName = userdisplayName;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
getcloseDialogBox() {
|
|
101
|
+
this.closeDialogBox.emit(true);
|
|
102
|
+
}
|
|
103
|
+
getUserLoggedInTime() {
|
|
104
|
+
let LastLoggedIn = this.convertUTCToLocal(this.userDetails['lastLogIn']);
|
|
105
|
+
let LastLoggedInDate = new Date(LastLoggedIn);
|
|
106
|
+
this.userLastLoggedIn = LastLoggedInDate.toLocaleString();
|
|
107
|
+
}
|
|
108
|
+
logoutCurrentUser() {
|
|
109
|
+
this.libService
|
|
110
|
+
.getInitiateUserLogout()
|
|
111
|
+
.pipe()
|
|
112
|
+
.subscribe((res) => {
|
|
113
|
+
if (res) {
|
|
114
|
+
this._cookieService.clearAllCookies();
|
|
115
|
+
this._localStorage.clearData();
|
|
116
|
+
if (res && res['spLogoutUrls'] && res['spLogoutUrls'].length > 0) {
|
|
117
|
+
this.destoryAllSessions(res['spLogoutUrls']);
|
|
118
|
+
}
|
|
119
|
+
if (res?.['identity']) {
|
|
120
|
+
this.userWithWindowAuthentication();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const path = '/' + RoutePaths.LOGINPG_PATH;
|
|
124
|
+
const urlnew = new URL(window.location.href).origin + '/#' + path;
|
|
125
|
+
window.location.href = urlnew;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.msgService.error(errorMsg.LOGOUTERROR);
|
|
130
|
+
// window.location.href = new URL(window.location.href).origin + '/#/login';
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* This function destroys all user sessions by opening multiple SAML logout URLs in new browser tabs.
|
|
136
|
+
*/
|
|
137
|
+
destoryAllSessions(samlUrls) {
|
|
138
|
+
samlUrls.forEach((url) => {
|
|
139
|
+
// let enCodedURL = encodeURI(url);
|
|
140
|
+
console.log('URL: ', url);
|
|
141
|
+
window.open(url, '_blank');
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
userWithWindowAuthentication() {
|
|
145
|
+
const path = '/' + RoutePaths.LOGOUT_PATH;
|
|
146
|
+
this.route.navigateByUrl(path);
|
|
147
|
+
}
|
|
148
|
+
getTotalSessionTime() {
|
|
149
|
+
// let LastLogin = this.userDetails['lastLogIn'];
|
|
150
|
+
// LastLogin = LastLogin.toLocaleString();
|
|
151
|
+
// let dateParts = this.userDetails['currentLogIn'].split(' ')[0].split('/');
|
|
152
|
+
// let timeParts = this.userDetails['currentLogIn'].split(' ')[1].split(':');
|
|
153
|
+
// let loginTime = new Date(
|
|
154
|
+
// dateParts[2],
|
|
155
|
+
// dateParts[1] - 1,
|
|
156
|
+
// dateParts[0],
|
|
157
|
+
// timeParts[0],
|
|
158
|
+
// timeParts[1]
|
|
159
|
+
// );
|
|
160
|
+
// loginTime = new Date(loginTime).toLocaleString();
|
|
161
|
+
// Convert local time to UTC
|
|
162
|
+
// currentTime = new Date(
|
|
163
|
+
// currentTime.getTime() + currentTime.getTimezoneOffset() * 60000
|
|
164
|
+
// );
|
|
165
|
+
let loginTime = this.convertUTCToLocal(this.userDetails['currentLogIn']);
|
|
166
|
+
// console.log('loginTime: ', loginTime);
|
|
167
|
+
let loginTimeDate = new Date(loginTime);
|
|
168
|
+
let currentTime = new Date();
|
|
169
|
+
// console.log('Login Time Date: ', loginTimeDate);
|
|
170
|
+
// console.log('Current Time: ', currentTime);
|
|
171
|
+
let milliseconds = currentTime.valueOf() - loginTimeDate.valueOf();
|
|
172
|
+
let seconds = Math.floor(milliseconds / 1000);
|
|
173
|
+
let minutes = Math.floor(seconds / 60);
|
|
174
|
+
let hours = Math.floor(minutes / 60);
|
|
175
|
+
seconds = seconds % 60;
|
|
176
|
+
minutes = minutes % 60;
|
|
177
|
+
this.Hr = hours;
|
|
178
|
+
this.min = minutes;
|
|
179
|
+
this.sec = seconds;
|
|
180
|
+
// console.log('Session Total', this.Hr, this.min, this.sec);
|
|
181
|
+
setInterval(() => {
|
|
182
|
+
this.updateTimer();
|
|
183
|
+
}, 1000);
|
|
184
|
+
}
|
|
185
|
+
updateTimer() {
|
|
186
|
+
if (this.sec < 59) {
|
|
187
|
+
this.sec += 1;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this.sec = 0;
|
|
191
|
+
if (this.min < 59) {
|
|
192
|
+
this.min += 1;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
this.min = 0;
|
|
196
|
+
this.Hr += 1;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
convertUTCToLocal(newdate) {
|
|
201
|
+
let localDate = newdate + 'Z';
|
|
202
|
+
localDate = localDate.toLocaleString();
|
|
203
|
+
// console.log('LOcal: ', localDate);
|
|
204
|
+
return localDate;
|
|
205
|
+
}
|
|
206
|
+
OpenArconLearningCenter() {
|
|
207
|
+
const url = GlobalConstants.PlugInDownloadURL;
|
|
208
|
+
console.log(url);
|
|
209
|
+
window.open(url, '_blank');
|
|
210
|
+
}
|
|
211
|
+
//close Popup
|
|
212
|
+
closeUserSettingPanel() {
|
|
213
|
+
if (this.ref) {
|
|
214
|
+
this.ref.close();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// languageChange(event: any) {
|
|
218
|
+
// if (!event) return;
|
|
219
|
+
// // this.langChange.emit(event);
|
|
220
|
+
// }
|
|
221
|
+
//*Global Font and Theme
|
|
222
|
+
getRedTheme() {
|
|
223
|
+
// const active = this.themeService.getActiveTheme();
|
|
224
|
+
// if (
|
|
225
|
+
// active.name === "blue" ||
|
|
226
|
+
// active.name === "black" ||
|
|
227
|
+
// active.name === "red"
|
|
228
|
+
// ) {
|
|
229
|
+
// this.themeService.setTheme("red");
|
|
230
|
+
// this.cookieService.set("themeColor", "red");
|
|
231
|
+
// }
|
|
232
|
+
}
|
|
233
|
+
getBlackTheme() {
|
|
234
|
+
// const active = this.themeService.getActiveTheme();
|
|
235
|
+
// if (
|
|
236
|
+
// active.name === "blue" ||
|
|
237
|
+
// active.name === "black" ||
|
|
238
|
+
// active.name === "red"
|
|
239
|
+
// ) {
|
|
240
|
+
// this.themeService.setTheme("blue");
|
|
241
|
+
// this.cookieService.set("themeColor", "blue");
|
|
242
|
+
// }
|
|
243
|
+
}
|
|
244
|
+
getBlueTheme() {
|
|
245
|
+
// const active = this.themeService.getActiveTheme();
|
|
246
|
+
// if (
|
|
247
|
+
// active.name === "blue" ||
|
|
248
|
+
// active.name === "black" ||
|
|
249
|
+
// active.name === "red"
|
|
250
|
+
// ) {
|
|
251
|
+
// this.themeService.setTheme("black");
|
|
252
|
+
// this.cookieService.set("themeColor", "black");
|
|
253
|
+
// }
|
|
254
|
+
}
|
|
255
|
+
// Accessibility Fonts sizes
|
|
256
|
+
getSmallFont() {
|
|
257
|
+
// this.fontService.setFont("smFont");
|
|
258
|
+
}
|
|
259
|
+
getMediumFont() {
|
|
260
|
+
// this.fontService.setFont("mdFont");
|
|
261
|
+
}
|
|
262
|
+
getLargeFont() {
|
|
263
|
+
// this.fontService.setFont("lgFont");
|
|
264
|
+
}
|
|
265
|
+
ngOnDestroy() {
|
|
266
|
+
this.closeUserSettingPanel();
|
|
267
|
+
this.unsubscribeAPIEventListenerData.next(true);
|
|
268
|
+
this.unsubscribeAPIEventListenerData.complete();
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
UserSidebarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UserSidebarComponent, deps: [{ token: i1.DialogService }, { token: i2.CookieStorageManagerService }, { token: i3.Router }, { token: i4.ToastMsgService }, { token: i5.StorageService }, { token: i6.CommonHeaderLibService }, { token: i7.TranslateService }, { token: i8.HttpCommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
272
|
+
UserSidebarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: UserSidebarComponent, selector: "app-user-sidebar", outputs: { closeDialogBox: "closeDialogBox" }, providers: [DialogService], ngImport: i0, template: "<div class=\"white-bg\">\r\n <div class=\" sidebar-outer white-bg\">\r\n <div class=\"sidebar-header grey-background\">\r\n <div class=\"sh-top\">\r\n <div class=\"sh-top-left d-flex\">\r\n <img src=\"assets/common-header-lib/images/logout.svg\" class=\"imgs\" alt=\"user\">\r\n <div class=\"mx-2 log-text\" (click)=\"logoutCurrentUser()\">{{\"Generic_lib.Logout\" | translate}}</div>\r\n </div>\r\n <div class=\"sh-top-right\">\r\n <button type=\"button\" class=\"common-bn tertiary-btn\">\r\n <img src=\"assets/common-header-lib/images/close.svg\" class=\"imgs\" alt=\"close icon\" title=\"Close\"\r\n (click)=\"getcloseDialogBox()\">\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showProfile; else LoadingAnimation\">\r\n <div class=\"sh-bottom d-flex pt-3\">\r\n <ng-container *ngIf=\"userdisplayName && userdisplayName.length > 0; else defaultName\">\r\n <div class=\"initial-text\">\r\n {{ userdisplayName | sliceToTwo }}\r\n </div>\r\n </ng-container>\r\n <ng-template #defaultName>\r\n <div class=\"initial-text\">\r\n {{ 'NA' }}\r\n </div>\r\n </ng-template>\r\n <div class=\"sh-bottom-content\">\r\n <h4 class=\"title\">{{ userDetails['userDisplayName']}}</h4>\r\n <p>{{ userDetails['emailID']}}</p>\r\n <div class=\"sh-bottom-content-ls\">\r\n <ng-container\r\n *ngIf=\"userDetails['lastLogIn'] && !userDetails['lastLogIn'].includes('NA'); else InvalidDate\">\r\n <p style=\"margin-right: 5px;\">{{\"Generic_lib.LastSession\" | translate}} : </p>\r\n <p>{{userDetails['lastLogIn']}}</p>\r\n </ng-container>\r\n <ng-template #InvalidDate>\r\n <p style=\"margin-right: 5px;\">{{\"Generic_lib.LastSession\" | translate}} : </p>\r\n <p>NA</p>\r\n </ng-template>\r\n </div>\r\n <div class=\"sh-bottom-content-ls session-content\">\r\n <p tyle=\"margin-right: 5px;\">{{\"Generic_lib.CurrentSession\" | translate}} : </p>\r\n <p>{{Hr}} {{\"Generic_lib.hrs\" | translate}} {{min}} {{\"Generic_lib.min\" | translate}} {{sec}}\r\n {{\"Generic_lib.secs\" | translate}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #LoadingAnimation>\r\n <div class=\"loading-skeleton d-flex p-3\">\r\n <p-skeleton shape=\"circle\" size=\"4rem\" styleClass=\"mr-2\"></p-skeleton>\r\n <div class=\"ms-1\">\r\n <p-skeleton width=\"10rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\".7rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"5rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton height=\".5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"sidebar-body\">\r\n <div class=\"sb-list pb-20px\">\r\n <ul>\r\n <li class=\"grey-bg-hover\">\r\n <img src=\"assets/common-header-lib/images/domain_img.svg\" loading=\"lazy\">\r\n <div class=\"mx-2 lang-dropdown\">\r\n <ng-translation></ng-translation> <!-- (langChange)=\"languageChange($event)\" -->\r\n </div>\r\n </li>\r\n <li class=\"grey-bg-hover\" (click)=\"OpenArconLearningCenter()\">\r\n <img src=\"assets/common-header-lib/images/local.svg\" class=\"imgs\" alt=\"Arcon\">\r\n <p class=\"mx-2\">{{\"Generic_lib.ArconLearningCenter\" | translate}}</p>\r\n </li>\r\n\r\n <li class=\"grey-bg-hover\">\r\n <img src=\"assets/common-header-lib/images/settings.svg\" alt=\"settings\">\r\n <p class=\"mx-2\" (click)=\"openUserSettingPanel()\">{{\"Generic_lib.GeneralConfiguration\" | translate}}</p>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Global Font and Theme -->\r\n <!-- <div class=\"accessibility-container d-flex justify-content-between\">\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getSmallFont()\">\r\n <span>A-</span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getMediumFont()\">\r\n <span>A</span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getLargeFont()\">\r\n <span>A+</span>\r\n </button>\r\n </div>\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getRedTheme()\">\r\n <span class=\"theme theme-red\"></span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getBlackTheme()\">\r\n <span class=\"theme theme-black\"></span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getBlueTheme()\">\r\n <span class=\"theme theme-blue\"></span>\r\n </button>\r\n </div>\r\n </div> -->\r\n</div>\r\n", styles: [".white-bg{background-color:#fff!important;width:100%!important}.grey-background{background-color:#f6f7fb!important}.imgs{width:20px!important}.cursor-pointer{cursor:pointer}.sidebar-outer{width:100%!important;float:left!important}.sidebar-outer .sidebar-header{padding:12px 15px!important}.sidebar-outer .sidebar-header .sh-top{display:flex!important;align-items:center!important;justify-content:space-between!important}.sidebar-outer .sidebar-header .sh-top .sh-top-left{display:flex!important;align-items:center!important}.sidebar-outer .sidebar-header .sh-top .sh-top-left .log-text{font-size:14px!important;font-weight:500!important;cursor:pointer!important}.sidebar-outer .sidebar-header .sh-top .sh-top-right button{height:24px!important;border:none!important;background-color:transparent!important}.sidebar-outer .sidebar-header .sh-bottom{display:flex!important;padding-top:16px!important}.sidebar-outer .sidebar-header .sh-bottom .initial-text{width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-size:15px;border-radius:50%;color:#fff;background-color:#8e562e}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content{padding-left:14px!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .title{font-size:17px!important;font-weight:600!important;height:21px!important;margin-bottom:2px!important;line-height:26px!important;color:#292f4c!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content p{font-size:14px!important;line-height:22px!important;color:#676879!important;margin-bottom:0!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .sh-bottom-content-ls{display:flex!important;align-items:center!important;font-size:12px!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .session-content{position:relative!important;bottom:2px!important}.sidebar-outer .sidebar-body{padding:12px 20px!important;width:100%!important}.sidebar-outer .sidebar-body .sb-list{width:100%!important}.sidebar-outer .sidebar-body .sb-list ul{width:100%!important;list-style:none;padding-left:0;margin:0}.sidebar-outer .sidebar-body .sb-list ul li{display:flex!important;align-items:center!important;padding:8px 2px!important;cursor:pointer!important}.sidebar-outer .sidebar-body .sb-list ul li img{width:18px}.sidebar-outer .sidebar-body .sb-list ul li p{margin:0 0 0 8px!important;font-size:14px!important}.sidebar-outer .sidebar-body .sb-list ul li .lang-dropdown{margin-left:8px!important}.accessibility-container{background-color:#eee;padding:7px 20px}.accessibility-container .btn{align-content:center;align-items:center;border:1px solid #9e9e9e;color:#707070;display:flex;font-size:10px;height:20px;justify-content:center;padding:0;width:20px;margin-right:5px;overflow:hidden}.accessibility-container .btn:last-child{margin-right:0}.accessibility-container .btn .theme{display:block;height:100%;margin-left:-50%;width:60%}.accessibility-container .btn .theme-red{background-color:#d4231d}.accessibility-container .btn .theme-black{background-color:#212121}.accessibility-container .btn .theme-blue{background-color:#4d91ea}\n"], dependencies: [{ kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i11.NgTranslationComponent, selector: "ng-translation" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i12.SliceToTwoPipe, name: "sliceToTwo" }] });
|
|
273
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UserSidebarComponent, decorators: [{
|
|
274
|
+
type: Component,
|
|
275
|
+
args: [{ selector: 'app-user-sidebar', providers: [DialogService], template: "<div class=\"white-bg\">\r\n <div class=\" sidebar-outer white-bg\">\r\n <div class=\"sidebar-header grey-background\">\r\n <div class=\"sh-top\">\r\n <div class=\"sh-top-left d-flex\">\r\n <img src=\"assets/common-header-lib/images/logout.svg\" class=\"imgs\" alt=\"user\">\r\n <div class=\"mx-2 log-text\" (click)=\"logoutCurrentUser()\">{{\"Generic_lib.Logout\" | translate}}</div>\r\n </div>\r\n <div class=\"sh-top-right\">\r\n <button type=\"button\" class=\"common-bn tertiary-btn\">\r\n <img src=\"assets/common-header-lib/images/close.svg\" class=\"imgs\" alt=\"close icon\" title=\"Close\"\r\n (click)=\"getcloseDialogBox()\">\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showProfile; else LoadingAnimation\">\r\n <div class=\"sh-bottom d-flex pt-3\">\r\n <ng-container *ngIf=\"userdisplayName && userdisplayName.length > 0; else defaultName\">\r\n <div class=\"initial-text\">\r\n {{ userdisplayName | sliceToTwo }}\r\n </div>\r\n </ng-container>\r\n <ng-template #defaultName>\r\n <div class=\"initial-text\">\r\n {{ 'NA' }}\r\n </div>\r\n </ng-template>\r\n <div class=\"sh-bottom-content\">\r\n <h4 class=\"title\">{{ userDetails['userDisplayName']}}</h4>\r\n <p>{{ userDetails['emailID']}}</p>\r\n <div class=\"sh-bottom-content-ls\">\r\n <ng-container\r\n *ngIf=\"userDetails['lastLogIn'] && !userDetails['lastLogIn'].includes('NA'); else InvalidDate\">\r\n <p style=\"margin-right: 5px;\">{{\"Generic_lib.LastSession\" | translate}} : </p>\r\n <p>{{userDetails['lastLogIn']}}</p>\r\n </ng-container>\r\n <ng-template #InvalidDate>\r\n <p style=\"margin-right: 5px;\">{{\"Generic_lib.LastSession\" | translate}} : </p>\r\n <p>NA</p>\r\n </ng-template>\r\n </div>\r\n <div class=\"sh-bottom-content-ls session-content\">\r\n <p tyle=\"margin-right: 5px;\">{{\"Generic_lib.CurrentSession\" | translate}} : </p>\r\n <p>{{Hr}} {{\"Generic_lib.hrs\" | translate}} {{min}} {{\"Generic_lib.min\" | translate}} {{sec}}\r\n {{\"Generic_lib.secs\" | translate}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #LoadingAnimation>\r\n <div class=\"loading-skeleton d-flex p-3\">\r\n <p-skeleton shape=\"circle\" size=\"4rem\" styleClass=\"mr-2\"></p-skeleton>\r\n <div class=\"ms-1\">\r\n <p-skeleton width=\"10rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"8rem\" height=\".7rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"5rem\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton height=\".5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"sidebar-body\">\r\n <div class=\"sb-list pb-20px\">\r\n <ul>\r\n <li class=\"grey-bg-hover\">\r\n <img src=\"assets/common-header-lib/images/domain_img.svg\" loading=\"lazy\">\r\n <div class=\"mx-2 lang-dropdown\">\r\n <ng-translation></ng-translation> <!-- (langChange)=\"languageChange($event)\" -->\r\n </div>\r\n </li>\r\n <li class=\"grey-bg-hover\" (click)=\"OpenArconLearningCenter()\">\r\n <img src=\"assets/common-header-lib/images/local.svg\" class=\"imgs\" alt=\"Arcon\">\r\n <p class=\"mx-2\">{{\"Generic_lib.ArconLearningCenter\" | translate}}</p>\r\n </li>\r\n\r\n <li class=\"grey-bg-hover\">\r\n <img src=\"assets/common-header-lib/images/settings.svg\" alt=\"settings\">\r\n <p class=\"mx-2\" (click)=\"openUserSettingPanel()\">{{\"Generic_lib.GeneralConfiguration\" | translate}}</p>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Global Font and Theme -->\r\n <!-- <div class=\"accessibility-container d-flex justify-content-between\">\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getSmallFont()\">\r\n <span>A-</span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getMediumFont()\">\r\n <span>A</span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getLargeFont()\">\r\n <span>A+</span>\r\n </button>\r\n </div>\r\n <div class=\"d-flex\">\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getRedTheme()\">\r\n <span class=\"theme theme-red\"></span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getBlackTheme()\">\r\n <span class=\"theme theme-black\"></span>\r\n </button>\r\n <button class=\"btn btn-light btn-small rounded-circle\" (click)=\"getBlueTheme()\">\r\n <span class=\"theme theme-blue\"></span>\r\n </button>\r\n </div>\r\n </div> -->\r\n</div>\r\n", styles: [".white-bg{background-color:#fff!important;width:100%!important}.grey-background{background-color:#f6f7fb!important}.imgs{width:20px!important}.cursor-pointer{cursor:pointer}.sidebar-outer{width:100%!important;float:left!important}.sidebar-outer .sidebar-header{padding:12px 15px!important}.sidebar-outer .sidebar-header .sh-top{display:flex!important;align-items:center!important;justify-content:space-between!important}.sidebar-outer .sidebar-header .sh-top .sh-top-left{display:flex!important;align-items:center!important}.sidebar-outer .sidebar-header .sh-top .sh-top-left .log-text{font-size:14px!important;font-weight:500!important;cursor:pointer!important}.sidebar-outer .sidebar-header .sh-top .sh-top-right button{height:24px!important;border:none!important;background-color:transparent!important}.sidebar-outer .sidebar-header .sh-bottom{display:flex!important;padding-top:16px!important}.sidebar-outer .sidebar-header .sh-bottom .initial-text{width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-size:15px;border-radius:50%;color:#fff;background-color:#8e562e}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content{padding-left:14px!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .title{font-size:17px!important;font-weight:600!important;height:21px!important;margin-bottom:2px!important;line-height:26px!important;color:#292f4c!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content p{font-size:14px!important;line-height:22px!important;color:#676879!important;margin-bottom:0!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .sh-bottom-content-ls{display:flex!important;align-items:center!important;font-size:12px!important}.sidebar-outer .sidebar-header .sh-bottom .sh-bottom-content .session-content{position:relative!important;bottom:2px!important}.sidebar-outer .sidebar-body{padding:12px 20px!important;width:100%!important}.sidebar-outer .sidebar-body .sb-list{width:100%!important}.sidebar-outer .sidebar-body .sb-list ul{width:100%!important;list-style:none;padding-left:0;margin:0}.sidebar-outer .sidebar-body .sb-list ul li{display:flex!important;align-items:center!important;padding:8px 2px!important;cursor:pointer!important}.sidebar-outer .sidebar-body .sb-list ul li img{width:18px}.sidebar-outer .sidebar-body .sb-list ul li p{margin:0 0 0 8px!important;font-size:14px!important}.sidebar-outer .sidebar-body .sb-list ul li .lang-dropdown{margin-left:8px!important}.accessibility-container{background-color:#eee;padding:7px 20px}.accessibility-container .btn{align-content:center;align-items:center;border:1px solid #9e9e9e;color:#707070;display:flex;font-size:10px;height:20px;justify-content:center;padding:0;width:20px;margin-right:5px;overflow:hidden}.accessibility-container .btn:last-child{margin-right:0}.accessibility-container .btn .theme{display:block;height:100%;margin-left:-50%;width:60%}.accessibility-container .btn .theme-red{background-color:#d4231d}.accessibility-container .btn .theme-black{background-color:#212121}.accessibility-container .btn .theme-blue{background-color:#4d91ea}\n"] }]
|
|
276
|
+
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.CookieStorageManagerService }, { type: i3.Router }, { type: i4.ToastMsgService }, { type: i5.StorageService }, { type: i6.CommonHeaderLibService }, { type: i7.TranslateService }, { type: i8.HttpCommonService }]; }, propDecorators: { closeDialogBox: [{
|
|
277
|
+
type: Output
|
|
278
|
+
}] } });
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zaWRlYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXItbGliL3NyYy9saWIvY29tcG9uZW50cy91c2VyLXNpZGViYXIvdXNlci1zaWRlYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXItbGliL3NyYy9saWIvY29tcG9uZW50cy91c2VyLXNpZGViYXIvdXNlci1zaWRlYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFJWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDNUYsT0FBTyxFQUFFLGFBQWEsRUFBb0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDekcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVE1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RDtRQUNyRCxPQUFPO1FBQ1AsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQiwwQkFBMEI7UUFDMUIsTUFBTTtRQUNOLHdDQUF3QztRQUN4QyxrREFBa0Q7UUFDbEQsSUFBSTtJQUNOLENBQUM7SUFDRCxZQUFZO1FBQ1YscURBQXFEO1FBQ3JELE9BQU87UUFDUCw4QkFBOEI7UUFDOUIsK0JBQStCO1FBQy9CLDBCQUEwQjtRQUMxQixNQUFNO1FBQ04seUNBQXlDO1FBQ3pDLG1EQUFtRDtRQUNuRCxJQUFJO0lBQ04sQ0FBQztJQUVELDRCQUE0QjtJQUM1QixZQUFZO1FBQ1Ysc0NBQXNDO0lBQ3hDLENBQUM7SUFFRCxhQUFhO1FBQ1gsc0NBQXNDO0lBQ3hDLENBQUM7SUFFRCxZQUFZO1FBQ1Ysc0NBQXNDO0lBQ3hDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsK0JBQStCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEQsQ0FBQzs7aUhBN1FVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLDBGQUZwQixDQUFDLGFBQWEsQ0FBQywwQkN4QjVCLDhzS0E2R0E7MkZEbkZhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxrQkFBa0IsYUFHakIsQ0FBQyxhQUFhLENBQUM7a1VBZWhCLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb29raWVTdG9yYWdlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb29raWUtc3RvcmFnZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgVG9hc3RNc2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9hc3QtbXNnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxDb25zdGFudHMsIFJvdXRlUGF0aHMsIGVycm9yTXNnIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YV9tb2RlbCc7XHJcbmltcG9ydCB7IENvbW1vbkhlYWRlckxpYlNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24taGVhZGVyLWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJhbENvbmZpZ3VyYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9nZW5lcmFsLWNvbmZpZ3VyYXRpb24vZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvaHR0cC1jb21tb24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC11c2VyLXNpZGViYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLXNpZGViYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VzZXItc2lkZWJhci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW0RpYWxvZ1NlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlclNpZGViYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gQElucHV0KCkgYXBpVVJMOiBzdHJpbmcgPSAnJztcclxuICAvLyBAT3V0cHV0KCdsYW5nQ2hhbmdlJykgbGFuZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwdWJsaWMgdXNlckRldGFpbHM6IGFueSA9IHt9O1xyXG4gIHB1YmxpYyBzaG93UHJvZmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VyZGlzcGxheU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyB1c2VyRmlyc3ROYW1lOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgdXNlckxhc3ROYW1lOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgdXNlckxhc3RMb2dnZWRJbjogc3RyaW5nID0gJyc7XHJcbiAgLy8gcHJpdmF0ZSBMb2dnZWRJblVzZXJJRDogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhOiBTdWJqZWN0PEJvb2xlYW4+ID1cclxuICAgIG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlRGlhbG9nQm94ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIHByaXZhdGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmIHwgdW5kZWZpbmVkO1xyXG4gIC8vIHB1YmxpYyB1c2VyU2Vzc2lvbklEOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgc2VjOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBtaW46IG51bWJlciA9IDI7XHJcbiAgcHVibGljIEhyOiBudW1iZXIgPSAzMDtcclxuICBpc09wZW5TaWRlUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93VXNlckRldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Nvb2tpZVNlcnZpY2U6IENvb2tpZVN0b3JhZ2VNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbXNnU2VydmljZTogVG9hc3RNc2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbG9jYWxTdG9yYWdlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGliU2VydmljZTogQ29tbW9uSGVhZGVyTGliU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cENvbW1vblNlcnZpY2U6IEh0dHBDb21tb25TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgLy8gcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcclxuICAgIC8vIHByaXZhdGUgZm9udFNlcnZpY2U6IEZvbnRTZXJ2aWNlLFxyXG4gICAgLy8gcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxyXG4gICAgLy8gdGhpcy5mZXRjaGVkU2F2ZWREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0TG9nZ2VkSW51c2VyRHRlaWxzKCk7XHJcbiAgfVxyXG5cclxuICAvL01ldGhvZDogT3BlbiBVc2VyIFNldHRpbmcgUGFuZWxcclxuICBvcGVuVXNlclNldHRpbmdQYW5lbCgpIHtcclxuICAgIHRoaXMucmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oR2VuZXJhbENvbmZpZ3VyYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnR2VuZXJpY19saWIuR2VuZXJhbENvbmZpZ3VyYXRpb24nKSxcclxuICAgICAgc3R5bGVDbGFzczogJ2dlbmVyYWwtY29uZmlndXJhdGlvbicsXHJcbiAgICAgIC8vIGRhdGE6IHtcclxuICAgICAgLy8gICBhcGlVUkw6IHRoaXMuYXBpVVJMLFxyXG4gICAgICAvLyB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2dnZWRJbnVzZXJEdGVpbHMoKSB7XHJcbiAgICB0aGlzLmh0dHBDb21tb25TZXJ2aWNlXHJcbiAgICAgIC5nZXRMb2dnZWRJblVzZXJEZXRhaWxzKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0WydzdWNjZXNzJ10gJiYgcmVzdWx0WydyZXN1bHQnXSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1VzZXJEZXRhaWxzOiAnLCB0aGlzLnVzZXJEZXRhaWxzKTtcclxuICAgICAgICAgIHRoaXMudXNlckRldGFpbHMgPSByZXN1bHRbJ3Jlc3VsdCddO1xyXG4gICAgICAgICAgdGhpcy51c2VyZGlzcGxheU5hbWUgPSB0aGlzLnVzZXJEZXRhaWxzWyd1c2VyRGlzcGxheU5hbWUnXTtcclxuICAgICAgICAgIHRoaXMuc2hvd1Byb2ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5nZXRUb3RhbFNlc3Npb25UaW1lKCk7XHJcbiAgICAgICAgICB0aGlzLnNldExvZ2dlZEluVXNlck5hbWUodGhpcy51c2VyZGlzcGxheU5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dQcm9maWxlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVzZXJEZXRhaWxzID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldExvZ2dlZEluVXNlck5hbWUodXNlcmRpc3BsYXlOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICh1c2VyZGlzcGxheU5hbWUgJiYgdXNlcmRpc3BsYXlOYW1lLmluY2x1ZGVzKCcgJykpIHtcclxuICAgICAgbGV0IHNwbGl0U3RyaW5nQXJyID0gdXNlcmRpc3BsYXlOYW1lLnNwbGl0KCcgJyk7XHJcbiAgICAgIHRoaXMudXNlckZpcnN0TmFtZSA9IHNwbGl0U3RyaW5nQXJyWzBdO1xyXG4gICAgICB0aGlzLnVzZXJMYXN0TmFtZSA9IHNwbGl0U3RyaW5nQXJyWzFdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51c2VyZGlzcGxheU5hbWUgPSB1c2VyZGlzcGxheU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRjbG9zZURpYWxvZ0JveCgpIHtcclxuICAgIHRoaXMuY2xvc2VEaWFsb2dCb3guZW1pdCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJMb2dnZWRJblRpbWUoKSB7XHJcbiAgICBsZXQgTGFzdExvZ2dlZEluID0gdGhpcy5jb252ZXJ0VVRDVG9Mb2NhbCh0aGlzLnVzZXJEZXRhaWxzWydsYXN0TG9nSW4nXSk7XHJcbiAgICBsZXQgTGFzdExvZ2dlZEluRGF0ZSA9IG5ldyBEYXRlKExhc3RMb2dnZWRJbik7XHJcbiAgICB0aGlzLnVzZXJMYXN0TG9nZ2VkSW4gPSBMYXN0TG9nZ2VkSW5EYXRlLnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0Q3VycmVudFVzZXIoKSB7XHJcbiAgICB0aGlzLmxpYlNlcnZpY2VcclxuICAgICAgLmdldEluaXRpYXRlVXNlckxvZ291dCgpXHJcbiAgICAgIC5waXBlKClcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICB0aGlzLl9jb29raWVTZXJ2aWNlLmNsZWFyQWxsQ29va2llcygpO1xyXG4gICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXNbJ3NwTG9nb3V0VXJscyddICYmIHJlc1snc3BMb2dvdXRVcmxzJ10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlc3RvcnlBbGxTZXNzaW9ucyhyZXNbJ3NwTG9nb3V0VXJscyddKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzPy5bJ2lkZW50aXR5J10pIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyV2l0aFdpbmRvd0F1dGhlbnRpY2F0aW9uKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYXRoID0gJy8nICsgUm91dGVQYXRocy5MT0dJTlBHX1BBVEg7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybG5ldyA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLm9yaWdpbiArICcvIycgKyBwYXRoO1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybG5ldztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tc2dTZXJ2aWNlLmVycm9yKGVycm9yTXNnLkxPR09VVEVSUk9SKTtcclxuICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikub3JpZ2luICsgJy8jL2xvZ2luJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBhbGwgdXNlciBzZXNzaW9ucyBieSBvcGVuaW5nIG11bHRpcGxlIFNBTUwgbG9nb3V0IFVSTHMgaW4gbmV3IGJyb3dzZXIgdGFicy5cclxuICAgKi9cclxuICBwcml2YXRlIGRlc3RvcnlBbGxTZXNzaW9ucyhzYW1sVXJsczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHNhbWxVcmxzLmZvckVhY2goKHVybCkgPT4ge1xyXG4gICAgICAvLyBsZXQgZW5Db2RlZFVSTCA9IGVuY29kZVVSSSh1cmwpO1xyXG4gICAgICBjb25zb2xlLmxvZygnVVJMOiAnLCB1cmwpO1xyXG4gICAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1c2VyV2l0aFdpbmRvd0F1dGhlbnRpY2F0aW9uKCkge1xyXG4gICAgY29uc3QgcGF0aCA9ICcvJyArIFJvdXRlUGF0aHMuTE9HT1VUX1BBVEg7XHJcbiAgICB0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwocGF0aCk7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbFNlc3Npb25UaW1lKCkge1xyXG4gICAgLy8gbGV0IExhc3RMb2dpbiA9IHRoaXMudXNlckRldGFpbHNbJ2xhc3RMb2dJbiddO1xyXG4gICAgLy8gTGFzdExvZ2luID0gTGFzdExvZ2luLnRvTG9jYWxlU3RyaW5nKCk7XHJcblxyXG4gICAgLy8gbGV0IGRhdGVQYXJ0cyA9IHRoaXMudXNlckRldGFpbHNbJ2N1cnJlbnRMb2dJbiddLnNwbGl0KCcgJylbMF0uc3BsaXQoJy8nKTtcclxuICAgIC8vIGxldCB0aW1lUGFydHMgPSB0aGlzLnVzZXJEZXRhaWxzWydjdXJyZW50TG9nSW4nXS5zcGxpdCgnICcpWzFdLnNwbGl0KCc6Jyk7XHJcbiAgICAvLyBsZXQgbG9naW5UaW1lID0gbmV3IERhdGUoXHJcbiAgICAvLyAgIGRhdGVQYXJ0c1syXSxcclxuICAgIC8vICAgZGF0ZVBhcnRzWzFdIC0gMSxcclxuICAgIC8vICAgZGF0ZVBhcnRzWzBdLFxyXG4gICAgLy8gICB0aW1lUGFydHNbMF0sXHJcbiAgICAvLyAgIHRpbWVQYXJ0c1sxXVxyXG4gICAgLy8gKTtcclxuICAgIC8vIGxvZ2luVGltZSA9IG5ldyBEYXRlKGxvZ2luVGltZSkudG9Mb2NhbGVTdHJpbmcoKTtcclxuICAgIC8vIENvbnZlcnQgbG9jYWwgdGltZSB0byBVVENcclxuICAgIC8vIGN1cnJlbnRUaW1lID0gbmV3IERhdGUoXHJcbiAgICAvLyAgIGN1cnJlbnRUaW1lLmdldFRpbWUoKSArIGN1cnJlbnRUaW1lLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMFxyXG4gICAgLy8gKTtcclxuXHJcbiAgICBsZXQgbG9naW5UaW1lID0gdGhpcy5jb252ZXJ0VVRDVG9Mb2NhbCh0aGlzLnVzZXJEZXRhaWxzWydjdXJyZW50TG9nSW4nXSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnbG9naW5UaW1lOiAnLCBsb2dpblRpbWUpO1xyXG5cclxuICAgIGxldCBsb2dpblRpbWVEYXRlID0gbmV3IERhdGUobG9naW5UaW1lKTtcclxuXHJcbiAgICBsZXQgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0xvZ2luIFRpbWUgRGF0ZTogJywgbG9naW5UaW1lRGF0ZSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBUaW1lOiAnLCBjdXJyZW50VGltZSk7XHJcblxyXG4gICAgbGV0IG1pbGxpc2Vjb25kcyA9IGN1cnJlbnRUaW1lLnZhbHVlT2YoKSAtIGxvZ2luVGltZURhdGUudmFsdWVPZigpO1xyXG4gICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xyXG4gICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7XHJcbiAgICBsZXQgaG91cnMgPSBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MCk7XHJcblxyXG4gICAgc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcclxuICAgIG1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XHJcbiAgICB0aGlzLkhyID0gaG91cnM7XHJcbiAgICB0aGlzLm1pbiA9IG1pbnV0ZXM7XHJcbiAgICB0aGlzLnNlYyA9IHNlY29uZHM7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnU2Vzc2lvbiBUb3RhbCcsIHRoaXMuSHIsIHRoaXMubWluLCB0aGlzLnNlYyk7XHJcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlVGltZXIoKTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVGltZXIoKSB7XHJcbiAgICBpZiAodGhpcy5zZWMgPCA1OSkge1xyXG4gICAgICB0aGlzLnNlYyArPSAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWMgPSAwO1xyXG4gICAgICBpZiAodGhpcy5taW4gPCA1OSkge1xyXG4gICAgICAgIHRoaXMubWluICs9IDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSAwO1xyXG4gICAgICAgIHRoaXMuSHIgKz0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydFVUQ1RvTG9jYWwobmV3ZGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBsb2NhbERhdGU6IHN0cmluZyA9IG5ld2RhdGUgKyAnWic7XHJcbiAgICBsb2NhbERhdGUgPSBsb2NhbERhdGUudG9Mb2NhbGVTdHJpbmcoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdMT2NhbDogJywgbG9jYWxEYXRlKTtcclxuXHJcbiAgICByZXR1cm4gbG9jYWxEYXRlO1xyXG4gIH1cclxuXHJcbiAgT3BlbkFyY29uTGVhcm5pbmdDZW50ZXIoKSB7XHJcbiAgICBjb25zdCB1cmw6IHN0cmluZyA9IEdsb2JhbENvbnN0YW50cy5QbHVnSW5Eb3dubG9hZFVSTDtcclxuICAgIGNvbnNvbGUubG9nKHVybCk7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIC8vY2xvc2UgUG9wdXBcclxuICBjbG9zZVVzZXJTZXR0aW5nUGFuZWwoKSB7XHJcbiAgICBpZiAodGhpcy5yZWYpIHtcclxuICAgICAgdGhpcy5yZWYuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGxhbmd1YWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIGlmICghZXZlbnQpIHJldHVybjtcclxuICAvLyAgIC8vIHRoaXMubGFuZ0NoYW5nZS5lbWl0KGV2ZW50KTtcclxuICAvLyB9XHJcblxyXG4gIC8vKkdsb2JhbCBGb250IGFuZCBUaGVtZVxyXG4gIGdldFJlZFRoZW1lKCkge1xyXG4gICAgLy8gY29uc3QgYWN0aXZlID0gdGhpcy50aGVtZVNlcnZpY2UuZ2V0QWN0aXZlVGhlbWUoKTtcclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgYWN0aXZlLm5hbWUgPT09IFwiYmx1ZVwiIHx8XHJcbiAgICAvLyAgIGFjdGl2ZS5uYW1lID09PSBcImJsYWNrXCIgfHxcclxuICAgIC8vICAgYWN0aXZlLm5hbWUgPT09IFwicmVkXCJcclxuICAgIC8vICkge1xyXG4gICAgLy8gICB0aGlzLnRoZW1lU2VydmljZS5zZXRUaGVtZShcInJlZFwiKTtcclxuICAgIC8vICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChcInRoZW1lQ29sb3JcIiwgXCJyZWRcIik7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIGdldEJsYWNrVGhlbWUoKSB7XHJcbiAgICAvLyBjb25zdCBhY3RpdmUgPSB0aGlzLnRoZW1lU2VydmljZS5nZXRBY3RpdmVUaGVtZSgpO1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICBhY3RpdmUubmFtZSA9PT0gXCJibHVlXCIgfHxcclxuICAgIC8vICAgYWN0aXZlLm5hbWUgPT09IFwiYmxhY2tcIiB8fFxyXG4gICAgLy8gICBhY3RpdmUubmFtZSA9PT0gXCJyZWRcIlxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHRoaXMudGhlbWVTZXJ2aWNlLnNldFRoZW1lKFwiYmx1ZVwiKTtcclxuICAgIC8vICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChcInRoZW1lQ29sb3JcIiwgXCJibHVlXCIpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICBnZXRCbHVlVGhlbWUoKSB7XHJcbiAgICAvLyBjb25zdCBhY3RpdmUgPSB0aGlzLnRoZW1lU2VydmljZS5nZXRBY3RpdmVUaGVtZSgpO1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICBhY3RpdmUubmFtZSA9PT0gXCJibHVlXCIgfHxcclxuICAgIC8vICAgYWN0aXZlLm5hbWUgPT09IFwiYmxhY2tcIiB8fFxyXG4gICAgLy8gICBhY3RpdmUubmFtZSA9PT0gXCJyZWRcIlxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHRoaXMudGhlbWVTZXJ2aWNlLnNldFRoZW1lKFwiYmxhY2tcIik7XHJcbiAgICAvLyAgIHRoaXMuY29va2llU2VydmljZS5zZXQoXCJ0aGVtZUNvbG9yXCIsIFwiYmxhY2tcIik7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICAvLyBBY2Nlc3NpYmlsaXR5IEZvbnRzIHNpemVzXHJcbiAgZ2V0U21hbGxGb250KCkge1xyXG4gICAgLy8gdGhpcy5mb250U2VydmljZS5zZXRGb250KFwic21Gb250XCIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWVkaXVtRm9udCgpIHtcclxuICAgIC8vIHRoaXMuZm9udFNlcnZpY2Uuc2V0Rm9udChcIm1kRm9udFwiKTtcclxuICB9XHJcblxyXG4gIGdldExhcmdlRm9udCgpIHtcclxuICAgIC8vIHRoaXMuZm9udFNlcnZpY2Uuc2V0Rm9udChcImxnRm9udFwiKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbG9zZVVzZXJTZXR0aW5nUGFuZWwoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YS5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ3aGl0ZS1iZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCIgc2lkZWJhci1vdXRlciB3aGl0ZS1iZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNpZGViYXItaGVhZGVyIGdyZXktYmFja2dyb3VuZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2gtdG9wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoLXRvcC1sZWZ0IGQtZmxleFwiPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2xvZ291dC5zdmdcIiBjbGFzcz1cImltZ3NcIiBhbHQ9XCJ1c2VyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBsb2ctdGV4dFwiIChjbGljayk9XCJsb2dvdXRDdXJyZW50VXNlcigpXCI+e3tcIkdlbmVyaWNfbGliLkxvZ291dFwiIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2gtdG9wLXJpZ2h0XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNvbW1vbi1ibiB0ZXJ0aWFyeS1idG5cIj5cclxuICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2Nsb3NlLnN2Z1wiIGNsYXNzPVwiaW1nc1wiIGFsdD1cImNsb3NlIGljb25cIiB0aXRsZT1cIkNsb3NlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Y2xvc2VEaWFsb2dCb3goKVwiPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1Byb2ZpbGU7IGVsc2UgTG9hZGluZ0FuaW1hdGlvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaC1ib3R0b20gZC1mbGV4IHB0LTNcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyZGlzcGxheU5hbWUgJiYgdXNlcmRpc3BsYXlOYW1lLmxlbmd0aCA+IDA7IGVsc2UgZGVmYXVsdE5hbWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluaXRpYWwtdGV4dFwiPlxyXG4gICAgICAgICAgICAgIHt7IHVzZXJkaXNwbGF5TmFtZSB8IHNsaWNlVG9Ud28gfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE5hbWU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbml0aWFsLXRleHRcIj5cclxuICAgICAgICAgICAgICB7eyAnTkEnIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaC1ib3R0b20tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJ0aXRsZVwiPnt7IHVzZXJEZXRhaWxzWyd1c2VyRGlzcGxheU5hbWUnXX19PC9oND5cclxuICAgICAgICAgICAgPHA+e3sgdXNlckRldGFpbHNbJ2VtYWlsSUQnXX19PC9wPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2gtYm90dG9tLWNvbnRlbnQtbHNcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInVzZXJEZXRhaWxzWydsYXN0TG9nSW4nXSAmJiAhdXNlckRldGFpbHNbJ2xhc3RMb2dJbiddLmluY2x1ZGVzKCdOQScpOyBlbHNlIEludmFsaWREYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPnt7XCJHZW5lcmljX2xpYi5MYXN0U2Vzc2lvblwiIHwgdHJhbnNsYXRlfX0gOiA8L3A+XHJcbiAgICAgICAgICAgICAgICA8cD57e3VzZXJEZXRhaWxzWydsYXN0TG9nSW4nXX19PC9wPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjSW52YWxpZERhdGU+XHJcbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPnt7XCJHZW5lcmljX2xpYi5MYXN0U2Vzc2lvblwiIHwgdHJhbnNsYXRlfX0gOiA8L3A+XHJcbiAgICAgICAgICAgICAgICA8cD5OQTwvcD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoLWJvdHRvbS1jb250ZW50LWxzIHNlc3Npb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgIDxwIHR5bGU9XCJtYXJnaW4tcmlnaHQ6IDVweDtcIj57e1wiR2VuZXJpY19saWIuQ3VycmVudFNlc3Npb25cIiB8IHRyYW5zbGF0ZX19IDogPC9wPlxyXG4gICAgICAgICAgICAgIDxwPnt7SHJ9fSB7e1wiR2VuZXJpY19saWIuaHJzXCIgfCB0cmFuc2xhdGV9fSB7e21pbn19IHt7XCJHZW5lcmljX2xpYi5taW5cIiB8IHRyYW5zbGF0ZX19IHt7c2VjfX1cclxuICAgICAgICAgICAgICAgIHt7XCJHZW5lcmljX2xpYi5zZWNzXCIgfCB0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjTG9hZGluZ0FuaW1hdGlvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1za2VsZXRvbiBkLWZsZXggcC0zXCI+XHJcbiAgICAgICAgICA8cC1za2VsZXRvbiBzaGFwZT1cImNpcmNsZVwiIHNpemU9XCI0cmVtXCIgc3R5bGVDbGFzcz1cIm1yLTJcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXMtMVwiPlxyXG4gICAgICAgICAgICA8cC1za2VsZXRvbiB3aWR0aD1cIjEwcmVtXCIgc3R5bGVDbGFzcz1cIm1iLTJcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiOHJlbVwiIGhlaWdodD1cIi43cmVtXCIgc3R5bGVDbGFzcz1cIm1iLTJcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiNXJlbVwiIHN0eWxlQ2xhc3M9XCJtYi0yXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICA8cC1za2VsZXRvbiBoZWlnaHQ9XCIuNXJlbVwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1ib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzYi1saXN0ICBwYi0yMHB4XCI+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwiZ3JleS1iZy1ob3ZlclwiPlxyXG4gICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9jb21tb24taGVhZGVyLWxpYi9pbWFnZXMvZG9tYWluX2ltZy5zdmdcIiBsb2FkaW5nPVwibGF6eVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBsYW5nLWRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRyYW5zbGF0aW9uPjwvbmctdHJhbnNsYXRpb24+IDwhLS0gKGxhbmdDaGFuZ2UpPVwibGFuZ3VhZ2VDaGFuZ2UoJGV2ZW50KVwiIC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgY2xhc3M9XCJncmV5LWJnLWhvdmVyXCIgKGNsaWNrKT1cIk9wZW5BcmNvbkxlYXJuaW5nQ2VudGVyKClcIj5cclxuICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2xvY2FsLnN2Z1wiIGNsYXNzPVwiaW1nc1wiIGFsdD1cIkFyY29uXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibXgtMlwiPnt7XCJHZW5lcmljX2xpYi5BcmNvbkxlYXJuaW5nQ2VudGVyXCIgfCB0cmFuc2xhdGV9fTwvcD5cclxuICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwiZ3JleS1iZy1ob3ZlclwiPlxyXG4gICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9jb21tb24taGVhZGVyLWxpYi9pbWFnZXMvc2V0dGluZ3Muc3ZnXCIgYWx0PVwic2V0dGluZ3NcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJteC0yXCIgKGNsaWNrKT1cIm9wZW5Vc2VyU2V0dGluZ1BhbmVsKClcIj57e1wiR2VuZXJpY19saWIuR2VuZXJhbENvbmZpZ3VyYXRpb25cIiB8IHRyYW5zbGF0ZX19PC9wPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gR2xvYmFsIEZvbnQgYW5kIFRoZW1lICAtLT5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJhY2Nlc3NpYmlsaXR5LWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtYWxsIHJvdW5kZWQtY2lyY2xlXCIgKGNsaWNrKT1cImdldFNtYWxsRm9udCgpXCI+XHJcbiAgICAgICAgPHNwYW4+QS08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc21hbGwgcm91bmRlZC1jaXJjbGVcIiAoY2xpY2spPVwiZ2V0TWVkaXVtRm9udCgpXCI+XHJcbiAgICAgICAgPHNwYW4+QTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbWFsbCByb3VuZGVkLWNpcmNsZVwiIChjbGljayk9XCJnZXRMYXJnZUZvbnQoKVwiPlxyXG4gICAgICAgIDxzcGFuPkErPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc21hbGwgcm91bmRlZC1jaXJjbGVcIiAoY2xpY2spPVwiZ2V0UmVkVGhlbWUoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGhlbWUgdGhlbWUtcmVkXCI+PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtYWxsIHJvdW5kZWQtY2lyY2xlXCIgKGNsaWNrKT1cImdldEJsYWNrVGhlbWUoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGhlbWUgdGhlbWUtYmxhY2tcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc21hbGwgcm91bmRlZC1jaXJjbGVcIiAoY2xpY2spPVwiZ2V0Qmx1ZVRoZW1lKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRoZW1lIHRoZW1lLWJsdWVcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+IC0tPlxyXG48L2Rpdj5cclxuIl19
|