chrv-components 1.8.56 → 1.8.58

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.
Binary file
@@ -252,7 +252,8 @@ export class ChrFormComponent {
252
252
  ? this.transformDate(typeof value == 'string' ? new Date(value) : value, 'yyyy-MM-ddTHH:mm')
253
253
  : this.transformDate(defaultValue, 'yyyy-MM-ddTHH:mm');
254
254
  case 'number':
255
- return Number(value);
255
+ const number = Number(value);
256
+ return Number.isNaN(number) ? 0 : number;
256
257
  case 'searchSelect':
257
258
  return value;
258
259
  case 'tagSelect':
@@ -412,4 +413,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
412
413
  }], tabDisplay: [{
413
414
  type: Input
414
415
  }] } });
415
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsR0FPeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixXQUFXLEdBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBR0wsVUFBVSxFQUNWLFdBQVcsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBQ1oseUJBQXlCLEdBQzFCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFB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bnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxuICBFbGVtZW50UmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFZhbGlkYXRvckZuLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgQWJzdHJhY3RDb250cm9sLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBGb3JtQnVpbGRlcixcbiAgRm9ybUdyb3VwLFxuICBWYWxpZGF0b3JzLFxuICBGb3JtQ29udHJvbCxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RXJyb3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IENoclNlYXJjaFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Noci1zZWFyY2gtc2VsZWN0L2Noci1zZWFyY2gtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQge1xuICBEYXRlUGlwZSxcbiAgQ29tbW9uTW9kdWxlLFxuICBEQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IFR5cGVWYWxpZGF0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi9tb2RlbHMvY2hyLXZhbGlkYXRvcnMvdHlwZS12YWxpZGF0b3InO1xuaW1wb3J0IHsgZGVjaW1hbCB9IGZyb20gJy4uL21vZGVscy9jaHItdmFsaWRhdG9ycy9kZWNpbWFsLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBtYXhEYXRlIH0gZnJvbSAnLi4vbW9kZWxzL2Noci12YWxpZGF0b3JzL21heC1kYXRlLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyByZXF1aXJlZCB9IGZyb20gJy4uL21vZGVscy9jaHItdmFsaWRhdG9ycy9yZXF1aXJlZC12YWxpZGF0b3InO1xuaW1wb3J0IHsgQ2hyVGFnU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hyLXRhZy1zZWxlY3QvY2hyLXRhZy1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi9tb2RlbHMvY2hyLXZhbGlkYXRvcnMvdHlwZS12YWxpZGF0b3InO1xuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlcy5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2xDb2xsZWN0aW9uIHtcbiAgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2w7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlYXJjaEZpbHRlciB7XG4gIGRpc3BsYXk6IHN0cmluZztcbiAgY2FsbGJhY2s/OiBGdW5jdGlvbjtcbiAgdG9vbHRpcD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29udHJvbFZhbGlkYXRpb24ge1xuICBydWxlOiBzdHJpbmc7XG4gIHZhbGlkYXRvcj86IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsO1xuICBrZXk/OiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xuICBkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb250cm9sIHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgc3Bhbj86IHN0cmluZztcbiAgd2lkdGg/OiAnY29sJyB8ICdyb3cnO1xuICBjb2w/OiBudW1iZXI7XG4gIHJvdz86IG51bWJlcjtcbiAgdHlwZTpcbiAgICB8ICd0ZXh0J1xuICAgIHwgJ3Bhc3N3b3JkJ1xuICAgIHwgJ3RleHRBcmVhJ1xuICAgIHwgJ251bWJlcidcbiAgICB8ICdkYXRlJ1xuICAgIHwgJ2RhdGV0aW1lJ1xuICAgIHwgJ3NlYXJjaFNlbGVjdCdcbiAgICB8ICd0YWdTZWxlY3QnXG4gICAgfCAnY29sb3InXG4gICAgfCAndG9nZ2xlJ1xuICAgIHwgJ2ZpbGUnO1xuICBhY2NlcHQ/OiBzdHJpbmdbXTtcbiAgdmFsdWU/OiBhbnk7XG4gIGRhdGE/OiBhbnlbXSB8IG51bGw7XG4gIGljb24/OiBzdHJpbmc7XG4gIGljb25DYWxsYmFjaz86IEZ1bmN0aW9uO1xuICBpY29uQ2FsbGJhY2tEaXNhYmxlZD86IGJvb2xlYW47XG4gIGljb25Ub29sdGlwPzogc3RyaW5nO1xuICBmbj86IChvYmplY3Q6IGFueSkgPT4gc3RyaW5nO1xuICBmaWx0ZXJzPzogSVNlYXJjaEZpbHRlcltdO1xuICB2YWxpZGF0aW9ucz86IElDb250cm9sVmFsaWRhdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGb3JtU2VjdGlvbiB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBjb250cm9sczogSUNvbnRyb2xbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUNvbnRyb2wge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hyLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9jaHItZm9ybS5jb21wb25lbnQuc2NzcycsXG4gICAgJy4uLy4uLy4uLy4uLy4uL3RhaWx3aW5kYnVpbGQuY3NzJyxcbiAgICAnLi9jaHItZm9ybS5jb21wb25lbnQuc2NzcycsXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXRFcnJvcixcbiAgICBDaHJTZWFyY2hTZWxlY3RDb21wb25lbnQsXG4gICAgQ2hyVGFnU2VsZWN0Q29tcG9uZW50LFxuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICBEYXRlUGlwZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHlwZVZhbGlkYXRvckRpcmVjdGl2ZSxcbiAgICBNYXRUYWJzTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBEYXRlUGlwZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBEQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TLFxuICAgICAgdXNlVmFsdWU6IHsgZGF0ZUZvcm1hdDogJ3Nob3J0RGF0ZScgfSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXG59KVxuZXhwb3J0IGNsYXNzIENockZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBzZWN0aW9ucz86IElGb3JtU2VjdGlvbltdO1xuICBASW5wdXQoKSBjb250cm9scz86IElDb250cm9sW107XG5cbiAgQElucHV0KCkgdmFsaWQ/OiBib29sZWFuO1xuICBAT3V0cHV0KCkgdmFsaWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBASW5wdXQoKSBtb2RlbDogYW55ID0gbnVsbDtcbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgQE91dHB1dCgpIHZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgc3VibWl0PzogRnVuY3Rpb247XG5cbiAgQElucHV0KCkgY29tcGFjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBmb3JtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUZvcm1Db250cm9sPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxJRm9ybUNvbnRyb2w+KCk7XG5cbiAgQElucHV0KCkgdGFiRGlzcGxheTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vQElucHV0KCkgaW5jb21wbGVTdWJtaXNzaW9uQ2FsbGJhY2s6ICgoKSA9PiBhbnkgKXwgbnVsbCA9IG51bGw7XG5cbiAgZm9ybTogRm9ybUdyb3VwID0gdGhpcy5idWlsZGVyLmdyb3VwKHt9KTtcblxuICBwcml2YXRlIHZhbHVlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwcml2YXRlIGNvbnRyb2xUeXBlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIGZsYXR0ZW5lZENvbnRyb2xzOiBJQ29udHJvbFtdID0gW107XG4gIHByaXZhdGUgX2Vycm9yczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICBwdWJsaWMgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGZpbGVTZXJ2aWNlOiBGaWxlU2VydmljZVxuICApIHtcbiAgICBpZiAodGhpcy5jb250cm9scyAhPSBudWxsICYmIHRoaXMuc2VjdGlvbnMgIT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJZb3UgY2FuJ3QgdXNlIGJvdGggY29udHJvbHMgYW5kIHNlY3Rpb25zIGluIHRoZSBzYW1lIGZvcm1cIlxuICAgICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMgPVxuICAgICAgdGhpcy5zZWN0aW9uc1xuICAgICAgICA/Lm1hcCgocykgPT4gcy5jb250cm9scylcbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAuY29uY2F0KHRoaXMuY29udHJvbHMgPz8gW10pIHx8IFtdO1xuICAgIHRoaXMuaW5pdE1vZGVsKCk7XG4gICAgdGhpcy5pbml0VmFsdWVzKCk7XG4gICAgdGhpcy5pbml0Q29udHJvbHMoKTtcbiAgICB0aGlzLmluaXRMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIHZhbGlkYXRlU2VhcmNoU2VsZWN0VmFsaWR0eSA9ICh2YWxpZDogYm9vbGVhbikgPT4ge1xuICAgIC8vdGhpcy52YWxpZCA9IHZhbGlkICYmIHRoaXMuZm9ybS52YWxpZDtcbiAgICAvL3RoaXMudmFsaWRDaGFuZ2UuZW1pdCh0aGlzLnZhbGlkKTtcbiAgfTtcblxuICBwcml2YXRlIGluaXRNb2RlbCA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5tb2RlbCA9PSBudWxsKSB0aGlzLm1vZGVsID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5mbGF0dGVuZWRDb250cm9scykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm1vZGVsW2NvbnRyb2wubmFtZV0gPT09IG51bGwgfHxcbiAgICAgICAgdGhpcy5tb2RlbFtjb250cm9sLm5hbWVdID09PSB1bmRlZmluZWRcbiAgICAgIClcbiAgICAgICAgdGhpcy5tb2RlbFtjb250cm9sLm5hbWVdID0gY29udHJvbC52YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBpbml0VmFsdWVzID0gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0gPT09IG51bGwgfHxcbiAgICAgICAgdGhpcy52YWx1ZXNbY29udHJvbC5uYW1lXSA9PT0gdW5kZWZpbmVkXG4gICAgICApXG4gICAgICAgIHRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0gPSB0aGlzLnRvSW5wdXRWYWx1ZShcbiAgICAgICAgICBjb250cm9sLFxuICAgICAgICAgIHRoaXMubW9kZWxbY29udHJvbC5uYW1lXVxuICAgICAgICApO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGluaXRDb250cm9scyA9ICgpID0+IHtcbiAgICBjb25zdCBmb3JtQ29udHJvbHMgPSB7fSBhcyBJRm9ybUNvbnRyb2xDb2xsZWN0aW9uO1xuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzKSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5fZ2V0VmFsaWRhdG9ycyhjb250cm9sLnZhbGlkYXRpb25zKTtcbiAgICAgIGZvcm1Db250cm9sc1tjb250cm9sLm5hbWVdID0gbmV3IEZvcm1Db250cm9sKFxuICAgICAgICB0aGlzLnZhbHVlc1tjb250cm9sLm5hbWVdLFxuICAgICAgICB2YWxpZGF0b3JzXG4gICAgICApO1xuICAgICAgLy9pZiAoY29udHJvbC50eXBlID09ICdmaWxlJykgZm9ybUNvbnRyb2xzW2NvbnRyb2wubmFtZV0uZGlzYWJsZSgpO1xuICAgICAgdGhpcy5jb250cm9sVHlwZXNbY29udHJvbC5uYW1lXSA9IGNvbnRyb2wudHlwZTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0gPSB0aGlzLmJ1aWxkZXIuZ3JvdXAoZm9ybUNvbnRyb2xzKTtcbiAgICB0aGlzLnZhbGlkID0gdGhpcy5mb3JtLnZhbGlkO1xuICB9O1xuXG4gIHByaXZhdGUgaW5pdExpc3RlbmVycyA9ICgpID0+IHtcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24odGhpcy5tb2RlbCwga2V5KSAmJiB0aGlzLmNvbnRyb2xUeXBlc1trZXldICE9ICdmaWxlJylcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVVBEQVRJTkcgXCIgKyBrZXksIHRoaXMubW9kZWxba2V5XSwgdmFsdWVzW2tleV0pO1xuICAgICAgICAgIHRoaXMubW9kZWxba2V5XSA9IHZhbHVlc1trZXldO1xuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bih0aGlzLnZhbHVlcywga2V5KSkgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlc1trZXldO1xuICAgICAgICAvLyBpZiAodmFsdWVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgLy8gXHR0aGlzLm1vZGVsW2tleV0gPSB2YWx1ZXNba2V5XTtcbiAgICAgICAgLy8gXHR0aGlzLnZhbHVlc1trZXldID0gdmFsdWVzW2tleV07XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XG4gICAgICB0aGlzLnZhbGlkQ2hhbmdlLmVtaXQodGhpcy52YWxpZCk7XG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb250cm9sID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChuYW1lKSByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzW25hbWVdO1xuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIGZvY3VzID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIC8vY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbChuYW1lKTtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgaW5wdXRbbmFtZT1cIiR7bmFtZX1cIl1gXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHRoaXMuY29udHJvbChuYW1lKT8ubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZWwuZm9jdXMoKTtcbiAgICB9LCAxMCk7XG4gIH07XG5cbiAgdmFsdWUgPSAoaW5wdXQ/OiBzdHJpbmcpID0+IHRoaXMuZ2V0VmFsdWUoaW5wdXQpO1xuXG4gIGdldFZhbHVlID0gKGlucHV0Pzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlucHV0KSByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzW2lucHV0XT8udmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS52YWx1ZTtcbiAgfTtcblxuICBpc1ZhbGlkID0gKGlucHV0Pzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlucHV0KSByZXR1cm4gdGhpcy5mb3JtLmdldChpbnB1dCk/LnZhbGlkO1xuICAgIHJldHVybiB0aGlzLnZhbGlkO1xuICB9O1xuXG4gIGlzQ29udHJvbFJlcXVpcmVkID0gKGNvbnRyb2w6IElDb250cm9sKSA9PiB7XG4gICAgcmV0dXJuIGNvbnRyb2wudmFsaWRhdGlvbnM/LmZpbmQoXG4gICAgICAodikgPT4gdi5ydWxlPy50b0xvd2VyQ2FzZSgpID09ICdyZXF1aXJlZCdcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIGEgY29udHJvbCBXSVRIT1VUIHRyaWdnZXJpbmcgdGhlIG1vZGVsQ2hhbmdlIGV2ZW50XG4gICAqIEBwYXJhbSBrZXkgaW5wdXQga2V5IChjb250cm9sIG5hbWUpXG4gICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBzZXRcbiAgICogQHBhcmFtIGRhdGVGb3JtYXQgb3B0aW9uYWwgZGF0ZSBmb3JtYXQgZm9yIGRhdGUgYW5kIGRhdGV0aW1lIGlucHV0c1xuICAgKi9cbiAgc2V0VmFsdWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgdmFsID0gdGhpcy50eXBlVG9JbnB1dFZhbHVlKHRoaXMuY29udHJvbFR5cGVzW2tleV0sIHZhbHVlKTtcbiAgICB0aGlzLmZvcm0uZ2V0KGtleSk/LnNldFZhbHVlKHZhbCwge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIGVtaXRWaWV3VG9Nb2RlbENoYW5nZTogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5tb2RlbFtrZXldID0gdmFsO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIHRoZSBmb3JtJ3MgbW9kZWwgV0lUSE9VVCB0cmlnZ2VyaW5nIHRoZSBtb2RlbENoYW5nZSBldmVudFxuICAgKiBAcGFyYW0gbW9kZWwgdGhlIG1vZGVsIHRvIHNldFxuICAgKiBAcGFyYW0gZGF0ZUZvcm1hdCBvcHRpb25hbCBkYXRlIGZvcm1hdCBmb3IgZGF0ZSBhbmQgZGF0ZXRpbWUgaW5wdXRzXG4gICAqL1xuICBzZXQgPSAobW9kZWw6IGFueSwgZGF0ZUZvcm1hdDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtb2RlbCkpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUoa2V5LCBtb2RlbFtrZXldLCBkYXRlRm9ybWF0KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHZhbHVlIG9mIGEgY29udHJvbC4gVGhpcyBXSUxMIHRyaWdnZXIgdGhlIG1vZGVsQ2hhbmdlIGV2ZW50XG4gICAqIEBwYXJhbSBrZXkgaW5wdXQga2V5IChjb250cm9sIG5hbWUpXG4gICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBzZXRcbiAgICogQHBhcmFtIGRhdGVGb3JtYXQgb3B0aW9uYWwgZGF0ZSBmb3JtYXQgZm9yIGRhdGUgYW5kIGRhdGV0aW1lIGlucHV0c1xuICAgKi9cbiAgcGF0Y2hWYWx1ZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgZGF0ZUZvcm1hdDogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5jb250cm9sVHlwZXNba2V5XTtcbiAgICBjb25zdCB2YWwgPSB0aGlzLnR5cGVUb0lucHV0VmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgaWYgKHR5cGUgPT0gJ2ZpbGUnKSB7XG4gICAgICB0aGlzLnNldFZhbHVlJChrZXksIHZhbD8ubmFtZSk7XG4gICAgICB0aGlzLnNldE1vZGVsJChrZXksIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUkKGtleSwgdmFsKTtcbiAgICAgIHRoaXMuc2V0TW9kZWwkKGtleSwgdmFsKTtcbiAgICB9XG4gICAgdGhpcy5mb3JtLmdldChrZXkpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSdzIG1vZGVsLiBUaGlzIFdJTEwgdHJpZ2dlciB0aGUgbW9kZWxDaGFuZ2UgZXZlbnQgb25jZSBmb3IgZWFjaCBpbnB1dFxuICAgKiBAcGFyYW0gbW9kZWwgbW9kZWwgdG8gc2V0XG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0IG9wdGlvbmFsIGRhdGUgZm9ybWF0IGZvciBkYXRlIGFuZCBkYXRldGltZSBpbnB1dHNcbiAgICovXG4gIHBhdGNoID0gKG1vZGVsOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWwpKSB7XG4gICAgICB0aGlzLnBhdGNoVmFsdWUoa2V5LCBtb2RlbFtrZXldLCBkYXRlRm9ybWF0KTtcbiAgICB9XG4gIH07XG5cbiAgY2hlY2tWYWxpZGl0eSA9ICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5mbGF0dGVuZWRDb250cm9scykge1xuICAgICAgdGhpcy5mb3JtLmdldChjb250cm9sLm5hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICAgIHRoaXMudmFsaWQgPSB0aGlzLmZvcm0udmFsaWQ7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG5cbiAgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSA9ICh0b3VjaGVkOiBib29sZWFuID0gZmFsc2UpID0+IHtcbiAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgICBpZiAodG91Y2hlZCkgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICB0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgfTtcblxuICByZXNldCA9ICgpID0+IHtcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZ2V0ID0gKGNvbnRyb2w6IElDb250cm9sKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pO1xuICB9O1xuXG4gIHByb3RlY3RlZCBoYXNFcnJvciA9IChjb250cm9sOiBJQ29udHJvbCwgdmFsaWRhdGlvbjogSUNvbnRyb2xWYWxpZGF0aW9uKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5oYXNFcnJvcih2YWxpZGF0aW9uLnJ1bGUsIGNvbnRyb2wubmFtZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGdldFRvQWNjZXB0ID0gKGNvbnRyb2w6IElDb250cm9sKSA9PiB7XG4gICAgcmV0dXJuIGNvbnRyb2wuYWNjZXB0Py5tYXAoKHMpID0+IHMudG9Mb2NhbGVVcHBlckNhc2UoKSkuam9pbignLCAnKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgc2hvdWxkU2hvd0Vycm9yID0gKFxuICAgIGNvbnRyb2w6IElDb250cm9sLFxuICAgIHZhbGlkYXRpb246IElDb250cm9sVmFsaWRhdGlvblxuICApID0+IHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtLmdldChjb250cm9sLm5hbWUpO1xuICAgIGlmIChjdHJsICYmIGN0cmwuZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IE9iamVjdC5rZXlzKGN0cmwuZXJyb3JzKVswXTtcbiAgICAgIHJldHVybiBmaXJzdCA9PT0gdmFsaWRhdGlvbi5ydWxlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGZpbGVDaGFuZ2UgPSAoZXZlbnQ6IEV2ZW50LCBjb250cm9sOiBJQ29udHJvbCkgPT4ge1xuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KGNvbnRyb2wubmFtZSk7XG4gICAgY3RybD8ubWFya0FzRGlydHkoKTtcbiAgICBjdHJsPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgY29uc3QgZmlsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM/LlswXTtcbiAgICBpZiAoZmlsZSA9PT0gbnVsbCB8fCBmaWxlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhpcy5wYXRjaFZhbHVlKGNvbnRyb2wubmFtZSwgJycpO1xuICAgIHRoaXMuZmlsZVNlcnZpY2UuZmlsZVRvQmFzZTY0KGZpbGUhKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgdGhpcy5tb2RlbFtjb250cm9sLm5hbWVdID0gcmVzO1xuICAgICAgdGhpcy52YWx1ZXNbY29udHJvbC5uYW1lXSA9IHJlcy5uYW1lO1xuICAgICAgY3RybD8ucGF0Y2hWYWx1ZShyZXMubmFtZSwge1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICBlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KHRoaXMudmFsdWVzKTtcbiAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHNldFZhbHVlJCA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8ucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlO1xuICB9O1xuXG4gIHByaXZhdGUgc2V0TW9kZWwkID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgdGhpcy5tb2RlbFtrZXldID0gdmFsdWU7XG4gIH07XG5cbiAgcHJpdmF0ZSB0b0lucHV0VmFsdWUgPSAoY29udHJvbDogSUNvbnRyb2wsIHZhbHVlOiBhbnkgfCBudWxsID0gbnVsbCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnR5cGVUb0lucHV0VmFsdWUoY29udHJvbC50eXBlLCB2YWx1ZSwgY29udHJvbC52YWx1ZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSB0eXBlVG9JbnB1dFZhbHVlID0gKFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55IHwgbnVsbCA9IG51bGwsXG4gICAgZGVmYXVsdFZhbHVlOiBhbnkgfCBudWxsID0gbnVsbFxuICApID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICA/IHRoaXMudHJhbnNmb3JtRGF0ZShcbiAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWUsXG4gICAgICAgICAgICAgICd5eXl5LU1NLWRkJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy50cmFuc2Zvcm1EYXRlKGRlZmF1bHRWYWx1ZSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgPyB0aGlzLnRyYW5zZm9ybURhdGUoXG4gICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlLFxuICAgICAgICAgICAgICAneXl5eS1NTS1kZFRISDptbSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHRoaXMudHJhbnNmb3JtRGF0ZShkZWZhdWx0VmFsdWUsICd5eXl5LU1NLWRkVEhIOm1tJyk7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICAgIGNhc2UgJ3NlYXJjaFNlbGVjdCc6XG4gICAgICAgIHJldHVybiB2YWx1ZSE7XG4gICAgICBjYXNlICd0YWdTZWxlY3QnOlxuICAgICAgICByZXR1cm4gdmFsdWUhO1xuICAgICAgY2FzZSAndG9nZ2xlJzpcbiAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09IHRydWUpIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZSEgfHwgZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHRyYW5zZm9ybURhdGUgPSAodmFsdWU6IGFueSwgZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsIGZvcm1hdCk7XG4gIH07XG5cbiAgcHVibGljIHJlc2l6ZSA9ICh0ZXh0QXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxIZWlnaHQgPSB0ZXh0QXJlYS5zdHlsZS5oZWlnaHQ7XG4gICAgdGV4dEFyZWEuc3R5bGUuaGVpZ2h0ID0gaW5pdGlhbEhlaWdodDtcbiAgICB0ZXh0QXJlYS5zdHlsZS5oZWlnaHQgPSAnJyArIHRleHRBcmVhLnNjcm9sbEhlaWdodCArICdweCc7XG4gIH07XG5cbiAgcHVibGljIGRvU3VibWl0ID0gKCkgPT4ge1xuICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgaWYgKHRoaXMudmFsaWQgJiYgdGhpcy5mb3JtLnZhbGlkKSB0aGlzLnN1Ym1pdD8uKHRoaXMuZm9ybS52YWx1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGxvZyA9IChlbDogYW55KSA9PiB7XG4gICAgY29uc29sZS5sb2coZWwpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBhY2NlcHRUb1N0cmluZyA9IChjb250cm9sOiBJQ29udHJvbCkgPT4ge1xuICAgIHJldHVybiBjb250cm9sLmFjY2VwdD8ubWFwKCh0eXBlKSA9PiBgLiR7dHlwZX1gKS5qb2luKCcsICcpIHx8ICcuKic7XG4gIH07XG5cbiAgcHJpdmF0ZSBkZXRlY3RDaGFuZ2VzID0gKCkgPT4ge1xuICAgIHRoaXMuZm9ybS5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuXG4gIHByaXZhdGUgX2dldFZhbGlkYXRvcnMgPSAodmFsaWRhdGlvbnM/OiBJQ29udHJvbFZhbGlkYXRpb25bXSkgPT4ge1xuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgICBpZiAoIXZhbGlkYXRpb25zKSByZXR1cm4gdmFsaWRhdG9ycztcbiAgICAvL1N3aXRjaCBjYXNlIGJyZWFrcyB0aGUgbW9iaWxlIGFwcCBzbyB3ZSdsbCBkbyBpZiBzdGF0ZW1lbnRzXG4gICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIHZhbGlkYXRpb25zKSB7XG4gICAgICBpZiAodmFsaWRhdGlvbi52YWxpZGF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godmFsaWRhdGlvbi52YWxpZGF0b3IpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJ1bGUgPSB2YWxpZGF0aW9uLnJ1bGU/LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocnVsZSA9PSAnbWluJykge1xuICAgICAgICB2YWxpZGF0aW9uLmRpc3BsYXkgPSAnQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIHBldGl0ZSAhJztcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKHZhbGlkYXRpb24udmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlID09ICdtYXgnKSB7XG4gICAgICAgIHZhbGlkYXRpb24uZGlzcGxheSA9ICdDZXR0ZSB2YWxldXIgZXN0IHRyb3AgZ3JhbmRlICEnO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgodmFsaWRhdGlvbi52YWx1ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKHJ1bGUgPT0gJ3JlcXVpcmVkJykge1xuICAgICAgICB2YWxpZGF0aW9uLmRpc3BsYXkgPSAnQ2UgY2hhbXBzIGVzdCByZXF1aXMgISc7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChyZXF1aXJlZCgpKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlID09ICdlbWFpbCcpIHtcbiAgICAgICAgdmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSBhZHJlc3NlIGVtYWlsIG4nZXN0IHBhcyB2YWxpZGUgIVwiO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XG4gICAgICB9XG4gICAgICBpZiAocnVsZSA9PSAnbWlubGVuZ3RoJykge1xuICAgICAgICB2YWxpZGF0aW9uLmRpc3BsYXkgPSAnQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIHBldGl0ZSAhJztcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHZhbGlkYXRpb24udmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlID09ICdtYXhsZW5ndGgnKSB7XG4gICAgICAgIHZhbGlkYXRpb24uZGlzcGxheSA9ICdDZXR0ZSB2YWxldXIgZXN0IHRyb3AgZ3JhbmRlICEnO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgodmFsaWRhdGlvbi52YWx1ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKHJ1bGUgPT0gJ3R5cGUnKSB7XG4gICAgICAgIHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIG4nZXN0IHBhcyB2YWxpZGUgIVwiO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godHlwZSh2YWxpZGF0aW9uLnZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpZiAocnVsZSA9PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgdmFsaWRhdGlvbi5kaXNwbGF5ID0gYExlIG5vbWJyZSBkZSBkw6ljaW1hbCBuJ2VzdCBwYXMgdmFsaWRlIChtYXg6ICR7dmFsaWRhdGlvbi52YWx1ZX0pICFgO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goZGVjaW1hbCh2YWxpZGF0aW9uLnZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpZiAocnVsZSA9PSAnbWF4ZGF0ZScpIHtcbiAgICAgICAgdmFsaWRhdGlvbi5kaXNwbGF5ID0gYENldHRlIGRhdGUgZXN0IHRyb3AgZ3JhbmRlICEgKG1heDogJHt2YWxpZGF0aW9uLnZhbHVlfSkgIWA7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChtYXhEYXRlKHZhbGlkYXRpb24udmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gIH07XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBtaW4taC01LzYgbXQtMlwiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAqbmdJZj1cImluaXRpYWxpemVkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJEaXNwbGF5IHx8ICFzZWN0aW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpbmdsZVRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbHM6IGNvbnRyb2xzfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFiRGlzcGxheSAmJiBzZWN0aW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlY3Rpb25UZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlY3Rpb25zOiBzZWN0aW9uc31cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiRGlzcGxheSAmJiBzZWN0aW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYnNUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlY3RzOiBzZWN0aW9uc31cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9mb3JtPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdGFic1RlbXBsYXRlIGxldC1zZWN0aW9ucz0nc2VjdHMnPlxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPG1hdC10YWItZ3JvdXA+XG4gICAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zOyB0cmFjayBzZWN0aW9uOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgIDxtYXQtdGFiIFtsYWJlbF09XCJzZWN0aW9uLnRpdGxlIHx8ICfDiXRhcGUgJyArIChpbmRleCArIDEpXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpbml0aWFsaXplZFwiIGNsYXNzPVwibXQtNFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29tcGFjdCA/ICdncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtNCc6J2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy0yJ1wiPlxuICAgICAgICAgIEBmb3IgKGN0cmwgb2Ygc2VjdGlvbi5jb250cm9sczsgdHJhY2sgaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0XG4gICAgICAgICAgbGFzdCA9XG4gICAgICAgICAgJGxhc3QpXG4gICAgICAgICAge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbDogY3RybCwgaW5kZXg6IGluZGV4LCBsYXN0OiAkbGFzdH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtdGFiPlxuICAgICAgfVxuICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgPC9maWVsZHNldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVGVtcGxhdGUgbGV0LWNvbnRyb2xzPVwiY29udHJvbHNcIj5cbiAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxkaXYgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgICBbbmdDbGFzc109XCJjb21wYWN0ID8gJ2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy00JzonZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTInXCI+XG4gICAgICBAZm9yIChjb250cm9sIG9mIGNvbnRyb2xzOyB0cmFjayBjb250cm9sOyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sOiBjb250cm9sLCBpbmRleDogaW5kZXgsIGxhc3Q6IGxhc3R9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICA8L2ZpZWxkc2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWN0aW9uVGVtcGxhdGUgbGV0LXNlY3Rpb25zPSdzZWN0aW9ucyc+XG4gIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zOyB0cmFjayBzZWN0aW9uOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICA8ZGl2PlxuICAgICAgQGlmIChzZWN0aW9uLnRpdGxlKSB7XG4gICAgICA8aDIgY2xhc3M9XCJtYi0yIGZvbnQtYm9sZCB0ZXh0LXhsIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlXCI+XG4gICAgICAgIHt7IHNlY3Rpb24udGl0bGUgfX1cbiAgICAgIDwvaDI+XG4gICAgICB9XG4gICAgICA8ZGl2ICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIlxuICAgICAgICBbbmdDbGFzc109XCJjb21wYWN0ID8gJ2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy00JzonZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTInXCI+XG4gICAgICAgIEBmb3IgKGNvbnRyb2wgb2Ygc2VjdGlvbi5jb250cm9sczsgdHJhY2sgaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0XG4gICAgICAgIGxhc3QgPVxuICAgICAgICAkbGFzdClcbiAgICAgICAge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sOiBjb250cm9sLCBpbmRleDogaW5kZXgsIGxhc3Q6ICRsYXN0fVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGluZGV4ICE9IChzZWN0aW9uc3x8W10pLmxlbmd0aCAtIDEgJiYgIWNvbXBhY3QpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJweS00XCI+XG4gICAgICAgIDxociBjbGFzcz1cIlwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZmllbGRzZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZSBsZXQtY29udHJvbD0nY29udHJvbCcgbGV0LWxhc3Q9J2xhc3QnIGxldC1pbmRleD0naW5kZXgnPlxuICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgaC1taW4gbXQtMlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIFtuZ0NsYXNzXT1cIntcbiAgICAnc206Y29sLXNwYW4tMic6IChjb250cm9sLndpZHRoID09ICdyb3cnICYmICFjb21wYWN0KSB8fCBjb250cm9sLnR5cGU9PSd0ZXh0QXJlYScgJiYgY29tcGFjdCAmJiBjb250cm9sLndpZHRoICE9ICdyb3cnLFxuICAgICdzbTpjb2wtc3Bhbi00JzogY29udHJvbC53aWR0aCA9PSdyb3cnICYmIGNvbXBhY3QsXG4gICAgfVwiPlxuICAgIEBpZiAoY29udHJvbC50eXBlPT0nc2VhcmNoU2VsZWN0Jykge1xuICAgIDxkaXYgYXBwLWNoci1zZWFyY2gtc2VsZWN0IGNsYXNzPVwicmVsYXRpdmUgaW5wdXQgei0wIHctZnVsbFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCJcbiAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICBbZGF0YV09XCJjb250cm9sLmRhdGEgfHwgW11cIiBbZGlzcGxheV09XCJjb250cm9sLmZuIVwiIFtuYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICBbZmlsdGVyc109XCJjb250cm9sLmZpbHRlcnNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBhYnNvbHV0ZSB0ZXh0LXNtIHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwXCI+e3tcbiAgICAgICAgY29udHJvbC5sYWJlbFxuICAgICAgICB9fVxuICAgICAgICBAaWYgKGlzQ29udHJvbFJlcXVpcmVkKGNvbnRyb2wpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICA6XG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgY29udHJvbC52YWxpZGF0aW9uczsgdHJhY2sgdmFsaWRhdGlvbikge1xuICAgICAgICBAaWYgKFxuICAgICAgICBnZXQoY29udHJvbCk/LnRvdWNoZWQgJiZcbiAgICAgICAgaGFzRXJyb3IoY29udHJvbCwgdmFsaWRhdGlvbikgJiYgc2hvdWxkU2hvd0Vycm9yKGNvbnRyb2wsIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZGFyazp0ZXh0LXJlZC04MDBcIj57eyB2YWxpZGF0aW9uLmRpc3BsYXkgfX08L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGNvbnRyb2wudHlwZT09J3RhZ1NlbGVjdCcpIHtcbiAgICA8ZGl2IGFwcC1jaHItdGFnLXNlbGVjdCBjbGFzcz1cInJlbGF0aXZlIGlucHV0IHotMCB3LWZ1bGxcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiXG4gICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgW2RhdGFdPVwiY29udHJvbC5kYXRhIHx8IFtdXCIgW2Rpc3BsYXldPVwiY29udHJvbC5mbiFcIiBbbmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIlxuICAgICAgW2ZpbHRlcnNdPVwiY29udHJvbC5maWx0ZXJzXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgYWJzb2x1dGUgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMFwiPnt7XG4gICAgICAgIGNvbnRyb2wubGFiZWxcbiAgICAgICAgfX1cbiAgICAgICAgQGlmIChpc0NvbnRyb2xSZXF1aXJlZChjb250cm9sKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgOlxuICAgICAgICBAZm9yICh2YWxpZGF0aW9uIG9mIGNvbnRyb2wudmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24pIHtcbiAgICAgICAgQGlmIChcbiAgICAgICAgZ2V0KGNvbnRyb2wpPy50b3VjaGVkICYmXG4gICAgICAgIGhhc0Vycm9yKGNvbnRyb2wsIHZhbGlkYXRpb24pICYmIHNob3VsZFNob3dFcnJvcihjb250cm9sLCB2YWxpZGF0aW9uKSkge1xuICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwidGV4dC1yZWQtNTAwIGRhcms6dGV4dC1yZWQtODAwXCI+e3sgdmFsaWRhdGlvbi5kaXNwbGF5IH19PC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHotMCB3LWZ1bGwgZ3JvdXAvaW5wdXRzIGNvbnRlbnRcIj5cbiAgICAgIDwhLS0gSGVyZSB3ZSB3aWxsICpuZ0lmIGVhY2ggdHlwZSBvZiBpbnB1dCBjYXVzZSBpdCdzIHRoZSBjbGVhbmVzdCB3YXkgSSBjYW4gaW1hZ2luZS0tPlxuICAgICAgPCEtLVRFWFQtLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICd0ZXh0Jykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwidGV4dFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIgXCIgW3ZhbHVlXT1cIm1vZGVsPy5bY29udHJvbC5uYW1lXSB8fCBjb250cm9sLnZhbHVlIHx8ICcnXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIuNSBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1QQVNTV09SRC0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3Bhc3N3b3JkJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwicGFzc3dvcmRcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yLjUgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tVEVYVCBBUkVBLS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAndGV4dEFyZWEnKSB7XG4gICAgICA8dGV4dGFyZWEgI3RleHRBcmVhIGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICAgIChpbnB1dCk9XCJyZXNpemUodGV4dEFyZWEpXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cIm5vLXNjcm9sbGJhciBpbnB1dCAhcmVzaXplLW5vbmUgaGVpZ2h0LW5vcm1hbGl6ZWQgYmxvY2sgcHktMiBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCI+PC90ZXh0YXJlYT5cbiAgICAgIH1cbiAgICAgIDwhLS1OVU1CRVItLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdudW1iZXInKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBwbGFjZWhvbGRlcj1cIiBcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yLjUgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tREFURS0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ2RhdGUnKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJkYXRlXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMiBweC0wIHctZnVsbCBoZWlnaHQtbm9ybWFsaXplZCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdkYXRldGltZScpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMiBweC0wIHctZnVsbCBoZWlnaHQtbm9ybWFsaXplZCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1DT0xPUi0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ2NvbG9yJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwiY29sb3JcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCIgc3R5bGU9XCJoZWlnaHQ6IDQycHg7XCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0xLjUgbS0wIHB4LTAgdy1mdWxsIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3RvZ2dsZScpe1xuICAgICAgPGlucHV0ICN0b2dnbGUgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJoaWRkZW4gY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiIC8+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicmVsYXRpdmUgdG9nZ2xlLXdyYXBwZXIgYmxvY2sgaW5wdXQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBib3JkZXItZ3JheS0zMDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIj5cbiAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlPy5jbGljaygpXCIgY2xhc3M9XCJyZWxhdGl2ZSBibG9jayBpbnB1dCB0b2dnbGVcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdmaWxlJyl7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMCBmbGV4IGZsZXgtcm93IGp1c3RpZnktY2VudGVyIGNvbnRlbnQtY2VudGVyIGl0ZW1zLWNlbnRlciBhbGlnbi1taWRkbGUgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHJvdW5kZWQtZnVsbCBcIiAoY2xpY2spPVwiZmlucHV0LmNsaWNrKClcIj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNDAwIGJvcmRlci1sLTIgYm9yZGVyLWItMCBib3JkZXItdC0wIFxuICAgIGJvcmRlci1yLTAgdy1maXQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS00MDAgcHgtMSB0ZXh0LWNlbnRlciBvcGFjaXR5LTEwMCBiZy1zbGF0ZS0xMDAgZGFyazpiZy1zbGF0ZS03MDAgYmctb3BhY2l0eS01MCBmbGV4IGp1c3RpZnktY2VudGVyIFxuICAgIGFsaWduLW1pZGRsZSBpdGVtcy1jZW50ZXJcIj57e2dldFRvQWNjZXB0KGNvbnRyb2wpfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIiB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiaGlkZGVuXCIgI2ZpbnB1dCBbYWNjZXB0XT1cImFjY2VwdFRvU3RyaW5nKGNvbnRyb2wpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudCwgY29udHJvbClcIiAvPlxuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA0MnB4O1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcG9pbnRlci1ldmVudHMtbm9uZSBweS0xLjUgbS0wIHB4LTAgdy1mdWxsIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHMgZmlsZTpoaWRkZW5cIiAvPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLnR5cGUgIT0gJ3NlYXJjaFNlbGVjdCcgJiYgY29udHJvbC50eXBlICE9ICd0YWdTZWxlY3QnKSB7XG4gICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBhYnNvbHV0ZSB0ZXh0LXNtIHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwXCI+e3tcbiAgICAgICAgY29udHJvbC5sYWJlbFxuICAgICAgICB9fVxuICAgICAgICBAaWYoY29udHJvbC5sYWJlbCAmJiBjb250cm9sLmxhYmVsICE9ICcnICYmIGNvbnRyb2wubGFiZWwgIT0gJyAnKXtcbiAgICAgICAgQGlmIChpc0NvbnRyb2xSZXF1aXJlZChjb250cm9sKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgOlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgY29udHJvbC52YWxpZGF0aW9uczsgdHJhY2sgdmFsaWRhdGlvbikge1xuICAgICAgICBAaWYgKFxuICAgICAgICBnZXQoY29udHJvbCk/LnRvdWNoZWQgJiZcbiAgICAgICAgaGFzRXJyb3IoY29udHJvbCwgdmFsaWRhdGlvbikgJiYgc2hvdWxkU2hvd0Vycm9yKGNvbnRyb2wsIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZGFyazp0ZXh0LXJlZC04MDBcIj57eyB2YWxpZGF0aW9uLmRpc3BsYXkgfX08L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2xhYmVsPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLmljb24gJiYgIWRpc2FibGVkKSB7XG4gICAgICA8c3BhblxuICAgICAgICBbbmdDbGFzc109XCJjb250cm9sLmljb25DYWxsYmFja0Rpc2FibGVkID8gJ3RleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNTAwJzondGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUnXCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBwLTIuNSBib3R0b20tMCByaWdodC0wXCIgW21hdFRvb2x0aXBdPVwiY29udHJvbC5pY29uVG9vbHRpcCB8fCAnJ1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgKGNsaWNrKT1cIiFjb250cm9sLmljb25DYWxsYmFja0Rpc2FibGVkICYmIGNvbnRyb2wuaWNvbkNhbGxiYWNrPy4oZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy52YWx1ZSlcIj48bWF0LWljb25cbiAgICAgICAgICBjbGFzcz1cImZsZXggaW5wdXQganVzdGlmeS1jZW50ZXIgYWxpZ24tbWlkZGxlIGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciB0ZXh0LWxnXCI+e3tjb250cm9sLmljb259fTwvbWF0LWljb24+PC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoY29udHJvbC5zcGFuKSB7XG4gICAgPHNwYW5cbiAgICAgIFtuZ0NsYXNzXT1cIiFmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycyB8fCAhZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkID8gJ3RleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwJyA6ICchdGV4dC1yZWQtNTAwIGRhcms6IXRleHQtcmVkLTgwMCdcIlxuICAgICAgY2xhc3M9XCJoLTAgdGV4dC14c1wiPnt7IGNvbnRyb2wuc3BhblxuICAgICAgfX08L3NwYW4+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
416
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWZvcm0vY2hyLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsR0FPeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLG1CQUFtQixFQUNuQixXQUFXLEdBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBR0wsVUFBVSxFQUNWLFdBQVcsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBQ1oseUJBQXlCLEdBQzFCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFB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QUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0UsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uSW5pdCxcbiAgRWxlbWVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBWYWxpZGF0b3JGbixcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIEFic3RyYWN0Q29udHJvbCxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbiAgRm9ybUNvbnRyb2wsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEVycm9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBDaHJTZWFyY2hTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9jaHItc2VhcmNoLXNlbGVjdC9jaHItc2VhcmNoLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHtcbiAgRGF0ZVBpcGUsXG4gIENvbW1vbk1vZHVsZSxcbiAgREFURV9QSVBFX0RFRkFVTFRfT1BUSU9OUyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBUeXBlVmFsaWRhdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vbW9kZWxzL2Noci12YWxpZGF0b3JzL3R5cGUtdmFsaWRhdG9yJztcbmltcG9ydCB7IGRlY2ltYWwgfSBmcm9tICcuLi9tb2RlbHMvY2hyLXZhbGlkYXRvcnMvZGVjaW1hbC12YWxpZGF0b3InO1xuaW1wb3J0IHsgbWF4RGF0ZSB9IGZyb20gJy4uL21vZGVscy9jaHItdmFsaWRhdG9ycy9tYXgtZGF0ZS12YWxpZGF0b3InO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgcmVxdWlyZWQgfSBmcm9tICcuLi9tb2RlbHMvY2hyLXZhbGlkYXRvcnMvcmVxdWlyZWQtdmFsaWRhdG9yJztcbmltcG9ydCB7IENoclRhZ1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Noci10YWctc2VsZWN0L2Noci10YWctc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vbW9kZWxzL2Noci12YWxpZGF0b3JzL3R5cGUtdmFsaWRhdG9yJztcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZXMuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1Db250cm9sQ29sbGVjdGlvbiB7XG4gIFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZWFyY2hGaWx0ZXIge1xuICBkaXNwbGF5OiBzdHJpbmc7XG4gIGNhbGxiYWNrPzogRnVuY3Rpb247XG4gIHRvb2x0aXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRyb2xWYWxpZGF0aW9uIHtcbiAgcnVsZTogc3RyaW5nO1xuICB2YWxpZGF0b3I/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcbiAga2V5Pzogc3RyaW5nO1xuICB2YWx1ZT86IGFueTtcbiAgZGlzcGxheT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29udHJvbCB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNwYW4/OiBzdHJpbmc7XG4gIHdpZHRoPzogJ2NvbCcgfCAncm93JztcbiAgY29sPzogbnVtYmVyO1xuICByb3c/OiBudW1iZXI7XG4gIHR5cGU6XG4gICAgfCAndGV4dCdcbiAgICB8ICdwYXNzd29yZCdcbiAgICB8ICd0ZXh0QXJlYSdcbiAgICB8ICdudW1iZXInXG4gICAgfCAnZGF0ZSdcbiAgICB8ICdkYXRldGltZSdcbiAgICB8ICdzZWFyY2hTZWxlY3QnXG4gICAgfCAndGFnU2VsZWN0J1xuICAgIHwgJ2NvbG9yJ1xuICAgIHwgJ3RvZ2dsZSdcbiAgICB8ICdmaWxlJztcbiAgYWNjZXB0Pzogc3RyaW5nW107XG4gIHZhbHVlPzogYW55O1xuICBkYXRhPzogYW55W10gfCBudWxsO1xuICBpY29uPzogc3RyaW5nO1xuICBpY29uQ2FsbGJhY2s/OiBGdW5jdGlvbjtcbiAgaWNvbkNhbGxiYWNrRGlzYWJsZWQ/OiBib29sZWFuO1xuICBpY29uVG9vbHRpcD86IHN0cmluZztcbiAgZm4/OiAob2JqZWN0OiBhbnkpID0+IHN0cmluZztcbiAgZmlsdGVycz86IElTZWFyY2hGaWx0ZXJbXTtcbiAgdmFsaWRhdGlvbnM/OiBJQ29udHJvbFZhbGlkYXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRm9ybVNlY3Rpb24ge1xuICB0aXRsZT86IHN0cmluZztcbiAgY29udHJvbHM6IElDb250cm9sW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1Db250cm9sIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNoci1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Noci1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vY2hyLWZvcm0uY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi8uLi8uLi8uLi8uLi90YWlsd2luZGJ1aWxkLmNzcycsXG4gICAgJy4vY2hyLWZvcm0uY29tcG9uZW50LnNjc3MnLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXG4gICAgTWF0RXJyb3IsXG4gICAgQ2hyU2VhcmNoU2VsZWN0Q29tcG9uZW50LFxuICAgIENoclRhZ1NlbGVjdENvbXBvbmVudCxcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgRGF0ZVBpcGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFR5cGVWYWxpZGF0b3JEaXJlY3RpdmUsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRGF0ZVBpcGUsXG4gICAge1xuICAgICAgcHJvdmlkZTogREFURV9QSVBFX0RFRkFVTFRfT1BUSU9OUyxcbiAgICAgIHVzZVZhbHVlOiB7IGRhdGVGb3JtYXQ6ICdzaG9ydERhdGUnIH0sXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxufSlcbmV4cG9ydCBjbGFzcyBDaHJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgc2VjdGlvbnM/OiBJRm9ybVNlY3Rpb25bXTtcbiAgQElucHV0KCkgY29udHJvbHM/OiBJQ29udHJvbFtdO1xuXG4gIEBJbnB1dCgpIHZhbGlkPzogYm9vbGVhbjtcbiAgQE91dHB1dCgpIHZhbGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQElucHV0KCkgbW9kZWw6IGFueSA9IG51bGw7XG4gIEBPdXRwdXQoKSBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW47XG4gIEBPdXRwdXQoKSB2YWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgpIHN1Ym1pdD86IEZ1bmN0aW9uO1xuXG4gIEBJbnB1dCgpIGNvbXBhY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgZm9ybUNoYW5nZTogRXZlbnRFbWl0dGVyPElGb3JtQ29udHJvbD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8SUZvcm1Db250cm9sPigpO1xuXG4gIEBJbnB1dCgpIHRhYkRpc3BsYXk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL0BJbnB1dCgpIGluY29tcGxlU3VibWlzc2lvbkNhbGxiYWNrOiAoKCkgPT4gYW55ICl8IG51bGwgPSBudWxsO1xuXG4gIGZvcm06IEZvcm1Hcm91cCA9IHRoaXMuYnVpbGRlci5ncm91cCh7fSk7XG5cbiAgcHJpdmF0ZSB2YWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHJpdmF0ZSBjb250cm9sVHlwZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgcHJpdmF0ZSBmbGF0dGVuZWRDb250cm9sczogSUNvbnRyb2xbXSA9IFtdO1xuICBwcml2YXRlIF9lcnJvcnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgcHVibGljIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBidWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2VcbiAgKSB7XG4gICAgaWYgKHRoaXMuY29udHJvbHMgIT0gbnVsbCAmJiB0aGlzLnNlY3Rpb25zICE9IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiWW91IGNhbid0IHVzZSBib3RoIGNvbnRyb2xzIGFuZCBzZWN0aW9ucyBpbiB0aGUgc2FtZSBmb3JtXCJcbiAgICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZsYXR0ZW5lZENvbnRyb2xzID1cbiAgICAgIHRoaXMuc2VjdGlvbnNcbiAgICAgICAgPy5tYXAoKHMpID0+IHMuY29udHJvbHMpXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLmNvbmNhdCh0aGlzLmNvbnRyb2xzID8/IFtdKSB8fCBbXTtcbiAgICB0aGlzLmluaXRNb2RlbCgpO1xuICAgIHRoaXMuaW5pdFZhbHVlcygpO1xuICAgIHRoaXMuaW5pdENvbnRyb2xzKCk7XG4gICAgdGhpcy5pbml0TGlzdGVuZXJzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICB2YWxpZGF0ZVNlYXJjaFNlbGVjdFZhbGlkdHkgPSAodmFsaWQ6IGJvb2xlYW4pID0+IHtcbiAgICAvL3RoaXMudmFsaWQgPSB2YWxpZCAmJiB0aGlzLmZvcm0udmFsaWQ7XG4gICAgLy90aGlzLnZhbGlkQ2hhbmdlLmVtaXQodGhpcy52YWxpZCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBpbml0TW9kZWwgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMubW9kZWwgPT0gbnVsbCkgdGhpcy5tb2RlbCA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5tb2RlbFtjb250cm9sLm5hbWVdID09PSBudWxsIHx8XG4gICAgICAgIHRoaXMubW9kZWxbY29udHJvbC5uYW1lXSA9PT0gdW5kZWZpbmVkXG4gICAgICApXG4gICAgICAgIHRoaXMubW9kZWxbY29udHJvbC5uYW1lXSA9IGNvbnRyb2wudmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgaW5pdFZhbHVlcyA9ICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5mbGF0dGVuZWRDb250cm9scykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnZhbHVlc1tjb250cm9sLm5hbWVdID09PSBudWxsIHx8XG4gICAgICAgIHRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0gPT09IHVuZGVmaW5lZFxuICAgICAgKVxuICAgICAgICB0aGlzLnZhbHVlc1tjb250cm9sLm5hbWVdID0gdGhpcy50b0lucHV0VmFsdWUoXG4gICAgICAgICAgY29udHJvbCxcbiAgICAgICAgICB0aGlzLm1vZGVsW2NvbnRyb2wubmFtZV1cbiAgICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBpbml0Q29udHJvbHMgPSAoKSA9PiB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge30gYXMgSUZvcm1Db250cm9sQ29sbGVjdGlvbjtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5mbGF0dGVuZWRDb250cm9scykge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuX2dldFZhbGlkYXRvcnMoY29udHJvbC52YWxpZGF0aW9ucyk7XG4gICAgICBmb3JtQ29udHJvbHNbY29udHJvbC5uYW1lXSA9IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgdGhpcy52YWx1ZXNbY29udHJvbC5uYW1lXSxcbiAgICAgICAgdmFsaWRhdG9yc1xuICAgICAgKTtcbiAgICAgIC8vaWYgKGNvbnRyb2wudHlwZSA9PSAnZmlsZScpIGZvcm1Db250cm9sc1tjb250cm9sLm5hbWVdLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuY29udHJvbFR5cGVzW2NvbnRyb2wubmFtZV0gPSBjb250cm9sLnR5cGU7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtID0gdGhpcy5idWlsZGVyLmdyb3VwKGZvcm1Db250cm9scyk7XG4gICAgdGhpcy52YWxpZCA9IHRoaXMuZm9ybS52YWxpZDtcbiAgfTtcblxuICBwcml2YXRlIGluaXRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlcykgPT4ge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKHRoaXMubW9kZWwsIGtleSkgJiYgdGhpcy5jb250cm9sVHlwZXNba2V5XSAhPSAnZmlsZScpXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlVQREFUSU5HIFwiICsga2V5LCB0aGlzLm1vZGVsW2tleV0sIHZhbHVlc1trZXldKTtcbiAgICAgICAgICB0aGlzLm1vZGVsW2tleV0gPSB2YWx1ZXNba2V5XTtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24odGhpcy52YWx1ZXMsIGtleSkpIHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZXNba2V5XTtcbiAgICAgICAgLy8gaWYgKHZhbHVlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIC8vIFx0dGhpcy5tb2RlbFtrZXldID0gdmFsdWVzW2tleV07XG4gICAgICAgIC8vIFx0dGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlc1trZXldO1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgICB0aGlzLnZhbGlkID0gdGhpcy5mb3JtLnZhbGlkO1xuICAgICAgdGhpcy52YWxpZENoYW5nZS5lbWl0KHRoaXMudmFsaWQpO1xuICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29udHJvbCA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAobmFtZSkgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc1tuYW1lXTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBmb2N1cyA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAvL2NvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2wobmFtZSk7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYGlucHV0W25hbWU9XCIke25hbWV9XCJdYFxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLmNvbnRyb2wobmFtZSk/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGVsLmZvY3VzKCk7XG4gICAgfSwgMTApO1xuICB9O1xuXG4gIHZhbHVlID0gKGlucHV0Pzogc3RyaW5nKSA9PiB0aGlzLmdldFZhbHVlKGlucHV0KTtcblxuICBnZXRWYWx1ZSA9IChpbnB1dD86IHN0cmluZykgPT4ge1xuICAgIGlmIChpbnB1dCkgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc1tpbnB1dF0/LnZhbHVlO1xuICAgIHJldHVybiB0aGlzLmZvcm0udmFsdWU7XG4gIH07XG5cbiAgaXNWYWxpZCA9IChpbnB1dD86IHN0cmluZykgPT4ge1xuICAgIGlmIChpbnB1dCkgcmV0dXJuIHRoaXMuZm9ybS5nZXQoaW5wdXQpPy52YWxpZDtcbiAgICByZXR1cm4gdGhpcy52YWxpZDtcbiAgfTtcblxuICBpc0NvbnRyb2xSZXF1aXJlZCA9IChjb250cm9sOiBJQ29udHJvbCkgPT4ge1xuICAgIHJldHVybiBjb250cm9sLnZhbGlkYXRpb25zPy5maW5kKFxuICAgICAgKHYpID0+IHYucnVsZT8udG9Mb3dlckNhc2UoKSA9PSAncmVxdWlyZWQnXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wgV0lUSE9VVCB0cmlnZ2VyaW5nIHRoZSBtb2RlbENoYW5nZSBldmVudFxuICAgKiBAcGFyYW0ga2V5IGlucHV0IGtleSAoY29udHJvbCBuYW1lKVxuICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gc2V0XG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0IG9wdGlvbmFsIGRhdGUgZm9ybWF0IGZvciBkYXRlIGFuZCBkYXRldGltZSBpbnB1dHNcbiAgICovXG4gIHNldFZhbHVlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBkYXRlRm9ybWF0OiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMudHlwZVRvSW5wdXRWYWx1ZSh0aGlzLmNvbnRyb2xUeXBlc1trZXldLCB2YWx1ZSk7XG4gICAgdGhpcy5mb3JtLmdldChrZXkpPy5zZXRWYWx1ZSh2YWwsIHtcbiAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICBlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMubW9kZWxba2V5XSA9IHZhbDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSdzIG1vZGVsIFdJVEhPVVQgdHJpZ2dlcmluZyB0aGUgbW9kZWxDaGFuZ2UgZXZlbnRcbiAgICogQHBhcmFtIG1vZGVsIHRoZSBtb2RlbCB0byBzZXRcbiAgICogQHBhcmFtIGRhdGVGb3JtYXQgb3B0aW9uYWwgZGF0ZSBmb3JtYXQgZm9yIGRhdGUgYW5kIGRhdGV0aW1lIGlucHV0c1xuICAgKi9cbiAgc2V0ID0gKG1vZGVsOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobW9kZWwpKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKGtleSwgbW9kZWxba2V5XSwgZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wuIFRoaXMgV0lMTCB0cmlnZ2VyIHRoZSBtb2RlbENoYW5nZSBldmVudFxuICAgKiBAcGFyYW0ga2V5IGlucHV0IGtleSAoY29udHJvbCBuYW1lKVxuICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gc2V0XG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0IG9wdGlvbmFsIGRhdGUgZm9ybWF0IGZvciBkYXRlIGFuZCBkYXRldGltZSBpbnB1dHNcbiAgICovXG4gIHBhdGNoVmFsdWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGRhdGVGb3JtYXQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuY29udHJvbFR5cGVzW2tleV07XG4gICAgY29uc3QgdmFsID0gdGhpcy50eXBlVG9JbnB1dFZhbHVlKGtleSwgdmFsdWUpO1xuICAgIGlmICh0eXBlID09ICdmaWxlJykge1xuICAgICAgdGhpcy5zZXRWYWx1ZSQoa2V5LCB2YWw/Lm5hbWUpO1xuICAgICAgdGhpcy5zZXRNb2RlbCQoa2V5LCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFZhbHVlJChrZXksIHZhbCk7XG4gICAgICB0aGlzLnNldE1vZGVsJChrZXksIHZhbCk7XG4gICAgfVxuICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdmFsdWUgb2YgdGhlIGZvcm0ncyBtb2RlbC4gVGhpcyBXSUxMIHRyaWdnZXIgdGhlIG1vZGVsQ2hhbmdlIGV2ZW50IG9uY2UgZm9yIGVhY2ggaW5wdXRcbiAgICogQHBhcmFtIG1vZGVsIG1vZGVsIHRvIHNldFxuICAgKiBAcGFyYW0gZGF0ZUZvcm1hdCBvcHRpb25hbCBkYXRlIGZvcm1hdCBmb3IgZGF0ZSBhbmQgZGF0ZXRpbWUgaW5wdXRzXG4gICAqL1xuICBwYXRjaCA9IChtb2RlbDogYW55LCBkYXRlRm9ybWF0OiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1vZGVsKSkge1xuICAgICAgdGhpcy5wYXRjaFZhbHVlKGtleSwgbW9kZWxba2V5XSwgZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9O1xuXG4gIGNoZWNrVmFsaWRpdHkgPSAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuZmxhdHRlbmVkQ29udHJvbHMpIHtcbiAgICAgIHRoaXMuZm9ybS5nZXQoY29udHJvbC5uYW1lKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkID0gdGhpcy5mb3JtLnZhbGlkO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuXG4gIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkgPSAodG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XG4gICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgaWYgKHRvdWNoZWQpIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gIH07XG5cbiAgcmVzZXQgPSAoKSA9PiB7XG4gICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGdldCA9IChjb250cm9sOiBJQ29udHJvbCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgaGFzRXJyb3IgPSAoY29udHJvbDogSUNvbnRyb2wsIHZhbGlkYXRpb246IElDb250cm9sVmFsaWRhdGlvbikgPT4ge1xuICAgIHJldHVybiB0aGlzLmZvcm0uaGFzRXJyb3IodmFsaWRhdGlvbi5ydWxlLCBjb250cm9sLm5hbWUpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXRUb0FjY2VwdCA9IChjb250cm9sOiBJQ29udHJvbCkgPT4ge1xuICAgIHJldHVybiBjb250cm9sLmFjY2VwdD8ubWFwKChzKSA9PiBzLnRvTG9jYWxlVXBwZXJDYXNlKCkpLmpvaW4oJywgJyk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHNob3VsZFNob3dFcnJvciA9IChcbiAgICBjb250cm9sOiBJQ29udHJvbCxcbiAgICB2YWxpZGF0aW9uOiBJQ29udHJvbFZhbGlkYXRpb25cbiAgKSA9PiB7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybS5nZXQoY29udHJvbC5uYW1lKTtcbiAgICBpZiAoY3RybCAmJiBjdHJsLmVycm9ycykge1xuICAgICAgY29uc3QgZmlyc3QgPSBPYmplY3Qua2V5cyhjdHJsLmVycm9ycylbMF07XG4gICAgICByZXR1cm4gZmlyc3QgPT09IHZhbGlkYXRpb24ucnVsZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHByb3RlY3RlZCBmaWxlQ2hhbmdlID0gKGV2ZW50OiBFdmVudCwgY29udHJvbDogSUNvbnRyb2wpID0+IHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtLmdldChjb250cm9sLm5hbWUpO1xuICAgIGN0cmw/Lm1hcmtBc0RpcnR5KCk7XG4gICAgY3RybD8ubWFya0FzVG91Y2hlZCgpO1xuICAgIGNvbnN0IGZpbGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzPy5bMF07XG4gICAgaWYgKGZpbGUgPT09IG51bGwgfHwgZmlsZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHRoaXMucGF0Y2hWYWx1ZShjb250cm9sLm5hbWUsICcnKTtcbiAgICB0aGlzLmZpbGVTZXJ2aWNlLmZpbGVUb0Jhc2U2NChmaWxlISkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIHRoaXMubW9kZWxbY29udHJvbC5uYW1lXSA9IHJlcztcbiAgICAgIHRoaXMudmFsdWVzW2NvbnRyb2wubmFtZV0gPSByZXMubmFtZTtcbiAgICAgIGN0cmw/LnBhdGNoVmFsdWUocmVzLm5hbWUsIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy52YWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlcyk7XG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzZXRWYWx1ZSQgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICB0aGlzLmZvcm0uZ2V0KGtleSk/LnBhdGNoVmFsdWUodmFsdWUpO1xuICAgIHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgfTtcblxuICBwcml2YXRlIHNldE1vZGVsJCA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgIHRoaXMubW9kZWxba2V5XSA9IHZhbHVlO1xuICB9O1xuXG4gIHByaXZhdGUgdG9JbnB1dFZhbHVlID0gKGNvbnRyb2w6IElDb250cm9sLCB2YWx1ZTogYW55IHwgbnVsbCA9IG51bGwpID0+IHtcbiAgICByZXR1cm4gdGhpcy50eXBlVG9JbnB1dFZhbHVlKGNvbnRyb2wudHlwZSwgdmFsdWUsIGNvbnRyb2wudmFsdWUpO1xuICB9O1xuXG4gIHByaXZhdGUgdHlwZVRvSW5wdXRWYWx1ZSA9IChcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSB8IG51bGwgPSBudWxsLFxuICAgIGRlZmF1bHRWYWx1ZTogYW55IHwgbnVsbCA9IG51bGxcbiAgKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgPyB0aGlzLnRyYW5zZm9ybURhdGUoXG4gICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlLFxuICAgICAgICAgICAgICAneXl5eS1NTS1kZCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHRoaXMudHJhbnNmb3JtRGF0ZShkZWZhdWx0VmFsdWUsICd5eXl5LU1NLWRkJyk7XG4gICAgICBjYXNlICdkYXRldGltZSc6XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgID8gdGhpcy50cmFuc2Zvcm1EYXRlKFxuICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZSxcbiAgICAgICAgICAgICAgJ3l5eXktTU0tZGRUSEg6bW0nXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiB0aGlzLnRyYW5zZm9ybURhdGUoZGVmYXVsdFZhbHVlLCAneXl5eS1NTS1kZFRISDptbScpO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihudW1iZXIpID8gMCA6IG51bWJlcjtcbiAgICAgIGNhc2UgJ3NlYXJjaFNlbGVjdCc6XG4gICAgICAgIHJldHVybiB2YWx1ZSE7XG4gICAgICBjYXNlICd0YWdTZWxlY3QnOlxuICAgICAgICByZXR1cm4gdmFsdWUhO1xuICAgICAgY2FzZSAndG9nZ2xlJzpcbiAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09IHRydWUpIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZSEgfHwgZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHRyYW5zZm9ybURhdGUgPSAodmFsdWU6IGFueSwgZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsIGZvcm1hdCk7XG4gIH07XG5cbiAgcHVibGljIHJlc2l6ZSA9ICh0ZXh0QXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxIZWlnaHQgPSB0ZXh0QXJlYS5zdHlsZS5oZWlnaHQ7XG4gICAgdGV4dEFyZWEuc3R5bGUuaGVpZ2h0ID0gaW5pdGlhbEhlaWdodDtcbiAgICB0ZXh0QXJlYS5zdHlsZS5oZWlnaHQgPSAnJyArIHRleHRBcmVhLnNjcm9sbEhlaWdodCArICdweCc7XG4gIH07XG5cbiAgcHVibGljIGRvU3VibWl0ID0gKCkgPT4ge1xuICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgaWYgKHRoaXMudmFsaWQgJiYgdGhpcy5mb3JtLnZhbGlkKSB0aGlzLnN1Ym1pdD8uKHRoaXMuZm9ybS52YWx1ZSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGxvZyA9IChlbDogYW55KSA9PiB7XG4gICAgY29uc29sZS5sb2coZWwpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBhY2NlcHRUb1N0cmluZyA9IChjb250cm9sOiBJQ29udHJvbCkgPT4ge1xuICAgIHJldHVybiBjb250cm9sLmFjY2VwdD8ubWFwKCh0eXBlKSA9PiBgLiR7dHlwZX1gKS5qb2luKCcsICcpIHx8ICcuKic7XG4gIH07XG5cbiAgcHJpdmF0ZSBkZXRlY3RDaGFuZ2VzID0gKCkgPT4ge1xuICAgIHRoaXMuZm9ybS5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuXG4gIHByaXZhdGUgX2dldFZhbGlkYXRvcnMgPSAodmFsaWRhdGlvbnM/OiBJQ29udHJvbFZhbGlkYXRpb25bXSkgPT4ge1xuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgICBpZiAoIXZhbGlkYXRpb25zKSByZXR1cm4gdmFsaWRhdG9ycztcbiAgICAvL1N3aXRjaCBjYXNlIGJyZWFrcyB0aGUgbW9iaWxlIGFwcCBzbyB3ZSdsbCBkbyBpZiBzdGF0ZW1lbnRzXG4gICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIHZhbGlkYXRpb25zKSB7XG4gICAgICBpZiAodmFsaWRhdGlvbi52YWxpZGF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godmFsaWRhdGlvbi52YWxpZGF0b3IpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJ1bGUgPSB2YWxpZGF0aW9uLnJ1bGU/LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocnVsZSA9PSAnbWluJykge1xuICAgICAgICB2YWxpZGF0aW9uLmRpc3BsYXkgPSAnQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIHBldGl0ZSAhJztcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKHZhbGlkYXRpb24udmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlID09ICdtYXgnKSB7XG4gICAgICAgIHZhbGlkYXRpb24uZGlzcGxheSA9ICdDZXR0ZSB2YWxldXIgZXN0IHRyb3AgZ3JhbmRlICEnO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgodmFsaWRhdGlvbi52YWx1ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKHJ1bGUgPT0gJ3JlcXVpcmVkJykge1xuICAgICAgICB2YWxpZGF0aW9uLmRpc3BsYXkgPSAnQ2UgY2hhbXBzIGVzdCByZXF1aXMgISc7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChyZXF1aXJlZCgpKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlID09ICdlbWFpbCcpIHtcbiAgICAgICAgdmFsaWRhdGlvbi5kaXNwbGF5ID0gXCJDZXR0ZSBhZHJlc3NlIGVtYWlsIG4nZXN0IHBhcyB2YWxpZGUgIVwiO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XG4gICAgICB9XG4gICAgICBpZiAocnVsZSA9PSAnbWlubGVuZ3RoJykge1xuICAgICAgICB2YWxpZGF0aW9uLmRpc3BsYXkgPSAnQ2V0dGUgdmFsZXVyIGVzdCB0cm9wIHBldGl0ZSAhJztcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHZhbGlkYXRpb24udmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChydWxlID09ICdtYXhsZW5ndGgnKSB7XG4gICAgICAgIHZhbGlkYXRpb24uZGlzcGxheSA9ICdDZXR0ZSB2YWxldXIgZXN0IHRyb3AgZ3JhbmRlICEnO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgodmFsaWRhdGlvbi52YWx1ZSkpO1xuICAgICAgfVxuICAgICAgaWYgKHJ1bGUgPT0gJ3R5cGUnKSB7XG4gICAgICAgIHZhbGlkYXRpb24uZGlzcGxheSA9IFwiQ2V0dGUgdmFsZXVyIG4nZXN0IHBhcyB2YWxpZGUgIVwiO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godHlwZSh2YWxpZGF0aW9uLnZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpZiAocnVsZSA9PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgdmFsaWRhdGlvbi5kaXNwbGF5ID0gYExlIG5vbWJyZSBkZSBkw6ljaW1hbCBuJ2VzdCBwYXMgdmFsaWRlIChtYXg6ICR7dmFsaWRhdGlvbi52YWx1ZX0pICFgO1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goZGVjaW1hbCh2YWxpZGF0aW9uLnZhbHVlKSk7XG4gICAgICB9XG4gICAgICBpZiAocnVsZSA9PSAnbWF4ZGF0ZScpIHtcbiAgICAgICAgdmFsaWRhdGlvbi5kaXNwbGF5ID0gYENldHRlIGRhdGUgZXN0IHRyb3AgZ3JhbmRlICEgKG1heDogJHt2YWxpZGF0aW9uLnZhbHVlfSkgIWA7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChtYXhEYXRlKHZhbGlkYXRpb24udmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gIH07XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBtaW4taC01LzYgbXQtMlwiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAqbmdJZj1cImluaXRpYWxpemVkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJEaXNwbGF5IHx8ICFzZWN0aW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpbmdsZVRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbHM6IGNvbnRyb2xzfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFiRGlzcGxheSAmJiBzZWN0aW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlY3Rpb25UZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlY3Rpb25zOiBzZWN0aW9uc31cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiRGlzcGxheSAmJiBzZWN0aW9uc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYnNUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3NlY3RzOiBzZWN0aW9uc31cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9mb3JtPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdGFic1RlbXBsYXRlIGxldC1zZWN0aW9ucz0nc2VjdHMnPlxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPG1hdC10YWItZ3JvdXA+XG4gICAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zOyB0cmFjayBzZWN0aW9uOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgIDxtYXQtdGFiIFtsYWJlbF09XCJzZWN0aW9uLnRpdGxlIHx8ICfDiXRhcGUgJyArIChpbmRleCArIDEpXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpbml0aWFsaXplZFwiIGNsYXNzPVwibXQtNFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29tcGFjdCA/ICdncmlkIGdhcC15LTIgZ2FwLXgtNiBzbTpncmlkLWNvbHMtNCc6J2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy0yJ1wiPlxuICAgICAgICAgIEBmb3IgKGN0cmwgb2Ygc2VjdGlvbi5jb250cm9sczsgdHJhY2sgaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0XG4gICAgICAgICAgbGFzdCA9XG4gICAgICAgICAgJGxhc3QpXG4gICAgICAgICAge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y29udHJvbDogY3RybCwgaW5kZXg6IGluZGV4LCBsYXN0OiAkbGFzdH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtdGFiPlxuICAgICAgfVxuICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgPC9maWVsZHNldD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVGVtcGxhdGUgbGV0LWNvbnRyb2xzPVwiY29udHJvbHNcIj5cbiAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxkaXYgKm5nSWY9XCJpbml0aWFsaXplZFwiXG4gICAgICBbbmdDbGFzc109XCJjb21wYWN0ID8gJ2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy00JzonZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTInXCI+XG4gICAgICBAZm9yIChjb250cm9sIG9mIGNvbnRyb2xzOyB0cmFjayBjb250cm9sOyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sOiBjb250cm9sLCBpbmRleDogaW5kZXgsIGxhc3Q6IGxhc3R9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICA8L2ZpZWxkc2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWN0aW9uVGVtcGxhdGUgbGV0LXNlY3Rpb25zPSdzZWN0aW9ucyc+XG4gIDxmaWVsZHNldCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zOyB0cmFjayBzZWN0aW9uOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICA8ZGl2PlxuICAgICAgQGlmIChzZWN0aW9uLnRpdGxlKSB7XG4gICAgICA8aDIgY2xhc3M9XCJtYi0yIGZvbnQtYm9sZCB0ZXh0LXhsIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlXCI+XG4gICAgICAgIHt7IHNlY3Rpb24udGl0bGUgfX1cbiAgICAgIDwvaDI+XG4gICAgICB9XG4gICAgICA8ZGl2ICpuZ0lmPVwiaW5pdGlhbGl6ZWRcIlxuICAgICAgICBbbmdDbGFzc109XCJjb21wYWN0ID8gJ2dyaWQgZ2FwLXktMiBnYXAteC02IHNtOmdyaWQtY29scy00JzonZ3JpZCBnYXAteS0yIGdhcC14LTYgc206Z3JpZC1jb2xzLTInXCI+XG4gICAgICAgIEBmb3IgKGNvbnRyb2wgb2Ygc2VjdGlvbi5jb250cm9sczsgdHJhY2sgaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0XG4gICAgICAgIGxhc3QgPVxuICAgICAgICAkbGFzdClcbiAgICAgICAge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjb250cm9sOiBjb250cm9sLCBpbmRleDogaW5kZXgsIGxhc3Q6ICRsYXN0fVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGluZGV4ICE9IChzZWN0aW9uc3x8W10pLmxlbmd0aCAtIDEgJiYgIWNvbXBhY3QpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJweS00XCI+XG4gICAgICAgIDxociBjbGFzcz1cIlwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZmllbGRzZXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZSBsZXQtY29udHJvbD0nY29udHJvbCcgbGV0LWxhc3Q9J2xhc3QnIGxldC1pbmRleD0naW5kZXgnPlxuICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgaC1taW4gbXQtMlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIFtuZ0NsYXNzXT1cIntcbiAgICAnc206Y29sLXNwYW4tMic6IChjb250cm9sLndpZHRoID09ICdyb3cnICYmICFjb21wYWN0KSB8fCBjb250cm9sLnR5cGU9PSd0ZXh0QXJlYScgJiYgY29tcGFjdCAmJiBjb250cm9sLndpZHRoICE9ICdyb3cnLFxuICAgICdzbTpjb2wtc3Bhbi00JzogY29udHJvbC53aWR0aCA9PSdyb3cnICYmIGNvbXBhY3QsXG4gICAgfVwiPlxuICAgIEBpZiAoY29udHJvbC50eXBlPT0nc2VhcmNoU2VsZWN0Jykge1xuICAgIDxkaXYgYXBwLWNoci1zZWFyY2gtc2VsZWN0IGNsYXNzPVwicmVsYXRpdmUgaW5wdXQgei0wIHctZnVsbFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCJcbiAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICBbZGF0YV09XCJjb250cm9sLmRhdGEgfHwgW11cIiBbZGlzcGxheV09XCJjb250cm9sLmZuIVwiIFtuYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICBbZmlsdGVyc109XCJjb250cm9sLmZpbHRlcnNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBhYnNvbHV0ZSB0ZXh0LXNtIHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwXCI+e3tcbiAgICAgICAgY29udHJvbC5sYWJlbFxuICAgICAgICB9fVxuICAgICAgICBAaWYgKGlzQ29udHJvbFJlcXVpcmVkKGNvbnRyb2wpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgICA6XG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgY29udHJvbC52YWxpZGF0aW9uczsgdHJhY2sgdmFsaWRhdGlvbikge1xuICAgICAgICBAaWYgKFxuICAgICAgICBnZXQoY29udHJvbCk/LnRvdWNoZWQgJiZcbiAgICAgICAgaGFzRXJyb3IoY29udHJvbCwgdmFsaWRhdGlvbikgJiYgc2hvdWxkU2hvd0Vycm9yKGNvbnRyb2wsIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZGFyazp0ZXh0LXJlZC04MDBcIj57eyB2YWxpZGF0aW9uLmRpc3BsYXkgfX08L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGNvbnRyb2wudHlwZT09J3RhZ1NlbGVjdCcpIHtcbiAgICA8ZGl2IGFwcC1jaHItdGFnLXNlbGVjdCBjbGFzcz1cInJlbGF0aXZlIGlucHV0IHotMCB3LWZ1bGxcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiXG4gICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgW2RhdGFdPVwiY29udHJvbC5kYXRhIHx8IFtdXCIgW2Rpc3BsYXldPVwiY29udHJvbC5mbiFcIiBbbmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIlxuICAgICAgW2ZpbHRlcnNdPVwiY29udHJvbC5maWx0ZXJzXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgYWJzb2x1dGUgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIGRhcms6dGV4dC1ncmF5LTQwMFwiPnt7XG4gICAgICAgIGNvbnRyb2wubGFiZWxcbiAgICAgICAgfX1cbiAgICAgICAgQGlmIChpc0NvbnRyb2xSZXF1aXJlZChjb250cm9sKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgOlxuICAgICAgICBAZm9yICh2YWxpZGF0aW9uIG9mIGNvbnRyb2wudmFsaWRhdGlvbnM7IHRyYWNrIHZhbGlkYXRpb24pIHtcbiAgICAgICAgQGlmIChcbiAgICAgICAgZ2V0KGNvbnRyb2wpPy50b3VjaGVkICYmXG4gICAgICAgIGhhc0Vycm9yKGNvbnRyb2wsIHZhbGlkYXRpb24pICYmIHNob3VsZFNob3dFcnJvcihjb250cm9sLCB2YWxpZGF0aW9uKSkge1xuICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwidGV4dC1yZWQtNTAwIGRhcms6dGV4dC1yZWQtODAwXCI+e3sgdmFsaWRhdGlvbi5kaXNwbGF5IH19PC9tYXQtZXJyb3I+XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHotMCB3LWZ1bGwgZ3JvdXAvaW5wdXRzIGNvbnRlbnRcIj5cbiAgICAgIDwhLS0gSGVyZSB3ZSB3aWxsICpuZ0lmIGVhY2ggdHlwZSBvZiBpbnB1dCBjYXVzZSBpdCdzIHRoZSBjbGVhbmVzdCB3YXkgSSBjYW4gaW1hZ2luZS0tPlxuICAgICAgPCEtLVRFWFQtLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICd0ZXh0Jykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwidGV4dFwiIGlkPVwie3sgY29udHJvbC5uYW1lIH19X3t7IGluZGV4IH19XCIgbmFtZT1cInt7IGNvbnRyb2wubmFtZSB9fVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbC5uYW1lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCIgXCIgW3ZhbHVlXT1cIm1vZGVsPy5bY29udHJvbC5uYW1lXSB8fCBjb250cm9sLnZhbHVlIHx8ICcnXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cImJsb2NrIGlucHV0IHB5LTIuNSBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1QQVNTV09SRC0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3Bhc3N3b3JkJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwicGFzc3dvcmRcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yLjUgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tVEVYVCBBUkVBLS0+XG4gICAgICBAaWYgKGNvbnRyb2wudHlwZSA9PSAndGV4dEFyZWEnKSB7XG4gICAgICA8dGV4dGFyZWEgI3RleHRBcmVhIGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICAgIChpbnB1dCk9XCJyZXNpemUodGV4dEFyZWEpXCIgKGtleXVwLmVudGVyKT1cImxhc3QgPyBkb1N1Ym1pdCgpIDogJydcIlxuICAgICAgICBjbGFzcz1cIm5vLXNjcm9sbGJhciBpbnB1dCAhcmVzaXplLW5vbmUgaGVpZ2h0LW5vcm1hbGl6ZWQgYmxvY2sgcHktMiBweC0wIHctZnVsbCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCI+PC90ZXh0YXJlYT5cbiAgICAgIH1cbiAgICAgIDwhLS1OVU1CRVItLT5cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdudW1iZXInKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBwbGFjZWhvbGRlcj1cIiBcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0yLjUgcHgtMCB3LWZ1bGwgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBiZy10cmFuc3BhcmVudCBib3JkZXItMCBib3JkZXItYi0yIGFwcGVhcmFuY2Utbm9uZSBkYXJrOmJvcmRlci1ncmF5LTYwMCBkYXJrOmZvY3VzOmJvcmRlci1jaHJsYmx1ZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0wIGZvY3VzOmJvcmRlci1jaHJkYmx1ZSBwZWVyL2lucHV0c1wiIC8+XG4gICAgICB9XG4gICAgICA8IS0tREFURS0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ2RhdGUnKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIihmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy5lcnJvcnMpID8gJ2Vycm9yJzonYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNjAwJ1wiXG4gICAgICAgIHR5cGU9XCJkYXRlXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMiBweC0wIHctZnVsbCBoZWlnaHQtbm9ybWFsaXplZCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdkYXRldGltZScpIHtcbiAgICAgIDxpbnB1dCBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiKGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8udG91Y2hlZCAmJiBmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycykgPyAnZXJyb3InOidib3JkZXItZ3JheS0zMDAgZGFyazpib3JkZXItZ3JheS02MDAnXCJcbiAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgaWQ9XCJ7eyBjb250cm9sLm5hbWUgfX1fe3sgaW5kZXggfX1cIiBuYW1lPVwie3sgY29udHJvbC5uYW1lIH19XCJcbiAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sLm5hbWVcIiBwbGFjZWhvbGRlcj1cIiBcIiAoa2V5dXAuZW50ZXIpPVwibGFzdCA/IGRvU3VibWl0KCkgOiAnJ1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcHktMiBweC0wIHctZnVsbCBoZWlnaHQtbm9ybWFsaXplZCB0ZXh0LXNtIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgYXBwZWFyYW5jZS1ub25lIGRhcms6Ym9yZGVyLWdyYXktNjAwIGRhcms6Zm9jdXM6Ym9yZGVyLWNocmxibHVlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTAgZm9jdXM6Ym9yZGVyLWNocmRibHVlIHBlZXIvaW5wdXRzXCIgLz5cbiAgICAgIH1cbiAgICAgIDwhLS1DT0xPUi0tPlxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ2NvbG9yJykge1xuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICB0eXBlPVwiY29sb3JcIiBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiIFwiIChrZXl1cC5lbnRlcik9XCJsYXN0ID8gZG9TdWJtaXQoKSA6ICcnXCIgc3R5bGU9XCJoZWlnaHQ6IDQycHg7XCJcbiAgICAgICAgY2xhc3M9XCJibG9jayBpbnB1dCBweS0xLjUgbS0wIHB4LTAgdy1mdWxsIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIiAvPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLnR5cGUgPT0gJ3RvZ2dsZScpe1xuICAgICAgPGlucHV0ICN0b2dnbGUgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJoaWRkZW4gY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiIC8+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicmVsYXRpdmUgdG9nZ2xlLXdyYXBwZXIgYmxvY2sgaW5wdXQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLTAgYm9yZGVyLWItMiBib3JkZXItZ3JheS0zMDAgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHNcIj5cbiAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlPy5jbGljaygpXCIgY2xhc3M9XCJyZWxhdGl2ZSBibG9jayBpbnB1dCB0b2dnbGVcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoY29udHJvbC50eXBlID09ICdmaWxlJyl7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMCBmbGV4IGZsZXgtcm93IGp1c3RpZnktY2VudGVyIGNvbnRlbnQtY2VudGVyIGl0ZW1zLWNlbnRlciBhbGlnbi1taWRkbGUgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHJvdW5kZWQtZnVsbCBcIiAoY2xpY2spPVwiZmlucHV0LmNsaWNrKClcIj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWdyYXktMzAwIGRhcms6Ym9yZGVyLWdyYXktNDAwIGJvcmRlci1sLTIgYm9yZGVyLWItMCBib3JkZXItdC0wIFxuICAgIGJvcmRlci1yLTAgdy1maXQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS00MDAgcHgtMSB0ZXh0LWNlbnRlciBvcGFjaXR5LTEwMCBiZy1zbGF0ZS0xMDAgZGFyazpiZy1zbGF0ZS03MDAgYmctb3BhY2l0eS01MCBmbGV4IGp1c3RpZnktY2VudGVyIFxuICAgIGFsaWduLW1pZGRsZSBpdGVtcy1jZW50ZXJcIj57e2dldFRvQWNjZXB0KGNvbnRyb2wpfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIiB0eXBlPVwiZmlsZVwiIGNsYXNzPVwiaGlkZGVuXCIgI2ZpbnB1dCBbYWNjZXB0XT1cImFjY2VwdFRvU3RyaW5nKGNvbnRyb2wpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudCwgY29udHJvbClcIiAvPlxuICAgICAgPGlucHV0IGNsYXNzPVwicmVsYXRpdmVcIlxuICAgICAgICBbbmdDbGFzc109XCIoZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkICYmIGZvcm0uZ2V0KFtjb250cm9sLm5hbWVdKT8uZXJyb3JzKSA/ICdlcnJvcic6J2JvcmRlci1ncmF5LTMwMCBkYXJrOmJvcmRlci1ncmF5LTYwMCdcIlxuICAgICAgICBpZD1cInt7IGNvbnRyb2wubmFtZSB9fV97eyBpbmRleCB9fVwiIG5hbWU9XCJ7eyBjb250cm9sLm5hbWUgfX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbnRyb2wubmFtZVwiIHBsYWNlaG9sZGVyPVwiIFwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA0MnB4O1wiXG4gICAgICAgIGNsYXNzPVwiYmxvY2sgaW5wdXQgcG9pbnRlci1ldmVudHMtbm9uZSBweS0xLjUgbS0wIHB4LTAgdy1mdWxsIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJvcmRlci1iLTIgZGFyazpmb2N1czpib3JkZXItY2hybGJsdWUgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMCBmb2N1czpib3JkZXItY2hyZGJsdWUgcGVlci9pbnB1dHMgZmlsZTpoaWRkZW5cIiAvPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLnR5cGUgIT0gJ3NlYXJjaFNlbGVjdCcgJiYgY29udHJvbC50eXBlICE9ICd0YWdTZWxlY3QnKSB7XG4gICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBhYnNvbHV0ZSB0ZXh0LXNtIHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwXCI+e3tcbiAgICAgICAgY29udHJvbC5sYWJlbFxuICAgICAgICB9fVxuICAgICAgICBAaWYoY29udHJvbC5sYWJlbCAmJiBjb250cm9sLmxhYmVsICE9ICcnICYmIGNvbnRyb2wubGFiZWwgIT0gJyAnKXtcbiAgICAgICAgQGlmIChpc0NvbnRyb2xSZXF1aXJlZChjb250cm9sKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgOlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKHZhbGlkYXRpb24gb2YgY29udHJvbC52YWxpZGF0aW9uczsgdHJhY2sgdmFsaWRhdGlvbikge1xuICAgICAgICBAaWYgKFxuICAgICAgICBnZXQoY29udHJvbCk/LnRvdWNoZWQgJiZcbiAgICAgICAgaGFzRXJyb3IoY29udHJvbCwgdmFsaWRhdGlvbikgJiYgc2hvdWxkU2hvd0Vycm9yKGNvbnRyb2wsIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZGFyazp0ZXh0LXJlZC04MDBcIj57eyB2YWxpZGF0aW9uLmRpc3BsYXkgfX08L21hdC1lcnJvcj5cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2xhYmVsPlxuICAgICAgfVxuICAgICAgQGlmIChjb250cm9sLmljb24gJiYgIWRpc2FibGVkKSB7XG4gICAgICA8c3BhblxuICAgICAgICBbbmdDbGFzc109XCJjb250cm9sLmljb25DYWxsYmFja0Rpc2FibGVkID8gJ3RleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNTAwJzondGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUnXCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBwLTIuNSBib3R0b20tMCByaWdodC0wXCIgW21hdFRvb2x0aXBdPVwiY29udHJvbC5pY29uVG9vbHRpcCB8fCAnJ1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgKGNsaWNrKT1cIiFjb250cm9sLmljb25DYWxsYmFja0Rpc2FibGVkICYmIGNvbnRyb2wuaWNvbkNhbGxiYWNrPy4oZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy52YWx1ZSlcIj48bWF0LWljb25cbiAgICAgICAgICBjbGFzcz1cImZsZXggaW5wdXQganVzdGlmeS1jZW50ZXIgYWxpZ24tbWlkZGxlIGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciB0ZXh0LWxnXCI+e3tjb250cm9sLmljb259fTwvbWF0LWljb24+PC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoY29udHJvbC5zcGFuKSB7XG4gICAgPHNwYW5cbiAgICAgIFtuZ0NsYXNzXT1cIiFmb3JtLmdldChbY29udHJvbC5uYW1lXSk/LmVycm9ycyB8fCAhZm9ybS5nZXQoW2NvbnRyb2wubmFtZV0pPy50b3VjaGVkID8gJ3RleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwJyA6ICchdGV4dC1yZWQtNTAwIGRhcms6IXRleHQtcmVkLTgwMCdcIlxuICAgICAgY2xhc3M9XCJoLTAgdGV4dC14c1wiPnt7IGNvbnRyb2wuc3BhblxuICAgICAgfX08L3NwYW4+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
@@ -1,27 +1,26 @@
1
- import { inject } from "@angular/core";
2
- import { HttpResponse, } from "@angular/common/http";
3
- import { tap } from "rxjs";
4
- import { finalize } from "rxjs/operators";
5
- import { LoaderService } from "../../services/loader.service";
1
+ import { inject } from '@angular/core';
2
+ import { HttpResponse, } from '@angular/common/http';
3
+ import { tap } from 'rxjs';
4
+ import { finalize } from 'rxjs/operators';
5
+ import { LoaderService } from '../../services/loader.service';
6
6
  export const SpinnerInterceptor = (req, next) => {
7
7
  const loader = inject(LoaderService);
8
- let requestStackSize = 0;
9
- if (req.headers.get("skip") == "true") {
10
- req = req.clone({ headers: req.headers.delete("skip") });
8
+ if (req.headers.get('skip') == 'true') {
9
+ req = req.clone({ headers: req.headers.delete('skip') });
11
10
  return next(req);
12
11
  }
13
- req = req.clone({ headers: req.headers.delete("skip") });
14
- requestStackSize++;
12
+ req = req.clone({ headers: req.headers.delete('skip') });
13
+ loader.incrementStackSize();
15
14
  loader.setLoading(true);
16
15
  return next(req).pipe(tap((data) => {
17
16
  if (data instanceof HttpResponse) {
18
17
  //Do something
19
18
  }
20
19
  }), finalize(() => {
21
- requestStackSize--;
22
- if (requestStackSize == 0) {
20
+ loader.decrementStackSize();
21
+ if (loader.getStackSize() == 0) {
23
22
  loader.setLoading(false);
24
23
  }
25
24
  }));
26
25
  };
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3Bpbm5lckludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY29uZmlnL2ludGVyY2VwdG9ycy9TcGlubmVySW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBT04sWUFBWSxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFzQyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDbEUsTUFBTSxNQUFNLEdBQWtCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRCxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUV6QixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELGdCQUFnQixFQUFFLENBQUM7SUFDbkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQ3BCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1osSUFBSSxJQUFJLFlBQVksWUFBWSxFQUFFLENBQUM7WUFDbEMsY0FBYztRQUNmLENBQUM7SUFDRixDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ2IsZ0JBQWdCLEVBQUUsQ0FBQztRQUNuQixJQUFJLGdCQUFnQixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNGLENBQUMsQ0FBQyxDQUNGLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG5cdEh0dHBFcnJvclJlc3BvbnNlLFxyXG5cdEh0dHBFdmVudCxcclxuXHRIdHRwSGFuZGxlcixcclxuXHRIdHRwSW50ZXJjZXB0b3IsXHJcblx0SHR0cEludGVyY2VwdG9yRm4sXHJcblx0SHR0cFJlcXVlc3QsXHJcblx0SHR0cFJlc3BvbnNlLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBMb2FkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xvYWRlci5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY29uc3QgU3Bpbm5lckludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXEsIG5leHQpID0+IHtcclxuXHRjb25zdCBsb2FkZXI6IExvYWRlclNlcnZpY2UgPSBpbmplY3QoTG9hZGVyU2VydmljZSk7XHJcblx0bGV0IHJlcXVlc3RTdGFja1NpemUgPSAwO1xyXG5cclxuXHRpZiAocmVxLmhlYWRlcnMuZ2V0KFwic2tpcFwiKSA9PSBcInRydWVcIikge1xyXG5cdFx0cmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuZGVsZXRlKFwic2tpcFwiKSB9KTtcclxuXHRcdHJldHVybiBuZXh0KHJlcSk7XHJcblx0fVxyXG5cdHJlcSA9IHJlcS5jbG9uZSh7IGhlYWRlcnM6IHJlcS5oZWFkZXJzLmRlbGV0ZShcInNraXBcIikgfSk7XHJcblx0cmVxdWVzdFN0YWNrU2l6ZSsrO1xyXG5cdGxvYWRlci5zZXRMb2FkaW5nKHRydWUpO1xyXG5cdHJldHVybiBuZXh0KHJlcSkucGlwZShcclxuXHRcdHRhcCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRpZiAoZGF0YSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG5cdFx0XHRcdC8vRG8gc29tZXRoaW5nXHJcblx0XHRcdH1cclxuXHRcdH0pLFxyXG5cdFx0ZmluYWxpemUoKCkgPT4ge1xyXG5cdFx0XHRyZXF1ZXN0U3RhY2tTaXplLS07XHJcblx0XHRcdGlmIChyZXF1ZXN0U3RhY2tTaXplID09IDApIHtcclxuXHRcdFx0XHRsb2FkZXIuc2V0TG9hZGluZyhmYWxzZSk7XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0KTtcclxufTtcclxuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3Bpbm5lckludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY29uZmlnL2ludGVyY2VwdG9ycy9TcGlubmVySW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBT0wsWUFBWSxHQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFzQyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDakUsTUFBTSxNQUFNLEdBQWtCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVwRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3RDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNuQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNYLElBQUksSUFBSSxZQUFZLFlBQVksRUFBRSxDQUFDO1lBQ2pDLGNBQWM7UUFDaEIsQ0FBQztJQUNILENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDWixNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgSHR0cEVycm9yUmVzcG9uc2UsXHJcbiAgSHR0cEV2ZW50LFxyXG4gIEh0dHBIYW5kbGVyLFxyXG4gIEh0dHBJbnRlcmNlcHRvcixcclxuICBIdHRwSW50ZXJjZXB0b3JGbixcclxuICBIdHRwUmVxdWVzdCxcclxuICBIdHRwUmVzcG9uc2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IExvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgU3Bpbm5lckludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChyZXEsIG5leHQpID0+IHtcclxuICBjb25zdCBsb2FkZXI6IExvYWRlclNlcnZpY2UgPSBpbmplY3QoTG9hZGVyU2VydmljZSk7XHJcblxyXG4gIGlmIChyZXEuaGVhZGVycy5nZXQoJ3NraXAnKSA9PSAndHJ1ZScpIHtcclxuICAgIHJlcSA9IHJlcS5jbG9uZSh7IGhlYWRlcnM6IHJlcS5oZWFkZXJzLmRlbGV0ZSgnc2tpcCcpIH0pO1xyXG4gICAgcmV0dXJuIG5leHQocmVxKTtcclxuICB9XHJcbiAgcmVxID0gcmVxLmNsb25lKHsgaGVhZGVyczogcmVxLmhlYWRlcnMuZGVsZXRlKCdza2lwJykgfSk7XHJcbiAgbG9hZGVyLmluY3JlbWVudFN0YWNrU2l6ZSgpO1xyXG4gIGxvYWRlci5zZXRMb2FkaW5nKHRydWUpO1xyXG4gIHJldHVybiBuZXh0KHJlcSkucGlwZShcclxuICAgIHRhcCgoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgIC8vRG8gc29tZXRoaW5nXHJcbiAgICAgIH1cclxuICAgIH0pLFxyXG4gICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICBsb2FkZXIuZGVjcmVtZW50U3RhY2tTaXplKCk7XHJcbiAgICAgIGlmIChsb2FkZXIuZ2V0U3RhY2tTaXplKCkgPT0gMCkge1xyXG4gICAgICAgIGxvYWRlci5zZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICApO1xyXG59O1xyXG4iXX0=
@@ -5,6 +5,7 @@ export class LoaderService {
5
5
  constructor() {
6
6
  this.is_loading = false;
7
7
  this.is_loading$ = new BehaviorSubject(this.is_loading);
8
+ this.requestStatckSize = 0;
8
9
  this.setLoading = (is) => {
9
10
  this.is_loading = is;
10
11
  this.is_loading$.next(this.is_loading);
@@ -15,6 +16,10 @@ export class LoaderService {
15
16
  this.isLoadingAsync = () => {
16
17
  return this.is_loading$.asObservable();
17
18
  };
19
+ this.getStackSize = () => this.requestStatckSize;
20
+ this.incrementStackSize = () => this.requestStatckSize++;
21
+ this.decrementStackSize = () => this.requestStatckSize--;
22
+ this.setStackSize = (value) => (this.requestStatckSize = value);
18
23
  }
19
24
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: LoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
20
25
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: LoaderService, providedIn: 'root' }); }
@@ -25,4 +30,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
25
30
  providedIn: 'root',
26
31
  }]
