@ieeesa-npm/groups 0.15.13 → 0.15.15

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.
@@ -260,9 +260,47 @@
260
260
  "standardQuestions": ["Name", "Email Address", "Affiliation"],
261
261
  "defaultMembershipTitle": "Default Membership Level",
262
262
  "defaultMembershipDescription": "Select the membership level automatically assigned",
263
+ "noLevelsMessage": "No membership levels are configured for this group type. Please configure membership levels before enabling the interest form.",
263
264
  "membershipLevels": ["Observer", "Voting Member", "Associate Member"],
264
265
  "customQuestionsTitle": "Custom Questions",
265
- "addQuestionLabel": "+ Add Question"
266
+ "addQuestionLabel": "+ Add Question",
267
+ "preview": {
268
+ "heading": "Interest Form Preview",
269
+ "closeAriaLabel": "Close preview",
270
+ "standardInformationHeading": "Standard Information",
271
+ "additionalQuestionsHeading": "Additional Questions",
272
+ "selectPlaceholder": "Select an option",
273
+ "cancelButtonLabel": "Cancel",
274
+ "labels": {
275
+ "name": "Name",
276
+ "email": "Email Address",
277
+ "affiliation": "Affiliation"
278
+ }
279
+ },
280
+ "requiredTag": "Required",
281
+ "newQuestionLabel": "New Question",
282
+ "editQuestionAriaLabel": "Edit question",
283
+ "deleteQuestionAriaLabel": "Delete question",
284
+ "questionEditor": {
285
+ "labelLabel": "Question Label",
286
+ "typeLabel": "Type",
287
+ "requiredLabel": "Required",
288
+ "placeholderLabel": "PlaceHolder",
289
+ "helpTextLabel": "Help Text",
290
+ "optionsLabel": "Options (one per line)",
291
+ "typeHerePlaceholder": "Type here",
292
+ "selectPlaceholder": "Select from here",
293
+ "cancel": "Cancel",
294
+ "save": "Save",
295
+ "types": {
296
+ "text": "Text Input",
297
+ "textArea": "Text Area",
298
+ "dropdown": "Dropdown",
299
+ "checkbox": "Checkbox",
300
+ "radio": "Radio Button",
301
+ "date": "Date Picker"
302
+ }
303
+ }
266
304
  }
267
305
  },
