@provoly/hypervisor 0.0.118 → 0.0.119

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 (30) hide show
  1. package/esm2022/src/lib/event/detail/add-event/add-event.component.mjs +59 -0
  2. package/esm2022/src/lib/event/detail/event-detail.component.mjs +94 -42
  3. package/esm2022/src/lib/event/procedure-association-modal/procedure-association-modal.component.mjs +2 -2
  4. package/esm2022/src/lib/event/public-api.mjs +2 -1
  5. package/esm2022/src/lib/general/i18n/fr.translations.mjs +10 -1
  6. package/esm2022/src/lib/hypervisor.module.mjs +8 -4
  7. package/esm2022/src/lib/model/event/hyp-event-detail.interface.mjs +3 -2
  8. package/esm2022/src/lib/model/event/hyp-event.interface.mjs +1 -1
  9. package/esm2022/src/lib/store/event/event.actions.mjs +2 -1
  10. package/esm2022/src/lib/store/event/event.effects.mjs +2 -1
  11. package/esm2022/src/lib/store/event/event.service.mjs +15 -1
  12. package/fesm2022/provoly-hypervisor.mjs +274 -146
  13. package/fesm2022/provoly-hypervisor.mjs.map +1 -1
  14. package/package.json +1 -1
  15. package/src/lib/event/detail/add-event/add-event.component.d.ts +21 -0
  16. package/src/lib/event/detail/event-detail.component.d.ts +14 -2
  17. package/src/lib/event/procedure-association-modal/procedure-association-modal.component.d.ts +1 -1
  18. package/src/lib/event/public-api.d.ts +1 -0
  19. package/src/lib/general/i18n/fr.translations.d.ts +9 -0
  20. package/src/lib/hypervisor.module.d.ts +10 -9
  21. package/src/lib/model/event/hyp-event-detail.interface.d.ts +1 -0
  22. package/src/lib/model/event/hyp-event.interface.d.ts +4 -0
  23. package/src/lib/model/procedure/hyp-procedure.interface.d.ts +1 -0
  24. package/src/lib/store/event/event.actions.d.ts +7 -0
  25. package/src/lib/store/event/event.effects.d.ts +7 -0
  26. package/src/lib/store/event/event.service.d.ts +2 -0
  27. package/styles/components/_index.scss +1 -0
  28. package/styles/components/_o-hvy-event-detail-add.scss +34 -0
  29. package/styles/components/_o-hvy-event-detail.scss +14 -0
  30. package/styles/components/_o-hvy-event-summary-list.scss +4 -0