27
32
  }], ctorParameters: () => [] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaHJ2LWNvbXBvbmVudHMvc3JjL2xpYi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3ZDLE1BQU0sT0FBTyxhQUFhO0lBSXhCO1FBSFEsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUlwRSxlQUFVLEdBQUcsQ0FBQyxFQUFXLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBRUYsY0FBUyxHQUFHLEdBQUcsRUFBRTtZQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDLENBQUM7UUFFRixtQkFBYyxHQUFHLEdBQUcsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDO0lBYmEsQ0FBQzs4R0FKTCxhQUFhO2tIQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9hZGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBpc19sb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpc19sb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5pc19sb2FkaW5nKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBzZXRMb2FkaW5nID0gKGlzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmlzX2xvYWRpbmcgPSBpcztcclxuICAgIHRoaXMuaXNfbG9hZGluZyQubmV4dCh0aGlzLmlzX2xvYWRpbmcpO1xyXG4gIH07XHJcblxyXG4gIGlzTG9hZGluZyA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmlzX2xvYWRpbmc7XHJcbiAgfTtcclxuXHJcbiAgaXNMb2FkaW5nQXN5bmMgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc19sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcclxuICB9O1xyXG59XHJcbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaHJ2LWNvbXBvbmVudHMvc3JjL2xpYi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3ZDLE1BQU0sT0FBTyxhQUFhO0lBSXhCO1FBSFEsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1RCxzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFHdEMsZUFBVSxHQUFHLENBQUMsRUFBVyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQztRQUVGLGNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQyxDQUFDO1FBRUYsbUJBQWMsR0FBRyxHQUFHLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQztRQUVGLGlCQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRTVDLHVCQUFrQixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXBELHVCQUFrQixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXBELGlCQUFZLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDO0lBckJwRCxDQUFDOzhHQUpMLGFBQWE7a0hBQWIsYUFBYSxjQUZaLE1BQU07OzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2FkZXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIGlzX2xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGlzX2xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0aGlzLmlzX2xvYWRpbmcpO1xyXG4gIHByaXZhdGUgcmVxdWVzdFN0YXRja1NpemU6IG51bWJlciA9IDA7XHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBzZXRMb2FkaW5nID0gKGlzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmlzX2xvYWRpbmcgPSBpcztcclxuICAgIHRoaXMuaXNfbG9hZGluZyQubmV4dCh0aGlzLmlzX2xvYWRpbmcpO1xyXG4gIH07XHJcblxyXG4gIGlzTG9hZGluZyA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmlzX2xvYWRpbmc7XHJcbiAgfTtcclxuXHJcbiAgaXNMb2FkaW5nQXN5bmMgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc19sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcclxuICB9O1xyXG5cclxuICBnZXRTdGFja1NpemUgPSAoKSA9PiB0aGlzLnJlcXVlc3RTdGF0Y2tTaXplO1xyXG5cclxuICBpbmNyZW1lbnRTdGFja1NpemUgPSAoKSA9PiB0aGlzLnJlcXVlc3RTdGF0Y2tTaXplKys7XHJcblxyXG4gIGRlY3JlbWVudFN0YWNrU2l6ZSA9ICgpID0+IHRoaXMucmVxdWVzdFN0YXRja1NpemUtLTtcclxuXHJcbiAgc2V0U3RhY2tTaXplID0gKHZhbHVlOiBudW1iZXIpID0+ICh0aGlzLnJlcXVlc3RTdGF0Y2tTaXplID0gdmFsdWUpO1xyXG59XHJcbiJdfQ==
