@bnsights/bbsf-controls 1.0.194-beta.9 → 1.2.1

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 (159) hide show
  1. package/README.md +1315 -1245
  2. package/fesm2022/bnsights-bbsf-controls.mjs +375 -345
  3. package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -1
  4. package/lib/Shared/Models/DropdownOptions.d.ts +3 -0
  5. package/lib/Shared/Models/RepeaterOptions.d.ts +2 -0
  6. package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +0 -1
  7. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +0 -1
  8. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +1 -1
  9. package/lib/controls/Repeater/repeater/repeater.component.d.ts +7 -0
  10. package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +7 -0
  11. package/lib/modules/bbsf-editors.module.d.ts +6 -7
  12. package/package.json +34 -37
  13. package/src/lib/assets/Style.scss +2 -0
  14. package/src/lib/assets/ace-builds/ace.js +1 -1
  15. package/src/lib/assets/ace-builds/mode-markdown.js +1 -1
  16. package/esm2022/bnsights-bbsf-controls.mjs +0 -5
  17. package/esm2022/lib/Shared/Components/app-base-component.mjs +0 -226
  18. package/esm2022/lib/Shared/Components/ng-tag-input.mjs +0 -336
  19. package/esm2022/lib/Shared/Directives/appPreventDoubleClick.directive.mjs +0 -39
  20. package/esm2022/lib/Shared/Directives/template-name.directive.mjs +0 -19
  21. package/esm2022/lib/Shared/Enums/CalendarView.mjs +0 -8
  22. package/esm2022/lib/Shared/Enums/ControlLayout.mjs +0 -6
  23. package/esm2022/lib/Shared/Enums/Countries.mjs +0 -247
  24. package/esm2022/lib/Shared/Enums/Enums.mjs +0 -36
  25. package/esm2022/lib/Shared/Enums/FileType.mjs +0 -29
  26. package/esm2022/lib/Shared/Enums/FilterType.mjs +0 -11
  27. package/esm2022/lib/Shared/Enums/FontSize.mjs +0 -7
  28. package/esm2022/lib/Shared/Enums/ForceDirection.mjs +0 -6
  29. package/esm2022/lib/Shared/Enums/IconPosition.mjs +0 -6
  30. package/esm2022/lib/Shared/Enums/ImageType.mjs +0 -10
  31. package/esm2022/lib/Shared/Enums/InputType.mjs +0 -10
  32. package/esm2022/lib/Shared/Enums/Insert.mjs +0 -9
  33. package/esm2022/lib/Shared/Enums/LanguageMode.mjs +0 -11
  34. package/esm2022/lib/Shared/Enums/LanguageValidation.mjs +0 -6
  35. package/esm2022/lib/Shared/Enums/Markdown.mjs +0 -20
  36. package/esm2022/lib/Shared/Enums/Misc.mjs +0 -7
  37. package/esm2022/lib/Shared/Enums/PagingActionMode.mjs +0 -6
  38. package/esm2022/lib/Shared/Enums/Para.mjs +0 -9
  39. package/esm2022/lib/Shared/Enums/PickerType.mjs +0 -7
  40. package/esm2022/lib/Shared/Enums/SelectMode.mjs +0 -6
  41. package/esm2022/lib/Shared/Enums/StartView.mjs +0 -7
  42. package/esm2022/lib/Shared/Enums/Style.mjs +0 -8
  43. package/esm2022/lib/Shared/Enums/StyleConfirmationMode.mjs +0 -7
  44. package/esm2022/lib/Shared/Enums/TagInputView.mjs +0 -7
  45. package/esm2022/lib/Shared/Enums/ToolbarButtons.mjs +0 -33
  46. package/esm2022/lib/Shared/Enums/map-enums.mjs +0 -15
  47. package/esm2022/lib/Shared/Enums/menu-list-enum.mjs +0 -6
  48. package/esm2022/lib/Shared/Models/Attribute.mjs +0 -3
  49. package/esm2022/lib/Shared/Models/AutocompleteDTO.mjs +0 -8
  50. package/esm2022/lib/Shared/Models/AutocompleteOptions.mjs +0 -39
  51. package/esm2022/lib/Shared/Models/CalendarDTO.mjs +0 -3
  52. package/esm2022/lib/Shared/Models/CalendarEventDTO.mjs +0 -3
  53. package/esm2022/lib/Shared/Models/CalendarOptions.mjs +0 -19
  54. package/esm2022/lib/Shared/Models/CancelDTO.mjs +0 -7
  55. package/esm2022/lib/Shared/Models/CaptchaStyle.mjs +0 -3
  56. package/esm2022/lib/Shared/Models/CheckBoxOptions.mjs +0 -11
  57. package/esm2022/lib/Shared/Models/ConfirmationModalOptions.mjs +0 -39
  58. package/esm2022/lib/Shared/Models/ControlOptionsBase.mjs +0 -17
  59. package/esm2022/lib/Shared/Models/CustomValidation.mjs +0 -14
  60. package/esm2022/lib/Shared/Models/DatePickerOptions.mjs +0 -40
  61. package/esm2022/lib/Shared/Models/DropdownListItem.mjs +0 -3
  62. package/esm2022/lib/Shared/Models/DropdownOptions.mjs +0 -38
  63. package/esm2022/lib/Shared/Models/EditPersonalImage.mjs +0 -7
  64. package/esm2022/lib/Shared/Models/EnglishArabicDTO.mjs +0 -10
  65. package/esm2022/lib/Shared/Models/FileDTO.mjs +0 -24
  66. package/esm2022/lib/Shared/Models/FileOptions.mjs +0 -15
  67. package/esm2022/lib/Shared/Models/FileUploadModel.mjs +0 -3
  68. package/esm2022/lib/Shared/Models/FileUploadOptions.mjs +0 -13
  69. package/esm2022/lib/Shared/Models/FilterItem.mjs +0 -8
  70. package/esm2022/lib/Shared/Models/FormOptions.mjs +0 -32
  71. package/esm2022/lib/Shared/Models/HtmlEditorOptions.mjs +0 -12
  72. package/esm2022/lib/Shared/Models/ImageUploadOptions.mjs +0 -14
  73. package/esm2022/lib/Shared/Models/MapAutoCompleteOptions.mjs +0 -12
  74. package/esm2022/lib/Shared/Models/MapAutocompleteDTO.mjs +0 -6
  75. package/esm2022/lib/Shared/Models/MarkdownEditorOptions.mjs +0 -24
  76. package/esm2022/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs +0 -9
  77. package/esm2022/lib/Shared/Models/MultiLingualTextAreaOptions.mjs +0 -9
  78. package/esm2022/lib/Shared/Models/MultiLingualTextBoxOptions.mjs +0 -17
  79. package/esm2022/lib/Shared/Models/MultilingualControlOptionsBase.mjs +0 -21
  80. package/esm2022/lib/Shared/Models/MultipleFileUploadModel.mjs +0 -9
  81. package/esm2022/lib/Shared/Models/PagingDTO.mjs +0 -13
  82. package/esm2022/lib/Shared/Models/PagingOptions.mjs +0 -49
  83. package/esm2022/lib/Shared/Models/PagingPayload.mjs +0 -3
  84. package/esm2022/lib/Shared/Models/PhoneOptions.mjs +0 -16
  85. package/esm2022/lib/Shared/Models/ProfileImageUploadOptions.mjs +0 -11
  86. package/esm2022/lib/Shared/Models/ProfilePictureDTO.mjs +0 -3
  87. package/esm2022/lib/Shared/Models/RadioButtonItem.mjs +0 -3
  88. package/esm2022/lib/Shared/Models/RadioButtonOptions.mjs +0 -7
  89. package/esm2022/lib/Shared/Models/RangeNumber.mjs +0 -3
  90. package/esm2022/lib/Shared/Models/Recaptcha.mjs +0 -6
  91. package/esm2022/lib/Shared/Models/RecaptchaOptions.mjs +0 -22
  92. package/esm2022/lib/Shared/Models/RepeaterField.mjs +0 -3
  93. package/esm2022/lib/Shared/Models/RepeaterOptions.mjs +0 -14
  94. package/esm2022/lib/Shared/Models/SaveDTO.mjs +0 -7
  95. package/esm2022/lib/Shared/Models/TagsInputDTO.mjs +0 -3
  96. package/esm2022/lib/Shared/Models/TagsInputOptions.mjs +0 -56
  97. package/esm2022/lib/Shared/Models/TextAreaOptions.mjs +0 -19
  98. package/esm2022/lib/Shared/Models/TextBoxOptions.mjs +0 -27
  99. package/esm2022/lib/Shared/Models/ToggleSlideOptions.mjs +0 -9
  100. package/esm2022/lib/Shared/Models/UploadPersonalImage.mjs +0 -7
  101. package/esm2022/lib/Shared/Models/bread-crumb.mjs +0 -8
  102. package/esm2022/lib/Shared/Models/control-filter-Item.mjs +0 -6
  103. package/esm2022/lib/Shared/Models/filter-options.mjs +0 -9
  104. package/esm2022/lib/Shared/Models/index.mjs +0 -58
  105. package/esm2022/lib/Shared/Models/page-header-options.mjs +0 -78
  106. package/esm2022/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +0 -22
  107. package/esm2022/lib/Shared/Pipes/bbsf-date.pipe.mjs +0 -22
  108. package/esm2022/lib/Shared/config/environment.mjs +0 -12
  109. package/esm2022/lib/Shared/default_intl.mjs +0 -29
  110. package/esm2022/lib/Shared/services/ControlUtility.mjs +0 -162
  111. package/esm2022/lib/Shared/services/GlobalSettings.service.mjs +0 -30
  112. package/esm2022/lib/Shared/services/OnPagingFiltersChange.service.mjs +0 -24
  113. package/esm2022/lib/Shared/services/file-upload.service.mjs +0 -29
  114. package/esm2022/lib/Shared/services/index.mjs +0 -7
  115. package/esm2022/lib/Shared/services/render-component-service.service.mjs +0 -32
  116. package/esm2022/lib/Shared/services/validationErrorMassage.service.mjs +0 -125
  117. package/esm2022/lib/Shared/utils/date-formatter.mjs +0 -48
  118. package/esm2022/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +0 -299
  119. package/esm2022/lib/controls/Calendar/Calendar.component.mjs +0 -179
  120. package/esm2022/lib/controls/CheckBox/CheckBox.component.mjs +0 -121
  121. package/esm2022/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +0 -143
  122. package/esm2022/lib/controls/DateTimePicker/DateTimePicker.component.mjs +0 -240
  123. package/esm2022/lib/controls/DropdownList/DropdownList.component.mjs +0 -296
  124. package/esm2022/lib/controls/FileUpload/FileUpload.component.mjs +0 -741
  125. package/esm2022/lib/controls/Form/Form.component.mjs +0 -117
  126. package/esm2022/lib/controls/HtmlEditor/HtmlEditor.component.mjs +0 -185
  127. package/esm2022/lib/controls/ImageUpload/ImageUpload.component.mjs +0 -360
  128. package/esm2022/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +0 -502
  129. package/esm2022/lib/controls/MarkdownEditor/markdown-editor.component.mjs +0 -243
  130. package/esm2022/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +0 -456
  131. package/esm2022/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +0 -441
  132. package/esm2022/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +0 -500
  133. package/esm2022/lib/controls/Paging/JwPagination.component.mjs +0 -160
  134. package/esm2022/lib/controls/Paging/Paging.component.mjs +0 -626
  135. package/esm2022/lib/controls/Phone/Phone.component.mjs +0 -134
  136. package/esm2022/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +0 -390
  137. package/esm2022/lib/controls/RadioButton/RadioButton.component.mjs +0 -113
  138. package/esm2022/lib/controls/Recaptcha/Recaptcha.component.mjs +0 -134
  139. package/esm2022/lib/controls/Repeater/repeater/repeater.component.mjs +0 -135
  140. package/esm2022/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +0 -1291
  141. package/esm2022/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +0 -22
  142. package/esm2022/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +0 -118
  143. package/esm2022/lib/controls/TagsInput/TagsInput.component.mjs +0 -308
  144. package/esm2022/lib/controls/TextArea/TextArea.component.mjs +0 -581
  145. package/esm2022/lib/controls/TextBox/TextBox.component.mjs +0 -357
  146. package/esm2022/lib/controls/Toggleslide/Toggleslide.component.mjs +0 -96
  147. package/esm2022/lib/controls/bbsf-controls.module.mjs +0 -92
  148. package/esm2022/lib/controls/page-header-component/page-header-component.component.mjs +0 -42
  149. package/esm2022/lib/modules/bbsf-core.module.mjs +0 -210
  150. package/esm2022/lib/modules/bbsf-datetime.module.mjs +0 -90
  151. package/esm2022/lib/modules/bbsf-dropdown.module.mjs +0 -57
  152. package/esm2022/lib/modules/bbsf-editors.module.mjs +0 -97
  153. package/esm2022/lib/modules/bbsf-forms-basic.module.mjs +0 -79
  154. package/esm2022/lib/modules/bbsf-multilingual.module.mjs +0 -60
  155. package/esm2022/lib/modules/bbsf-phone.module.mjs +0 -57
  156. package/esm2022/lib/modules/bbsf-specialized.module.mjs +0 -160
  157. package/esm2022/lib/modules/bbsf-uploads.module.mjs +0 -106
  158. package/esm2022/lib/modules/bbsf-utility.module.mjs +0 -103
  159. package/esm2022/public-api.mjs +0 -169