268
306
  "deleteGroup": {
@@ -0,0 +1,157 @@
1
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ReactiveFormsModule, Validators, } from '@angular/forms';
4
+ import { CHOICE_FIELD_TYPES, QuestionFieldType, } from '../../models/custom-question.model';
5
+ import * as constants from '../../assets/constants.json';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "@angular/common";
9
+ /**
10
+ * Editable card for a single custom interest-form question (SP3M-317). Renders
11
+ * the Question Label, Type, Required toggle, Placeholder, Help Text and (for
12
+ * choice types) Options fields. Emits save/cancel so the parent manages the
13
+ * questions list. The Options field is only shown for choice field types
14
+ * (SELECT / CHECKBOX / RADIO), matching the backend's choice-type validation.
15
+ * @export
16
+ * @class CustomQuestionEditorComponent
17
+ */
18
+ export class CustomQuestionEditorComponent {
19
+ // eslint-disable-next-line no-unused-vars
20
+ constructor(formBuilder) {
21
+ this.formBuilder = formBuilder;
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ this.constants = constants;
24
+ this.editorTexts = this.constants?.rosterInterests?.interestForm?.questionEditor;
25
+ this.fieldType = QuestionFieldType;
26
+ this.typeOptions = [
27
+ { value: QuestionFieldType.TEXT, label: this.editorTexts?.types?.text },
28
+ {
29
+ value: QuestionFieldType.TEXTAREA,
30
+ label: this.editorTexts?.types?.textArea,
31
+ },
32
+ {
33
+ value: QuestionFieldType.SELECT,
34
+ label: this.editorTexts?.types?.dropdown,
35
+ },
36
+ {
37
+ value: QuestionFieldType.CHECKBOX,
38
+ label: this.editorTexts?.types?.checkbox,
39
+ },
40
+ { value: QuestionFieldType.RADIO, label: this.editorTexts?.types?.radio },
41
+ { value: QuestionFieldType.DATE, label: this.editorTexts?.types?.date },
42
+ ];
43
+ this.save = new EventEmitter();
44
+ this.cancel = new EventEmitter();
45
+ }
46
+ /**
47
+ * Builds the reactive form, seeding values from the question being edited.
48
+ * The question's options are stored as a raw JSON string, so they are parsed
49
+ * into one-per-line text for editing.
50
+ * @memberof CustomQuestionEditorComponent
51
+ */
52
+ ngOnInit() {
53
+ this.form = this.formBuilder.group({
54
+ label: [this.question?.questionLabel ?? '', [Validators.required]],
55
+ type: [this.question?.fieldType ?? null, [Validators.required]],
56
+ required: [this.question?.isRequired ?? true],
57
+ placeholder: [this.question?.placeholder ?? ''],
58
+ helpText: [this.question?.helpText ?? ''],
59
+ options: [this.parseOptionsString(this.question?.options)],
60
+ });
61
+ }
62
+ /**
63
+ * Parses a stored options JSON string into one-per-line text for the textarea.
64
+ * @param {(string | undefined)} optionsJson
65
+ * @return {string}
66
+ * @memberof CustomQuestionEditorComponent
67
+ */
68
+ parseOptionsString(optionsJson) {
69
+ if (!optionsJson)
70
+ return '';
71
+ try {
72
+ const parsed = JSON.parse(optionsJson);
73
+ return Array.isArray(parsed) ? parsed.join('\n') : '';
74
+ }
75
+ catch {
76
+ return '';
77
+ }
78
+ }
79
+ /**
80
+ * Whether the currently selected type requires an options list.
81
+ * @return {boolean}
82
+ * @memberof CustomQuestionEditorComponent
83
+ */
84
+ get isChoiceType() {
85
+ return CHOICE_FIELD_TYPES.includes(this.form?.get('type')?.value);
86
+ }
87
+ /**
88
+ * Parses the options textarea into a trimmed, non-empty string array,
89
+ * stripping trailing commas.
90
+ * @return {string[]}
91
+ * @memberof CustomQuestionEditorComponent
92
+ */
93
+ parseOptions() {
94
+ const raw = (this.form?.get('options')?.value ?? '');
95
+ return raw
96
+ .split('\n')
97
+ .map((option) => option.trim().replace(/,+$/, '').trim())
98
+ .filter((option) => option.length > 0);
99
+ }
100
+ /**
101
+ * Whether the editor is valid: label and type are required, and choice types
102
+ * require at least one option.
103
+ * @return {boolean}
104
+ * @memberof CustomQuestionEditorComponent
105
+ */
106
+ get isSaveDisabled() {
107
+ if (this.form?.invalid)
108
+ return true;
109
+ if (this.isChoiceType && this.parseOptions().length === 0)
110
+ return true;
111
+ return false;
112
+ }
113
+ /**
114
+ * Emits the assembled question on save. Options are serialized to a JSON
115
+ * string to match the backend's JSONB column.
116
+ * @memberof CustomQuestionEditorComponent
117
+ */
118
+ onSave() {
119
+ this.form.markAllAsTouched();
120
+ if (this.isSaveDisabled)
121
+ return;
122
+ const value = this.form.getRawValue();
123
+ this.save.emit({
124
+ questionId: this.question?.questionId,
125
+ groupId: this.question?.groupId,
126
+ viewOrder: this.question?.viewOrder,
127
+ questionLabel: value.label?.trim(),
128
+ fieldType: value.type,
129
+ isRequired: value.required,
130
+ placeholder: value.placeholder?.trim(),
131
+ helpText: value.helpText?.trim(),
132
+ options: this.isChoiceType
133
+ ? JSON.stringify(this.parseOptions())
134
+ : undefined,
135
+ });
136
+ }
137
+ /**
138
+ * Emits the cancel event.
139
+ * @memberof CustomQuestionEditorComponent
140
+ */
141
+ onCancel() {
142
+ this.cancel.emit();
143
+ }
144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomQuestionEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
145
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CustomQuestionEditorComponent, isStandalone: true, selector: "ieeesa-custom-question-editor", inputs: { question: "question" }, outputs: { save: "save", cancel: "cancel" }, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"ieeesa-question-editor\">\r\n <div class=\"ieeesa-question-editor__grid\">\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.labelLabel }}\r\n <span class=\"ieeesa-question-editor__required-mark\">*</span>\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"label\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.labelLabel\"\r\n />\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.typeLabel }}\r\n </label>\r\n <select\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"type\"\r\n [attr.aria-label]=\"editorTexts?.typeLabel\"\r\n >\r\n <option [ngValue]=\"null\" disabled>\r\n {{ editorTexts?.selectPlaceholder }}\r\n </option>\r\n <option\r\n *ngFor=\"let option of typeOptions\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__required-row d-flex align-items-center gap-2\">\r\n <span class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">{{\r\n editorTexts?.requiredLabel\r\n }}</span>\r\n <label class=\"ieeesa-question-editor__switch\">\r\n <input type=\"checkbox\" formControlName=\"required\" />\r\n <span class=\"ieeesa-question-editor__slider\"></span>\r\n </label>\r\n <span class=\"ieeesa-question-editor__required-hint ieeesa-body-sm-14\">{{\r\n editorTexts?.requiredLabel\r\n }}</span>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__grid\">\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.placeholderLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"placeholder\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.placeholderLabel\"\r\n />\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.helpTextLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"helpText\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.helpTextLabel\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isChoiceType\" class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.optionsLabel }}\r\n </label>\r\n <textarea\r\n class=\"ieeesa-question-editor__textarea ieeesa-body-sm-14\"\r\n formControlName=\"options\"\r\n rows=\"5\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.optionsLabel\"\r\n ></textarea>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__actions d-flex gap-3\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-question-editor__cancel\"\r\n (click)=\"onCancel()\"\r\n [attr.aria-label]=\"editorTexts?.cancel\"\r\n >\r\n {{ editorTexts?.cancel }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-question-editor__save\"\r\n [disabled]=\"isSaveDisabled\"\r\n (click)=\"onSave()\"\r\n [attr.aria-label]=\"editorTexts?.save\"\r\n >\r\n {{ editorTexts?.save }}\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-question-editor__grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.ieeesa-question-editor__field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.ieeesa-question-editor__label{font-weight:600;color:#1c1d1e}.ieeesa-question-editor__required-mark{color:#b3261e}.ieeesa-question-editor__input,.ieeesa-question-editor__textarea{width:100%;padding:10px 12px;border:1px solid #d7d6d6;border-radius:4px;background:#fff;color:#1c1d1e}.ieeesa-question-editor__input:focus,.ieeesa-question-editor__textarea:focus{outline:none;border-color:#00629b}.ieeesa-question-editor__textarea{resize:vertical}.ieeesa-question-editor__required-row{margin-bottom:16px}.ieeesa-question-editor__required-hint{color:#777a7e}.ieeesa-question-editor__switch{position:relative;display:inline-block;width:40px;height:20px}.ieeesa-question-editor__switch input{opacity:0;width:0;height:0}.ieeesa-question-editor__switch input:checked+.ieeesa-question-editor__slider{background-color:#00629b}.ieeesa-question-editor__switch input:checked+.ieeesa-question-editor__slider:before{transform:translate(20px)}.ieeesa-question-editor__slider{position:absolute;inset:0;cursor:pointer;background-color:#a7a8aa;border-radius:20px;transition:background-color .2s}.ieeesa-question-editor__slider:before{content:\"\";position:absolute;height:16px;width:16px;left:2px;bottom:2px;background-color:#fff;border-radius:50%;transition:transform .2s}.ieeesa-question-editor__actions{margin-top:8px}.ieeesa-question-editor__cancel{background:none;border:1px solid #00629b;color:#00629b;font-weight:600;border-radius:4px;padding:8px 20px;cursor:pointer}.ieeesa-question-editor__save{background-color:#00629b;color:#fff;border:none;border-radius:4px;padding:8px 20px;cursor:pointer}.ieeesa-question-editor__save:disabled{background-color:#c0c7cd;color:#fff;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
146
+ }
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomQuestionEditorComponent, decorators: [{
148
+ type: Component,
149
+ args: [{ selector: 'ieeesa-custom-question-editor', standalone: true, imports: [CommonModule, ReactiveFormsModule], encapsulation: ViewEncapsulation.None, template: "<form [formGroup]=\"form\" class=\"ieeesa-question-editor\">\r\n <div class=\"ieeesa-question-editor__grid\">\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.labelLabel }}\r\n <span class=\"ieeesa-question-editor__required-mark\">*</span>\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"label\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.labelLabel\"\r\n />\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.typeLabel }}\r\n </label>\r\n <select\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"type\"\r\n [attr.aria-label]=\"editorTexts?.typeLabel\"\r\n >\r\n <option [ngValue]=\"null\" disabled>\r\n {{ editorTexts?.selectPlaceholder }}\r\n </option>\r\n <option\r\n *ngFor=\"let option of typeOptions\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__required-row d-flex align-items-center gap-2\">\r\n <span class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">{{\r\n editorTexts?.requiredLabel\r\n }}</span>\r\n <label class=\"ieeesa-question-editor__switch\">\r\n <input type=\"checkbox\" formControlName=\"required\" />\r\n <span class=\"ieeesa-question-editor__slider\"></span>\r\n </label>\r\n <span class=\"ieeesa-question-editor__required-hint ieeesa-body-sm-14\">{{\r\n editorTexts?.requiredLabel\r\n }}</span>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__grid\">\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.placeholderLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"placeholder\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.placeholderLabel\"\r\n />\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.helpTextLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"helpText\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.helpTextLabel\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isChoiceType\" class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.optionsLabel }}\r\n </label>\r\n <textarea\r\n class=\"ieeesa-question-editor__textarea ieeesa-body-sm-14\"\r\n formControlName=\"options\"\r\n rows=\"5\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.optionsLabel\"\r\n ></textarea>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__actions d-flex gap-3\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-question-editor__cancel\"\r\n (click)=\"onCancel()\"\r\n [attr.aria-label]=\"editorTexts?.cancel\"\r\n >\r\n {{ editorTexts?.cancel }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-question-editor__save\"\r\n [disabled]=\"isSaveDisabled\"\r\n (click)=\"onSave()\"\r\n [attr.aria-label]=\"editorTexts?.save\"\r\n >\r\n {{ editorTexts?.save }}\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-question-editor__grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.ieeesa-question-editor__field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.ieeesa-question-editor__label{font-weight:600;color:#1c1d1e}.ieeesa-question-editor__required-mark{color:#b3261e}.ieeesa-question-editor__input,.ieeesa-question-editor__textarea{width:100%;padding:10px 12px;border:1px solid #d7d6d6;border-radius:4px;background:#fff;color:#1c1d1e}.ieeesa-question-editor__input:focus,.ieeesa-question-editor__textarea:focus{outline:none;border-color:#00629b}.ieeesa-question-editor__textarea{resize:vertical}.ieeesa-question-editor__required-row{margin-bottom:16px}.ieeesa-question-editor__required-hint{color:#777a7e}.ieeesa-question-editor__switch{position:relative;display:inline-block;width:40px;height:20px}.ieeesa-question-editor__switch input{opacity:0;width:0;height:0}.ieeesa-question-editor__switch input:checked+.ieeesa-question-editor__slider{background-color:#00629b}.ieeesa-question-editor__switch input:checked+.ieeesa-question-editor__slider:before{transform:translate(20px)}.ieeesa-question-editor__slider{position:absolute;inset:0;cursor:pointer;background-color:#a7a8aa;border-radius:20px;transition:background-color .2s}.ieeesa-question-editor__slider:before{content:\"\";position:absolute;height:16px;width:16px;left:2px;bottom:2px;background-color:#fff;border-radius:50%;transition:transform .2s}.ieeesa-question-editor__actions{margin-top:8px}.ieeesa-question-editor__cancel{background:none;border:1px solid #00629b;color:#00629b;font-weight:600;border-radius:4px;padding:8px 20px;cursor:pointer}.ieeesa-question-editor__save{background-color:#00629b;color:#fff;border:none;border-radius:4px;padding:8px 20px;cursor:pointer}.ieeesa-question-editor__save:disabled{background-color:#c0c7cd;color:#fff;cursor:not-allowed}\n"] }]
150
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { question: [{
151
+ type: Input
152
+ }], save: [{
153
+ type: Output
154
+ }], cancel: [{
155
+ type: Output
156
+ }] } });
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXF1ZXN0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1xdWVzdGlvbi1lZGl0b3IvY3VzdG9tLXF1ZXN0aW9uLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1xdWVzdGlvbi1lZGl0b3IvY3VzdG9tLXF1ZXN0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUdMLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsa0JBQWtCLEVBRWxCLGlCQUFpQixHQUNsQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFFekQ7Ozs7Ozs7O0dBUUc7QUFTSCxNQUFNLE9BQU8sNkJBQTZCO0lBNkJ4QywwQ0FBMEM7SUFDMUMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUE3QjVDLDhEQUE4RDtRQUM5RCxjQUFTLEdBQVEsU0FBUyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQztRQUM1RSxjQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDOUIsZ0JBQVcsR0FBRztZQUNaLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixD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QUU7WUFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7K0dBcElVLDZCQUE2QjttR0FBN0IsNkJBQTZCLHdLQ3ZDMUMsNmhJQWdIQSwyblZEOUVZLFlBQVksK1BBQUUsbUJBQW1COzs0RkFLaEMsNkJBQTZCO2tCQVJ6QyxTQUFTOytCQUNFLCtCQUErQixjQUM3QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsaUJBRzdCLGlCQUFpQixDQUFDLElBQUk7a0dBeUI1QixRQUFRO3NCQUFoQixLQUFLO2dCQUNJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtR3JvdXAsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBDSE9JQ0VfRklFTERfVFlQRVMsXHJcbiAgQ3VzdG9tUXVlc3Rpb24sXHJcbiAgUXVlc3Rpb25GaWVsZFR5cGUsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL2N1c3RvbS1xdWVzdGlvbi5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5cclxuLyoqXHJcbiAqIEVkaXRhYmxlIGNhcmQgZm9yIGEgc2luZ2xlIGN1c3RvbSBpbnRlcmVzdC1mb3JtIHF1ZXN0aW9uIChTUDNNLTMxNykuIFJlbmRlcnNcclxuICogdGhlIFF1ZXN0aW9uIExhYmVsLCBUeXBlLCBSZXF1aXJlZCB0b2dnbGUsIFBsYWNlaG9sZGVyLCBIZWxwIFRleHQgYW5kIChmb3JcclxuICogY2hvaWNlIHR5cGVzKSBPcHRpb25zIGZpZWxkcy4gRW1pdHMgc2F2ZS9jYW5jZWwgc28gdGhlIHBhcmVudCBtYW5hZ2VzIHRoZVxyXG4gKiBxdWVzdGlvbnMgbGlzdC4gVGhlIE9wdGlvbnMgZmllbGQgaXMgb25seSBzaG93biBmb3IgY2hvaWNlIGZpZWxkIHR5cGVzXHJcbiAqIChTRUxFQ1QgLyBDSEVDS0JPWCAvIFJBRElPKSwgbWF0Y2hpbmcgdGhlIGJhY2tlbmQncyBjaG9pY2UtdHlwZSB2YWxpZGF0aW9uLlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBDdXN0b21RdWVzdGlvbkVkaXRvckNvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtY3VzdG9tLXF1ZXN0aW9uLWVkaXRvcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXF1ZXN0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLXF1ZXN0aW9uLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21RdWVzdGlvbkVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBlZGl0b3JUZXh0cyA9IHRoaXMuY29uc3RhbnRzPy5yb3N0ZXJJbnRlcmVzdHM/LmludGVyZXN0Rm9ybT8ucXVlc3Rpb25FZGl0b3I7XHJcbiAgZmllbGRUeXBlID0gUXVlc3Rpb25GaWVsZFR5cGU7XHJcbiAgdHlwZU9wdGlvbnMgPSBbXHJcbiAgICB7IHZhbHVlOiBRdWVzdGlvbkZpZWxkVHlwZS5URVhULCBsYWJlbDogdGhpcy5lZGl0b3JUZXh0cz8udHlwZXM/LnRleHQgfSxcclxuICAgIHtcclxuICAgICAgdmFsdWU6IFF1ZXN0aW9uRmllbGRUeXBlLlRFWFRBUkVBLFxyXG4gICAgICBsYWJlbDogdGhpcy5lZGl0b3JUZXh0cz8udHlwZXM/LnRleHRBcmVhLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdmFsdWU6IFF1ZXN0aW9uRmllbGRUeXBlLlNFTEVDVCxcclxuICAgICAgbGFiZWw6IHRoaXMuZWRpdG9yVGV4dHM/LnR5cGVzPy5kcm9wZG93bixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiBRdWVzdGlvbkZpZWxkVHlwZS5DSEVDS0JPWCxcclxuICAgICAgbGFiZWw6IHRoaXMuZWRpdG9yVGV4dHM/LnR5cGVzPy5jaGVja2JveCxcclxuICAgIH0sXHJcbiAgICB7IHZhbHVlOiBRdWVzdGlvbkZpZWxkVHlwZS5SQURJTywgbGFiZWw6IHRoaXMuZWRpdG9yVGV4dHM/LnR5cGVzPy5yYWRpbyB9LFxyXG4gICAgeyB2YWx1ZTogUXVlc3Rpb25GaWVsZFR5cGUuREFURSwgbGFiZWw6IHRoaXMuZWRpdG9yVGV4dHM/LnR5cGVzPy5kYXRlIH0sXHJcbiAgXTtcclxuXHJcbiAgQElucHV0KCkgcXVlc3Rpb24hOiBDdXN0b21RdWVzdGlvbjtcclxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q3VzdG9tUXVlc3Rpb24+KCk7XHJcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyB0aGUgcmVhY3RpdmUgZm9ybSwgc2VlZGluZyB2YWx1ZXMgZnJvbSB0aGUgcXVlc3Rpb24gYmVpbmcgZWRpdGVkLlxyXG4gICAqIFRoZSBxdWVzdGlvbidzIG9wdGlvbnMgYXJlIHN0b3JlZCBhcyBhIHJhdyBKU09OIHN0cmluZywgc28gdGhleSBhcmUgcGFyc2VkXHJcbiAgICogaW50byBvbmUtcGVyLWxpbmUgdGV4dCBmb3IgZWRpdGluZy5cclxuICAgKiBAbWVtYmVyb2YgQ3VzdG9tUXVlc3Rpb25FZGl0b3JDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBsYWJlbDogW3RoaXMucXVlc3Rpb24/LnF1ZXN0aW9uTGFiZWwgPz8gJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHR5cGU6IFt0aGlzLnF1ZXN0aW9uPy5maWVsZFR5cGUgPz8gbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgcmVxdWlyZWQ6IFt0aGlzLnF1ZXN0aW9uPy5pc1JlcXVpcmVkID8/IHRydWVdLFxyXG4gICAgICBwbGFjZWhvbGRlcjogW3RoaXMucXVlc3Rpb24/LnBsYWNlaG9sZGVyID8/ICcnXSxcclxuICAgICAgaGVscFRleHQ6IFt0aGlzLnF1ZXN0aW9uPy5oZWxwVGV4dCA/PyAnJ10sXHJcbiAgICAgIG9wdGlvbnM6IFt0aGlzLnBhcnNlT3B0aW9uc1N0cmluZyh0aGlzLnF1ZXN0aW9uPy5vcHRpb25zKV0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlcyBhIHN0b3JlZCBvcHRpb25zIEpTT04gc3RyaW5nIGludG8gb25lLXBlci1saW5lIHRleHQgZm9yIHRoZSB0ZXh0YXJlYS5cclxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCB1bmRlZmluZWQpfSBvcHRpb25zSnNvblxyXG4gICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgKiBAbWVtYmVyb2YgQ3VzdG9tUXVlc3Rpb25FZGl0b3JDb21wb25lbnRcclxuICAgKi9cclxuICBwYXJzZU9wdGlvbnNTdHJpbmcob3B0aW9uc0pzb246IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIW9wdGlvbnNKc29uKSByZXR1cm4gJyc7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKG9wdGlvbnNKc29uKTtcclxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZC5qb2luKCdcXG4nKSA6ICcnO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0eXBlIHJlcXVpcmVzIGFuIG9wdGlvbnMgbGlzdC5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBDdXN0b21RdWVzdGlvbkVkaXRvckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldCBpc0Nob2ljZVR5cGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gQ0hPSUNFX0ZJRUxEX1RZUEVTLmluY2x1ZGVzKFxyXG4gICAgICB0aGlzLmZvcm0/LmdldCgndHlwZScpPy52YWx1ZSBhcyBRdWVzdGlvbkZpZWxkVHlwZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlcyB0aGUgb3B0aW9ucyB0ZXh0YXJlYSBpbnRvIGEgdHJpbW1lZCwgbm9uLWVtcHR5IHN0cmluZyBhcnJheSxcclxuICAgKiBzdHJpcHBpbmcgdHJhaWxpbmcgY29tbWFzLlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAqIEBtZW1iZXJvZiBDdXN0b21RdWVzdGlvbkVkaXRvckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHBhcnNlT3B0aW9ucygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCByYXcgPSAodGhpcy5mb3JtPy5nZXQoJ29wdGlvbnMnKT8udmFsdWUgPz8gJycpIGFzIHN0cmluZztcclxuICAgIHJldHVybiByYXdcclxuICAgICAgLnNwbGl0KCdcXG4nKVxyXG4gICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi50cmltKCkucmVwbGFjZSgvLCskLywgJycpLnRyaW0oKSlcclxuICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24ubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBlZGl0b3IgaXMgdmFsaWQ6IGxhYmVsIGFuZCB0eXBlIGFyZSByZXF1aXJlZCwgYW5kIGNob2ljZSB0eXBlc1xyXG4gICAqIHJlcXVpcmUgYXQgbGVhc3Qgb25lIG9wdGlvbi5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBDdXN0b21RdWVzdGlvbkVkaXRvckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldCBpc1NhdmVEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmZvcm0/LmludmFsaWQpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHRoaXMuaXNDaG9pY2VUeXBlICYmIHRoaXMucGFyc2VPcHRpb25zKCkubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBhc3NlbWJsZWQgcXVlc3Rpb24gb24gc2F2ZS4gT3B0aW9ucyBhcmUgc2VyaWFsaXplZCB0byBhIEpTT05cclxuICAgKiBzdHJpbmcgdG8gbWF0Y2ggdGhlIGJhY2tlbmQncyBKU09OQiBjb2x1bW4uXHJcbiAgICogQG1lbWJlcm9mIEN1c3RvbVF1ZXN0aW9uRWRpdG9yQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25TYXZlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIGlmICh0aGlzLmlzU2F2ZURpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgdGhpcy5zYXZlLmVtaXQoe1xyXG4gICAgICBxdWVzdGlvbklkOiB0aGlzLnF1ZXN0aW9uPy5xdWVzdGlvbklkLFxyXG4gICAgICBncm91cElkOiB0aGlzLnF1ZXN0aW9uPy5ncm91cElkLFxyXG4gICAgICB2aWV3T3JkZXI6IHRoaXMucXVlc3Rpb24/LnZpZXdPcmRlcixcclxuICAgICAgcXVlc3Rpb25MYWJlbDogdmFsdWUubGFiZWw/LnRyaW0oKSxcclxuICAgICAgZmllbGRUeXBlOiB2YWx1ZS50eXBlLFxyXG4gICAgICBpc1JlcXVpcmVkOiB2YWx1ZS5yZXF1aXJlZCxcclxuICAgICAgcGxhY2Vob2xkZXI6IHZhbHVlLnBsYWNlaG9sZGVyPy50cmltKCksXHJcbiAgICAgIGhlbHBUZXh0OiB2YWx1ZS5oZWxwVGV4dD8udHJpbSgpLFxyXG4gICAgICBvcHRpb25zOiB0aGlzLmlzQ2hvaWNlVHlwZVxyXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZU9wdGlvbnMoKSlcclxuICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgdGhlIGNhbmNlbCBldmVudC5cclxuICAgKiBAbWVtYmVyb2YgQ3VzdG9tUXVlc3Rpb25FZGl0b3JDb21wb25lbnRcclxuICAgKi9cclxuICBvbkNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yXCI+XHJcbiAgPGRpdiBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2dyaWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19maWVsZFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19sYWJlbCBpZWVlc2EtYm9keS1zbS0xNFwiPlxyXG4gICAgICAgIHt7IGVkaXRvclRleHRzPy5sYWJlbExhYmVsIH19XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19yZXF1aXJlZC1tYXJrXCI+Kjwvc3Bhbj5cclxuICAgICAgPC9sYWJlbD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9faW5wdXQgaWVlZXNhLWJvZHktc20tMTRcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhYmVsXCJcclxuICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlZGl0b3JUZXh0cz8udHlwZUhlcmVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJlZGl0b3JUZXh0cz8ubGFiZWxMYWJlbFwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fZmllbGRcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fbGFiZWwgaWVlZXNhLWJvZHktc20tMTRcIj5cclxuICAgICAgICB7eyBlZGl0b3JUZXh0cz8udHlwZUxhYmVsIH19XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDxzZWxlY3RcclxuICAgICAgICBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2lucHV0IGllZWVzYS1ib2R5LXNtLTE0XCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImVkaXRvclRleHRzPy50eXBlTGFiZWxcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCIgZGlzYWJsZWQ+XHJcbiAgICAgICAgICB7eyBlZGl0b3JUZXh0cz8uc2VsZWN0UGxhY2Vob2xkZXIgfX1cclxuICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHR5cGVPcHRpb25zXCJcclxuICAgICAgICAgIFtuZ1ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19yZXF1aXJlZC1yb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19sYWJlbCBpZWVlc2EtYm9keS1zbS0xNFwiPnt7XHJcbiAgICAgIGVkaXRvclRleHRzPy5yZXF1aXJlZExhYmVsXHJcbiAgICB9fTwvc3Bhbj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX3N3aXRjaFwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZm9ybUNvbnRyb2xOYW1lPVwicmVxdWlyZWRcIiAvPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX3NsaWRlclwiPjwvc3Bhbj5cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8c3BhbiBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX3JlcXVpcmVkLWhpbnQgaWVlZXNhLWJvZHktc20tMTRcIj57e1xyXG4gICAgICBlZGl0b3JUZXh0cz8ucmVxdWlyZWRMYWJlbFxyXG4gICAgfX08L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19ncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fZmllbGRcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fbGFiZWwgaWVlZXNhLWJvZHktc20tMTRcIj5cclxuICAgICAgICB7eyBlZGl0b3JUZXh0cz8ucGxhY2Vob2xkZXJMYWJlbCB9fVxyXG4gICAgICA8L2xhYmVsPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19pbnB1dCBpZWVlc2EtYm9keS1zbS0xNFwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cImVkaXRvclRleHRzPy50eXBlSGVyZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImVkaXRvclRleHRzPy5wbGFjZWhvbGRlckxhYmVsXCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19maWVsZFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19sYWJlbCBpZWVlc2EtYm9keS1zbS0xNFwiPlxyXG4gICAgICAgIHt7IGVkaXRvclRleHRzPy5oZWxwVGV4dExhYmVsIH19XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2lucHV0IGllZWVzYS1ib2R5LXNtLTE0XCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJoZWxwVGV4dFwiXHJcbiAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZWRpdG9yVGV4dHM/LnR5cGVIZXJlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZWRpdG9yVGV4dHM/LmhlbHBUZXh0TGFiZWxcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJpc0Nob2ljZVR5cGVcIiBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2ZpZWxkXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19sYWJlbCBpZWVlc2EtYm9keS1zbS0xNFwiPlxyXG4gICAgICB7eyBlZGl0b3JUZXh0cz8ub3B0aW9uc0xhYmVsIH19XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPHRleHRhcmVhXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fdGV4dGFyZWEgaWVlZXNhLWJvZHktc20tMTRcIlxyXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJvcHRpb25zXCJcclxuICAgICAgcm93cz1cIjVcIlxyXG4gICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlZGl0b3JUZXh0cz8udHlwZUhlcmVQbGFjZWhvbGRlclwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZWRpdG9yVGV4dHM/Lm9wdGlvbnNMYWJlbFwiXHJcbiAgICA+PC90ZXh0YXJlYT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2FjdGlvbnMgZC1mbGV4IGdhcC0zXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2NhbmNlbFwiXHJcbiAgICAgIChjbGljayk9XCJvbkNhbmNlbCgpXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJlZGl0b3JUZXh0cz8uY2FuY2VsXCJcclxuICAgID5cclxuICAgICAge3sgZWRpdG9yVGV4dHM/LmNhbmNlbCB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX3NhdmVcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNTYXZlRGlzYWJsZWRcIlxyXG4gICAgICAoY2xpY2spPVwib25TYXZlKClcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImVkaXRvclRleHRzPy5zYXZlXCJcclxuICAgID5cclxuICAgICAge3sgZWRpdG9yVGV4dHM/LnNhdmUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==