@@ -0,0 +1,59 @@
1
+ import { PRY_DIALOG_DATA } from '@provoly/dashboard';
2
+ import { Component, Inject } from '@angular/core';
3
+ import { debounceTime, shareReplay, Subject, switchMap } from 'rxjs';
4
+ import { catchError, map, startWith } from 'rxjs/operators';
5
+ import { padId } from '../../../general/pad-id.function';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@provoly/dashboard";
8
+ import * as i2 from "../../../store/event/event.service";
9
+ import * as i3 from "@angular/forms";
10
+ import * as i4 from "@angular/common";
11
+ export class HvyEventAddEventComponent {
12
+ constructor(dialog, data, eventService) {
13
+ this.dialog = dialog;
14
+ this.data = data;
15
+ this.eventService = eventService;
16
+ this.onEventSearch$ = new Subject();
17
+ this.eventSelectValue = undefined;
18
+ this.events$ = this.onEventSearch$.pipe(startWith(), debounceTime(500)).pipe(switchMap(() => {
19
+ const search = typeof this.eventSelectValue === 'string' && this.eventSelectValue.length > 2
20
+ ? this.eventSelectValue
21
+ : undefined;
22
+ return this.eventService.search(search).pipe(map((events) => events.map((event) => {
23
+ const regex = RegExp(`(${search})` ?? '(/-/-/)', 'gid');
24
+ const html = `${padId.fn(event.id)} - ${event.name}`;
25
+ return {
26
+ ...event,
27
+ html: html.replaceAll(regex, (matched, capture1) => `<b>${capture1}</b>`)
28
+ };
29
+ })));
30
+ }), catchError(() => {
31
+ throw new Error('Search Equipment problem');
32
+ }), shareReplay());
33
+ }
34
+ selectedEventChange($event) {
35
+ this.onEventSearch$.next();
36
+ if (typeof $event === 'object') {
37
+ this.eventToAdd = $event;
38
+ }
39
+ else {
40
+ this.eventToAdd = undefined;
41
+ }
42
+ }
43
+ closeModal() {
44
+ this.dialog.close({ value: 'cancel' });
45
+ }
46
+ add() {
47
+ this.dialog.close({ value: 'add', event: this.eventToAdd });
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HvyEventAddEventComponent, deps: [{ token: i1.PryDialogRef }, { token: PRY_DIALOG_DATA }, { token: i2.EventService }], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: HvyEventAddEventComponent, selector: "hvy-add-event", ngImport: i0, template: "<div class=\"o-hvy-event-detail-add\">\n <h3>{{ '@hvy.event.add.title' | i18n }}</h3>\n <p>{{ '@hvy.event.add.description' | i18n }}</p>\n\n <div class=\"o-hvy-event-detail-add__container\">\n <label for=\"event\">{{ '@hvy.event.add.search' | i18n }}<span class=\"required\">*</span> :</label>\n <pry-select\n [items]=\"events$ | async\"\n bindLabel=\"name\"\n [(ngModel)]=\"eventSelectValue\"\n (ngModelChange)=\"selectedEventChange($event)\"\n [autocomplete]=\"true\"\n [externalAutocompleteService]=\"true\"\n [placeholder]=\"'@hvy.event.parentEvent.placeholder' | i18n\"\n id=\"event\"\n [template]=\"templateOption\"\n class=\"o-hvy-event-detail-add__event\"\n ></pry-select>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"u-display-flex -column\">\n <span [innerHTML]=\"item.html\"></span>\n </div>\n </ng-template>\n </div>\n\n <div class=\"o-hvy-event-detail-add__buttons\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"!eventToAdd\" (click)=\"add()\">\n {{ '@hvy.action.validate' | i18n }}\n </button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeModal()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }] }); }
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: HvyEventAddEventComponent, decorators: [{
53
+ type: Component,
54
+ args: [{ selector: 'hvy-add-event', template: "<div class=\"o-hvy-event-detail-add\">\n <h3>{{ '@hvy.event.add.title' | i18n }}</h3>\n <p>{{ '@hvy.event.add.description' | i18n }}</p>\n\n <div class=\"o-hvy-event-detail-add__container\">\n <label for=\"event\">{{ '@hvy.event.add.search' | i18n }}<span class=\"required\">*</span> :</label>\n <pry-select\n [items]=\"events$ | async\"\n bindLabel=\"name\"\n [(ngModel)]=\"eventSelectValue\"\n (ngModelChange)=\"selectedEventChange($event)\"\n [autocomplete]=\"true\"\n [externalAutocompleteService]=\"true\"\n [placeholder]=\"'@hvy.event.parentEvent.placeholder' | i18n\"\n id=\"event\"\n [template]=\"templateOption\"\n class=\"o-hvy-event-detail-add__event\"\n ></pry-select>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"u-display-flex -column\">\n <span [innerHTML]=\"item.html\"></span>\n </div>\n </ng-template>\n </div>\n\n <div class=\"o-hvy-event-detail-add__buttons\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"!eventToAdd\" (click)=\"add()\">\n {{ '@hvy.action.validate' | i18n }}\n </button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeModal()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n</div>\n" }]
55
+ }], ctorParameters: () => [{ type: i1.PryDialogRef }, { type: undefined, decorators: [{
56
+ type: Inject,
57
+ args: [PRY_DIALOG_DATA]
58
+ }] }, { type: i2.EventService }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWV2ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvaHlwZXJ2aXNvci9zcmMvbGliL2V2ZW50L2RldGFpbC9hZGQtZXZlbnQvYWRkLWV2ZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvaHlwZXJ2aXNvci9zcmMvbGliL2V2ZW50L2RldGFpbC9hZGQtZXZlbnQvYWRkLWV2ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBYyxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdqRixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQU16RCxNQUFNLE9BQU8seUJBQXlCO0lBTXBDLFlBQ1UsTUFBK0MsRUFFaEQsSUFBUSxFQUNQLFlBQTBCO1FBSDFCLFdBQU0sR0FBTixNQUFNLENBQXlDO1FBRWhELFNBQUksR0FBSixJQUFJLENBQUk7UUFDUCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQVRwQyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDckMscUJBQWdCLEdBQXlDLFNBQVMsQ0FBQztRQVVqRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUUsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUNWLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixLQUFLLFFBQVEsSUFBSyxJQUFJLENBQUMsZ0JBQTJCLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3ZGLENBQUMsQ0FBRSxJQUFJLENBQUMsZ0JBQTJCO2dCQUNuQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUMxQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDbkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckQsT0FBTztvQkFDTCxHQUFHLEtBQUs7b0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQUUsRUFBRSxDQUFDLE1BQU0sUUFBUSxNQUFNLENBQUM7aUJBQzNELENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsRUFDRixXQUFXLEVBQUUsQ0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQVc7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsR0FBRztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs4R0FyRFUseUJBQXlCLDhDQVExQixlQUFlO2tHQVJkLHlCQUF5QixxRENidEMsdXZDQWdDQTs7MkZEbkJhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSxlQUFlOzswQkFXdEIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUFJZX0RJQUxPR19EQVRBLCBQcnlEaWFsb2dSZWYgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YmplY3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHlwRXZlbnREZXRhaWxzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvZXZlbnQvaHlwLWV2ZW50LWRldGFpbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nIH0gZnJvbSAnLi4vZXZlbnQtZGV0YWlsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2V2ZW50L2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgcGFkSWQgfSBmcm9tICcuLi8uLi8uLi9nZW5lcmFsL3BhZC1pZC5mdW5jdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2h2eS1hZGQtZXZlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLWV2ZW50LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBIdnlFdmVudEFkZEV2ZW50Q29tcG9uZW50IHtcbiAgb25FdmVudFNlYXJjaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBldmVudFNlbGVjdFZhbHVlOiBzdHJpbmcgfCBIeXBFdmVudERldGFpbHMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGV2ZW50cyQ6IE9ic2VydmFibGU8SHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nW10+O1xuICBldmVudFRvQWRkPzogSHlwRXZlbnREZXRhaWxzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGlhbG9nOiBQcnlEaWFsb2dSZWY8SHZ5RXZlbnRBZGRFdmVudENvbXBvbmVudD4sXG4gICAgQEluamVjdChQUllfRElBTE9HX0RBVEEpXG4gICAgcHVibGljIGRhdGE6IHt9LFxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5ldmVudHMkID0gdGhpcy5vbkV2ZW50U2VhcmNoJC5waXBlKHN0YXJ0V2l0aCgpLCBkZWJvdW5jZVRpbWUoNTAwKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9XG4gICAgICAgICAgdHlwZW9mIHRoaXMuZXZlbnRTZWxlY3RWYWx1ZSA9PT0gJ3N0cmluZycgJiYgKHRoaXMuZXZlbnRTZWxlY3RWYWx1ZSBhcyBzdHJpbmcpLmxlbmd0aCA+IDJcbiAgICAgICAgICAgID8gKHRoaXMuZXZlbnRTZWxlY3RWYWx1ZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNlYXJjaChzZWFyY2gpLnBpcGUoXG4gICAgICAgICAgbWFwKChldmVudHMpID0+XG4gICAgICAgICAgICBldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZWdleCA9IFJlZ0V4cChgKCR7c2VhcmNofSlgID8/ICcoLy0vLS8pJywgJ2dpZCcpO1xuICAgICAgICAgICAgICBjb25zdCBodG1sID0gYCR7cGFkSWQuZm4oZXZlbnQuaWQpfSAtICR7ZXZlbnQubmFtZX1gO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgICAgIGh0bWw6IGh0bWwucmVwbGFjZUFsbChyZWdleCwgKG1hdGNoZWQ6IHN0cmluZywgY2FwdHVyZTE6IHN0cmluZykgPT4gYDxiPiR7Y2FwdHVyZTF9PC9iPmApXG4gICAgICAgICAgICAgIH0gYXMgSHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlYXJjaCBFcXVpcG1lbnQgcHJvYmxlbScpO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdGVkRXZlbnRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uRXZlbnRTZWFyY2gkLm5leHQoKTtcbiAgICBpZiAodHlwZW9mICRldmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuZXZlbnRUb0FkZCA9ICRldmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ldmVudFRvQWRkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5kaWFsb2cuY2xvc2UoeyB2YWx1ZTogJ2NhbmNlbCcgfSk7XG4gIH1cblxuICBhZGQoKSB7XG4gICAgdGhpcy5kaWFsb2cuY2xvc2UoeyB2YWx1ZTogJ2FkZCcsIGV2ZW50OiB0aGlzLmV2ZW50VG9BZGQgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudC1kZXRhaWwtYWRkXCI+XG4gIDxoMz57eyAnQGh2eS5ldmVudC5hZGQudGl0bGUnIHwgaTE4biB9fTwvaDM+XG4gIDxwPnt7ICdAaHZ5LmV2ZW50LmFkZC5kZXNjcmlwdGlvbicgfCBpMThuIH19PC9wPlxuXG4gIDxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudC1kZXRhaWwtYWRkX19jb250YWluZXJcIj5cbiAgICA8bGFiZWwgZm9yPVwiZXZlbnRcIj57eyAnQGh2eS5ldmVudC5hZGQuc2VhcmNoJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvbGFiZWw+XG4gICAgPHByeS1zZWxlY3RcbiAgICAgIFtpdGVtc109XCJldmVudHMkIHwgYXN5bmNcIlxuICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICBbKG5nTW9kZWwpXT1cImV2ZW50U2VsZWN0VmFsdWVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRFdmVudENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiXG4gICAgICBbZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlXT1cInRydWVcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidAaHZ5LmV2ZW50LnBhcmVudEV2ZW50LnBsYWNlaG9sZGVyJyB8IGkxOG5cIlxuICAgICAgaWQ9XCJldmVudFwiXG4gICAgICBbdGVtcGxhdGVdPVwidGVtcGxhdGVPcHRpb25cIlxuICAgICAgY2xhc3M9XCJvLWh2eS1ldmVudC1kZXRhaWwtYWRkX19ldmVudFwiXG4gICAgPjwvcHJ5LXNlbGVjdD5cbiAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlT3B0aW9uIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1jb2x1bW5cIj5cbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJpdGVtLmh0bWxcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnQtZGV0YWlsLWFkZF9fYnV0dG9uc1wiPlxuICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiIFtkaXNhYmxlZF09XCIhZXZlbnRUb0FkZFwiIChjbGljayk9XCJhZGQoKVwiPlxuICAgICAge3sgJ0BodnkuYWN0aW9uLnZhbGlkYXRlJyB8IGkxOG4gfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIj57eyAnQGh2eS5hY3Rpb24uY2FuY2VsJyB8IGkxOG4gfX08L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==