@bizdoc/core 1.14.1 → 1.14.5

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.
Files changed (35) hide show
  1. package/assets/themes/brown.min.css +1 -1
  2. package/assets/themes/dark.min.css +1 -1
  3. package/assets/themes/deep-purple-light-blue.min.css +1 -1
  4. package/assets/themes/deep-purple-teal.min.css +1 -1
  5. package/assets/themes/default.min.css +1 -1
  6. package/assets/themes/green.min.css +1 -1
  7. package/assets/themes/indigo.min.css +1 -1
  8. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +6 -4
  9. package/esm2020/lib/admin/profiler/outofoffice.component.mjs +155 -0
  10. package/esm2020/lib/admin/profiler/profiler.component.mjs +75 -46
  11. package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +3 -3
  12. package/esm2020/lib/core/models.mjs +1 -1
  13. package/esm2020/lib/core/slots/pane-ref.mjs +46 -28
  14. package/esm2020/lib/core/slots/slots.component.mjs +28 -25
  15. package/esm2020/lib/core/translations.mjs +4 -2
  16. package/esm2020/lib/cube/cube-info.service.mjs +2 -2
  17. package/esm2020/lib/cube/explore/explore-items.component.mjs +2 -2
  18. package/esm2020/lib/options/options.component.mjs +37 -16
  19. package/esm2020/lib/reports/report-viewer.component.mjs +2 -2
  20. package/esm2020/lib/system.module.mjs +8 -6
  21. package/esm2020/public-api.mjs +2 -2
  22. package/fesm2015/bizdoc-core.mjs +341 -134
  23. package/fesm2015/bizdoc-core.mjs.map +1 -1
  24. package/fesm2020/bizdoc-core.mjs +331 -130
  25. package/fesm2020/bizdoc-core.mjs.map +1 -1
  26. package/lib/admin/profiler/outofoffice.component.d.ts +48 -0
  27. package/lib/admin/profiler/profiler.component.d.ts +20 -11
  28. package/lib/core/models.d.ts +2 -2
  29. package/lib/core/slots/pane-ref.d.ts +32 -12
  30. package/lib/core/slots/slots.component.d.ts +1 -1
  31. package/lib/core/translations.d.ts +2 -0
  32. package/lib/options/options.component.d.ts +4 -3
  33. package/lib/system.module.d.ts +24 -23
  34. package/package.json +16 -16
  35. package/public-api.d.ts +1 -1
