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,402 @@
|
|
|
1
|
+
import { EncrydecryRSAdataService } from './../../services/EncrypDecryp_RSA.service';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
4
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
5
|
+
import { DialogService } from 'primeng/dynamicdialog';
|
|
6
|
+
import { Subject } from 'rxjs';
|
|
7
|
+
import { finalize, takeUntil } from 'rxjs/operators';
|
|
8
|
+
import { RESTLoginFormService } from '../../services/rest-login-form.service';
|
|
9
|
+
// import { RESTMyaccessService } from 'src/app/shared/Services/REST-Services/rest-myaccess.service';
|
|
10
|
+
import { ASYNCPasswordcheckService, ConfirmedValidator, } from '../../services/async-passwordcheck.service';
|
|
11
|
+
import { ToastMsgService } from '../../services/toast-msg.service';
|
|
12
|
+
import { VaptValidationService } from '../../services/vapt-validation.service';
|
|
13
|
+
import { noSpaceAllowed } from '../../Validators/noSpaceAllowed';
|
|
14
|
+
import { errorMsg, LoggedInUserInfo } from '../../model/data_model';
|
|
15
|
+
import { CommonHeaderLibService } from '../../common-header-lib.service';
|
|
16
|
+
import { DynamicDialogConfig } from 'primeng/dynamicdialog';
|
|
17
|
+
import { HttpCommonService } from '../../services/http/http-common.service';
|
|
18
|
+
import { HttpGeneralConfigurationService } from '../../services/http/http-general-config.service';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
import * as i1 from "../../common-header-lib.service";
|
|
21
|
+
import * as i2 from "@angular/forms";
|
|
22
|
+
import * as i3 from "../../services/toast-msg.service";
|
|
23
|
+
import * as i4 from "./../../services/EncrypDecryp_RSA.service";
|
|
24
|
+
import * as i5 from "../../services/rest-login-form.service";
|
|
25
|
+
import * as i6 from "../../services/async-passwordcheck.service";
|
|
26
|
+
import * as i7 from "@ngx-translate/core";
|
|
27
|
+
import * as i8 from "../../services/vapt-validation.service";
|
|
28
|
+
import * as i9 from "primeng/dynamicdialog";
|
|
29
|
+
import * as i10 from "../../services/http/http-common.service";
|
|
30
|
+
import * as i11 from "../../services/http/http-general-config.service";
|
|
31
|
+
import * as i12 from "@angular/common";
|
|
32
|
+
import * as i13 from "primeng/inputtext";
|
|
33
|
+
import * as i14 from "primeng/dropdown";
|
|
34
|
+
import * as i15 from "primeng/api";
|
|
35
|
+
import * as i16 from "primeng/button";
|
|
36
|
+
import * as i17 from "./timezone-configuration/timezone-configuration.component";
|
|
37
|
+
import * as i18 from "./landingpg-config/landingpg-config.component";
|
|
38
|
+
export class GeneralConfigurationComponent {
|
|
39
|
+
constructor(libService, fb, msgService, encryptService, loginService, _validatePwdService, translateService, _vaptService, config, httpCommonService, httpGeneralConfigService) {
|
|
40
|
+
this.libService = libService;
|
|
41
|
+
this.fb = fb;
|
|
42
|
+
this.msgService = msgService;
|
|
43
|
+
this.encryptService = encryptService;
|
|
44
|
+
this.loginService = loginService;
|
|
45
|
+
this._validatePwdService = _validatePwdService;
|
|
46
|
+
this.translateService = translateService;
|
|
47
|
+
this._vaptService = _vaptService;
|
|
48
|
+
this.config = config;
|
|
49
|
+
this.httpCommonService = httpCommonService;
|
|
50
|
+
this.httpGeneralConfigService = httpGeneralConfigService;
|
|
51
|
+
// export class GeneralConfigurationComponent {
|
|
52
|
+
this.ShowPreferencePathScreen = true;
|
|
53
|
+
this.ShowUserProfileScreen = false;
|
|
54
|
+
this.ShowChangePasswordScreen = false;
|
|
55
|
+
this.ShowTimeZoneScreen = false;
|
|
56
|
+
this.ShowLandinPgScreen = false;
|
|
57
|
+
this.ShowTimeZoneBtn = false;
|
|
58
|
+
this.showStatus = false;
|
|
59
|
+
this.userAssetTypeList = [];
|
|
60
|
+
this.userAssetNameList = [];
|
|
61
|
+
this.userServiceList = [];
|
|
62
|
+
this.userSelectedTimezone = '';
|
|
63
|
+
// private domainName: string = '';
|
|
64
|
+
// private domainID: number;
|
|
65
|
+
// private LoggedInUserID: number;
|
|
66
|
+
// private username: string;
|
|
67
|
+
this.filePathName = '';
|
|
68
|
+
this.lastUpdatedFileStatus = '';
|
|
69
|
+
this.appSettingForm = new FormGroup({}); // Define form group
|
|
70
|
+
this.userResetPasswordForm = new FormGroup({}); //user Reset Password Form
|
|
71
|
+
this.timeZoneForm = new FormGroup({}); //user Reset Password Form
|
|
72
|
+
this.unsubscribeAPIEventListenerData = new Subject();
|
|
73
|
+
this.makeNewPwdVisible = true;
|
|
74
|
+
this.makeOldPwdVisible = true;
|
|
75
|
+
this.makeCnfrmPwdVisible = true;
|
|
76
|
+
this.isAssetTypeLoading = false;
|
|
77
|
+
this.isAssetNameLoading = false;
|
|
78
|
+
this.isConnectionMethodLoading = false;
|
|
79
|
+
this.isPathUpdated = false;
|
|
80
|
+
this.pwderrorMsg = '';
|
|
81
|
+
this.AssetTypeEvent = 'AssetType';
|
|
82
|
+
this.AssetNameEvent = 'AssetName';
|
|
83
|
+
this.ConnectionMethodEvent = 'ConnectionMethod';
|
|
84
|
+
this.pathSuccessMsg = errorMsg.PATHSUCCESS;
|
|
85
|
+
this.pathErrorMsg = errorMsg.PATHERROR;
|
|
86
|
+
this.apiURL = '';
|
|
87
|
+
}
|
|
88
|
+
ngOnInit() {
|
|
89
|
+
//Get Initalize Form
|
|
90
|
+
this.getInitalizeForm();
|
|
91
|
+
this.OpenPreferencePathScreen();
|
|
92
|
+
}
|
|
93
|
+
ngAfterViewInit() {
|
|
94
|
+
this.getTranslateContent();
|
|
95
|
+
console.log('ViewInit');
|
|
96
|
+
// Get PWD Validation MSg From Validation Service
|
|
97
|
+
this._validatePwdService.listValidationMsg().subscribe((msg) => {
|
|
98
|
+
console.log('Msg:', msg);
|
|
99
|
+
this.pwderrorMsg = msg;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
getInitalizeForm() {
|
|
103
|
+
this.appSettingForm = this.fb.group({
|
|
104
|
+
AssetType: ['', Validators.required],
|
|
105
|
+
AssetName: ['', Validators.required],
|
|
106
|
+
ServiceName: ['', Validators.required],
|
|
107
|
+
filePathName: ['', [Validators.required, noSpaceAllowed()]],
|
|
108
|
+
});
|
|
109
|
+
this.timeZoneForm = this.fb.group({
|
|
110
|
+
timezone: ['', Validators.required],
|
|
111
|
+
});
|
|
112
|
+
// Password Reset Form
|
|
113
|
+
this.userResetPasswordForm = this.fb.group({
|
|
114
|
+
oldUserARCXWD: ['', [Validators.required]],
|
|
115
|
+
newUserARCXWD: [
|
|
116
|
+
'',
|
|
117
|
+
[Validators.required],
|
|
118
|
+
[this._validatePwdService.createValidator()],
|
|
119
|
+
],
|
|
120
|
+
crnmNewUserARCXWD: ['', [Validators.required]],
|
|
121
|
+
}, {
|
|
122
|
+
validator: ConfirmedValidator('newUserARCXWD', 'crnmNewUserARCXWD'),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
// //Method: Convert text one Lang. to another
|
|
126
|
+
getTranslateContent() {
|
|
127
|
+
this.translateService
|
|
128
|
+
.get([
|
|
129
|
+
'Generic_lib.PreferencePathSuccessMsg',
|
|
130
|
+
'Generic_lib.PreferencePathErrorMsg',
|
|
131
|
+
])
|
|
132
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
133
|
+
.subscribe((trans) => {
|
|
134
|
+
this.pathSuccessMsg = trans['Generic_lib.PreferencePathSuccessMsg'];
|
|
135
|
+
this.pathErrorMsg = trans['Generic_lib.PreferencePathErrorMsg'];
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
OpenPreferencePathScreen() {
|
|
139
|
+
this.closeAllScreen();
|
|
140
|
+
setTimeout(() => {
|
|
141
|
+
this.ShowPreferencePathScreen = true;
|
|
142
|
+
this.appSettingForm.reset();
|
|
143
|
+
this.userAssetTypeList = [];
|
|
144
|
+
this.userAssetNameList = [];
|
|
145
|
+
this.userServiceList = [];
|
|
146
|
+
this.getServiceAssetDetails();
|
|
147
|
+
}, 10);
|
|
148
|
+
}
|
|
149
|
+
OpenUserProfileScreen() {
|
|
150
|
+
this.closeAllScreen();
|
|
151
|
+
this.ShowUserProfileScreen = true;
|
|
152
|
+
}
|
|
153
|
+
OpenChangePasswordScreen() {
|
|
154
|
+
this.closeAllScreen();
|
|
155
|
+
this.ShowChangePasswordScreen = true;
|
|
156
|
+
this.userResetPasswordForm.reset();
|
|
157
|
+
// this.getEncryptKey();
|
|
158
|
+
}
|
|
159
|
+
OpenTimezoneScreen() {
|
|
160
|
+
this.closeAllScreen();
|
|
161
|
+
this.ShowTimeZoneScreen = true;
|
|
162
|
+
}
|
|
163
|
+
OpenLandingPgConfig() {
|
|
164
|
+
this.closeAllScreen();
|
|
165
|
+
this.ShowLandinPgScreen = true;
|
|
166
|
+
}
|
|
167
|
+
closeAllScreen() {
|
|
168
|
+
this.ShowPreferencePathScreen = false;
|
|
169
|
+
this.ShowUserProfileScreen = false;
|
|
170
|
+
this.ShowChangePasswordScreen = false;
|
|
171
|
+
this.ShowTimeZoneScreen = false;
|
|
172
|
+
this.ShowLandinPgScreen = false;
|
|
173
|
+
}
|
|
174
|
+
preferencePathValueChange(eventName) {
|
|
175
|
+
if (eventName === this.AssetTypeEvent) {
|
|
176
|
+
const assetType = this.appSettingForm.get('AssetType')?.value;
|
|
177
|
+
this.showStatus = false;
|
|
178
|
+
this.resetFormfields(['AssetName', 'ServiceName', 'filePathName']);
|
|
179
|
+
this.userAssetNameList = [];
|
|
180
|
+
this.userServiceList = [];
|
|
181
|
+
this.getServiceAssetName(assetType['assetTypeID']);
|
|
182
|
+
}
|
|
183
|
+
else if (eventName === this.AssetNameEvent) {
|
|
184
|
+
const assetName = this.appSettingForm.get('AssetName')?.value;
|
|
185
|
+
this.showStatus = false;
|
|
186
|
+
this.resetFormfields(['ServiceName', 'filePathName']);
|
|
187
|
+
this.userServiceList = [];
|
|
188
|
+
this.fetchServiceNameByAssetTypeEvent(assetName['assetName']);
|
|
189
|
+
}
|
|
190
|
+
else if (eventName === this.ConnectionMethodEvent) {
|
|
191
|
+
const ServiceDetails = this.appSettingForm.get('ServiceName')?.value;
|
|
192
|
+
this.showStatus = false;
|
|
193
|
+
this.resetFormfields(['filePathName']);
|
|
194
|
+
this.getFilePathDetails(ServiceDetails['serviceTypeId']);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// /*Action : Used to Get Asset Type to update Prefrence Path of Connectors */
|
|
198
|
+
getServiceAssetDetails() {
|
|
199
|
+
this.isAssetTypeLoading = true;
|
|
200
|
+
this.httpGeneralConfigService
|
|
201
|
+
.getUserPreferredAssetTypeDetails()
|
|
202
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
|
|
203
|
+
this.isAssetTypeLoading = false;
|
|
204
|
+
}))
|
|
205
|
+
.subscribe((data) => {
|
|
206
|
+
this.userAssetTypeList = data;
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
// /*Action : Used to Get Asset Name to update Prefrence Path of that Asset's Connectors */
|
|
210
|
+
getServiceAssetName(assetTypeID) {
|
|
211
|
+
this.isAssetNameLoading = true;
|
|
212
|
+
let payload = {
|
|
213
|
+
assetTypeId: assetTypeID,
|
|
214
|
+
};
|
|
215
|
+
this.httpGeneralConfigService
|
|
216
|
+
.getUserPreferredAssetName(payload)
|
|
217
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
|
|
218
|
+
this.isAssetNameLoading = false;
|
|
219
|
+
}))
|
|
220
|
+
.subscribe((data) => {
|
|
221
|
+
this.userAssetNameList = data;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
// /*Method : GET
|
|
225
|
+
// Action : get User Assigned ServiceName By AssetTypeEvent */
|
|
226
|
+
fetchServiceNameByAssetTypeEvent(assetName) {
|
|
227
|
+
this.isConnectionMethodLoading = true;
|
|
228
|
+
let payload = {
|
|
229
|
+
assetName: assetName,
|
|
230
|
+
};
|
|
231
|
+
this.httpGeneralConfigService
|
|
232
|
+
.getServiceNameByAssetTypeEvent(payload)
|
|
233
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
|
|
234
|
+
this.isConnectionMethodLoading = false;
|
|
235
|
+
}))
|
|
236
|
+
.subscribe((data) => {
|
|
237
|
+
this.userServiceList = data;
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
// /*Method : GET
|
|
241
|
+
// Action : Fetch User's File Path Details and Status already set or not */
|
|
242
|
+
getFilePathDetails(serviceID) {
|
|
243
|
+
let payload = {
|
|
244
|
+
// userId: this.LoggedInUserID,
|
|
245
|
+
serviceTypeId: serviceID,
|
|
246
|
+
};
|
|
247
|
+
this.httpGeneralConfigService
|
|
248
|
+
.getPreferencePathDetails(payload)
|
|
249
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
250
|
+
.subscribe((res) => {
|
|
251
|
+
this.preferencePathID = res['spmId'];
|
|
252
|
+
if (res && res['currentSetting'] && res['lastUpdate']) {
|
|
253
|
+
this.showStatus = true;
|
|
254
|
+
this.filePathName = res['currentSetting'];
|
|
255
|
+
this.lastUpdatedFileStatus = res['lastUpdate'];
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
this.filePathName = '';
|
|
259
|
+
this.showStatus = false;
|
|
260
|
+
this.lastUpdatedFileStatus = '';
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
// /*Action : It saves or updates a preference path of user */
|
|
265
|
+
setUserPreferencePath(appSettingForm) {
|
|
266
|
+
this.toggleBtnLoadder(true);
|
|
267
|
+
const userpath = String(appSettingForm.value['filePathName']).trim();
|
|
268
|
+
let payload = {
|
|
269
|
+
// userId: this.LoggedInUserID,
|
|
270
|
+
// userLogTime: this._cookieService.getCookieValue(COOKIECONSTANT.SESSIONID),
|
|
271
|
+
serviceTypeId: appSettingForm.value['ServiceName']['serviceTypeId'],
|
|
272
|
+
supDescription: userpath,
|
|
273
|
+
spmId: this.preferencePathID,
|
|
274
|
+
};
|
|
275
|
+
this.httpGeneralConfigService
|
|
276
|
+
.updatePreferencePath(payload)
|
|
277
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
|
|
278
|
+
this.toggleBtnLoadder(false);
|
|
279
|
+
}))
|
|
280
|
+
.subscribe((res) => {
|
|
281
|
+
if (res) {
|
|
282
|
+
this.resetForm();
|
|
283
|
+
this.showStatus = false;
|
|
284
|
+
this.msgService.success(this.pathSuccessMsg);
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
this.msgService.error(this.pathErrorMsg);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
// //Method : Used to perform password reset of User
|
|
292
|
+
resetLoggedInPwd() {
|
|
293
|
+
if (this._vaptService.hasUnsafeInput(this.userResetPasswordForm.value)) {
|
|
294
|
+
this.msgService.error(errorMsg.SCRIPTERROR);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
this.userResetPasswordForm.markAllAsTouched();
|
|
298
|
+
if (this.userResetPasswordForm.valid) {
|
|
299
|
+
this.changeLoggedInPwd();
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// /*Method: will User New Password to API */
|
|
303
|
+
changeLoggedInPwd() {
|
|
304
|
+
//For Encrp/Dec
|
|
305
|
+
let oldUserARCXWD = this.encryptService.encryptViaRSA(this.userResetPasswordForm.value['oldUserARCXWD']);
|
|
306
|
+
//For Encrp/Dec
|
|
307
|
+
let newUserARCXWD = this.encryptService.encryptViaRSA(this.userResetPasswordForm.value['newUserARCXWD']);
|
|
308
|
+
let userPwdDetails = {
|
|
309
|
+
ipAddress: '',
|
|
310
|
+
oldUserARCXWD: oldUserARCXWD,
|
|
311
|
+
newUserARCXWD: newUserARCXWD,
|
|
312
|
+
authenticationType: 0,
|
|
313
|
+
};
|
|
314
|
+
console.log(userPwdDetails);
|
|
315
|
+
this.toggleBtnLoadder(true);
|
|
316
|
+
this.httpCommonService
|
|
317
|
+
.setNewpassword(userPwdDetails)
|
|
318
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => {
|
|
319
|
+
this.toggleBtnLoadder(false);
|
|
320
|
+
}))
|
|
321
|
+
.subscribe((data) => {
|
|
322
|
+
if (data['success']) {
|
|
323
|
+
this.msgService.success(data['message']);
|
|
324
|
+
this.userResetPasswordForm.reset();
|
|
325
|
+
}
|
|
326
|
+
else if (!data['success']) {
|
|
327
|
+
this.msgService.error(data['errorMessage']);
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
// /*Method:
|
|
332
|
+
// Action : Get Public Key for encryption of User Details */
|
|
333
|
+
getEncryptKey() {
|
|
334
|
+
let params = {
|
|
335
|
+
type: 0,
|
|
336
|
+
};
|
|
337
|
+
this.loginService
|
|
338
|
+
.getPrivateKey(params)
|
|
339
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
340
|
+
.subscribe((data) => {
|
|
341
|
+
if (data['success'] === true) {
|
|
342
|
+
LoggedInUserInfo.privateKey = data['result'];
|
|
343
|
+
}
|
|
344
|
+
else if (data['success'] === false) {
|
|
345
|
+
this.msgService.error('Session Token Error !');
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
// /*Method : POST
|
|
350
|
+
// Action : Get configuration ID based on to show hide Time Zone*/
|
|
351
|
+
getglobalConfigDetails() {
|
|
352
|
+
this.loginService
|
|
353
|
+
.getglobalConfigDetails('1', [336])
|
|
354
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
355
|
+
.subscribe((data) => {
|
|
356
|
+
if (data && data.length > 0) {
|
|
357
|
+
data.forEach((element) => {
|
|
358
|
+
if (element && element['id'] === 336 && element['value'] === '0') {
|
|
359
|
+
this.ShowTimeZoneBtn = true;
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
this.ShowTimeZoneBtn = false;
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
// // Show/Hide Password Fileds of Change Pwd form
|
|
369
|
+
togglePasswordVisibility(flag) {
|
|
370
|
+
if (flag === 1) {
|
|
371
|
+
this.makeOldPwdVisible = !this.makeOldPwdVisible;
|
|
372
|
+
}
|
|
373
|
+
else if (flag === 2) {
|
|
374
|
+
this.makeNewPwdVisible = !this.makeNewPwdVisible;
|
|
375
|
+
}
|
|
376
|
+
else if (flag === 3) {
|
|
377
|
+
this.makeCnfrmPwdVisible = !this.makeCnfrmPwdVisible;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
resetForm() {
|
|
381
|
+
this.appSettingForm.reset();
|
|
382
|
+
}
|
|
383
|
+
resetFormfields(fields) {
|
|
384
|
+
fields.forEach((fieldsName) => {
|
|
385
|
+
this.appSettingForm.get(fieldsName)?.reset();
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
toggleBtnLoadder(flag) {
|
|
389
|
+
this.isPathUpdated = flag;
|
|
390
|
+
}
|
|
391
|
+
ngOnDestroy() {
|
|
392
|
+
this.unsubscribeAPIEventListenerData.next(true);
|
|
393
|
+
this.unsubscribeAPIEventListenerData.complete();
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
GeneralConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GeneralConfigurationComponent, deps: [{ token: i1.CommonHeaderLibService }, { token: i2.FormBuilder }, { token: i3.ToastMsgService }, { token: i4.EncrydecryRSAdataService }, { token: i5.RESTLoginFormService }, { token: i6.ASYNCPasswordcheckService }, { token: i7.TranslateService }, { token: i8.VaptValidationService }, { token: i9.DynamicDialogConfig }, { token: i10.HttpCommonService }, { token: i11.HttpGeneralConfigurationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
397
|
+
GeneralConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GeneralConfigurationComponent, selector: "app-general-configuration", providers: [DialogService], ngImport: i0, template: "<div class=\"row my-3\">\r\n <!-- Left_Card_Started -->\r\n <div class=\"col-lg-4 pl-0\">\r\n <div class=\"left-card\">\r\n <div class=\"p-3\">\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowPreferencePathScreen }\"\r\n (click)=\"OpenPreferencePathScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.PreferencePath\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowChangePasswordScreen }\"\r\n (click)=\"OpenChangePasswordScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.ChangePassword\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowTimeZoneScreen }\"\r\n (click)=\"OpenTimezoneScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.PreferredTimezone\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowLandinPgScreen }\"\r\n (click)=\"OpenLandingPgConfig()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.LandingPageConfig\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Left_Card_Ended -->\r\n\r\n <!--User Profile -->\r\n <ng-container *ngIf=\"ShowUserProfileScreen\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"initial-text\">\r\n {{ \"AK\" }}\r\n </div>\r\n <div class=\"preference-container\">\r\n <!--Card-->\r\n <div class=\"mt-3\">\r\n <div class=\"form-group\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.UserName\" | translate }}\r\n </div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n pInputText\r\n formControlName=\"text\"\r\n placeholder=\"{{ 'Generic_lib.UserName' | translate }}\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/images/user-name.svg\"\r\n alt=\"Icon\"\r\n class=\"position-absolute px-2\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"label-name\">{{ \"Generic_lib.Email\" | translate }}</div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n pInputText\r\n formControlName=\"text\"\r\n placeholder=\"{{ 'Generic_lib.EmailAddress' | translate }}\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/gc-mail.svg\"\r\n alt=\"Icon\"\r\n class=\"position-absolute px-2\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"mt-4\">\r\n <p-button class=\"submit-btn\" label=\"Submit\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Preference PathScreen -->\r\n <ng-container>\r\n <!-- <ng-container *ngIf=\"ShowPreferencePathScreen\"> -->\r\n <div class=\"col-lg-6\" [hidden]=\"!ShowPreferencePathScreen\">\r\n <div class=\"preference-container\">\r\n <div class=\"mt-3\">\r\n <form [formGroup]=\"appSettingForm\">\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.AssetType\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userAssetTypeList\"\r\n formControlName=\"AssetType\"\r\n placeholder=\"{{\r\n 'Generic_lib.AssetTypePlaceholder' | translate\r\n }}\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n (onChange)=\"preferencePathValueChange(AssetTypeEvent)\"\r\n optionLabel=\"assetType\"\r\n [filter]=\"!isAssetTypeLoading ? true : false\"\r\n filterBy=\"assetType\"\r\n [showClear]=\"false\"\r\n [resetFilterOnHide]=\"true\"\r\n panelStyleClass=\"{'dropdown-loader': isAssetTypeLoading}\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isAssetTypeLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('AssetType')?.invalid &&\r\n appSettingForm.get('AssetType')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.AssetTypeFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.AssetName\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userAssetNameList\"\r\n formControlName=\"AssetName\"\r\n placeholder=\"{{\r\n 'Generic_lib.AssetNamePlaceholder' | translate\r\n }}\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n optionLabel=\"assetName\"\r\n [filter]=\"!isAssetNameLoading ? true : false\"\r\n filterBy=\"assetType\"\r\n (onChange)=\"preferencePathValueChange(AssetNameEvent)\"\r\n filterBy=\"assetName\"\r\n panelStyleClass=\"{'dropdown-loader': isAssetNameLoading}\"\r\n [showClear]=\"false\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isAssetNameLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('AssetName')?.invalid &&\r\n appSettingForm.get('AssetName')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.AssetNameFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.ConnectionMethod\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userServiceList\"\r\n formControlName=\"ServiceName\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.ConnectionMethodPlaceholder' | translate\r\n }}\"\r\n optionLabel=\"tbvDescrption\"\r\n [filter]=\"true\"\r\n filterBy=\"tbvDescrption\"\r\n (onChange)=\"preferencePathValueChange(ConnectionMethodEvent)\"\r\n [filter]=\"!isConnectionMethodLoading ? true : false\"\r\n [showClear]=\"false\"\r\n panelStyleClass=\"{'dropdown-loader': isConnectionMethodLoading}\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isConnectionMethodLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div> </ng-template\r\n ></p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('ServiceName')?.invalid &&\r\n appSettingForm.get('ServiceName')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.ConnectionMethodFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group position-relative\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.PreferencePath\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"{{ 'Generic_lib.PreferencePath' | translate }}\"\r\n pInputText\r\n formControlName=\"filePathName\"\r\n id=\"filepath\"\r\n name=\"filepath\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/filepath.svg\"\r\n alt=\"path Icon\"\r\n class=\"position-absolute mx-2 img-lock ext\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('filePathName')?.invalid &&\r\n (appSettingForm.get('filePathName')?.touched ||\r\n appSettingForm.get('filePathName')?.dirty)\r\n \"\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.controls['filePathName'].errors?.['required']\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PreferencePathFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.controls['filePathName'].errors?.['noSpace']\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PreferencePathFieldSpaceValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"showStatus\">\r\n <div class=\"form-group d-flex align-items-center\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.CurrentSetting\" | translate }} :\r\n </div>\r\n <div class=\"cur-text mx-2\">{{ filePathName }}</div>\r\n </div>\r\n <div class=\"form-group d-flex align-items-center\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.LastUpdated\" | translate }}\r\n </div>\r\n <div class=\"cur-text mx-2\">{{ lastUpdatedFileStatus }}</div>\r\n </div>\r\n </ng-container>\r\n <div class=\"mt-4\">\r\n <p-button\r\n class=\"submit-btn\"\r\n label=\"{{ 'Generic_lib.Update' | translate }}\"\r\n [disabled]=\"appSettingForm.invalid\"\r\n (onClick)=\"setUserPreferencePath(appSettingForm)\"\r\n iconPos=\"right\"\r\n [loading]=\"isPathUpdated\"\r\n ></p-button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- TimeZone Screen -->\r\n <ng-container *ngIf=\"ShowTimeZoneScreen\">\r\n <div class=\"col-lg-6\">\r\n <app-timezone-configuration></app-timezone-configuration>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- LandingPg Config Screen -->\r\n <ng-container *ngIf=\"ShowLandinPgScreen\">\r\n <div class=\"col-lg-6\">\r\n <app-landingpg-config></app-landingpg-config>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Change Password Screen -->\r\n <!-- <ng-container *ngIf=\"ShowChangePasswordScreen\"> -->\r\n <ng-container>\r\n <div class=\"col-lg-6\" [hidden]=\"!ShowChangePasswordScreen\">\r\n <div class=\"preference-container\">\r\n <div class=\"mt-3\">\r\n <form [formGroup]=\"userResetPasswordForm\">\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.CurrentPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(1)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeOldPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.PasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"oldUserARCXWD\"\r\n autocomplete=\"off\"\r\n id=\"oldpwd\"\r\n name=\"oldpwd\"\r\n autocomplete=\"off\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"lock Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm.get('oldUserARCXWD')?.invalid &&\r\n userResetPasswordForm.get('oldUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.NewPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(2)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeNewPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.NewPasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"newUserARCXWD\"\r\n id=\"newpwd\"\r\n autocomplete=\"off\"\r\n name=\"newpwd\"\r\n autocomplete=\"off\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"lock Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('newUserARCXWD')\r\n ?.hasError('required') &&\r\n userResetPasswordForm.get('newUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.NewPasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('newUserARCXWD')\r\n ?.hasError('pwdInvalid') &&\r\n userResetPasswordForm.get('newUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{ pwderrorMsg }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.ConfirmPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(3)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeCnfrmPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.ConfirmPasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"crnmNewUserARCXWD\"\r\n autocomplete=\"off\"\r\n id=\"crnmnewpwd\"\r\n name=\"crnmnewpwd\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"eye Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('crnmNewUserARCXWD')\r\n ?.hasError('required') &&\r\n userResetPasswordForm.get('crnmNewUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.ConfirmPasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <span\r\n class=\"error-msg mt-2\"\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('crnmNewUserARCXWD')\r\n ?.hasError('confirmedValidator')\r\n \"\r\n >\r\n {{\r\n \"Generic_lib.ConfirmPasswordFieldNewValidation\" | translate\r\n }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"mt-4\">\r\n <p-button\r\n class=\"submit-btn\"\r\n label=\"{{ 'Generic_lib.Update' | translate }}\"\r\n iconPos=\"right\"\r\n [loading]=\"isPathUpdated\"\r\n label=\"Update\"\r\n (onClick)=\"resetLoggedInPwd()\"\r\n ></p-button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".pl{padding-left:0!important}.left-card{height:450px!important;background:#f6f7fb!important;border-radius:8px!important}.left-card .profile-label{font-size:13px!important;color:#292f4c!important;font-weight:600!important}.left-card .profile-text{color:#676879!important;font-size:12px!important;font-weight:400!important;line-height:20px!important}.initial-text{width:50px;height:50px;display:flex;align-items:center;justify-content:center;font-size:15px;border-radius:50%;color:#fff;background-color:#8e562e}.preference-container .path-title{font-size:20px;color:#292f4c}.preference-container .form-group{margin-bottom:15px}.preference-container .label-name{font-size:12px;color:#292f4c;line-height:26px;font-weight:600}.preference-container .cur-text{font-size:12px;color:#676879;line-height:26px;font-weight:600}.checkbox-visibility-icon{position:relative}.checkbox-visibility-icon input[type=checkbox]{opacity:0;position:absolute;top:4px;left:5px;transform:scale(1.7);z-index:2;cursor:pointer}.checkbox-visibility-icon input[type=checkbox]:checked+span{background:url(../../assets/common-header-lib/images/login-bg/visibility.svg);background-repeat:no-repeat;background-position:0px;height:12px;width:18px;display:block;background-size:17px}@media (min-width: 992px){.checkbox-visibility-icon input[type=checkbox]:checked+span{height:12px;width:18px;background-size:17px}}.checkbox-visibility-icon input[type=checkbox]+span{background:url(../../assets/common-header-lib/images/login-bg/visibility_off.svg);background-repeat:no-repeat;background-position:0px;height:12px;width:18px;display:block;background-size:17px}@media (min-width: 992px){.checkbox-visibility-icon input[type=checkbox]+span{height:24px;width:18px;background-size:17px}}.input-dropdown .p-inputtext{width:100%!important;border-radius:4px!important;font-size:12px!important;padding-left:28px!important;height:38px!important;border:1px solid #ced4da!important}.p-dropdown-filter-container input{border:1px solid #ced4da!important}.profile-card{cursor:pointer}.profile-card:hover{background:#dcdfec;color:#292f4c;border-radius:4px}.profile-card.active{border-radius:4px;cursor:pointer;background:#cce5ff url(../assets/common-header-lib/images/grey-arrow.svg) no-repeat 96%}\n"], dependencies: [{ kind: "directive", type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i13.InputText, selector: "[pInputText]" }, { kind: "component", type: i14.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i15.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i16.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i17.TimezoneConfigurationComponent, selector: "app-timezone-configuration", outputs: ["closepopup"] }, { kind: "component", type: i18.LandingpgConfigComponent, selector: "app-landingpg-config" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
|
|
398
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GeneralConfigurationComponent, decorators: [{
|
|
399
|
+
type: Component,
|
|
400
|
+
args: [{ selector: 'app-general-configuration', providers: [DialogService], template: "<div class=\"row my-3\">\r\n <!-- Left_Card_Started -->\r\n <div class=\"col-lg-4 pl-0\">\r\n <div class=\"left-card\">\r\n <div class=\"p-3\">\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowPreferencePathScreen }\"\r\n (click)=\"OpenPreferencePathScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.PreferencePath\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowChangePasswordScreen }\"\r\n (click)=\"OpenChangePasswordScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.ChangePassword\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowTimeZoneScreen }\"\r\n (click)=\"OpenTimezoneScreen()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.PreferredTimezone\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"profile-card\"\r\n [ngClass]=\"{ active: ShowLandinPgScreen }\"\r\n (click)=\"OpenLandingPgConfig()\"\r\n >\r\n <div class=\"p-2\">\r\n <div class=\"profile-label\">\r\n {{ \"Generic_lib.LandingPageConfig\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Left_Card_Ended -->\r\n\r\n <!--User Profile -->\r\n <ng-container *ngIf=\"ShowUserProfileScreen\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"initial-text\">\r\n {{ \"AK\" }}\r\n </div>\r\n <div class=\"preference-container\">\r\n <!--Card-->\r\n <div class=\"mt-3\">\r\n <div class=\"form-group\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.UserName\" | translate }}\r\n </div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n pInputText\r\n formControlName=\"text\"\r\n placeholder=\"{{ 'Generic_lib.UserName' | translate }}\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/images/user-name.svg\"\r\n alt=\"Icon\"\r\n class=\"position-absolute px-2\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <div class=\"label-name\">{{ \"Generic_lib.Email\" | translate }}</div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n pInputText\r\n formControlName=\"text\"\r\n placeholder=\"{{ 'Generic_lib.EmailAddress' | translate }}\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/gc-mail.svg\"\r\n alt=\"Icon\"\r\n class=\"position-absolute px-2\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"mt-4\">\r\n <p-button class=\"submit-btn\" label=\"Submit\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Preference PathScreen -->\r\n <ng-container>\r\n <!-- <ng-container *ngIf=\"ShowPreferencePathScreen\"> -->\r\n <div class=\"col-lg-6\" [hidden]=\"!ShowPreferencePathScreen\">\r\n <div class=\"preference-container\">\r\n <div class=\"mt-3\">\r\n <form [formGroup]=\"appSettingForm\">\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.AssetType\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userAssetTypeList\"\r\n formControlName=\"AssetType\"\r\n placeholder=\"{{\r\n 'Generic_lib.AssetTypePlaceholder' | translate\r\n }}\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n (onChange)=\"preferencePathValueChange(AssetTypeEvent)\"\r\n optionLabel=\"assetType\"\r\n [filter]=\"!isAssetTypeLoading ? true : false\"\r\n filterBy=\"assetType\"\r\n [showClear]=\"false\"\r\n [resetFilterOnHide]=\"true\"\r\n panelStyleClass=\"{'dropdown-loader': isAssetTypeLoading}\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isAssetTypeLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('AssetType')?.invalid &&\r\n appSettingForm.get('AssetType')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.AssetTypeFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.AssetName\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userAssetNameList\"\r\n formControlName=\"AssetName\"\r\n placeholder=\"{{\r\n 'Generic_lib.AssetNamePlaceholder' | translate\r\n }}\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n optionLabel=\"assetName\"\r\n [filter]=\"!isAssetNameLoading ? true : false\"\r\n filterBy=\"assetType\"\r\n (onChange)=\"preferencePathValueChange(AssetNameEvent)\"\r\n filterBy=\"assetName\"\r\n panelStyleClass=\"{'dropdown-loader': isAssetNameLoading}\"\r\n [showClear]=\"false\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isAssetNameLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('AssetName')?.invalid &&\r\n appSettingForm.get('AssetName')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.AssetNameFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.ConnectionMethod\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"assets-dropdown\">\r\n <p-dropdown\r\n [options]=\"userServiceList\"\r\n formControlName=\"ServiceName\"\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.ConnectionMethodPlaceholder' | translate\r\n }}\"\r\n optionLabel=\"tbvDescrption\"\r\n [filter]=\"true\"\r\n filterBy=\"tbvDescrption\"\r\n (onChange)=\"preferencePathValueChange(ConnectionMethodEvent)\"\r\n [filter]=\"!isConnectionMethodLoading ? true : false\"\r\n [showClear]=\"false\"\r\n panelStyleClass=\"{'dropdown-loader': isConnectionMethodLoading}\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <div\r\n *ngIf=\"isConnectionMethodLoading\"\r\n class=\"dropdown-loader-container\"\r\n >\r\n <i class=\"pi pi-spin pi-spinner\"></i>\r\n </div> </ng-template\r\n ></p-dropdown>\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('ServiceName')?.invalid &&\r\n appSettingForm.get('ServiceName')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.ConnectionMethodFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group position-relative\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.PreferencePath\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div class=\"input-dropdown d-flex align-items-center\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"{{ 'Generic_lib.PreferencePath' | translate }}\"\r\n pInputText\r\n formControlName=\"filePathName\"\r\n id=\"filepath\"\r\n name=\"filepath\"\r\n autocomplete=\"off\"\r\n />\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/filepath.svg\"\r\n alt=\"path Icon\"\r\n class=\"position-absolute mx-2 img-lock ext\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.get('filePathName')?.invalid &&\r\n (appSettingForm.get('filePathName')?.touched ||\r\n appSettingForm.get('filePathName')?.dirty)\r\n \"\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.controls['filePathName'].errors?.['required']\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PreferencePathFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n appSettingForm.controls['filePathName'].errors?.['noSpace']\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PreferencePathFieldSpaceValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"showStatus\">\r\n <div class=\"form-group d-flex align-items-center\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.CurrentSetting\" | translate }} :\r\n </div>\r\n <div class=\"cur-text mx-2\">{{ filePathName }}</div>\r\n </div>\r\n <div class=\"form-group d-flex align-items-center\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.LastUpdated\" | translate }}\r\n </div>\r\n <div class=\"cur-text mx-2\">{{ lastUpdatedFileStatus }}</div>\r\n </div>\r\n </ng-container>\r\n <div class=\"mt-4\">\r\n <p-button\r\n class=\"submit-btn\"\r\n label=\"{{ 'Generic_lib.Update' | translate }}\"\r\n [disabled]=\"appSettingForm.invalid\"\r\n (onClick)=\"setUserPreferencePath(appSettingForm)\"\r\n iconPos=\"right\"\r\n [loading]=\"isPathUpdated\"\r\n ></p-button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- TimeZone Screen -->\r\n <ng-container *ngIf=\"ShowTimeZoneScreen\">\r\n <div class=\"col-lg-6\">\r\n <app-timezone-configuration></app-timezone-configuration>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- LandingPg Config Screen -->\r\n <ng-container *ngIf=\"ShowLandinPgScreen\">\r\n <div class=\"col-lg-6\">\r\n <app-landingpg-config></app-landingpg-config>\r\n </div>\r\n </ng-container>\r\n\r\n <!--Change Password Screen -->\r\n <!-- <ng-container *ngIf=\"ShowChangePasswordScreen\"> -->\r\n <ng-container>\r\n <div class=\"col-lg-6\" [hidden]=\"!ShowChangePasswordScreen\">\r\n <div class=\"preference-container\">\r\n <div class=\"mt-3\">\r\n <form [formGroup]=\"userResetPasswordForm\">\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.CurrentPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(1)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeOldPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.PasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"oldUserARCXWD\"\r\n autocomplete=\"off\"\r\n id=\"oldpwd\"\r\n name=\"oldpwd\"\r\n autocomplete=\"off\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"lock Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm.get('oldUserARCXWD')?.invalid &&\r\n userResetPasswordForm.get('oldUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.PasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.NewPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(2)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeNewPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.NewPasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"newUserARCXWD\"\r\n id=\"newpwd\"\r\n autocomplete=\"off\"\r\n name=\"newpwd\"\r\n autocomplete=\"off\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"lock Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('newUserARCXWD')\r\n ?.hasError('required') &&\r\n userResetPasswordForm.get('newUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.NewPasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('newUserARCXWD')\r\n ?.hasError('pwdInvalid') &&\r\n userResetPasswordForm.get('newUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{ pwderrorMsg }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group\">\r\n <div class=\"d-flex\">\r\n <div class=\"label-name\">\r\n {{ \"Generic_lib.ConfirmPassword\" | translate }}\r\n </div>\r\n <span class=\"madontary-icon\">*</span>\r\n </div>\r\n <div\r\n class=\"input-dropdown d-flex align-items-center position-relative\"\r\n >\r\n <div class=\"password-checkbox-right\">\r\n <div class=\"checkbox-visibility-icon\">\r\n <input\r\n type=\"checkbox\"\r\n (click)=\"togglePasswordVisibility(3)\"\r\n autocomplete=\"off\"\r\n />\r\n <span></span>\r\n </div>\r\n </div>\r\n <input\r\n type=\"{{ makeCnfrmPwdVisible ? 'password' : 'text' }}\"\r\n placeholder=\"{{\r\n 'Generic_lib.ConfirmPasswordPlaceholder' | translate\r\n }}\"\r\n pInputText\r\n formControlName=\"crnmNewUserARCXWD\"\r\n autocomplete=\"off\"\r\n id=\"crnmnewpwd\"\r\n name=\"crnmnewpwd\"\r\n />\r\n\r\n <img\r\n src=\".../../../../../assets/common-header-lib/images/lock-pass.svg\"\r\n alt=\"eye Icon\"\r\n class=\"position-absolute mx-2 img-lock\"\r\n />\r\n </div>\r\n <ng-container\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('crnmNewUserARCXWD')\r\n ?.hasError('required') &&\r\n userResetPasswordForm.get('crnmNewUserARCXWD')?.touched\r\n \"\r\n >\r\n <span class=\"error-msg mt-2\">{{\r\n \"Generic_lib.ConfirmPasswordFieldValidation\" | translate\r\n }}</span>\r\n </ng-container>\r\n <span\r\n class=\"error-msg mt-2\"\r\n *ngIf=\"\r\n userResetPasswordForm\r\n .get('crnmNewUserARCXWD')\r\n ?.hasError('confirmedValidator')\r\n \"\r\n >\r\n {{\r\n \"Generic_lib.ConfirmPasswordFieldNewValidation\" | translate\r\n }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"mt-4\">\r\n <p-button\r\n class=\"submit-btn\"\r\n label=\"{{ 'Generic_lib.Update' | translate }}\"\r\n iconPos=\"right\"\r\n [loading]=\"isPathUpdated\"\r\n label=\"Update\"\r\n (onClick)=\"resetLoggedInPwd()\"\r\n ></p-button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".pl{padding-left:0!important}.left-card{height:450px!important;background:#f6f7fb!important;border-radius:8px!important}.left-card .profile-label{font-size:13px!important;color:#292f4c!important;font-weight:600!important}.left-card .profile-text{color:#676879!important;font-size:12px!important;font-weight:400!important;line-height:20px!important}.initial-text{width:50px;height:50px;display:flex;align-items:center;justify-content:center;font-size:15px;border-radius:50%;color:#fff;background-color:#8e562e}.preference-container .path-title{font-size:20px;color:#292f4c}.preference-container .form-group{margin-bottom:15px}.preference-container .label-name{font-size:12px;color:#292f4c;line-height:26px;font-weight:600}.preference-container .cur-text{font-size:12px;color:#676879;line-height:26px;font-weight:600}.checkbox-visibility-icon{position:relative}.checkbox-visibility-icon input[type=checkbox]{opacity:0;position:absolute;top:4px;left:5px;transform:scale(1.7);z-index:2;cursor:pointer}.checkbox-visibility-icon input[type=checkbox]:checked+span{background:url(../../assets/common-header-lib/images/login-bg/visibility.svg);background-repeat:no-repeat;background-position:0px;height:12px;width:18px;display:block;background-size:17px}@media (min-width: 992px){.checkbox-visibility-icon input[type=checkbox]:checked+span{height:12px;width:18px;background-size:17px}}.checkbox-visibility-icon input[type=checkbox]+span{background:url(../../assets/common-header-lib/images/login-bg/visibility_off.svg);background-repeat:no-repeat;background-position:0px;height:12px;width:18px;display:block;background-size:17px}@media (min-width: 992px){.checkbox-visibility-icon input[type=checkbox]+span{height:24px;width:18px;background-size:17px}}.input-dropdown .p-inputtext{width:100%!important;border-radius:4px!important;font-size:12px!important;padding-left:28px!important;height:38px!important;border:1px solid #ced4da!important}.p-dropdown-filter-container input{border:1px solid #ced4da!important}.profile-card{cursor:pointer}.profile-card:hover{background:#dcdfec;color:#292f4c;border-radius:4px}.profile-card.active{border-radius:4px;cursor:pointer;background:#cce5ff url(../assets/common-header-lib/images/grey-arrow.svg) no-repeat 96%}\n"] }]
|
|
401
|
+
}], ctorParameters: function () { return [{ type: i1.CommonHeaderLibService }, { type: i2.FormBuilder }, { type: i3.ToastMsgService }, { type: i4.EncrydecryRSAdataService }, { type: i5.RESTLoginFormService }, { type: i6.ASYNCPasswordcheckService }, { type: i7.TranslateService }, { type: i8.VaptValidationService }, { type: i9.DynamicDialogConfig }, { type: i10.HttpCommonService }, { type: i11.HttpGeneralConfigurationService }]; } });
|
|
402
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXItbGliL3NyYy9saWIvY29tcG9uZW50cy9nZW5lcmFsLWNvbmZpZ3VyYXRpb24vZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXItbGliL3NyYy9saWIvY29tcG9uZW50cy9nZW5lcmFsLWNvbmZpZ3VyYXRpb24vZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3JGLE9BQU8sRUFBaUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLHFHQUFxRztBQUNyRyxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGtCQUFrQixHQUNuQixNQUFNLDRDQUE0QyxDQUFDO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxP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QUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQWE7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsRCxDQUFDOzswSEF4WlUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsb0RBRjdCLENBQUMsYUFBYSxDQUFDLDBCQzFCNUIsZzhxQkEyaEJBOzJGRC9mYSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0UsMkJBQTJCLGFBRzFCLENBQUMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW5jcnlkZWNyeVJTQWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9FbmNyeXBEZWNyeXBfUlNBLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUkVTVExvZ2luRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LWxvZ2luLWZvcm0uc2VydmljZSc7XHJcbi8vIGltcG9ydCB7IFJFU1RNeWFjY2Vzc1NlcnZpY2UgfSBmcm9tICdzcmMvYXBwL3NoYXJlZC9TZXJ2aWNlcy9SRVNULVNlcnZpY2VzL3Jlc3QtbXlhY2Nlc3Muc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQVNZTkNQYXNzd29yZGNoZWNrU2VydmljZSxcclxuICBDb25maXJtZWRWYWxpZGF0b3IsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXN5bmMtcGFzc3dvcmRjaGVjay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW5jcnBkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VuY3JwZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RNc2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9hc3QtbXNnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWYXB0VmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YXB0LXZhbGlkYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IG5vU3BhY2VBbGxvd2VkIH0gZnJvbSAnLi4vLi4vVmFsaWRhdG9ycy9ub1NwYWNlQWxsb3dlZCc7XHJcbmltcG9ydCB7IGVycm9yTXNnLCBMb2dnZWRJblVzZXJJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YV9tb2RlbCc7XHJcbmltcG9ydCB7IENvbW1vbkhlYWRlckxpYlNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24taGVhZGVyLWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZyB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEh0dHBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9odHRwLWNvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cEdlbmVyYWxDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvaHR0cC1nZW5lcmFsLWNvbmZpZy5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZ2VuZXJhbC1jb25maWd1cmF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJhbC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmFsLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdlbmVyYWxDb25maWd1cmF0aW9uQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgLy8gZXhwb3J0IGNsYXNzIEdlbmVyYWxDb25maWd1cmF0aW9uQ29tcG9uZW50ICB7XHJcbiAgcHVibGljIFNob3dQcmVmZXJlbmNlUGF0aFNjcmVlbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIFNob3dVc2VyUHJvZmlsZVNjcmVlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBTaG93Q2hhbmdlUGFzc3dvcmRTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgU2hvd1RpbWVab25lU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIFNob3dMYW5kaW5QZ1NjcmVlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBTaG93VGltZVpvbmVCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1N0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VyQXNzZXRUeXBlTGlzdCA9IFtdO1xyXG4gIHB1YmxpYyB1c2VyQXNzZXROYW1lTGlzdCA9IFtdO1xyXG4gIHB1YmxpYyB1c2VyU2VydmljZUxpc3QgPSBbXTtcclxuICBwdWJsaWMgdXNlclNlbGVjdGVkVGltZXpvbmU6IHN0cmluZyA9ICcnO1xyXG4gIC8vIHByaXZhdGUgZG9tYWluTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgLy8gcHJpdmF0ZSBkb21haW5JRDogbnVtYmVyO1xyXG4gIC8vIHByaXZhdGUgTG9nZ2VkSW5Vc2VySUQ6IG51bWJlcjtcclxuICAvLyBwcml2YXRlIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIGZpbGVQYXRoTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGxhc3RVcGRhdGVkRmlsZVN0YXR1czogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBwcmVmZXJlbmNlUGF0aElEOiBhbnk7XHJcbiAgcHVibGljIGFwcFNldHRpbmdGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTsgLy8gRGVmaW5lIGZvcm0gZ3JvdXBcclxuICBwdWJsaWMgdXNlclJlc2V0UGFzc3dvcmRGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTsgLy91c2VyIFJlc2V0IFBhc3N3b3JkIEZvcm1cclxuICBwdWJsaWMgdGltZVpvbmVGb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTsgLy91c2VyIFJlc2V0IFBhc3N3b3JkIEZvcm1cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGE6IFN1YmplY3Q8Ym9vbGVhbj4gPVxyXG4gICAgbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgbWFrZU5ld1B3ZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBtYWtlT2xkUHdkVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIG1ha2VDbmZybVB3ZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBpc0Fzc2V0VHlwZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNBc3NldE5hbWVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzQ29ubmVjdGlvbk1ldGhvZExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNQYXRoVXBkYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBwd2RlcnJvck1zZzogc3RyaW5nID0gJyc7XHJcbiAgcHJvdGVjdGVkIEFzc2V0VHlwZUV2ZW50OiBzdHJpbmcgPSAnQXNzZXRUeXBlJztcclxuICBwcm90ZWN0ZWQgQXNzZXROYW1lRXZlbnQ6IHN0cmluZyA9ICdBc3NldE5hbWUnO1xyXG4gIHByb3RlY3RlZCBDb25uZWN0aW9uTWV0aG9kRXZlbnQ6IHN0cmluZyA9ICdDb25uZWN0aW9uTWV0aG9kJztcclxuICBwdWJsaWMgcGF0aFN1Y2Nlc3NNc2c6IHN0cmluZyA9IGVycm9yTXNnLlBBVEhTVUNDRVNTO1xyXG4gIHB1YmxpYyBwYXRoRXJyb3JNc2c6IHN0cmluZyA9IGVycm9yTXNnLlBBVEhFUlJPUjtcclxuICBhcGlVUkw6IHN0cmluZyA9ICcnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbGliU2VydmljZTogQ29tbW9uSGVhZGVyTGliU2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBtc2dTZXJ2aWNlOiBUb2FzdE1zZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVuY3J5cHRTZXJ2aWNlOiBFbmNyeWRlY3J5UlNBZGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvZ2luU2VydmljZTogUkVTVExvZ2luRm9ybVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF92YWxpZGF0ZVB3ZFNlcnZpY2U6IEFTWU5DUGFzc3dvcmRjaGVja1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92YXB0U2VydmljZTogVmFwdFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHB1YmxpYyByZWFkb25seSBodHRwQ29tbW9uU2VydmljZTogSHR0cENvbW1vblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaHR0cEdlbmVyYWxDb25maWdTZXJ2aWNlOiBIdHRwR2VuZXJhbENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvL0dldCBJbml0YWxpemUgRm9ybVxyXG4gICAgdGhpcy5nZXRJbml0YWxpemVGb3JtKCk7XHJcbiAgICB0aGlzLk9wZW5QcmVmZXJlbmNlUGF0aFNjcmVlbigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRUcmFuc2xhdGVDb250ZW50KCk7XHJcbiAgICBjb25zb2xlLmxvZygnVmlld0luaXQnKTtcclxuXHJcbiAgICAvLyBHZXQgUFdEIFZhbGlkYXRpb24gTVNnIEZyb20gVmFsaWRhdGlvbiBTZXJ2aWNlXHJcbiAgICB0aGlzLl92YWxpZGF0ZVB3ZFNlcnZpY2UubGlzdFZhbGlkYXRpb25Nc2coKS5zdWJzY3JpYmUoKG1zZzogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdNc2c6JywgbXNnKTtcclxuICAgICAgdGhpcy5wd2RlcnJvck1zZyA9IG1zZztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5pdGFsaXplRm9ybSgpIHtcclxuICAgIHRoaXMuYXBwU2V0dGluZ0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgQXNzZXRUeXBlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBBc3NldE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIFNlcnZpY2VOYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBmaWxlUGF0aE5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIG5vU3BhY2VBbGxvd2VkKCldXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudGltZVpvbmVGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHRpbWV6b25lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUGFzc3dvcmQgUmVzZXQgRm9ybVxyXG4gICAgdGhpcy51c2VyUmVzZXRQYXNzd29yZEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICB7XHJcbiAgICAgICAgb2xkVXNlckFSQ1hXRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIG5ld1VzZXJBUkNYV0Q6IFtcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgW3RoaXMuX3ZhbGlkYXRlUHdkU2VydmljZS5jcmVhdGVWYWxpZGF0b3IoKV0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjcm5tTmV3VXNlckFSQ1hXRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdmFsaWRhdG9yOiBDb25maXJtZWRWYWxpZGF0b3IoJ25ld1VzZXJBUkNYV0QnLCAnY3JubU5ld1VzZXJBUkNYV0QnKSxcclxuICAgICAgfSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyAgIC8vTWV0aG9kOiBDb252ZXJ0IHRleHQgb25lIExhbmcuIHRvIGFub3RoZXJcclxuICBwcml2YXRlIGdldFRyYW5zbGF0ZUNvbnRlbnQoKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcclxuICAgICAgLmdldChbXHJcbiAgICAgICAgJ0dlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoU3VjY2Vzc01zZycsXHJcbiAgICAgICAgJ0dlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoRXJyb3JNc2cnLFxyXG4gICAgICBdKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSlcclxuICAgICAgLnN1YnNjcmliZSgodHJhbnM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucGF0aFN1Y2Nlc3NNc2cgPSB0cmFuc1snR2VuZXJpY19saWIuUHJlZmVyZW5jZVBhdGhTdWNjZXNzTXNnJ107XHJcbiAgICAgICAgdGhpcy5wYXRoRXJyb3JNc2cgPSB0cmFuc1snR2VuZXJpY19saWIuUHJlZmVyZW5jZVBhdGhFcnJvck1zZyddO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuUHJlZmVyZW5jZVBhdGhTY3JlZW4oKSB7XHJcbiAgICB0aGlzLmNsb3NlQWxsU2NyZWVuKCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5TaG93UHJlZmVyZW5jZVBhdGhTY3JlZW4gPSB0cnVlO1xyXG4gICAgICB0aGlzLmFwcFNldHRpbmdGb3JtLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMudXNlckFzc2V0VHlwZUxpc3QgPSBbXTtcclxuICAgICAgdGhpcy51c2VyQXNzZXROYW1lTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLmdldFNlcnZpY2VBc3NldERldGFpbHMoKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuVXNlclByb2ZpbGVTY3JlZW4oKSB7XHJcbiAgICB0aGlzLmNsb3NlQWxsU2NyZWVuKCk7XHJcbiAgICB0aGlzLlNob3dVc2VyUHJvZmlsZVNjcmVlbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgT3BlbkNoYW5nZVBhc3N3b3JkU2NyZWVuKCkge1xyXG4gICAgdGhpcy5jbG9zZUFsbFNjcmVlbigpO1xyXG4gICAgdGhpcy5TaG93Q2hhbmdlUGFzc3dvcmRTY3JlZW4gPSB0cnVlO1xyXG4gICAgdGhpcy51c2VyUmVzZXRQYXNzd29yZEZvcm0ucmVzZXQoKTtcclxuICAgIC8vIHRoaXMuZ2V0RW5jcnlwdEtleSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE9wZW5UaW1lem9uZVNjcmVlbigpIHtcclxuICAgIHRoaXMuY2xvc2VBbGxTY3JlZW4oKTtcclxuICAgIHRoaXMuU2hvd1RpbWVab25lU2NyZWVuID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuTGFuZGluZ1BnQ29uZmlnKCkge1xyXG4gICAgdGhpcy5jbG9zZUFsbFNjcmVlbigpO1xyXG4gICAgdGhpcy5TaG93TGFuZGluUGdTY3JlZW4gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlQWxsU2NyZWVuKCkge1xyXG4gICAgdGhpcy5TaG93UHJlZmVyZW5jZVBhdGhTY3JlZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd1VzZXJQcm9maWxlU2NyZWVuID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dDaGFuZ2VQYXNzd29yZFNjcmVlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93VGltZVpvbmVTY3JlZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd0xhbmRpblBnU2NyZWVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJlZmVyZW5jZVBhdGhWYWx1ZUNoYW5nZShldmVudE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gdGhpcy5Bc3NldFR5cGVFdmVudCkge1xyXG4gICAgICBjb25zdCBhc3NldFR5cGUgPSB0aGlzLmFwcFNldHRpbmdGb3JtLmdldCgnQXNzZXRUeXBlJyk/LnZhbHVlO1xyXG4gICAgICB0aGlzLnNob3dTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5yZXNldEZvcm1maWVsZHMoWydBc3NldE5hbWUnLCAnU2VydmljZU5hbWUnLCAnZmlsZVBhdGhOYW1lJ10pO1xyXG4gICAgICB0aGlzLnVzZXJBc3NldE5hbWVMaXN0ID0gW107XHJcbiAgICAgIHRoaXMudXNlclNlcnZpY2VMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuZ2V0U2VydmljZUFzc2V0TmFtZShhc3NldFR5cGVbJ2Fzc2V0VHlwZUlEJ10pO1xyXG4gICAgfSBlbHNlIGlmIChldmVudE5hbWUgPT09IHRoaXMuQXNzZXROYW1lRXZlbnQpIHtcclxuICAgICAgY29uc3QgYXNzZXROYW1lID0gdGhpcy5hcHBTZXR0aW5nRm9ybS5nZXQoJ0Fzc2V0TmFtZScpPy52YWx1ZTtcclxuICAgICAgdGhpcy5zaG93U3RhdHVzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVzZXRGb3JtZmllbGRzKFsnU2VydmljZU5hbWUnLCAnZmlsZVBhdGhOYW1lJ10pO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLmZldGNoU2VydmljZU5hbWVCeUFzc2V0VHlwZUV2ZW50KGFzc2V0TmFtZVsnYXNzZXROYW1lJ10pO1xyXG4gICAgfSBlbHNlIGlmIChldmVudE5hbWUgPT09IHRoaXMuQ29ubmVjdGlvbk1ldGhvZEV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IFNlcnZpY2VEZXRhaWxzID0gdGhpcy5hcHBTZXR0aW5nRm9ybS5nZXQoJ1NlcnZpY2VOYW1lJyk/LnZhbHVlO1xyXG4gICAgICB0aGlzLnNob3dTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5yZXNldEZvcm1maWVsZHMoWydmaWxlUGF0aE5hbWUnXSk7XHJcbiAgICAgIHRoaXMuZ2V0RmlsZVBhdGhEZXRhaWxzKFNlcnZpY2VEZXRhaWxzWydzZXJ2aWNlVHlwZUlkJ10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gICAvKkFjdGlvbiA6IFVzZWQgdG8gR2V0IEFzc2V0IFR5cGUgdG8gdXBkYXRlIFByZWZyZW5jZSBQYXRoIG9mIENvbm5lY3RvcnMgKi9cclxuICBnZXRTZXJ2aWNlQXNzZXREZXRhaWxzKCkge1xyXG4gICAgdGhpcy5pc0Fzc2V0VHlwZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5odHRwR2VuZXJhbENvbmZpZ1NlcnZpY2VcclxuICAgICAgLmdldFVzZXJQcmVmZXJyZWRBc3NldFR5cGVEZXRhaWxzKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YSksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0Fzc2V0VHlwZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnVzZXJBc3NldFR5cGVMaXN0ID0gZGF0YTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAgIC8qQWN0aW9uIDogVXNlZCB0byBHZXQgQXNzZXQgTmFtZSB0byB1cGRhdGUgUHJlZnJlbmNlIFBhdGggb2YgdGhhdCBBc3NldCdzIENvbm5lY3RvcnMgKi9cclxuICBwcml2YXRlIGdldFNlcnZpY2VBc3NldE5hbWUoYXNzZXRUeXBlSUQ6IGFueSkge1xyXG4gICAgdGhpcy5pc0Fzc2V0TmFtZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGFzc2V0VHlwZUlkOiBhc3NldFR5cGVJRCxcclxuICAgIH07XHJcbiAgICB0aGlzLmh0dHBHZW5lcmFsQ29uZmlnU2VydmljZVxyXG4gICAgICAuZ2V0VXNlclByZWZlcnJlZEFzc2V0TmFtZShwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzQXNzZXROYW1lTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXNlckFzc2V0TmFtZUxpc3QgPSBkYXRhO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLypNZXRob2QgOiBHRVRcclxuICAvLyAgICBBY3Rpb24gOiBnZXQgVXNlciBBc3NpZ25lZCBTZXJ2aWNlTmFtZSBCeSBBc3NldFR5cGVFdmVudCAqL1xyXG4gIHByaXZhdGUgZmV0Y2hTZXJ2aWNlTmFtZUJ5QXNzZXRUeXBlRXZlbnQoYXNzZXROYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaXNDb25uZWN0aW9uTWV0aG9kTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgYXNzZXROYW1lOiBhc3NldE5hbWUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5odHRwR2VuZXJhbENvbmZpZ1NlcnZpY2VcclxuICAgICAgLmdldFNlcnZpY2VOYW1lQnlBc3NldFR5cGVFdmVudChwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzQ29ubmVjdGlvbk1ldGhvZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlTGlzdCA9IGRhdGE7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gICAvKk1ldGhvZCA6IEdFVFxyXG4gIC8vICAgIEFjdGlvbiA6IEZldGNoIFVzZXIncyBGaWxlIFBhdGggRGV0YWlscyBhbmQgU3RhdHVzIGFscmVhZHkgc2V0IG9yIG5vdCAqL1xyXG4gIHByaXZhdGUgZ2V0RmlsZVBhdGhEZXRhaWxzKHNlcnZpY2VJRDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgLy8gdXNlcklkOiB0aGlzLkxvZ2dlZEluVXNlcklELFxyXG4gICAgICBzZXJ2aWNlVHlwZUlkOiBzZXJ2aWNlSUQsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5odHRwR2VuZXJhbENvbmZpZ1NlcnZpY2VcclxuICAgICAgLmdldFByZWZlcmVuY2VQYXRoRGV0YWlscyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnByZWZlcmVuY2VQYXRoSUQgPSByZXNbJ3NwbUlkJ107XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXNbJ2N1cnJlbnRTZXR0aW5nJ10gJiYgcmVzWydsYXN0VXBkYXRlJ10pIHtcclxuICAgICAgICAgIHRoaXMuc2hvd1N0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmZpbGVQYXRoTmFtZSA9IHJlc1snY3VycmVudFNldHRpbmcnXTtcclxuICAgICAgICAgIHRoaXMubGFzdFVwZGF0ZWRGaWxlU3RhdHVzID0gcmVzWydsYXN0VXBkYXRlJ107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsZVBhdGhOYW1lID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnNob3dTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubGFzdFVwZGF0ZWRGaWxlU3RhdHVzID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLypBY3Rpb24gOiBJdCBzYXZlcyBvciB1cGRhdGVzIGEgcHJlZmVyZW5jZSBwYXRoIG9mIHVzZXIgKi9cclxuICBzZXRVc2VyUHJlZmVyZW5jZVBhdGgoYXBwU2V0dGluZ0Zvcm06IGFueSkge1xyXG4gICAgdGhpcy50b2dnbGVCdG5Mb2FkZGVyKHRydWUpO1xyXG4gICAgY29uc3QgdXNlcnBhdGg6IHN0cmluZyA9IFN0cmluZyhcclxuICAgICAgYXBwU2V0dGluZ0Zvcm0udmFsdWVbJ2ZpbGVQYXRoTmFtZSddLFxyXG4gICAgKS50cmltKCk7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgLy8gdXNlcklkOiB0aGlzLkxvZ2dlZEluVXNlcklELFxyXG4gICAgICAvLyB1c2VyTG9nVGltZTogdGhpcy5fY29va2llU2VydmljZS5nZXRDb29raWVWYWx1ZShDT09LSUVDT05TVEFOVC5TRVNTSU9OSUQpLFxyXG4gICAgICBzZXJ2aWNlVHlwZUlkOiBhcHBTZXR0aW5nRm9ybS52YWx1ZVsnU2VydmljZU5hbWUnXVsnc2VydmljZVR5cGVJZCddLFxyXG4gICAgICBzdXBEZXNjcmlwdGlvbjogdXNlcnBhdGgsXHJcbiAgICAgIHNwbUlkOiB0aGlzLnByZWZlcmVuY2VQYXRoSUQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaHR0cEdlbmVyYWxDb25maWdTZXJ2aWNlXHJcbiAgICAgIC51cGRhdGVQcmVmZXJlbmNlUGF0aChwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZUJ0bkxvYWRkZXIoZmFsc2UpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XHJcbiAgICAgICAgICB0aGlzLnNob3dTdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubXNnU2VydmljZS5zdWNjZXNzKHRoaXMucGF0aFN1Y2Nlc3NNc2cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1zZ1NlcnZpY2UuZXJyb3IodGhpcy5wYXRoRXJyb3JNc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAgIC8vTWV0aG9kIDogVXNlZCB0byBwZXJmb3JtIHBhc3N3b3JkIHJlc2V0IG9mIFVzZXJcclxuICByZXNldExvZ2dlZEluUHdkKCkge1xyXG4gICAgaWYgKHRoaXMuX3ZhcHRTZXJ2aWNlLmhhc1Vuc2FmZUlucHV0KHRoaXMudXNlclJlc2V0UGFzc3dvcmRGb3JtLnZhbHVlKSkge1xyXG4gICAgICB0aGlzLm1zZ1NlcnZpY2UuZXJyb3IoZXJyb3JNc2cuU0NSSVBURVJST1IpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnVzZXJSZXNldFBhc3N3b3JkRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZiAodGhpcy51c2VyUmVzZXRQYXNzd29yZEZvcm0udmFsaWQpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VMb2dnZWRJblB3ZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gICAvKk1ldGhvZDogd2lsbCBVc2VyIE5ldyBQYXNzd29yZCB0byBBUEkgKi9cclxuICBjaGFuZ2VMb2dnZWRJblB3ZCgpIHtcclxuICAgIC8vRm9yIEVuY3JwL0RlY1xyXG4gICAgbGV0IG9sZFVzZXJBUkNYV0QgPSB0aGlzLmVuY3J5cHRTZXJ2aWNlLmVuY3J5cHRWaWFSU0EoXHJcbiAgICAgIHRoaXMudXNlclJlc2V0UGFzc3dvcmRGb3JtLnZhbHVlWydvbGRVc2VyQVJDWFdEJ10sXHJcbiAgICApO1xyXG5cclxuICAgIC8vRm9yIEVuY3JwL0RlY1xyXG4gICAgbGV0IG5ld1VzZXJBUkNYV0QgPSB0aGlzLmVuY3J5cHRTZXJ2aWNlLmVuY3J5cHRWaWFSU0EoXHJcbiAgICAgIHRoaXMudXNlclJlc2V0UGFzc3dvcmRGb3JtLnZhbHVlWyduZXdVc2VyQVJDWFdEJ10sXHJcbiAgICApO1xyXG5cclxuICAgIGxldCB1c2VyUHdkRGV0YWlscyA9IHtcclxuICAgICAgaXBBZGRyZXNzOiAnJyxcclxuICAgICAgb2xkVXNlckFSQ1hXRDogb2xkVXNlckFSQ1hXRCxcclxuICAgICAgbmV3VXNlckFSQ1hXRDogbmV3VXNlckFSQ1hXRCxcclxuICAgICAgYXV0aGVudGljYXRpb25UeXBlOiAwLFxyXG4gICAgfTtcclxuICAgIGNvbnNvbGUubG9nKHVzZXJQd2REZXRhaWxzKTtcclxuXHJcbiAgICB0aGlzLnRvZ2dsZUJ0bkxvYWRkZXIodHJ1ZSk7XHJcbiAgICB0aGlzLmh0dHBDb21tb25TZXJ2aWNlXHJcbiAgICAgIC5zZXROZXdwYXNzd29yZCh1c2VyUHdkRGV0YWlscylcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YSksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2dnbGVCdG5Mb2FkZGVyKGZhbHNlKTtcclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YVsnc3VjY2VzcyddKSB7XHJcbiAgICAgICAgICB0aGlzLm1zZ1NlcnZpY2Uuc3VjY2VzcyhkYXRhWydtZXNzYWdlJ10pO1xyXG4gICAgICAgICAgdGhpcy51c2VyUmVzZXRQYXNzd29yZEZvcm0ucmVzZXQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFkYXRhWydzdWNjZXNzJ10pIHtcclxuICAgICAgICAgIHRoaXMubXNnU2VydmljZS5lcnJvcihkYXRhWydlcnJvck1lc3NhZ2UnXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLypNZXRob2Q6XHJcbiAgLy8gICAgIEFjdGlvbiA6IEdldCBQdWJsaWMgS2V5IGZvciBlbmNyeXB0aW9uIG9mIFVzZXIgRGV0YWlscyAgKi9cclxuICBnZXRFbmNyeXB0S2V5KCkge1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgdHlwZTogMCxcclxuICAgIH07XHJcbiAgICB0aGlzLmxvZ2luU2VydmljZVxyXG4gICAgICAuZ2V0UHJpdmF0ZUtleShwYXJhbXMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGEpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YVsnc3VjY2VzcyddID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBMb2dnZWRJblVzZXJJbmZvLnByaXZhdGVLZXkgPSBkYXRhWydyZXN1bHQnXTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGFbJ3N1Y2Nlc3MnXSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHRoaXMubXNnU2VydmljZS5lcnJvcignU2Vzc2lvbiBUb2tlbiBFcnJvciAhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLypNZXRob2QgOiBQT1NUXHJcbiAgLy8gICAgQWN0aW9uIDogR2V0IGNvbmZpZ3VyYXRpb24gSUQgYmFzZWQgb24gdG8gc2hvdyBoaWRlIFRpbWUgWm9uZSovXHJcbiAgZ2V0Z2xvYmFsQ29uZmlnRGV0YWlscygpIHtcclxuICAgIHRoaXMubG9naW5TZXJ2aWNlXHJcbiAgICAgIC5nZXRnbG9iYWxDb25maWdEZXRhaWxzKCcxJywgWzMzNl0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGEpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnRbJ2lkJ10gPT09IDMzNiAmJiBlbGVtZW50Wyd2YWx1ZSddID09PSAnMCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLlNob3dUaW1lWm9uZUJ0biA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5TaG93VGltZVpvbmVCdG4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vICAgLy8gIFNob3cvSGlkZSBQYXNzd29yZCBGaWxlZHMgb2YgQ2hhbmdlIFB3ZCBmb3JtXHJcbiAgdG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KGZsYWc6IG51bWJlcikge1xyXG4gICAgaWYgKGZsYWcgPT09IDEpIHtcclxuICAgICAgdGhpcy5tYWtlT2xkUHdkVmlzaWJsZSA9ICF0aGlzLm1ha2VPbGRQd2RWaXNpYmxlO1xyXG4gICAgfSBlbHNlIGlmIChmbGFnID09PSAyKSB7XHJcbiAgICAgIHRoaXMubWFrZU5ld1B3ZFZpc2libGUgPSAhdGhpcy5tYWtlTmV3UHdkVmlzaWJsZTtcclxuICAgIH0gZWxzZSBpZiAoZmxhZyA9PT0gMykge1xyXG4gICAgICB0aGlzLm1ha2VDbmZybVB3ZFZpc2libGUgPSAhdGhpcy5tYWtlQ25mcm1Qd2RWaXNpYmxlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtKCkge1xyXG4gICAgdGhpcy5hcHBTZXR0aW5nRm9ybS5yZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtZmllbGRzKGZpZWxkczogc3RyaW5nW10pIHtcclxuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZHNOYW1lKSA9PiB7XHJcbiAgICAgIHRoaXMuYXBwU2V0dGluZ0Zvcm0uZ2V0KGZpZWxkc05hbWUpPy5yZXNldCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVCdG5Mb2FkZGVyKGZsYWc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNQYXRoVXBkYXRlZCA9IGZsYWc7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVBUElFdmVudExpc3RlbmVyRGF0YS5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cgbXktM1wiPlxyXG4gIDwhLS0gTGVmdF9DYXJkX1N0YXJ0ZWQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1sZy00IHBsLTBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInAtM1wiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwicHJvZmlsZS1jYXJkXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBTaG93UHJlZmVyZW5jZVBhdGhTY3JlZW4gfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiT3BlblByZWZlcmVuY2VQYXRoU2NyZWVuKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtbGFiZWxcIj5cclxuICAgICAgICAgICAgICB7eyBcIkdlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInByb2ZpbGUtY2FyZFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogU2hvd0NoYW5nZVBhc3N3b3JkU2NyZWVuIH1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIk9wZW5DaGFuZ2VQYXNzd29yZFNjcmVlbigpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5DaGFuZ2VQYXNzd29yZFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJwcm9maWxlLWNhcmRcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IFNob3dUaW1lWm9uZVNjcmVlbiB9XCJcclxuICAgICAgICAgIChjbGljayk9XCJPcGVuVGltZXpvbmVTY3JlZW4oKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgIHt7IFwiR2VuZXJpY19saWIuUHJlZmVycmVkVGltZXpvbmVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwicHJvZmlsZS1jYXJkXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBTaG93TGFuZGluUGdTY3JlZW4gfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiT3BlbkxhbmRpbmdQZ0NvbmZpZygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5MYW5kaW5nUGFnZUNvbmZpZ1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBMZWZ0X0NhcmRfRW5kZWQgLS0+XHJcblxyXG4gIDwhLS1Vc2VyIFByb2ZpbGUgLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dVc2VyUHJvZmlsZVNjcmVlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbml0aWFsLXRleHRcIj5cclxuICAgICAgICB7eyBcIkFLXCIgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwcmVmZXJlbmNlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDwhLS1DYXJkLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5Vc2VyTmFtZVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZHJvcGRvd24gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdHZW5lcmljX2xpYi5Vc2VyTmFtZScgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgIHNyYz1cIi4uLi8uLi8uLi8uLi8uLi9hc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2ltYWdlcy91c2VyLW5hbWUuc3ZnXCJcclxuICAgICAgICAgICAgICAgIGFsdD1cIkljb25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBweC0yXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1uYW1lXCI+e3sgXCJHZW5lcmljX2xpYi5FbWFpbFwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1kcm9wZG93biBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0dlbmVyaWNfbGliLkVtYWlsQWRkcmVzcycgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgIHNyYz1cIi4uLi8uLi8uLi8uLi8uLi9hc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2djLW1haWwuc3ZnXCJcclxuICAgICAgICAgICAgICAgIGFsdD1cIkljb25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBweC0yXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgPHAtYnV0dG9uIGNsYXNzPVwic3VibWl0LWJ0blwiIGxhYmVsPVwiU3VibWl0XCI+PC9wLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8IS0tIFByZWZlcmVuY2UgUGF0aFNjcmVlbiAtLT5cclxuICA8bmctY29udGFpbmVyPlxyXG4gIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dQcmVmZXJlbmNlUGF0aFNjcmVlblwiPiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiIFtoaWRkZW5dPVwiIVNob3dQcmVmZXJlbmNlUGF0aFNjcmVlblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHJlZmVyZW5jZS1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhcHBTZXR0aW5nRm9ybVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IFwiR2VuZXJpY19saWIuQXNzZXRUeXBlXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWRvbnRhcnktaWNvblwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2V0cy1kcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPHAtZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwidXNlckFzc2V0VHlwZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJBc3NldFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0dlbmVyaWNfbGliLkFzc2V0VHlwZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlclBsYWNlaG9sZGVyPVwie3sgJ0dlbmVyaWNfbGliLlNlYXJjaCcgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwicHJlZmVyZW5jZVBhdGhWYWx1ZUNoYW5nZShBc3NldFR5cGVFdmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImFzc2V0VHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiIWlzQXNzZXRUeXBlTG9hZGluZyA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlckJ5PVwiYXNzZXRUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZXNldEZpbHRlck9uSGlkZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgcGFuZWxTdHlsZUNsYXNzPVwieydkcm9wZG93bi1sb2FkZXInOiBpc0Fzc2V0VHlwZUxvYWRpbmd9XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNBc3NldFR5cGVMb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tbG9hZGVyLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zcGluIHBpLXNwaW5uZXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgYXBwU2V0dGluZ0Zvcm0uZ2V0KCdBc3NldFR5cGUnKT8uaW52YWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5nZXQoJ0Fzc2V0VHlwZScpPy50b3VjaGVkXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbXNnIG10LTJcIj57e1xyXG4gICAgICAgICAgICAgICAgICBcIkdlbmVyaWNfbGliLkFzc2V0VHlwZUZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5Bc3NldE5hbWVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZG9udGFyeS1pY29uXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXRzLWRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ1c2VyQXNzZXROYW1lTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkFzc2V0TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAnR2VuZXJpY19saWIuQXNzZXROYW1lUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyUGxhY2Vob2xkZXI9XCJ7eyAnR2VuZXJpY19saWIuU2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwiYXNzZXROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCIhaXNBc3NldE5hbWVMb2FkaW5nID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyQnk9XCJhc3NldFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwicHJlZmVyZW5jZVBhdGhWYWx1ZUNoYW5nZShBc3NldE5hbWVFdmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJCeT1cImFzc2V0TmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBhbmVsU3R5bGVDbGFzcz1cInsnZHJvcGRvd24tbG9hZGVyJzogaXNBc3NldE5hbWVMb2FkaW5nfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0Fzc2V0TmFtZUxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1sb2FkZXItY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5nZXQoJ0Fzc2V0TmFtZScpPy5pbnZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAgIGFwcFNldHRpbmdGb3JtLmdldCgnQXNzZXROYW1lJyk/LnRvdWNoZWRcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tc2cgbXQtMlwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIFwiR2VuZXJpY19saWIuQXNzZXROYW1lRmllbGRWYWxpZGF0aW9uXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBcIkdlbmVyaWNfbGliLkNvbm5lY3Rpb25NZXRob2RcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZG9udGFyeS1pY29uXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXRzLWRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ1c2VyU2VydmljZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJTZXJ2aWNlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlclBsYWNlaG9sZGVyPVwie3sgJ0dlbmVyaWNfbGliLlNlYXJjaCcgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0dlbmVyaWNfbGliLkNvbm5lY3Rpb25NZXRob2RQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cInRidkRlc2NycHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJCeT1cInRidkRlc2NycHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwicHJlZmVyZW5jZVBhdGhWYWx1ZUNoYW5nZShDb25uZWN0aW9uTWV0aG9kRXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCIhaXNDb25uZWN0aW9uTWV0aG9kTG9hZGluZyA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBwYW5lbFN0eWxlQ2xhc3M9XCJ7J2Ryb3Bkb3duLWxvYWRlcic6IGlzQ29ubmVjdGlvbk1ldGhvZExvYWRpbmd9XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNDb25uZWN0aW9uTWV0aG9kTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWxvYWRlci1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc3BpbiBwaS1zcGlubmVyXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiA8L25nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICA+PC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGFwcFNldHRpbmdGb3JtLmdldCgnU2VydmljZU5hbWUnKT8uaW52YWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5nZXQoJ1NlcnZpY2VOYW1lJyk/LnRvdWNoZWRcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tc2cgbXQtMlwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIFwiR2VuZXJpY19saWIuQ29ubmVjdGlvbk1ldGhvZEZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5QcmVmZXJlbmNlUGF0aFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFkb250YXJ5LWljb25cIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1kcm9wZG93biBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdHZW5lcmljX2xpYi5QcmVmZXJlbmNlUGF0aCcgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpbGVQYXRoTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIGlkPVwiZmlsZXBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZmlsZXBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgc3JjPVwiLi4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9jb21tb24taGVhZGVyLWxpYi9pbWFnZXMvZmlsZXBhdGguc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgYWx0PVwicGF0aCBJY29uXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBteC0yIGltZy1sb2NrIGV4dFwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIGFwcFNldHRpbmdGb3JtLmdldCgnZmlsZVBhdGhOYW1lJyk/LmludmFsaWQgJiZcclxuICAgICAgICAgICAgICAgICAgKGFwcFNldHRpbmdGb3JtLmdldCgnZmlsZVBhdGhOYW1lJyk/LnRvdWNoZWQgfHxcclxuICAgICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5nZXQoJ2ZpbGVQYXRoTmFtZScpPy5kaXJ0eSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGFwcFNldHRpbmdGb3JtLmNvbnRyb2xzWydmaWxlUGF0aE5hbWUnXS5lcnJvcnM/LlsncmVxdWlyZWQnXVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1zZyBtdC0yXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICBcIkdlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoRmllbGRWYWxpZGF0aW9uXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICBhcHBTZXR0aW5nRm9ybS5jb250cm9sc1snZmlsZVBhdGhOYW1lJ10uZXJyb3JzPy5bJ25vU3BhY2UnXVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1zZyBtdC0yXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICBcIkdlbmVyaWNfbGliLlByZWZlcmVuY2VQYXRoRmllbGRTcGFjZVZhbGlkYXRpb25cIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dTdGF0dXNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBcIkdlbmVyaWNfbGliLkN1cnJlbnRTZXR0aW5nXCIgfCB0cmFuc2xhdGUgfX0gOlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VyLXRleHQgbXgtMlwiPnt7IGZpbGVQYXRoTmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IFwiR2VuZXJpY19saWIuTGFzdFVwZGF0ZWRcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VyLXRleHQgbXgtMlwiPnt7IGxhc3RVcGRhdGVkRmlsZVN0YXR1cyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VibWl0LWJ0blwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7ICdHZW5lcmljX2xpYi5VcGRhdGUnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhcHBTZXR0aW5nRm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNldFVzZXJQcmVmZXJlbmNlUGF0aChhcHBTZXR0aW5nRm9ybSlcIlxyXG4gICAgICAgICAgICAgICAgaWNvblBvcz1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzUGF0aFVwZGF0ZWRcIlxyXG4gICAgICAgICAgICAgID48L3AtYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBUaW1lWm9uZSBTY3JlZW4gLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dUaW1lWm9uZVNjcmVlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgIDxhcHAtdGltZXpvbmUtY29uZmlndXJhdGlvbj48L2FwcC10aW1lem9uZS1jb25maWd1cmF0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gTGFuZGluZ1BnIENvbmZpZyBTY3JlZW4gLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dMYW5kaW5QZ1NjcmVlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgIDxhcHAtbGFuZGluZ3BnLWNvbmZpZz48L2FwcC1sYW5kaW5ncGctY29uZmlnPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS1DaGFuZ2UgUGFzc3dvcmQgU2NyZWVuIC0tPlxyXG4gIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dDaGFuZ2VQYXNzd29yZFNjcmVlblwiPiAtLT5cclxuICAgIDxuZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIiBbaGlkZGVuXT1cIiFTaG93Q2hhbmdlUGFzc3dvcmRTY3JlZW5cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInByZWZlcmVuY2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwidXNlclJlc2V0UGFzc3dvcmRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5DdXJyZW50UGFzc3dvcmRcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZG9udGFyeS1pY29uXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWRyb3Bkb3duIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1jaGVja2JveC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtdmlzaWJpbGl0eS1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSgxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ7eyBtYWtlT2xkUHdkVmlzaWJsZSA/ICdwYXNzd29yZCcgOiAndGV4dCcgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0dlbmVyaWNfbGliLlBhc3N3b3JkUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvbGRVc2VyQVJDWFdEXCJcclxuICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgaWQ9XCJvbGRwd2RcIlxyXG4gICAgICAgICAgICAgICAgICBuYW1lPVwib2xkcHdkXCJcclxuICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICBzcmM9XCIuLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2NvbW1vbi1oZWFkZXItbGliL2ltYWdlcy9sb2NrLXBhc3Muc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgYWx0PVwibG9jayBJY29uXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBteC0yIGltZy1sb2NrXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgdXNlclJlc2V0UGFzc3dvcmRGb3JtLmdldCgnb2xkVXNlckFSQ1hXRCcpPy5pbnZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAgIHVzZXJSZXNldFBhc3N3b3JkRm9ybS5nZXQoJ29sZFVzZXJBUkNYV0QnKT8udG91Y2hlZFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1zZyBtdC0yXCI+e3tcclxuICAgICAgICAgICAgICAgICAgXCJHZW5lcmljX2xpYi5QYXNzd29yZEZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5OZXdQYXNzd29yZFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFkb250YXJ5LWljb25cIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZHJvcGRvd24gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLWNoZWNrYm94LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC12aXNpYmlsaXR5LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KDIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cInt7IG1ha2VOZXdQd2RWaXNpYmxlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0JyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAnR2VuZXJpY19saWIuTmV3UGFzc3dvcmRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5ld1VzZXJBUkNYV0RcIlxyXG4gICAgICAgICAgICAgICAgICBpZD1cIm5ld3B3ZFwiXHJcbiAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJuZXdwd2RcIlxyXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgIHNyYz1cIi4uLi8uLi8uLi8uLi8uLi9hc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2xvY2stcGFzcy5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICBhbHQ9XCJsb2NrIEljb25cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIG14LTIgaW1nLWxvY2tcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KCduZXdVc2VyQVJDWFdEJylcclxuICAgICAgICAgICAgICAgICAgICA/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmXHJcbiAgICAgICAgICAgICAgICAgIHVzZXJSZXNldFBhc3N3b3JkRm9ybS5nZXQoJ25ld1VzZXJBUkNYV0QnKT8udG91Y2hlZFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLW1zZyBtdC0yXCI+e3tcclxuICAgICAgICAgICAgICAgICAgXCJHZW5lcmljX2xpYi5OZXdQYXNzd29yZEZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KCduZXdVc2VyQVJDWFdEJylcclxuICAgICAgICAgICAgICAgICAgICA/Lmhhc0Vycm9yKCdwd2RJbnZhbGlkJykgJiZcclxuICAgICAgICAgICAgICAgICAgdXNlclJlc2V0UGFzc3dvcmRGb3JtLmdldCgnbmV3VXNlckFSQ1hXRCcpPy50b3VjaGVkXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbXNnIG10LTJcIj57eyBwd2RlcnJvck1zZyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5Db25maXJtUGFzc3dvcmRcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZG9udGFyeS1pY29uXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWRyb3Bkb3duIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1jaGVja2JveC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtdmlzaWJpbGl0eS1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSgzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ7eyBtYWtlQ25mcm1Qd2RWaXNpYmxlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0JyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcclxuICAgICAgICAgICAgICAgICAgICAnR2VuZXJpY19saWIuQ29uZmlybVBhc3N3b3JkUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm5tTmV3VXNlckFSQ1hXRFwiXHJcbiAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgIGlkPVwiY3JubW5ld3B3ZFwiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjcm5tbmV3cHdkXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICBzcmM9XCIuLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2NvbW1vbi1oZWFkZXItbGliL2ltYWdlcy9sb2NrLXBhc3Muc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgYWx0PVwiZXllIEljb25cIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIG14LTIgaW1nLWxvY2tcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KCdjcm5tTmV3VXNlckFSQ1hXRCcpXHJcbiAgICAgICAgICAgICAgICAgICAgPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm0uZ2V0KCdjcm5tTmV3VXNlckFSQ1hXRCcpPy50b3VjaGVkXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbXNnIG10LTJcIj57e1xyXG4gICAgICAgICAgICAgICAgICBcIkdlbmVyaWNfbGliLkNvbmZpcm1QYXNzd29yZEZpZWxkVmFsaWRhdGlvblwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tc2cgbXQtMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICB1c2VyUmVzZXRQYXNzd29yZEZvcm1cclxuICAgICAgICAgICAgICAgICAgICAuZ2V0KCdjcm5tTmV3VXNlckFSQ1hXRCcpXHJcbiAgICAgICAgICAgICAgICAgICAgPy5oYXNFcnJvcignY29uZmlybWVkVmFsaWRhdG9yJylcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgXCJHZW5lcmljX2xpYi5Db25maXJtUGFzc3dvcmRGaWVsZE5ld1ZhbGlkYXRpb25cIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VibWl0LWJ0blwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7ICdHZW5lcmljX2xpYi5VcGRhdGUnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgICAgICAgIGljb25Qb3M9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc1BhdGhVcGRhdGVkXCJcclxuICAgICAgICAgICAgICAgIGxhYmVsPVwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInJlc2V0TG9nZ2VkSW5Qd2QoKVwiXHJcbiAgICAgICAgICAgICAgPjwvcC1idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuIl19
|