@abp/ng.permission-management 9.0.2 → 9.0.4
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.
|
@@ -220,26 +220,12 @@ export class PermissionManagementComponent {
|
|
|
220
220
|
}
|
|
221
221
|
onClickSelectAll() {
|
|
222
222
|
if (this.filter()) {
|
|
223
|
-
this.
|
|
224
|
-
group.permissions.forEach(permission => {
|
|
225
|
-
if (permission.isGranted &&
|
|
226
|
-
this.isGrantedByOtherProviderName(permission.grantedProviders))
|
|
227
|
-
return;
|
|
228
|
-
const index = this.permissions.findIndex(per => per.name === permission.name);
|
|
229
|
-
this.permissions = [
|
|
230
|
-
...this.permissions.slice(0, index),
|
|
231
|
-
{ ...this.permissions[index], isGranted: !this.selectAllTab },
|
|
232
|
-
...this.permissions.slice(index + 1),
|
|
233
|
-
];
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
this.permissions = this.permissions.map(permission => ({
|
|
239
|
-
...permission,
|
|
240
|
-
isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,
|
|
241
|
-
}));
|
|
223
|
+
this.filter.set('');
|
|
242
224
|
}
|
|
225
|
+
this.permissions = this.permissions.map(permission => ({
|
|
226
|
+
...permission,
|
|
227
|
+
isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,
|
|
228
|
+
}));
|
|
243
229
|
if (!this.disableSelectAllTab) {
|
|
244
230
|
this.selectThisTab = !this.selectAllTab;
|
|
245
231
|
this.setTabCheckboxState();
|
|
@@ -361,4 +347,4 @@ function getPermissions(groups) {
|
|
|
361
347
|
...val.permissions.map(p => ({ ...p, groupName: val.name || '' })),
|
|
362
348
|
], []);
|
|
363
349
|
}
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBSUwsa0JBQWtCLEdBR25CLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBRVIsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBRU4sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBd0RoRSxNQUFNLE9BQU8sNkJBQTZCO0lBN0MxQztRQWtEcUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDekMsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFTbEQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVsQixhQUFR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RUFBRSxDQUFDLENBQUM7S0FDNUYsRUFDRCxFQUErQixDQUNoQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSwgQ3VycmVudFVzZXJEdG8gfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBMb2NhbGVEaXJlY3Rpb24sIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQge1xyXG4gIEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvLFxyXG4gIFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbiAgUGVybWlzc2lvbkdyb3VwRHRvLFxyXG4gIFBlcm1pc3Npb25zU2VydmljZSxcclxuICBQcm92aWRlckluZm9EdG8sXHJcbiAgVXBkYXRlUGVybWlzc2lvbkR0byxcclxufSBmcm9tICdAYWJwL25nLnBlcm1pc3Npb24tbWFuYWdlbWVudC9wcm94eSc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIHNpZ25hbCxcclxuICBUcmFja0J5RnVuY3Rpb24sXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50JztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLm92ZXJmbG93LXNjcm9sbCB7XHJcbiAgICAgICAgbWF4LWhlaWdodDogNzB2aDtcclxuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5zY3JvbGwtaW4tbW9kYWwge1xyXG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxNXJlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZpZWxkc2V0IGxlZ2VuZCB7XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICAgICAgd2lkdGg6IGF1dG87XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciB1bCB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7XHJcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcclxuICAgICAgfVxyXG5cclxuICAgICAgLmxweC1zY3JvbGwtcGlsbHMtY29udGFpbmVyIC50YWItY29udGVudCB7XHJcbiAgICAgICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDtcclxuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubHB4LXNjcm9sbC1waWxscy1jb250YWluZXIgdWwgbGkge1xyXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XHJcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmxweC1zY3JvbGwtcGlsbHMtY29udGFpbmVyIHVsIGxpIGEuYWN0aXZlIHtcclxuICAgICAgICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xyXG4gICAgICAgIGJvcmRlci1jb2xvcjogIzZjNWRkMyAhaW1wb3J0YW50O1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM2YzVkZDMgIWltcG9ydGFudDtcclxuICAgICAgfVxyXG4gICAgYCxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRcclxuICBpbXBsZW1lbnRzXHJcbiAgICBQZXJtaXNzaW9uTWFuYWdlbWVudC5QZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudElucHV0cyxcclxuICAgIFBlcm1pc3Npb25NYW5hZ2VtZW50LlBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50T3V0cHV0c1xyXG57XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcnZpY2UgPSBpbmplY3QoUGVybWlzc2lvbnNTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnU3RhdGUgPSBpbmplY3QoQ29uZmlnU3RhdGVTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9hc3RlclNlcnZpY2UgPSBpbmplY3QoVG9hc3RlclNlcnZpY2UpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IHByb3ZpZGVyTmFtZSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBwcm92aWRlcktleSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBoaWRlQmFkZ2VzID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBfdmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGVudGl0eURpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuX3Zpc2libGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wZW5Nb2RhbCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgY29uY2F0KHRoaXMuc2VsZWN0QWxsSW5BbGxUYWJzUmVmLmNoYW5nZXMsIHRoaXMuc2VsZWN0QWxsSW5UaGlzVGFic1JlZi5jaGFuZ2VzKVxyXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRNb2RhbCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKG51bGwpO1xyXG4gICAgICB0aGlzLl92aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgICAgdGhpcy5maWx0ZXIuc2V0KCcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSByZWFkb25seSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdzZWxlY3RBbGxJblRoaXNUYWJzUmVmJylcclxuICBzZWxlY3RBbGxJblRoaXNUYWJzUmVmITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ3NlbGVjdEFsbEluQWxsVGFic1JlZicpXHJcbiAgc2VsZWN0QWxsSW5BbGxUYWJzUmVmITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4+O1xyXG5cclxuICBkYXRhOiBHZXRQZXJtaXNzaW9uTGlzdFJlc3VsdER0byA9IHsgZ3JvdXBzOiBbXSwgZW50aXR5RGlzcGxheU5hbWU6ICcnIH07XHJcblxyXG4gIHNlbGVjdGVkR3JvdXA/OiBQZXJtaXNzaW9uR3JvdXBEdG8gfCBudWxsO1xyXG5cclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RUaGlzVGFiID0gZmFsc2U7XHJcblxyXG4gIHNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG5cclxuICBkaXNhYmxlU2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcblxyXG4gIGRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzID0gZmFsc2U7XHJcblxyXG4gIG1vZGFsQnVzeSA9IGZhbHNlO1xyXG5cclxuICBmaWx0ZXIgPSBzaWduYWw8c3RyaW5nPignJyk7XHJcblxyXG4gIHNlbGVjdGVkR3JvdXBQZXJtaXNzaW9uczogUGVybWlzc2lvbldpdGhTdHlsZVtdID0gW107XHJcblxyXG4gIHBlcm1pc3Npb25Hcm91cFNpZ25hbCA9IHNpZ25hbDxQZXJtaXNzaW9uR3JvdXBEdG9bXT4oW10pO1xyXG5cclxuICBwZXJtaXNzaW9uR3JvdXBzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgc2VhcmNoID0gdGhpcy5maWx0ZXIoKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcclxuICAgIGxldCBncm91cHMgPSB0aGlzLnBlcm1pc3Npb25Hcm91cFNpZ25hbCgpO1xyXG5cclxuICAgIGlmICghc2VhcmNoKSB7XHJcbiAgICAgIHJldHVybiBncm91cHM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5jbHVkZXNTZWFyY2ggPSB0ZXh0ID0+IHRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpO1xyXG4gICAgZ3JvdXBzID0gZ3JvdXBzLmZpbHRlcihncm91cCA9PlxyXG4gICAgICBncm91cC5wZXJtaXNzaW9ucy5zb21lKFxyXG4gICAgICAgIHBlcm1pc3Npb24gPT4gaW5jbHVkZXNTZWFyY2gocGVybWlzc2lvbi5kaXNwbGF5TmFtZSkgfHwgaW5jbHVkZXNTZWFyY2goZ3JvdXAuZGlzcGxheU5hbWUpLFxyXG4gICAgICApLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoZ3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAoZ3JvdXBzWzBdKTtcclxuICAgICAgdGhpcy5kaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwcztcclxuICB9KTtcclxuXHJcbiAgdHJhY2tCeUZuOiBUcmFja0J5RnVuY3Rpb248UGVybWlzc2lvbkdyb3VwRHRvPiA9IChfLCBpdGVtKSA9PiBpdGVtLm5hbWU7XHJcblxyXG4gIGdldENoZWNrZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IG5hbWUpIHx8IHsgaXNHcmFudGVkOiBmYWxzZSB9KS5pc0dyYW50ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hcmdpbiA9IGBtYXJnaW4tJHtcclxuICAgICAgKGRvY3VtZW50LmJvZHkuZGlyIGFzIExvY2FsZURpcmVjdGlvbikgPT09ICdydGwnID8gJ3JpZ2h0JyA6ICdsZWZ0J1xyXG4gICAgfS5weGA7XHJcblxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPVxyXG4gICAgICAodGhpcy5kYXRhLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8ubmFtZSkgfHwge30pLnBlcm1pc3Npb25zIHx8XHJcbiAgICAgIFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucy5tYXAoXHJcbiAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAoe1xyXG4gICAgICAgICAgLi4ucGVybWlzc2lvbixcclxuICAgICAgICAgIHN0eWxlOiB7IFttYXJnaW5dOiBmaW5kTWFyZ2luKHBlcm1pc3Npb25zLCBwZXJtaXNzaW9uKSB9LFxyXG4gICAgICAgICAgaXNHcmFudGVkOiAodGhpcy5wZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lKSB8fCB7fSkuaXNHcmFudGVkLFxyXG4gICAgICAgIH0pIGFzIHVua25vd24gYXMgUGVybWlzc2lvbldpdGhTdHlsZSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZChwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdKSB7XHJcbiAgICBpZiAocGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IHBlcm1pc3Npb25zLmV2ZXJ5KFxyXG4gICAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAgIHBlcm1pc3Npb24uaXNHcmFudGVkICYmXHJcbiAgICAgICAgICBwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnM/LmV2ZXJ5KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShncmFudGVkUHJvdmlkZXJzOiBQcm92aWRlckluZm9EdG9bXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGdyYW50ZWRQcm92aWRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBncmFudGVkUHJvdmlkZXJzLmZpbmRJbmRleChwID0+IHAucHJvdmlkZXJOYW1lICE9PSB0aGlzLnByb3ZpZGVyTmFtZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDaGVja2JveChjbGlja2VkUGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgY29uc3QgeyBpc0dyYW50ZWQsIGdyYW50ZWRQcm92aWRlcnMgfSA9IGNsaWNrZWRQZXJtaXNzaW9uO1xyXG4gICAgaWYgKGlzR3JhbnRlZCAmJiB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUoZ3JhbnRlZFByb3ZpZGVycykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlUGVybWlzc2lvblN0YXR1cyhjbGlja2VkUGVybWlzc2lvbik7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy5zZXRQYXJlbnRDbGlja2VkKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBlcm1pc3Npb25TdGF0dXMoY2xpY2tlZFBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXJtaXNzaW9uID0+IHtcclxuICAgICAgY29uc3QgaXNFeGFjdE1hdGNoID0gY2xpY2tlZFBlcm1pc3Npb24ubmFtZSA9PSBwZXJtaXNzaW9uLm5hbWU7XHJcbiAgICAgIGNvbnN0IGlzUGFyZW50T2ZQZXJtaXNzaW9uID0gY2xpY2tlZFBlcm1pc3Npb24ucGFyZW50TmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lO1xyXG4gICAgICBjb25zdCBpc0NoaWxkT2ZQZXJtaXNzaW9uID0gY2xpY2tlZFBlcm1pc3Npb24ubmFtZSA9PT0gcGVybWlzc2lvbi5wYXJlbnROYW1lO1xyXG5cclxuICAgICAgaWYgKGlzRXhhY3RNYXRjaCkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLnBlcm1pc3Npb24sIGlzR3JhbnRlZDogIXBlcm1pc3Npb24uaXNHcmFudGVkIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0NoaWxkT2ZQZXJtaXNzaW9uICYmIHBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucGVybWlzc2lvbiwgaXNHcmFudGVkOiBmYWxzZSB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNQYXJlbnRPZlBlcm1pc3Npb24gJiYgIXBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucGVybWlzc2lvbiwgaXNHcmFudGVkOiB0cnVlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwZXJtaXNzaW9uO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYXJlbnRDbGlja2VkKGNsaWNrZWRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICBpZiAoY2xpY2tlZFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgICBjb25zdCBwYXJlbnRQZXJtaXNzaW9ucyA9IGZpbmRQYXJlbnRQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zLCBjbGlja2VkUGVybWlzc2lvbik7XHJcbiAgICAgIGlmIChwYXJlbnRQZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50TmFtZXMgPSBuZXcgU2V0KHBhcmVudFBlcm1pc3Npb25zLm1hcChwYXJlbnQgPT4gcGFyZW50Lm5hbWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgICAgICBsZXQgdXBkYXRlZElzR3JhbnRlZCA9IHBlci5pc0dyYW50ZWQ7XHJcblxyXG4gICAgICAgICAgaWYgKHBlci5wYXJlbnROYW1lID09PSBjbGlja2VkUGVybWlzc2lvbi5uYW1lICYmICFjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICAgICAgdXBkYXRlZElzR3JhbnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChwYXJlbnROYW1lcy5oYXMocGVyLm5hbWUpKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRJc0dyYW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiB7IC4uLnBlciwgaXNHcmFudGVkOiB1cGRhdGVkSXNHcmFudGVkIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXIgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnRzID0gZmluZFBhcmVudFBlcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMsIHBlcik7XHJcbiAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCByb290UGFyZW50ID0gcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBpZiAocm9vdFBhcmVudC5uYW1lID09PSBjbGlja2VkUGVybWlzc2lvbi5uYW1lICYmICFyb290UGFyZW50LmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IGZhbHNlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwZXI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyhjbGlja2VkUGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zID0gdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgIGlmIChwZXIubmFtZSA9PT0gY2xpY2tlZFBlcm1pc3Npb25zLm5hbWUpIHtcclxuICAgICAgICBwZXIuaXNHcmFudGVkID0gIXBlci5pc0dyYW50ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFiQ2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PlxyXG4gICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lID09PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRQZXJtaXNzaW9ucyA9IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+IHBlci5pc0dyYW50ZWQpO1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLXRoaXMtdGFicycpIGFzIGFueTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRHcmFudENoZWNrYm94U3RhdGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlUGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT5cclxuICAgICAgcGVyLmdyYW50ZWRQcm92aWRlcnMuZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSA9PT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQWxsUGVybWlzc2lvbnMgPSBzZWxlY3RhYmxlUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGNoZWNrYm94RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLWFsbC10YWJzJykgYXMgYW55O1xyXG5cclxuICAgIGlmIChzZWxlY3RlZEFsbFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFRhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQWxsUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU2VsZWN0VGhpc1RhYigpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLmZvckVhY2gocGVybWlzc2lvbiA9PiB7XHJcbiAgICAgIGlmIChwZXJtaXNzaW9uLmlzR3JhbnRlZCAmJiB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGVybWlzc2lvbnMuZmluZEluZGV4KHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lKTtcclxuXHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZSgwLCBpbmRleCksXHJcbiAgICAgICAgeyAuLi50aGlzLnBlcm1pc3Npb25zW2luZGV4XSwgaXNHcmFudGVkOiAhdGhpcy5zZWxlY3RUaGlzVGFiIH0sXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZShpbmRleCArIDEpLFxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RBbGwoKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXIoKSkge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25Hcm91cHMoKS5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgICBncm91cC5wZXJtaXNzaW9ucy5mb3JFYWNoKHBlcm1pc3Npb24gPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBwZXJtaXNzaW9uLmlzR3JhbnRlZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBlcm1pc3Npb25zLmZpbmRJbmRleChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ubmFtZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IFtcclxuICAgICAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZSgwLCBpbmRleCksXHJcbiAgICAgICAgICAgIHsgLi4udGhpcy5wZXJtaXNzaW9uc1tpbmRleF0sIGlzR3JhbnRlZDogIXRoaXMuc2VsZWN0QWxsVGFiIH0sXHJcbiAgICAgICAgICAgIC4uLnRoaXMucGVybWlzc2lvbnMuc2xpY2UoaW5kZXggKyAxKSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlcm1pc3Npb24gPT4gKHtcclxuICAgICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICAgIGlzR3JhbnRlZDpcclxuICAgICAgICAgIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpIHx8ICF0aGlzLnNlbGVjdEFsbFRhYixcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9ICF0aGlzLnNlbGVjdEFsbFRhYjtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlcigpKSB7XHJcbiAgICAgICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZUdyb3VwKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2V0RGlzYWJsZWQoZ3JvdXAucGVybWlzc2lvbnMpO1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKGdyb3VwKTtcclxuICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0KCkge1xyXG4gICAgY29uc3QgdW5jaGFuZ2VkUGVybWlzc2lvbnMgPSBnZXRQZXJtaXNzaW9ucyh0aGlzLmRhdGEuZ3JvdXBzKTtcclxuXHJcbiAgICBjb25zdCBjaGFuZ2VkUGVybWlzc2lvbnM6IFVwZGF0ZVBlcm1pc3Npb25EdG9bXSA9IHRoaXMucGVybWlzc2lvbnNcclxuICAgICAgLmZpbHRlcihwZXIgPT5cclxuICAgICAgICAodW5jaGFuZ2VkUGVybWlzc2lvbnMuZmluZCh1bmNoYW5nZWQgPT4gdW5jaGFuZ2VkLm5hbWUgPT09IHBlci5uYW1lKSB8fCB7fSkuaXNHcmFudGVkID09PVxyXG4gICAgICAgIHBlci5pc0dyYW50ZWRcclxuICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgIDogdHJ1ZSxcclxuICAgICAgKVxyXG4gICAgICAubWFwKCh7IG5hbWUsIGlzR3JhbnRlZCB9KSA9PiAoeyBuYW1lLCBpc0dyYW50ZWQgfSkpO1xyXG5cclxuICAgIGlmICghY2hhbmdlZFBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubW9kYWxCdXN5ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAudXBkYXRlKHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5LCB7IHBlcm1pc3Npb25zOiBjaGFuZ2VkUGVybWlzc2lvbnMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+XHJcbiAgICAgICAgICB0aGlzLnNob3VsZEZldGNoQXBwQ29uZmlnKCkgPyB0aGlzLmNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpIDogb2YobnVsbCksXHJcbiAgICAgICAgKSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5tb2RhbEJ1c3kgPSBmYWxzZSkpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcygnQWJwVWk6OlNhdmVkU3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1vZGFsKCkge1xyXG4gICAgaWYgKCF0aGlzLnByb3ZpZGVyS2V5IHx8ICF0aGlzLnByb3ZpZGVyTmFtZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVyIEtleSBhbmQgUHJvdmlkZXIgTmFtZSBhcmUgcmVxdWlyZWQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXQodGhpcy5wcm92aWRlck5hbWUsIHRoaXMucHJvdmlkZXJLZXkpLnBpcGUoXHJcbiAgICAgIHRhcCgocGVybWlzc2lvblJlczogR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8pID0+IHtcclxuICAgICAgICBjb25zdCB7IGdyb3VwcyB9ID0gcGVybWlzc2lvblJlcyB8fCB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gcGVybWlzc2lvblJlcztcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25Hcm91cFNpZ25hbC5zZXQoZ3JvdXBzKTtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnMoZ3JvdXBzKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAoZ3JvdXBzWzBdKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IHRoaXMucGVybWlzc2lvbnMuZXZlcnkoXHJcbiAgICAgICAgICBwZXIgPT5cclxuICAgICAgICAgICAgcGVyLmlzR3JhbnRlZCAmJlxyXG4gICAgICAgICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwcm92aWRlciA9PiBwcm92aWRlci5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbml0TW9kYWwoKSB7XHJcbiAgICAvLyBUT0RPOiBSZWZhY3RvclxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RGlzYWJsZWQodGhpcy5zZWxlY3RlZEdyb3VwPy5wZXJtaXNzaW9ucyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZENvdW50KGdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIHZhbCkgPT4gKHZhbC5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSAmJiB2YWwuaXNHcmFudGVkID8gYWNjICsgMSA6IGFjYyksXHJcbiAgICAgIDAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkRmV0Y2hBcHBDb25maWcoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lKCdjdXJyZW50VXNlcicpIGFzIEN1cnJlbnRVc2VyRHRvO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1InKSByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZShyb2xlID0+IHJvbGUgPT09IHRoaXMucHJvdmlkZXJLZXkpO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1UnKSByZXR1cm4gY3VycmVudFVzZXIuaWQgPT09IHRoaXMucHJvdmlkZXJLZXk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZmluZFBhcmVudFBlcm1pc3Npb25zKFxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10sXHJcbiAgcGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuKTogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdIHtcclxuICBjb25zdCBwZXJtaXNzaW9uTWFwID0gbmV3IE1hcChwZXJtaXNzaW9ucy5tYXAocCA9PiBbcC5uYW1lLCBwXSkpO1xyXG4gIGxldCBjdXJyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25NYXAuZ2V0KHBlcm1pc3Npb24ubmFtZSkgPz8gbnVsbDtcclxuICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdID0gW107XHJcblxyXG4gIHdoaWxlIChjdXJyZW50UGVybWlzc2lvbiAmJiBjdXJyZW50UGVybWlzc2lvbi5wYXJlbnROYW1lKSB7XHJcbiAgICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uID0gcGVybWlzc2lvbk1hcC5nZXQoY3VycmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSk7XHJcbiAgICBpZiAoIXBhcmVudFBlcm1pc3Npb24pIHtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBwYXJlbnRQZXJtaXNzaW9ucy5wdXNoKHBhcmVudFBlcm1pc3Npb24pO1xyXG4gICAgY3VycmVudFBlcm1pc3Npb24gPSBwYXJlbnRQZXJtaXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcmVudFBlcm1pc3Npb25zO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTWFyZ2luKFxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10sXHJcbiAgcGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuKTogbnVtYmVyIHtcclxuICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uID0gcGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ucGFyZW50TmFtZSk7XHJcblxyXG4gIGlmIChwYXJlbnRQZXJtaXNzaW9uICYmIHBhcmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgbGV0IG1hcmdpbiA9IDIwO1xyXG4gICAgcmV0dXJuIChtYXJnaW4gKz0gZmluZE1hcmdpbihwZXJtaXNzaW9ucywgcGFyZW50UGVybWlzc2lvbikpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcmVudFBlcm1pc3Npb24gPyAyMCA6IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBlcm1pc3Npb25zKGdyb3VwczogUGVybWlzc2lvbkdyb3VwRHRvW10pOiBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZVtdIHtcclxuICByZXR1cm4gZ3JvdXBzLnJlZHVjZShcclxuICAgIChhY2MsIHZhbCkgPT4gW1xyXG4gICAgICAuLi5hY2MsXHJcbiAgICAgIC4uLnZhbC5wZXJtaXNzaW9ucy5tYXA8UGVybWlzc2lvbldpdGhHcm91cE5hbWU+KHAgPT4gKHsgLi4ucCwgZ3JvdXBOYW1lOiB2YWwubmFtZSB8fCAnJyB9KSksXHJcbiAgICBdLFxyXG4gICAgW10gYXMgUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSxcclxuICApO1xyXG59XHJcbiIsIjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnLCBzY3JvbGxhYmxlOiBmYWxzZSB9XCI+XHJcbiAgQGlmIChkYXRhLmVudGl0eURpc3BsYXlOYW1lIHx8IGVudGl0eURpc3BsYXlOYW1lKSB7XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgICAgPGg0PlxyXG4gICAgICAgIHt7ICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6UGVybWlzc2lvbnMnIHwgYWJwTG9jYWxpemF0aW9uIH19IC1cclxuICAgICAgICB7eyBlbnRpdHlEaXNwbGF5TmFtZSB8fCBkYXRhLmVudGl0eURpc3BsYXlOYW1lIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiIGlkPVwiYmFzaWMtYWRkb24xXCI+PGkgY2xhc3M9XCJiaSBiaS1zZWFyY2hcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgIGlkPVwicGVybWlzc2lvbi1zZWFyY2hcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCJcclxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXIoKVwiXHJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyLnNldCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAjc2VsZWN0QWxsSW5BbGxUYWJzUmVmXHJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0QWxsVGFiXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1NlbGVjdEFsbCgpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRTZWxlY3RBbGxJbkFsbFRhYnNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiPnt7XHJcbiAgICAgICAgICAgICAgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpTZWxlY3RBbGxJbkFsbFRhYnMnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtNCBwLTNcIj5cclxuICAgICAgICA8bGVnZW5kIGNsYXNzPVwicHgtMSBoNSBtYi0wXCI+e3sgJ1Blcm1pc3Npb24gR3JvdXAnIH19PC9sZWdlbmQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGxweC1zY3JvbGwtcGlsbHMtY29udGFpbmVyIHNjcm9sbC1pbi1tb2RhbFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtcGlsbHMgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGdyb3VwIG9mIHBlcm1pc3Npb25Hcm91cHMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImJvcmRlciBuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoeyBhc3NpZ25lZENvdW50OiBnZXRBc3NpZ25lZENvdW50KGdyb3VwLm5hbWUpIH07IGFzIGNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkR3JvdXA/Lm5hbWUgPT09IGdyb3VwPy5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hhbmdlR3JvdXAoZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJzZXREaXNhYmxlZChncm91cC5wZXJtaXNzaW9ucylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5mb250LXdlaWdodC1ib2xkXT1cImNvdW50LmFzc2lnbmVkQ291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cD8uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvdW50LmFzc2lnbmVkQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4oe3sgY291bnQuYXNzaWduZWRDb3VudCB9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggc2Nyb2xsLWluLW1vZGFsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcy0xXCI+XHJcbiAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICNzZWxlY3RBbGxJblRoaXNUYWJzUmVmXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCJcclxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RUaGlzVGFiXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVNlbGVjdEFsbFRhYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RUaGlzVGFiKClcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5UaGlzVGFiJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgQGZvciAocGVybWlzc2lvbiBvZiBzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnM7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJwZXJtaXNzaW9uLnN0eWxlXCIgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICNwZXJtaXNzaW9uQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRDaGVja2VkKHBlcm1pc3Npb24ubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tDaGVja2JveChwZXJtaXNzaW9uLCBwZXJtaXNzaW9uQ2hlY2tib3gudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbYXR0ci5mb3JdPVwicGVybWlzc2lvbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgID57eyBwZXJtaXNzaW9uLmRpc3BsYXlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFoaWRlQmFkZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHByb3ZpZGVyIG9mIHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVyczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1wcmltYXJ5IHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcHJvdmlkZXIucHJvdmlkZXJOYW1lIH19OiB7eyBwcm92aWRlci5wcm92aWRlcktleSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9maWVsZHNldD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGFicENsb3NlPlxyXG4gICAgICAgIHt7ICdBYnBJZGVudGl0eTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwic3VibWl0KClcIj57e1xyXG4gICAgICAgICdBYnBJZGVudGl0eTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgfX08L2FicC1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIH1cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==
|
|
350
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBSUwsa0JBQWtCLEdBR25CLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBRVIsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBRU4sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBd0RoRSxNQUFNLE9BQU8sNkJBQTZCO0lBN0MxQztRQWtEcUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDekMsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFTbEQsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVsQixhQUFR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Q0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsTUFBNEI7SUFDbEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1osR0FBRyxHQUFHO1FBQ04sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM1RixFQUNELEVBQStCLENBQ2hDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnU3RhdGVTZXJ2aWNlLCBDdXJyZW50VXNlckR0byB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IExvY2FsZURpcmVjdGlvbiwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7XHJcbiAgR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8sXHJcbiAgUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuICBQZXJtaXNzaW9uR3JvdXBEdG8sXHJcbiAgUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gIFByb3ZpZGVySW5mb0R0byxcclxuICBVcGRhdGVQZXJtaXNzaW9uRHRvLFxyXG59IGZyb20gJ0BhYnAvbmcucGVybWlzc2lvbi1tYW5hZ2VtZW50L3Byb3h5JztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgc2lnbmFsLFxyXG4gIFRyYWNrQnlGdW5jdGlvbixcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNvbmNhdCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uTWFuYWdlbWVudCB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uLW1hbmFnZW1lbnQnO1xyXG5cclxudHlwZSBQZXJtaXNzaW9uV2l0aFN0eWxlID0gUGVybWlzc2lvbkdyYW50SW5mb0R0byAmIHtcclxuICBzdHlsZTogc3RyaW5nO1xyXG59O1xyXG5cclxudHlwZSBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgZ3JvdXBOYW1lOiBzdHJpbmc7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FicC1wZXJtaXNzaW9uLW1hbmFnZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9uLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGV4cG9ydEFzOiAnYWJwUGVybWlzc2lvbk1hbmFnZW1lbnQnLFxyXG4gIHN0eWxlczogW1xyXG4gICAgYFxyXG4gICAgICAub3ZlcmZsb3ctc2Nyb2xsIHtcclxuICAgICAgICBtYXgtaGVpZ2h0OiA3MHZoO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLnNjcm9sbC1pbi1tb2RhbCB7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDE1cmVtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZmllbGRzZXQgbGVnZW5kIHtcclxuICAgICAgICBmbG9hdDogbm9uZTtcclxuICAgICAgICB3aWR0aDogYXV0bztcclxuICAgICAgfVxyXG5cclxuICAgICAgLmxweC1zY3JvbGwtcGlsbHMtY29udGFpbmVyIHVsIHtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDtcclxuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubHB4LXNjcm9sbC1waWxscy1jb250YWluZXIgLnRhYi1jb250ZW50IHtcclxuICAgICAgICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciB1bCBsaSB7XHJcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcclxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubHB4LXNjcm9sbC1waWxscy1jb250YWluZXIgdWwgbGkgYS5hY3RpdmUge1xyXG4gICAgICAgIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNmM1ZGQzICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzZjNWRkMyAhaW1wb3J0YW50O1xyXG4gICAgICB9XHJcbiAgICBgLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudFxyXG4gIGltcGxlbWVudHNcclxuICAgIFBlcm1pc3Npb25NYW5hZ2VtZW50LlBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50SW5wdXRzLFxyXG4gICAgUGVybWlzc2lvbk1hbmFnZW1lbnQuUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRPdXRwdXRzXHJcbntcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZSA9IGluamVjdChQZXJtaXNzaW9uc1NlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWdTdGF0ZSA9IGluamVjdChDb25maWdTdGF0ZVNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSB0b2FzdGVyU2VydmljZSA9IGluamVjdChUb2FzdGVyU2VydmljZSk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJOYW1lITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IHByb3ZpZGVyS2V5ITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IGhpZGVCYWRnZXMgPSBmYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIF92aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZW50aXR5RGlzcGxheU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fdmlzaWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3Blbk1vZGFsKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl92aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgICAgICBjb25jYXQodGhpcy5zZWxlY3RBbGxJbkFsbFRhYnNSZWYuY2hhbmdlcywgdGhpcy5zZWxlY3RBbGxJblRoaXNUYWJzUmVmLmNoYW5nZXMpXHJcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdE1vZGFsKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAobnVsbCk7XHJcbiAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmZpbHRlci5zZXQoJycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3NlbGVjdEFsbEluVGhpc1RhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluVGhpc1RhYnNSZWYhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj47XHJcbiAgQFZpZXdDaGlsZHJlbignc2VsZWN0QWxsSW5BbGxUYWJzUmVmJylcclxuICBzZWxlY3RBbGxJbkFsbFRhYnNSZWYhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pj47XHJcblxyXG4gIGRhdGE6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvID0geyBncm91cHM6IFtdLCBlbnRpdHlEaXNwbGF5TmFtZTogJycgfTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cD86IFBlcm1pc3Npb25Hcm91cER0byB8IG51bGw7XHJcblxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZVtdID0gW107XHJcblxyXG4gIHNlbGVjdFRoaXNUYWIgPSBmYWxzZTtcclxuXHJcbiAgc2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcblxyXG4gIGRpc2FibGVTZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuXHJcbiAgZGlzYWJsZWRTZWxlY3RBbGxJbkFsbFRhYnMgPSBmYWxzZTtcclxuXHJcbiAgbW9kYWxCdXN5ID0gZmFsc2U7XHJcblxyXG4gIGZpbHRlciA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uV2l0aFN0eWxlW10gPSBbXTtcclxuXHJcbiAgcGVybWlzc2lvbkdyb3VwU2lnbmFsID0gc2lnbmFsPFBlcm1pc3Npb25Hcm91cER0b1tdPihbXSk7XHJcblxyXG4gIHBlcm1pc3Npb25Hcm91cHMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmZpbHRlcigpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgbGV0IGdyb3VwcyA9IHRoaXMucGVybWlzc2lvbkdyb3VwU2lnbmFsKCk7XHJcblxyXG4gICAgaWYgKCFzZWFyY2gpIHtcclxuICAgICAgcmV0dXJuIGdyb3VwcztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbmNsdWRlc1NlYXJjaCA9IHRleHQgPT4gdGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCk7XHJcbiAgICBncm91cHMgPSBncm91cHMuZmlsdGVyKGdyb3VwID0+XHJcbiAgICAgIGdyb3VwLnBlcm1pc3Npb25zLnNvbWUoXHJcbiAgICAgICAgcGVybWlzc2lvbiA9PiBpbmNsdWRlc1NlYXJjaChwZXJtaXNzaW9uLmRpc3BsYXlOYW1lKSB8fCBpbmNsdWRlc1NlYXJjaChncm91cC5kaXNwbGF5TmFtZSksXHJcbiAgICAgICksXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChncm91cHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChncm91cHNbMF0pO1xyXG4gICAgICB0aGlzLmRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH0pO1xyXG5cclxuICB0cmFja0J5Rm46IFRyYWNrQnlGdW5jdGlvbjxQZXJtaXNzaW9uR3JvdXBEdG8+ID0gKF8sIGl0ZW0pID0+IGl0ZW0ubmFtZTtcclxuXHJcbiAgZ2V0Q2hlY2tlZChuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAodGhpcy5wZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gbmFtZSkgfHwgeyBpc0dyYW50ZWQ6IGZhbHNlIH0pLmlzR3JhbnRlZDtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkR3JvdXAoZ3JvdXA6IFBlcm1pc3Npb25Hcm91cER0bykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWFyZ2luID0gYG1hcmdpbi0ke1xyXG4gICAgICAoZG9jdW1lbnQuYm9keS5kaXIgYXMgTG9jYWxlRGlyZWN0aW9uKSA9PT0gJ3J0bCcgPyAncmlnaHQnIDogJ2xlZnQnXHJcbiAgICB9LnB4YDtcclxuXHJcbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9XHJcbiAgICAgICh0aGlzLmRhdGEuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAubmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwPy5uYW1lKSB8fCB7fSkucGVybWlzc2lvbnMgfHxcclxuICAgICAgW107XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zLm1hcChcclxuICAgICAgcGVybWlzc2lvbiA9PlxyXG4gICAgICAgICh7XHJcbiAgICAgICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICAgICAgc3R5bGU6IHsgW21hcmdpbl06IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBlcm1pc3Npb24pIH0sXHJcbiAgICAgICAgICBpc0dyYW50ZWQ6ICh0aGlzLnBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpIHx8IHt9KS5pc0dyYW50ZWQsXHJcbiAgICAgICAgfSkgYXMgdW5rbm93biBhcyBQZXJtaXNzaW9uV2l0aFN0eWxlLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10pIHtcclxuICAgIGlmIChwZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiID0gcGVybWlzc2lvbnMuZXZlcnkoXHJcbiAgICAgICAgcGVybWlzc2lvbiA9PlxyXG4gICAgICAgICAgcGVybWlzc2lvbi5pc0dyYW50ZWQgJiZcclxuICAgICAgICAgIHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycz8uZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKGdyYW50ZWRQcm92aWRlcnM6IFByb3ZpZGVySW5mb0R0b1tdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ3JhbnRlZFByb3ZpZGVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGdyYW50ZWRQcm92aWRlcnMuZmluZEluZGV4KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0NoZWNrYm94KGNsaWNrZWRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICBjb25zdCB7IGlzR3JhbnRlZCwgZ3JhbnRlZFByb3ZpZGVycyB9ID0gY2xpY2tlZFBlcm1pc3Npb247XHJcbiAgICBpZiAoaXNHcmFudGVkICYmIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShncmFudGVkUHJvdmlkZXJzKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVQZXJtaXNzaW9uU3RhdHVzKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMoY2xpY2tlZFBlcm1pc3Npb24pO1xyXG4gICAgICB0aGlzLnNldFBhcmVudENsaWNrZWQoY2xpY2tlZFBlcm1pc3Npb24pO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGVybWlzc2lvblN0YXR1cyhjbGlja2VkUGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlcm1pc3Npb24gPT4ge1xyXG4gICAgICBjb25zdCBpc0V4YWN0TWF0Y2ggPSBjbGlja2VkUGVybWlzc2lvbi5uYW1lID09IHBlcm1pc3Npb24ubmFtZTtcclxuICAgICAgY29uc3QgaXNQYXJlbnRPZlBlcm1pc3Npb24gPSBjbGlja2VkUGVybWlzc2lvbi5wYXJlbnROYW1lID09PSBwZXJtaXNzaW9uLm5hbWU7XHJcbiAgICAgIGNvbnN0IGlzQ2hpbGRPZlBlcm1pc3Npb24gPSBjbGlja2VkUGVybWlzc2lvbi5uYW1lID09PSBwZXJtaXNzaW9uLnBhcmVudE5hbWU7XHJcblxyXG4gICAgICBpZiAoaXNFeGFjdE1hdGNoKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucGVybWlzc2lvbiwgaXNHcmFudGVkOiAhcGVybWlzc2lvbi5pc0dyYW50ZWQgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzQ2hpbGRPZlBlcm1pc3Npb24gJiYgcGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICByZXR1cm4geyAuLi5wZXJtaXNzaW9uLCBpc0dyYW50ZWQ6IGZhbHNlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc1BhcmVudE9mUGVybWlzc2lvbiAmJiAhcGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICByZXR1cm4geyAuLi5wZXJtaXNzaW9uLCBpc0dyYW50ZWQ6IHRydWUgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhcmVudENsaWNrZWQoY2xpY2tlZFBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIGlmIChjbGlja2VkUGVybWlzc2lvbi5wYXJlbnROYW1lKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudFBlcm1pc3Npb25zID0gZmluZFBhcmVudFBlcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMsIGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgaWYgKHBhcmVudFBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBwYXJlbnROYW1lcyA9IG5ldyBTZXQocGFyZW50UGVybWlzc2lvbnMubWFwKHBhcmVudCA9PiBwYXJlbnQubmFtZSkpO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVyID0+IHtcclxuICAgICAgICAgIGxldCB1cGRhdGVkSXNHcmFudGVkID0gcGVyLmlzR3JhbnRlZDtcclxuXHJcbiAgICAgICAgICBpZiAocGVyLnBhcmVudE5hbWUgPT09IGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgJiYgIWNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgICB1cGRhdGVkSXNHcmFudGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHBhcmVudE5hbWVzLmhhcyhwZXIubmFtZSkpIHtcclxuICAgICAgICAgICAgdXBkYXRlZElzR3JhbnRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IHVwZGF0ZWRJc0dyYW50ZWQgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBmaW5kUGFyZW50UGVybWlzc2lvbnModGhpcy5wZXJtaXNzaW9ucywgcGVyKTtcclxuICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJvb3RQYXJlbnQgPSBwYXJlbnRzW3BhcmVudHMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGlmIChyb290UGFyZW50Lm5hbWUgPT09IGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgJiYgIXJvb3RQYXJlbnQuaXNHcmFudGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5wZXIsIGlzR3JhbnRlZDogZmFsc2UgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zKGNsaWNrZWRQZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5tYXAocGVyID0+IHtcclxuICAgICAgaWYgKHBlci5uYW1lID09PSBjbGlja2VkUGVybWlzc2lvbnMubmFtZSkge1xyXG4gICAgICAgIHBlci5pc0dyYW50ZWQgPSAhcGVyLmlzR3JhbnRlZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGVyO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWJDaGVja2JveFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0YWJsZVBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+XHJcbiAgICAgIHBlci5ncmFudGVkUHJvdmlkZXJzLmV2ZXJ5KHAgPT4gcC5wcm92aWRlck5hbWUgPT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFBlcm1pc3Npb25zID0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT4gcGVyLmlzR3JhbnRlZCk7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NlbGVjdC1hbGwtaW4tdGhpcy10YWJzJykgYXMgYW55O1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBlbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEdyYW50Q2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PlxyXG4gICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lID09PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucyA9IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+IHBlci5pc0dyYW50ZWQpO1xyXG4gICAgY29uc3QgY2hlY2tib3hFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NlbGVjdC1hbGwtaW4tYWxsLXRhYnMnKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQWxsUGVybWlzc2lvbnMubGVuZ3RoID09PSBzZWxlY3RhYmxlUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY2hlY2tib3hFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RUaGlzVGFiKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMuZm9yRWFjaChwZXJtaXNzaW9uID0+IHtcclxuICAgICAgaWYgKHBlcm1pc3Npb24uaXNHcmFudGVkICYmIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wZXJtaXNzaW9ucy5maW5kSW5kZXgocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKDAsIGluZGV4KSxcclxuICAgICAgICB7IC4uLnRoaXMucGVybWlzc2lvbnNbaW5kZXhdLCBpc0dyYW50ZWQ6ICF0aGlzLnNlbGVjdFRoaXNUYWIgfSxcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKGluZGV4ICsgMSksXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlbGVjdEFsbCgpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlcigpKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyLnNldCgnJyk7XHJcbiAgICB9IFxyXG5cclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXJtaXNzaW9uID0+ICh7XHJcbiAgICAgIC4uLnBlcm1pc3Npb24sXHJcbiAgICAgIGlzR3JhbnRlZDpcclxuICAgICAgICB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKSB8fCAhdGhpcy5zZWxlY3RBbGxUYWIsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVTZWxlY3RBbGxUYWIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gIXRoaXMuc2VsZWN0QWxsVGFiO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyKCkpIHtcclxuICAgICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hhbmdlR3JvdXAodGhpcy5zZWxlY3RlZEdyb3VwKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlR3JvdXAoZ3JvdXA6IFBlcm1pc3Npb25Hcm91cER0bykge1xyXG4gICAgdGhpcy5zZXREaXNhYmxlZChncm91cC5wZXJtaXNzaW9ucyk7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAoZ3JvdXApO1xyXG4gICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoKSB7XHJcbiAgICBjb25zdCB1bmNoYW5nZWRQZXJtaXNzaW9ucyA9IGdldFBlcm1pc3Npb25zKHRoaXMuZGF0YS5ncm91cHMpO1xyXG5cclxuICAgIGNvbnN0IGNoYW5nZWRQZXJtaXNzaW9uczogVXBkYXRlUGVybWlzc2lvbkR0b1tdID0gdGhpcy5wZXJtaXNzaW9uc1xyXG4gICAgICAuZmlsdGVyKHBlciA9PlxyXG4gICAgICAgICh1bmNoYW5nZWRQZXJtaXNzaW9ucy5maW5kKHVuY2hhbmdlZCA9PiB1bmNoYW5nZWQubmFtZSA9PT0gcGVyLm5hbWUpIHx8IHt9KS5pc0dyYW50ZWQgPT09XHJcbiAgICAgICAgcGVyLmlzR3JhbnRlZFxyXG4gICAgICAgICAgPyBmYWxzZVxyXG4gICAgICAgICAgOiB0cnVlLFxyXG4gICAgICApXHJcbiAgICAgIC5tYXAoKHsgbmFtZSwgaXNHcmFudGVkIH0pID0+ICh7IG5hbWUsIGlzR3JhbnRlZCB9KSk7XHJcblxyXG4gICAgaWYgKCFjaGFuZ2VkUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tb2RhbEJ1c3kgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgIC51cGRhdGUodGhpcy5wcm92aWRlck5hbWUsIHRoaXMucHJvdmlkZXJLZXksIHsgcGVybWlzc2lvbnM6IGNoYW5nZWRQZXJtaXNzaW9ucyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cclxuICAgICAgICAgIHRoaXMuc2hvdWxkRmV0Y2hBcHBDb25maWcoKSA/IHRoaXMuY29uZmlnU3RhdGUucmVmcmVzaEFwcFN0YXRlKCkgOiBvZihudWxsKSxcclxuICAgICAgICApLFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLm1vZGFsQnVzeSA9IGZhbHNlKSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKCdBYnBVaTo6U2F2ZWRTdWNjZXNzZnVsbHknKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuTW9kYWwoKSB7XHJcbiAgICBpZiAoIXRoaXMucHJvdmlkZXJLZXkgfHwgIXRoaXMucHJvdmlkZXJOYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZXIgS2V5IGFuZCBQcm92aWRlciBOYW1lIGFyZSByZXF1aXJlZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmdldCh0aGlzLnByb3ZpZGVyTmFtZSwgdGhpcy5wcm92aWRlcktleSkucGlwZShcclxuICAgICAgdGFwKChwZXJtaXNzaW9uUmVzOiBHZXRQZXJtaXNzaW9uTGlzdFJlc3VsdER0bykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgZ3JvdXBzIH0gPSBwZXJtaXNzaW9uUmVzIHx8IHt9O1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSBwZXJtaXNzaW9uUmVzO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbkdyb3VwU2lnbmFsLnNldChncm91cHMpO1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBnZXRQZXJtaXNzaW9ucyhncm91cHMpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChncm91cHNbMF0pO1xyXG5cclxuICAgICAgICB0aGlzLmRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzID0gdGhpcy5wZXJtaXNzaW9ucy5ldmVyeShcclxuICAgICAgICAgIHBlciA9PlxyXG4gICAgICAgICAgICBwZXIuaXNHcmFudGVkICYmXHJcbiAgICAgICAgICAgIHBlci5ncmFudGVkUHJvdmlkZXJzLmV2ZXJ5KHByb3ZpZGVyID0+IHByb3ZpZGVyLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluaXRNb2RhbCgpIHtcclxuICAgIC8vIFRPRE86IFJlZmFjdG9yXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZXREaXNhYmxlZCh0aGlzLnNlbGVjdGVkR3JvdXA/LnBlcm1pc3Npb25zIHx8IFtdKTtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFzc2lnbmVkQ291bnQoZ3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLnJlZHVjZShcclxuICAgICAgKGFjYywgdmFsKSA9PiAodmFsLmdyb3VwTmFtZSA9PT0gZ3JvdXBOYW1lICYmIHZhbC5pc0dyYW50ZWQgPyBhY2MgKyAxIDogYWNjKSxcclxuICAgICAgMCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzaG91bGRGZXRjaEFwcENvbmZpZygpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5jb25maWdTdGF0ZS5nZXRPbmUoJ2N1cnJlbnRVc2VyJykgYXMgQ3VycmVudFVzZXJEdG87XHJcblxyXG4gICAgaWYgKHRoaXMucHJvdmlkZXJOYW1lID09PSAnUicpIHJldHVybiBjdXJyZW50VXNlci5yb2xlcy5zb21lKHJvbGUgPT4gcm9sZSA9PT0gdGhpcy5wcm92aWRlcktleSk7XHJcblxyXG4gICAgaWYgKHRoaXMucHJvdmlkZXJOYW1lID09PSAnVScpIHJldHVybiBjdXJyZW50VXNlci5pZCA9PT0gdGhpcy5wcm92aWRlcktleTtcclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kUGFyZW50UGVybWlzc2lvbnMoXHJcbiAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG9bXSxcclxuICBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvLFxyXG4pOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10ge1xyXG4gIGNvbnN0IHBlcm1pc3Npb25NYXAgPSBuZXcgTWFwKHBlcm1pc3Npb25zLm1hcChwID0+IFtwLm5hbWUsIHBdKSk7XHJcbiAgbGV0IGN1cnJlbnRQZXJtaXNzaW9uID0gcGVybWlzc2lvbk1hcC5nZXQocGVybWlzc2lvbi5uYW1lKSA/PyBudWxsO1xyXG4gIGNvbnN0IHBhcmVudFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10gPSBbXTtcclxuXHJcbiAgd2hpbGUgKGN1cnJlbnRQZXJtaXNzaW9uICYmIGN1cnJlbnRQZXJtaXNzaW9uLnBhcmVudE5hbWUpIHtcclxuICAgIGNvbnN0IHBhcmVudFBlcm1pc3Npb24gPSBwZXJtaXNzaW9uTWFwLmdldChjdXJyZW50UGVybWlzc2lvbi5wYXJlbnROYW1lKTtcclxuICAgIGlmICghcGFyZW50UGVybWlzc2lvbikge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHBhcmVudFBlcm1pc3Npb25zLnB1c2gocGFyZW50UGVybWlzc2lvbik7XHJcbiAgICBjdXJyZW50UGVybWlzc2lvbiA9IHBhcmVudFBlcm1pc3Npb247XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGFyZW50UGVybWlzc2lvbnM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbmRNYXJnaW4oXHJcbiAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG9bXSxcclxuICBwZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvLFxyXG4pOiBudW1iZXIge1xyXG4gIGNvbnN0IHBhcmVudFBlcm1pc3Npb24gPSBwZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5wYXJlbnROYW1lKTtcclxuXHJcbiAgaWYgKHBhcmVudFBlcm1pc3Npb24gJiYgcGFyZW50UGVybWlzc2lvbi5wYXJlbnROYW1lKSB7XHJcbiAgICBsZXQgbWFyZ2luID0gMjA7XHJcbiAgICByZXR1cm4gKG1hcmdpbiArPSBmaW5kTWFyZ2luKHBlcm1pc3Npb25zLCBwYXJlbnRQZXJtaXNzaW9uKSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGFyZW50UGVybWlzc2lvbiA/IDIwIDogMDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UGVybWlzc2lvbnMoZ3JvdXBzOiBQZXJtaXNzaW9uR3JvdXBEdG9bXSk6IFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10ge1xyXG4gIHJldHVybiBncm91cHMucmVkdWNlKFxyXG4gICAgKGFjYywgdmFsKSA9PiBbXHJcbiAgICAgIC4uLmFjYyxcclxuICAgICAgLi4udmFsLnBlcm1pc3Npb25zLm1hcDxQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZT4ocCA9PiAoeyAuLi5wLCBncm91cE5hbWU6IHZhbC5uYW1lIHx8ICcnIH0pKSxcclxuICAgIF0sXHJcbiAgICBbXSBhcyBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZVtdLFxyXG4gICk7XHJcbn1cclxuIiwiPGFicC1tb2RhbCBbKHZpc2libGUpXT1cInZpc2libGVcIiBbYnVzeV09XCJtb2RhbEJ1c3lcIiBbb3B0aW9uc109XCJ7IHNpemU6ICdsZycsIHNjcm9sbGFibGU6IGZhbHNlIH1cIj5cclxuICBAaWYgKGRhdGEuZW50aXR5RGlzcGxheU5hbWUgfHwgZW50aXR5RGlzcGxheU5hbWUpIHtcclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgICA8aDQ+XHJcbiAgICAgICAge3sgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpQZXJtaXNzaW9ucycgfCBhYnBMb2NhbGl6YXRpb24gfX0gLVxyXG4gICAgICAgIHt7IGVudGl0eURpc3BsYXlOYW1lIHx8IGRhdGEuZW50aXR5RGlzcGxheU5hbWUgfX1cclxuICAgICAgPC9oND5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIG1iLTJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCIgaWQ9XCJiYXNpYy1hZGRvbjFcIj48aSBjbGFzcz1cImJpIGJpLXNlYXJjaFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJwZXJtaXNzaW9uLXNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlcigpXCJcclxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXIuc2V0KCRldmVudClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICNzZWxlY3RBbGxJbkFsbFRhYnNSZWZcclxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxUYWJcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrU2VsZWN0QWxsKClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFic1wiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCI+e3tcclxuICAgICAgICAgICAgICAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlNlbGVjdEFsbEluQWxsVGFicycgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgfX08L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJib3JkZXIgcm91bmRlZC00IHAtM1wiPlxyXG4gICAgICAgIDxsZWdlbmQgY2xhc3M9XCJweC0xIGg1IG1iLTBcIj57eyAnUGVybWlzc2lvbiBHcm91cCcgfX08L2xlZ2VuZD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gbHB4LXNjcm9sbC1waWxscy1jb250YWluZXIgc2Nyb2xsLWluLW1vZGFsXCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi1waWxscyBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoZ3JvdXAgb2YgcGVybWlzc2lvbkdyb3VwcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiYm9yZGVyIG5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICh7IGFzc2lnbmVkQ291bnQ6IGdldEFzc2lnbmVkQ291bnQoZ3JvdXAubmFtZSkgfTsgYXMgY291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRHcm91cD8ubmFtZSA9PT0gZ3JvdXA/Lm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGFuZ2VHcm91cChncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0KT1cInNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmZvbnQtd2VpZ2h0LWJvbGRdPVwiY291bnQuYXNzaWduZWRDb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5kaXNwbGF5TmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY291bnQuYXNzaWduZWRDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPih7eyBjb3VudC5hc3NpZ25lZENvdW50IH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBzY3JvbGwtaW4tbW9kYWxcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBzLTFcIj5cclxuICAgICAgICAgICAgICBAaWYgKHNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgI3NlbGVjdEFsbEluVGhpc1RhYnNSZWZcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdFRoaXNUYWJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2VsZWN0QWxsVGFiXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1NlbGVjdFRoaXNUYWIoKVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpTZWxlY3RBbGxJblRoaXNUYWInIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChwZXJtaXNzaW9uIG9mIHNlbGVjdGVkR3JvdXBQZXJtaXNzaW9uczsgdHJhY2sgJGluZGV4OyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInBlcm1pc3Npb24uc3R5bGVcIiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgI3Blcm1pc3Npb25DaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0Q2hlY2tlZChwZXJtaXNzaW9uLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInBlcm1pc3Npb24ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0NoZWNrYm94KHBlcm1pc3Npb24sIHBlcm1pc3Npb25DaGVja2JveC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFthdHRyLmZvcl09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IHBlcm1pc3Npb24uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWhpZGVCYWRnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAocHJvdmlkZXIgb2YgcGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXByaW1hcnkgdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBwcm92aWRlci5wcm92aWRlck5hbWUgfX06IHt7IHByb3ZpZGVyLnByb3ZpZGVyS2V5IH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgYWJwQ2xvc2U+XHJcbiAgICAgICAge3sgJ0FicElkZW50aXR5OjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YWJwLWJ1dHRvbiBpY29uQ2xhc3M9XCJmYSBmYS1jaGVja1wiIChjbGljayk9XCJzdWJtaXQoKVwiPnt7XHJcbiAgICAgICAgJ0FicElkZW50aXR5OjpTYXZlJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICB9fTwvYWJwLWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgfVxyXG48L2FicC1tb2RhbD5cclxuIl19
|
|
@@ -221,26 +221,12 @@ class PermissionManagementComponent {
|
|
|
221
221
|
}
|
|
222
222
|
onClickSelectAll() {
|
|
223
223
|
if (this.filter()) {
|
|
224
|
-
this.
|
|
225
|
-
group.permissions.forEach(permission => {
|
|
226
|
-
if (permission.isGranted &&
|
|
227
|
-
this.isGrantedByOtherProviderName(permission.grantedProviders))
|
|
228
|
-
return;
|
|
229
|
-
const index = this.permissions.findIndex(per => per.name === permission.name);
|
|
230
|
-
this.permissions = [
|
|
231
|
-
...this.permissions.slice(0, index),
|
|
232
|
-
{ ...this.permissions[index], isGranted: !this.selectAllTab },
|
|
233
|
-
...this.permissions.slice(index + 1),
|
|
234
|
-
];
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
this.permissions = this.permissions.map(permission => ({
|
|
240
|
-
...permission,
|
|
241
|
-
isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,
|
|
242
|
-
}));
|
|
224
|
+
this.filter.set('');
|
|
243
225
|
}
|
|
226
|
+
this.permissions = this.permissions.map(permission => ({
|
|
227
|
+
...permission,
|
|
228
|
+
isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,
|
|
229
|
+
}));
|
|
244
230
|
if (!this.disableSelectAllTab) {
|
|
245
231
|
this.selectThisTab = !this.selectAllTab;
|
|
246
232
|
this.setTabCheckboxState();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport { LocaleDirection, ToasterService } from '@abp/ng.theme.shared';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output,\r\n QueryList,\r\n signal,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n\r\n .scroll-in-modal {\r\n overflow: auto;\r\n max-height: calc(100vh - 15rem);\r\n }\r\n\r\n fieldset legend {\r\n float: none;\r\n width: auto;\r\n }\r\n\r\n .lpx-scroll-pills-container ul {\r\n display: block;\r\n max-height: 500px;\r\n overflow-y: auto;\r\n }\r\n\r\n .lpx-scroll-pills-container .tab-content {\r\n padding-top: 0 !important;\r\n padding-bottom: 0 !important;\r\n }\r\n\r\n .lpx-scroll-pills-container ul li {\r\n margin-bottom: 10px;\r\n border-radius: 10px;\r\n }\r\n\r\n .lpx-scroll-pills-container ul li a.active {\r\n color: #fff !important;\r\n border-color: #6c5dd3 !important;\r\n background-color: #6c5dd3 !important;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs\r\n{\r\n protected readonly service = inject(PermissionsService);\r\n protected readonly configState = inject(ConfigStateService);\r\n protected readonly toasterService = inject(ToasterService);\r\n\r\n @Input()\r\n readonly providerName!: string;\r\n\r\n @Input()\r\n readonly providerKey!: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) {\r\n return;\r\n }\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n this.filter.set('');\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n selectedGroup?: PermissionGroupDto | null;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n disabledSelectAllInAllTabs = false;\r\n\r\n modalBusy = false;\r\n\r\n filter = signal<string>('');\r\n\r\n selectedGroupPermissions: PermissionWithStyle[] = [];\r\n\r\n permissionGroupSignal = signal<PermissionGroupDto[]>([]);\r\n\r\n permissionGroups = computed(() => {\r\n const search = this.filter().toLowerCase().trim();\r\n let groups = this.permissionGroupSignal();\r\n\r\n if (!search) {\r\n return groups;\r\n }\r\n\r\n const includesSearch = text => text.toLowerCase().includes(search);\r\n groups = groups.filter(group =>\r\n group.permissions.some(\r\n permission => includesSearch(permission.displayName) || includesSearch(group.displayName),\r\n ),\r\n );\r\n\r\n if (groups.length) {\r\n this.setSelectedGroup(groups[0]);\r\n this.disabledSelectAllInAllTabs = false;\r\n } else {\r\n this.disabledSelectAllInAllTabs = true;\r\n this.selectedGroupPermissions = [];\r\n }\r\n\r\n return groups;\r\n });\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n if (!this.selectedGroup) {\r\n this.selectedGroupPermissions = [];\r\n return;\r\n }\r\n\r\n const margin = `margin-${\r\n (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions =\r\n (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\r\n [];\r\n this.selectedGroupPermissions = permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n }) as unknown as PermissionWithStyle,\r\n );\r\n }\r\n\r\n setDisabled(permissions: PermissionGrantInfoDto[]) {\r\n if (permissions.length) {\r\n this.disableSelectAllTab = permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== this.providerName),\r\n );\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto) {\r\n const { isGranted, grantedProviders } = clickedPermission;\r\n if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {\r\n return;\r\n }\r\n\r\n this.setSelectedGroup(this.selectedGroup);\r\n setTimeout(() => {\r\n this.updatePermissionStatus(clickedPermission);\r\n this.updateSelectedGroupPermissions(clickedPermission);\r\n this.setParentClicked(clickedPermission);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n }, 0);\r\n }\r\n\r\n updatePermissionStatus(clickedPermission: PermissionGrantInfoDto) {\r\n this.permissions = this.permissions.map(permission => {\r\n const isExactMatch = clickedPermission.name == permission.name;\r\n const isParentOfPermission = clickedPermission.parentName === permission.name;\r\n const isChildOfPermission = clickedPermission.name === permission.parentName;\r\n\r\n if (isExactMatch) {\r\n return { ...permission, isGranted: !permission.isGranted };\r\n }\r\n\r\n if (isChildOfPermission && permission.isGranted) {\r\n return { ...permission, isGranted: false };\r\n }\r\n\r\n if (isParentOfPermission && !permission.isGranted) {\r\n return { ...permission, isGranted: true };\r\n }\r\n\r\n return permission;\r\n });\r\n }\r\n\r\n setParentClicked(clickedPermission: PermissionGrantInfoDto) {\r\n if (clickedPermission.parentName) {\r\n const parentPermissions = findParentPermissions(this.permissions, clickedPermission);\r\n if (parentPermissions.length > 0) {\r\n const parentNames = new Set(parentPermissions.map(parent => parent.name));\r\n\r\n this.permissions = this.permissions.map(per => {\r\n let updatedIsGranted = per.isGranted;\r\n\r\n if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {\r\n updatedIsGranted = false;\r\n }\r\n\r\n if (parentNames.has(per.name)) {\r\n updatedIsGranted = true;\r\n }\r\n\r\n return { ...per, isGranted: updatedIsGranted };\r\n });\r\n }\r\n return;\r\n }\r\n\r\n this.permissions = this.permissions.map(per => {\r\n const parents = findParentPermissions(this.permissions, per);\r\n if (parents.length > 0) {\r\n const rootParent = parents[parents.length - 1];\r\n\r\n if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {\r\n return { ...per, isGranted: false };\r\n }\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) {\r\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\r\n if (per.name === clickedPermissions.name) {\r\n per.isGranted = !per.isGranted;\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === selectablePermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === selectablePermissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n if (this.filter()) {\r\n this.permissionGroups().forEach(group => {\r\n group.permissions.forEach(permission => {\r\n if (\r\n permission.isGranted &&\r\n this.isGrantedByOtherProviderName(permission.grantedProviders)\r\n )\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectAllTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n });\r\n } else {\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n }\r\n\r\n if (!this.disableSelectAllTab) {\r\n this.selectThisTab = !this.selectAllTab;\r\n this.setTabCheckboxState();\r\n if (this.filter()) {\r\n this.setGrantCheckboxState();\r\n }\r\n }\r\n this.onChangeGroup(this.selectedGroup);\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.setSelectedGroup(group);\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n this.toasterService.success('AbpUi::SavedSuccessfully');\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n const { groups } = permissionRes || {};\r\n\r\n this.data = permissionRes;\r\n this.permissionGroupSignal.set(groups);\r\n this.permissions = getPermissions(groups);\r\n this.setSelectedGroup(groups[0]);\r\n\r\n this.disabledSelectAllInAllTabs = this.permissions.every(\r\n per =>\r\n per.isGranted &&\r\n per.grantedProviders.every(provider => provider.providerName !== this.providerName),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.selectedGroup?.permissions || []);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findParentPermissions(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): PermissionGrantInfoDto[] {\r\n const permissionMap = new Map(permissions.map(p => [p.name, p]));\r\n let currentPermission = permissionMap.get(permission.name) ?? null;\r\n const parentPermissions: PermissionGrantInfoDto[] = [];\r\n\r\n while (currentPermission && currentPermission.parentName) {\r\n const parentPermission = permissionMap.get(currentPermission.parentName);\r\n if (!parentPermission) {\r\n break;\r\n }\r\n parentPermissions.push(parentPermission);\r\n currentPermission = parentPermission;\r\n }\r\n\r\n return parentPermissions;\r\n}\r\n\r\nfunction findMargin(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): number {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [\r\n ...acc,\r\n ...val.permissions.map<PermissionWithGroupName>(p => ({ ...p, groupName: val.name || '' })),\r\n ],\r\n [] as PermissionWithGroupName[],\r\n );\r\n}\r\n","<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg', scrollable: false }\">\r\n @if (data.entityDisplayName || entityDisplayName) {\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row d-flex align-items-center mb-2\">\r\n <div class=\"col\">\r\n <div class=\"input-group mb-2\">\r\n <span class=\"input-group-text\" id=\"basic-addon1\"><i class=\"bi bi-search\"></i></span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n id=\"permission-search\"\r\n placeholder=\"Filter\"\r\n [ngModel]=\"filter()\"\r\n (ngModelChange)=\"filter.set($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <fieldset class=\"border rounded-4 p-3\">\r\n <legend class=\"px-1 h5 mb-0\">{{ 'Permission Group' }}</legend>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <li class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <a\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n @if (count.assignedCount > 0) {\r\n <span>({{ count.assignedCount }})</span>\r\n }\r\n </div>\r\n </a>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n @if (selectedGroupPermissions.length) {\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\r\n <div [ngStyle]=\"permission.style\" class=\"form-check mb-2\">\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n @if (!hideBadges) {\r\n @for (provider of permission.grantedProviders; track $index) {\r\n <span class=\"badge bg-primary text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n }\r\n }\r\n </label>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n }\r\n</abp-modal>\r\n","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport { LocaleDirection, ToasterService } from '@abp/ng.theme.shared';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output,\r\n QueryList,\r\n signal,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n\r\n .scroll-in-modal {\r\n overflow: auto;\r\n max-height: calc(100vh - 15rem);\r\n }\r\n\r\n fieldset legend {\r\n float: none;\r\n width: auto;\r\n }\r\n\r\n .lpx-scroll-pills-container ul {\r\n display: block;\r\n max-height: 500px;\r\n overflow-y: auto;\r\n }\r\n\r\n .lpx-scroll-pills-container .tab-content {\r\n padding-top: 0 !important;\r\n padding-bottom: 0 !important;\r\n }\r\n\r\n .lpx-scroll-pills-container ul li {\r\n margin-bottom: 10px;\r\n border-radius: 10px;\r\n }\r\n\r\n .lpx-scroll-pills-container ul li a.active {\r\n color: #fff !important;\r\n border-color: #6c5dd3 !important;\r\n background-color: #6c5dd3 !important;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs\r\n{\r\n protected readonly service = inject(PermissionsService);\r\n protected readonly configState = inject(ConfigStateService);\r\n protected readonly toasterService = inject(ToasterService);\r\n\r\n @Input()\r\n readonly providerName!: string;\r\n\r\n @Input()\r\n readonly providerKey!: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) {\r\n return;\r\n }\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n this.filter.set('');\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n selectedGroup?: PermissionGroupDto | null;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n disabledSelectAllInAllTabs = false;\r\n\r\n modalBusy = false;\r\n\r\n filter = signal<string>('');\r\n\r\n selectedGroupPermissions: PermissionWithStyle[] = [];\r\n\r\n permissionGroupSignal = signal<PermissionGroupDto[]>([]);\r\n\r\n permissionGroups = computed(() => {\r\n const search = this.filter().toLowerCase().trim();\r\n let groups = this.permissionGroupSignal();\r\n\r\n if (!search) {\r\n return groups;\r\n }\r\n\r\n const includesSearch = text => text.toLowerCase().includes(search);\r\n groups = groups.filter(group =>\r\n group.permissions.some(\r\n permission => includesSearch(permission.displayName) || includesSearch(group.displayName),\r\n ),\r\n );\r\n\r\n if (groups.length) {\r\n this.setSelectedGroup(groups[0]);\r\n this.disabledSelectAllInAllTabs = false;\r\n } else {\r\n this.disabledSelectAllInAllTabs = true;\r\n this.selectedGroupPermissions = [];\r\n }\r\n\r\n return groups;\r\n });\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n if (!this.selectedGroup) {\r\n this.selectedGroupPermissions = [];\r\n return;\r\n }\r\n\r\n const margin = `margin-${\r\n (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions =\r\n (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\r\n [];\r\n this.selectedGroupPermissions = permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n }) as unknown as PermissionWithStyle,\r\n );\r\n }\r\n\r\n setDisabled(permissions: PermissionGrantInfoDto[]) {\r\n if (permissions.length) {\r\n this.disableSelectAllTab = permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== this.providerName),\r\n );\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto) {\r\n const { isGranted, grantedProviders } = clickedPermission;\r\n if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {\r\n return;\r\n }\r\n\r\n this.setSelectedGroup(this.selectedGroup);\r\n setTimeout(() => {\r\n this.updatePermissionStatus(clickedPermission);\r\n this.updateSelectedGroupPermissions(clickedPermission);\r\n this.setParentClicked(clickedPermission);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n }, 0);\r\n }\r\n\r\n updatePermissionStatus(clickedPermission: PermissionGrantInfoDto) {\r\n this.permissions = this.permissions.map(permission => {\r\n const isExactMatch = clickedPermission.name == permission.name;\r\n const isParentOfPermission = clickedPermission.parentName === permission.name;\r\n const isChildOfPermission = clickedPermission.name === permission.parentName;\r\n\r\n if (isExactMatch) {\r\n return { ...permission, isGranted: !permission.isGranted };\r\n }\r\n\r\n if (isChildOfPermission && permission.isGranted) {\r\n return { ...permission, isGranted: false };\r\n }\r\n\r\n if (isParentOfPermission && !permission.isGranted) {\r\n return { ...permission, isGranted: true };\r\n }\r\n\r\n return permission;\r\n });\r\n }\r\n\r\n setParentClicked(clickedPermission: PermissionGrantInfoDto) {\r\n if (clickedPermission.parentName) {\r\n const parentPermissions = findParentPermissions(this.permissions, clickedPermission);\r\n if (parentPermissions.length > 0) {\r\n const parentNames = new Set(parentPermissions.map(parent => parent.name));\r\n\r\n this.permissions = this.permissions.map(per => {\r\n let updatedIsGranted = per.isGranted;\r\n\r\n if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {\r\n updatedIsGranted = false;\r\n }\r\n\r\n if (parentNames.has(per.name)) {\r\n updatedIsGranted = true;\r\n }\r\n\r\n return { ...per, isGranted: updatedIsGranted };\r\n });\r\n }\r\n return;\r\n }\r\n\r\n this.permissions = this.permissions.map(per => {\r\n const parents = findParentPermissions(this.permissions, per);\r\n if (parents.length > 0) {\r\n const rootParent = parents[parents.length - 1];\r\n\r\n if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {\r\n return { ...per, isGranted: false };\r\n }\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) {\r\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\r\n if (per.name === clickedPermissions.name) {\r\n per.isGranted = !per.isGranted;\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === selectablePermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === selectablePermissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n if (this.filter()) {\r\n this.filter.set('');\r\n } \r\n\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n\r\n if (!this.disableSelectAllTab) {\r\n this.selectThisTab = !this.selectAllTab;\r\n this.setTabCheckboxState();\r\n if (this.filter()) {\r\n this.setGrantCheckboxState();\r\n }\r\n }\r\n this.onChangeGroup(this.selectedGroup);\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.setSelectedGroup(group);\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n this.toasterService.success('AbpUi::SavedSuccessfully');\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n const { groups } = permissionRes || {};\r\n\r\n this.data = permissionRes;\r\n this.permissionGroupSignal.set(groups);\r\n this.permissions = getPermissions(groups);\r\n this.setSelectedGroup(groups[0]);\r\n\r\n this.disabledSelectAllInAllTabs = this.permissions.every(\r\n per =>\r\n per.isGranted &&\r\n per.grantedProviders.every(provider => provider.providerName !== this.providerName),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.selectedGroup?.permissions || []);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findParentPermissions(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): PermissionGrantInfoDto[] {\r\n const permissionMap = new Map(permissions.map(p => [p.name, p]));\r\n let currentPermission = permissionMap.get(permission.name) ?? null;\r\n const parentPermissions: PermissionGrantInfoDto[] = [];\r\n\r\n while (currentPermission && currentPermission.parentName) {\r\n const parentPermission = permissionMap.get(currentPermission.parentName);\r\n if (!parentPermission) {\r\n break;\r\n }\r\n parentPermissions.push(parentPermission);\r\n currentPermission = parentPermission;\r\n }\r\n\r\n return parentPermissions;\r\n}\r\n\r\nfunction findMargin(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): number {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [\r\n ...acc,\r\n ...val.permissions.map<PermissionWithGroupName>(p => ({ ...p, groupName: val.name || '' })),\r\n ],\r\n [] as PermissionWithGroupName[],\r\n );\r\n}\r\n","<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg', scrollable: false }\">\r\n @if (data.entityDisplayName || entityDisplayName) {\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row d-flex align-items-center mb-2\">\r\n <div class=\"col\">\r\n <div class=\"input-group mb-2\">\r\n <span class=\"input-group-text\" id=\"basic-addon1\"><i class=\"bi bi-search\"></i></span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n id=\"permission-search\"\r\n placeholder=\"Filter\"\r\n [ngModel]=\"filter()\"\r\n (ngModelChange)=\"filter.set($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <fieldset class=\"border rounded-4 p-3\">\r\n <legend class=\"px-1 h5 mb-0\">{{ 'Permission Group' }}</legend>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <li class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <a\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n @if (count.assignedCount > 0) {\r\n <span>({{ count.assignedCount }})</span>\r\n }\r\n </div>\r\n </a>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n @if (selectedGroupPermissions.length) {\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\r\n <div [ngStyle]=\"permission.style\" class=\"form-check mb-2\">\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n @if (!hideBadges) {\r\n @for (provider of permission.grantedProviders; track $index) {\r\n <span class=\"badge bg-primary text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n }\r\n }\r\n </label>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n }\r\n</abp-modal>\r\n","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abp/ng.permission-management",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.4",
|
|
4
4
|
"homepage": "https://abp.io",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/abpframework/abp.git"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@abp/ng.theme.shared": "~9.0.
|
|
10
|
+
"@abp/ng.theme.shared": "~9.0.4",
|
|
11
11
|
"tslib": "^2.0.0"
|
|
12
12
|
},
|
|
13
13
|
"publishConfig": {
|