@@ -110,7 +110,7 @@ export class ExploreItemsComponent {
110
110
  const numberFormat = this._service.numberFormat, columns = this.columns.filter(c => !c.hidden), rows = [{
111
111
  index: 1,
112
112
  cells: columns.map((c, i) => ({
113
- index: i + 1, value: c.label,
113
+ index: i + 1, value: c.label || c.name,
114
114
  style: {
115
115
  bold: true
116
116
  }
@@ -183,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImpor
183
183
  type: ViewChild,
184
184
  args: [MatPaginator, { static: true }]
185
185
  }] } });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbG9yZS1pdGVtcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvZXhwbG9yZS9leHBsb3JlLWl0ZW1zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY3ViZS9leHBsb3JlL2V4cGxvcmUtaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQTBCLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFtQixTQUFTLEVBQVcsTUFBTSxtQkFBbUIsQ0FBQztBQUl4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7OztBQUdwQyxNQUFNLFNBQVMsR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBVTNDLDBCQUEwQjtBQUMxQixNQUFNLE9BQU8scUJBQXFCO0lBNkJoQyxzQkFBc0I7SUFDdEIsWUFDVSxRQUFxQixFQUNyQixHQUFrQixFQUNsQixRQUF3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QyxDQUFDLEVBQUUsQ0FDWixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDOztrSEF2SlUscUJBQXFCO3NHQUFyQixxQkFBcUIsa1NBb0JyQixPQUFPLDRFQUNQLFlBQVksbUZDaER6Qiw4N0NBeUJBLDJuRURIYztRQUNWLGFBQWE7UUFDYixhQUFhO0tBQUM7MkZBR0wscUJBQXFCO2tCQVRqQyxTQUFTOytCQUNFLHFCQUFxQixjQUduQjt3QkFDVixhQUFhO3dCQUNiLGFBQWE7cUJBQUM7MExBV0wsUUFBUTtzQkFEbEIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ2EsT0FBTztzQkFBekIsTUFBTTtnQkFDWSxJQUFJO3NCQUF0QixNQUFNO2dCQUVFLE9BQU87c0JBQWYsS0FBSztnQkFDYSxhQUFhO3NCQUEvQixNQUFNO2dCQUNhLElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFDeUIsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgV29ya2Jvb2ssIFdvcmtzaGVldCwgQ29sdW1uLCBSb3cgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItZXhjZWwtZXhwb3J0JztcclxuaW1wb3J0IHsgQ3ViZSwgRmllbGRJbmZvLCBGaWVsZFR5cGUsIEF4ZXNNYXAgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IEN1YmVTZXJ2aWNlIH0gZnJvbSAnLi4vY3ViZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IGl0ZW1BbmltYXRpb24sIGxpc3RBbmltYXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNjb3BlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvY29uZmlndXJhdGlvbic7XHJcblxyXG5jb25zdCBQQUdFX1NJWkUgPSAxNCwgTU9CSUxFX1BBR0VfU0laRSA9IDg7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1jdWJlLWV4cGxvcmUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9leHBsb3JlLWl0ZW1zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9leHBsb3JlLWl0ZW1zLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgbGlzdEFuaW1hdGlvbixcclxuICAgIGl0ZW1BbmltYXRpb25dXHJcbn0pXHJcbi8qKiBkcmlsbC1kb3duIGNvbXBvbmVudCovXHJcbmV4cG9ydCBjbGFzcyBFeHBsb3JlSXRlbXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICByZWFkb25seSBDVVJSRU5DWV9GT1JNQVQgPSB0aGlzLl9zZXJ2aWNlLmRpZ2l0c0luZm87XHJcbiAgcHJpdmF0ZSBfcGFnZVNpemU7XHJcbiAgcHJpdmF0ZSBfZGF0YTogYW55W107XHJcbiAgcHVibGljIGdldCBwYWdlU2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdlU2l6ZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICh2YWx1ZSkgdGhpcy5fcGFnZVNpemUgPSB2YWx1ZTtcclxuICB9XHJcbiAgQElucHV0KCkgY3ViZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBpbmRleD86IHN0cmluZztcclxuICBASW5wdXQoKSBzY29wZT86IFNjb3BlVHlwZTtcclxuICBASW5wdXQoKSBheGVzITogQXhlc01hcDtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgZXhwbG9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXhwbG9yZUl0ZW1FdmVudD4oKTtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGxvYWRpbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBjb2x1bW5zOiBGaWVsZEluZm9bXTtcclxuICBzZWxlY3RhYmxlOiBib29sZWFuO1xyXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdO1xyXG4gIGN1cnJlbmN5Q29kZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvYWRpbmckID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwcml2YXRlIF90ZW1wbGF0ZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2N1YmU6IEN1YmU7XHJcbiAgLyoqIGRyaWxsLWRvd24gY3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogQ3ViZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLl9wYWdlU2l6ZSA9IGlzTW9iaWxlKCkgPyBNT0JJTEVfUEFHRV9TSVpFIDogUEFHRV9TSVpFO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvYWRpbmckLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSh2ID0+IHRoaXMubG9hZGluZ0NoYW5nZS5lbWl0KHRoaXMubG9hZGluZyA9IHYpKTtcclxuICB9XHJcbiAgcmVmcmVzaCgpIHsgdGhpcy5uZ09uQ2hhbmdlcyhudWxsKTsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhfOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jdWJlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzLmZpbmQoYyA9PiBjLm5hbWUgPT09IHRoaXMuY3ViZSk7XHJcbiAgICB0aGlzLmN1cnJlbmN5Q29kZSA9IHRoaXMuX2N1YmUuY3VycmVuY3lDb2RlO1xyXG4gICAgdGhpcy5fdmlldygpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIF92aWV3KCkge1xyXG4gICAgdGhpcy5fbG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgICh0aGlzLmluZGV4ID8gdGhpcy5fc2VydmljZS5yZXNvbHZlSW5kZXgodGhpcy5jdWJlLCB0aGlzLmluZGV4KSA6XHJcbiAgICAgIHRoaXMuX3NlcnZpY2UucmVzb2x2ZSh0aGlzLmN1YmUsIHRoaXMuYXhlcykpLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgICBjb25zdCB7IGNvbHVtbnMsIHRlbXBsYXRlIH0gPSBlO1xyXG4gICAgICAgICh0aGlzLmluZGV4ID8gdGhpcy5fc2VydmljZS5pbmRpY2VzKHRoaXMuY3ViZSwgdGhpcy5pbmRleCwgdGhpcy5heGVzLCB7IHNjb3BlOiB0aGlzLnNjb3BlIH0pIDpcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2UuZXhwbG9yZSh0aGlzLmN1YmUsIHRoaXMuYXhlcywgeyBzY29wZTogdGhpcy5zY29wZSB9KSkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbmRleCAmJiAhY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9jdWJlLmF4ZXMuXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIoYSA9PiB0aGlzLmF4ZXNbYS5uYW1lXSA9PT0gdW5kZWZpbmVkICYmICFhLmhpZGRlbiAmJlxyXG4gICAgICAgICAgICAgICAgICByLmZpbmQocm93ID0+IHJvd1thLm5hbWVdICE9PSB1bmRlZmluZWQpKS5cclxuICAgICAgICAgICAgICAgIGZvckVhY2goYSA9PlxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goeyBuYW1lOiBhLm5hbWUsIGxhYmVsOiBhLnRpdGxlIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY3ViZS5pbmRpY2VzLmZpbmQoaSA9PiBpLm5hbWUgPT09IHRoaXMuaW5kZXgpO1xyXG4gICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh7IG5hbWU6ICd2YWx1ZScsIGxhYmVsOiBpbmRleC50aXRsZSwgdHlwZTogRmllbGRUeXBlLkN1cnJlbmN5IH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gY29sdW1ucy5tYXAoYyA9PiBjLm5hbWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZpbHRlcihjID0+ICFjLmhpZGRlbiAmJiAhYy5rZXkpLlxyXG4gICAgICAgICAgICAgICAgICBtYXAoYyA9PiBjLm5hbWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlID0gdGVtcGxhdGUgIT09IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZGF0YXNvdXJjZShyKTtcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NiLmVycm9yKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX2xvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuX3NiLmVycm9yKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0YXNvdXJjZShkYXRhOiBhbnlbXSkge1xyXG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKGRhdGEpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMubG9hZC5lbWl0KCk7XHJcbiAgfVxyXG4gIGV4cGFuZChpdGVtOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5fdGVtcGxhdGUpIHJldHVybjtcclxuICAgIGNvbnN0IGtleXMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGYgPT4gZi5rZXkpLm1hcChmID0+IGl0ZW1bZi5uYW1lXSk7XHJcbiAgICBpZiAoIWtleXMubGVuZ3RoKSB0aHJvdyAnbm8gY29sdW1uIHdpdGggS2V5IGF0dHJpYnV0ZSBpbiBJQnJvd3NlYWJsZSBtb2RlbC4nO1xyXG4gICAgdGhpcy5leHBsb3JlLmVtaXQoeyBrZXlzLCB0ZW1wbGF0ZTogdGhpcy5fdGVtcGxhdGUgfSk7XHJcbiAgfVxyXG4gIGV4cG9ydEV4Y2VsKCkge1xyXG4gICAgY29uc3QgbnVtYmVyRm9ybWF0ID0gdGhpcy5fc2VydmljZS5udW1iZXJGb3JtYXQsXHJcbiAgICAgIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuaGlkZGVuKSxcclxuICAgICAgcm93cyA9IFt7XHJcbiAgICAgICAgaW5kZXg6IDEsXHJcbiAgICAgICAgY2VsbHM6IGNvbHVtbnMubWFwKChjLCBpKSA9PiAoe1xyXG4gICAgICAgICAgaW5kZXg6IGkgKyAxLCB2YWx1ZTogYy5sYWJlbCxcclxuICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgIGJvbGQ6IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGFzIENlbGwpKVxyXG4gICAgICB9XSBhcyBSb3dbXTtcclxuICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgociwgaSkgPT4gcm93cy5wdXNoKFxyXG4gICAgICB7XHJcbiAgICAgICAgaW5kZXg6IGkgKyAyLFxyXG4gICAgICAgIGNlbGxzOiBjb2x1bW5zLm1hcCgoYywgaikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXNudW1iZXIgPSBjLnR5cGUgPT09ICdDdXJyZW5jeSc7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiBpc251bWJlciA/ICdudW1iZXInIDogJ3RleHQnLFxyXG4gICAgICAgICAgICBpbmRleDogaiArIDEsIHZhbHVlOiByW2MubmFtZV0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0LFxyXG4gICAgICAgICAgICAgIGhBbGlnbjogaXNudW1iZXIgPyAncmlnaHQnIDogJ2dlbmVyYWwnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gYXMgQ2VsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9IGFzIFJvdykpO1xyXG5cclxuICAgIGNvbnN0IGJvb2sgPSBuZXcgV29ya2Jvb2soXHJcbiAgICAgIHtcclxuICAgICAgICB3b3Jrc2hlZXRzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGVuYWJsZVJ0bDogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTaGVldE4nLCAxKSxcclxuICAgICAgICAgICAgY29sdW1uczogY29sdW1ucy5tYXAoKF8sIGkpID0+ICh7IGluZGV4OiBpICsgMSwgd2lkdGg6IDI1MCB9IGFzIENvbHVtbikpLFxyXG4gICAgICAgICAgICByb3dzXHJcbiAgICAgICAgICB9IGFzIFdvcmtzaGVldFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgICd4bHN4J1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLm5hbWVPZih0aGlzLmF4ZXMsIHRoaXMuY3ViZSkuXHJcbiAgICAgIHN1YnNjcmliZShvID0+XHJcbiAgICAgICAgYm9vay5zYXZlKGAke3RoaXMuX2N1YmUudGl0bGV9ICR7b30ueGxzeGApKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2FkaW5nJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxvcmVJdGVtRXZlbnQge1xyXG4gIGtleXM6IChzdHJpbmcgfCBudW1iZXIpW107XHJcbiAgdGVtcGxhdGU6IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgQ2VsbCB7IH1cclxuIiwiPG1hdC10YWJsZSBtYXRTb3J0IFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBAbGlzdD5cclxuICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiYy5uYW1lXCIgKm5nRm9yPVwibGV0IGMgb2YgY29sdW1uc1wiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3tjLmxhYmVsIHx8IGMubmFtZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFtjbGFzcy5maWd1cmVdPVwiYy50eXBlID09PSAnQ3VycmVuY3knXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImMudHlwZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidEYXRlJ1wiPlxyXG4gICAgICAgICAge3tlbGVtZW50W2MubmFtZV0gfCBhbURhdGVGb3JtYXQ6ICdsbCd9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidOdW1iZXInXCI+XHJcbiAgICAgICAgICB7e2VsZW1lbnRbYy5uYW1lXSB8IG51bWJlciB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidDdXJyZW5jeSdcIj5cclxuICAgICAgICAgIHt7ZWxlbWVudFtjLm5hbWVdIHwgY3VycmVuY3kgOiAoZWxlbWVudC5jdXJyZW5jeUNvZGUgfHwgY3VycmVuY3lDb2RlKSA6ICdzeW1ib2wnIDogQ1VSUkVOQ1lfRk9STUFUIH19XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJlbGVtZW50Lm1vZGVsW2MubmFtZV1cIiBkaXNhYmxlZD1cInRydWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ0Jvb2xlYW4nXCI+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAge3tlbGVtZW50W2MubmFtZV0gfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlXCI+PC9tYXQtaGVhZGVyLXJvdz5cclxuICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IGVsZW1lbnQ7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgKGNsaWNrKT1cImV4cGFuZChlbGVtZW50KVwiIFtjbGFzcy5zZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIiBAaXRlbT48L21hdC1yb3c+XHJcbjwvbWF0LXRhYmxlPlxyXG48bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIGhpZGVQYWdlU2l6ZSBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L21hdC1wYWdpbmF0b3I+XHJcbiJdfQ==
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbG9yZS1pdGVtcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvZXhwbG9yZS9leHBsb3JlLWl0ZW1zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY3ViZS9leHBsb3JlL2V4cGxvcmUtaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQTBCLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFtQixTQUFTLEVBQVcsTUFBTSxtQkFBbUIsQ0FBQztBQUl4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7OztBQUdwQyxNQUFNLFNBQVMsR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBVTNDLDBCQUEwQjtBQUMxQixNQUFNLE9BQU8scUJBQXFCO0lBNkJoQyxzQkFBc0I7SUFDdEIsWUFDVSxRQUFxQixFQUNyQixHQUFrQixFQUNsQixRQUF3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O1lBQ3hDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7O2tIQXZKVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixrU0FvQnJCLE9BQU8sNEVBQ1AsWUFBWSxtRkNoRHpCLDg3Q0F5QkEsMm5FREhjO1FBQ1YsYUFBYTtRQUNiLGFBQWE7S0FBQzsyRkFHTCxxQkFBcUI7a0JBVGpDLFNBQVM7K0JBQ0UscUJBQXFCLGNBR25CO3dCQUNWLGFBQWE7d0JBQ2IsYUFBYTtxQkFBQzswTEFXTCxRQUFRO3NCQURsQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDYSxPQUFPO3NCQUF6QixNQUFNO2dCQUNZLElBQUk7c0JBQXRCLE1BQU07Z0JBRUUsT0FBTztzQkFBZixLQUFLO2dCQUNhLGFBQWE7c0JBQS9CLE1BQU07Z0JBQ2EsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUN5QixTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBXb3JrYm9vaywgV29ya3NoZWV0LCBDb2x1bW4sIFJvdyB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1leGNlbC1leHBvcnQnO1xyXG5pbXBvcnQgeyBDdWJlLCBGaWVsZEluZm8sIEZpZWxkVHlwZSwgQXhlc01hcCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgQ3ViZVNlcnZpY2UgfSBmcm9tICcuLi9jdWJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXRlbUFuaW1hdGlvbiwgbGlzdEFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL2NvcmUvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2NvcGVUeXBlIH0gZnJvbSAnLi4vLi4vY29yZS9jb25maWd1cmF0aW9uJztcclxuXHJcbmNvbnN0IFBBR0VfU0laRSA9IDE0LCBNT0JJTEVfUEFHRV9TSVpFID0gODtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWN1YmUtZXhwbG9yZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2V4cGxvcmUtaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2V4cGxvcmUtaXRlbXMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICBsaXN0QW5pbWF0aW9uLFxyXG4gICAgaXRlbUFuaW1hdGlvbl1cclxufSlcclxuLyoqIGRyaWxsLWRvd24gY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIEV4cGxvcmVJdGVtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIHJlYWRvbmx5IENVUlJFTkNZX0ZPUk1BVCA9IHRoaXMuX3NlcnZpY2UuZGlnaXRzSW5mbztcclxuICBwcml2YXRlIF9wYWdlU2l6ZTtcclxuICBwcml2YXRlIF9kYXRhOiBhbnlbXTtcclxuICBwdWJsaWMgZ2V0IHBhZ2VTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VTaXplO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLl9wYWdlU2l6ZSA9IHZhbHVlO1xyXG4gIH1cclxuICBASW5wdXQoKSBjdWJlITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGluZGV4Pzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNjb3BlPzogU2NvcGVUeXBlO1xyXG4gIEBJbnB1dCgpIGF4ZXMhOiBBeGVzTWFwO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBleHBsb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxFeHBsb3JlSXRlbUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBsb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+O1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgbG9hZGluZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQ6IE1hdFNvcnQ7XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIGNvbHVtbnM6IEZpZWxkSW5mb1tdO1xyXG4gIHNlbGVjdGFibGU6IGJvb2xlYW47XHJcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XHJcbiAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9hZGluZyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHByaXZhdGUgX3RlbXBsYXRlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfY3ViZTogQ3ViZTtcclxuICAvKiogZHJpbGwtZG93biBjdG9yICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBDdWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgIHRoaXMuX3BhZ2VTaXplID0gaXNNb2JpbGUoKSA/IE1PQklMRV9QQUdFX1NJWkUgOiBQQUdFX1NJWkU7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9hZGluZyQucGlwZShkZWJvdW5jZVRpbWUoMjAwKSkuc3Vic2NyaWJlKHYgPT4gdGhpcy5sb2FkaW5nQ2hhbmdlLmVtaXQodGhpcy5sb2FkaW5nID0gdikpO1xyXG4gIH1cclxuICByZWZyZXNoKCkgeyB0aGlzLm5nT25DaGFuZ2VzKG51bGwpOyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKF86IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N1YmUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy5jdWJlKTtcclxuICAgIHRoaXMuY3VycmVuY3lDb2RlID0gdGhpcy5fY3ViZS5jdXJyZW5jeUNvZGU7XHJcbiAgICB0aGlzLl92aWV3KCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgX3ZpZXcoKSB7XHJcbiAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgKHRoaXMuaW5kZXggPyB0aGlzLl9zZXJ2aWNlLnJlc29sdmVJbmRleCh0aGlzLmN1YmUsIHRoaXMuaW5kZXgpIDpcclxuICAgICAgdGhpcy5fc2VydmljZS5yZXNvbHZlKHRoaXMuY3ViZSwgdGhpcy5heGVzKSkuc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucywgdGVtcGxhdGUgfSA9IGU7XHJcbiAgICAgICAgKHRoaXMuaW5kZXggPyB0aGlzLl9zZXJ2aWNlLmluZGljZXModGhpcy5jdWJlLCB0aGlzLmluZGV4LCB0aGlzLmF4ZXMsIHsgc2NvcGU6IHRoaXMuc2NvcGUgfSkgOlxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5leHBsb3JlKHRoaXMuY3ViZSwgdGhpcy5heGVzLCB7IHNjb3BlOiB0aGlzLnNjb3BlIH0pKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ICYmICFjb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2N1YmUuYXhlcy5cclxuICAgICAgICAgICAgICAgIGZpbHRlcihhID0+IHRoaXMuYXhlc1thLm5hbWVdID09PSB1bmRlZmluZWQgJiYgIWEuaGlkZGVuICYmXHJcbiAgICAgICAgICAgICAgICAgIHIuZmluZChyb3cgPT4gcm93W2EubmFtZV0gIT09IHVuZGVmaW5lZCkpLlxyXG4gICAgICAgICAgICAgICAgZm9yRWFjaChhID0+XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh7IG5hbWU6IGEubmFtZSwgbGFiZWw6IGEudGl0bGUgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9jdWJlLmluZGljZXMuZmluZChpID0+IGkubmFtZSA9PT0gdGhpcy5pbmRleCk7XHJcbiAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHsgbmFtZTogJ3ZhbHVlJywgbGFiZWw6IGluZGV4LnRpdGxlLCB0eXBlOiBGaWVsZFR5cGUuQ3VycmVuY3kgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcclxuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBjb2x1bW5zLm1hcChjID0+IGMubmFtZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID1cclxuICAgICAgICAgICAgICAgIGNvbHVtbnMuZmlsdGVyKGMgPT4gIWMuaGlkZGVuICYmICFjLmtleSkuXHJcbiAgICAgICAgICAgICAgICAgIG1hcChjID0+IGMubmFtZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGUgPSB0ZW1wbGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGUgPSB0ZW1wbGF0ZSAhPT0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9kYXRhc291cmNlKHIpO1xyXG4gICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fc2IuZXJyb3IoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fbG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5fc2IuZXJyb3IoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kYXRhc291cmNlKGRhdGE6IGFueVtdKSB7XHJcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoZGF0YSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgIHRoaXMuX2xvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5sb2FkLmVtaXQoKTtcclxuICB9XHJcbiAgZXhwYW5kKGl0ZW06IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLl90ZW1wbGF0ZSkgcmV0dXJuO1xyXG4gICAgY29uc3Qga2V5cyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoZiA9PiBmLmtleSkubWFwKGYgPT4gaXRlbVtmLm5hbWVdKTtcclxuICAgIGlmICgha2V5cy5sZW5ndGgpIHRocm93ICdubyBjb2x1bW4gd2l0aCBLZXkgYXR0cmlidXRlIGluIElCcm93c2VhYmxlIG1vZGVsLic7XHJcbiAgICB0aGlzLmV4cGxvcmUuZW1pdCh7IGtleXMsIHRlbXBsYXRlOiB0aGlzLl90ZW1wbGF0ZSB9KTtcclxuICB9XHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICBjb25zdCBudW1iZXJGb3JtYXQgPSB0aGlzLl9zZXJ2aWNlLm51bWJlckZvcm1hdCxcclxuICAgICAgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5oaWRkZW4pLFxyXG4gICAgICByb3dzID0gW3tcclxuICAgICAgICBpbmRleDogMSxcclxuICAgICAgICBjZWxsczogY29sdW1ucy5tYXAoKGMsIGkpID0+ICh7XHJcbiAgICAgICAgICBpbmRleDogaSArIDEsIHZhbHVlOiBjLmxhYmVsIHx8IGMubmFtZSxcclxuICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgIGJvbGQ6IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGFzIENlbGwpKVxyXG4gICAgICB9XSBhcyBSb3dbXTtcclxuICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgociwgaSkgPT4gcm93cy5wdXNoKFxyXG4gICAgICB7XHJcbiAgICAgICAgaW5kZXg6IGkgKyAyLFxyXG4gICAgICAgIGNlbGxzOiBjb2x1bW5zLm1hcCgoYywgaikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXNudW1iZXIgPSBjLnR5cGUgPT09ICdDdXJyZW5jeSc7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiBpc251bWJlciA/ICdudW1iZXInIDogJ3RleHQnLFxyXG4gICAgICAgICAgICBpbmRleDogaiArIDEsIHZhbHVlOiByW2MubmFtZV0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0LFxyXG4gICAgICAgICAgICAgIGhBbGlnbjogaXNudW1iZXIgPyAncmlnaHQnIDogJ2dlbmVyYWwnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gYXMgQ2VsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9IGFzIFJvdykpO1xyXG5cclxuICAgIGNvbnN0IGJvb2sgPSBuZXcgV29ya2Jvb2soXHJcbiAgICAgIHtcclxuICAgICAgICB3b3Jrc2hlZXRzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGVuYWJsZVJ0bDogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTaGVldE4nLCAxKSxcclxuICAgICAgICAgICAgY29sdW1uczogY29sdW1ucy5tYXAoKF8sIGkpID0+ICh7IGluZGV4OiBpICsgMSwgd2lkdGg6IDI1MCB9IGFzIENvbHVtbikpLFxyXG4gICAgICAgICAgICByb3dzXHJcbiAgICAgICAgICB9IGFzIFdvcmtzaGVldFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgICd4bHN4J1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLm5hbWVPZih0aGlzLmF4ZXMsIHRoaXMuY3ViZSkuXHJcbiAgICAgIHN1YnNjcmliZShvID0+XHJcbiAgICAgICAgYm9vay5zYXZlKGAke3RoaXMuX2N1YmUudGl0bGV9ICR7b30ueGxzeGApKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2FkaW5nJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxvcmVJdGVtRXZlbnQge1xyXG4gIGtleXM6IChzdHJpbmcgfCBudW1iZXIpW107XHJcbiAgdGVtcGxhdGU6IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgQ2VsbCB7IH1cclxuIiwiPG1hdC10YWJsZSBtYXRTb3J0IFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBAbGlzdD5cclxuICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiYy5uYW1lXCIgKm5nRm9yPVwibGV0IGMgb2YgY29sdW1uc1wiPlxyXG4gICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3tjLmxhYmVsIHx8IGMubmFtZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIFtjbGFzcy5maWd1cmVdPVwiYy50eXBlID09PSAnQ3VycmVuY3knXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImMudHlwZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidEYXRlJ1wiPlxyXG4gICAgICAgICAge3tlbGVtZW50W2MubmFtZV0gfCBhbURhdGVGb3JtYXQ6ICdsbCd9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidOdW1iZXInXCI+XHJcbiAgICAgICAgICB7e2VsZW1lbnRbYy5uYW1lXSB8IG51bWJlciB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidDdXJyZW5jeSdcIj5cclxuICAgICAgICAgIHt7ZWxlbWVudFtjLm5hbWVdIHwgY3VycmVuY3kgOiAoZWxlbWVudC5jdXJyZW5jeUNvZGUgfHwgY3VycmVuY3lDb2RlKSA6ICdzeW1ib2wnIDogQ1VSUkVOQ1lfRk9STUFUIH19XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJlbGVtZW50Lm1vZGVsW2MubmFtZV1cIiBkaXNhYmxlZD1cInRydWVcIiAqbmdTd2l0Y2hDYXNlPVwiJ0Jvb2xlYW4nXCI+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAge3tlbGVtZW50W2MubmFtZV0gfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC1jZWxsPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlXCI+PC9tYXQtaGVhZGVyLXJvdz5cclxuICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IGVsZW1lbnQ7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgKGNsaWNrKT1cImV4cGFuZChlbGVtZW50KVwiIFtjbGFzcy5zZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIiBAaXRlbT48L21hdC1yb3c+XHJcbjwvbWF0LXRhYmxlPlxyXG48bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIGhpZGVQYWdlU2l6ZSBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj48L21hdC1wYWdpbmF0b3I+XHJcbiJdfQ==
@@ -1,10 +1,12 @@
1
1
  import { Component, ViewChild, InjectionToken, Inject } from '@angular/core';
2
- import { Subject, merge, of } from 'rxjs';
2
+ import { Subject, merge } from 'rxjs';
3
3
  import { debounceTime, takeUntil, filter, map, switchMap, tap } from 'rxjs/operators';
4
4
  import { MatExpansionPanel } from '@angular/material/expansion';
5
- import { COMMA, ENTER } from '@angular/cdk/keycodes';
5
+ import { MatChipInput } from '@angular/material/chips';
6
+ import { COMMA, ENTER, SEMICOLON } from '@angular/cdk/keycodes';
6
7
  import { BIZDOC_CONFIG } from '../core/configuration';
7
8
  import { isString } from '../core/functions';
9
+ import { MatInput } from '@angular/material/input';
8
10
  import * as i0 from "@angular/core";
9
11
  import * as i1 from "@angular/cdk/overlay";
10
12
  import * as i2 from "@angular/forms";
@@ -25,6 +27,7 @@ import * as i16 from "../core/popup/tooltip.directive";
25
27
  import * as i17 from "@angular/material/input";
26
28
  import * as i18 from "@angular/common";
27
29
  import * as i19 from "../core/pipes/translate.pipe";
30
+ import * as i20 from "../core/pipes/user-name.pipe";
28
31
  export const OPTION_PANEL = new InjectionToken('options');
29
32
  /** options component*/
30
33
  export class OptionsComponent {
@@ -46,7 +49,7 @@ export class OptionsComponent {
46
49
  this.language = this._fb.control(this._session.language);
47
50
  this.aRIA = this._fb.control(this._session.aria);
48
51
  this.languages = this._session.languages;
49
- this.gusers = this._fb.control(null);
52
+ this.gusers = this._fb.control([]);
50
53
  this.substitueId = this._fb.control(null);
51
54
  this.form = this._fb.group({
52
55
  notifications: this._fb.group({
@@ -80,8 +83,7 @@ export class OptionsComponent {
80
83
  users: this._fb.control(null, this._requiredValidator)
81
84
  })
82
85
  });
83
- this.separatorKeysCodes = [ENTER, COMMA];
84
- this._me = this._session.userId;
86
+ this.separatorKeysCodes = [ENTER, COMMA, SEMICOLON];
85
87
  this.display = (item) => {
86
88
  return item ? item.name : null;
87
89
  };
@@ -117,17 +119,33 @@ export class OptionsComponent {
117
119
  emails.controls['active'].valueChanges.pipe(takeUntil(this._destroy)).
118
120
  subscribe(active => this._toggle(emails, active, 'mail', 'chat', 'notifications', 'events'));
119
121
  grantAccess.controls['active'].valueChanges.pipe(takeUntil(this._destroy)).
120
- subscribe(active => active ? this.gusers.enable() : this.gusers.enable());
122
+ subscribe(active => {
123
+ if (active) {
124
+ this.gusers.enable();
125
+ this.grantInput.focus();
126
+ }
127
+ else
128
+ this.gusers.enable();
129
+ });
121
130
  outOfOffice.controls['active'].valueChanges.pipe(takeUntil(this._destroy)).
122
131
  subscribe(active => {
123
- active ? this.substitueId.enable() : this.substitueId.disable();
132
+ if (active) {
133
+ this.substitueId.enable();
134
+ this.substitueInput.focus();
135
+ }
136
+ else
137
+ this.substitueId.disable();
124
138
  this._toggle(outOfOffice, active, 'from');
125
139
  this._toggle(outOfOffice, active && outOfOffice.controls['from'].value, 'to');
126
140
  });
127
141
  outOfOffice.controls['from'].valueChanges.pipe(takeUntil(this._destroy)).
128
142
  subscribe(from => this._toggle(outOfOffice, from !== null, 'to'));
129
- this.gusers$ = this.gusers.valueChanges.pipe(takeUntil(this._destroy), switchMap(v => isString(v) ? this._accounts.findAll(v) : of([])), map(r => r.filter(u => u.id !== this._me)));
130
- this.susers$ = this.substitueId.valueChanges.pipe(takeUntil(this._destroy), tap(v => !v && outOfOffice.controls['substitueId'].setValue(null)), switchMap(v => isString(v) ? this._accounts.findAll(v) : of([])), map(r => r.filter(u => u.id !== this._me)));
143
+ this.gusers$ = this.gusers.valueChanges.pipe(takeUntil(this._destroy), filter(v => isString(v)), debounceTime(100), switchMap(v => this._accounts.findAll(v)), map(r => {
144
+ const exclude = grantAccess.value.users?.slice() || [];
145
+ exclude.push(this._session.profile.userId);
146
+ return r.filter(u => exclude.indexOf(u.id) < 0);
147
+ }));
148
+ this.susers$ = this.substitueId.valueChanges.pipe(takeUntil(this._destroy), tap(v => !v && outOfOffice.controls['substitueId'].setValue(null)), filter(v => isString(v)), switchMap(v => this._accounts.findAll(v)), map(r => r.filter(u => u.id !== this._session.profile.userId)));
131
149
  if (options.outOfOffice.substitueId)
132
150
  this._accounts.get(options.outOfOffice.substitueId).subscribe(u => this.substitueId.setValue(u, { emitEvent: false }));
133
151
  if (this._option)
@@ -152,9 +170,6 @@ export class OptionsComponent {
152
170
  toggleSound() {
153
171
  this.form.controls['notifications'].controls['sound'].setValue(!this.options.notifications.sound);
154
172
  }
155
- nameOf(id) {
156
- return this._accounts.get(id).pipe(map(u => u.name));
157
- }
158
173
  addTag(event) {
159
174
  const input = event.input;
160
175
  const value = event.value;
@@ -207,21 +222,27 @@ export class OptionsComponent {
207
222
  }
208
223
  }
209
224
  OptionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: OptionsComponent, deps: [{ token: OPTION_PANEL }, { token: i1.OverlayRef }, { token: i2.FormBuilder }, { token: i3.AccountService }, { token: i4.PromptService }, { token: i5.SessionService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
210
- OptionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: OptionsComponent, selector: "bizdoc-options", viewQueries: [{ propertyName: "outOfOffice", first: true, predicate: ["outOfOffice"], descendants: true, read: MatExpansionPanel, static: true }, { propertyName: "notifications", first: true, predicate: ["notifications"], descendants: true, read: MatExpansionPanel, static: true }], ngImport: i0, template: "<form [formGroup]=\"form\" autocomplete=\"off\">\r\n <mat-accordion>\r\n <mat-expansion-panel #notifications>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Notifications' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>notifications</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"notifications\" fxLayout=\"column\">\r\n <div fxLayout=\"row\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"toggleSound()\" [bizdocTooltip]=\"'Sound'|translate\"><mat-icon>{{options.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n <br />\r\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #emails>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Emails' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>alternate_email</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"emails\" fxLayout=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #outOfOffice>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'OutOfOffice' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>trending_flat</mat-icon>-->\r\n <!--{{'OutOfOfficeTip' | translate}}-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"outOfOffice\" fxLayout=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field fxFlex>\r\n <input matInput [formControl]=\"substitueId\" type=\"search\" [matAutocomplete]=\"sauto\"\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"setSubstitute($event)\">\r\n <mat-option *ngFor=\"let u of susers$ | async\" [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <div>\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"from\" formControlName=\"from\" placeholder=\"{{'From'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"from\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #from></mat-datepicker>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"to\" formControlName=\"to\" [min]=\"form.value.outOfOffice?.from\" placeholder=\"{{'To'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"to\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #to></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #grantAccess>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'GrantAccess' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>account_circle</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"grantAccess\" class=\"grant-section\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <mat-form-field>\r\n <mat-chip-list #grantList [attr.aria-label]=\"\">\r\n <mat-chip *ngFor=\"let u of (form.value.grantAccess.users || [])\"\r\n [removable]=\"form.value.grantAccess.active\"\r\n (removed)=\"removeGrant(u)\">\r\n {{nameOf(u) | async}}\r\n <mat-icon matChipRemove *ngIf=\"form.value.grantAccess.active\">cancel</mat-icon>\r\n </mat-chip>\r\n <input [formControl]=\"gusers\" placeholder=\"{{'Users'| translate}}\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n <mat-option *ngFor=\"let u of gusers$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #preferences>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Preferences' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon></mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-chip-list #chips [selectable]=\"false\" multiple>\r\n <mat-chip *ngFor=\"let item of form.value.tags\"\r\n [removable]=\"true\" (removed)=\"removeTag(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"'Tags'|translate\"\r\n [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-chip-list>\r\n </mat-form-field>\r\n <mat-slide-toggle [formControl]=\"aRIA\">{{'ARIA' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</form>\r\n", styles: [":host{max-width:80vw}.grant-section{display:flex;flex-direction:column}\n"], components: [{ type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i6.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i11.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i12.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i13.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i13.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i14.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { type: i6.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i6.MatExpansionPanelDescription, selector: "mat-panel-description" }, { type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i15.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i15.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i17.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i18.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i13.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i10.MatSuffix, selector: "[matSuffix]" }, { type: i14.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.MatChipRemove, selector: "[matChipRemove]" }, { type: i14.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }], pipes: { "translate": i19.TranslatePipe, "async": i18.AsyncPipe } });
225
+ OptionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: OptionsComponent, selector: "bizdoc-options", viewQueries: [{ propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }, { propertyName: "outOfOffice", first: true, predicate: ["outOfOffice"], descendants: true, read: MatExpansionPanel, static: true }, { propertyName: "notifications", first: true, predicate: ["notifications"], descendants: true, read: MatExpansionPanel, static: true }], ngImport: i0, template: "<form [formGroup]=\"form\" autocomplete=\"off\">\r\n <mat-accordion>\r\n <mat-expansion-panel #notifications>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Notifications' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>notifications</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"notifications\" fxLayout=\"column\">\r\n <div fxLayout=\"row\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"toggleSound()\" [bizdocTooltip]=\"'Sound'|translate\"><mat-icon>{{options.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n <br />\r\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #emails>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Emails' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>alternate_email</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"emails\" fxLayout=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #outOfOffice>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'OutOfOffice' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>trending_flat</mat-icon>-->\r\n <!--{{'OutOfOfficeTip' | translate}}-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"outOfOffice\" fxLayout=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field fxFlex>\r\n <input matInput [formControl]=\"substitueId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"setSubstitute($event)\">\r\n <mat-option *ngFor=\"let u of susers$ | async\" [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <div>\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"from\" formControlName=\"from\" placeholder=\"{{'From'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"from\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #from></mat-datepicker>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"to\" formControlName=\"to\" [min]=\"form.value.outOfOffice?.from\" placeholder=\"{{'To'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"to\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #to></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #grantAccess>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'GrantAccess' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>account_circle</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"grantAccess\" class=\"grant-section\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <mat-form-field>\r\n <mat-chip-list #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n <mat-chip *ngFor=\"let u of form.value.grantAccess.users || []\"\r\n (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [formControl]=\"gusers\" placeholder=\"{{'Users'| translate}}\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n <mat-option *ngFor=\"let u of gusers$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #preferences>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Preferences' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon></mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-chip-list #chips [selectable]=\"false\" multiple>\r\n <mat-chip *ngFor=\"let item of form.value.tags\"\r\n [removable]=\"true\" (removed)=\"removeTag(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"'Tags'|translate\"\r\n [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-chip-list>\r\n </mat-form-field>\r\n <mat-slide-toggle [formControl]=\"aRIA\">{{'ARIA' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</form>\r\n", styles: [":host{max-width:80vw}.grant-section{display:flex;flex-direction:column}\n"], components: [{ type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i6.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i11.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i12.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i13.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i13.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { type: i14.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { type: i6.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i6.MatExpansionPanelDescription, selector: "mat-panel-description" }, { type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i15.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i15.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i17.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i18.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i13.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { type: i10.MatSuffix, selector: "[matSuffix]" }, { type: i14.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i14.MatChipRemove, selector: "[matChipRemove]" }, { type: i14.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i19.TranslatePipe, "async": i18.AsyncPipe, "userName": i20.UserNamePipe } });
211
226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: OptionsComponent, decorators: [{
212
227
  type: Component,
213
- args: [{ selector: 'bizdoc-options', template: "<form [formGroup]=\"form\" autocomplete=\"off\">\r\n <mat-accordion>\r\n <mat-expansion-panel #notifications>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Notifications' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>notifications</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"notifications\" fxLayout=\"column\">\r\n <div fxLayout=\"row\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"toggleSound()\" [bizdocTooltip]=\"'Sound'|translate\"><mat-icon>{{options.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n <br />\r\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #emails>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Emails' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>alternate_email</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"emails\" fxLayout=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #outOfOffice>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'OutOfOffice' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>trending_flat</mat-icon>-->\r\n <!--{{'OutOfOfficeTip' | translate}}-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"outOfOffice\" fxLayout=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field fxFlex>\r\n <input matInput [formControl]=\"substitueId\" type=\"search\" [matAutocomplete]=\"sauto\"\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"setSubstitute($event)\">\r\n <mat-option *ngFor=\"let u of susers$ | async\" [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <div>\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"from\" formControlName=\"from\" placeholder=\"{{'From'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"from\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #from></mat-datepicker>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"to\" formControlName=\"to\" [min]=\"form.value.outOfOffice?.from\" placeholder=\"{{'To'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"to\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #to></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #grantAccess>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'GrantAccess' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>account_circle</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"grantAccess\" class=\"grant-section\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <mat-form-field>\r\n <mat-chip-list #grantList [attr.aria-label]=\"\">\r\n <mat-chip *ngFor=\"let u of (form.value.grantAccess.users || [])\"\r\n [removable]=\"form.value.grantAccess.active\"\r\n (removed)=\"removeGrant(u)\">\r\n {{nameOf(u) | async}}\r\n <mat-icon matChipRemove *ngIf=\"form.value.grantAccess.active\">cancel</mat-icon>\r\n </mat-chip>\r\n <input [formControl]=\"gusers\" placeholder=\"{{'Users'| translate}}\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n <mat-option *ngFor=\"let u of gusers$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #preferences>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Preferences' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon></mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-chip-list #chips [selectable]=\"false\" multiple>\r\n <mat-chip *ngFor=\"let item of form.value.tags\"\r\n [removable]=\"true\" (removed)=\"removeTag(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"'Tags'|translate\"\r\n [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-chip-list>\r\n </mat-form-field>\r\n <mat-slide-toggle [formControl]=\"aRIA\">{{'ARIA' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</form>\r\n", styles: [":host{max-width:80vw}.grant-section{display:flex;flex-direction:column}\n"] }]
228
+ args: [{ selector: 'bizdoc-options', template: "<form [formGroup]=\"form\" autocomplete=\"off\">\r\n <mat-accordion>\r\n <mat-expansion-panel #notifications>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Notifications' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>notifications</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"notifications\" fxLayout=\"column\">\r\n <div fxLayout=\"row\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"toggleSound()\" [bizdocTooltip]=\"'Sound'|translate\"><mat-icon>{{options.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n <br />\r\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #emails>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Emails' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>alternate_email</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"emails\" fxLayout=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #outOfOffice>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'OutOfOffice' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>trending_flat</mat-icon>-->\r\n <!--{{'OutOfOfficeTip' | translate}}-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"outOfOffice\" fxLayout=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field fxFlex>\r\n <input matInput [formControl]=\"substitueId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"setSubstitute($event)\">\r\n <mat-option *ngFor=\"let u of susers$ | async\" [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <div>\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"from\" formControlName=\"from\" placeholder=\"{{'From'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"from\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #from></mat-datepicker>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"to\" formControlName=\"to\" [min]=\"form.value.outOfOffice?.from\" placeholder=\"{{'To'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"to\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #to></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #grantAccess>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'GrantAccess' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon>account_circle</mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div formGroupName=\"grantAccess\" class=\"grant-section\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <mat-form-field>\r\n <mat-chip-list #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n <mat-chip *ngFor=\"let u of form.value.grantAccess.users || []\"\r\n (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [formControl]=\"gusers\" placeholder=\"{{'Users'| translate}}\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n <mat-option *ngFor=\"let u of gusers$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel #preferences>\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{'Preferences' | translate}}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <!--<mat-icon></mat-icon>-->\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-chip-list #chips [selectable]=\"false\" multiple>\r\n <mat-chip *ngFor=\"let item of form.value.tags\"\r\n [removable]=\"true\" (removed)=\"removeTag(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"'Tags'|translate\"\r\n [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-chip-list>\r\n </mat-form-field>\r\n <mat-slide-toggle [formControl]=\"aRIA\">{{'ARIA' | translate}}</mat-slide-toggle>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</form>\r\n", styles: [":host{max-width:80vw}.grant-section{display:flex;flex-direction:column}\n"] }]
214
229
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
215
230
  type: Inject,
216
231
  args: [OPTION_PANEL]
217
232
  }] }, { type: i1.OverlayRef }, { type: i2.FormBuilder }, { type: i3.AccountService }, { type: i4.PromptService }, { type: i5.SessionService }, { type: undefined, decorators: [{
218
233
  type: Inject,
219
234
  args: [BIZDOC_CONFIG]
220
- }] }]; }, propDecorators: { outOfOffice: [{
235
+ }] }]; }, propDecorators: { substitueInput: [{
236
+ type: ViewChild,
237
+ args: ['substitueInput', { read: MatInput }]
238
+ }], grantInput: [{
239
+ type: ViewChild,
240
+ args: ['grantInput', { read: MatChipInput }]
241
+ }], outOfOffice: [{
221
242
  type: ViewChild,
222
243
  args: ['outOfOffice', { read: MatExpansionPanel, static: true }]
223
244
  }], notifications: [{
224
245
  type: ViewChild,
225
246
  args: ['notifications', { read: MatExpansionPanel, static: true }]
226
247
  }] } });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRyxPQUFPLEVBQUUsT0FBTyxFQUFjLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFaEUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUTdDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBYSxTQUFTLENBQUMsQ0FBQztBQVd0RSx1QkFBdUI7QUFDdkIsTUFBTSxPQUFPLGdCQUFnQjtJQXFEM0IsbUJBQW1CO0lBQ25CLFlBQTBDLE9BQW1CLEVBQUUsVUFBc0IsRUFBVSxHQUFnQixFQUNyRyxTQUF5QixFQUFVLEdBQWtCLEVBQ3JELFFBQXdCLEVBQ1QsTUFBb0I7UUFISCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQWtDLFFBQUcsR0FB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LENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBbUM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFlLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekgsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7NkdBcE5VLGdCQUFnQixrQkFzRFAsWUFBWSwySkFHdEIsYUFBYTtpR0F6RFosZ0JBQWdCLDZJQWtETyxpQkFBaUIsdUhBQ2YsaUJBQWlCLDJDQ2pGdkQsaTFQQXFKQTsyRkR2SGEsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLGdCQUFnQjs7MEJBMkRiLE1BQU07MkJBQUMsWUFBWTs7MEJBRzdCLE1BQU07MkJBQUMsYUFBYTs0Q0FQOEMsV0FBVztzQkFBL0UsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSSxhQUFhO3NCQUFuRixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgbWVyZ2UsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvblBhbmVsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcclxuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XHJcbmltcG9ydCB7IENPTU1BLCBFTlRFUiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBCSVpET0NfQ09ORklHLCBCaXpEb2NDb25maWcgfSBmcm9tICcuLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL2NvcmUvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgT3B0aW9ucywgVXNlckluZm8gfSBmcm9tICcuLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IHR5cGUgT3B0aW9uVHlwZSA9ICdub3RpZmljYXRpb25zJyB8ICdvdXRvZm9mZmljZScgfCAnZW1haWxzJyB8ICdncmFudGFjY2Vzcyc7XHJcblxyXG5leHBvcnQgY29uc3QgT1BUSU9OX1BBTkVMID0gbmV3IEluamVjdGlvblRva2VuPE9wdGlvbkRhdGE+KCdvcHRpb25zJyk7XHJcblxyXG5pbnRlcmZhY2UgT3B0aW9uRGF0YSB7XHJcbiAgb3BlbjogT3B0aW9uVHlwZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2Mtb3B0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL29wdGlvbnMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG4vKiogb3B0aW9ucyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgT3B0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIF9yZXF1aXJlZFZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XHJcbiAgICBjb25zdCBwYXJlbnQgPSAoY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwKTtcclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmNvbnRyb2xzWydhY3RpdmUnXS52YWx1ZSAmJiAhY29udHJvbC52YWx1ZSkgcmV0dXJuIHtcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH1cclxuICB9XHJcbiAgcmVhZG9ubHkgbGFuZ3VhZ2UgPSB0aGlzLl9mYi5jb250cm9sKHRoaXMuX3Nlc3Npb24ubGFuZ3VhZ2UpO1xyXG4gIHJlYWRvbmx5IGFSSUEgPSB0aGlzLl9mYi5jb250cm9sKHRoaXMuX3Nlc3Npb24uYXJpYSk7XHJcbiAgcmVhZG9ubHkgbGFuZ3VhZ2VzID0gdGhpcy5fc2Vzc2lvbi5sYW5ndWFnZXM7XHJcbiAgcmVhZG9ubHkgZ3VzZXJzID0gdGhpcy5fZmIuY29udHJvbChudWxsKTtcclxuICByZWFkb25seSBzdWJzdGl0dWVJZCA9IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCk7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIG5vdGlmaWNhdGlvbnM6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgbGlrZXM6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjb21tZW50TXlEb2N1bWVudDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGNvbW1lbnRBbnlEb2N1bWVudDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHVwY29taW5nRXZlbnRzOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgdGFnZ2VkOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgYW55RG9jdW1lbnRTdGF0ZUNoYW5nZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIG15RG9jdW1lbnRTdGF0ZUNoYW5nZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGN1YmVBbm9tYWx5OiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgc291bmQ6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgfSksXHJcbiAgICB0YWdzOiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxyXG4gICAgZW1haWxzOiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIGFjdGl2ZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIG1haWw6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjaGF0OiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgbm90aWZpY2F0aW9uczogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGV2ZW50czogdGhpcy5fZmIuY29udHJvbChmYWxzZSlcclxuICAgIH0pLFxyXG4gICAgb3V0T2ZPZmZpY2U6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgc3Vic3RpdHVlSWQ6IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgdGhpcy5fcmVxdWlyZWRWYWxpZGF0b3IpLFxyXG4gICAgICBmcm9tOiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxyXG4gICAgICB0bzogdGhpcy5fZmIuY29udHJvbChudWxsKVxyXG4gICAgfSksXHJcbiAgICBncmFudEFjY2VzczogdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBhY3RpdmU6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICB1c2VyczogdGhpcy5fZmIuY29udHJvbChudWxsLCB0aGlzLl9yZXF1aXJlZFZhbGlkYXRvcilcclxuICAgIH0pXHJcbiAgfSk7XHJcbiAgc3VzZXJzJDogT2JzZXJ2YWJsZTxVc2VySW5mb1tdPjtcclxuICBndXNlcnMkOiBPYnNlcnZhYmxlPFVzZXJJbmZvW10+O1xyXG4gIHZvYXRpbmc6IGJvb2xlYW47XHJcbiAgb3B0aW9uczogT3B0aW9ucztcclxuICByZWFkb25seSBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSLCBDT01NQV07XHJcbiAgQFZpZXdDaGlsZCgnb3V0T2ZPZmZpY2UnLCB7IHJlYWQ6IE1hdEV4cGFuc2lvblBhbmVsLCBzdGF0aWM6IHRydWUgfSkgb3V0T2ZPZmZpY2U6IE1hdEV4cGFuc2lvblBhbmVsO1xyXG4gIEBWaWV3Q2hpbGQoJ25vdGlmaWNhdGlvbnMnLCB7IHJlYWQ6IE1hdEV4cGFuc2lvblBhbmVsLCBzdGF0aWM6IHRydWUgfSkgbm90aWZpY2F0aW9uczogTWF0RXhwYW5zaW9uUGFuZWw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbWUgPSB0aGlzLl9zZXNzaW9uLnVzZXJJZDtcclxuICAvKiogb3B0aW9ucyBjdG9yICovXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChPUFRJT05fUEFORUwpIHByaXZhdGUgX29wdGlvbjogT3B0aW9uRGF0YSwgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiwgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfYWNjb3VudHM6IEFjY291bnRTZXJ2aWNlLCBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgQEluamVjdChCSVpET0NfQ09ORklHKSBjb25maWc6IEJpekRvY0NvbmZpZykge1xyXG4gICAgdGhpcy52b2F0aW5nID0gIWNvbmZpZy5jb21tZW50cyB8fCBjb25maWcuY29tbWVudHMudm90aW5nICE9PSBmYWxzZTtcclxuICAgIG1lcmdlKG92ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoZmlsdGVyKGsgPT4gay5rZXlDb2RlID09PSAyNykpLCBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiBvdmVybGF5UmVmLmRpc3Bvc2UoKSk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hUklBLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSh2ID0+IHRoaXMuX3Nlc3Npb24uYXJpYSA9IHYpO1xyXG4gICAgdGhpcy5sYW5ndWFnZS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4gdGhpcy5fc2Vzc2lvbi5sYW5ndWFnZSA9IHYpO1xyXG4gICAgY29uc3Qgb3V0T2ZPZmZpY2UgPSB0aGlzLmZvcm0uY29udHJvbHNbJ291dE9mT2ZmaWNlJ10gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3QgZ3JhbnRBY2Nlc3MgPSB0aGlzLmZvcm0uY29udHJvbHNbJ2dyYW50QWNjZXNzJ10gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHRoaXMuZm9ybS5jb250cm9sc1snbm90aWZpY2F0aW9ucyddIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGVtYWlscyA9IHRoaXMuZm9ybS5jb250cm9sc1snZW1haWxzJ10gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5vcHRpb25zO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUob3B0aW9ucywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgaWYgKCFvcHRpb25zLm5vdGlmaWNhdGlvbnMuYWN0aXZlKVxyXG4gICAgICB0aGlzLl90b2dnbGUobm90aWZpY2F0aW9ucywgZmFsc2UsICdsaWtlcycsXHJcbiAgICAgICAgJ2NvbW1lbnRNeURvY3VtZW50JyxcclxuICAgICAgICAnY29tbWVudEFueURvY3VtZW50JyxcclxuICAgICAgICAndXBjb21pbmdFdmVudHMnLFxyXG4gICAgICAgICd0YWdnZWQnLFxyXG4gICAgICAgICdhbnlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAnbXlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAnY3ViZUFub21hbHknKTtcclxuICAgIGlmICghb3B0aW9ucy5lbWFpbHMuYWN0aXZlKVxyXG4gICAgICB0aGlzLl90b2dnbGUoZW1haWxzLCBmYWxzZSwgJ21haWwnLFxyXG4gICAgICAgICdjaGF0JyxcclxuICAgICAgICAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgJ2V2ZW50cycpO1xyXG4gICAgaWYgKCFvcHRpb25zLmdyYW50QWNjZXNzLmFjdGl2ZSlcclxuICAgICAgdGhpcy5ndXNlcnMuZGlzYWJsZSgpO1xyXG4gICAgaWYgKCFvcHRpb25zLm91dE9mT2ZmaWNlLmFjdGl2ZSkge1xyXG4gICAgICB0aGlzLnN1YnN0aXR1ZUlkLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5fdG9nZ2xlKG91dE9mT2ZmaWNlLCBmYWxzZSwgJ2Zyb20nLCAndG8nKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFvcHRpb25zLm91dE9mT2ZmaWNlLmZyb20pXHJcbiAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgZmFsc2UsICd0bycpO1xyXG4gICAgLy8gY2hhbmdlXHJcbiAgICBub3RpZmljYXRpb25zLmNvbnRyb2xzWydhY3RpdmUnXS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHRoaXMuX3RvZ2dsZShub3RpZmljYXRpb25zLCBhY3RpdmUsICdsaWtlcycsXHJcbiAgICAgICAgJ2NvbW1lbnRNeURvY3VtZW50JyxcclxuICAgICAgICAnY29tbWVudEFueURvY3VtZW50JyxcclxuICAgICAgICAndXBjb21pbmdFdmVudHMnLFxyXG4gICAgICAgICd0YWdnZWQnLFxyXG4gICAgICAgICdhbnlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAnbXlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAnY3ViZUFub21hbHknKSk7XHJcbiAgICBlbWFpbHMuY29udHJvbHNbJ2FjdGl2ZSddLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZShhY3RpdmUgPT4gdGhpcy5fdG9nZ2xlKGVtYWlscywgYWN0aXZlLCAnbWFpbCcsXHJcbiAgICAgICAgJ2NoYXQnLFxyXG4gICAgICAgICdub3RpZmljYXRpb25zJyxcclxuICAgICAgICAnZXZlbnRzJykpO1xyXG4gICAgZ3JhbnRBY2Nlc3MuY29udHJvbHNbJ2FjdGl2ZSddLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZShhY3RpdmUgPT4gYWN0aXZlID8gdGhpcy5ndXNlcnMuZW5hYmxlKCkgOiB0aGlzLmd1c2Vycy5lbmFibGUoKSk7XHJcbiAgICBvdXRPZk9mZmljZS5jb250cm9sc1snYWN0aXZlJ10udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKGFjdGl2ZSA9PiB7XHJcbiAgICAgICAgYWN0aXZlID8gdGhpcy5zdWJzdGl0dWVJZC5lbmFibGUoKSA6IHRoaXMuc3Vic3RpdHVlSWQuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgYWN0aXZlLCAnZnJvbScpO1xyXG4gICAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgYWN0aXZlICYmIG91dE9mT2ZmaWNlLmNvbnRyb2xzWydmcm9tJ10udmFsdWUsICd0bycpO1xyXG4gICAgICB9KTtcclxuICAgIG91dE9mT2ZmaWNlLmNvbnRyb2xzWydmcm9tJ10udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKGZyb20gPT5cclxuICAgICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGZyb20gIT09IG51bGwsICd0bycpKTtcclxuICAgIHRoaXMuZ3VzZXJzJCA9IHRoaXMuZ3VzZXJzLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcclxuICAgICAgc3dpdGNoTWFwKHYgPT4gaXNTdHJpbmcodikgPyB0aGlzLl9hY2NvdW50cy5maW5kQWxsKHYpIDogb2YoW10pKSxcclxuICAgICAgbWFwKHIgPT4gci5maWx0ZXIodSA9PiB1LmlkICE9PSB0aGlzLl9tZSkpKTtcclxuICAgIHRoaXMuc3VzZXJzJCA9IHRoaXMuc3Vic3RpdHVlSWQudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxyXG4gICAgICB0YXAodiA9PlxyXG4gICAgICAgICF2ICYmIG91dE9mT2ZmaWNlLmNvbnRyb2xzWydzdWJzdGl0dWVJZCddLnNldFZhbHVlKG51bGwpXHJcbiAgICAgICksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IGlzU3RyaW5nKHYpID8gdGhpcy5fYWNjb3VudHMuZmluZEFsbCh2KSA6IG9mKFtdKSksXHJcbiAgICAgIG1hcChyID0+IHIuZmlsdGVyKHUgPT4gdS5pZCAhPT0gdGhpcy5fbWUpKSk7XHJcbiAgICBpZiAob3B0aW9ucy5vdXRPZk9mZmljZS5zdWJzdGl0dWVJZClcclxuICAgICAgdGhpcy5fYWNjb3VudHMuZ2V0KG9wdGlvbnMub3V0T2ZPZmZpY2Uuc3Vic3RpdHVlSWQpLnN1YnNjcmliZSh1ID0+XHJcbiAgICAgICAgdGhpcy5zdWJzdGl0dWVJZC5zZXRWYWx1ZSh1LCB7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xyXG4gICAgaWYgKHRoaXMuX29wdGlvbilcclxuICAgICAgc3dpdGNoICh0aGlzLl9vcHRpb24ub3Blbikge1xyXG4gICAgICAgIGNhc2UgJ291dG9mb2ZmaWNlJzpcclxuICAgICAgICAgIHRoaXMub3V0T2ZPZmZpY2Uub3BlbigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5vcGVuKCk7XHJcbiAgICAgIH1cclxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT5cclxuICAgICAgdGhpcy5mb3JtLnZhbGlkICYmXHJcbiAgICAgIHRoaXMuX3Nlc3Npb24udXBkYXRlKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKS5zdWJzY3JpYmUodW5kZWZpbmVkLCAoKSA9PiB0aGlzLl9zYi5lcnJvcigpKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RvZ2dsZShncm91cDogRm9ybUdyb3VwLCBhY3RpdmU6IGJvb2xlYW4sIC4uLmNvbnRyb2xzOiBzdHJpbmdbXSkge1xyXG4gICAgY29udHJvbHMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgaWYgKCFhY3RpdmUpIGdyb3VwLmNvbnRyb2xzW25hbWVdLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICBlbHNlIGdyb3VwLmNvbnRyb2xzW25hbWVdLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgdG9nZ2xlU291bmQoKSB7XHJcbiAgICAodGhpcy5mb3JtLmNvbnRyb2xzWydub3RpZmljYXRpb25zJ10gYXMgRm9ybUdyb3VwKS5jb250cm9sc1snc291bmQnXS5zZXRWYWx1ZSghdGhpcy5vcHRpb25zLm5vdGlmaWNhdGlvbnMuc291bmQpO1xyXG4gIH1cclxuICBuYW1lT2YoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjY291bnRzLmdldChpZCkucGlwZShtYXAodSA9PiB1Lm5hbWUpKTtcclxuICB9XHJcbiAgZGlzcGxheSA9IChpdGVtOiBVc2VySW5mbykgPT4ge1xyXG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLm5hbWUgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYWRkVGFnKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC5pbnB1dDtcclxuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWU7XHJcblxyXG4gICAgLy8gQWRkIG91ciBmcnVpdFxyXG4gICAgaWYgKCh2YWx1ZSB8fCAnJykudHJpbSgpKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy50YWdzLnB1c2godmFsdWUudHJpbSgpKTtcclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc2V0IHRoZSBpbnB1dCB2YWx1ZSBcclxuICAgIGlmIChpbnB1dCkge1xyXG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICByZW1vdmVUYWcodGFnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub3B0aW9ucy50YWdzLnJlbW92ZSh0YWcpO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe30pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gaWRcclxuICAgKi9cclxuICByZW1vdmVHcmFudChpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VycyA9IHRoaXMuZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyBhcyBzdHJpbmdbXTtcclxuICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuaW5kZXhPZihpZCk7XHJcblxyXG4gICAgaWYgKGluZGV4ID49IDApXHJcbiAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbnBcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBhZGRHcmFudChpbnA6IEhUTUxJbnB1dEVsZW1lbnQsIGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VycyA9IHRoaXMuZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyBhcyBzdHJpbmdbXTtcclxuICAgIGNvbnN0IGlkID0gZXZlbnQub3B0aW9uLnZhbHVlIGFzIHN0cmluZztcclxuICAgIGlmICghdXNlcnMpXHJcbiAgICAgICh0aGlzLmZvcm0uY29udHJvbHNbJ2dyYW50QWNjZXNzJ10gYXMgRm9ybUdyb3VwKS5jb250cm9sc1sndXNlcnMnXS5zZXRWYWx1ZShbaWRdKTtcclxuICAgIGVsc2VcclxuICAgICAgdXNlcnMucHVzaChpZCk7XHJcbiAgICBpbnAudmFsdWUgPSAnJztcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHt9KTtcclxuICB9XHJcbiAgc2V0U3Vic3RpdHV0ZShldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xyXG4gICAgKHRoaXMuZm9ybS5jb250cm9sc1snb3V0T2ZPZmZpY2UnXSBhcyBGb3JtR3JvdXApLmNvbnRyb2xzWydzdWJzdGl0dWVJZCddLnNldFZhbHVlKChldmVudC5vcHRpb24udmFsdWUgYXMgVXNlckluZm8pLmlkKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgPG1hdC1hY2NvcmRpb24+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAjbm90aWZpY2F0aW9ucz5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICB7eydOb3RpZmljYXRpb25zJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDwhLS08bWF0LWljb24+bm90aWZpY2F0aW9uczwvbWF0LWljb24+LS0+XHJcbiAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cIm5vdGlmaWNhdGlvbnNcIiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVTb3VuZCgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1NvdW5kJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+e3tvcHRpb25zLm5vdGlmaWNhdGlvbnMuc291bmQgPyAndm9sdW1lX3VwJyA6ICd2b2x1bWVfb2ZmJ319PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJteURvY3VtZW50U3RhdGVDaGFuZ2VcIj57eydNeVN0YXRlQ2hhbmdlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFueURvY3VtZW50U3RhdGVDaGFuZ2VcIj57eydBbnlTdGF0ZUNoYW5nZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50TXlEb2N1bWVudFwiPnt7J0NvbW1lbnRNeURvY3VtZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRBbnlEb2N1bWVudFwiPnt7J0NvbW1lbnRBbnlEb2N1bWVudCcgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJsaWtlc1wiIFtzdHlsZS5kaXNwbGF5XT1cInZvYXRpbmc/Jyc6J25vbmUnXCI+e3snTGlrZWRDb21tZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cInRhZ2dlZFwiPnt7J1RhZ2dlZEluQ29tbWVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwidXBjb21pbmdFdmVudHNcIj57eydVcGNvbWluZ0V2ZW50cycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjdWJlQW5vbWFseVwiPnt7J0N1YmVBbm9tYWx5JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsICNlbWFpbHM+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAge3snRW1haWxzJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDwhLS08bWF0LWljb24+YWx0ZXJuYXRlX2VtYWlsPC9tYXQtaWNvbj4tLT5cclxuICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZW1haWxzXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibWFpbFwiPnt7J01haWxzJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImNoYXRcIj57eydDb252ZXJzYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cIm5vdGlmaWNhdGlvbnNcIj57eydFbWFpbE5vdGlmaWNhdGlvbnMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiZXZlbnRzXCI+e3snQWxhcm1FdmVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwgI291dE9mT2ZmaWNlPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIHt7J091dE9mT2ZmaWNlJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDwhLS08bWF0LWljb24+dHJlbmRpbmdfZmxhdDwvbWF0LWljb24+LS0+XHJcbiAgICAgICAgICA8IS0te3snT3V0T2ZPZmZpY2VUaXAnIHwgdHJhbnNsYXRlfX0tLT5cclxuICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwib3V0T2ZPZmZpY2VcIiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJzdWJzdGl0dWVJZFwiIHR5cGU9XCJzZWFyY2hcIiBbbWF0QXV0b2NvbXBsZXRlXT1cInNhdXRvXCJcclxuICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Fzc29jaWF0ZScgfCB0cmFuc2xhdGVcIiBbcmVxdWlyZWRdPVwiZm9ybS52YWx1ZS5vdXRPZk9mZmljZS5hY3RpdmVcIiAvPlxyXG4gICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI3NhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cInNldFN1YnN0aXR1dGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdSBvZiBzdXNlcnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwidVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7dS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgIDxtYXQtaGludD57eydPdXRPZk9mZmljZVRpcCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiZnJvbVwiIGZvcm1Db250cm9sTmFtZT1cImZyb21cIiBwbGFjZWhvbGRlcj1cInt7J0Zyb20nfCB0cmFuc2xhdGV9fVwiIC8+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgW2Zvcl09XCJmcm9tXCIgbWF0U3VmZml4PjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2Zyb20+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cInRvXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9cIiBbbWluXT1cImZvcm0udmFsdWUub3V0T2ZPZmZpY2U/LmZyb21cIiBwbGFjZWhvbGRlcj1cInt7J1RvJ3wgdHJhbnNsYXRlfX1cIiAvPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIFtmb3JdPVwidG9cIiBtYXRTdWZmaXg+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjdG8+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwgI2dyYW50QWNjZXNzPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIHt7J0dyYW50QWNjZXNzJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDwhLS08bWF0LWljb24+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPi0tPlxyXG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJncmFudEFjY2Vzc1wiIGNsYXNzPVwiZ3JhbnQtc2VjdGlvblwiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWNoaXAtbGlzdCAjZ3JhbnRMaXN0IFthdHRyLmFyaWEtbGFiZWxdPVwiXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdSBvZiAoZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyB8fCBbXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJmb3JtLnZhbHVlLmdyYW50QWNjZXNzLmFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJyZW1vdmVHcmFudCh1KVwiPlxyXG4gICAgICAgICAgICAgIHt7bmFtZU9mKHUpIHwgYXN5bmN9fVxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy5hY3RpdmVcIj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L21hdC1jaGlwPlxyXG4gICAgICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cImd1c2Vyc1wiIHBsYWNlaG9sZGVyPVwie3snVXNlcnMnfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAjZ3JhbnRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJncmFudEF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJncmFudExpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiPlxyXG4gICAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxyXG4gICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2dyYW50QXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJhZGRHcmFudChncmFudElucHV0LCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB1IG9mIGd1c2VycyQgfCBhc3luY1wiIFt2YWx1ZV09XCJ1LmlkXCI+XHJcbiAgICAgICAgICAgICAge3t1Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidS5lbWFpbFwiPiZuYnNwOyAtIHt7dS5lbWFpbH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICA8bWF0LWhpbnQ+e3snR3JhbnRUaXAnIHwgdHJhbnNsYXRlfX08L21hdC1oaW50PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwgI3ByZWZlcmVuY2VzPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIHt7J1ByZWZlcmVuY2VzJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDwhLS08bWF0LWljb24+PC9tYXQtaWNvbj4tLT5cclxuICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxtYXQtY2hpcC1saXN0ICNjaGlwcyBbc2VsZWN0YWJsZV09XCJmYWxzZVwiIG11bHRpcGxlPlxyXG4gICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZm9ybS52YWx1ZS50YWdzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmVkKT1cInJlbW92ZVRhZyhpdGVtKVwiPlxyXG4gICAgICAgICAgICAgIHt7aXRlbX19XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9tYXQtY2hpcD5cclxuICAgICAgICAgICAgPGlucHV0IFtwbGFjZWhvbGRlcl09XCInVGFncyd8dHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcHNcIlxyXG4gICAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiXHJcbiAgICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cImFkZFRhZygkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZm9ybUNvbnRyb2xdPVwiYVJJQVwiPnt7J0FSSUEnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gIDwvbWF0LWFjY29yZGlvbj5cclxuPC9mb3JtPlxyXG4iXX0=
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRyxPQUFPLEVBQUUsT0FBTyxFQUFjLEtBQUssRUFBTSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFxQixNQUFNLHlCQUF5QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUluRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWEsU0FBUyxDQUFDLENBQUM7QUFXdEUsdUJBQXVCO0FBQ3ZCLE1BQU0sT0FBTyxnQkFBZ0I7SUFzRDNCLG1CQUFtQjtJQUNuQixZQUEwQyxPQUFtQixFQUFFLFVBQXNCLEVBQVUsR0FB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QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9GLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBYyxDQUFDO1FBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBYyxDQUFDO1FBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBYyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBYyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1B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RSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNJLGFBQWE7c0JBQW5GLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEluamVjdGlvblRva2VuLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBtZXJnZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uUGFuZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXQsIE1hdENoaXBJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xyXG5pbXBvcnQgeyBDT01NQSwgRU5URVIsIFNFTUlDT0xPTiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBCSVpET0NfQ09ORklHLCBCaXpEb2NDb25maWcgfSBmcm9tICcuLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL2NvcmUvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgT3B0aW9ucywgVXNlckluZm8gfSBmcm9tICcuLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuXHJcbmV4cG9ydCB0eXBlIE9wdGlvblR5cGUgPSAnbm90aWZpY2F0aW9ucycgfCAnb3V0b2ZvZmZpY2UnIHwgJ2VtYWlscycgfCAnZ3JhbnRhY2Nlc3MnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9QVElPTl9QQU5FTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPcHRpb25EYXRhPignb3B0aW9ucycpO1xyXG5cclxuaW50ZXJmYWNlIE9wdGlvbkRhdGEge1xyXG4gIG9wZW46IE9wdGlvblR5cGU7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLW9wdGlvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vcHRpb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9vcHRpb25zLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuLyoqIG9wdGlvbnMgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIE9wdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWRWYWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgY29uc3QgcGFyZW50ID0gKGNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cCk7XHJcbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5jb250cm9sc1snYWN0aXZlJ10udmFsdWUgJiYgIWNvbnRyb2wudmFsdWUpIHJldHVybiB7XHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG4gIEBWaWV3Q2hpbGQoJ3N1YnN0aXR1ZUlucHV0JywgeyByZWFkOiBNYXRJbnB1dCB9KSBzdWJzdGl0dWVJbnB1dDogTWF0SW5wdXQ7XHJcbiAgQFZpZXdDaGlsZCgnZ3JhbnRJbnB1dCcsIHsgcmVhZDogTWF0Q2hpcElucHV0IH0pIGdyYW50SW5wdXQ6IE1hdENoaXBJbnB1dDtcclxuICByZWFkb25seSBsYW5ndWFnZSA9IHRoaXMuX2ZiLmNvbnRyb2wodGhpcy5fc2Vzc2lvbi5sYW5ndWFnZSk7XHJcbiAgcmVhZG9ubHkgYVJJQSA9IHRoaXMuX2ZiLmNvbnRyb2wodGhpcy5fc2Vzc2lvbi5hcmlhKTtcclxuICByZWFkb25seSBsYW5ndWFnZXMgPSB0aGlzLl9zZXNzaW9uLmxhbmd1YWdlcztcclxuICByZWFkb25seSBndXNlcnMgPSB0aGlzLl9mYi5jb250cm9sKFtdKTtcclxuICByZWFkb25seSBzdWJzdGl0dWVJZCA9IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCk7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIG5vdGlmaWNhdGlvbnM6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgbGlrZXM6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjb21tZW50TXlEb2N1bWVudDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGNvbW1lbnRBbnlEb2N1bWVudDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHVwY29taW5nRXZlbnRzOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgdGFnZ2VkOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgYW55RG9jdW1lbnRTdGF0ZUNoYW5nZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIG15RG9jdW1lbnRTdGF0ZUNoYW5nZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGN1YmVBbm9tYWx5OiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgc291bmQ6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgfSksXHJcbiAgICB0YWdzOiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxyXG4gICAgZW1haWxzOiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIGFjdGl2ZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIG1haWw6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjaGF0OiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgbm90aWZpY2F0aW9uczogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGV2ZW50czogdGhpcy5fZmIuY29udHJvbChmYWxzZSlcclxuICAgIH0pLFxyXG4gICAgb3V0T2ZPZmZpY2U6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgc3Vic3RpdHVlSWQ6IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgdGhpcy5fcmVxdWlyZWRWYWxpZGF0b3IpLFxyXG4gICAgICBmcm9tOiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxyXG4gICAgICB0bzogdGhpcy5fZmIuY29udHJvbChudWxsKVxyXG4gICAgfSksXHJcbiAgICBncmFudEFjY2VzczogdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBhY3RpdmU6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICB1c2VyczogdGhpcy5fZmIuY29udHJvbChudWxsLCB0aGlzLl9yZXF1aXJlZFZhbGlkYXRvcilcclxuICAgIH0pXHJcbiAgfSk7XHJcbiAgc3VzZXJzJDogT2JzZXJ2YWJsZTxVc2VySW5mb1tdPjtcclxuICBndXNlcnMkOiBPYnNlcnZhYmxlPFVzZXJJbmZvW10+O1xyXG4gIHZvYXRpbmc6IGJvb2xlYW47XHJcbiAgb3B0aW9uczogT3B0aW9ucztcclxuICByZWFkb25seSBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSLCBDT01NQSwgU0VNSUNPTE9OXTtcclxuICBAVmlld0NoaWxkKCdvdXRPZk9mZmljZScsIHsgcmVhZDogTWF0RXhwYW5zaW9uUGFuZWwsIHN0YXRpYzogdHJ1ZSB9KSBvdXRPZk9mZmljZTogTWF0RXhwYW5zaW9uUGFuZWw7XHJcbiAgQFZpZXdDaGlsZCgnbm90aWZpY2F0aW9ucycsIHsgcmVhZDogTWF0RXhwYW5zaW9uUGFuZWwsIHN0YXRpYzogdHJ1ZSB9KSBub3RpZmljYXRpb25zOiBNYXRFeHBhbnNpb25QYW5lbDtcclxuICAvKiogb3B0aW9ucyBjdG9yICovXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChPUFRJT05fUEFORUwpIHByaXZhdGUgX29wdGlvbjogT3B0aW9uRGF0YSwgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiwgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfYWNjb3VudHM6IEFjY291bnRTZXJ2aWNlLCBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgQEluamVjdChCSVpET0NfQ09ORklHKSBjb25maWc6IEJpekRvY0NvbmZpZykge1xyXG4gICAgdGhpcy52b2F0aW5nID0gIWNvbmZpZy5jb21tZW50cyB8fCBjb25maWcuY29tbWVudHMudm90aW5nICE9PSBmYWxzZTtcclxuICAgIG1lcmdlKG92ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoZmlsdGVyKGsgPT4gay5rZXlDb2RlID09PSAyNykpLCBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiBvdmVybGF5UmVmLmRpc3Bvc2UoKSk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hUklBLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSh2ID0+IHRoaXMuX3Nlc3Npb24uYXJpYSA9IHYpO1xyXG4gICAgdGhpcy5sYW5ndWFnZS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHYgPT4gdGhpcy5fc2Vzc2lvbi5sYW5ndWFnZSA9IHYpO1xyXG4gICAgY29uc3Qgb3V0T2ZPZmZpY2UgPSB0aGlzLmZvcm0uY29udHJvbHNbJ291dE9mT2ZmaWNlJ10gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3QgZ3JhbnRBY2Nlc3MgPSB0aGlzLmZvcm0uY29udHJvbHNbJ2dyYW50QWNjZXNzJ10gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHRoaXMuZm9ybS5jb250cm9sc1snbm90aWZpY2F0aW9ucyddIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGVtYWlscyA9IHRoaXMuZm9ybS5jb250cm9sc1snZW1haWxzJ10gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5vcHRpb25zO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUob3B0aW9ucywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgaWYgKCFvcHRpb25zLm5vdGlmaWNhdGlvbnMuYWN0aXZlKVxyXG4gICAgICB0aGlzLl90b2dnbGUobm90aWZpY2F0aW9ucywgZmFsc2UsICdsaWtlcycsXHJcbiAgICAgICAgJ2NvbW1lbnRNeURvY3VtZW50JyxcclxuICAgICAgICAnY29tbWVudEFueURvY3VtZW50JyxcclxuICAgICAgICAndXBjb21pbmdFdmVudHMnLFxyXG4gICAgICAgICd0YWdnZWQnLFxyXG4gICAgICAgICdhbnlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAnbXlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAnY3ViZUFub21hbHknKTtcclxuICAgIGlmICghb3B0aW9ucy5lbWFpbHMuYWN0aXZlKVxyXG4gICAgICB0aGlzLl90b2dnbGUoZW1haWxzLCBmYWxzZSwgJ21haWwnLFxyXG4gICAgICAgICdjaGF0JyxcclxuICAgICAgICAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgJ2V2ZW50cycpO1xyXG4gICAgaWYgKCFvcHRpb25zLmdyYW50QWNjZXNzLmFjdGl2ZSlcclxuICAgICAgdGhpcy5ndXNlcnMuZGlzYWJsZSgpO1xyXG4gICAgaWYgKCFvcHRpb25zLm91dE9mT2ZmaWNlLmFjdGl2ZSkge1xyXG4gICAgICB0aGlzLnN1YnN0aXR1ZUlkLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5fdG9nZ2xlKG91dE9mT2ZmaWNlLCBmYWxzZSwgJ2Zyb20nLCAndG8nKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFvcHRpb25zLm91dE9mT2ZmaWNlLmZyb20pXHJcbiAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgZmFsc2UsICd0bycpO1xyXG4gICAgLy8gY2hhbmdlXHJcbiAgICBub3RpZmljYXRpb25zLmNvbnRyb2xzWydhY3RpdmUnXS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+XHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlKG5vdGlmaWNhdGlvbnMsIGFjdGl2ZSwgJ2xpa2VzJyxcclxuICAgICAgICAgICdjb21tZW50TXlEb2N1bWVudCcsXHJcbiAgICAgICAgICAnY29tbWVudEFueURvY3VtZW50JyxcclxuICAgICAgICAgICd1cGNvbWluZ0V2ZW50cycsXHJcbiAgICAgICAgICAndGFnZ2VkJyxcclxuICAgICAgICAgICdhbnlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAgICdteURvY3VtZW50U3RhdGVDaGFuZ2UnLFxyXG4gICAgICAgICAgJ2N1YmVBbm9tYWx5JykpO1xyXG4gICAgZW1haWxzLmNvbnRyb2xzWydhY3RpdmUnXS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHRoaXMuX3RvZ2dsZShlbWFpbHMsIGFjdGl2ZSwgJ21haWwnLFxyXG4gICAgICAgICdjaGF0JyxcclxuICAgICAgICAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgJ2V2ZW50cycpKTtcclxuICAgIGdyYW50QWNjZXNzLmNvbnRyb2xzWydhY3RpdmUnXS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLmd1c2Vycy5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuZ3JhbnRJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuZ3VzZXJzLmVuYWJsZSgpO1xyXG4gICAgICB9KTtcclxuICAgIG91dE9mT2ZmaWNlLmNvbnRyb2xzWydhY3RpdmUnXS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLnN1YnN0aXR1ZUlkLmVuYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dWVJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLnN1YnN0aXR1ZUlkLmRpc2FibGUoKTtcclxuICAgICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGFjdGl2ZSwgJ2Zyb20nKTtcclxuICAgICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGFjdGl2ZSAmJiBvdXRPZk9mZmljZS5jb250cm9sc1snZnJvbSddLnZhbHVlLCAndG8nKTtcclxuICAgICAgfSk7XHJcbiAgICBvdXRPZk9mZmljZS5jb250cm9sc1snZnJvbSddLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZShmcm9tID0+XHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlKG91dE9mT2ZmaWNlLCBmcm9tICE9PSBudWxsLCAndG8nKSk7XHJcbiAgICB0aGlzLmd1c2VycyQgPSB0aGlzLmd1c2Vycy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXHJcbiAgICAgIGZpbHRlcih2ID0+IGlzU3RyaW5nKHYpKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHRoaXMuX2FjY291bnRzLmZpbmRBbGwodikpLFxyXG4gICAgICBtYXAociA9PiB7XHJcbiAgICAgICAgY29uc3QgZXhjbHVkZSA9IChncmFudEFjY2Vzcy52YWx1ZS51c2VycyBhcyBzdHJpbmdbXSk/LnNsaWNlKCkgfHwgW107XHJcbiAgICAgICAgZXhjbHVkZS5wdXNoKHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQpO1xyXG4gICAgICAgIHJldHVybiByLmZpbHRlcih1ID0+IGV4Y2x1ZGUuaW5kZXhPZih1LmlkKSA8IDApO1xyXG4gICAgICB9KSk7XHJcbiAgICB0aGlzLnN1c2VycyQgPSB0aGlzLnN1YnN0aXR1ZUlkLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcclxuICAgICAgdGFwKHYgPT5cclxuICAgICAgICAhdiAmJiBvdXRPZk9mZmljZS5jb250cm9sc1snc3Vic3RpdHVlSWQnXS5zZXRWYWx1ZShudWxsKVxyXG4gICAgICApLFxyXG4gICAgICBmaWx0ZXIodiA9PiBpc1N0cmluZyh2KSksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHRoaXMuX2FjY291bnRzLmZpbmRBbGwodikpLFxyXG4gICAgICBtYXAociA9PiByLmZpbHRlcih1ID0+IHUuaWQgIT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQpKSk7XHJcbiAgICBpZiAob3B0aW9ucy5vdXRPZk9mZmljZS5zdWJzdGl0dWVJZClcclxuICAgICAgdGhpcy5fYWNjb3VudHMuZ2V0KG9wdGlvbnMub3V0T2ZPZmZpY2Uuc3Vic3RpdHVlSWQpLnN1YnNjcmliZSh1ID0+XHJcbiAgICAgICAgdGhpcy5zdWJzdGl0dWVJZC5zZXRWYWx1ZSh1LCB7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xyXG4gICAgaWYgKHRoaXMuX29wdGlvbilcclxuICAgICAgc3dpdGNoICh0aGlzLl9vcHRpb24ub3Blbikge1xyXG4gICAgICAgIGNhc2UgJ291dG9mb2ZmaWNlJzpcclxuICAgICAgICAgIHRoaXMub3V0T2ZPZmZpY2Uub3BlbigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5vcGVuKCk7XHJcbiAgICAgIH1cclxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT5cclxuICAgICAgdGhpcy5mb3JtLnZhbGlkICYmXHJcbiAgICAgIHRoaXMuX3Nlc3Npb24udXBkYXRlKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKS5zdWJzY3JpYmUodW5kZWZpbmVkLCAoKSA9PiB0aGlzLl9zYi5lcnJvcigpKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RvZ2dsZShncm91cDogRm9ybUdyb3VwLCBhY3RpdmU6IGJvb2xlYW4sIC4uLmNvbnRyb2xzOiBzdHJpbmdbXSkge1xyXG4gICAgY29udHJvbHMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgaWYgKCFhY3RpdmUpIGdyb3VwLmNvbnRyb2xzW25hbWVdLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICBlbHNlIGdyb3VwLmNvbnRyb2xzW25hbWVdLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgdG9nZ2xlU291bmQoKSB7XHJcbiAgICAodGhpcy5mb3JtLmNvbnRyb2xzWydub3RpZmljYXRpb25zJ10gYXMgRm9ybUdyb3VwKS5jb250cm9sc1snc291bmQnXS5zZXRWYWx1ZSghdGhpcy5vcHRpb25zLm5vdGlmaWNhdGlvbnMuc291bmQpO1xyXG4gIH1cclxuICBkaXNwbGF5ID0gKGl0ZW06IFVzZXJJbmZvKSA9PiB7XHJcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubmFtZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBhZGRUYWcoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LmlucHV0O1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC52YWx1ZTtcclxuXHJcbiAgICAvLyBBZGQgb3VyIGZydWl0XHJcbiAgICBpZiAoKHZhbHVlIHx8ICcnKS50cmltKCkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnRhZ3MucHVzaCh2YWx1ZS50cmltKCkpO1xyXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIGlucHV0IHZhbHVlIFxyXG4gICAgaWYgKGlucHV0KSB7XHJcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbW92ZVRhZyh0YWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5vcHRpb25zLnRhZ3MucmVtb3ZlKHRhZyk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpZFxyXG4gICAqL1xyXG4gIHJlbW92ZUdyYW50KGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJzID0gdGhpcy5mb3JtLnZhbHVlLmdyYW50QWNjZXNzLnVzZXJzIGFzIHN0cmluZ1tdO1xyXG4gICAgY29uc3QgaW5kZXggPSB1c2Vycy5pbmRleE9mKGlkKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPj0gMClcclxuICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHt9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlucFxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIGFkZEdyYW50KGlucDogSFRNTElucHV0RWxlbWVudCwgZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJzID0gdGhpcy5mb3JtLnZhbHVlLmdyYW50QWNjZXNzLnVzZXJzIGFzIHN0cmluZ1tdO1xyXG4gICAgY29uc3QgaWQgPSBldmVudC5vcHRpb24udmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgaWYgKCF1c2VycylcclxuICAgICAgKHRoaXMuZm9ybS5jb250cm9sc1snZ3JhbnRBY2Nlc3MnXSBhcyBGb3JtR3JvdXApLmNvbnRyb2xzWyd1c2VycyddLnNldFZhbHVlKFtpZF0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB1c2Vycy5wdXNoKGlkKTtcclxuICAgIGlucC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe30pO1xyXG4gIH1cclxuICBzZXRTdWJzdGl0dXRlKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KSB7XHJcbiAgICAodGhpcy5mb3JtLmNvbnRyb2xzWydvdXRPZk9mZmljZSddIGFzIEZvcm1Hcm91cCkuY29udHJvbHNbJ3N1YnN0aXR1ZUlkJ10uc2V0VmFsdWUoKGV2ZW50Lm9wdGlvbi52YWx1ZSBhcyBVc2VySW5mbykuaWQpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICA8bWF0LWFjY29yZGlvbj5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsICNub3RpZmljYXRpb25zPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIHt7J05vdGlmaWNhdGlvbnMnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgPCEtLTxtYXQtaWNvbj5ub3RpZmljYXRpb25zPC9tYXQtaWNvbj4tLT5cclxuICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwibm90aWZpY2F0aW9uc1wiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCI+e3snQWN0aXZlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZVNvdW5kKClcIiBbYml6ZG9jVG9vbHRpcF09XCInU291bmQnfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj57e29wdGlvbnMubm90aWZpY2F0aW9ucy5zb3VuZCA/ICd2b2x1bWVfdXAnIDogJ3ZvbHVtZV9vZmYnfX08L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cIm15RG9jdW1lbnRTdGF0ZUNoYW5nZVwiPnt7J015U3RhdGVDaGFuZ2UnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYW55RG9jdW1lbnRTdGF0ZUNoYW5nZVwiPnt7J0FueVN0YXRlQ2hhbmdlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRNeURvY3VtZW50XCI+e3snQ29tbWVudE15RG9jdW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudEFueURvY3VtZW50XCI+e3snQ29tbWVudEFueURvY3VtZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImxpa2VzXCIgW3N0eWxlLmRpc3BsYXldPVwidm9hdGluZz8nJzonbm9uZSdcIj57eydMaWtlZENvbW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwidGFnZ2VkXCI+e3snVGFnZ2VkSW5Db21tZW50cycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJ1cGNvbWluZ0V2ZW50c1wiPnt7J1VwY29taW5nRXZlbnRzJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImN1YmVBbm9tYWx5XCI+e3snQ3ViZUFub21hbHknIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwgI2VtYWlscz5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICB7eydFbWFpbHMnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgPCEtLTxtYXQtaWNvbj5hbHRlcm5hdGVfZW1haWw8L21hdC1pY29uPi0tPlxyXG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJlbWFpbHNcIiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJtYWlsXCI+e3snTWFpbHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiY2hhdFwiPnt7J0NvbnZlcnNhdGlvbnMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibm90aWZpY2F0aW9uc1wiPnt7J0VtYWlsTm90aWZpY2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJldmVudHNcIj57eydBbGFybUV2ZW50cycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAjb3V0T2ZPZmZpY2U+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAge3snT3V0T2ZPZmZpY2UnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgPCEtLTxtYXQtaWNvbj50cmVuZGluZ19mbGF0PC9tYXQtaWNvbj4tLT5cclxuICAgICAgICAgIDwhLS17eydPdXRPZk9mZmljZVRpcCcgfCB0cmFuc2xhdGV9fS0tPlxyXG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJvdXRPZk9mZmljZVwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCI+e3snQWN0aXZlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInN1YnN0aXR1ZUlkXCIgdHlwZT1cInNlYXJjaFwiIFttYXRBdXRvY29tcGxldGVdPVwic2F1dG9cIiAjc3Vic3RpdHVlSW5wdXRcclxuICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Fzc29jaWF0ZScgfCB0cmFuc2xhdGVcIiBbcmVxdWlyZWRdPVwiZm9ybS52YWx1ZS5vdXRPZk9mZmljZS5hY3RpdmVcIiAvPlxyXG4gICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI3NhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cInNldFN1YnN0aXR1dGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdSBvZiBzdXNlcnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwidVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7dS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgIDxtYXQtaGludD57eydPdXRPZk9mZmljZVRpcCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiZnJvbVwiIGZvcm1Db250cm9sTmFtZT1cImZyb21cIiBwbGFjZWhvbGRlcj1cInt7J0Zyb20nfCB0cmFuc2xhdGV9fVwiIC8+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgW2Zvcl09XCJmcm9tXCIgbWF0U3VmZml4PjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2Zyb20+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cInRvXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9cIiBbbWluXT1cImZvcm0udmFsdWUub3V0T2ZPZmZpY2U/LmZyb21cIiBwbGFjZWhvbGRlcj1cInt7J1RvJ3wgdHJhbnNsYXRlfX1cIiAvPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIFtmb3JdPVwidG9cIiBtYXRTdWZmaXg+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjdG8+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwgI2dyYW50QWNjZXNzPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIHt7J0dyYW50QWNjZXNzJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDwhLS08bWF0LWljb24+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPi0tPlxyXG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJncmFudEFjY2Vzc1wiIGNsYXNzPVwiZ3JhbnQtc2VjdGlvblwiPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWNoaXAtbGlzdCAjZ3JhbnRMaXN0IFthdHRyLmFyaWEtbGFiZWxdPVwiXCIgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbHVlLmdyYW50QWNjZXNzLmFjdGl2ZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IHUgb2YgZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJyZW1vdmVHcmFudCh1KVwiPlxyXG4gICAgICAgICAgICAgIHt7dSB8IHVzZXJOYW1lIHwgYXN5bmN9fVxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoaXA+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwiZ3VzZXJzXCIgcGxhY2Vob2xkZXI9XCJ7eydVc2Vycyd8IHRyYW5zbGF0ZX19XCJcclxuICAgICAgICAgICAgICAgICAgICNncmFudElucHV0XHJcbiAgICAgICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImdyYW50QXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImdyYW50TGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCI+XHJcbiAgICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XHJcbiAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjZ3JhbnRBdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cImFkZEdyYW50KGdyYW50SW5wdXQsICRldmVudClcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHUgb2YgZ3VzZXJzJCB8IGFzeW5jXCIgW3ZhbHVlXT1cInUuaWRcIj5cclxuICAgICAgICAgICAgICB7e3UubmFtZX19XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1LmVtYWlsXCI+Jm5ic3A7IC0ge3t1LmVtYWlsfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgIDxtYXQtaGludD57eydHcmFudFRpcCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAjcHJlZmVyZW5jZXM+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAge3snUHJlZmVyZW5jZXMnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgPCEtLTxtYXQtaWNvbj48L21hdC1pY29uPi0tPlxyXG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1jaGlwLWxpc3QgI2NoaXBzIFtzZWxlY3RhYmxlXT1cImZhbHNlXCIgbXVsdGlwbGU+XHJcbiAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmb3JtLnZhbHVlLnRhZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlVGFnKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAge3tpdGVtfX1cclxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L21hdC1jaGlwPlxyXG4gICAgICAgICAgICA8aW5wdXQgW3BsYWNlaG9sZGVyXT1cIidUYWdzJ3x0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwc1wiXHJcbiAgICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCJcclxuICAgICAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRBZGRPbkJsdXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkVGFnKCRldmVudClcIj5cclxuICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtmb3JtQ29udHJvbF09XCJhUklBXCI+e3snQVJJQScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgPC9tYXQtYWNjb3JkaW9uPlxyXG48L2Zvcm0+XHJcbiJdfQ==