@openmrs/ngx-formentry 3.2.1-pre.286 → 4.0.1-pre.293
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/check-box/checkbox.component.d.ts +2 -0
- package/esm2020/components/check-box/checkbox.component.mjs +32 -7
- package/esm2020/form-entry/form-factory/question.factory.mjs +3 -2
- package/fesm2015/openmrs-ngx-formentry.mjs +33 -7
- package/fesm2015/openmrs-ngx-formentry.mjs.map +1 -1
- package/fesm2020/openmrs-ngx-formentry.mjs +33 -7
- package/fesm2020/openmrs-ngx-formentry.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -12,6 +12,8 @@ export declare class CheckboxControlComponent implements OnInit {
|
|
|
12
12
|
get value(): any;
|
|
13
13
|
set value(v: any);
|
|
14
14
|
selectOpt(option: any, event: any): void;
|
|
15
|
+
private evaluateExpression;
|
|
16
|
+
private evaluateDisabledExpression;
|
|
15
17
|
private onChange;
|
|
16
18
|
private onTouched;
|
|
17
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxControlComponent, never>;
|
|
@@ -14,6 +14,7 @@ export class CheckboxControlComponent {
|
|
|
14
14
|
if (this.selected.indexOf(option.value) !== -1) {
|
|
15
15
|
Object.assign(option, { checked: true });
|
|
16
16
|
}
|
|
17
|
+
option.isDisabled = this.evaluateDisabledExpression(option, option.value);
|
|
17
18
|
return option;
|
|
18
19
|
});
|
|
19
20
|
}
|
|
@@ -46,17 +47,41 @@ export class CheckboxControlComponent {
|
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
selectOpt(option, event) {
|
|
50
|
+
let myValue = option.value;
|
|
49
51
|
if (event.target.checked) {
|
|
50
|
-
this.selected = [...this.selected,
|
|
52
|
+
this.selected = [...this.selected, myValue];
|
|
51
53
|
}
|
|
52
54
|
else {
|
|
53
|
-
this.selected = this.selected.filter(
|
|
54
|
-
|
|
55
|
-
});
|
|
55
|
+
this.selected = this.selected.filter((o) => o !== myValue);
|
|
56
|
+
myValue = null;
|
|
56
57
|
}
|
|
58
|
+
this.options.forEach((opt) => {
|
|
59
|
+
opt.isDisabled = this.evaluateDisabledExpression(opt, myValue);
|
|
60
|
+
if (opt.isDisabled && this.selected.includes(opt.value)) {
|
|
61
|
+
this.selected = this.selected.filter((val) => val !== opt.value);
|
|
62
|
+
opt.checked = false;
|
|
63
|
+
}
|
|
64
|
+
else if (!opt.isDisabled) {
|
|
65
|
+
opt.checked = this.selected.includes(opt.value);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
// Update the component's internal value
|
|
57
69
|
this._value = [...this.selected];
|
|
58
70
|
this.onChange(this._value);
|
|
59
71
|
}
|
|
72
|
+
evaluateExpression(expression, myValue) {
|
|
73
|
+
const matches = expression.match(/^myValue\s*===\s*['"]([^'"]+)['"]$/);
|
|
74
|
+
if (matches && matches[1]) {
|
|
75
|
+
return myValue === matches[1];
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
evaluateDisabledExpression(option, myValue) {
|
|
80
|
+
if (option.disableWhenExpression) {
|
|
81
|
+
return this.evaluateExpression(option.disableWhenExpression, myValue);
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
60
85
|
}
|
|
61
86
|
CheckboxControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CheckboxControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
62
87
|
CheckboxControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CheckboxControlComponent, selector: "ofe-checkbox", inputs: { id: "id", options: "options", selected: "selected" }, providers: [
|
|
@@ -65,7 +90,7 @@ CheckboxControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0
|
|
|
65
90
|
useExisting: forwardRef(() => CheckboxControlComponent),
|
|
66
91
|
multi: true
|
|
67
92
|
}
|
|
68
|
-
], ngImport: i0, template: "<fieldset class=\"cds--fieldset\">\n <div\n class=\"cds--form-item cds--checkbox-wrapper\"\n *ngFor=\"let option of options; let i = index\"\n >\n <input\n type=\"checkbox\"\n class=\"cds--checkbox\"\n [id]=\"i + id\"\n [checked]=\"option.checked\"\n (change)=\"selectOpt(option, $event)\"\n [value]=\"option.value\"\n />\n <label [for]=\"i + id\" class=\"cds--checkbox-label\">\n <span class=\"cds--checkbox-label-text\">{{ option.label }}</span>\n </label>\n </div>\n</fieldset>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
93
|
+
], ngImport: i0, template: "<fieldset class=\"cds--fieldset\">\n <div\n class=\"cds--form-item cds--checkbox-wrapper\"\n *ngFor=\"let option of options; let i = index\"\n >\n <input\n type=\"checkbox\"\n class=\"cds--checkbox\"\n [id]=\"i + id\"\n [checked]=\"option.checked\"\n (change)=\"selectOpt(option, $event)\"\n [value]=\"option.value\"\n [disabled]=\"option.isDisabled\"\n />\n <label [for]=\"i + id\" class=\"cds--checkbox-label\">\n <span class=\"cds--checkbox-label-text\">{{ option.label }}</span>\n </label>\n </div>\n</fieldset>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
69
94
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CheckboxControlComponent, decorators: [{
|
|
70
95
|
type: Component,
|
|
71
96
|
args: [{ selector: 'ofe-checkbox', providers: [
|
|
@@ -74,7 +99,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
74
99
|
useExisting: forwardRef(() => CheckboxControlComponent),
|
|
75
100
|
multi: true
|
|
76
101
|
}
|
|
77
|
-
], template: "<fieldset class=\"cds--fieldset\">\n <div\n class=\"cds--form-item cds--checkbox-wrapper\"\n *ngFor=\"let option of options; let i = index\"\n >\n <input\n type=\"checkbox\"\n class=\"cds--checkbox\"\n [id]=\"i + id\"\n [checked]=\"option.checked\"\n (change)=\"selectOpt(option, $event)\"\n [value]=\"option.value\"\n />\n <label [for]=\"i + id\" class=\"cds--checkbox-label\">\n <span class=\"cds--checkbox-label-text\">{{ option.label }}</span>\n </label>\n </div>\n</fieldset>\n" }]
|
|
102
|
+
], template: "<fieldset class=\"cds--fieldset\">\n <div\n class=\"cds--form-item cds--checkbox-wrapper\"\n *ngFor=\"let option of options; let i = index\"\n >\n <input\n type=\"checkbox\"\n class=\"cds--checkbox\"\n [id]=\"i + id\"\n [checked]=\"option.checked\"\n (change)=\"selectOpt(option, $event)\"\n [value]=\"option.value\"\n [disabled]=\"option.isDisabled\"\n />\n <label [for]=\"i + id\" class=\"cds--checkbox-label\">\n <span class=\"cds--checkbox-label-text\">{{ option.label }}</span>\n </label>\n </div>\n</fieldset>\n" }]
|
|
78
103
|
}], propDecorators: { id: [{
|
|
79
104
|
type: Input
|
|
80
105
|
}], options: [{
|
|
@@ -82,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
82
107
|
}], selected: [{
|
|
83
108
|
type: Input
|
|
84
109
|
}] } });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9jaGVjay1ib3gvY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9jaGVjay1ib3gvY2hlY2tib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFjbkQsTUFBTSxPQUFPLHdCQUF3QjtJQVhyQztRQWVTLFdBQU0sR0FBZSxFQUFFLENBQUM7UUFvRnZCLGFBQVEsR0FBRyxDQUFDLE1BQVcsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQy9CLGNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7S0FDOUI7SUFwRlEsUUFBUTtRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxL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QUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6QixPQUFPLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxNQUFXLEVBQUUsT0FBZTtRQUM3RCxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdkU7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O3FIQXRGVSx3QkFBd0I7eUdBQXhCLHdCQUF3Qix1R0FSeEI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztZQUN2RCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsMEJDZEgsb2tCQW1CQTsyRkRIYSx3QkFBd0I7a0JBWHBDLFNBQVM7K0JBQ0UsY0FBYyxhQUViO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDOzRCQUN2RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4QkFHZSxFQUFFO3NCQUFqQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIGZvcndhcmRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2ZlLWNoZWNrYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveENvbnRyb2xDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDb250cm9sQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIGlkOiBTdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBBcnJheTxhbnk+O1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IEFycmF5PGFueT47XG4gIHB1YmxpYyBfdmFsdWU6IEFycmF5PGFueT4gPSBbXTtcblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQgfHwgW107XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5pbmRleE9mKG9wdGlvbi52YWx1ZSkgIT09IC0xKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ob3B0aW9uLCB7IGNoZWNrZWQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBvcHRpb24uaXNEaXNhYmxlZCA9IHRoaXMuZXZhbHVhdGVEaXNhYmxlZEV4cHJlc3Npb24ob3B0aW9uLCBvcHRpb24udmFsdWUpO1xuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5fdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZSB8fCB0aGlzLl92YWx1ZVswXTtcbiAgICB9XG4gIH1cblxuICBzZXQgdmFsdWUodjogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJyB8fCB2ID09PSBudWxsIHx8IHYgPT09ICcnKSB7XG4gICAgICB2ID0gW107XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHYgPSBbdl07XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheS4nKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0T3B0KG9wdGlvbiwgZXZlbnQpIHtcbiAgICBsZXQgbXlWYWx1ZSA9IG9wdGlvbi52YWx1ZTtcblxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IFsuLi50aGlzLnNlbGVjdGVkLCBteVZhbHVlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQuZmlsdGVyKChvKSA9PiBvICE9PSBteVZhbHVlKTtcbiAgICAgIG15VmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHQpID0+IHtcbiAgICAgIG9wdC5pc0Rpc2FibGVkID0gdGhpcy5ldmFsdWF0ZURpc2FibGVkRXhwcmVzc2lvbihvcHQsIG15VmFsdWUpO1xuXG4gICAgICBpZiAob3B0LmlzRGlzYWJsZWQgJiYgdGhpcy5zZWxlY3RlZC5pbmNsdWRlcyhvcHQudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLmZpbHRlcigodmFsKSA9PiB2YWwgIT09IG9wdC52YWx1ZSk7XG4gICAgICAgIG9wdC5jaGVja2VkID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKCFvcHQuaXNEaXNhYmxlZCkge1xuICAgICAgICBvcHQuY2hlY2tlZCA9IHRoaXMuc2VsZWN0ZWQuaW5jbHVkZXMob3B0LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgY29tcG9uZW50J3MgaW50ZXJuYWwgdmFsdWVcbiAgICB0aGlzLl92YWx1ZSA9IFsuLi50aGlzLnNlbGVjdGVkXTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZywgbXlWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGV4cHJlc3Npb24ubWF0Y2goL15teVZhbHVlXFxzKj09PVxccypbJ1wiXShbXidcIl0rKVsnXCJdJC8pO1xuICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXNbMV0pIHtcbiAgICAgIHJldHVybiBteVZhbHVlID09PSBtYXRjaGVzWzFdO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGV2YWx1YXRlRGlzYWJsZWRFeHByZXNzaW9uKG9wdGlvbjogYW55LCBteVZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAob3B0aW9uLmRpc2FibGVXaGVuRXhwcmVzc2lvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVFeHByZXNzaW9uKG9wdGlvbi5kaXNhYmxlV2hlbkV4cHJlc3Npb24sIG15VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIG9uQ2hhbmdlID0gKGNoYW5nZTogYW55KSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7fTtcbn1cbiIsIjxmaWVsZHNldCBjbGFzcz1cImNkcy0tZmllbGRzZXRcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2RzLS1mb3JtLWl0ZW0gY2RzLS1jaGVja2JveC13cmFwcGVyXCJcbiAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgY2xhc3M9XCJjZHMtLWNoZWNrYm94XCJcbiAgICAgIFtpZF09XCJpICsgaWRcIlxuICAgICAgW2NoZWNrZWRdPVwib3B0aW9uLmNoZWNrZWRcIlxuICAgICAgKGNoYW5nZSk9XCJzZWxlY3RPcHQob3B0aW9uLCAkZXZlbnQpXCJcbiAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5pc0Rpc2FibGVkXCJcbiAgICAvPlxuICAgIDxsYWJlbCBbZm9yXT1cImkgKyBpZFwiIGNsYXNzPVwiY2RzLS1jaGVja2JveC1sYWJlbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjZHMtLWNoZWNrYm94LWxhYmVsLXRleHRcIj57eyBvcHRpb24ubGFiZWwgfX08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG48L2ZpZWxkc2V0PlxuIl19
|