@@ -1,456 +0,0 @@
1
- import { Component, Input, Optional, Output, EventEmitter, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FormControl, Validators, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
- import { AngularEditorModule } from '@kolkov/angular-editor';
5
- import { InputType } from '../../Shared/Enums/InputType';
6
- import { EnglishArabicDTO } from '../../Shared/Models/EnglishArabicDTO';
7
- import { LanguageMode } from '../../Shared/Enums/LanguageMode';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/forms";
10
- import * as i2 from "../../Shared/services/ControlUtility";
11
- import * as i3 from "@bnsights/bbsf-utilities/ui";
12
- import * as i4 from "../../Shared/services/GlobalSettings.service";
13
- import * as i5 from "@angular/common";
14
- import * as i6 from "@kolkov/angular-editor";
15
- export class MultiLingualHtmlEditorComponent {
16
- static { this.controlContainerstatic = null; }
17
- constructor(multiLingualHtmlEditorFormControlHost, controlContainer, controlUtility, utilityService, controlValidationService, globalSettings) {
18
- this.multiLingualHtmlEditorFormControlHost = multiLingualHtmlEditorFormControlHost;
19
- this.controlContainer = controlContainer;
20
- this.controlUtility = controlUtility;
21
- this.utilityService = utilityService;
22
- this.controlValidationService = controlValidationService;
23
- this.globalSettings = globalSettings;
24
- this.OnChange = new EventEmitter();
25
- this.currentLanguage = '';
26
- this.arabicValidationRules = [];
27
- this.arabicValidationRulesasync = [];
28
- this.englishValidationRules = [];
29
- this.englishValidationRulesasync = [];
30
- this.markAllAsTouched = false;
31
- this.validationRules = [];
32
- this.validationRulesasync = [];
33
- this.arabicLetterOnly = '';
34
- this.englishLetterOnly = '';
35
- this.englishValue = null;
36
- this.arabicValue = null;
37
- this.resetError = () => {
38
- this.controlValidationService.removeGlobalError();
39
- };
40
- //External Method
41
- this.removeRequiredValidation = () => {
42
- this.controlUtility.removeRequiredValidation(this.englishHtmlEditorFormControl, this.englishValidationRules, this.options);
43
- this.controlUtility.removeRequiredValidation(this.arabicHtmlEditorFormControl, this.arabicValidationRules, this.options);
44
- };
45
- //External Method
46
- this.addRequiredValidation = () => {
47
- this.controlUtility.addRequiredValidation(this.englishHtmlEditorFormControl, this.englishValidationRules, this.options);
48
- this.controlUtility.addRequiredValidation(this.arabicHtmlEditorFormControl, this.arabicValidationRules, this.options);
49
- };
50
- //External Method
51
- this.removeCustomValidation = (customValidation) => {
52
- this.controlUtility.removeCustomValidation(this.englishHtmlEditorFormControl, this.englishValidationRules, customValidation);
53
- this.controlUtility.removeCustomValidation(this.arabicHtmlEditorFormControl, this.arabicValidationRules, customValidation);
54
- };
55
- //External Method
56
- this.addCustomValidation = (customValidation) => {
57
- this.controlUtility.addCustomValidation(this.englishHtmlEditorFormControl, this.englishValidationRules, customValidation);
58
- this.controlUtility.addCustomValidation(this.arabicHtmlEditorFormControl, this.arabicValidationRules, customValidation);
59
- };
60
- //External Method
61
- this.isValid = () => {
62
- this.controlUtility.isValid(this.englishHtmlEditorFormControl);
63
- this.controlUtility.isValid(this.arabicHtmlEditorFormControl);
64
- };
65
- MultiLingualHtmlEditorComponent.controlContainerstatic = this.controlContainer;
66
- }
67
- getCustomErrorsMassages() {
68
- this.arabicLetterOnly = this.utilityService.getResourceValue('ArabicLetterOnly');
69
- this.englishLetterOnly = this.utilityService.getResourceValue('EnglishLetterOnly');
70
- }
71
- async ngOnInit() {
72
- if (!this.options.viewType)
73
- this.options.viewType = this.globalSettings.viewType;
74
- if (!this.options.languageMode)
75
- this.options.languageMode = this.globalSettings.languageMode;
76
- this.editorEnglishConfig = {
77
- editable: !this.options.isDisabled,
78
- spellcheck: true,
79
- height: this.options.height.toString(),
80
- minHeight: this.options.height.toString(),
81
- maxHeight: 'auto',
82
- width: 'auto',
83
- minWidth: 'auto',
84
- translate: 'yes',
85
- enableToolbar: true,
86
- showToolbar: true,
87
- placeholder: this.options.englishPlaceholder,
88
- defaultParagraphSeparator: '',
89
- defaultFontName: '',
90
- defaultFontSize: '',
91
- fonts: [
92
- { class: 'arial', name: 'Arial' },
93
- { class: 'times-new-roman', name: 'Times New Roman' },
94
- { class: 'calibri', name: 'Calibri' },
95
- { class: 'comic-sans-ms', name: 'Comic Sans MS' }
96
- ],
97
- customClasses: [
98
- {
99
- name: 'quote',
100
- class: 'quote'
101
- },
102
- {
103
- name: 'redText',
104
- class: 'redText'
105
- },
106
- {
107
- name: 'titleText',
108
- class: 'titleText',
109
- tag: 'h1'
110
- }
111
- ],
112
- // uploadUrl: 'v1/image', this line comment so the editor will convert image to base64 when enable upload the api should return full url for file
113
- uploadWithCredentials: false,
114
- sanitize: false,
115
- toolbarPosition: 'top',
116
- toolbarHiddenButtons: []
117
- };
118
- this.editorArabicConfig = {
119
- editable: !this.options.isDisabled,
120
- spellcheck: true,
121
- height: this.options.height.toString(),
122
- minHeight: this.options.height.toString(),
123
- maxHeight: 'auto',
124
- width: 'auto',
125
- minWidth: 'auto',
126
- translate: 'yes',
127
- enableToolbar: true,
128
- showToolbar: true,
129
- placeholder: this.options.arabicPlaceholder,
130
- defaultParagraphSeparator: '',
131
- defaultFontName: '',
132
- defaultFontSize: '',
133
- fonts: [
134
- { class: 'arial', name: 'Arial' },
135
- { class: 'times-new-roman', name: 'Times New Roman' },
136
- { class: 'calibri', name: 'Calibri' },
137
- { class: 'comic-sans-ms', name: 'Comic Sans MS' }
138
- ],
139
- customClasses: [
140
- {
141
- name: 'quote',
142
- class: 'quote'
143
- },
144
- {
145
- name: 'redText',
146
- class: 'redText'
147
- },
148
- {
149
- name: 'titleText',
150
- class: 'titleText',
151
- tag: 'h1'
152
- }
153
- ],
154
- // uploadUrl: 'v1/image', this line comment so the editor will convert image to base64 when enable upload the api should return full url for file
155
- uploadWithCredentials: false,
156
- sanitize: false,
157
- toolbarPosition: 'top',
158
- toolbarHiddenButtons: []
159
- };
160
- this.controlValidationService.isCreatedBefor = false;
161
- this.currentLanguage = await this.utilityService.getCurrentLanguage();
162
- // UtilityService.Translator.onLangChange.subscribe((event: LangChangeEvent) => {
163
- // this.CurrentLanguage = event.lang
164
- // this.showInputUsingLanguageMode();
165
- // });
166
- // this.miscList = this.options.ToolsList_Misc != null ? this.options.ToolsList_Misc : ['codeview', 'undo', 'redo'];
167
- // this.styleList = this.options.ToolsList_Style != null ? this.options.ToolsList_Style : ['bold', 'italic', 'underline', 'clear']
168
- // this.fontsizeList = this.options.ToolsList_FontSize != null ? this.options.ToolsList_FontSize : ['fontname', 'fontsize', 'color']
169
- // this.paraList = this.options.ToolsList_Para != null ? this.options.ToolsList_Para : ['style', 'ul', 'ol', 'paragraph', 'height']
170
- // this.insertList = this.options.ToolsList_Insert != null ? this.options.ToolsList_Insert : ['table', 'picture', 'link', 'video', 'hr']
171
- // this.arabicConfig = {
172
- // placeholder: this.options.ArabicPlaceholder,
173
- // height: `${this.options.Height}px`,
174
- // toolbar: [
175
- // ['misc', this.miscList],
176
- // ['style', this.styleList],
177
- // ['fontsize', this.fontsizeList],
178
- // ['para', this.paraList],
179
- // ['insert', this.insertList]
180
- // ],
181
- // fontNames: ['Helvetica', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Roboto', 'Times']
182
- // }
183
- // this.EnglishConfig = {
184
- // placeholder: this.options.EnglishPlaceholder,
185
- // height: `${this.options.Height}px`,
186
- // toolbar: [
187
- // ['misc', this.miscList],
188
- // ['style', this.styleList],
189
- // ['fontsize', this.fontsizeList],
190
- // ['para', this.paraList],
191
- // ['insert', this.insertList]
192
- // ],
193
- // fontNames: ['Helvetica', 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Roboto', 'Times']
194
- // }
195
- this.multilingualHtmlEditorgroup = new FormGroup({});
196
- this.multilingualHtmlEditorgroup.addControl('Arabic', new FormControl(''));
197
- this.multilingualHtmlEditorgroup.addControl('English', new FormControl(''));
198
- this.arabicHtmlEditorFormControl = this.multilingualHtmlEditorgroup.controls['Arabic']; // new FormControl('',validationRules);
199
- this.englishHtmlEditorFormControl = this.multilingualHtmlEditorgroup.controls['English']; // new FormControl('',validationRules);
200
- this.group.addControl(this.options.name, new FormGroup(this.multilingualHtmlEditorgroup.controls));
201
- this.getCustomErrorsMassages();
202
- switch (this.options.type) {
203
- case InputType.Email:
204
- this.englishValidationRules.push(Validators.compose([
205
- this.controlUtility.patternValidator(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/, {
206
- EmailValidationKey: ''
207
- })
208
- ]));
209
- this.arabicValidationRules.push(Validators.compose([
210
- this.controlUtility.patternValidator(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/, {
211
- EmailValidationKey: ''
212
- })
213
- ]));
214
- break;
215
- case InputType.Number:
216
- this.englishValidationRules.push(Validators.pattern('^[0-9]+(\.?[0-9]+)?$'));
217
- this.arabicValidationRules.push(Validators.pattern('^[0-9]+(\.?[0-9]+)?$'));
218
- break;
219
- }
220
- if (this.options.customValidation.length > 0) {
221
- let Validations = this.options.customValidation;
222
- for (let index = 0; index < Validations.length; index++) {
223
- const Validation = Validations[index];
224
- this.englishValidationRules.push(Validation.functionBody);
225
- this.arabicValidationRules.push(Validation.functionBody);
226
- }
227
- }
228
- if (this.options.minLength > 0) {
229
- this.arabicValidationRules.push(Validators.minLength(this.options.minLength));
230
- this.englishValidationRules.push(Validators.minLength(this.options.minLength));
231
- }
232
- if (this.options.maxLength > 0) {
233
- this.englishValidationRules.push(Validators.maxLength(this.options.maxLength));
234
- this.arabicValidationRules.push(Validators.maxLength(this.options.maxLength));
235
- }
236
- if (this.options.labelKey != null && this.options.labelKey != '') {
237
- this.options.arabicLabelValue =
238
- this.utilityService.getResourceValue(this.options.labelKey) +
239
- ' ' +
240
- this.utilityService.getResourceValue('InArabic');
241
- this.options.englishLabelValue =
242
- this.utilityService.getResourceValue(this.options.labelKey) +
243
- ' ' +
244
- this.utilityService.getResourceValue('InEnglish');
245
- }
246
- else {
247
- if (this.options.arabicLabelKey != null && this.options.arabicLabelKey != '')
248
- this.options.arabicLabelValue = this.utilityService.getResourceValue(this.options.arabicLabelKey);
249
- if (this.options.englishLabelKey != null && this.options.englishLabelKey != '')
250
- this.options.englishLabelValue = this.utilityService.getResourceValue(this.options.englishLabelKey);
251
- }
252
- this.showInputUsingLanguageMode();
253
- this.arabicValidationRules.push(Validators.compose([
254
- this.controlUtility.patternValidator(/^[\u0621-\u064A\u0660-\u0669 ]+$/, {
255
- ArabicLetterOnly: this.arabicLetterOnly
256
- })
257
- ]));
258
- this.englishValidationRules.push(Validators.compose([
259
- this.controlUtility.patternValidator(/^[~`!@#$%^&*()‘’“”_+=[\]\\{}|;':",.\/<>?a-zA-Z0-9- ]*$/, { EnglishLetterOnly: this.englishLetterOnly })
260
- ]));
261
- // this.arabicHtmlEditorFormControl.setValidators(this.ArabicValidationRules);
262
- // this.arabicHtmlEditorFormControl.setAsyncValidators(this.ArabicValidationRulesasync);
263
- // this.englishHtmlEditorFormControl.setValidators(this.EnglishValidationRules);
264
- // this.englishHtmlEditorFormControl.setAsyncValidators(this.EnglishValidationRulesasync);
265
- if (this.options.isDisabled) {
266
- this.englishHtmlEditorFormControl.disable();
267
- this.arabicHtmlEditorFormControl.disable();
268
- }
269
- this.arabicHtmlEditorFormControl.setValue(this.options.value.arabic);
270
- this.englishHtmlEditorFormControl.setValue(this.options.value.english);
271
- this.multiLingualHtmlEditorFormControlHost.ngSubmit.subscribe((value) => {
272
- this.group.markAllAsTouched();
273
- this.markAllAsTouched = true;
274
- });
275
- }
276
- ngAfterViewChecked() {
277
- let dir = this.utilityService.getCurrentLanguage() == 'en' ? 'ltr' : 'rtl';
278
- var angularEditor = document.getElementsByClassName('angular-editor-toolbar ng-star-inserted');
279
- for (let index = 0; index < angularEditor.length; index++) {
280
- const element = angularEditor[index];
281
- element.setAttribute('dir', dir);
282
- }
283
- }
284
- onTextChange(type) {
285
- if (type == 'en') {
286
- this.multilingualHtmlEditorgroup.controls['English'].setValue(this.multilingualHtmlEditorgroup.controls['English'].value.trim());
287
- this.englishValue =
288
- this.multilingualHtmlEditorgroup.controls['English'].value == null
289
- ? ''
290
- : this.multilingualHtmlEditorgroup.controls['English'].value;
291
- if (this.englishValue) {
292
- this.englishHtmlEditorFormControl.setValue(this.englishValue);
293
- let originalValue = this.englishValue;
294
- if (this.options.patchFunction &&
295
- this.options.patchPath &&
296
- this.englishHtmlEditorFormControl.valid) {
297
- this.controlUtility.patchControlValue(originalValue, this.options.patchFunction, this.options.patchPath);
298
- }
299
- }
300
- let EngliswordCountArray = this.englishHtmlEditorFormControl.value.split(' ').length;
301
- if (EngliswordCountArray > 0) {
302
- if (EngliswordCountArray > this.options.maxWordCount)
303
- this.multilingualHtmlEditorgroup.controls['English'].setErrors({
304
- MaxWordCountValidationKey: this.options.maxWordCount
305
- });
306
- this.multilingualHtmlEditorgroup.controls['English'].markAsTouched();
307
- this.multilingualHtmlEditorgroup.controls['English'].invalid;
308
- }
309
- }
310
- if (type == 'ar') {
311
- this.multilingualHtmlEditorgroup.controls['Arabic'].setValue(this.multilingualHtmlEditorgroup.controls['Arabic'].value.trim());
312
- this.arabicValue =
313
- this.multilingualHtmlEditorgroup.controls['Arabic'].value == null
314
- ? ''
315
- : this.multilingualHtmlEditorgroup.controls['Arabic'].value;
316
- if (this.arabicValue) {
317
- this.arabicHtmlEditorFormControl.setValue(this.arabicValue);
318
- let originalValue = this.arabicValue;
319
- if (this.options.patchFunction &&
320
- this.options.patchPath &&
321
- this.arabicHtmlEditorFormControl.valid) {
322
- this.controlUtility.patchControlValue(originalValue, this.options.patchFunction, this.options.patchPath);
323
- }
324
- }
325
- let ArabicwordCountArray = this.arabicHtmlEditorFormControl.value.split(' ').length;
326
- if (ArabicwordCountArray > 0) {
327
- if (ArabicwordCountArray > this.options.maxWordCount)
328
- this.multilingualHtmlEditorgroup.controls['Arabic'].setErrors({
329
- MaxWordCountValidationKey: this.options.maxWordCount
330
- });
331
- this.multilingualHtmlEditorgroup.controls['Arabic'].markAsTouched();
332
- this.multilingualHtmlEditorgroup.controls['Arabic'].invalid;
333
- }
334
- }
335
- let mulitLangModel = new EnglishArabicDTO();
336
- mulitLangModel.arabic = this.arabicValue;
337
- mulitLangModel.english = this.englishValue;
338
- this.OnChange.emit(mulitLangModel);
339
- if (this.arabicValue && this.englishValue)
340
- this.group.get(this.options.name).setValue(mulitLangModel);
341
- //Use this line to enable two way binding.
342
- this.options.value = mulitLangModel;
343
- }
344
- showGlobalError() {
345
- this.controlUtility.showGlobalError();
346
- }
347
- getErrorValidation(ErrorList) {
348
- if (this.markAllAsTouched && this.group.invalid) {
349
- this.showGlobalError();
350
- this.markAllAsTouched = false;
351
- }
352
- return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
353
- }
354
- showInputUsingLanguageMode() {
355
- this.arabicValidationRules = this.arabicValidationRules.filter((item) => item !== Validators.required);
356
- this.englishValidationRules = this.englishValidationRules.filter((item) => item !== Validators.required);
357
- this.arabicHtmlEditorFormControl.clearValidators();
358
- this.englishHtmlEditorFormControl.clearValidators();
359
- this.arabicHtmlEditorFormControl.updateValueAndValidity();
360
- this.englishHtmlEditorFormControl.updateValueAndValidity();
361
- switch (this.options.languageMode) {
362
- case LanguageMode.Both_Languages_are_visible:
363
- this.showArabicHtmlEditor = true;
364
- this.showEnglishHtmlEditor = true;
365
- if (this.options.isRequired == true) {
366
- this.englishValidationRules.push(Validators.required);
367
- this.arabicValidationRules.push(Validators.required);
368
- this.isShowAsteriskInArabic = true;
369
- this.isShowAsteriskInEnglish = true;
370
- }
371
- break;
372
- case LanguageMode.Arabic_Language_only_is_visible:
373
- this.showArabicHtmlEditor = true;
374
- break;
375
- case LanguageMode.English_Language_only_is_visible:
376
- this.showEnglishHtmlEditor = true;
377
- break;
378
- case LanguageMode.Both_Languages_are_visible_but_only_current_language_is_required:
379
- this.showArabicHtmlEditor = true;
380
- this.showEnglishHtmlEditor = true;
381
- if (this.currentLanguage == 'ar') {
382
- if (this.options.isRequired == true) {
383
- this.arabicValidationRules.push(Validators.required);
384
- this.isShowAsteriskInArabic = true;
385
- }
386
- }
387
- if (this.currentLanguage == 'en') {
388
- if (this.options.isRequired == true) {
389
- this.englishValidationRules.push(Validators.required);
390
- this.isShowAsteriskInEnglish = true;
391
- }
392
- }
393
- break;
394
- case LanguageMode.Both_Languages_but_only_Arabic_is_required:
395
- this.showArabicHtmlEditor = true;
396
- this.showEnglishHtmlEditor = true;
397
- if (this.options.isRequired == true) {
398
- this.arabicValidationRules.push(Validators.required);
399
- this.isShowAsteriskInArabic = true;
400
- }
401
- break;
402
- case LanguageMode.Both_Languages_but_only_English_is_required:
403
- this.showArabicHtmlEditor = true;
404
- this.showEnglishHtmlEditor = true;
405
- if (this.options.isRequired == true) {
406
- this.englishValidationRules.push(Validators.required);
407
- this.isShowAsteriskInEnglish = true;
408
- }
409
- break;
410
- case LanguageMode.Current_Language_only_is_visible_and_required:
411
- if (this.currentLanguage == 'ar') {
412
- this.showArabicHtmlEditor = true;
413
- this.showEnglishHtmlEditor = false;
414
- if (this.options.isRequired == true) {
415
- this.arabicValidationRules.push(Validators.required);
416
- this.isShowAsteriskInArabic = true;
417
- }
418
- }
419
- if (this.currentLanguage == 'en') {
420
- this.showArabicHtmlEditor = false;
421
- this.showEnglishHtmlEditor = true;
422
- if (this.options.isRequired == true) {
423
- this.englishValidationRules.push(Validators.required);
424
- this.isShowAsteriskInEnglish = true;
425
- }
426
- }
427
- break;
428
- default:
429
- break;
430
- }
431
- this.arabicHtmlEditorFormControl.setValidators(this.arabicValidationRules);
432
- this.englishHtmlEditorFormControl.setValidators(this.englishValidationRules);
433
- this.arabicHtmlEditorFormControl.updateValueAndValidity();
434
- this.englishHtmlEditorFormControl.updateValueAndValidity();
435
- }
436
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MultiLingualHtmlEditorComponent, deps: [{ token: i1.FormGroupDirective }, { token: i1.ControlContainer, optional: true }, { token: i2.ControlUtility }, { token: i3.UtilityService }, { token: i3.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component }); }
437
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MultiLingualHtmlEditorComponent, isStandalone: true, selector: "BBSF-MultiLingualHtmlEditor", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange" }, ngImport: i0, template: "<div [formGroup]=\"group\">\r\n <div class=\"bbsf-control form-group bbsf-multilang-htmleditor mb-0\" [formGroup]=\"multilingualHtmlEditorgroup\">\r\n <div class=\"row\">\r\n <!--English htmleditor-->\r\n <div [ngClass]=\"showArabicHtmlEditor? 'col-md-6' : 'col-md-12'\" *ngIf=\"showEnglishHtmlEditor\"\r\n class=\" bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.labelExtraClasses}}\" [hidden]=\"options.isHideEnglishLabel\">\r\n {{(options.englishLabelValue!=null&&options.englishLabelValue!=\"\")?options.englishLabelValue:options.labelValue+\"in\r\n English\"}}\r\n <!--Asterisk-->\r\n <span\r\n *ngIf=\"(((options.showAsterisk&&options.isRequired)||(options.isRequired)&&isShowAsteriskInEnglish))&&!options.isReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.isReadonly\">\r\n <!--input-->\r\n <angular-editor class=\"{{options.extraClasses_EN}}\" (change)=\"onTextChange('en')\"\r\n [class.is-invalid]=\"englishHtmlEditorFormControl.invalid && englishHtmlEditorFormControl.touched\"\r\n formControlName=\"English\" [config]=\"editorEnglishConfig\"></angular-editor>\r\n </div>\r\n <div *ngIf=\"options.isReadonly\"><span class=\"readonly-view\" [innerHTML]=\"options.value.english\"></span>\r\n\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\"\r\n *ngIf=\"(options.labelDescription!=null&&options.labelDescription!='') ||(options.englishLabelDescription!=null&&options.englishLabelDescription!='')\">\r\n {{(options.englishLabelDescription!=null&&options.englishLabelDescription!=\"\")?options.englishLabelDescription:options.labelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\"\r\n *ngIf=\"(englishHtmlEditorFormControl.invalid && englishHtmlEditorFormControl.touched)\">\r\n {{getErrorValidation(englishHtmlEditorFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">\r\n {{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Arabic htmleditor-->\r\n <div *ngIf=\"showArabicHtmlEditor\" [ngClass]=\"showEnglishHtmlEditor? 'col-md-6' : 'col-md-12'\"\r\n class=\"bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.labelExtraClasses}}\" [hidden]=\"options.isHideArabicLabel\">\r\n {{(options.arabicLabelValue!=null&&options.arabicLabelValue!=\"\")?options.arabicLabelValue:options.labelValue+\"in\r\n Arabic\"}}\r\n <!--Asterisk-->\r\n <span\r\n *ngIf=\"(((options.showAsterisk&&options.isRequired)||(options.isRequired))&&isShowAsteriskInArabic)&&!options.isReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.isReadonly\">\r\n <!--input-->\r\n <angular-editor dir=\"rtl\" class=\"{{options.extraClasses_AR}} \" (change)=\"onTextChange('ar')\"\r\n [class.is-invalid]=\"arabicHtmlEditorFormControl.invalid && arabicHtmlEditorFormControl.touched\"\r\n formControlName=\"Arabic\" [config]=\"editorArabicConfig\"></angular-editor>\r\n </div>\r\n <div *ngIf=\"options.isReadonly\"><span class=\"readonly-view\" [innerHTML]=\"options.value.arabic\"></span>\r\n\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\"\r\n *ngIf=\"(options.labelDescription!=null&&options.labelDescription!='')||(options.arabicLabelDescription!=null&&options.arabicLabelDescription!='')\">\r\n {{(options.arabicLabelDescription!=null&&options.arabicLabelDescription!=\"\")?options.arabicLabelDescription:options.labelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\"\r\n *ngIf=\"(arabicHtmlEditorFormControl.invalid && arabicHtmlEditorFormControl.touched)\">\r\n {{getErrorValidation(arabicHtmlEditorFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">\r\n {{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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"] }, { kind: "ngmodule", type: AngularEditorModule }, { kind: "component", type: i6.AngularEditorComponent, selector: "angular-editor", inputs: ["id", "config", "placeholder", "tabIndex"], outputs: ["html", "viewMode", "blur", "focus"] }] }); }
438
- }
439
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MultiLingualHtmlEditorComponent, decorators: [{
440
- type: Component,
441
- args: [{ selector: 'BBSF-MultiLingualHtmlEditor', standalone: true, imports: [
442
- CommonModule,
443
- FormsModule,
444
- ReactiveFormsModule,
445
- AngularEditorModule
446
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA], template: "<div [formGroup]=\"group\">\r\n <div class=\"bbsf-control form-group bbsf-multilang-htmleditor mb-0\" [formGroup]=\"multilingualHtmlEditorgroup\">\r\n <div class=\"row\">\r\n <!--English htmleditor-->\r\n <div [ngClass]=\"showArabicHtmlEditor? 'col-md-6' : 'col-md-12'\" *ngIf=\"showEnglishHtmlEditor\"\r\n class=\" bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.labelExtraClasses}}\" [hidden]=\"options.isHideEnglishLabel\">\r\n {{(options.englishLabelValue!=null&&options.englishLabelValue!=\"\")?options.englishLabelValue:options.labelValue+\"in\r\n English\"}}\r\n <!--Asterisk-->\r\n <span\r\n *ngIf=\"(((options.showAsterisk&&options.isRequired)||(options.isRequired)&&isShowAsteriskInEnglish))&&!options.isReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.isReadonly\">\r\n <!--input-->\r\n <angular-editor class=\"{{options.extraClasses_EN}}\" (change)=\"onTextChange('en')\"\r\n [class.is-invalid]=\"englishHtmlEditorFormControl.invalid && englishHtmlEditorFormControl.touched\"\r\n formControlName=\"English\" [config]=\"editorEnglishConfig\"></angular-editor>\r\n </div>\r\n <div *ngIf=\"options.isReadonly\"><span class=\"readonly-view\" [innerHTML]=\"options.value.english\"></span>\r\n\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\"\r\n *ngIf=\"(options.labelDescription!=null&&options.labelDescription!='') ||(options.englishLabelDescription!=null&&options.englishLabelDescription!='')\">\r\n {{(options.englishLabelDescription!=null&&options.englishLabelDescription!=\"\")?options.englishLabelDescription:options.labelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\"\r\n *ngIf=\"(englishHtmlEditorFormControl.invalid && englishHtmlEditorFormControl.touched)\">\r\n {{getErrorValidation(englishHtmlEditorFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">\r\n {{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Arabic htmleditor-->\r\n <div *ngIf=\"showArabicHtmlEditor\" [ngClass]=\"showEnglishHtmlEditor? 'col-md-6' : 'col-md-12'\"\r\n class=\"bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.labelExtraClasses}}\" [hidden]=\"options.isHideArabicLabel\">\r\n {{(options.arabicLabelValue!=null&&options.arabicLabelValue!=\"\")?options.arabicLabelValue:options.labelValue+\"in\r\n Arabic\"}}\r\n <!--Asterisk-->\r\n <span\r\n *ngIf=\"(((options.showAsterisk&&options.isRequired)||(options.isRequired))&&isShowAsteriskInArabic)&&!options.isReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.isReadonly\">\r\n <!--input-->\r\n <angular-editor dir=\"rtl\" class=\"{{options.extraClasses_AR}} \" (change)=\"onTextChange('ar')\"\r\n [class.is-invalid]=\"arabicHtmlEditorFormControl.invalid && arabicHtmlEditorFormControl.touched\"\r\n formControlName=\"Arabic\" [config]=\"editorArabicConfig\"></angular-editor>\r\n </div>\r\n <div *ngIf=\"options.isReadonly\"><span class=\"readonly-view\" [innerHTML]=\"options.value.arabic\"></span>\r\n\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\"\r\n *ngIf=\"(options.labelDescription!=null&&options.labelDescription!='')||(options.arabicLabelDescription!=null&&options.arabicLabelDescription!='')\">\r\n {{(options.arabicLabelDescription!=null&&options.arabicLabelDescription!=\"\")?options.arabicLabelDescription:options.labelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\"\r\n *ngIf=\"(arabicHtmlEditorFormControl.invalid && arabicHtmlEditorFormControl.touched)\">\r\n {{getErrorValidation(arabicHtmlEditorFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">\r\n {{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
447
- }], ctorParameters: () => [{ type: i1.FormGroupDirective }, { type: i1.ControlContainer, decorators: [{
448
- type: Optional
449
- }] }, { type: i2.ControlUtility }, { type: i3.UtilityService }, { type: i3.ControlValidationService }, { type: i4.GlobalSettings }], propDecorators: { group: [{
450
- type: Input
451
- }], options: [{
452
- type: Input
453
- }], OnChange: [{
454
- type: Output
455
- }] } });
456
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlMaW5ndWFsSHRtbEVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvTXVsdGlMaW5ndWFsSHRtbEVkaXRvci9NdWx0aUxpbmd1YWxIdG1sRWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9NdWx0aUxpbmd1YWxIdG1sRWRpdG9yL011bHRpTGluZ3VhbEh0bWxFZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVcsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFNBQVMsRUFJVCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUd4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7O0FBZ0IvRCxNQUFNLE9BQU8sK0JBQStCO2FBQ25DLDJCQUFzQixHQUFHLElBQUksQUFBUCxDQUFRO0lBR3JDLFlBQ1MscUNBQXlELEVBQzVDLGdCQUFrQyxFQUM5QyxjQUE4QixFQUM5QixjQUE4QixFQUM5Qix3QkFBa0QsRUFDbEQsY0FB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O3FCQUNwQixXQUNRLENBQUMsc0JBQXNCLEVBQUUsZ0JBQWdCLENBQUM7OzBCQVFoRCxRQUFRO3VLQVFGLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgRG9DaGVjaywgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOT19FUlJPUlNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgVmFsaWRhdG9ycyxcclxuICBGb3JtR3JvdXAsXHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xDb250YWluZXIsXHJcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gIEZvcm1zTW9kdWxlLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGVcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3JNb2R1bGUsIEFuZ3VsYXJFZGl0b3JDb25maWcgfSBmcm9tICdAa29sa292L2FuZ3VsYXItZWRpdG9yJztcclxuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL0lucHV0VHlwZSc7XHJcbmltcG9ydCB7IEVuZ2xpc2hBcmFiaWNEVE8gfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0VuZ2xpc2hBcmFiaWNEVE8nO1xyXG5pbXBvcnQgeyBNdWx0aUxpbmd1YWxIdG1sRWRpdG9yT3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvTXVsdGlMaW5ndWFsSHRtbEVkaXRvck9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IExhbmd1YWdlTW9kZSB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9MYW5ndWFnZU1vZGUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzL3VpJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtTXVsdGlMaW5ndWFsSHRtbEVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL011bHRpTGluZ3VhbEh0bWxFZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQW5ndWxhckVkaXRvck1vZHVsZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5PX0VSUk9SU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aUxpbmd1YWxIdG1sRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgaXNTaG93QXN0ZXJpc2tJbkFyYWJpYzogYm9vbGVhbjtcclxuICBpc1Nob3dBc3Rlcmlza0luRW5nbGlzaDogYm9vbGVhbjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBtdWx0aUxpbmd1YWxIdG1sRWRpdG9yRm9ybUNvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSxcclxuICAgIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZ2xvYmFsU2V0dGluZ3M6IEdsb2JhbFNldHRpbmdzXHJcbiAgKSB7XHJcbiAgICBNdWx0aUxpbmd1YWxIdG1sRWRpdG9yQ29tcG9uZW50LmNvbnRyb2xDb250YWluZXJzdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogTXVsdGlMaW5ndWFsSHRtbEVkaXRvck9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBhcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBlbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgbXVsdGlUZXh0QXJlYUZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgbXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgYXJhYmljQ29uZmlnOiBhbnk7XHJcbiAgZW5nbGlzaENvbmZpZzogYW55O1xyXG4gIGVkaXRvckVuZ2xpc2hDb25maWc6IEFuZ3VsYXJFZGl0b3JDb25maWc7XHJcbiAgZWRpdG9yQXJhYmljQ29uZmlnOiBBbmd1bGFyRWRpdG9yQ29uZmlnO1xyXG5cclxuICBtaXNjTGlzdDogYW55O1xyXG4gIHN0eWxlTGlzdDogYW55O1xyXG4gIGZvbnRzaXplTGlzdDogYW55O1xyXG4gIHBhcmFMaXN0OiBhbnk7XHJcbiAgaW5zZXJ0TGlzdDogYW55O1xyXG5cclxuICBjdXJyZW50TGFuZ3VhZ2U6IHN0cmluZyA9ICcnO1xyXG4gIHNob3dBcmFiaWNIdG1sRWRpdG9yOiBib29sZWFuO1xyXG4gIHNob3dFbmdsaXNoSHRtbEVkaXRvcjogYm9vbGVhbjtcclxuICBhcmFiaWNWYWxpZGF0aW9uUnVsZXMgPSBbXTtcclxuICBhcmFiaWNWYWxpZGF0aW9uUnVsZXNhc3luYyA9IFtdO1xyXG4gIGVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMgPSBbXTtcclxuICBlbmdsaXNoVmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuXHJcbiAgYXJhYmljTGV0dGVyT25seTogc3RyaW5nID0gJyc7XHJcbiAgZW5nbGlzaExldHRlck9ubHk6IHN0cmluZyA9ICcnO1xyXG5cclxuICBlbmdsaXNoVmFsdWUgPSBudWxsO1xyXG4gIGFyYWJpY1ZhbHVlID0gbnVsbDtcclxuXHJcbiAgZ2V0Q3VzdG9tRXJyb3JzTWFzc2FnZXMoKSB7XHJcbiAgICB0aGlzLmFyYWJpY0xldHRlck9ubHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FyYWJpY0xldHRlck9ubHknKTtcclxuICAgIHRoaXMuZW5nbGlzaExldHRlck9ubHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VuZ2xpc2hMZXR0ZXJPbmx5Jyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLnZpZXdUeXBlKSB0aGlzLm9wdGlvbnMudmlld1R5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLnZpZXdUeXBlO1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLmxhbmd1YWdlTW9kZSkgdGhpcy5vcHRpb25zLmxhbmd1YWdlTW9kZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MubGFuZ3VhZ2VNb2RlO1xyXG5cclxuICAgIHRoaXMuZWRpdG9yRW5nbGlzaENvbmZpZyA9IHtcclxuICAgICAgZWRpdGFibGU6ICF0aGlzLm9wdGlvbnMuaXNEaXNhYmxlZCxcclxuICAgICAgc3BlbGxjaGVjazogdHJ1ZSxcclxuICAgICAgaGVpZ2h0OiB0aGlzLm9wdGlvbnMuaGVpZ2h0LnRvU3RyaW5nKCksXHJcbiAgICAgIG1pbkhlaWdodDogdGhpcy5vcHRpb25zLmhlaWdodC50b1N0cmluZygpLFxyXG4gICAgICBtYXhIZWlnaHQ6ICdhdXRvJyxcclxuICAgICAgd2lkdGg6ICdhdXRvJyxcclxuICAgICAgbWluV2lkdGg6ICdhdXRvJyxcclxuICAgICAgdHJhbnNsYXRlOiAneWVzJyxcclxuICAgICAgZW5hYmxlVG9vbGJhcjogdHJ1ZSxcclxuICAgICAgc2hvd1Rvb2xiYXI6IHRydWUsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLm9wdGlvbnMuZW5nbGlzaFBsYWNlaG9sZGVyLFxyXG4gICAgICBkZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yOiAnJyxcclxuICAgICAgZGVmYXVsdEZvbnROYW1lOiAnJyxcclxuICAgICAgZGVmYXVsdEZvbnRTaXplOiAnJyxcclxuICAgICAgZm9udHM6IFtcclxuICAgICAgICB7IGNsYXNzOiAnYXJpYWwnLCBuYW1lOiAnQXJpYWwnIH0sXHJcbiAgICAgICAgeyBjbGFzczogJ3RpbWVzLW5ldy1yb21hbicsIG5hbWU6ICdUaW1lcyBOZXcgUm9tYW4nIH0sXHJcbiAgICAgICAgeyBjbGFzczogJ2NhbGlicmknLCBuYW1lOiAnQ2FsaWJyaScgfSxcclxuICAgICAgICB7IGNsYXNzOiAnY29taWMtc2Fucy1tcycsIG5hbWU6ICdDb21pYyBTYW5zIE1TJyB9XHJcbiAgICAgIF0sXHJcbiAgICAgIGN1c3RvbUNsYXNzZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAncXVvdGUnLFxyXG4gICAgICAgICAgY2xhc3M6ICdxdW90ZSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdyZWRUZXh0JyxcclxuICAgICAgICAgIGNsYXNzOiAncmVkVGV4dCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICd0aXRsZVRleHQnLFxyXG4gICAgICAgICAgY2xhc3M6ICd0aXRsZVRleHQnLFxyXG4gICAgICAgICAgdGFnOiAnaDEnXHJcbiAgICAgICAgfVxyXG4gICAgICBdLFxyXG4gICAgICAvLyAgdXBsb2FkVXJsOiAndjEvaW1hZ2UnLCB0aGlzIGxpbmUgY29tbWVudCBzbyB0aGUgZWRpdG9yIHdpbGwgY29udmVydCBpbWFnZSB0byBiYXNlNjQgd2hlbiBlbmFibGUgdXBsb2FkIHRoZSBhcGkgc2hvdWxkIHJldHVybiBmdWxsIHVybCBmb3IgZmlsZVxyXG4gICAgICB1cGxvYWRXaXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxyXG4gICAgICBzYW5pdGl6ZTogZmFsc2UsXHJcbiAgICAgIHRvb2xiYXJQb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHRvb2xiYXJIaWRkZW5CdXR0b25zOiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmVkaXRvckFyYWJpY0NvbmZpZyA9IHtcclxuICAgICAgZWRpdGFibGU6ICF0aGlzLm9wdGlvbnMuaXNEaXNhYmxlZCxcclxuICAgICAgc3BlbGxjaGVjazogdHJ1ZSxcclxuICAgICAgaGVpZ2h0OiB0aGlzLm9wdGlvbnMuaGVpZ2h0LnRvU3RyaW5nKCksXHJcbiAgICAgIG1pbkhlaWdodDogdGhpcy5vcHRpb25zLmhlaWdodC50b1N0cmluZygpLFxyXG4gICAgICBtYXhIZWlnaHQ6ICdhdXRvJyxcclxuICAgICAgd2lkdGg6ICdhdXRvJyxcclxuICAgICAgbWluV2lkdGg6ICdhdXRvJyxcclxuICAgICAgdHJhbnNsYXRlOiAneWVzJyxcclxuICAgICAgZW5hYmxlVG9vbGJhcjogdHJ1ZSxcclxuICAgICAgc2hvd1Rvb2xiYXI6IHRydWUsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLm9wdGlvbnMuYXJhYmljUGxhY2Vob2xkZXIsXHJcbiAgICAgIGRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3I6ICcnLFxyXG4gICAgICBkZWZhdWx0Rm9udE5hbWU6ICcnLFxyXG4gICAgICBkZWZhdWx0Rm9udFNpemU6ICcnLFxyXG4gICAgICBmb250czogW1xyXG4gICAgICAgIHsgY2xhc3M6ICdhcmlhbCcsIG5hbWU6ICdBcmlhbCcgfSxcclxuICAgICAgICB7IGNsYXNzOiAndGltZXMtbmV3LXJvbWFuJywgbmFtZTogJ1RpbWVzIE5ldyBSb21hbicgfSxcclxuICAgICAgICB7IGNsYXNzOiAnY2FsaWJyaScsIG5hbWU6ICdDYWxpYnJpJyB9LFxyXG4gICAgICAgIHsgY2xhc3M6ICdjb21pYy1zYW5zLW1zJywgbmFtZTogJ0NvbWljIFNhbnMgTVMnIH1cclxuICAgICAgXSxcclxuICAgICAgY3VzdG9tQ2xhc3NlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdxdW90ZScsXHJcbiAgICAgICAgICBjbGFzczogJ3F1b3RlJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3JlZFRleHQnLFxyXG4gICAgICAgICAgY2xhc3M6ICdyZWRUZXh0J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3RpdGxlVGV4dCcsXHJcbiAgICAgICAgICBjbGFzczogJ3RpdGxlVGV4dCcsXHJcbiAgICAgICAgICB0YWc6ICdoMSdcclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICAgIC8vICB1cGxvYWRVcmw6ICd2MS9pbWFnZScsIHRoaXMgbGluZSBjb21tZW50IHNvIHRoZSBlZGl0b3Igd2lsbCBjb252ZXJ0IGltYWdlIHRvIGJhc2U2NCB3aGVuIGVuYWJsZSB1cGxvYWQgdGhlIGFwaSBzaG91bGQgcmV0dXJuIGZ1bGwgdXJsIGZvciBmaWxlXHJcbiAgICAgIHVwbG9hZFdpdGhDcmVkZW50aWFsczogZmFsc2UsXHJcbiAgICAgIHNhbml0aXplOiBmYWxzZSxcclxuICAgICAgdG9vbGJhclBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgdG9vbGJhckhpZGRlbkJ1dHRvbnM6IFtdXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG5cclxuICAgIC8vIFV0aWxpdHlTZXJ2aWNlLlRyYW5zbGF0b3Iub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IExhbmdDaGFuZ2VFdmVudCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLkN1cnJlbnRMYW5ndWFnZSA9IGV2ZW50LmxhbmdcclxuICAgIC8vICAgdGhpcy5zaG93SW5wdXRVc2luZ0xhbmd1YWdlTW9kZSgpO1xyXG5cclxuICAgIC8vIH0pO1xyXG4gICAgLy8gdGhpcy5taXNjTGlzdCA9IHRoaXMub3B0aW9ucy5Ub29sc0xpc3RfTWlzYyAhPSBudWxsID8gdGhpcy5vcHRpb25zLlRvb2xzTGlzdF9NaXNjIDogWydjb2RldmlldycsICd1bmRvJywgJ3JlZG8nXTtcclxuICAgIC8vIHRoaXMuc3R5bGVMaXN0ID0gdGhpcy5vcHRpb25zLlRvb2xzTGlzdF9TdHlsZSAhPSBudWxsID8gdGhpcy5vcHRpb25zLlRvb2xzTGlzdF9TdHlsZSA6IFsnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ2NsZWFyJ11cclxuICAgIC8vIHRoaXMuZm9udHNpemVMaXN0ID0gdGhpcy5vcHRpb25zLlRvb2xzTGlzdF9Gb250U2l6ZSAhPSBudWxsID8gdGhpcy5vcHRpb25zLlRvb2xzTGlzdF9Gb250U2l6ZSA6IFsnZm9udG5hbWUnLCAnZm9udHNpemUnLCAnY29sb3InXVxyXG4gICAgLy8gdGhpcy5wYXJhTGlzdCA9IHRoaXMub3B0aW9ucy5Ub29sc0xpc3RfUGFyYSAhPSBudWxsID8gdGhpcy5vcHRpb25zLlRvb2xzTGlzdF9QYXJhIDogWydzdHlsZScsICd1bCcsICdvbCcsICdwYXJhZ3JhcGgnLCAnaGVpZ2h0J11cclxuICAgIC8vIHRoaXMuaW5zZXJ0TGlzdCA9IHRoaXMub3B0aW9ucy5Ub29sc0xpc3RfSW5zZXJ0ICE9IG51bGwgPyB0aGlzLm9wdGlvbnMuVG9vbHNMaXN0X0luc2VydCA6IFsndGFibGUnLCAncGljdHVyZScsICdsaW5rJywgJ3ZpZGVvJywgJ2hyJ11cclxuXHJcbiAgICAvLyB0aGlzLmFyYWJpY0NvbmZpZyA9IHtcclxuICAgIC8vICAgcGxhY2Vob2xkZXI6IHRoaXMub3B0aW9ucy5BcmFiaWNQbGFjZWhvbGRlcixcclxuICAgIC8vICAgaGVpZ2h0OiBgJHt0aGlzLm9wdGlvbnMuSGVpZ2h0fXB4YCxcclxuICAgIC8vICAgdG9vbGJhcjogW1xyXG4gICAgLy8gICAgIFsnbWlzYycsIHRoaXMubWlzY0xpc3RdLFxyXG4gICAgLy8gICAgIFsnc3R5bGUnLCB0aGlzLnN0eWxlTGlzdF0sXHJcbiAgICAvLyAgICAgWydmb250c2l6ZScsIHRoaXMuZm9udHNpemVMaXN0XSxcclxuICAgIC8vICAgICBbJ3BhcmEnLCB0aGlzLnBhcmFMaXN0XSxcclxuICAgIC8vICAgICBbJ2luc2VydCcsIHRoaXMuaW5zZXJ0TGlzdF1cclxuICAgIC8vICAgXSxcclxuICAgIC8vICAgZm9udE5hbWVzOiBbJ0hlbHZldGljYScsICdBcmlhbCcsICdBcmlhbCBCbGFjaycsICdDb21pYyBTYW5zIE1TJywgJ0NvdXJpZXIgTmV3JywgJ1JvYm90bycsICdUaW1lcyddXHJcblxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5FbmdsaXNoQ29uZmlnID0ge1xyXG4gICAgLy8gICBwbGFjZWhvbGRlcjogdGhpcy5vcHRpb25zLkVuZ2xpc2hQbGFjZWhvbGRlcixcclxuICAgIC8vICAgaGVpZ2h0OiBgJHt0aGlzLm9wdGlvbnMuSGVpZ2h0fXB4YCxcclxuICAgIC8vICAgdG9vbGJhcjogW1xyXG4gICAgLy8gICAgIFsnbWlzYycsIHRoaXMubWlzY0xpc3RdLFxyXG4gICAgLy8gICAgIFsnc3R5bGUnLCB0aGlzLnN0eWxlTGlzdF0sXHJcbiAgICAvLyAgICAgWydmb250c2l6ZScsIHRoaXMuZm9udHNpemVMaXN0XSxcclxuICAgIC8vICAgICBbJ3BhcmEnLCB0aGlzLnBhcmFMaXN0XSxcclxuICAgIC8vICAgICBbJ2luc2VydCcsIHRoaXMuaW5zZXJ0TGlzdF1cclxuICAgIC8vICAgXSxcclxuICAgIC8vICAgZm9udE5hbWVzOiBbJ0hlbHZldGljYScsICdBcmlhbCcsICdBcmlhbCBCbGFjaycsICdDb21pYyBTYW5zIE1TJywgJ0NvdXJpZXIgTmV3JywgJ1JvYm90bycsICdUaW1lcyddXHJcblxyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5tdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMubXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmFkZENvbnRyb2woJ0FyYWJpYycsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgdGhpcy5tdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuYWRkQ29udHJvbCgnRW5nbGlzaCcsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgdGhpcy5hcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wgPSB0aGlzLm11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1snQXJhYmljJ107IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuZW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbCA9IHRoaXMubXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzWydFbmdsaXNoJ107IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgdGhpcy5vcHRpb25zLm5hbWUsXHJcbiAgICAgIG5ldyBGb3JtR3JvdXAodGhpcy5tdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHMpXHJcbiAgICApO1xyXG4gICAgdGhpcy5nZXRDdXN0b21FcnJvcnNNYXNzYWdlcygpO1xyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudHlwZSkge1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5FbWFpbDpcclxuICAgICAgICB0aGlzLmVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChcclxuICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvXlthLXowLTkuXyUrLV0rQFthLXowLTkuLV0rXFwuW2Etel17Miw0fSQvLCB7XHJcbiAgICAgICAgICAgICAgRW1haWxWYWxpZGF0aW9uS2V5OiAnJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bYS16MC05Ll8lKy1dK0BbYS16MC05Li1dK1xcLlthLXpdezIsNH0kLywge1xyXG4gICAgICAgICAgICAgIEVtYWlsVmFsaWRhdGlvbktleTogJydcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBJbnB1dFR5cGUuTnVtYmVyOlxyXG4gICAgICAgIHRoaXMuZW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybignXlswLTldKyhcXC4/WzAtOV0rKT8kJykpO1xyXG4gICAgICAgIHRoaXMuYXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcLj9bMC05XSspPyQnKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMuZW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgICB0aGlzLmFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5taW5MZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5vcHRpb25zLm1pbkxlbmd0aCkpO1xyXG4gICAgICB0aGlzLmVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLm9wdGlvbnMubWluTGVuZ3RoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhMZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMub3B0aW9ucy5tYXhMZW5ndGgpKTtcclxuICAgICAgdGhpcy5hcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm9wdGlvbnMubWF4TGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLmxhYmVsS2V5ICE9ICcnKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hcmFiaWNMYWJlbFZhbHVlID1cclxuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUodGhpcy5vcHRpb25zLmxhYmVsS2V5KSArXHJcbiAgICAgICAgJyAnICtcclxuICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0luQXJhYmljJyk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5lbmdsaXNoTGFiZWxWYWx1ZSA9XHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5sYWJlbEtleSkgK1xyXG4gICAgICAgICcgJyArXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdJbkVuZ2xpc2gnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXJhYmljTGFiZWxLZXkgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuYXJhYmljTGFiZWxLZXkgIT0gJycpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmFyYWJpY0xhYmVsVmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXJhYmljTGFiZWxLZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmdsaXNoTGFiZWxLZXkgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuZW5nbGlzaExhYmVsS2V5ICE9ICcnKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmdsaXNoTGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5lbmdsaXNoTGFiZWxLZXlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93SW5wdXRVc2luZ0xhbmd1YWdlTW9kZSgpO1xyXG4gICAgdGhpcy5hcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChcclxuICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bXFx1MDYyMS1cXHUwNjRBXFx1MDY2MC1cXHUwNjY5IF0rJC8sIHtcclxuICAgICAgICAgIEFyYWJpY0xldHRlck9ubHk6IHRoaXMuYXJhYmljTGV0dGVyT25seVxyXG4gICAgICAgIH0pXHJcbiAgICAgIF0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5lbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxyXG4gICAgICAgICAgL15bfmAhQCMkJV4mKigp4oCY4oCZ4oCc4oCdXys9W1xcXVxcXFx7fXw7JzpcIiwuXFwvPD4/YS16QS1aMC05LSBdKiQvLFxyXG4gICAgICAgICAgeyBFbmdsaXNoTGV0dGVyT25seTogdGhpcy5lbmdsaXNoTGV0dGVyT25seSB9XHJcbiAgICAgICAgKVxyXG4gICAgICBdKVxyXG4gICAgKTtcclxuICAgIC8vIHRoaXMuYXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgLy8gdGhpcy5hcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzYXN5bmMpO1xyXG5cclxuICAgIC8vIHRoaXMuZW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICAvLyB0aGlzLmVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5lbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5hcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLnZhbHVlLmFyYWJpYyk7XHJcbiAgICB0aGlzLmVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLnZhbHVlLmVuZ2xpc2gpO1xyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxIdG1sRWRpdG9yRm9ybUNvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGxldCBkaXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpID09ICdlbicgPyAnbHRyJyA6ICdydGwnO1xyXG4gICAgdmFyIGFuZ3VsYXJFZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbmd1bGFyLWVkaXRvci10b29sYmFyIG5nLXN0YXItaW5zZXJ0ZWQnKTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhbmd1bGFyRWRpdG9yLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gYW5ndWxhckVkaXRvcltpbmRleF07XHJcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkaXInLCBkaXIpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblRleHRDaGFuZ2UodHlwZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodHlwZSA9PSAnZW4nKSB7XHJcbiAgICAgIHRoaXMubXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzWydFbmdsaXNoJ10uc2V0VmFsdWUoXHJcbiAgICAgICAgdGhpcy5tdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbJ0VuZ2xpc2gnXS52YWx1ZS50cmltKClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5lbmdsaXNoVmFsdWUgPVxyXG4gICAgICAgIHRoaXMubXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzWydFbmdsaXNoJ10udmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgOiB0aGlzLm11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1snRW5nbGlzaCddLnZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5lbmdsaXNoVmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5lbmdsaXNoVmFsdWUpO1xyXG4gICAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdGhpcy5lbmdsaXNoVmFsdWU7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBhdGNoRnVuY3Rpb24gJiZcclxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaFBhdGggJiZcclxuICAgICAgICAgIHRoaXMuZW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC52YWxpZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShcclxuICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBhdGNoRnVuY3Rpb24sXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaFBhdGhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBFbmdsaXN3b3JkQ291bnRBcnJheSA9ICh0aGlzLmVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wudmFsdWUgYXMgc3RyaW5nKS5zcGxpdChcclxuICAgICAgICAnICdcclxuICAgICAgKS5sZW5ndGg7XHJcbiAgICAgIGlmIChFbmdsaXN3b3JkQ291bnRBcnJheSA+IDApIHtcclxuICAgICAgICBpZiAoRW5nbGlzd29yZENvdW50QXJyYXkgPiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50KVxyXG4gICAgICAgICAgdGhpcy5tdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXAuY29udHJvbHNbJ0VuZ2xpc2gnXS5zZXRFcnJvcnMoe1xyXG4gICAgICAgICAgICBNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5OiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1snRW5nbGlzaCddLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1snRW5nbGlzaCddLmludmFsaWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZSA9PSAnYXInKSB7XHJcbiAgICAgIHRoaXMubXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzWydBcmFiaWMnXS5zZXRWYWx1ZShcclxuICAgICAgICB0aGlzLm11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1snQXJhYmljJ10udmFsdWUudHJpbSgpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmFyYWJpY1ZhbHVlID1cclxuICAgICAgICB0aGlzLm11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1snQXJhYmljJ10udmFsdWUgPT0gbnVsbFxyXG4gICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgOiB0aGlzLm11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1snQXJhYmljJ10udmFsdWU7XHJcblxyXG4gICAgICBpZiAodGhpcy5hcmFiaWNWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuYXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuYXJhYmljVmFsdWUpO1xyXG4gICAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdGhpcy5hcmFiaWNWYWx1ZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucGF0Y2hGdW5jdGlvbiAmJlxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBhdGNoUGF0aCAmJlxyXG4gICAgICAgICAgdGhpcy5hcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wudmFsaWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0Y2hDb250cm9sVmFsdWUoXHJcbiAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUsXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaEZ1bmN0aW9uLFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucGF0Y2hQYXRoXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IEFyYWJpY3dvcmRDb3VudEFycmF5ID0gKHRoaXMuYXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLnZhbHVlIGFzIHN0cmluZykuc3BsaXQoXHJcbiAgICAgICAgJyAnXHJcbiAgICAgICkubGVuZ3RoO1xyXG4gICAgICBpZiAoQXJhYmljd29yZENvdW50QXJyYXkgPiAwKSB7XHJcbiAgICAgICAgaWYgKEFyYWJpY3dvcmRDb3VudEFycmF5ID4gdGhpcy5vcHRpb25zLm1heFdvcmRDb3VudClcclxuICAgICAgICAgIHRoaXMubXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzWydBcmFiaWMnXS5zZXRFcnJvcnMoe1xyXG4gICAgICAgICAgICBNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5OiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm11bHRpbGluZ3VhbEh0bWxFZGl0b3Jncm91cC5jb250cm9sc1snQXJhYmljJ10ubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMubXVsdGlsaW5ndWFsSHRtbEVkaXRvcmdyb3VwLmNvbnRyb2xzWydBcmFiaWMnXS5pbnZhbGlkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG11bGl0TGFuZ01vZGVsID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgIG11bGl0TGFuZ01vZGVsLmFyYWJpYyA9IHRoaXMuYXJhYmljVmFsdWU7XHJcbiAgICBtdWxpdExhbmdNb2RlbC5lbmdsaXNoID0gdGhpcy5lbmdsaXNoVmFsdWU7XHJcbiAgICB0aGlzLk9uQ2hhbmdlLmVtaXQobXVsaXRMYW5nTW9kZWwpO1xyXG4gICAgaWYgKHRoaXMuYXJhYmljVmFsdWUgJiYgdGhpcy5lbmdsaXNoVmFsdWUpXHJcbiAgICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5uYW1lKS5zZXRWYWx1ZShtdWxpdExhbmdNb2RlbCk7XHJcbiAgICAvL1VzZSB0aGlzIGxpbmUgdG8gZW5hYmxlIHR3byB3YXkgYmluZGluZy5cclxuICAgIHRoaXMub3B0aW9ucy52YWx1ZSA9IG11bGl0TGFuZ01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLnJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfTtcclxuXHJcbiAgc2hvd0dsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zaG93R2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG4gIGdldEVycm9yVmFsaWRhdGlvbihFcnJvckxpc3QpIHtcclxuICAgIGlmICh0aGlzLm1hcmtBbGxBc1RvdWNoZWQgJiYgdGhpcy5ncm91cC5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0dsb2JhbEVycm9yKCk7XHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xVdGlsaXR5LmdldEVycm9yVmFsaWRhdGlvbk1hc3NhZ2UoRXJyb3JMaXN0LCB0aGlzLmdyb3VwLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0lucHV0VXNpbmdMYW5ndWFnZU1vZGUoKSB7XHJcbiAgICB0aGlzLmFyYWJpY1ZhbGlkYXRpb25SdWxlcyA9IHRoaXMuYXJhYmljVmFsaWRhdGlvblJ1bGVzLmZpbHRlcihcclxuICAgICAgKGl0ZW0pID0+IGl0ZW0gIT09IFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICk7XHJcbiAgICB0aGlzLmVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMgPSB0aGlzLmVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMuZmlsdGVyKFxyXG4gICAgICAoaXRlbSkgPT4gaXRlbSAhPT0gVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMuZW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICB0aGlzLmFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmxhbmd1YWdlTW9kZSkge1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19hcmVfdmlzaWJsZTpcclxuICAgICAgICB0aGlzLnNob3dBcmFiaWNIdG1sRWRpdG9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dFbmdsaXNoSHRtbEVkaXRvciA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuZW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgdGhpcy5hcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIHRoaXMuaXNTaG93QXN0ZXJpc2tJbkFyYWJpYyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzU2hvd0FzdGVyaXNrSW5FbmdsaXNoID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkFyYWJpY19MYW5ndWFnZV9vbmx5X2lzX3Zpc2libGU6XHJcbiAgICAgICAgdGhpcy5zaG93QXJhYmljSHRtbEVkaXRvciA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkVuZ2xpc2hfTGFuZ3VhZ2Vfb25seV9pc192aXNpYmxlOlxyXG4gICAgICAgIHRoaXMuc2hvd0VuZ2xpc2hIdG1sRWRpdG9yID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMYW5ndWFnZU1vZGUuQm90aF9MYW5ndWFnZXNfYXJlX3Zpc2libGVfYnV0X29ubHlfY3VycmVudF9sYW5ndWFnZV9pc19yZXF1aXJlZDpcclxuICAgICAgICB0aGlzLnNob3dBcmFiaWNIdG1sRWRpdG9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dFbmdsaXNoSHRtbEVkaXRvciA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRMYW5ndWFnZSA9PSAnYXInKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmlzU2hvd0FzdGVyaXNrSW5BcmFiaWMgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TGFuZ3VhZ2UgPT0gJ2VuJykge1xyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5lbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93QXN0ZXJpc2tJbkVuZ2xpc2ggPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMYW5ndWFnZU1vZGUuQm90aF9MYW5ndWFnZXNfYnV0X29ubHlfQXJhYmljX2lzX3JlcXVpcmVkOlxyXG4gICAgICAgIHRoaXMuc2hvd0FyYWJpY0h0bWxFZGl0b3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0VuZ2xpc2hIdG1sRWRpdG9yID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5hcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIHRoaXMuaXNTaG93QXN0ZXJpc2tJbkFyYWJpYyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19idXRfb25seV9FbmdsaXNoX2lzX3JlcXVpcmVkOlxyXG4gICAgICAgIHRoaXMuc2hvd0FyYWJpY0h0bWxFZGl0b3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0VuZ2xpc2hIdG1sRWRpdG9yID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5lbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICB0aGlzLmlzU2hvd0FzdGVyaXNrSW5FbmdsaXNoID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkN1cnJlbnRfTGFuZ3VhZ2Vfb25seV9pc192aXNpYmxlX2FuZF9yZXF1aXJlZDpcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TGFuZ3VhZ2UgPT0gJ2FyJykge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXJhYmljSHRtbEVkaXRvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dFbmdsaXNoSHRtbEVkaXRvciA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJhYmljVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93QXN0ZXJpc2tJbkFyYWJpYyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRMYW5ndWFnZSA9PSAnZW4nKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBcmFiaWNIdG1sRWRpdG9yID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dFbmdsaXNoSHRtbEVkaXRvciA9IHRydWU7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5lbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93QXN0ZXJpc2tJbkVuZ2xpc2ggPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuYXJhYmljVmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuZW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuZW5nbGlzaFZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLmFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuXHJcbiAgcmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24oXHJcbiAgICAgIHRoaXMuZW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbCxcclxuICAgICAgdGhpcy5lbmdsaXNoVmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICB0aGlzLm9wdGlvbnNcclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy5hcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMuYXJhYmljVmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICB0aGlzLm9wdGlvbnNcclxuICAgICk7XHJcbiAgfTtcclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG5cclxuICBhZGRSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmFkZFJlcXVpcmVkVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy5lbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLFxyXG4gICAgICB0aGlzLmVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMsXHJcbiAgICAgIHRoaXMub3B0aW9uc1xyXG4gICAgKTtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkUmVxdWlyZWRWYWxpZGF0aW9uKFxyXG4gICAgICB0aGlzLmFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbCxcclxuICAgICAgdGhpcy5hcmFiaWNWYWxpZGF0aW9uUnVsZXMsXHJcbiAgICAgIHRoaXMub3B0aW9uc1xyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIHJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoY3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVDdXN0b21WYWxpZGF0aW9uKFxyXG4gICAgICB0aGlzLmVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMuZW5nbGlzaFZhbGlkYXRpb25SdWxlcyxcclxuICAgICAgY3VzdG9tVmFsaWRhdGlvblxyXG4gICAgKTtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkucmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy5hcmFiaWNIdG1sRWRpdG9yRm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMuYXJhYmljVmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICBjdXN0b21WYWxpZGF0aW9uXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBhZGRDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkQ3VzdG9tVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy5lbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLFxyXG4gICAgICB0aGlzLmVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMsXHJcbiAgICAgIGN1c3RvbVZhbGlkYXRpb25cclxuICAgICk7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmFkZEN1c3RvbVZhbGlkYXRpb24oXHJcbiAgICAgIHRoaXMuYXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLFxyXG4gICAgICB0aGlzLmFyYWJpY1ZhbGlkYXRpb25SdWxlcyxcclxuICAgICAgY3VzdG9tVmFsaWRhdGlvblxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIGlzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmlzVmFsaWQodGhpcy5lbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sKTtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuaXNWYWxpZCh0aGlzLmFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbCk7XHJcbiAgfTtcclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cclxuICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sIGZvcm0tZ3JvdXAgYmJzZi1tdWx0aWxhbmctaHRtbGVkaXRvciBtYi0wXCIgW2Zvcm1Hcm91cF09XCJtdWx0aWxpbmd1YWxIdG1sRWRpdG9yZ3JvdXBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPCEtLUVuZ2xpc2ggaHRtbGVkaXRvci0tPlxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInNob3dBcmFiaWNIdG1sRWRpdG9yPyAnY29sLW1kLTYnIDogJ2NvbC1tZC0xMidcIiAqbmdJZj1cInNob3dFbmdsaXNoSHRtbEVkaXRvclwiXHJcbiAgICAgICAgY2xhc3M9XCIgYmJzZi1tdWx0aWxhbmctZm9ybS1ncm91cFwiPlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiKG9wdGlvbnMudmlld1R5cGU9PTEpPydiYnNmLXZlcnRpY2FsJzonYmJzZi1ob3Jpem9udGFsJ1wiPlxyXG4gICAgICAgICAgPCEtLWxhYmVsLS0+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJiYnNmLWxhYmVsIHt7b3B0aW9ucy5sYWJlbEV4dHJhQ2xhc3Nlc319XCIgW2hpZGRlbl09XCJvcHRpb25zLmlzSGlkZUVuZ2xpc2hMYWJlbFwiPlxyXG4gICAgICAgICAgICB7eyhvcHRpb25zLmVuZ2xpc2hMYWJlbFZhbHVlIT1udWxsJiZvcHRpb25zLmVuZ2xpc2hMYWJlbFZhbHVlIT1cIlwiKT9vcHRpb25zLmVuZ2xpc2hMYWJlbFZhbHVlOm9wdGlvbnMubGFiZWxWYWx1ZStcImluXHJcbiAgICAgICAgICAgIEVuZ2xpc2hcIn19XHJcbiAgICAgICAgICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiKCgob3B0aW9ucy5zaG93QXN0ZXJpc2smJm9wdGlvbnMuaXNSZXF1aXJlZCl8fChvcHRpb25zLmlzUmVxdWlyZWQpJiZpc1Nob3dBc3Rlcmlza0luRW5nbGlzaCkpJiYhb3B0aW9ucy5pc1JlYWRvbmx5XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cIiFvcHRpb25zLmlzUmVhZG9ubHlcIj5cclxuICAgICAgICAgICAgPCEtLWlucHV0LS0+XHJcbiAgICAgICAgICAgIDxhbmd1bGFyLWVkaXRvciBjbGFzcz1cInt7b3B0aW9ucy5leHRyYUNsYXNzZXNfRU59fVwiIChjaGFuZ2UpPVwib25UZXh0Q2hhbmdlKCdlbicpXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJlbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLmludmFsaWQgJiYgZW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC50b3VjaGVkXCJcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJFbmdsaXNoXCIgW2NvbmZpZ109XCJlZGl0b3JFbmdsaXNoQ29uZmlnXCI+PC9hbmd1bGFyLWVkaXRvcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnMuaXNSZWFkb25seVwiPjxzcGFuIGNsYXNzPVwicmVhZG9ubHktdmlld1wiIFtpbm5lckhUTUxdPVwib3B0aW9ucy52YWx1ZS5lbmdsaXNoXCI+PC9zcGFuPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5pc1JlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgIDwhLS0gTGFiZWxEZXNjcmlwdGlvbi0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiKG9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiE9bnVsbCYmb3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIT0nJykgfHwob3B0aW9ucy5lbmdsaXNoTGFiZWxEZXNjcmlwdGlvbiE9bnVsbCYmb3B0aW9ucy5lbmdsaXNoTGFiZWxEZXNjcmlwdGlvbiE9JycpXCI+XHJcbiAgICAgICAgICAgICAge3sob3B0aW9ucy5lbmdsaXNoTGFiZWxEZXNjcmlwdGlvbiE9bnVsbCYmb3B0aW9ucy5lbmdsaXNoTGFiZWxEZXNjcmlwdGlvbiE9XCJcIik/b3B0aW9ucy5lbmdsaXNoTGFiZWxEZXNjcmlwdGlvbjpvcHRpb25zLmxhYmVsRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIoZW5nbGlzaEh0bWxFZGl0b3JGb3JtQ29udHJvbC5pbnZhbGlkICYmIGVuZ2xpc2hIdG1sRWRpdG9yRm9ybUNvbnRyb2wudG91Y2hlZClcIj5cclxuICAgICAgICAgICAgICB7e2dldEVycm9yVmFsaWRhdGlvbihlbmdsaXNoSHRtbEVkaXRvckZvcm1Db250cm9sLmVycm9yc3xrZXl2YWx1ZSl9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncm91cC52YWxpZCYmZ3JvdXAuZGlydHkmJmdyb3VwLnRvdWNoZWQgKXx8KGdyb3VwLnVudG91Y2hlZCYmZ3JvdXAuaW52YWxpZCYmZ3JvdXAuZGlydHkpIFwiPlxyXG4gICAgICAgICAgICAgIHt7cmVzZXRFcnJvcigpfX08L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLUFyYWJpYyBodG1sZWRpdG9yLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93QXJhYmljSHRtbEVkaXRvclwiIFtuZ0NsYXNzXT1cInNob3dFbmdsaXNoSHRtbEVkaXRvcj8gJ2NvbC1tZC02JyA6ICdjb2wtbWQtMTInXCJcclxuICAgICAgICBjbGFzcz1cImJic2YtbXVsdGlsYW5nLWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIihvcHRpb25zLnZpZXdUeXBlPT0xKT8nYmJzZi12ZXJ0aWNhbCc6J2Jic2YtaG9yaXpvbnRhbCdcIj5cclxuICAgICAgICAgIDwhLS1sYWJlbC0tPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmJzZi1sYWJlbCB7e29wdGlvbnMubGFiZWxFeHRyYUNsYXNzZXN9fVwiIFtoaWRkZW5dPVwib3B0aW9ucy5pc0hpZGVBcmFiaWNMYWJlbFwiPlxyXG4gICAgICAgICAgICB7eyhvcHRpb25zLmFyYWJpY0xhYmVsVmFsdWUhPW51bGwmJm9wdGlvbnMuYXJhYmljTGFiZWxWYWx1ZSE9XCJcIik/b3B0aW9ucy5hcmFiaWNMYWJlbFZhbHVlOm9wdGlvbnMubGFiZWxWYWx1ZStcImluXHJcbiAgICAgICAgICAgIEFyYWJpY1wifX1cclxuICAgICAgICAgICAgPCEtLUFzdGVyaXNrLS0+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIoKChvcHRpb25zLnNob3dBc3RlcmlzayYmb3B0aW9ucy5pc1JlcXVpcmVkKXx8KG9wdGlvbnMuaXNSZXF1aXJlZCkpJiZpc1Nob3dBc3Rlcmlza0luQXJhYmljKSYmIW9wdGlvbnMuaXNSZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5pc1JlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICAgICAgICA8YW5ndWxhci1lZGl0b3IgZGlyPVwicnRsXCIgY2xhc3M9XCJ7e29wdGlvbnMuZXh0cmFDbGFzc2VzX0FSfX0gXCIgKGNoYW5nZSk9XCJvblRleHRDaGFuZ2UoJ2FyJylcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC5pbnZhbGlkICYmIGFyYWJpY0h0bWxFZGl0b3JGb3JtQ29udHJvbC50b3VjaGVkXCJcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJBcmFiaWNcIiBbY29uZmlnXT1cImVkaXRvckFyYWJpY0NvbmZpZ1wiPjwvYW5ndWxhci1lZGl0b3I+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLmlzUmVhZG9ubHlcIj48c3BhbiBjbGFzcz1cInJlYWRvbmx5LXZpZXdcIiBbaW5uZXJIVE1MXT1cIm9wdGlvbnMudmFsdWUuYXJhYmljXCI+PC9zcGFuPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5pc1JlYWRvbmx5XCI+XHJcbiAgICAgICAgICAgIDwhLS0gTGFiZWxEZXNjcmlwdGlvbi0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiKG9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiE9bnVsbCYmb3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIT0nJyl8fChvcHRpb25zLmFyYWJpY0xhYmVsRGVzY3JpcHRpb24hPW51bGwmJm9wdGlvbnMuYXJhYmljTGFiZWxEZXNjcmlwdGlvbiE9JycpXCI+XHJcbiAgICAgICAgICAgICAge3sob3B0aW9ucy5hcmFiaWNMYWJlbERlc2NyaXB0aW9uIT1udWxsJiZvcHRpb25zLmFyYWJpY0xhYmVsRGVzY3JpcHRpb24hPVwiXCIpP29wdGlvbnMuYXJhYmljTGFiZWxEZXNjcmlwdGlvbjpvcHRpb25zLmxhYmVsRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIoYXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLmludmFsaWQgJiYgYXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgICAge3tnZXRFcnJvclZhbGlkYXRpb24oYXJhYmljSHRtbEVkaXRvckZvcm1Db250cm9sLmVycm9yc3xrZXl2YWx1ZSl9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncm91cC52YWxpZCYmZ3JvdXAuZGlydHkmJmdyb3VwLnRvdWNoZWQgKXx8KGdyb3VwLnVudG91Y2hlZCYmZ3JvdXAuaW52YWxpZCYmZ3JvdXAuZGlydHkpIFwiPlxyXG4gICAgICAgICAgICAgIHt7cmVzZXRFcnJvcigpfX08L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=