@@ -1295,7 +1295,8 @@ class ChrFormComponent {
1295
1295
  ? this.transformDate(typeof value == 'string' ? new Date(value) : value, 'yyyy-MM-ddTHH:mm')
1296
1296
  : this.transformDate(defaultValue, 'yyyy-MM-ddTHH:mm');
1297
1297
  case 'number':
1298
- return Number(value);
1298
+ const number = Number(value);
1299
+ return Number.isNaN(number) ? 0 : number;
1299
1300
  case 'searchSelect':
1300
1301
  return value;
1301
1302
  case 'tagSelect':
@@ -2056,6 +2057,7 @@ class LoaderService {
2056
2057
  constructor() {
2057
2058
  this.is_loading = false;
2058
2059
  this.is_loading$ = new BehaviorSubject(this.is_loading);
2060
+ this.requestStatckSize = 0;
2059
2061
  this.setLoading = (is) => {
2060
2062
  this.is_loading = is;
2061
2063
  this.is_loading$.next(this.is_loading);
@@ -2066,6 +2068,10 @@ class LoaderService {
2066
2068
  this.isLoadingAsync = () => {
2067
2069
  return this.is_loading$.asObservable();
2068
2070
  };
2071
+ this.getStackSize = () => this.requestStatckSize;
2072
+ this.incrementStackSize = () => this.requestStatckSize++;
2073
+ this.decrementStackSize = () => this.requestStatckSize--;
2074
+ this.setStackSize = (value) => (this.requestStatckSize = value);
2069
2075
  }
2070
2076
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: LoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2071
2077
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: LoaderService, providedIn: 'root' }); }
@@ -2079,21 +2085,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
2079
2085
 
2080
2086
  const SpinnerInterceptor = (req, next) => {
2081
2087
  const loader = inject(LoaderService);
2082
- let requestStackSize = 0;
2083
- if (req.headers.get("skip") == "true") {
2084
- req = req.clone({ headers: req.headers.delete("skip") });
2088
+ if (req.headers.get('skip') == 'true') {
2089
+ req = req.clone({ headers: req.headers.delete('skip') });
2085
2090
  return next(req);
2086
2091
  }
2087
- req = req.clone({ headers: req.headers.delete("skip") });
2088
- requestStackSize++;
2092
+ req = req.clone({ headers: req.headers.delete('skip') });
2093
+ loader.incrementStackSize();
2089
2094
  loader.setLoading(true);
2090
2095
  return next(req).pipe(tap((data) => {
2091
2096
  if (data instanceof HttpResponse) {
2092
2097
  //Do something
2093
2098
  }
2094
2099
  }), finalize(() => {
2095
- requestStackSize--;
2096
- if (requestStackSize == 0) {
2100
+ loader.decrementStackSize();
2101
+ if (loader.getStackSize() == 0) {
2097
2102
  loader.setLoading(false);
2098
2103
  }
2099
2104
  }));