tnx-shared 5.1.310 → 5.1.313
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/bundles/tnx-shared.umd.js +143 -12
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/public-function.d.ts +1 -1
- package/components/common-app-component/common-app-component.d.ts +4 -3
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +2 -2
- package/esm2015/components/chat/chat-box/chat-box.component.js +1 -1
- package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
- package/esm2015/components/common-app-component/common-app-component.js +27 -5
- package/esm2015/services/permission.service.js +63 -18
- package/esm2015/services/role.service.js +29 -1
- package/esm2015/services/user.service.js +4 -1
- package/fesm2015/tnx-shared.js +117 -19
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/permission.service.d.ts +6 -4
- package/services/permission.service.d.ts.map +1 -1
- package/services/role.service.d.ts +7 -0
- package/services/role.service.d.ts.map +1 -1
- package/services/user.service.d.ts +1 -0
- package/services/user.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -31,18 +31,19 @@ export class PermissionService extends BaseService {
|
|
|
31
31
|
this._oauthService = _oauthService;
|
|
32
32
|
this._appContext = _appContext;
|
|
33
33
|
this.storage = sessionStorage;
|
|
34
|
-
this.delayCheckPermissions = [];
|
|
35
34
|
this.ignoreAdmin = false;
|
|
35
|
+
this.delayCheckPermissions = [];
|
|
36
36
|
this.appCode = null;
|
|
37
|
-
this.
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
37
|
+
this._config = this._moduleConfigService.getConfig();
|
|
38
|
+
this.endPoint = this._config.environment.apiDomain.authorizationEndpoint;
|
|
39
|
+
this.ignoreAdmin = this._config.environment.isIgnoreAdmin;
|
|
40
|
+
this.appCode = this._config.appCode;
|
|
40
41
|
}
|
|
41
42
|
clearPermissionCacheAll() {
|
|
42
43
|
var _a, _b, _c;
|
|
43
|
-
const lstAppCodes = (_c = (_b = (_a = this.
|
|
44
|
+
const lstAppCodes = (_c = (_b = (_a = this._config.environment.appMetadata) === null || _a === void 0 ? void 0 : _a.appSwitcher) === null || _b === void 0 ? void 0 : _b.map(app => app.code)) !== null && _c !== void 0 ? _c : [];
|
|
44
45
|
const lstApiEndpoint = [];
|
|
45
|
-
const apiDomain = this.
|
|
46
|
+
const apiDomain = this._config.environment.apiDomain;
|
|
46
47
|
for (const domainName in apiDomain) {
|
|
47
48
|
if (domainName.startsWith('-') || domainName.startsWith('1') || domainName == 'gateway')
|
|
48
49
|
continue;
|
|
@@ -59,18 +60,22 @@ export class PermissionService extends BaseService {
|
|
|
59
60
|
const url = `${this.serviceUri}/GetCurrentUserPermission`;
|
|
60
61
|
return this.defaultGet(url);
|
|
61
62
|
}
|
|
62
|
-
getAllBasePermission() {
|
|
63
|
+
getAllBasePermission(userId) {
|
|
63
64
|
var _a, _b, _c, _d;
|
|
64
65
|
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
-
|
|
66
|
+
let url = `${this.serviceUri}/GetAllBasePermission`;
|
|
66
67
|
const user = this._userService.getCurrentUser();
|
|
67
68
|
if (user
|
|
68
69
|
&& (user.issuperuser && user.issuperuser.toLowerCase() == 'true')
|
|
69
70
|
|| (user.isadmin && user.isadmin.toLowerCase() == 'true' && !this.ignoreAdmin)) {
|
|
70
71
|
return;
|
|
71
72
|
}
|
|
73
|
+
if (userId && userId != '' && userId != this._commonService.guidEmpty()) {
|
|
74
|
+
url += `?userId=${userId}`;
|
|
75
|
+
return this.defaultGet(url);
|
|
76
|
+
}
|
|
72
77
|
const res = yield this.defaultGet(url);
|
|
73
|
-
const lstAppCodes = (_c = (_b = (_a = this.
|
|
78
|
+
const lstAppCodes = (_c = (_b = (_a = this._config.environment.appMetadata) === null || _a === void 0 ? void 0 : _a.appSwitcher) === null || _b === void 0 ? void 0 : _b.map(app => app.code)) !== null && _c !== void 0 ? _c : [];
|
|
74
79
|
if (!res.success || res.data == null) {
|
|
75
80
|
const promiseArr = [];
|
|
76
81
|
for (const code in lstAppCodes) {
|
|
@@ -142,11 +147,9 @@ export class PermissionService extends BaseService {
|
|
|
142
147
|
yield this.checkPermission(service, permission, resolve, reject);
|
|
143
148
|
}));
|
|
144
149
|
}
|
|
145
|
-
checkPermission(service,
|
|
150
|
+
checkPermission(service, permissionToCheck, resolve, reject) {
|
|
146
151
|
return __awaiter(this, void 0, void 0, function* () {
|
|
147
152
|
const user = (yield this._userService.getCurrentUser());
|
|
148
|
-
resolve(true);
|
|
149
|
-
return;
|
|
150
153
|
if (user && user.issuperuser && user.issuperuser.toLowerCase() == 'true') {
|
|
151
154
|
resolve(true);
|
|
152
155
|
return;
|
|
@@ -155,20 +158,62 @@ export class PermissionService extends BaseService {
|
|
|
155
158
|
resolve(true);
|
|
156
159
|
return;
|
|
157
160
|
}
|
|
158
|
-
this.getPermissions(service).then(
|
|
159
|
-
if (
|
|
160
|
-
|
|
161
|
-
resolve(isAuthorized);
|
|
161
|
+
this.getPermissions(service).then(userPermissions => {
|
|
162
|
+
if (userPermissions && userPermissions.length) {
|
|
163
|
+
resolve(this._checkPermission(userPermissions, permissionToCheck));
|
|
162
164
|
}
|
|
163
165
|
else {
|
|
164
|
-
console.log(`
|
|
166
|
+
console.log(`Không có quyền với phân hệ [${service}]`);
|
|
165
167
|
resolve(false);
|
|
166
168
|
}
|
|
167
169
|
}, error => {
|
|
168
170
|
reject(false);
|
|
171
|
+
console.log(`Lỗi không lấy được permission cho module: ${service}`);
|
|
169
172
|
});
|
|
170
173
|
});
|
|
171
174
|
}
|
|
175
|
+
_checkPermission(userPermissions, permissionToCheck) {
|
|
176
|
+
let isAuthorized = false;
|
|
177
|
+
// check quyền theo cách cũ nếu trường họp là phân quyền module
|
|
178
|
+
if (permissionToCheck.includes('MODULE')) {
|
|
179
|
+
return userPermissions.includes(permissionToCheck);
|
|
180
|
+
}
|
|
181
|
+
for (const userPermission of userPermissions) {
|
|
182
|
+
// Cắt chuỗi permission thành mảng để xem mỗi fragement có khớp nhau không
|
|
183
|
+
const userPermissionFragments = userPermission.split('/');
|
|
184
|
+
const permissionFragements = permissionToCheck.split('/');
|
|
185
|
+
// Mảng khác độ dài thì thoát sớm
|
|
186
|
+
if (userPermissionFragments.length != permissionFragements.length) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
// biến flag ra hiệu người dùng authorized và out vòng
|
|
190
|
+
let breakLoop = false;
|
|
191
|
+
// nếu tất cả phần tử khớp nhau => permission này trùng và người dùng được authorized
|
|
192
|
+
for (let index = 0; index < permissionFragements.length; index++) {
|
|
193
|
+
const userFragement = userPermissionFragments[index];
|
|
194
|
+
const permissionFragment = permissionFragements[index];
|
|
195
|
+
// skip qua các phần tử có ký tự bắt đầu là '{'
|
|
196
|
+
if (userFragement[0] == '{') {
|
|
197
|
+
if (index == permissionFragements.length - 1) {
|
|
198
|
+
isAuthorized = true;
|
|
199
|
+
breakLoop = true;
|
|
200
|
+
}
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
if (userFragement.toLowerCase() != permissionFragment.toLowerCase()) {
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
if (index == permissionFragements.length - 1) {
|
|
207
|
+
isAuthorized = true;
|
|
208
|
+
breakLoop = true;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (breakLoop) {
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return isAuthorized;
|
|
216
|
+
}
|
|
172
217
|
isAuthorizedByPermissions(permissions, operator = 'OR', ignoreAdmin = false) {
|
|
173
218
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
174
219
|
const user = (yield this._userService.getCurrentUser());
|
|
@@ -247,4 +292,4 @@ PermissionService.ctorParameters = () => [
|
|
|
247
292
|
{ type: OAuthService },
|
|
248
293
|
{ type: ApplicationContextService }
|
|
249
294
|
];
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUl2RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBRzdDLE1BQU0sT0FBTyxjQUFjO0lBUXZCLFlBQVksSUFBb0I7UUFKaEMsZUFBVSxHQUFjLEVBQUUsQ0FBQztRQUMzQixrQkFBYSxHQUFjLEVBQUUsQ0FBQztRQUM5QixxQkFBZ0IsR0FBYyxFQUFFLENBQUM7UUFDakMsd0JBQW1CLEdBQWMsRUFBRSxDQUFDO1FBRWhDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDO0NBQ0o7QUFLRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQVE5QyxZQUNJLElBQWdCLEVBQ2hCLFFBQWtCLEVBQ1Ysb0JBQXlDLEVBQ3pDLFlBQXlCLEVBQ3pCLGFBQTJCLEVBQzNCLFdBQXNDO1FBRTlDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsb0JB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LENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBcUI7UUFDcEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxxQkFBcUIsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Ozs7WUE1T0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUE5QlEsVUFBVTtZQUNFLFFBQVE7WUFRcEIsbUJBQW1CO1lBQ25CLFdBQVc7WUFSWCxZQUFZO1lBRVoseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGhhblF1eWVuTW9kZWwge1xyXG4gICAgc3ViamVjdFR5cGU6IG51bWJlcjtcclxuICAgIGlkVXNlckdyb3Vwcz86IHN0cmluZ1tdO1xyXG4gICAgaWRVc2Vycz86IHN0cmluZ1tdO1xyXG4gICAgYWRkUm9sZUlkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICByZW1vdmVSb2xlSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIGFkZFBlcm1pc3Npb25JZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcmVtb3ZlUGVybWlzc2lvbklkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICBjb25zdHJ1Y3Rvcihpbml0OiBQaGFuUXV5ZW5Nb2RlbCkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGluaXQpIHtcclxuICAgICAgICAgICAgdGhpc1trZXldID0gaW5pdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcclxuXHJcbiAgICByZWFkb25seSBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2U7XHJcbiAgICBkZWxheUNoZWNrUGVybWlzc2lvbnMgPSBbXTtcclxuICAgIHJvb3Q6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xyXG4gICAgaWdub3JlQWRtaW4gPSBmYWxzZTtcclxuICAgIGFwcENvZGU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5hdXRob3JpemF0aW9uRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vcGVybWlzc2lvbmApO1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uYXV0aG9yaXphdGlvbkVuZHBvaW50O1xyXG4gICAgICAgIHRoaXMuaWdub3JlQWRtaW4gPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmlzSWdub3JlQWRtaW47XHJcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlQWxsKCkge1xyXG4gICAgICAgIGNvbnN0IGxzdEFwcENvZGVzID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YT8uYXBwU3dpdGNoZXI/Lm1hcChhcHAgPT4gYXBwLmNvZGUpID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGxzdEFwaUVuZHBvaW50ID0gW107XHJcbiAgICAgICAgY29uc3QgYXBpRG9tYWluID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW47XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5OYW1lIGluIGFwaURvbWFpbikge1xyXG4gICAgICAgICAgICBpZiAoZG9tYWluTmFtZS5zdGFydHNXaXRoKCctJykgfHwgZG9tYWluTmFtZS5zdGFydHNXaXRoKCcxJykgfHwgZG9tYWluTmFtZSA9PSAnZ2F0ZXdheScpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCByZWFsRG9tYWluTmFtZSA9IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JykgPyBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpWzBdIDogZG9tYWluTmFtZTtcclxuICAgICAgICAgICAgbHN0QXBpRW5kcG9pbnQucHVzaChyZWFsRG9tYWluTmFtZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJQZXJtaXNzaW9uQ2FjaGUoWy4uLmxzdEFwcENvZGVzLCAuLi5sc3RBcGlFbmRwb2ludF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlKGxzdE1vZHVsZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NsZWFyUGVybWlzc2lvbkNhY2hlYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdE1vZHVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEN1cnJlbnRVc2VyUGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEFsbEJhc2VQZXJtaXNzaW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWxsQmFzZVBlcm1pc3Npb25gO1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh1c2VyXHJcbiAgICAgICAgICAgICYmICh1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpXHJcbiAgICAgICAgICAgIHx8ICh1c2VyLmlzYWRtaW4gJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgICAgICBjb25zdCBsc3RBcHBDb2RlcyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzIHx8IHJlcy5kYXRhID09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFycjogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD5bXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvZGUgaW4gbHN0QXBwQ29kZXMpIHtcclxuICAgICAgICAgICAgICAgIHByb21pc2VBcnIucHVzaCh0aGlzLmdldFBlcm1pc3Npb25zKGNvZGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIGluIGxzdEFwcENvZGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gcmVzLmRhdGFbc2VydmljZV0gPz8gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBBVVRIT1JJWkFUSU9OLiR7c2VydmljZS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShwZXJtaXNzaW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydXnhu4FuIHbDoG8gZGFuaCBzw6FjaCBwZXJtaXNpb24gY+G6p24gY2hlY2tcclxuICAgICAqIEBwYXJhbSBsc3RQZXJtaXNzaW9uQ29kZSBuaOG7r25nIHBlcnJtaXNpb24gY29kZSBj4bqnbiBjaGVjayA9PiBuw6puIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBjaGVjayBjw6FjIGJ1dHRvbiB0cm9uZyBjb2RlXHJcbiAgICAgKiBAcmV0dXJucyB0cuG6oyByYSBjw6FjIHBlcnJtaXNpb25Db2RlIGPDsyBxdXnhu4FuXHJcbiAgICAgKi9cclxuICAgIGdldFBlcm1pc3Npb25BdXRob3JpemVkKGxzdFBlcm1pc3Npb25Db2RlOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbHN0UGVybWlzc2lvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmlzQXV0aG9yaXplZFBlcm1pc3Npb24oaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQXV0aG9yaXplZFBlcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuZGVsYXkoMTAwKTtcclxuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbih0aGlzLmFwcENvZGUsIHBlcm1pc3Npb24sIHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRob3JpemVkKHNlcnZpY2U6IHN0cmluZywgcGVybWlzc2lvbjogc3RyaW5nLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fYXBwQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICAgICAgd2hpbGUgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0cnlDb3VudCA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja1Blcm1pc3Npb24oc2VydmljZSwgcGVybWlzc2lvbiwgcmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja1Blcm1pc3Npb24oc2VydmljZSwgcGVybWlzc2lvbjogc3RyaW5nLCByZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdldFBlcm1pc3Npb25zKHNlcnZpY2UpLnRoZW4ocGVybWlzc2lvbnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F1dGhvcml6ZWQgPSBwZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoaXNBdXRob3JpemVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBM4buXaSBraMO0bmcgbOG6pXkgxJHGsOG7o2MgcGVybWlzc2lvbiBjaG8gbW9kdWxlOiAke3NlcnZpY2V9YCk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhvcml6ZWRCeVBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBBcnJheTxQZXJtaXNzaW9uPiwgb3BlcmF0b3IgPSAnT1InLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wZXJhdG9yLnRvVXBwZXJDYXNlKCkgPT0gJ09SJykge1xyXG4gICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHBlcm1pc3Npb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBlcm1pc3Npb25zKGl0ZW0uc2VydmljZSkudGhlbihwZXJtaXNzaW9uUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVybWlzc2lvblJlc3VsdC5pbmNsdWRlcyhpdGVtLnBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShpc0F1dGhvcml6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25zKHNlcnZpY2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGVybWlzc2lvbnNCeVNlcnZpY2U/c2VydmljZT0ke3NlcnZpY2V9YDtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gYEFVVEhPUklaQVRJT04uJHtzZXJ2aWNlLnRvVXBwZXJDYXNlKCl9YDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VJdGVtICYmIHN0b3JhZ2VJdGVtICE9PSAnbnVsbCcgJiYgc3RvcmFnZUl0ZW0gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEdldCh1cmwpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25JZHNCeU1vZHVsZShtb2R1bGVDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25JZHNCeU1vZHVsZS8ke21vZHVsZUNvZGV9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGhhblF1eWVuTmd1b2lEdW5nKG1vZGVsOiBQaGFuUXV5ZW5Nb2RlbCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vUGhhblF1eWVuTmd1b2lEdW5nYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUt2RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBRTdDLE1BQU0sT0FBTyxjQUFjO0lBU3ZCLFlBQVksSUFBb0I7UUFMaEMsZUFBVSxHQUFjLEVBQUUsQ0FBQztRQUMzQixrQkFBYSxHQUFjLEVBQUUsQ0FBQztRQUM5QixxQkFBZ0IsR0FBYyxFQUFFLENBQUM7UUFDakMsd0JBQW1CLEdBQWMsRUFBRSxDQUFDO1FBR2hDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDO0NBQ0o7QUFLRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQVM5QyxZQUNJLElBQWdCLEVBQ2hCLFFBQWtCLEVBQ1Ysb0JBQXlDLEVBQ3pDLFlBQXlCLEVBQ3pCLGFBQTJCLEVBQzNCLFdBQXNDO1FBRTlDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsb0JB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Q0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3pELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDUCxNQUFNLEVBQUUsQ0FBQztnQkFDYixDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsVUFBa0I7UUFDdkMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSw2QkFBNkIsVUFBVSxFQUFFLENBQUM7UUFDeEUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFxQjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLHFCQUFxQixDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7OztZQTlSSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQS9CUSxVQUFVO1lBQ0UsUUFBUTtZQVNwQixtQkFBbUI7WUFDbkIsV0FBVztZQVRYLFlBQVk7WUFFWix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcclxuXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBUblVzZXIgfSBmcm9tICcuLi9tb2RlbHMvdG4tdXNlcic7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQaGFuUXV5ZW5Nb2RlbCB7XHJcbiAgICBzdWJqZWN0VHlwZTogbnVtYmVyO1xyXG4gICAgaWRVc2VyR3JvdXBzPzogc3RyaW5nW107XHJcbiAgICBpZFVzZXJzPzogc3RyaW5nW107XHJcbiAgICBhZGRSb2xlSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlbW92ZVJvbGVJZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgYWRkUGVybWlzc2lvbklkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICByZW1vdmVQZXJtaXNzaW9uSWRzPzogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihpbml0OiBQaGFuUXV5ZW5Nb2RlbCkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGluaXQpIHtcclxuICAgICAgICAgICAgdGhpc1trZXldID0gaW5pdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcclxuXHJcbiAgICByZWFkb25seSBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2U7XHJcbiAgICByZWFkb25seSBfY29uZmlnOiBhbnk7XHJcbiAgICByZWFkb25seSBpZ25vcmVBZG1pbiA9IGZhbHNlO1xyXG4gICAgZGVsYXlDaGVja1Blcm1pc3Npb25zID0gW107XHJcbiAgICByb290OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcclxuICAgIGFwcENvZGU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5hdXRob3JpemF0aW9uRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vcGVybWlzc2lvbmApO1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4uYXV0aG9yaXphdGlvbkVuZHBvaW50O1xyXG4gICAgICAgIHRoaXMuaWdub3JlQWRtaW4gPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuaXNJZ25vcmVBZG1pbjtcclxuICAgICAgICB0aGlzLmFwcENvZGUgPSB0aGlzLl9jb25maWcuYXBwQ29kZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBlcm1pc3Npb25DYWNoZUFsbCgpIHtcclxuICAgICAgICBjb25zdCBsc3RBcHBDb2RlcyA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YT8uYXBwU3dpdGNoZXI/Lm1hcChhcHAgPT4gYXBwLmNvZGUpID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IGxzdEFwaUVuZHBvaW50ID0gW107XHJcbiAgICAgICAgY29uc3QgYXBpRG9tYWluID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbjtcclxuICAgICAgICBmb3IgKGNvbnN0IGRvbWFpbk5hbWUgaW4gYXBpRG9tYWluKSB7XHJcbiAgICAgICAgICAgIGlmIChkb21haW5OYW1lLnN0YXJ0c1dpdGgoJy0nKSB8fCBkb21haW5OYW1lLnN0YXJ0c1dpdGgoJzEnKSB8fCBkb21haW5OYW1lID09ICdnYXRld2F5JykgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWxEb21haW5OYW1lID0gZG9tYWluTmFtZS5zcGxpdCgnRW5kcG9pbnQnKSA/IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JylbMF0gOiBkb21haW5OYW1lO1xyXG4gICAgICAgICAgICBsc3RBcGlFbmRwb2ludC5wdXNoKHJlYWxEb21haW5OYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jbGVhclBlcm1pc3Npb25DYWNoZShbLi4ubHN0QXBwQ29kZXMsIC4uLmxzdEFwaUVuZHBvaW50XSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGUobHN0TW9kdWxlOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ2xlYXJQZXJtaXNzaW9uQ2FjaGVgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbHN0TW9kdWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50VXNlclBlcm1pc3Npb24oKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0QWxsQmFzZVBlcm1pc3Npb24odXNlcklkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWxsQmFzZVBlcm1pc3Npb25gO1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh1c2VyXHJcbiAgICAgICAgICAgICYmICh1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpXHJcbiAgICAgICAgICAgIHx8ICh1c2VyLmlzYWRtaW4gJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1c2VySWQgJiYgdXNlcklkICE9ICcnICYmIHVzZXJJZCAhPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpKSB7XHJcbiAgICAgICAgICAgIHVybCArPSBgP3VzZXJJZD0ke3VzZXJJZH1gO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgICAgIGNvbnN0IGxzdEFwcENvZGVzID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmFwcE1ldGFkYXRhPy5hcHBTd2l0Y2hlcj8ubWFwKGFwcCA9PiBhcHAuY29kZSkgPz8gW107XHJcbiAgICAgICAgaWYgKCFyZXMuc3VjY2VzcyB8fCByZXMuZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VBcnI6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+W10gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2RlIGluIGxzdEFwcENvZGVzKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlQXJyLnB1c2godGhpcy5nZXRQZXJtaXNzaW9ucyhjb2RlKSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IHNlcnZpY2UgaW4gbHN0QXBwQ29kZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSByZXMuZGF0YVtzZXJ2aWNlXSA/PyBbXTtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gYEFVVEhPUklaQVRJT04uJHtzZXJ2aWNlLnRvVXBwZXJDYXNlKCl9YDtcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZUl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHBlcm1pc3Npb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJ1eeG7gW4gdsOgbyBkYW5oIHPDoWNoIHBlcm1pc2lvbiBj4bqnbiBjaGVja1xyXG4gICAgICogQHBhcmFtIGxzdFBlcm1pc3Npb25Db2RlIG5o4buvbmcgcGVycm1pc2lvbiBjb2RlIGPhuqduIGNoZWNrID0+IG7Dqm4gZMO5bmcgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGNoZWNrIGPDoWMgYnV0dG9uIHRyb25nIGNvZGVcclxuICAgICAqIEByZXR1cm5zIHRy4bqjIHJhIGPDoWMgcGVycm1pc2lvbkNvZGUgY8OzIHF1eeG7gW5cclxuICAgICAqL1xyXG4gICAgZ2V0UGVybWlzc2lvbkF1dGhvcml6ZWQobHN0UGVybWlzc2lvbkNvZGU6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGxzdFBlcm1pc3Npb25Db2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGxzdFBlcm1pc3Npb25Db2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsc3RQZXJtaXNzaW9uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuaXNBdXRob3JpemVkUGVybWlzc2lvbihpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRob3JpemVkUGVybWlzc2lvbihwZXJtaXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMuYXBwQ29kZSwgcGVybWlzc2lvbiwgcmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhvcml6ZWQoc2VydmljZTogc3RyaW5nLCBwZXJtaXNzaW9uOiBzdHJpbmcsIGlnbm9yZUFkbWluOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLl9hcHBDb250ZXh0LmdldFJvb3RDb250ZXh0KCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuZGVsYXkoMTAwKTtcclxuICAgICAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uLCByZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uVG9DaGVjazogc3RyaW5nLCByZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuXHJcbiAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbiAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRQZXJtaXNzaW9ucyhzZXJ2aWNlKS50aGVuKHVzZXJQZXJtaXNzaW9ucyA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbnMgJiYgdXNlclBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jaGVja1Blcm1pc3Npb24odXNlclBlcm1pc3Npb25zLCBwZXJtaXNzaW9uVG9DaGVjaykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEtow7RuZyBjw7MgcXV54buBbiB24bubaSBwaMOibiBo4buHIFske3NlcnZpY2V9XWApO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBM4buXaSBraMO0bmcgbOG6pXkgxJHGsOG7o2MgcGVybWlzc2lvbiBjaG8gbW9kdWxlOiAke3NlcnZpY2V9YCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrUGVybWlzc2lvbih1c2VyUGVybWlzc2lvbnM6IHN0cmluZ1tdLCBwZXJtaXNzaW9uVG9DaGVjazogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNoZWNrIHF1eeG7gW4gdGhlbyBjw6FjaCBjxakgbuG6v3UgdHLGsOG7nW5nIGjhu41wIGzDoCBwaMOibiBxdXnhu4FuIG1vZHVsZVxyXG4gICAgICAgIGlmIChwZXJtaXNzaW9uVG9DaGVjay5pbmNsdWRlcygnTU9EVUxFJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uVG9DaGVjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgdXNlclBlcm1pc3Npb24gb2YgdXNlclBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIC8vIEPhuq90IGNodeG7l2kgcGVybWlzc2lvbiB0aMOgbmggbeG6o25nIMSR4buDIHhlbSBt4buXaSBmcmFnZW1lbnQgY8OzIGto4bubcCBuaGF1IGtow7RuZ1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyUGVybWlzc2lvbkZyYWdtZW50cyA9ICh1c2VyUGVybWlzc2lvbiBhcyBzdHJpbmcpLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25GcmFnZW1lbnRzID0gcGVybWlzc2lvblRvQ2hlY2suc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE3huqNuZyBraMOhYyDEkeG7mSBkw6BpIHRow6wgdGhvw6F0IHPhu5ttXHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggIT0gcGVybWlzc2lvbkZyYWdlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYmnhur9uIGZsYWcgcmEgaGnhu4d1IG5nxrDhu51pIGTDuW5nIGF1dGhvcml6ZWQgdsOgIG91dCB2w7JuZ1xyXG4gICAgICAgICAgICBsZXQgYnJlYWtMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIG7hur91IHThuqV0IGPhuqMgcGjhuqduIHThu60ga2jhu5twIG5oYXUgPT4gcGVybWlzc2lvbiBuw6B5IHRyw7luZyB2w6AgbmfGsOG7nWkgZMO5bmcgxJHGsOG7o2MgYXV0aG9yaXplZFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGVybWlzc2lvbkZyYWdlbWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyRnJhZ2VtZW50ID0gdXNlclBlcm1pc3Npb25GcmFnbWVudHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbkZyYWdtZW50ID0gcGVybWlzc2lvbkZyYWdlbWVudHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBxdWEgY8OhYyBwaOG6p24gdOG7rSBjw7Mga8O9IHThu7EgYuG6r3QgxJHhuqd1IGzDoCAneydcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyRnJhZ2VtZW50WzBdID09ICd7Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBwZXJtaXNzaW9uRnJhZ2VtZW50cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJGcmFnZW1lbnQudG9Mb3dlckNhc2UoKSAhPSBwZXJtaXNzaW9uRnJhZ21lbnQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IHBlcm1pc3Npb25GcmFnZW1lbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJyZWFrTG9vcCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzQXV0aG9yaXplZDtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhvcml6ZWRCeVBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBBcnJheTxQZXJtaXNzaW9uPiwgb3BlcmF0b3IgPSAnT1InLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wZXJhdG9yLnRvVXBwZXJDYXNlKCkgPT0gJ09SJykge1xyXG4gICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHBlcm1pc3Npb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBlcm1pc3Npb25zKGl0ZW0uc2VydmljZSkudGhlbihwZXJtaXNzaW9uUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVybWlzc2lvblJlc3VsdC5pbmNsdWRlcyhpdGVtLnBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShpc0F1dGhvcml6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25zKHNlcnZpY2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGVybWlzc2lvbnNCeVNlcnZpY2U/c2VydmljZT0ke3NlcnZpY2V9YDtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gYEFVVEhPUklaQVRJT04uJHtzZXJ2aWNlLnRvVXBwZXJDYXNlKCl9YDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VJdGVtICYmIHN0b3JhZ2VJdGVtICE9PSAnbnVsbCcgJiYgc3RvcmFnZUl0ZW0gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEdldCh1cmwpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25JZHNCeU1vZHVsZShtb2R1bGVDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25JZHNCeU1vZHVsZS8ke21vZHVsZUNvZGV9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGhhblF1eWVuTmd1b2lEdW5nKG1vZGVsOiBQaGFuUXV5ZW5Nb2RlbCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vUGhhblF1eWVuTmd1b2lEdW5nYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -11,6 +11,34 @@ export class RoleService extends BaseService {
|
|
|
11
11
|
this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.authorizationEndpoint;
|
|
12
12
|
this._moduleConfig = _moduleConfigService.getConfig();
|
|
13
13
|
}
|
|
14
|
+
getDetailCustom(id, pid) {
|
|
15
|
+
const url = `${this.serviceUri}/GetDetailCustom/${id}?pid=${pid}`;
|
|
16
|
+
return this.defaultGet(url);
|
|
17
|
+
}
|
|
18
|
+
GetIdByUsers(model) {
|
|
19
|
+
const url = `${this.serviceUri}/GetIdByUsers`;
|
|
20
|
+
return this.defaultPost(url, model);
|
|
21
|
+
}
|
|
22
|
+
GetIdByGroupUsers(model) {
|
|
23
|
+
const url = `${this.serviceUri}/GetIdByGroupUsers`;
|
|
24
|
+
return this.defaultPost(url, model);
|
|
25
|
+
}
|
|
26
|
+
GetIntersectIdByGroupUsers(userIds) {
|
|
27
|
+
const url = `${this.serviceUri}/GetIntersectIdByGroupUsers`;
|
|
28
|
+
return this.defaultPost(url, userIds);
|
|
29
|
+
}
|
|
30
|
+
GetIntersectDirectIdByGroupUsers(userIds) {
|
|
31
|
+
const url = `${this.serviceUri}/GetIntersectDirectIdByGroupUsers`;
|
|
32
|
+
return this.defaultPost(url, userIds);
|
|
33
|
+
}
|
|
34
|
+
GetIntersectIdByUsers(userIds) {
|
|
35
|
+
const url = `${this.serviceUri}/GetIntersectIdByUsers`;
|
|
36
|
+
return this.defaultPost(url, userIds);
|
|
37
|
+
}
|
|
38
|
+
GetIntersectDirectIdByUsers(userIds) {
|
|
39
|
+
const url = `${this.serviceUri}/GetIntersectDirectIdByUsers`;
|
|
40
|
+
return this.defaultPost(url, userIds);
|
|
41
|
+
}
|
|
14
42
|
}
|
|
15
43
|
RoleService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RoleService_Factory() { return new RoleService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i2.ModuleConfigService)); }, token: RoleService, providedIn: "root" });
|
|
16
44
|
RoleService.decorators = [
|
|
@@ -23,4 +51,4 @@ RoleService.ctorParameters = () => [
|
|
|
23
51
|
{ type: Injector },
|
|
24
52
|
{ type: ModuleConfigService }
|
|
25
53
|
];
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3JvbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBSzlELE1BQU0sT0FBTyxXQUFZLFNBQVEsV0FBVztJQUd4QyxZQUNJLElBQWdCLEVBQ2hCLFFBQWtCLEVBQ2xCLG9CQUF5QztRQUV6QyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMscUJBQXFCLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsT0FBTyxDQUFDLENBQUM7UUFDekssSUFBSSxDQUFDLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDO1FBQzdGLElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUdELGVBQWUsQ0FBQyxFQUFVLEVBQUUsR0FBVztRQUNuQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLG9CQUFvQixFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBSztRQUNkLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsZUFBZSxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQUs7UUFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxvQkFBb0IsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxPQUFPO1FBQzlCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsNkJBQTZCLENBQUM7UUFDNUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsT0FBTztRQUNwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLG1DQUFtQyxDQUFDO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQU87UUFDekIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSx3QkFBd0IsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxPQUFPO1FBQy9CLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsOEJBQThCLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDOzs7O1lBbERKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBUlEsVUFBVTtZQUNFLFFBQVE7WUFHcEIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlncy9tb2R1bGUtY29uZmlnJztcclxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJvbGVTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xyXG4gICAgcmVhZG9ubHkgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihodHRwLCBpbmplY3RvciwgYCR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLmF1dGhvcml6YXRpb25FbmRwb2ludH0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9yb2xlYCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5hdXRob3JpemF0aW9uRW5kcG9pbnQ7XHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldERldGFpbEN1c3RvbShpZDogc3RyaW5nLCBwaWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGV0YWlsQ3VzdG9tLyR7aWR9P3BpZD0ke3BpZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBHZXRJZEJ5VXNlcnMobW9kZWwpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldElkQnlVc2Vyc2A7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBtb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgR2V0SWRCeUdyb3VwVXNlcnMobW9kZWwpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldElkQnlHcm91cFVzZXJzYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBHZXRJbnRlcnNlY3RJZEJ5R3JvdXBVc2Vycyh1c2VySWRzKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJbnRlcnNlY3RJZEJ5R3JvdXBVc2Vyc2A7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCB1c2VySWRzKTtcclxuICAgIH1cclxuXHJcbiAgICBHZXRJbnRlcnNlY3REaXJlY3RJZEJ5R3JvdXBVc2Vycyh1c2VySWRzKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJbnRlcnNlY3REaXJlY3RJZEJ5R3JvdXBVc2Vyc2A7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCB1c2VySWRzKTtcclxuICAgIH1cclxuXHJcbiAgICBHZXRJbnRlcnNlY3RJZEJ5VXNlcnModXNlcklkcykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0SW50ZXJzZWN0SWRCeVVzZXJzYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHVzZXJJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIEdldEludGVyc2VjdERpcmVjdElkQnlVc2Vycyh1c2VySWRzKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJbnRlcnNlY3REaXJlY3RJZEJ5VXNlcnNgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgdXNlcklkcyk7XHJcbiAgICB9XHJcbn1cclxuIl19
|