openstack-uicore-foundation 4.1.43 → 4.1.44

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 (187) hide show
  1. package/lib/components/ajaxloader.js +2 -184
  2. package/lib/components/ajaxloader.js.map +1 -0
  3. package/lib/components/attendance-tracker.js +2 -2066
  4. package/lib/components/attendance-tracker.js.map +1 -0
  5. package/lib/components/bulk-actions-selector.js +2 -197
  6. package/lib/components/bulk-actions-selector.js.map +1 -0
  7. package/lib/components/circle-button.js +2 -223
  8. package/lib/components/circle-button.js.map +1 -0
  9. package/lib/components/clock.js +2 -767
  10. package/lib/components/clock.js.map +1 -0
  11. package/lib/components/exclusive-wrapper.js +2 -151
  12. package/lib/components/exclusive-wrapper.js.map +1 -0
  13. package/lib/components/extra-questions.js +2 -2011
  14. package/lib/components/extra-questions.js.map +1 -0
  15. package/lib/components/form-validation.js +2 -190
  16. package/lib/components/form-validation.js.map +1 -0
  17. package/lib/components/forms/rsvp-form.js +2 -940
  18. package/lib/components/forms/rsvp-form.js.map +1 -0
  19. package/lib/components/forms/simple-form.js +2 -774
  20. package/lib/components/forms/simple-form.js.map +1 -0
  21. package/lib/components/free-text-search.js +2 -2154
  22. package/lib/components/free-text-search.js.map +1 -0
  23. package/lib/components/google-map.js +2 -642
  24. package/lib/components/google-map.js.map +1 -0
  25. package/lib/components/index.js +2 -13417
  26. package/lib/components/index.js.map +1 -0
  27. package/lib/components/inputs/access-levels-input.js +2 -2381
  28. package/lib/components/inputs/access-levels-input.js.map +1 -0
  29. package/lib/components/inputs/action-dropdown.js +2 -219
  30. package/lib/components/inputs/action-dropdown.js.map +1 -0
  31. package/lib/components/inputs/checkbox-list.js +2 -339
  32. package/lib/components/inputs/checkbox-list.js.map +1 -0
  33. package/lib/components/inputs/company-input.js +2 -2416
  34. package/lib/components/inputs/company-input.js.map +1 -0
  35. package/lib/components/inputs/country-dropdown.js +2 -2474
  36. package/lib/components/inputs/country-dropdown.js.map +1 -0
  37. package/lib/components/inputs/country-input.js +2 -2377
  38. package/lib/components/inputs/country-input.js.map +1 -0
  39. package/lib/components/inputs/datetimepicker.js +2 -314
  40. package/lib/components/inputs/datetimepicker.js.map +1 -0
  41. package/lib/components/inputs/dropdown.js +2 -259
  42. package/lib/components/inputs/dropdown.js.map +1 -0
  43. package/lib/components/inputs/editor-input.js +2 -270
  44. package/lib/components/inputs/editor-input.js.map +1 -0
  45. package/lib/components/inputs/event-input.js +2 -2355
  46. package/lib/components/inputs/event-input.js.map +1 -0
  47. package/lib/components/inputs/free-multi-text-input.js +2 -252
  48. package/lib/components/inputs/free-multi-text-input.js.map +1 -0
  49. package/lib/components/inputs/group-input.js +2 -2350
  50. package/lib/components/inputs/group-input.js.map +1 -0
  51. package/lib/components/inputs/grouped-dropdown.js +2 -244
  52. package/lib/components/inputs/grouped-dropdown.js.map +1 -0
  53. package/lib/components/inputs/language-input.js +2 -2382
  54. package/lib/components/inputs/language-input.js.map +1 -0
  55. package/lib/components/inputs/member-input.js +2 -2377
  56. package/lib/components/inputs/member-input.js.map +1 -0
  57. package/lib/components/inputs/operator-input.js +2 -328
  58. package/lib/components/inputs/operator-input.js.map +1 -0
  59. package/lib/components/inputs/organization-input.js +2 -2400
  60. package/lib/components/inputs/organization-input.js.map +1 -0
  61. package/lib/components/inputs/promocode-input.js +2 -2385
  62. package/lib/components/inputs/promocode-input.js.map +1 -0
  63. package/lib/components/inputs/radio-list.js +2 -297
  64. package/lib/components/inputs/radio-list.js.map +1 -0
  65. package/lib/components/inputs/registration-company-input.js +2 -2438
  66. package/lib/components/inputs/registration-company-input.js.map +1 -0
  67. package/lib/components/inputs/speaker-input.js +2 -2411
  68. package/lib/components/inputs/speaker-input.js.map +1 -0
  69. package/lib/components/inputs/sponsor-input.js +2 -2359
  70. package/lib/components/inputs/sponsor-input.js.map +1 -0
  71. package/lib/components/inputs/stepped-select.js +2 -197
  72. package/lib/components/inputs/stepped-select.js.map +1 -0
  73. package/lib/components/inputs/summit-days-select.js +2 -162
  74. package/lib/components/inputs/summit-days-select.js.map +1 -0
  75. package/lib/components/inputs/summit-input.js +2 -2357
  76. package/lib/components/inputs/summit-input.js.map +1 -0
  77. package/lib/components/inputs/summit-venues-select.js +2 -203
  78. package/lib/components/inputs/summit-venues-select.js.map +1 -0
  79. package/lib/components/inputs/tag-input.js +2 -2427
  80. package/lib/components/inputs/tag-input.js.map +1 -0
  81. package/lib/components/inputs/text-input.js +2 -202
  82. package/lib/components/inputs/text-input.js.map +1 -0
  83. package/lib/components/inputs/textarea-input.js +2 -174
  84. package/lib/components/inputs/textarea-input.js.map +1 -0
  85. package/lib/components/inputs/ticket-types-input.js +2 -2415
  86. package/lib/components/inputs/ticket-types-input.js.map +1 -0
  87. package/lib/components/inputs/upload-input-v2.js +2 -860
  88. package/lib/components/inputs/upload-input-v2.js.map +1 -0
  89. package/lib/components/inputs/upload-input.js +2 -391
  90. package/lib/components/inputs/upload-input.js.map +1 -0
  91. package/lib/components/progressive-img.js +2 -296
  92. package/lib/components/progressive-img.js.map +1 -0
  93. package/lib/components/raw-html.js +2 -125
  94. package/lib/components/raw-html.js.map +1 -0
  95. package/lib/components/schedule-builder-constants.js +2 -87
  96. package/lib/components/schedule-builder-constants.js.map +1 -0
  97. package/lib/components/schedule-builder-view.js +2 -2188
  98. package/lib/components/schedule-builder-view.js.map +1 -0
  99. package/lib/components/sections/panel.js +2 -156
  100. package/lib/components/sections/panel.js.map +1 -0
  101. package/lib/components/simple-link-list.js +2 -790
  102. package/lib/components/simple-link-list.js.map +1 -0
  103. package/lib/components/sponsored-project-input.js +2 -2356
  104. package/lib/components/sponsored-project-input.js.map +1 -0
  105. package/lib/components/summit-dropdown.js +2 -214
  106. package/lib/components/summit-dropdown.js.map +1 -0
  107. package/lib/components/table-editable.js +2 -961
  108. package/lib/components/table-editable.js.map +1 -0
  109. package/lib/components/table-selectable.js +2 -552
  110. package/lib/components/table-selectable.js.map +1 -0
  111. package/lib/components/table-sortable.js +2 -743
  112. package/lib/components/table-sortable.js.map +1 -0
  113. package/lib/components/table.js +2 -510
  114. package/lib/components/table.js.map +1 -0
  115. package/lib/components/video-stream.js +2 -226
  116. package/lib/components/video-stream.js.map +1 -0
  117. package/lib/css/components/bulk-actions-selector.css +2 -19
  118. package/lib/css/components/bulk-actions-selector.css.map +1 -0
  119. package/lib/css/components/circle-button.css +1 -28
  120. package/lib/css/components/extra-questions.css +2 -35
  121. package/lib/css/components/extra-questions.css.map +1 -0
  122. package/lib/css/components/form-validation.css +2 -29
  123. package/lib/css/components/form-validation.css.map +1 -0
  124. package/lib/css/components/free-text-search.css +2 -35
  125. package/lib/css/components/free-text-search.css.map +1 -0
  126. package/lib/css/components/index.css +3 -1398
  127. package/lib/css/components/index.css.map +1 -0
  128. package/lib/css/components/inputs/action-dropdown.css +2 -46
  129. package/lib/css/components/inputs/action-dropdown.css.map +1 -0
  130. package/lib/css/components/inputs/datetimepicker.css +2 -208
  131. package/lib/css/components/inputs/datetimepicker.css.map +1 -0
  132. package/lib/css/components/inputs/grouped-dropdown.css +2 -25
  133. package/lib/css/components/inputs/grouped-dropdown.css.map +1 -0
  134. package/lib/css/components/inputs/stepped-select.css +2 -12
  135. package/lib/css/components/inputs/stepped-select.css.map +1 -0
  136. package/lib/css/components/inputs/upload-input-v2.css +2 -108
  137. package/lib/css/components/inputs/upload-input-v2.css.map +1 -0
  138. package/lib/css/components/inputs/upload-input.css +2 -43
  139. package/lib/css/components/inputs/upload-input.css.map +1 -0
  140. package/lib/css/components/progressive-img.css +1 -18
  141. package/lib/css/components/schedule-builder-view.css +2 -249
  142. package/lib/css/components/schedule-builder-view.css.map +1 -0
  143. package/lib/css/components/simple-link-list.css +2 -195
  144. package/lib/css/components/simple-link-list.css.map +1 -0
  145. package/lib/css/components/summit-dropdown.css +2 -35
  146. package/lib/css/components/summit-dropdown.css.map +1 -0
  147. package/lib/css/components/table-editable.css +2 -145
  148. package/lib/css/components/table-editable.css.map +1 -0
  149. package/lib/css/components/table-selectable.css +2 -147
  150. package/lib/css/components/table-selectable.css.map +1 -0
  151. package/lib/css/components/table-sortable.css +2 -156
  152. package/lib/css/components/table-sortable.css.map +1 -0
  153. package/lib/css/components/table.css +2 -147
  154. package/lib/css/components/table.css.map +1 -0
  155. package/lib/i18n.js +2 -515
  156. package/lib/i18n.js.map +1 -0
  157. package/lib/models/index.js +2 -238
  158. package/lib/models/index.js.map +1 -0
  159. package/lib/models/summit-event.js +2 -210
  160. package/lib/models/summit-event.js.map +1 -0
  161. package/lib/security/abstract-auth-callback-route.js +2 -2192
  162. package/lib/security/abstract-auth-callback-route.js.map +1 -0
  163. package/lib/security/actions.js +2 -1892
  164. package/lib/security/actions.js.map +1 -0
  165. package/lib/security/constants.js +2 -75
  166. package/lib/security/constants.js.map +1 -0
  167. package/lib/security/methods.js +2 -1892
  168. package/lib/security/methods.js.map +1 -0
  169. package/lib/security/reducers.js +2 -2035
  170. package/lib/security/reducers.js.map +1 -0
  171. package/lib/security/session-checker.js +2 -2253
  172. package/lib/security/session-checker.js.map +1 -0
  173. package/lib/utils/actions.js +2 -1892
  174. package/lib/utils/actions.js.map +1 -0
  175. package/lib/utils/fragment-parser.js +2 -207
  176. package/lib/utils/fragment-parser.js.map +1 -0
  177. package/lib/utils/methods.js +2 -435
  178. package/lib/utils/methods.js.map +1 -0
  179. package/lib/utils/query-actions.js +2 -2229
  180. package/lib/utils/query-actions.js.map +1 -0
  181. package/lib/utils/questions-set.js +2 -681
  182. package/lib/utils/questions-set.js.map +1 -0
  183. package/lib/utils/reducers.js +2 -1948
  184. package/lib/utils/reducers.js.map +1 -0
  185. package/lib/utils/use-fit-text.js +2 -178
  186. package/lib/utils/use-fit-text.js.map +1 -0
  187. package/package.json +1 -1
@@ -1,2154 +1,2 @@
1
- (function webpackUniversalModuleDefinition(root, factory) {
2
- if(typeof exports === 'object' && typeof module === 'object')
3
- module.exports = factory();
4
- else if(typeof define === 'function' && define.amd)
5
- define("openstack-uicore-foundation", [], factory);
6
- else if(typeof exports === 'object')
7
- exports["openstack-uicore-foundation"] = factory();
8
- else
9
- root["openstack-uicore-foundation"] = factory();
10
- })(this, () => {
11
- return /******/ (() => { // webpackBootstrap
12
- /******/ "use strict";
13
- /******/ var __webpack_modules__ = ({
14
-
15
- /***/ "./src/components/extra-questions/constants.js":
16
- /*!*****************************************************!*\
17
- !*** ./src/components/extra-questions/constants.js ***!
18
- \*****************************************************/
19
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20
-
21
- __webpack_require__.r(__webpack_exports__);
22
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23
- /* harmony export */ "QuestionType_CheckBoxList": () => (/* binding */ QuestionType_CheckBoxList),
24
- /* harmony export */ "QuestionType_Checkbox": () => (/* binding */ QuestionType_Checkbox),
25
- /* harmony export */ "QuestionType_ComboBox": () => (/* binding */ QuestionType_ComboBox),
26
- /* harmony export */ "QuestionType_CountryComboBox": () => (/* binding */ QuestionType_CountryComboBox),
27
- /* harmony export */ "QuestionType_RadioButtonList": () => (/* binding */ QuestionType_RadioButtonList),
28
- /* harmony export */ "QuestionType_Text": () => (/* binding */ QuestionType_Text),
29
- /* harmony export */ "QuestionType_TextArea": () => (/* binding */ QuestionType_TextArea)
30
- /* harmony export */ });
31
- const QuestionType_Text = "Text";
32
- const QuestionType_TextArea = "TextArea";
33
- const QuestionType_Checkbox = "CheckBox";
34
- const QuestionType_RadioButtonList = "RadioButtonList";
35
- const QuestionType_ComboBox = "ComboBox";
36
- const QuestionType_CheckBoxList = "CheckBoxList";
37
- const QuestionType_CountryComboBox = "CountryComboBox";
38
-
39
- /***/ }),
40
-
41
- /***/ "./src/components/extra-questions/index.js":
42
- /*!*************************************************!*\
43
- !*** ./src/components/extra-questions/index.js ***!
44
- \*************************************************/
45
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
46
-
47
- __webpack_require__.r(__webpack_exports__);
48
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
49
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
50
- /* harmony export */ });
51
- /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "@babel/runtime/helpers/extends");
52
- /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
53
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
54
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
55
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
56
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
57
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "prop-types");
58
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);
59
- /* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../raw-html */ "./src/components/raw-html/index.js");
60
- /* harmony import */ var _inputs_text_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../inputs/text-input */ "./src/components/inputs/text-input.js");
61
- /* harmony import */ var _inputs_dropdown__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../inputs/dropdown */ "./src/components/inputs/dropdown.js");
62
- /* harmony import */ var _inputs_radio_list__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../inputs/radio-list */ "./src/components/inputs/radio-list.js");
63
- /* harmony import */ var _inputs_checkbox_list__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../inputs/checkbox-list */ "./src/components/inputs/checkbox-list.js");
64
- /* harmony import */ var _utils_questions_set__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/questions-set */ "./src/utils/questions-set.js");
65
- /* harmony import */ var react_final_form__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-final-form */ "react-final-form");
66
- /* harmony import */ var react_final_form__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react_final_form__WEBPACK_IMPORTED_MODULE_10__);
67
- /* harmony import */ var _index_scss__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./index.scss */ "./src/components/extra-questions/index.scss");
68
- /* harmony import */ var _utils_methods__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/methods */ "./src/utils/methods.js");
69
- /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./constants */ "./src/components/extra-questions/constants.js");
70
-
71
-
72
- const _excluded = ["input", "meta", "question", "className", "isDisabled", "isRequired"],
73
- _excluded2 = ["input", "meta", "question", "isDisabled", "isRequired"],
74
- _excluded3 = ["input", "meta", "question", "isDisabled", "isRequired"],
75
- _excluded4 = ["input", "meta", "question", "isDisabled", "isRequired", "maxValues"];
76
-
77
- /**
78
- * Copyright 2017 OpenStack Foundation
79
- * Licensed under the Apache License, Version 2.0 (the "License");
80
- * you may not use this file except in compliance with the License.
81
- * You may obtain a copy of the License at
82
- * http://www.apache.org/licenses/LICENSE-2.0
83
- * Unless required by applicable law or agreed to in writing, software
84
- * distributed under the License is distributed on an "AS IS" BASIS,
85
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
86
- * See the License for the specific language governing permissions and
87
- * limitations under the License.
88
- **/
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
- const InputAdapter = _ref => {
103
- let {
104
- input,
105
- meta,
106
- question,
107
- className,
108
- isDisabled,
109
- isRequired
110
- } = _ref,
111
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref, _excluded);
112
-
113
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_text_input__WEBPACK_IMPORTED_MODULE_5__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
114
- containerClassName: className,
115
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
116
- ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
117
- id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
118
- value: input.value,
119
- disabled: isDisabled,
120
- required: isRequired,
121
- onChange: input.onChange,
122
- placeholder: question.placeholder
123
- }));
124
- };
125
-
126
- const RadioButtonListAdapter = _ref2 => {
127
- let {
128
- input,
129
- meta,
130
- question,
131
- isDisabled,
132
- isRequired
133
- } = _ref2,
134
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref2, _excluded2);
135
-
136
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_radio_list__WEBPACK_IMPORTED_MODULE_7__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
137
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
138
- ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
139
- id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
140
- overrideCSS: true,
141
- value: input.value,
142
- disabled: isDisabled,
143
- required: isRequired,
144
- onChange: input.onChange
145
- }));
146
- };
147
-
148
- const DropdownAdapter = _ref3 => {
149
- let {
150
- input,
151
- meta,
152
- question,
153
- isDisabled,
154
- isRequired
155
- } = _ref3,
156
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref3, _excluded3);
157
-
158
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_dropdown__WEBPACK_IMPORTED_MODULE_6__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
159
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
160
- ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
161
- id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
162
- overrideCSS: true,
163
- className: "ddl-extra-questions-container",
164
- classNamePrefix: "ddl-extra-questions",
165
- value: input.value,
166
- disabled: isDisabled,
167
- required: isRequired,
168
- onChange: input.onChange
169
- }));
170
- };
171
-
172
- const CheckBoxListAdapter = _ref4 => {
173
- let {
174
- input,
175
- meta,
176
- question,
177
- isDisabled,
178
- isRequired,
179
- maxValues
180
- } = _ref4,
181
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_ref4, _excluded4);
182
-
183
- const shouldChange = ev => {
184
- const question_answers = ev.target.value; // if there's a max value of options checked and the value from the input is higher than the max, don't change the value
185
-
186
- if (maxValues > 0 && question_answers.length > maxValues) {
187
- return null;
188
- }
189
-
190
- return input.onChange(ev);
191
- };
192
-
193
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_inputs_checkbox_list__WEBPACK_IMPORTED_MODULE_8__["default"], _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, input, rest, {
194
- id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
195
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name),
196
- ariaLabelledBy: `${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(question.name)} label`,
197
- value: input.value,
198
- disabled: isDisabled,
199
- required: isRequired,
200
- onChange: shouldChange
201
- }));
202
- };
203
-
204
- const getValidator = isRequired => isRequired ? value => value ? undefined : "Required" : () => {};
205
-
206
- const ExtraQuestionsForm = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().forwardRef(({
207
- extraQuestions,
208
- userAnswers,
209
- onAnswerChanges,
210
- className = 'questions-form',
211
- questionContainerClassName = 'question-container',
212
- questionLabelContainerClassName = 'question-label-container',
213
- questionControlContainerClassName = 'question-control-container',
214
- readOnly = false,
215
- debug = false,
216
- buttonText = 'Submit',
217
- RequiredErrorMessage = 'Required',
218
- ValidationErrorClassName = 'extra-question-error',
219
- allowExtraQuestionsEdit = true,
220
- onError = e => console.log('form errors: ', e),
221
- shouldScroll2FirstError = true
222
- }, ref) => {
223
- let submit = null;
224
- const questionRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)({});
225
- const formRef = (0,react__WEBPACK_IMPORTED_MODULE_2__.useRef)(null);
226
- const [answers, setAnswers] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)({});
227
- (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(() => {
228
- formatUserAnswers();
229
- }, [extraQuestions]); // @see https://beta.reactjs.org/reference/react/useImperativeHandle
230
-
231
- (0,react__WEBPACK_IMPORTED_MODULE_2__.useImperativeHandle)(ref, () => ({
232
- doSubmit() {
233
- formRef.current.dispatchEvent(new Event("submit", {
234
- cancelable: true,
235
- bubbles: true
236
- }));
237
- }
238
-
239
- }));
240
-
241
- const formatUserAnswers = () => {
242
- const qs = new _utils_questions_set__WEBPACK_IMPORTED_MODULE_9__["default"](extraQuestions, userAnswers);
243
- setAnswers(qs.formatAnswers());
244
- };
245
-
246
- const Condition = ({
247
- when,
248
- rule,
249
- children
250
- }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
251
- name: when,
252
- subscription: {
253
- value: true
254
- }
255
- }, ({
256
- input: {
257
- value
258
- }
259
- }) => checkVisibility(rule, checkRule(value, rule), children));
260
-
261
- const Error = ({
262
- name
263
- }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
264
- name: name,
265
- subscription: {
266
- error: true,
267
- touched: true
268
- }
269
- }, ({
270
- meta: {
271
- error,
272
- touched
273
- }
274
- }) => error && touched ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
275
- className: ValidationErrorClassName
276
- }, error) : null);
277
-
278
- const checkRule = (value, rule) => {
279
- let values = rule.answer_values;
280
-
281
- if (Array.isArray(value)) {
282
- if (!value.length) return false;
283
- let res = rule.answer_values_operator === "And";
284
- values.forEach(v => {
285
- if (rule.answer_values_operator === "And") {
286
- res = res && value.includes(parseInt(v));
287
- } else {
288
- // Or
289
- res = res || value.includes(parseInt(v));
290
- }
291
- });
292
- return res;
293
- }
294
-
295
- return values.includes(value.toString());
296
- };
297
-
298
- const checkVisibility = (rule, ruleResult, children) => {
299
- if (rule.visibility === "Visible") {
300
- if (rule.visibility_condition === "Equal") {
301
- if (ruleResult) return children;
302
- delete questionRef.current[rule.sub_question.id];
303
- return null;
304
- } // Non Equal
305
-
306
-
307
- if (!ruleResult) {
308
- return children;
309
- }
310
-
311
- delete questionRef.current[rule.sub_question.id];
312
- return null;
313
- } // not visible
314
-
315
-
316
- if (rule.visibility_condition === "Equal") {
317
- if (!ruleResult) return children;
318
- delete questionRef.current[rule.sub_question.id];
319
- return null;
320
- }
321
-
322
- if (ruleResult) return children;
323
- delete questionRef.current[rule.sub_question.id];
324
- return null;
325
- };
326
-
327
- const getLabel = q => {
328
- // Keep the last word and the required asterisk on the same line
329
- const nonBreakingSpace = String.fromCharCode(160); // equals to  
330
- // Using browser parser isntead of regex to avoid possible issues
331
-
332
- const div = document.createElement("div");
333
- div.innerHTML = q.label; // Using innerText first since it keeps the line breaks
334
-
335
- const label = div.innerText || div.textContent || "";
336
- const labelText = q.mandatory ? `${label}${nonBreakingSpace}<b>*</b>` : label;
337
- const labelHTML = `<label id="${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)} label" htmlFor="${(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)}">
338
- ${labelText}
339
- </label>`;
340
- return labelHTML;
341
- };
342
-
343
- const isAnswered = (q, answers) => {
344
- const slug = (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name);
345
- if (!answers.hasOwnProperty(slug)) return false;
346
- const answer = answers[slug]; // check type
347
-
348
- if (Array.isArray(answer)) return answer.length > 0;
349
- if (typeof answer === 'string') return answer.length > 0;
350
- if (typeof answer === 'number') return answer > 0;
351
- if (typeof answer === 'boolean') return answer;
352
- return false;
353
- };
354
-
355
- const renderQuestion = q => {
356
- let questionValues = q.values; // disable field if edit isn't allowed and the questions is answered
357
-
358
- const isDisabled = !allowExtraQuestionsEdit && isAnswered(q, answers); // @see https://codesandbox.io/s/vg05y?file=/index.js
359
-
360
- if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_Text) {
361
- var _q$sub_question_rules;
362
-
363
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
364
- key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
365
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
366
- ref: el => questionRef.current[q.id] = el,
367
- className: questionContainerClassName
368
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
369
- replaceNewLine: true,
370
- className: questionLabelContainerClassName
371
- }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
372
- className: questionControlContainerClassName
373
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
374
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
375
- question: q,
376
- isDisabled: isDisabled,
377
- isRequired: q.mandatory,
378
- validate: getValidator(q.mandatory),
379
- component: InputAdapter
380
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
381
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
382
- }))), ((_q$sub_question_rules = q.sub_question_rules) === null || _q$sub_question_rules === void 0 ? void 0 : _q$sub_question_rules.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
383
- key: r.id,
384
- when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
385
- rule: r
386
- }, renderQuestion(r.sub_question))));
387
- }
388
-
389
- if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_TextArea) {
390
- var _q$sub_question_rules2;
391
-
392
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
393
- key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
394
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
395
- ref: el => questionRef.current[q.id] = el,
396
- className: questionContainerClassName
397
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
398
- replaceNewLine: true,
399
- className: questionLabelContainerClassName
400
- }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
401
- className: questionControlContainerClassName
402
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
403
- validate: getValidator(q.mandatory),
404
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
405
- id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
406
- disabled: isDisabled,
407
- required: q.mandatory,
408
- component: "textarea"
409
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
410
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
411
- }))), ((_q$sub_question_rules2 = q.sub_question_rules) === null || _q$sub_question_rules2 === void 0 ? void 0 : _q$sub_question_rules2.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
412
- key: r.id,
413
- when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
414
- rule: r
415
- }, renderQuestion(r.sub_question))));
416
- }
417
-
418
- if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_Checkbox) {
419
- var _q$sub_question_rules3;
420
-
421
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
422
- key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
423
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
424
- ref: el => questionRef.current[q.id] = el,
425
- style: {
426
- display: 'flex'
427
- },
428
- className: questionContainerClassName
429
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
430
- className: questionControlContainerClassName
431
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
432
- className: "form-check abc-checkbox"
433
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
434
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
435
- id: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
436
- validate: getValidator(q.mandatory),
437
- disabled: isDisabled,
438
- required: q.mandatory,
439
- type: "checkbox",
440
- className: "form-check-input",
441
- component: "input"
442
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("label", {
443
- className: "form-check-label",
444
- htmlFor: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
445
- }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
446
- replaceNewLine: true,
447
- className: `eq-checkbox-label ${questionLabelContainerClassName}`
448
- }, getLabel(q))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
449
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
450
- }), ((_q$sub_question_rules3 = q.sub_question_rules) === null || _q$sub_question_rules3 === void 0 ? void 0 : _q$sub_question_rules3.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
451
- key: r.id,
452
- when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
453
- rule: r
454
- }, renderQuestion(r.sub_question))));
455
- }
456
-
457
- if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_RadioButtonList) {
458
- var _q$sub_question_rules4;
459
-
460
- const options = questionValues.map(val => ({
461
- label: val.label,
462
- value: val.id
463
- }));
464
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
465
- key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
466
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
467
- key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
468
- ref: el => questionRef.current[q.id] = el,
469
- className: questionContainerClassName
470
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
471
- replaceNewLine: true,
472
- className: questionLabelContainerClassName
473
- }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
474
- className: questionControlContainerClassName
475
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
476
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
477
- options: options,
478
- question: q,
479
- validate: getValidator(q.mandatory),
480
- isDisabled: isDisabled,
481
- isRequired: q.mandatory,
482
- component: RadioButtonListAdapter
483
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
484
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
485
- }))), ((_q$sub_question_rules4 = q.sub_question_rules) === null || _q$sub_question_rules4 === void 0 ? void 0 : _q$sub_question_rules4.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
486
- key: r.id,
487
- when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
488
- rule: r
489
- }, renderQuestion(r.sub_question))));
490
- }
491
-
492
- if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_ComboBox || q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_CountryComboBox) {
493
- var _q$sub_question_rules5;
494
-
495
- const options = questionValues.map(val => ({
496
- label: val.label,
497
- value: val.id
498
- }));
499
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
500
- key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
501
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
502
- ref: el => questionRef.current[q.id] = el,
503
- className: questionContainerClassName
504
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
505
- replaceNewLine: true,
506
- className: questionLabelContainerClassName
507
- }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
508
- className: questionControlContainerClassName
509
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
510
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
511
- options: options,
512
- question: q,
513
- validate: getValidator(q.mandatory),
514
- isDisabled: isDisabled,
515
- isRequired: q.mandatory,
516
- component: DropdownAdapter
517
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
518
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
519
- }))), ((_q$sub_question_rules5 = q.sub_question_rules) === null || _q$sub_question_rules5 === void 0 ? void 0 : _q$sub_question_rules5.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
520
- key: r.id,
521
- when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
522
- rule: r
523
- }, renderQuestion(r.sub_question))));
524
- }
525
-
526
- if (q.type === _constants__WEBPACK_IMPORTED_MODULE_13__.QuestionType_CheckBoxList) {
527
- var _q$sub_question_rules6;
528
-
529
- const options = questionValues.map(val => ({
530
- label: val.label,
531
- value: val.id
532
- }));
533
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
534
- key: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
535
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
536
- ref: el => questionRef.current[q.id] = el,
537
- className: questionContainerClassName
538
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], {
539
- replaceNewLine: true,
540
- className: questionLabelContainerClassName
541
- }, getLabel(q)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
542
- className: questionControlContainerClassName
543
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Field, {
544
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
545
- className: questionControlContainerClassName,
546
- validate: getValidator(q.mandatory),
547
- options: options,
548
- question: q,
549
- maxValues: q.max_selected_values,
550
- isDisabled: isDisabled,
551
- isRequired: q.mandatory,
552
- component: CheckBoxListAdapter
553
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Error, {
554
- name: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name)
555
- }))), ((_q$sub_question_rules6 = q.sub_question_rules) === null || _q$sub_question_rules6 === void 0 ? void 0 : _q$sub_question_rules6.length) > 0 && q.sub_question_rules.map(r => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Condition, {
556
- key: r.id,
557
- when: (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name),
558
- rule: r
559
- }, renderQuestion(r.sub_question))));
560
- }
561
-
562
- return null;
563
- };
564
-
565
- const isVisible = q => {
566
- return !!questionRef.current[q.id];
567
- };
568
-
569
- const validateQuestion = (q, values, errors) => {
570
- var _q$sub_question_rules7;
571
-
572
- if (q.mandatory && isVisible(q)) {
573
- const slug = (0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name);
574
-
575
- if (!values.hasOwnProperty((0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(slug)) || values[(0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(slug)] === "" || values[slug].length === 0) {
576
- errors[slug] = RequiredErrorMessage;
577
- }
578
- } // validate sub rules
579
-
580
-
581
- (_q$sub_question_rules7 = q.sub_question_rules) === null || _q$sub_question_rules7 === void 0 ? void 0 : _q$sub_question_rules7.forEach(r => {
582
- validateQuestion(r.sub_question, values, errors);
583
- });
584
- };
585
-
586
- const onSubmit = values => {
587
- onAnswerChanges(values);
588
- };
589
-
590
- const validate = values => {
591
- const errors = {};
592
- extraQuestions.forEach(q => {
593
- validateQuestion(q, values, errors);
594
- });
595
- return errors;
596
- };
597
-
598
- if (!Object.keys(answers).length) return null;
599
-
600
- const getErrorFields = (q, invalidFormFields, errorFields) => {
601
- var _q$sub_question_rules8;
602
-
603
- if (invalidFormFields.includes((0,_utils_methods__WEBPACK_IMPORTED_MODULE_12__.toSlug)(q.name))) {
604
- errorFields.push(q);
605
- } // find errors on sub rules
606
-
607
-
608
- (_q$sub_question_rules8 = q.sub_question_rules) === null || _q$sub_question_rules8 === void 0 ? void 0 : _q$sub_question_rules8.forEach(r => {
609
- getErrorFields(r.sub_question, invalidFormFields, errorFields);
610
- });
611
- };
612
-
613
- const getFirstError = invalidFormFields => {
614
- const errorFields = [];
615
- extraQuestions.forEach(q => {
616
- getErrorFields(q, invalidFormFields, errorFields);
617
- });
618
- return errorFields.sort((a, b) => a.order > b.order)[0];
619
- };
620
-
621
- const scrollToFirstError = invalidFormFields => {
622
- const firstError = getFirstError(invalidFormFields);
623
- questionRef.current[firstError.id].scrollIntoView({
624
- behavior: 'smooth',
625
- block: 'center'
626
- });
627
- };
628
-
629
- if (!Object.keys(answers).length) return null;
630
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
631
- className: className
632
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(react_final_form__WEBPACK_IMPORTED_MODULE_10__.Form, {
633
- validate: validate,
634
- onSubmit: onSubmit,
635
- initialValues: answers
636
- }, ({
637
- handleSubmit,
638
- form,
639
- submitting,
640
- pristine,
641
- values
642
- }) => {
643
- submit = handleSubmit;
644
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("form", {
645
- onSubmit: event => {
646
- const invalidFormFields = form.getRegisteredFields().filter(field => form.getFieldState(field).invalid);
647
-
648
- if (invalidFormFields.length > 0) {
649
- const firstError = getFirstError(invalidFormFields);
650
- onError(invalidFormFields, questionRef.current[firstError.id]);
651
- if (shouldScroll2FirstError) scrollToFirstError(invalidFormFields);
652
- }
653
-
654
- handleSubmit(event);
655
- },
656
- ref: formRef
657
- }, readOnly ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("fieldset", {
658
- disabled: "disabled"
659
- }, extraQuestions.map(q => renderQuestion(q))) : extraQuestions.map(q => renderQuestion(q)), debug && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("pre", null, JSON.stringify(values, 0, 2)));
660
- }), !ref && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("button", {
661
- type: "submit",
662
- onClick: event => {
663
- submit(event);
664
- },
665
- style: {
666
- marginTop: 10
667
- }
668
- }, buttonText));
669
- });
670
- ExtraQuestionsForm.propTypes = {
671
- extraQuestions: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array.isRequired),
672
- userAnswers: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().array.isRequired),
673
- onAnswerChanges: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func.isRequired),
674
- className: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
675
- debug: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),
676
- buttonText: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
677
- questionContainerClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
678
- questionLabelContainerClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
679
- questionControlContainerClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
680
- RequiredErrorMessage: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
681
- ValidationErrorClassName: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),
682
- allowExtraQuestionsEdit: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),
683
- shouldScroll2FirstError: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool)
684
- };
685
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExtraQuestionsForm);
686
-
687
- /***/ }),
688
-
689
- /***/ "./src/components/inputs/checkbox-list.js":
690
- /*!************************************************!*\
691
- !*** ./src/components/inputs/checkbox-list.js ***!
692
- \************************************************/
693
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
694
-
695
- __webpack_require__.r(__webpack_exports__);
696
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
697
- /* harmony export */ "default": () => (/* binding */ CheckboxList)
698
- /* harmony export */ });
699
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
700
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);
701
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "prop-types");
702
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
703
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
704
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
705
- /* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! i18n-react/dist/i18n-react */ "i18n-react/dist/i18n-react");
706
- /* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3__);
707
- /* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../raw-html */ "./src/components/raw-html/index.js");
708
-
709
- const _excluded = ["onChange", "value", "className", "options", "id", "children", "error", "disabled", "name", "ariaLabelledBy"];
710
-
711
- /**
712
- * Copyright 2018 OpenStack Foundation
713
- * Licensed under the Apache License, Version 2.0 (the "License");
714
- * you may not use this file except in compliance with the License.
715
- * You may obtain a copy of the License at
716
- * http://www.apache.org/licenses/LICENSE-2.0
717
- * Unless required by applicable law or agreed to in writing, software
718
- * distributed under the License is distributed on an "AS IS" BASIS,
719
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
720
- * See the License for the specific language governing permissions and
721
- * limitations under the License.
722
- **/
723
-
724
-
725
-
726
-
727
- class CheckboxList extends (react__WEBPACK_IMPORTED_MODULE_2___default().Component) {
728
- constructor(props) {
729
- super(props);
730
- let otherValue = props.value ? props.value.find(v => !props.options.map(op => op.value).includes(v)) : false;
731
- this.state = {
732
- otherChecked: !!otherValue
733
- };
734
- this.handleChange = this.handleChange.bind(this);
735
- this.handleOtherCBChange = this.handleOtherCBChange.bind(this);
736
- }
737
-
738
- handleChange(event) {
739
- let optionValues = this.props.options.map(op => op.value);
740
- let value = this.props.value ? [...this.props.value] : [];
741
-
742
- if (event.target.type === 'checkbox') {
743
- if (event.target.checked) {
744
- const theVal = isNaN(event.target.value) ? event.target.value : parseInt(event.target.value);
745
- value.push(theVal);
746
- } else {
747
- value = value.filter(v => v != event.target.value);
748
- }
749
- } else {
750
- value = value.filter(v => optionValues.includes(v));
751
- value.push(event.target.value);
752
- }
753
-
754
- let ev = {
755
- target: {
756
- id: this.props.id,
757
- value: value,
758
- type: 'checkboxlist'
759
- }
760
- };
761
- this.props.onChange(ev);
762
- }
763
-
764
- handleOtherCBChange(event) {
765
- this.setState({
766
- otherChecked: event.target.checked
767
- });
768
- }
769
-
770
- render() {
771
- let _this$props = this.props,
772
- {
773
- onChange,
774
- value,
775
- className,
776
- options,
777
- id,
778
- children,
779
- error,
780
- disabled,
781
- name,
782
- ariaLabelledBy
783
- } = _this$props,
784
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(_this$props, _excluded);
785
-
786
- let {
787
- otherChecked
788
- } = this.state;
789
- let inline = this.props.hasOwnProperty('inline');
790
- let html = this.props.hasOwnProperty('html');
791
- let allowOther = this.props.hasOwnProperty('allowOther');
792
- let otherValue = value ? value.find(v => !options.map(op => op.value).includes(v)) : false;
793
- let has_error = this.props.hasOwnProperty('error') && error !== '';
794
- let isDisabled = this.props.hasOwnProperty('disabled') && disabled == true;
795
- let style, label;
796
-
797
- if (inline) {
798
- style = {
799
- paddingLeft: '22px',
800
- marginLeft: '20px',
801
- float: 'left'
802
- };
803
- } else {
804
- style = {
805
- paddingLeft: '22px',
806
- marginTop: '7px'
807
- };
808
- }
809
-
810
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
811
- id: `chl_wrapper_${id}`,
812
- "aria-labelledby": ariaLabelledBy
813
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
814
- className: "checkboxes-div" + (has_error ? ' error' : '')
815
- }, options.map(op => {
816
- let checked = value ? value.includes(op.value) : false;
817
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
818
- className: "form-check abc-checkbox",
819
- key: "radio_key_" + op.value,
820
- style: style
821
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", {
822
- type: "checkbox",
823
- id: `cb_${id}_${op.value}`,
824
- name: name ? name : id,
825
- checked: checked,
826
- disabled: isDisabled,
827
- onChange: this.handleChange,
828
- className: "form-check-input",
829
- value: op.value
830
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("label", {
831
- className: "form-check-label",
832
- htmlFor: `cb_${id}_${op.value}`
833
- }, html && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_4__["default"], null, op.label), !html && op.label));
834
- }), allowOther && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
835
- className: "form-check abc-checkbox",
836
- style: style
837
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", {
838
- type: "checkbox",
839
- id: "cb_other" + id,
840
- checked: otherChecked,
841
- disabled: isDisabled,
842
- onChange: this.handleOtherCBChange,
843
- className: "form-check-input",
844
- value: "other"
845
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("label", {
846
- className: "form-check-label",
847
- htmlFor: "cb_other" + id
848
- }, i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_3___default().translate("general.other"))), allowOther && otherChecked && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
849
- style: {
850
- paddingLeft: '22px',
851
- width: '50%'
852
- }
853
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", {
854
- className: "form-control",
855
- disabled: isDisabled,
856
- onChange: this.handleChange,
857
- value: otherValue
858
- }))), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("p", {
859
- className: "error-label"
860
- }, error));
861
- }
862
-
863
- }
864
- CheckboxList.defaultProps = {
865
- ariaLabelledBy: null
866
- };
867
- CheckboxList.propTypes = {
868
- id: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string.isRequired)
869
- };
870
-
871
- /***/ }),
872
-
873
- /***/ "./src/components/inputs/dropdown.js":
874
- /*!*******************************************!*\
875
- !*** ./src/components/inputs/dropdown.js ***!
876
- \*******************************************/
877
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
878
-
879
- __webpack_require__.r(__webpack_exports__);
880
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
881
- /* harmony export */ "default": () => (/* binding */ Dropdown)
882
- /* harmony export */ });
883
- /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "@babel/runtime/helpers/extends");
884
- /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
885
- /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
886
- /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);
887
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
888
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__);
889
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
890
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
891
- /* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-select */ "react-select");
892
- /* harmony import */ var react_select__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_select__WEBPACK_IMPORTED_MODULE_4__);
893
-
894
-
895
-
896
- const _excluded = ["onChange", "value", "className", "error", "clearable", "disabled", "overrideCSS", "ariaLabelledBy"];
897
-
898
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
899
-
900
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
901
-
902
- /**
903
- * Copyright 2017 OpenStack Foundation
904
- * Licensed under the Apache License, Version 2.0 (the "License");
905
- * you may not use this file except in compliance with the License.
906
- * You may obtain a copy of the License at
907
- * http://www.apache.org/licenses/LICENSE-2.0
908
- * Unless required by applicable law or agreed to in writing, software
909
- * distributed under the License is distributed on an "AS IS" BASIS,
910
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
911
- * See the License for the specific language governing permissions and
912
- * limitations under the License.
913
- **/
914
-
915
-
916
- class Dropdown extends (react__WEBPACK_IMPORTED_MODULE_3___default().Component) {
917
- constructor(props) {
918
- super(props);
919
- this.handleChange = this.handleChange.bind(this);
920
- }
921
-
922
- handleChange(selection) {
923
- let value = null;
924
-
925
- if (this.props.isMulti) {
926
- value = selection ? selection.map(val => val.value) : null;
927
- } else {
928
- value = selection ? selection.value : null;
929
- }
930
-
931
- let ev = {
932
- target: {
933
- id: this.props.id,
934
- value: value,
935
- type: 'dropdown'
936
- }
937
- };
938
- this.props.onChange(ev);
939
- }
940
-
941
- render() {
942
- let _this$props = this.props,
943
- {
944
- onChange,
945
- value,
946
- className,
947
- error,
948
- clearable,
949
- disabled,
950
- overrideCSS,
951
- ariaLabelledBy
952
- } = _this$props,
953
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2___default()(_this$props, _excluded);
954
-
955
- let has_error = this.props.hasOwnProperty('error') && error != '';
956
- let isClearable = this.props.hasOwnProperty('clearable');
957
- let isDisabled = this.props.hasOwnProperty('disabled') && disabled == true;
958
- let theValue = null;
959
- let selectClassName = className;
960
-
961
- if (!this.props.hasOwnProperty('overrideCSS') || overrideCSS == false) {
962
- selectClassName = 'dropdown ' + className + ' ' + (has_error ? 'error' : '');
963
- }
964
-
965
- if (this.props.isMulti) {
966
- theValue = this.props.options.filter(op => value.includes(op.value));
967
- } else {
968
- theValue = value instanceof Object || value == null ? value : this.props.options.find(opt => opt.value == value);
969
- }
970
-
971
- const selectStyles = {
972
- menu: styles => _objectSpread(_objectSpread({}, styles), {}, {
973
- zIndex: 999
974
- })
975
- };
976
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement((react_select__WEBPACK_IMPORTED_MODULE_4___default()), _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({
977
- className: selectClassName,
978
- value: theValue,
979
- onChange: this.handleChange,
980
- isClearable: isClearable,
981
- isDisabled: isDisabled,
982
- styles: selectStyles,
983
- "aria-labelledby": ariaLabelledBy
984
- }, rest)), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement("p", {
985
- className: "error-label"
986
- }, error));
987
- }
988
-
989
- }
990
- Dropdown.defaultProps = {
991
- ariaLabelledBy: null
992
- };
993
-
994
- /***/ }),
995
-
996
- /***/ "./src/components/inputs/radio-list.js":
997
- /*!*********************************************!*\
998
- !*** ./src/components/inputs/radio-list.js ***!
999
- \*********************************************/
1000
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1001
-
1002
- __webpack_require__.r(__webpack_exports__);
1003
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1004
- /* harmony export */ "default": () => (/* binding */ RadioList)
1005
- /* harmony export */ });
1006
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
1007
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);
1008
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
1009
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
1010
- /* harmony import */ var _raw_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../raw-html */ "./src/components/raw-html/index.js");
1011
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "prop-types");
1012
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);
1013
-
1014
- const _excluded = ["onChange", "value", "className", "error", "ariaLabelledBy", "disabled", "options", "id", "name"];
1015
-
1016
- /**
1017
- * Copyright 2018 OpenStack Foundation
1018
- * Licensed under the Apache License, Version 2.0 (the "License");
1019
- * you may not use this file except in compliance with the License.
1020
- * You may obtain a copy of the License at
1021
- * http://www.apache.org/licenses/LICENSE-2.0
1022
- * Unless required by applicable law or agreed to in writing, software
1023
- * distributed under the License is distributed on an "AS IS" BASIS,
1024
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1025
- * See the License for the specific language governing permissions and
1026
- * limitations under the License.
1027
- **/
1028
-
1029
-
1030
-
1031
- class RadioList extends (react__WEBPACK_IMPORTED_MODULE_1___default().Component) {
1032
- constructor(props) {
1033
- super(props);
1034
- this.state = {
1035
- value: props.value
1036
- };
1037
- this.handleChange = this.handleChange.bind(this);
1038
- }
1039
-
1040
- handleChange(selection) {
1041
- let ev = {
1042
- target: {
1043
- id: this.props.id,
1044
- value: selection.target.value,
1045
- type: 'radio'
1046
- }
1047
- };
1048
- this.props.onChange(ev);
1049
- }
1050
-
1051
- getLabel(option, id, inline, simple, html) {
1052
- if (inline) {
1053
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
1054
- className: "form-check-label",
1055
- htmlFor: `radio_${id}_${option.value}`,
1056
- style: {
1057
- display: 'inline-block'
1058
- }
1059
- }, html && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_2__["default"], null, option.label), !html && option.label);
1060
- } else if (simple) {
1061
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
1062
- className: "form-check-label",
1063
- htmlFor: `radio_${id}_${option.value}`
1064
- }, option.label);
1065
- } else {
1066
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
1067
- className: "form-check-label",
1068
- htmlFor: `radio_${id}_${option.value}`,
1069
- style: {
1070
- display: 'inline-block'
1071
- }
1072
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("h4", {
1073
- style: {
1074
- marginTop: '0px'
1075
- }
1076
- }, option.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_raw_html__WEBPACK_IMPORTED_MODULE_2__["default"], null, option.description));
1077
- }
1078
- }
1079
-
1080
- render() {
1081
- let _this$props = this.props,
1082
- {
1083
- onChange,
1084
- value,
1085
- className,
1086
- error,
1087
- ariaLabelledBy,
1088
- disabled,
1089
- options,
1090
- id,
1091
- name
1092
- } = _this$props,
1093
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(_this$props, _excluded);
1094
-
1095
- let has_error = this.props.hasOwnProperty('error') && error != '';
1096
- let inline = this.props.hasOwnProperty('inline');
1097
- let simple = this.props.hasOwnProperty('simple');
1098
- let html = this.props.hasOwnProperty('html');
1099
- let isDisabled = this.props.hasOwnProperty('disabled') && disabled == true;
1100
- let style, label;
1101
-
1102
- if (inline) {
1103
- style = {
1104
- paddingLeft: '22px',
1105
- marginLeft: '20px',
1106
- float: 'left'
1107
- };
1108
- } else {
1109
- style = {
1110
- paddingLeft: '22px'
1111
- };
1112
- }
1113
-
1114
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
1115
- id: `rl_wrapper_${id}`,
1116
- "aria-labelledby": ariaLabelledBy
1117
- }, options.map(op => {
1118
- let checked = op.value == value;
1119
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
1120
- className: "form-check abc-radio",
1121
- key: `radio_key_${id}_${op.value}`,
1122
- style: style
1123
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("input", {
1124
- className: "form-check-input",
1125
- type: "radio",
1126
- id: `radio_${id}_${op.value}`,
1127
- value: op.value,
1128
- checked: checked,
1129
- onChange: this.handleChange,
1130
- disabled: isDisabled,
1131
- name: name ? name : `radio_${id}`
1132
- }), this.getLabel(op, id, inline, simple, html));
1133
- }), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("p", {
1134
- className: "error-label"
1135
- }, error));
1136
- }
1137
-
1138
- }
1139
- RadioList.defaultProps = {
1140
- ariaLabelledBy: null
1141
- };
1142
- RadioList.propTypes = {
1143
- id: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string.isRequired)
1144
- };
1145
-
1146
- /***/ }),
1147
-
1148
- /***/ "./src/components/inputs/text-input.js":
1149
- /*!*********************************************!*\
1150
- !*** ./src/components/inputs/text-input.js ***!
1151
- \*********************************************/
1152
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1153
-
1154
- __webpack_require__.r(__webpack_exports__);
1155
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1156
- /* harmony export */ "default": () => (/* binding */ Input)
1157
- /* harmony export */ });
1158
- /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "@babel/runtime/helpers/extends");
1159
- /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);
1160
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "@babel/runtime/helpers/objectWithoutProperties");
1161
- /* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__);
1162
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
1163
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
1164
-
1165
-
1166
- const _excluded = ["onChange", "value", "className", "error", "ariaLabelledBy", "containerClassName"];
1167
-
1168
- /**
1169
- * Copyright 2017 OpenStack Foundation
1170
- * Licensed under the Apache License, Version 2.0 (the "License");
1171
- * you may not use this file except in compliance with the License.
1172
- * You may obtain a copy of the License at
1173
- * http://www.apache.org/licenses/LICENSE-2.0
1174
- * Unless required by applicable law or agreed to in writing, software
1175
- * distributed under the License is distributed on an "AS IS" BASIS,
1176
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1177
- * See the License for the specific language governing permissions and
1178
- * limitations under the License.
1179
- **/
1180
-
1181
- class Input extends (react__WEBPACK_IMPORTED_MODULE_2___default().Component) {
1182
- constructor(props) {
1183
- super(props);
1184
- this.handleChange = this.handleChange.bind(this);
1185
- }
1186
-
1187
- componentDidUpdate(prevProps, prevState, snapshot) {
1188
- if (this.props.value !== prevProps.value) {
1189
- this.input.value = this.props.value;
1190
- }
1191
- }
1192
-
1193
- handleChange(ev) {
1194
- this.props.onChange(ev);
1195
- }
1196
-
1197
- render() {
1198
- let _this$props = this.props,
1199
- {
1200
- onChange,
1201
- value,
1202
- className,
1203
- error,
1204
- ariaLabelledBy,
1205
- containerClassName
1206
- } = _this$props,
1207
- rest = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1___default()(_this$props, _excluded);
1208
-
1209
- let has_error = this.props.hasOwnProperty('error') && error !== '';
1210
- let class_name = this.props.hasOwnProperty('className') ? className : 'form-control';
1211
- let container_class_name = this.props.hasOwnProperty('containerClassName') ? containerClassName : 'container-form-control';
1212
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", {
1213
- className: container_class_name
1214
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("input", _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({
1215
- className: `${class_name} ${has_error ? 'error' : ''}`,
1216
- ref: node => {
1217
- this.input = node;
1218
- },
1219
- defaultValue: value,
1220
- "aria-labelledby": ariaLabelledBy,
1221
- onChange: this.handleChange
1222
- }, rest)), has_error && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("p", {
1223
- className: "error-label"
1224
- }, error));
1225
- }
1226
-
1227
- }
1228
- Input.defaultProps = {
1229
- ariaLabelledBy: null
1230
- };
1231
-
1232
- /***/ }),
1233
-
1234
- /***/ "./src/components/raw-html/index.js":
1235
- /*!******************************************!*\
1236
- !*** ./src/components/raw-html/index.js ***!
1237
- \******************************************/
1238
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1239
-
1240
- __webpack_require__.r(__webpack_exports__);
1241
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1242
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1243
- /* harmony export */ });
1244
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
1245
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1246
-
1247
-
1248
- const RawHTML = ({
1249
- children,
1250
- replaceNewLine = false,
1251
- className = ""
1252
- }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
1253
- className: className,
1254
- dangerouslySetInnerHTML: {
1255
- __html: replaceNewLine ? children === null || children === void 0 ? void 0 : children.replace(/\n/g, '<br />') : children
1256
- }
1257
- });
1258
-
1259
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RawHTML);
1260
-
1261
- /***/ }),
1262
-
1263
- /***/ "./src/utils/methods.js":
1264
- /*!******************************!*\
1265
- !*** ./src/utils/methods.js ***!
1266
- \******************************/
1267
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1268
-
1269
- __webpack_require__.r(__webpack_exports__);
1270
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1271
- /* harmony export */ "arraysEqual": () => (/* binding */ arraysEqual),
1272
- /* harmony export */ "base64URLEncode": () => (/* binding */ base64URLEncode),
1273
- /* harmony export */ "buildAPIBaseUrl": () => (/* binding */ buildAPIBaseUrl),
1274
- /* harmony export */ "convertSVGtoImg": () => (/* binding */ convertSVGtoImg),
1275
- /* harmony export */ "epochToMoment": () => (/* binding */ epochToMoment),
1276
- /* harmony export */ "epochToMomentTimeZone": () => (/* binding */ epochToMomentTimeZone),
1277
- /* harmony export */ "findElementPos": () => (/* binding */ findElementPos),
1278
- /* harmony export */ "formatEpoch": () => (/* binding */ formatEpoch),
1279
- /* harmony export */ "getAllowedUserGroups": () => (/* binding */ getAllowedUserGroups),
1280
- /* harmony export */ "getAuthCallback": () => (/* binding */ getAuthCallback),
1281
- /* harmony export */ "getBackURL": () => (/* binding */ getBackURL),
1282
- /* harmony export */ "getCurrentHref": () => (/* binding */ getCurrentHref),
1283
- /* harmony export */ "getCurrentLocation": () => (/* binding */ getCurrentLocation),
1284
- /* harmony export */ "getCurrentPathName": () => (/* binding */ getCurrentPathName),
1285
- /* harmony export */ "getCurrentUserLanguage": () => (/* binding */ getCurrentUserLanguage),
1286
- /* harmony export */ "getEventHosts": () => (/* binding */ getEventHosts),
1287
- /* harmony export */ "getEventLocation": () => (/* binding */ getEventLocation),
1288
- /* harmony export */ "getFromLocalStorage": () => (/* binding */ getFromLocalStorage),
1289
- /* harmony export */ "getOrigin": () => (/* binding */ getOrigin),
1290
- /* harmony export */ "getTimeServiceUrl": () => (/* binding */ getTimeServiceUrl),
1291
- /* harmony export */ "hasErrors": () => (/* binding */ hasErrors),
1292
- /* harmony export */ "isClearingSessionState": () => (/* binding */ isClearingSessionState),
1293
- /* harmony export */ "isEmpty": () => (/* binding */ isEmpty),
1294
- /* harmony export */ "objectToQueryString": () => (/* binding */ objectToQueryString),
1295
- /* harmony export */ "parseLocationHour": () => (/* binding */ parseLocationHour),
1296
- /* harmony export */ "putOnLocalStorage": () => (/* binding */ putOnLocalStorage),
1297
- /* harmony export */ "removeFromLocalStorage": () => (/* binding */ removeFromLocalStorage),
1298
- /* harmony export */ "retryPromise": () => (/* binding */ retryPromise),
1299
- /* harmony export */ "scrollToError": () => (/* binding */ scrollToError),
1300
- /* harmony export */ "setSessionClearingState": () => (/* binding */ setSessionClearingState),
1301
- /* harmony export */ "shallowEqual": () => (/* binding */ shallowEqual),
1302
- /* harmony export */ "toSlug": () => (/* binding */ toSlug)
1303
- /* harmony export */ });
1304
- /* harmony import */ var moment_timezone__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment-timezone */ "moment-timezone");
1305
- /* harmony import */ var moment_timezone__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment_timezone__WEBPACK_IMPORTED_MODULE_0__);
1306
- /* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! urijs */ "urijs");
1307
- /* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(urijs__WEBPACK_IMPORTED_MODULE_1__);
1308
- /**
1309
- * Copyright 2018 OpenStack Foundation
1310
- * Licensed under the Apache License, Version 2.0 (the "License");
1311
- * you may not use this file except in compliance with the License.
1312
- * You may obtain a copy of the License at
1313
- * http://www.apache.org/licenses/LICENSE-2.0
1314
- * Unless required by applicable law or agreed to in writing, software
1315
- * distributed under the License is distributed on an "AS IS" BASIS,
1316
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1317
- * See the License for the specific language governing permissions and
1318
- * limitations under the License.
1319
- **/
1320
-
1321
-
1322
- const findElementPos = obj => {
1323
- var curtop = -70;
1324
-
1325
- if (obj.offsetParent) {
1326
- do {
1327
- curtop += obj.offsetTop;
1328
- } while (obj = obj.offsetParent);
1329
-
1330
- return [curtop];
1331
- }
1332
- };
1333
- const epochToMoment = atime => {
1334
- if (!atime) return atime;
1335
- atime = atime * 1000;
1336
- return moment_timezone__WEBPACK_IMPORTED_MODULE_0___default()(atime);
1337
- };
1338
- const epochToMomentTimeZone = (atime, time_zone) => {
1339
- if (!atime) return atime;
1340
- atime = atime * 1000;
1341
- return moment_timezone__WEBPACK_IMPORTED_MODULE_0___default()(atime).tz(time_zone);
1342
- };
1343
- const formatEpoch = (atime, format = 'M/D/YYYY h:mm a') => {
1344
- if (!atime) return atime;
1345
- return epochToMoment(atime).format(format);
1346
- };
1347
- const parseLocationHour = hour => {
1348
- let parsedHour = hour.toString();
1349
- if (parsedHour.length < 4) parsedHour = `0${parsedHour}`;
1350
- parsedHour = parsedHour.match(/.{2}/g);
1351
- parsedHour = parsedHour.join(':');
1352
- return parsedHour;
1353
- };
1354
- const objectToQueryString = obj => {
1355
- var str = "";
1356
-
1357
- for (var key in obj) {
1358
- if (str != "") {
1359
- str += "&";
1360
- }
1361
-
1362
- str += key + "=" + encodeURIComponent(obj[key]);
1363
- }
1364
-
1365
- return str;
1366
- };
1367
- const getBackURL = () => {
1368
- let url = urijs__WEBPACK_IMPORTED_MODULE_1___default()(window.location.href);
1369
- let query = url.search(true);
1370
- let fragment = url.fragment();
1371
- let backUrl = query.hasOwnProperty('BackUrl') ? query['BackUrl'] : null;
1372
-
1373
- if (fragment != null && fragment != '') {
1374
- backUrl += `#${fragment}`;
1375
- }
1376
-
1377
- return backUrl;
1378
- };
1379
- const toSlug = text => {
1380
- text = text.toLowerCase();
1381
- return text.replace(/[^a-zA-Z0-9]+/g, '_');
1382
- };
1383
- const getAuthCallback = () => {
1384
- if (typeof window !== 'undefined') {
1385
- return `${window.location.origin}/auth/callback`;
1386
- }
1387
-
1388
- return null;
1389
- };
1390
- const getCurrentLocation = () => {
1391
- let location = '';
1392
-
1393
- if (typeof window !== 'undefined') {
1394
- location = window.location; // check if we are on iframe
1395
-
1396
- if (window.top) location = window.top.location;
1397
- }
1398
-
1399
- return location;
1400
- };
1401
- const getOrigin = () => {
1402
- if (typeof window !== 'undefined') {
1403
- return window.location.origin;
1404
- }
1405
-
1406
- return null;
1407
- };
1408
- const getCurrentPathName = () => {
1409
- if (typeof window !== 'undefined') {
1410
- return window.location.pathname;
1411
- }
1412
-
1413
- return null;
1414
- };
1415
- const getCurrentHref = () => {
1416
- if (typeof window !== 'undefined') {
1417
- return window.location.href;
1418
- }
1419
-
1420
- return null;
1421
- };
1422
- const getAllowedUserGroups = () => {
1423
- if (typeof window !== 'undefined') {
1424
- return window.ALLOWED_USER_GROUPS || '';
1425
- }
1426
-
1427
- return null;
1428
- };
1429
- const buildAPIBaseUrl = relativeUrl => {
1430
- if (typeof window !== 'undefined') {
1431
- return `${window.API_BASE_URL}${relativeUrl}`;
1432
- }
1433
-
1434
- return null``;
1435
- };
1436
- const putOnLocalStorage = (key, value) => {
1437
- if (typeof window !== 'undefined') {
1438
- window.localStorage.setItem(key, value);
1439
- }
1440
- };
1441
- const getFromLocalStorage = (key, removeIt) => {
1442
- if (typeof window !== 'undefined') {
1443
- let val = window.localStorage.getItem(key);
1444
-
1445
- if (removeIt) {
1446
- console.log(`getFromLocalStorage removing key ${key}`);
1447
- removeFromLocalStorage(key);
1448
- }
1449
-
1450
- return val;
1451
- }
1452
-
1453
- return null;
1454
- };
1455
- const removeFromLocalStorage = key => {
1456
- if (typeof window !== 'undefined') {
1457
- window.localStorage.removeItem(key);
1458
- }
1459
- };
1460
- const isClearingSessionState = () => {
1461
- if (typeof window !== 'undefined') {
1462
- return window.clearing_session_state;
1463
- }
1464
-
1465
- return false;
1466
- };
1467
- const setSessionClearingState = val => {
1468
- if (typeof window !== 'undefined') {
1469
- window.clearing_session_state = val;
1470
- }
1471
- };
1472
- const getCurrentUserLanguage = () => {
1473
- let language = 'en';
1474
-
1475
- if (typeof navigator !== 'undefined') {
1476
- language = navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage;
1477
- }
1478
-
1479
- return language;
1480
- };
1481
- const scrollToError = errors => {
1482
- if (Object.keys(errors).length > 0) {
1483
- const firstError = Object.keys(errors)[0];
1484
- const firstNode = document.getElementById(firstError);
1485
- if (firstNode) window.scrollTo(0, findElementPos(firstNode));
1486
- }
1487
- };
1488
- const hasErrors = (field, errors) => {
1489
- if (field in errors) {
1490
- return errors[field];
1491
- }
1492
-
1493
- return '';
1494
- };
1495
- const shallowEqual = (object1, object2) => {
1496
- const keys1 = Object.keys(object1);
1497
- const keys2 = Object.keys(object2);
1498
-
1499
- if (keys1.length !== keys2.length) {
1500
- return false;
1501
- }
1502
-
1503
- for (let key of keys1) {
1504
- if (object1[key] !== object2[key]) {
1505
- return false;
1506
- }
1507
- }
1508
-
1509
- return true;
1510
- };
1511
- const arraysEqual = (a1, a2) => a1.length === a2.length && a1.every((o, idx) => shallowEqual(o, a2[idx]));
1512
- const isEmpty = obj => {
1513
- return Object.keys(obj).length === 0;
1514
- };
1515
- const base64URLEncode = str => {
1516
- return str.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
1517
- };
1518
- const retryPromise = async (cb, maxNumberOfRetries = 3) => {
1519
- for (let i = 0; i < maxNumberOfRetries; i++) {
1520
- if (await cb()) {
1521
- return true;
1522
- }
1523
- }
1524
-
1525
- return false;
1526
- };
1527
- const getTimeServiceUrl = () => {
1528
- if (typeof window !== 'undefined') {
1529
- return window.TIMEINTERVALSINCE1970_API_URL || process.env.TIMEINTERVALSINCE1970_API_URL;
1530
- }
1531
-
1532
- return null;
1533
- };
1534
- const getEventLocation = (event, summitVenueCount, summitShowLocDate = null, nowUtc = null) => {
1535
- var _location$venue, _location$floor;
1536
-
1537
- const shouldShowVenues = summitShowLocDate && nowUtc ? summitShowLocDate * 1000 < nowUtc : true;
1538
- const locationName = [];
1539
- const {
1540
- location
1541
- } = event;
1542
- if (!shouldShowVenues) return 'TBA';
1543
- if (!location) return 'TBA';
1544
- if (summitVenueCount > 1 && (_location$venue = location.venue) !== null && _location$venue !== void 0 && _location$venue.name) locationName.push(location.venue.name);
1545
- if ((_location$floor = location.floor) !== null && _location$floor !== void 0 && _location$floor.name) locationName.push(location.floor.name);
1546
- if (location.name) locationName.push(location.name);
1547
- return locationName.length > 0 ? locationName.join(' - ') : 'TBA';
1548
- };
1549
- const getEventHosts = event => {
1550
- var _event$speakers;
1551
-
1552
- let hosts = [];
1553
-
1554
- if (((_event$speakers = event.speakers) === null || _event$speakers === void 0 ? void 0 : _event$speakers.length) > 0) {
1555
- hosts = [...event.speakers];
1556
- }
1557
-
1558
- if (event.moderator) hosts.push(event.moderator);
1559
- return hosts;
1560
- };
1561
-
1562
- const loadImage = async url => {
1563
- const img = document.createElement('img');
1564
- img.src = url;
1565
- img.crossOrigin = 'anonymous';
1566
- return new Promise((resolve, reject) => {
1567
- img.onload = () => resolve(img);
1568
-
1569
- img.onerror = reject;
1570
- });
1571
- };
1572
-
1573
- const convertSVGtoImg = async svgUrl => {
1574
- const img = await loadImage(svgUrl);
1575
- const newWidth = 100;
1576
- const newHeight = Math.floor(img.naturalHeight * 100 / img.naturalWidth);
1577
- const canvas = document.createElement('canvas');
1578
- canvas.width = newWidth;
1579
- canvas.height = newHeight;
1580
- canvas.getContext('2d').drawImage(img, 0, 0, newWidth, newHeight);
1581
- const url = await canvas.toDataURL(`image/png`, 1.0);
1582
- console.log(url, newWidth, newHeight);
1583
- return {
1584
- url,
1585
- width: newWidth,
1586
- height: newHeight
1587
- };
1588
- };
1589
-
1590
- /***/ }),
1591
-
1592
- /***/ "./src/utils/questions-set.js":
1593
- /*!************************************!*\
1594
- !*** ./src/utils/questions-set.js ***!
1595
- \************************************/
1596
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1597
-
1598
- __webpack_require__.r(__webpack_exports__);
1599
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1600
- /* harmony export */ "AllowedMultipleValueQuestionType": () => (/* binding */ AllowedMultipleValueQuestionType),
1601
- /* harmony export */ "AnswerValuesOperator_And": () => (/* binding */ AnswerValuesOperator_And),
1602
- /* harmony export */ "AnswerValuesOperator_Or": () => (/* binding */ AnswerValuesOperator_Or),
1603
- /* harmony export */ "CheckBoxListQuestionType": () => (/* binding */ CheckBoxListQuestionType),
1604
- /* harmony export */ "CheckBoxQuestionType": () => (/* binding */ CheckBoxQuestionType),
1605
- /* harmony export */ "ComboBoxQuestionType": () => (/* binding */ ComboBoxQuestionType),
1606
- /* harmony export */ "MainQuestionClassType": () => (/* binding */ MainQuestionClassType),
1607
- /* harmony export */ "RadioButtonListQuestionType": () => (/* binding */ RadioButtonListQuestionType),
1608
- /* harmony export */ "VisibilityCondition_Equal": () => (/* binding */ VisibilityCondition_Equal),
1609
- /* harmony export */ "VisibilityCondition_NotEqual": () => (/* binding */ VisibilityCondition_NotEqual),
1610
- /* harmony export */ "Visibility_Visible": () => (/* binding */ Visibility_Visible),
1611
- /* harmony export */ "default": () => (/* binding */ QuestionsSet)
1612
- /* harmony export */ });
1613
- /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
1614
- /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
1615
- /* harmony import */ var _methods__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./methods */ "./src/utils/methods.js");
1616
-
1617
-
1618
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1619
-
1620
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1621
-
1622
- const CheckBoxQuestionType = 'CheckBox';
1623
- const ComboBoxQuestionType = 'ComboBox';
1624
- const CheckBoxListQuestionType = 'CheckBoxList';
1625
- const RadioButtonListQuestionType = 'RadioButtonList';
1626
- const AllowedMultipleValueQuestionType = [ComboBoxQuestionType, CheckBoxListQuestionType, RadioButtonListQuestionType];
1627
- const AnswerValuesOperator_And = 'And';
1628
- const AnswerValuesOperator_Or = 'Or';
1629
- const VisibilityCondition_Equal = 'Equal';
1630
- const VisibilityCondition_NotEqual = 'NotEqual';
1631
- const Visibility_Visible = 'Visible';
1632
- const MainQuestionClassType = 'MainQuestion';
1633
-
1634
- class QuestionsSet {
1635
- constructor(questions, answers = []) {
1636
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_parseQuestion", q => {
1637
- this.questionByName[(0,_methods__WEBPACK_IMPORTED_MODULE_1__.toSlug)(q.name)] = q;
1638
- this.questionById[parseInt(q.id)] = q;
1639
- if (q.hasOwnProperty('sub_question_rules')) for (let r of q.sub_question_rules) {
1640
- this.rules[parseInt(r.id)] = r;
1641
-
1642
- this._parseQuestion(r.sub_question);
1643
- }
1644
- });
1645
-
1646
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_parseQuestions", () => {
1647
- for (let q of this.questions) {
1648
- this._parseQuestion(q);
1649
- }
1650
- });
1651
-
1652
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_allowsValues", q => {
1653
- return AllowedMultipleValueQuestionType.includes(q.type);
1654
- });
1655
-
1656
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_allowsValue", (q, answer) => {
1657
- let value = answer.value.split(',').map(v => parseInt(v));
1658
-
1659
- for (let av of value) {
1660
- if (!q.values.map(e => e.id).includes(av)) return false;
1661
- }
1662
-
1663
- return true;
1664
- });
1665
-
1666
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_getAnswerFor", q => {
1667
- let id = Number.isInteger(q) ? q : q.id;
1668
- let a = this.answers[id] || null;
1669
- return a ? a : null;
1670
- });
1671
-
1672
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_hasValue", answer => {
1673
- return answer.value !== '';
1674
- });
1675
-
1676
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_answerContains", (answer, val) => {
1677
- return answer.value.split(',').includes(val);
1678
- });
1679
-
1680
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isSubQuestionVisible", rule => {
1681
- let initialCondition = rule.answer_values_operator === AnswerValuesOperator_And ? true : false;
1682
-
1683
- const parentQuestionAnswer = this._getAnswerFor(rule.parent_question_id);
1684
-
1685
- if (!parentQuestionAnswer) {
1686
- initialCondition = rule.visibility_condition === VisibilityCondition_Equal ? false : true;
1687
- } else {
1688
- switch (rule.visibility_condition) {
1689
- case VisibilityCondition_Equal:
1690
- {
1691
- for (let answerValue of rule.answer_values) {
1692
- if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || this._answerContains(parentQuestionAnswer, answerValue);
1693
- }
1694
- }
1695
- break;
1696
-
1697
- case VisibilityCondition_NotEqual:
1698
- {
1699
- for (let answerValue of rule.answer_values) {
1700
- if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && !this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || !this._answerContains(parentQuestionAnswer, answerValue);
1701
- }
1702
- }
1703
- break;
1704
- }
1705
- } // final visibility check
1706
-
1707
-
1708
- if (rule.visibility === Visibility_Visible) {
1709
- return initialCondition;
1710
- } // not visible
1711
-
1712
-
1713
- return !initialCondition;
1714
- });
1715
-
1716
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_isAnswered", q => {
1717
- const answer = this._getAnswerFor(q);
1718
-
1719
- if (q.class === MainQuestionClassType) {
1720
- if (!q.mandatory) return true;
1721
- if (!answer) return false;
1722
- if (!this._hasValue(answer)) return false;
1723
- if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
1724
- return true;
1725
- } // check parent rules ...
1726
-
1727
-
1728
- for (let ruleId of q.parent_rules) {
1729
- if (!this._isSubQuestionVisible(this.rules[ruleId])) // if question is not visible skip it
1730
- continue;
1731
- if (!q.mandatory) return true;
1732
- if (!answer) return false;
1733
- if (!this._hasValue(answer)) return false;
1734
- if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
1735
- return true;
1736
- }
1737
-
1738
- return true;
1739
- });
1740
-
1741
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_checkQuestion", q => {
1742
- let res = this._isAnswered(q);
1743
-
1744
- if (q.hasOwnProperty('sub_question_rules')) for (let rule of q.sub_question_rules) {
1745
- // check recursive all the tree till leaves ...
1746
- res = res && this._checkQuestion(rule.sub_question);
1747
- }
1748
- return res;
1749
- });
1750
-
1751
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_formatQuestionAnswer", question => {
1752
- var _this$originalAnswers, _question$values;
1753
-
1754
- let res = {};
1755
- const slug = (0,_methods__WEBPACK_IMPORTED_MODULE_1__.toSlug)(question.name);
1756
- let userAnswer = (_this$originalAnswers = this.originalAnswers.find(a => a.question_id === question.id)) === null || _this$originalAnswers === void 0 ? void 0 : _this$originalAnswers.value;
1757
-
1758
- if (!userAnswer && (question === null || question === void 0 ? void 0 : (_question$values = question.values) === null || _question$values === void 0 ? void 0 : _question$values.length) > 0) {
1759
- // check default value
1760
- const defaultVal = question.values.find(v => v.is_default);
1761
- if (defaultVal) userAnswer = defaultVal.id.toString();
1762
- }
1763
-
1764
- if (userAnswer) {
1765
- if (question.type === CheckBoxQuestionType) userAnswer = userAnswer === 'false' ? false : !!userAnswer;
1766
- if (question.type === RadioButtonListQuestionType || question.type === ComboBoxQuestionType) userAnswer = parseInt(userAnswer);
1767
- if (question.type === CheckBoxListQuestionType) userAnswer = userAnswer.split(',').map(ansVal => parseInt(ansVal)) || [];
1768
- }
1769
-
1770
- res[slug] = userAnswer || '';
1771
- if (question.type === CheckBoxListQuestionType && res[slug] === '') res[slug] = [];
1772
- if (question.hasOwnProperty('sub_question_rules')) for (let rule of question.sub_question_rules) {
1773
- // check recursive all the tree till leaves ...
1774
- let res1 = this._formatQuestionAnswer(rule.sub_question);
1775
-
1776
- res = _objectSpread(_objectSpread({}, res), res1);
1777
- }
1778
- return res;
1779
- });
1780
-
1781
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "formatAnswers", () => {
1782
- let res = {};
1783
- this.questions.forEach(q => {
1784
- let res1 = this._formatQuestionAnswer(q);
1785
-
1786
- res = _objectSpread(_objectSpread({}, res), res1);
1787
- });
1788
- return res;
1789
- });
1790
-
1791
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "completed", () => {
1792
- let res = true;
1793
-
1794
- for (let q of this.questions) {
1795
- res = res && this._checkQuestion(q);
1796
- }
1797
-
1798
- return res;
1799
- });
1800
-
1801
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "getQuestionByName", name => {
1802
- const slug = (0,_methods__WEBPACK_IMPORTED_MODULE_1__.toSlug)(name);
1803
- return this.questionByName[name] || this.questionByName[slug] || null;
1804
- });
1805
-
1806
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "getQuestionById", id => {
1807
- return this.questionById[parseInt(id)] || null;
1808
- });
1809
-
1810
- this.questions = questions;
1811
- this.originalAnswers = answers;
1812
- this.answers = []; // map answers to associate array
1813
-
1814
- for (let a of this.originalAnswers) this.answers[a.question_id] = a;
1815
-
1816
- this.questionByName = {};
1817
- this.questionById = {}; // associative array ( rule id , rule);
1818
-
1819
- this.rules = {};
1820
-
1821
- this._parseQuestions();
1822
- }
1823
-
1824
- }
1825
-
1826
- /***/ }),
1827
-
1828
- /***/ "./src/components/extra-questions/index.scss":
1829
- /*!***************************************************!*\
1830
- !*** ./src/components/extra-questions/index.scss ***!
1831
- \***************************************************/
1832
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1833
-
1834
- __webpack_require__.r(__webpack_exports__);
1835
- // extracted by mini-css-extract-plugin
1836
-
1837
-
1838
- /***/ }),
1839
-
1840
- /***/ "@babel/runtime/helpers/defineProperty":
1841
- /*!********************************************************!*\
1842
- !*** external "@babel/runtime/helpers/defineProperty" ***!
1843
- \********************************************************/
1844
- /***/ ((module) => {
1845
-
1846
- module.exports = require("@babel/runtime/helpers/defineProperty");
1847
-
1848
- /***/ }),
1849
-
1850
- /***/ "@babel/runtime/helpers/extends":
1851
- /*!*************************************************!*\
1852
- !*** external "@babel/runtime/helpers/extends" ***!
1853
- \*************************************************/
1854
- /***/ ((module) => {
1855
-
1856
- module.exports = require("@babel/runtime/helpers/extends");
1857
-
1858
- /***/ }),
1859
-
1860
- /***/ "@babel/runtime/helpers/objectWithoutProperties":
1861
- /*!*****************************************************************!*\
1862
- !*** external "@babel/runtime/helpers/objectWithoutProperties" ***!
1863
- \*****************************************************************/
1864
- /***/ ((module) => {
1865
-
1866
- module.exports = require("@babel/runtime/helpers/objectWithoutProperties");
1867
-
1868
- /***/ }),
1869
-
1870
- /***/ "i18n-react/dist/i18n-react":
1871
- /*!*********************************************!*\
1872
- !*** external "i18n-react/dist/i18n-react" ***!
1873
- \*********************************************/
1874
- /***/ ((module) => {
1875
-
1876
- module.exports = require("i18n-react/dist/i18n-react");
1877
-
1878
- /***/ }),
1879
-
1880
- /***/ "moment-timezone":
1881
- /*!**********************************!*\
1882
- !*** external "moment-timezone" ***!
1883
- \**********************************/
1884
- /***/ ((module) => {
1885
-
1886
- module.exports = require("moment-timezone");
1887
-
1888
- /***/ }),
1889
-
1890
- /***/ "prop-types":
1891
- /*!*****************************!*\
1892
- !*** external "prop-types" ***!
1893
- \*****************************/
1894
- /***/ ((module) => {
1895
-
1896
- module.exports = require("prop-types");
1897
-
1898
- /***/ }),
1899
-
1900
- /***/ "react":
1901
- /*!************************!*\
1902
- !*** external "react" ***!
1903
- \************************/
1904
- /***/ ((module) => {
1905
-
1906
- module.exports = require("react");
1907
-
1908
- /***/ }),
1909
-
1910
- /***/ "react-final-form":
1911
- /*!***********************************!*\
1912
- !*** external "react-final-form" ***!
1913
- \***********************************/
1914
- /***/ ((module) => {
1915
-
1916
- module.exports = require("react-final-form");
1917
-
1918
- /***/ }),
1919
-
1920
- /***/ "react-select":
1921
- /*!*******************************!*\
1922
- !*** external "react-select" ***!
1923
- \*******************************/
1924
- /***/ ((module) => {
1925
-
1926
- module.exports = require("react-select");
1927
-
1928
- /***/ }),
1929
-
1930
- /***/ "urijs":
1931
- /*!************************!*\
1932
- !*** external "urijs" ***!
1933
- \************************/
1934
- /***/ ((module) => {
1935
-
1936
- module.exports = require("urijs");
1937
-
1938
- /***/ })
1939
-
1940
- /******/ });
1941
- /************************************************************************/
1942
- /******/ // The module cache
1943
- /******/ var __webpack_module_cache__ = {};
1944
- /******/
1945
- /******/ // The require function
1946
- /******/ function __webpack_require__(moduleId) {
1947
- /******/ // Check if module is in cache
1948
- /******/ var cachedModule = __webpack_module_cache__[moduleId];
1949
- /******/ if (cachedModule !== undefined) {
1950
- /******/ return cachedModule.exports;
1951
- /******/ }
1952
- /******/ // Create a new module (and put it into the cache)
1953
- /******/ var module = __webpack_module_cache__[moduleId] = {
1954
- /******/ // no module.id needed
1955
- /******/ // no module.loaded needed
1956
- /******/ exports: {}
1957
- /******/ };
1958
- /******/
1959
- /******/ // Execute the module function
1960
- /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
1961
- /******/
1962
- /******/ // Return the exports of the module
1963
- /******/ return module.exports;
1964
- /******/ }
1965
- /******/
1966
- /************************************************************************/
1967
- /******/ /* webpack/runtime/compat get default export */
1968
- /******/ (() => {
1969
- /******/ // getDefaultExport function for compatibility with non-harmony modules
1970
- /******/ __webpack_require__.n = (module) => {
1971
- /******/ var getter = module && module.__esModule ?
1972
- /******/ () => (module['default']) :
1973
- /******/ () => (module);
1974
- /******/ __webpack_require__.d(getter, { a: getter });
1975
- /******/ return getter;
1976
- /******/ };
1977
- /******/ })();
1978
- /******/
1979
- /******/ /* webpack/runtime/define property getters */
1980
- /******/ (() => {
1981
- /******/ // define getter functions for harmony exports
1982
- /******/ __webpack_require__.d = (exports, definition) => {
1983
- /******/ for(var key in definition) {
1984
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
1985
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
1986
- /******/ }
1987
- /******/ }
1988
- /******/ };
1989
- /******/ })();
1990
- /******/
1991
- /******/ /* webpack/runtime/hasOwnProperty shorthand */
1992
- /******/ (() => {
1993
- /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
1994
- /******/ })();
1995
- /******/
1996
- /******/ /* webpack/runtime/make namespace object */
1997
- /******/ (() => {
1998
- /******/ // define __esModule on exports
1999
- /******/ __webpack_require__.r = (exports) => {
2000
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
2001
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2002
- /******/ }
2003
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
2004
- /******/ };
2005
- /******/ })();
2006
- /******/
2007
- /************************************************************************/
2008
- var __webpack_exports__ = {};
2009
- // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
2010
- (() => {
2011
- /*!**************************************************!*\
2012
- !*** ./src/components/free-text-search/index.js ***!
2013
- \**************************************************/
2014
- __webpack_require__.r(__webpack_exports__);
2015
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2016
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2017
- /* harmony export */ });
2018
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2019
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2020
- /* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! i18n-react/dist/i18n-react */ "i18n-react/dist/i18n-react");
2021
- /* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_1__);
2022
- /* harmony import */ var _extra_questions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../extra-questions */ "./src/components/extra-questions/index.js");
2023
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! prop-types */ "prop-types");
2024
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);
2025
- /**
2026
- * Copyright 2017 OpenStack Foundation
2027
- * Licensed under the Apache License, Version 2.0 (the "License");
2028
- * you may not use this file except in compliance with the License.
2029
- * You may obtain a copy of the License at
2030
- * http://www.apache.org/licenses/LICENSE-2.0
2031
- * Unless required by applicable law or agreed to in writing, software
2032
- * distributed under the License is distributed on an "AS IS" BASIS,
2033
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2034
- * See the License for the specific language governing permissions and
2035
- * limitations under the License.
2036
- **/
2037
-
2038
-
2039
-
2040
-
2041
-
2042
- class FreeTextSearch extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
2043
- constructor(props) {
2044
- super(props);
2045
- this.onSearchClick = this.onSearchClick.bind(this);
2046
- this.onClearClick = this.onClearClick.bind(this);
2047
- this.onKeyPressed = this.onKeyPressed.bind(this);
2048
- this.onChange = this.onChange.bind(this);
2049
- this.state = {
2050
- value: props.value
2051
- };
2052
- }
2053
-
2054
- onSearchClick(ev) {
2055
- let {
2056
- preventEvents
2057
- } = this.props;
2058
-
2059
- if (preventEvents) {
2060
- ev.preventDefault();
2061
- }
2062
-
2063
- this.doFiltering(this.state.value);
2064
- }
2065
-
2066
- onClearClick(ev) {
2067
- let {
2068
- preventEvents
2069
- } = this.props;
2070
-
2071
- if (preventEvents) {
2072
- ev.preventDefault();
2073
- }
2074
-
2075
- this.doFiltering('');
2076
- this.setState({
2077
- value: ''
2078
- });
2079
- }
2080
-
2081
- doFiltering(term) {
2082
- this.props.onSearch(term.trim());
2083
- }
2084
-
2085
- onKeyPressed(event) {
2086
- var code = event.keyCode || event.which;
2087
-
2088
- if (code === 13) {
2089
- this.doFiltering(this.state.value);
2090
- }
2091
- }
2092
-
2093
- onChange(event) {
2094
- this.setState({
2095
- value: event.target.value
2096
- });
2097
- if (this.props.onChange) this.props.onChange(event.target.value);
2098
- }
2099
-
2100
- render() {
2101
- let {
2102
- value
2103
- } = this.state;
2104
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
2105
- className: "row search-container"
2106
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
2107
- className: "col-md-12"
2108
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
2109
- className: "input-group"
2110
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
2111
- type: "text",
2112
- value: value,
2113
- className: "form-control",
2114
- placeholder: this.props.placeholder,
2115
- onKeyPress: this.onKeyPressed,
2116
- onChange: this.onChange
2117
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
2118
- className: "input-group-btn",
2119
- style: {
2120
- width: 5 + '%'
2121
- }
2122
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
2123
- onClick: this.onSearchClick,
2124
- className: "btn btn-default",
2125
- title: i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_1___default().translate("general.search")
2126
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
2127
- className: "fa fa-search"
2128
- })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
2129
- onClick: this.onClearClick,
2130
- className: "btn btn-default",
2131
- title: i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_1___default().translate("general.clear")
2132
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
2133
- className: "fa fa-times"
2134
- }))))));
2135
- }
2136
-
2137
- }
2138
-
2139
- FreeTextSearch.defaultProps = {
2140
- preventEvents: false,
2141
- onChange: null
2142
- };
2143
- FreeTextSearch.propTypes = {
2144
- preventEvents: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().bool),
2145
- onChange: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().func)
2146
- };
2147
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FreeTextSearch);
2148
- })();
2149
-
2150
- /******/ return __webpack_exports__;
2151
- /******/ })()
2152
- ;
2153
- });
2154
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy9mcmVlLXRleHQtc2VhcmNoLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZPLE1BQU1BLGlCQUFpQixHQUFHLE1BQTFCO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsVUFBOUI7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxVQUE5QjtBQUNBLE1BQU1DLDRCQUE0QixHQUFHLGlCQUFyQztBQUNBLE1BQU1DLHFCQUFxQixHQUFHLFVBQTlCO0FBQ0EsTUFBTUMseUJBQXlCLEdBQUcsY0FBbEM7QUFFQSxNQUFNQyw0QkFBNEIsR0FBRyxpQkFBckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNQUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBT0EsTUFBTWlCLFlBQVksR0FBRyxRQUEyRTtFQUFBLElBQTFFO0lBQUVDLEtBQUY7SUFBU0MsSUFBVDtJQUFlQyxRQUFmO0lBQXlCQyxTQUF6QjtJQUFvQ0MsVUFBcEM7SUFBZ0RDO0VBQWhELENBQTBFO0VBQUEsSUFBWEMsSUFBVzs7RUFFNUYsb0JBQ0ksMkRBQUMsMERBQUQsNEVBQ1FOLEtBRFIsRUFFUU0sSUFGUjtJQUdJLGtCQUFrQixFQUFFSCxTQUh4QjtJQUlJLElBQUksRUFBRUwsdURBQU0sQ0FBQ0ksUUFBUSxDQUFDSyxJQUFWLENBSmhCO0lBS0ksY0FBYyxFQUFHLEdBQUVULHVEQUFNLENBQUNJLFFBQVEsQ0FBQ0ssSUFBVixDQUFnQixRQUw3QztJQU1JLEVBQUUsRUFBRVQsdURBQU0sQ0FBQ0ksUUFBUSxDQUFDSyxJQUFWLENBTmQ7SUFPSSxLQUFLLEVBQUVQLEtBQUssQ0FB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Z0IsQ0FBOUI7QUFLQTZXLGNBQWMsQ0FBQ3JPLFNBQWYsR0FBMkI7RUFDdkJ5TyxhQUFhLEVBQUVyWSx3REFEUTtFQUV2Qm9CLFFBQVEsRUFBRXBCLHdEQUFjOEo7QUFGRCxDQUEzQjtBQU1BLGlFQUFlbU8sY0FBZixFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2V4dHJhLXF1ZXN0aW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RleHQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvcmF3LWh0bWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL3V0aWxzL21ldGhvZHMuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL3V0aWxzL3F1ZXN0aW9ucy1zZXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZXh0cmEtcXVlc3Rpb25zL2luZGV4LnNjc3M/MWE3MyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwibW9tZW50LXRpbWV6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtZmluYWwtZm9ybVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LXNlbGVjdFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcInVyaWpzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyZWUtdGV4dC1zZWFyY2gvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsICgpID0+IHtcbnJldHVybiAiLCJleHBvcnQgY29uc3QgUXVlc3Rpb25UeXBlX1RleHQgPSBcIlRleHRcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfVGV4dEFyZWEgPSBcIlRleHRBcmVhXCI7XG5leHBvcnQgY29uc3QgUXVlc3Rpb25UeXBlX0NoZWNrYm94ID0gXCJDaGVja0JveFwiO1xuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3QgPSBcIlJhZGlvQnV0dG9uTGlzdFwiO1xuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uVHlwZV9Db21ib0JveCA9IFwiQ29tYm9Cb3hcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0ID0gXCJDaGVja0JveExpc3RcIjtcblxuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3ggPSBcIkNvdW50cnlDb21ib0JveFwiO1xuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCwge0ZyYWdtZW50LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUltcGVyYXRpdmVIYW5kbGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJ1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0cy90ZXh0LWlucHV0J1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4uL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBSYWRpb0xpc3QgZnJvbSAnLi4vaW5wdXRzL3JhZGlvLWxpc3QnXG5pbXBvcnQgQ2hlY2tib3hMaXN0IGZyb20gJy4uL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IFF1ZXN0aW9uc1NldCBmcm9tICcuLi8uLi91dGlscy9xdWVzdGlvbnMtc2V0JztcbmltcG9ydCB7RmllbGQsIEZvcm19IGZyb20gXCJyZWFjdC1maW5hbC1mb3JtXCI7XG5pbXBvcnQgJy4vaW5kZXguc2Nzcyc7XG5pbXBvcnQge3RvU2x1Z30gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcbmltcG9ydCB7XG4gICAgUXVlc3Rpb25UeXBlX0NoZWNrYm94LCBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0LCBRdWVzdGlvblR5cGVfQ29tYm9Cb3gsIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3gsXG4gICAgUXVlc3Rpb25UeXBlX1JhZGlvQnV0dG9uTGlzdCxcbiAgICBRdWVzdGlvblR5cGVfVGV4dCxcbiAgICBRdWVzdGlvblR5cGVfVGV4dEFyZWFcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IElucHV0QWRhcHRlciA9ICh7IGlucHV0LCBtZXRhLCBxdWVzdGlvbiwgY2xhc3NOYW1lLCBpc0Rpc2FibGVkLCBpc1JlcXVpcmVkLCAuLi5yZXN0IH0pID0+IHtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgey4uLmlucHV0fVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBjb250YWluZXJDbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgIG5hbWU9e3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX1cbiAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PXtgJHt0b1NsdWcocXVlc3Rpb24ubmFtZSl9IGxhYmVsYH1cbiAgICAgICAgICAgIGlkPXt0b1NsdWcocXVlc3Rpb24ubmFtZSl9XG4gICAgICAgICAgICB2YWx1ZT17aW5wdXQudmFsdWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2lucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3F1ZXN0aW9uLnBsYWNlaG9sZGVyfVxuICAgICAgICAvPlxuICAgIClcbn1cblxuY29uc3QgUmFkaW9CdXR0b25MaXN0QWRhcHRlciA9ICh7IGlucHV0LCBtZXRhLCBxdWVzdGlvbiwgaXNEaXNhYmxlZCwgaXNSZXF1aXJlZCwgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8UmFkaW9MaXN0XG4gICAgICAgICAgICB7Li4uaW5wdXR9XG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIG5hbWU9e3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX1cbiAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PXtgJHt0b1NsdWcocXVlc3Rpb24ubmFtZSl9IGxhYmVsYH1cbiAgICAgICAgICAgIGlkPXt0b1NsdWcocXVlc3Rpb24ubmFtZSl9XG4gICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgIHZhbHVlPXtpbnB1dC52YWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aW5wdXQub25DaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgKX07XG5cbmNvbnN0IERyb3Bkb3duQWRhcHRlciA9ICh7IGlucHV0LCBtZXRhLCBxdWVzdGlvbiwgaXNEaXNhYmxlZCwgaXNSZXF1aXJlZCwgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICByZXR1cm4gKDxEcm9wZG93blxuICAgICAgICB7Li4uaW5wdXR9XG4gICAgICAgIHsuLi5yZXN0fVxuICAgICAgICBuYW1lPXt0b1NsdWcocXVlc3Rpb24ubmFtZSl9XG4gICAgICAgIGFyaWFMYWJlbGxlZEJ5PXtgJHt0b1NsdWcocXVlc3Rpb24ubmFtZSl9IGxhYmVsYH1cbiAgICAgICAgaWQ9e3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX1cbiAgICAgICAgb3ZlcnJpZGVDU1M9e3RydWV9XG4gICAgICAgIGNsYXNzTmFtZT1cImRkbC1leHRyYS1xdWVzdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgY2xhc3NOYW1lUHJlZml4PVwiZGRsLWV4dHJhLXF1ZXN0aW9uc1wiXG4gICAgICAgIHZhbHVlPXtpbnB1dC52YWx1ZX1cbiAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICBvbkNoYW5nZT17aW5wdXQub25DaGFuZ2V9XG4gICAgLz4pXG59XG5cbmNvbnN0IENoZWNrQm94TGlzdEFkYXB0ZXIgPSAoeyBpbnB1dCwgbWV0YSwgcXVlc3Rpb24sIGlzRGlzYWJsZWQsIGlzUmVxdWlyZWQsIG1heFZhbHVlcywgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICBjb25zdCBzaG91bGRDaGFuZ2UgPSAoZXYpID0+IHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb25fYW5zd2VycyA9IGV2LnRhcmdldC52YWx1ZTtcbiAgICAgICAgLy8gaWYgdGhlcmUncyBhIG1heCB2YWx1ZSBvZiBvcHRpb25zIGNoZWNrZWQgYW5kIHRoZSB2YWx1ZSBmcm9tIHRoZSBpbnB1dCBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4LCBkb24ndCBjaGFuZ2UgdGhlIHZhbHVlXG4gICAgICAgIGlmIChtYXhWYWx1ZXMgPiAwICYmIHF1ZXN0aW9uX2Fuc3dlcnMubGVuZ3RoID4gbWF4VmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5vbkNoYW5nZShldilcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgPENoZWNrYm94TGlzdFxuICAgICAgICAgICAgey4uLmlucHV0fVxuICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICBpZD17dG9TbHVnKHF1ZXN0aW9uLm5hbWUpfVxuICAgICAgICAgICAgbmFtZT17dG9TbHVnKHF1ZXN0aW9uLm5hbWUpfVxuICAgICAgICAgICAgYXJpYUxhYmVsbGVkQnk9e2Ake3RvU2x1ZyhxdWVzdGlvbi5uYW1lKX0gbGFiZWxgfVxuICAgICAgICAgICAgdmFsdWU9e2lucHV0LnZhbHVlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICByZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzaG91bGRDaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgKVxufVxuXG5jb25zdCBnZXRWYWxpZGF0b3IgPSBpc1JlcXVpcmVkID0+XG4gICAgaXNSZXF1aXJlZCA/IHZhbHVlID0+ICh2YWx1ZSA/IHVuZGVmaW5lZCA6IFwiUmVxdWlyZWRcIikgOiAoKSA9PiB7fTtcblxuY29uc3QgRXh0cmFRdWVzdGlvbnNGb3JtID0gUmVhY3QuZm9yd2FyZFJlZigoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQW5zd2VyQ2hhbmdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAncXVlc3Rpb25zLWZvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lID0gJ3F1ZXN0aW9uLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSA9ICdxdWVzdGlvbi1sYWJlbC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZT0gJ3F1ZXN0aW9uLWNvbnRyb2wtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkT25seSA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVGV4dCA9ICdTdWJtaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkRXJyb3JNZXNzYWdlID0gJ1JlcXVpcmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3JDbGFzc05hbWUgPSAnZXh0cmEtcXVlc3Rpb24tZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RXh0cmFRdWVzdGlvbnNFZGl0ID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yID0gKGUpID0+IGNvbnNvbGUubG9nKCdmb3JtIGVycm9yczogJywgZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsMkZpcnN0RXJyb3IgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWYpID0+IHtcblxuICAgIGxldCBzdWJtaXQgPSBudWxsO1xuXG4gICAgY29uc3QgcXVlc3Rpb25SZWYgPSB1c2VSZWYoe30pO1xuICAgIGNvbnN0IGZvcm1SZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW2Fuc3dlcnMsIHNldEFuc3dlcnNdID0gdXNlU3RhdGUoe30pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZm9ybWF0VXNlckFuc3dlcnMoKTtcbiAgICB9LCBbZXh0cmFRdWVzdGlvbnNdKVxuXG5cbiAgICAvLyBAc2VlIGh0dHBzOi8vYmV0YS5yZWFjdGpzLm9yZy9yZWZlcmVuY2UvcmVhY3QvdXNlSW1wZXJhdGl2ZUhhbmRsZVxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgICBkb1N1Ym1pdCgpIHtcbiAgICAgICAgICAgIGZvcm1SZWYuY3VycmVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInN1Ym1pdFwiLCB7IGNhbmNlbGFibGU6IHRydWUsIGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgY29uc3QgZm9ybWF0VXNlckFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHFzID0gbmV3IFF1ZXN0aW9uc1NldChleHRyYVF1ZXN0aW9ucywgdXNlckFuc3dlcnMpO1xuICAgICAgICBzZXRBbnN3ZXJzKHFzLmZvcm1hdEFuc3dlcnMoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgQ29uZGl0aW9uID0gKHt3aGVuLCBydWxlLCBjaGlsZHJlbn0pID0+IChcbiAgICAgICAgPEZpZWxkIG5hbWU9e3doZW59IHN1YnNjcmlwdGlvbj17e3ZhbHVlOiB0cnVlfX0+XG4gICAgICAgICAgICB7KHtpbnB1dDoge3ZhbHVlfX0pID0+XG4gICAgICAgICAgICAgICAgY2hlY2tWaXNpYmlsaXR5KHJ1bGUsIGNoZWNrUnVsZSh2YWx1ZSwgcnVsZSksIGNoaWxkcmVuKVxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgICk7XG5cbiAgICBjb25zdCBFcnJvciA9ICh7IG5hbWUgfSkgPT4gKFxuICAgICAgICA8RmllbGQgbmFtZT17bmFtZX0gc3Vic2NyaXB0aW9uPXt7IGVycm9yOiB0cnVlLCB0b3VjaGVkOiB0cnVlIH19PlxuICAgICAgICAgICAgeyh7IG1ldGE6IHsgZXJyb3IsIHRvdWNoZWQgfSB9KSA9PlxuICAgICAgICAgICAgICAgIGVycm9yICYmIHRvdWNoZWQgPyA8ZGl2IGNsYXNzTmFtZT17VmFsaWRhdGlvbkVycm9yQ2xhc3NOYW1lfT57ZXJyb3J9PC9kaXY+IDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgIClcblxuICAgIGNvbnN0IGNoZWNrUnVsZSA9ICh2YWx1ZSwgcnVsZSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWVzID0gcnVsZS5hbnN3ZXJfdmFsdWVzO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGxldCByZXMgPSBydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCI7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzICYmIHZhbHVlLmluY2x1ZGVzKHBhcnNlSW50KHYpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBPclxuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgfHwgdmFsdWUuaW5jbHVkZXMocGFyc2VJbnQodikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzLmluY2x1ZGVzKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1Zpc2liaWxpdHkgPSAocnVsZSwgcnVsZVJlc3VsdCwgY2hpbGRyZW4pID0+IHtcbiAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eSA9PT0gXCJWaXNpYmxlXCIpIHtcbiAgICAgICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgICAgICBpZihydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBOb24gRXF1YWxcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KXtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRMYWJlbCA9IChxKSA9PiB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGxhc3Qgd29yZCBhbmQgdGhlIHJlcXVpcmVkIGFzdGVyaXNrIG9uIHRoZSBzYW1lIGxpbmVcbiAgICAgICAgY29uc3Qgbm9uQnJlYWtpbmdTcGFjZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTsgLy8gZXF1YWxzIHRvICZuYnNwO1xuICAgICAgICBcbiAgICAgICAgLy8gVXNpbmcgYnJvd3NlciBwYXJzZXIgaXNudGVhZCBvZiByZWdleCB0byBhdm9pZCBwb3NzaWJsZSBpc3N1ZXNcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IHEubGFiZWw7XG4gICAgICAgIC8vIFVzaW5nIGlubmVyVGV4dCBmaXJzdCBzaW5jZSBpdCBrZWVwcyB0aGUgbGluZSBicmVha3NcbiAgICAgICAgY29uc3QgbGFiZWwgPSBkaXYuaW5uZXJUZXh0IHx8IGRpdi50ZXh0Q29udGVudCB8fCBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IHEubWFuZGF0b3J5ID8gYCR7bGFiZWx9JHtub25CcmVha2luZ1NwYWNlfTxiPio8L2I+YCA6IGxhYmVsXG4gICAgICAgIGNvbnN0IGxhYmVsSFRNTCA9IGA8bGFiZWwgaWQ9XCIke3RvU2x1ZyhxLm5hbWUpfSBsYWJlbFwiIGh0bWxGb3I9XCIke3RvU2x1ZyhxLm5hbWUpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xhYmVsVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+YFxuXG4gICAgICAgIHJldHVybiBsYWJlbEhUTUw7XG4gICAgfVxuXG4gICAgY29uc3QgaXNBbnN3ZXJlZCA9IChxLCBhbnN3ZXJzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNsdWcgPSB0b1NsdWcocS5uYW1lKTtcbiAgICAgICAgaWYoIWFuc3dlcnMuaGFzT3duUHJvcGVydHkoc2x1ZykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgYW5zd2VyID0gYW5zd2Vyc1tzbHVnXTtcbiAgICAgICAgLy8gY2hlY2sgdHlwZVxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKHR5cGVvZiBhbnN3ZXIgPT09ICdzdHJpbmcnKSByZXR1cm4gYW5zd2VyLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmKHR5cGVvZiBhbnN3ZXIgPT09ICdudW1iZXInKSByZXR1cm4gYW5zd2VyID4gMDtcbiAgICAgICAgaWYodHlwZW9mIGFuc3dlciA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gYW5zd2VyO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICBsZXQgcXVlc3Rpb25WYWx1ZXMgPSBxLnZhbHVlcztcbiAgICAgICAgLy8gZGlzYWJsZSBmaWVsZCBpZiBlZGl0IGlzbid0IGFsbG93ZWQgYW5kIHRoZSBxdWVzdGlvbnMgaXMgYW5zd2VyZWRcbiAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9ICFhbGxvd0V4dHJhUXVlc3Rpb25zRWRpdCAmJiBpc0Fuc3dlcmVkKHEsIGFuc3dlcnMpO1xuICAgICAgICAvLyBAc2VlIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy92ZzA1eT9maWxlPS9pbmRleC5qc1xuICAgICAgICBpZiAocS50eXBlID09PSBRdWVzdGlvblR5cGVfVGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXt0b1NsdWcocS5uYW1lKX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgcmVwbGFjZU5ld0xpbmU9e3RydWV9IGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e2dldExhYmVsKHEpfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb249e3F9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PXtJbnB1dEFkYXB0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17dG9TbHVnKHEubmFtZSl9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIGtleT17ci5pZH0gd2hlbj17dG9TbHVnKHEubmFtZSl9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFF1ZXN0aW9uVHlwZV9UZXh0QXJlYSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXt0b1NsdWcocS5uYW1lKX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgcmVwbGFjZU5ld0xpbmU9e3RydWV9IGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e2dldExhYmVsKHEpfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPXtxLm1hbmRhdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PVwidGV4dGFyZWFcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3RvU2x1ZyhxLm5hbWUpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiBrZXk9e3IuaWR9IHdoZW49e3RvU2x1ZyhxLm5hbWUpfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBRdWVzdGlvblR5cGVfQ2hlY2tib3gpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17dG9TbHVnKHEubmFtZSl9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBzdHlsZT17e2Rpc3BsYXk6ICdmbGV4J319XG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PVwiaW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e3RvU2x1ZyhxLm5hbWUpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIHJlcGxhY2VOZXdMaW5lPXt0cnVlfSBjbGFzc05hbWU9e2BlcS1jaGVja2JveC1sYWJlbCAke3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldExhYmVsKHEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3RvU2x1ZyhxLm5hbWUpfS8+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiBrZXk9e3IuaWR9IHdoZW49e3RvU2x1ZyhxLm5hbWUpfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBRdWVzdGlvblR5cGVfUmFkaW9CdXR0b25MaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoe2xhYmVsIDogdmFsLmxhYmVsLCB2YWx1ZSA6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17dG9TbHVnKHEubmFtZSl9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17dG9TbHVnKHEubmFtZSl9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIHJlcGxhY2VOZXdMaW5lPXt0cnVlfSBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRMYWJlbChxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb249e3F9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlPXtnZXRWYWxpZGF0b3IocS5tYW5kYXRvcnkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkPXtxLm1hbmRhdG9yeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50PXtSYWRpb0J1dHRvbkxpc3RBZGFwdGVyfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXt0b1NsdWcocS5uYW1lKX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24ga2V5PXtyLmlkfSB3aGVuPXt0b1NsdWcocS5uYW1lKX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gUXVlc3Rpb25UeXBlX0NvbWJvQm94IHx8IHEudHlwZSA9PT0gUXVlc3Rpb25UeXBlX0NvdW50cnlDb21ib0JveCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHF1ZXN0aW9uVmFsdWVzLm1hcCh2YWwgPT4gKHtsYWJlbCA6IHZhbC5sYWJlbCwgdmFsdWUgOiB2YWwuaWR9KSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e3RvU2x1ZyhxLm5hbWUpfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCByZXBsYWNlTmV3TGluZT17dHJ1ZX0gY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0TGFiZWwocSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17dG9TbHVnKHEubmFtZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uPXtxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZT17Z2V0VmFsaWRhdG9yKHEubWFuZGF0b3J5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXF1aXJlZD17cS5tYW5kYXRvcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudD17RHJvcGRvd25BZGFwdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3RvU2x1ZyhxLm5hbWUpfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiBrZXk9e3IuaWR9IHdoZW49e3RvU2x1ZyhxLm5hbWUpfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoe2xhYmVsIDogdmFsLmxhYmVsLCB2YWx1ZSA6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50IGtleT17dG9TbHVnKHEubmFtZSl9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIHJlcGxhY2VOZXdMaW5lPXt0cnVlfSBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRMYWJlbChxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXt0b1NsdWcocS5uYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlPXtnZXRWYWxpZGF0b3IocS5tYW5kYXRvcnkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbj17cX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWVzPXtxLm1heF9zZWxlY3RlZF92YWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVxdWlyZWQ9e3EubWFuZGF0b3J5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ9e0NoZWNrQm94TGlzdEFkYXB0ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17dG9TbHVnKHEubmFtZSl9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIGtleT17ci5pZH0gd2hlbj17dG9TbHVnKHEubmFtZSl9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1Zpc2libGUgPSAocSkgPT4ge1xuICAgICAgICByZXR1cm4gISFxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9uID0gKHEsIHZhbHVlcywgZXJyb3JzKSA9PiB7XG4gICAgICAgIGlmIChxLm1hbmRhdG9yeSAmJiBpc1Zpc2libGUocSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsdWcgPSB0b1NsdWcocS5uYW1lKTtcbiAgICAgICAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHRvU2x1ZyhzbHVnKSkgfHwgdmFsdWVzW3RvU2x1ZyhzbHVnKV0gPT09IFwiXCIgfHwgdmFsdWVzW3NsdWddLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9yc1tzbHVnXSA9IFJlcXVpcmVkRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHZhbGlkYXRlIHN1YiBydWxlc1xuICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcz8uZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgdmFsaWRhdGVRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbiwgdmFsdWVzLCBlcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWJtaXQgPSAodmFsdWVzKSA9PiB7XG4gICAgICAgIG9uQW5zd2VyQ2hhbmdlcyh2YWx1ZXMpXG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRlID0gKHZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSB7fTtcbiAgICAgICAgZXh0cmFRdWVzdGlvbnMuZm9yRWFjaCggcSA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0ZVF1ZXN0aW9uKHEsIHZhbHVlcywgZXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgaWYoIU9iamVjdC5rZXlzKGFuc3dlcnMpLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBnZXRFcnJvckZpZWxkcyA9IChxLCBpbnZhbGlkRm9ybUZpZWxkcywgZXJyb3JGaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKGludmFsaWRGb3JtRmllbGRzLmluY2x1ZGVzKHRvU2x1ZyhxLm5hbWUpKSkge1xuICAgICAgICAgICAgZXJyb3JGaWVsZHMucHVzaChxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5kIGVycm9ycyBvbiBzdWIgcnVsZXNcbiAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXM/LmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgIGdldEVycm9yRmllbGRzKHIuc3ViX3F1ZXN0aW9uLCBpbnZhbGlkRm9ybUZpZWxkcywgZXJyb3JGaWVsZHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRGaXJzdEVycm9yID0gKGludmFsaWRGb3JtRmllbGRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yRmllbGRzID0gW107XG4gICAgICAgIGV4dHJhUXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBnZXRFcnJvckZpZWxkcyhxLCBpbnZhbGlkRm9ybUZpZWxkcywgZXJyb3JGaWVsZHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9yRmllbGRzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgPiBiLm9yZGVyKVswXTtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxUb0ZpcnN0RXJyb3IgPSAoaW52YWxpZEZvcm1GaWVsZHMpID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IGdldEZpcnN0RXJyb3IoaW52YWxpZEZvcm1GaWVsZHMpXG4gICAgICAgIHF1ZXN0aW9uUmVmLmN1cnJlbnRbZmlyc3RFcnJvci5pZF0uc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGlmICghT2JqZWN0LmtleXMoYW5zd2VycykubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgPEZvcm1cbiAgICAgICAgICAgICAgICB2YWxpZGF0ZT17dmFsaWRhdGV9XG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uU3VibWl0fVxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2Fuc3dlcnN9PlxuXG4gICAgICAgICAgICAgICAgeyh7aGFuZGxlU3VibWl0LCBmb3JtLCBzdWJtaXR0aW5nLCBwcmlzdGluZSwgdmFsdWVzfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXQgPSBoYW5kbGVTdWJtaXQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZEZvcm1GaWVsZHMgPSBmb3JtLmdldFJlZ2lzdGVyZWRGaWVsZHMoKS5maWx0ZXIoZmllbGQgPT4gZm9ybS5nZXRGaWVsZFN0YXRlKGZpZWxkKS5pbnZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRGb3JtRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RXJyb3IgPSBnZXRGaXJzdEVycm9yKGludmFsaWRGb3JtRmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoaW52YWxpZEZvcm1GaWVsZHMsIHF1ZXN0aW9uUmVmLmN1cnJlbnRbZmlyc3RFcnJvci5pZF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzaG91bGRTY3JvbGwyRmlyc3RFcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb0ZpcnN0RXJyb3IoaW52YWxpZEZvcm1GaWVsZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VibWl0KGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXtmb3JtUmVmfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVhZE9ubHkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2V4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZWJ1ZyAmJiA8cHJlPntKU09OLnN0cmluZ2lmeSh2YWx1ZXMsIDAsIDIpfTwvcHJlPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgeyFyZWYgJiZcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7bWFyZ2luVG9wOiAxMH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2J1dHRvblRleHR9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgKVxufSk7XG5cbkV4dHJhUXVlc3Rpb25zRm9ybS5wcm9wVHlwZXMgPSB7XG4gICAgZXh0cmFRdWVzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHVzZXJBbnN3ZXJzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvbkFuc3dlckNoYW5nZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFJlcXVpcmVkRXJyb3JNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFZhbGlkYXRpb25FcnJvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhbGxvd0V4dHJhUXVlc3Rpb25zRWRpdDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvdWxkU2Nyb2xsMkZpcnN0RXJyb3I6IFByb3BUeXBlcy5ib29sLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXh0cmFRdWVzdGlvbnNGb3JtO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hlY2tib3hMaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBsZXQgb3RoZXJWYWx1ZSA9IHByb3BzLnZhbHVlID8gcHJvcHMudmFsdWUuZmluZCggdiA9PiAhcHJvcHMub3B0aW9ucy5tYXAob3AgPT4gb3AudmFsdWUpLmluY2x1ZGVzKHYpICkgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3RoZXJDaGVja2VkOiAhIW90aGVyVmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZSA9IHRoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldmVudCkge1xuICAgICAgICBsZXQgb3B0aW9uVmFsdWVzID0gdGhpcy5wcm9wcy5vcHRpb25zLm1hcChvcCA9PiBvcC52YWx1ZSk7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucHJvcHMudmFsdWUgPyBbLi4udGhpcy5wcm9wcy52YWx1ZV0gOiBbXTtcblxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoZVZhbCA9IGlzTmFOKGV2ZW50LnRhcmdldC52YWx1ZSkgPyBldmVudC50YXJnZXQudmFsdWUgOiBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhbHVlLnB1c2godGhlVmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIoIHYgPT4gdiAhPSBldmVudC50YXJnZXQudmFsdWUgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIodiA9PiBvcHRpb25WYWx1ZXMuaW5jbHVkZXModikpO1xuICAgICAgICAgICAgdmFsdWUucHVzaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3hsaXN0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgaGFuZGxlT3RoZXJDQkNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvdGhlckNoZWNrZWQ6IGV2ZW50LnRhcmdldC5jaGVja2VkfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIG9wdGlvbnMsIGlkLCBjaGlsZHJlbiwgZXJyb3IsIGRpc2FibGVkLG5hbWUsIGFyaWFMYWJlbGxlZEJ5LCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7IG90aGVyQ2hlY2tlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBsZXQgaW5saW5lID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpbmxpbmUnKSApO1xuICAgICAgICBsZXQgaHRtbCA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaHRtbCcpICk7XG4gICAgICAgIGxldCBhbGxvd090aGVyID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd090aGVyJykgKTtcbiAgICAgICAgbGV0IG90aGVyVmFsdWUgPSB2YWx1ZSA/IHZhbHVlLmZpbmQoIHYgPT4gIW9wdGlvbnMubWFwKG9wID0+IG9wLnZhbHVlKS5pbmNsdWRlcyh2KSApIDogZmFsc2UgO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuXG5cbiAgICAgICAgbGV0IHN0eWxlLCBsYWJlbDtcblxuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnLFxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcyMHB4JyxcbiAgICAgICAgICAgICAgICBmbG9hdDogJ2xlZnQnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICc3cHgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBpZD17YGNobF93cmFwcGVyXyR7aWR9YH0gYXJpYS1sYWJlbGxlZGJ5PXthcmlhTGFiZWxsZWRCeX0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiY2hlY2tib3hlcy1kaXZcIiArIChoYXNfZXJyb3IgPyAnIGVycm9yJyA6ICcnKSB9PlxuICAgICAgICAgICAgICAgICAgICB7IG9wdGlvbnMubWFwKG9wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGVja2VkID0gdmFsdWUgPyB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiIGtleT17XCJyYWRpb19rZXlfXCIgKyBvcC52YWx1ZX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGNiXyR7aWR9XyR7b3AudmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWU/IG5hbWUgOiBpZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiB2YWx1ZT17b3AudmFsdWV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YGNiXyR7aWR9XyR7b3AudmFsdWV9YCAgfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e29wLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshaHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICAgICAge2FsbG93T3RoZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiIHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e1wiY2Jfb3RoZXJcIiArIGlkfSBjaGVja2VkPXtvdGhlckNoZWNrZWR9IGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiB2YWx1ZT1cIm90aGVyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17XCJjYl9vdGhlclwiICsgaWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtULnRyYW5zbGF0ZShcImdlbmVyYWwub3RoZXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHthbGxvd090aGVyICYmIG90aGVyQ2hlY2tlZCAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cGFkZGluZ0xlZnQ6ICcyMnB4Jywgd2lkdGg6ICc1MCUnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0gdmFsdWU9e290aGVyVmFsdWV9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5DaGVja2JveExpc3QuZGVmYXVsdFByb3BzID0ge1xuICAgIGFyaWFMYWJlbGxlZEJ5IDogbnVsbCxcbn1cblxuXG5DaGVja2JveExpc3QucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzZWxlY3Rpb24pIHtcblxuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5pc011bHRpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi5tYXAodmFsID0+IHZhbC52YWx1ZSkgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBzZWxlY3Rpb24gPyBzZWxlY3Rpb24udmFsdWUgOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZHJvcGRvd24nXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIGNsZWFyYWJsZSwgZGlzYWJsZWQsIG92ZXJyaWRlQ1NTLCBhcmlhTGFiZWxsZWRCeSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc0NsZWFyYWJsZSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdjbGVhcmFibGUnKSk7XG4gICAgICAgIGxldCBpc0Rpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgZGlzYWJsZWQgPT0gdHJ1ZSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgbGV0IHNlbGVjdENsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ292ZXJyaWRlQ1NTJykgfHwgb3ZlcnJpZGVDU1MgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzTmFtZSA9ICdkcm9wZG93biAnICsgY2xhc3NOYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcm9wcy5pc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHRoaXMucHJvcHMub3B0aW9ucy5maWx0ZXIob3AgPT4gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdFN0eWxlcyA9IHsgbWVudTogc3R5bGVzID0+ICh7IC4uLnN0eWxlcywgekluZGV4OiA5OTkgfSkgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmFibGU9e2lzQ2xlYXJhYmxlfVxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZXM9e3NlbGVjdFN0eWxlc31cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXthcmlhTGFiZWxsZWRCeX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5Ecm9wZG93bi5kZWZhdWx0UHJvcHMgPSB7XG4gICAgYXJpYUxhYmVsbGVkQnkgOiBudWxsLFxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSYWRpb0xpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzZWxlY3Rpb24pIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGlvbi50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3JhZGlvJ1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0TGFiZWwob3B0aW9uLCBpZCwgaW5saW5lLCBzaW1wbGUsIGh0bWwpIHtcbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSBzdHlsZT17e2Rpc3BsYXk6ICdpbmxpbmUtYmxvY2snfX0+XG4gICAgICAgICAgICAgICAgICAgIHtodG1sICYmXG4gICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgPC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHshaHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb24ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHNpbXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSA+XG4gICAgICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YHJhZGlvXyR7aWR9XyR7b3B0aW9uLnZhbHVlfWB9IHN0eWxlPXt7ZGlzcGxheTogJ2lubGluZS1ibG9jayd9fT5cbiAgICAgICAgICAgICAgICAgICAgPGg0IHN0eWxlPXt7bWFyZ2luVG9wOiAnMHB4J319PntvcHRpb24ubGFiZWx9PC9oND5cbiAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e29wdGlvbi5kZXNjcmlwdGlvbn08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIGFyaWFMYWJlbGxlZEJ5LCBkaXNhYmxlZCwgb3B0aW9ucyxpZCwgbmFtZSwuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlubGluZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW5saW5lJykgKTtcbiAgICAgICAgbGV0IHNpbXBsZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc2ltcGxlJykgKTtcbiAgICAgICAgbGV0IGh0bWwgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2h0bWwnKSApO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuXG4gICAgICAgIGxldCBzdHlsZSwgbGFiZWw7XG5cbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMjBweCcsXG4gICAgICAgICAgICAgICAgZmxvYXQ6ICdsZWZ0J1xuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBpZD17YHJsX3dyYXBwZXJfJHtpZH1gfSBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbGxlZEJ5fT5cbiAgICAgICAgICAgICAgICB7IG9wdGlvbnMubWFwKG9wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrZWQgPSAob3AudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1yYWRpb1wiIGtleT17YHJhZGlvX2tleV8ke2lkfV8ke29wLnZhbHVlfWB9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YHJhZGlvXyR7aWR9XyR7b3AudmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e29wLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lID8gbmFtZSA6IGByYWRpb18ke2lkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5nZXRMYWJlbChvcCwgaWQsIGlubGluZSwgc2ltcGxlLCBodG1sKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5SYWRpb0xpc3QuZGVmYXVsdFByb3BzID0ge1xuICAgIGFyaWFMYWJlbGxlZEJ5IDogbnVsbCxcbn1cblxuUmFkaW9MaXN0LnByb3BUeXBlcyA9IHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgYXJpYUxhYmVsbGVkQnksIGNvbnRhaW5lckNsYXNzTmFtZSwuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG4gICAgICAgIGxldCBjbGFzc19uYW1lID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnZm9ybS1jb250cm9sJztcbiAgICAgICAgbGV0IGNvbnRhaW5lcl9jbGFzc19uYW1lID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY29udGFpbmVyQ2xhc3NOYW1lJykgPyBjb250YWluZXJDbGFzc05hbWUgOiAnY29udGFpbmVyLWZvcm0tY29udHJvbCc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y29udGFpbmVyX2NsYXNzX25hbWV9PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2NsYXNzX25hbWV9ICR7aGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnfWB9XG4gICAgICAgICAgICAgICAgICAgIHJlZj17bm9kZSA9PiB7dGhpcy5pbnB1dCA9IG5vZGV9fVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbGxlZEJ5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuSW5wdXQuZGVmYXVsdFByb3BzID0ge1xuICAgIGFyaWFMYWJlbGxlZEJ5IDogbnVsbCxcbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBSYXdIVE1MID0gKHtjaGlsZHJlbiwgcmVwbGFjZU5ld0xpbmUgPSBmYWxzZSwgY2xhc3NOYW1lID0gXCJcIn0pID0+XG4gICAgPHNwYW4gY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiByZXBsYWNlTmV3TGluZSA/IGNoaWxkcmVuPy5yZXBsYWNlKC9cXG4vZywgJzxiciAvPicpIDogY2hpbGRyZW59fSAvPlxuXG5leHBvcnQgZGVmYXVsdCBSYXdIVE1MOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcblxuZXhwb3J0IGNvbnN0IGZpbmRFbGVtZW50UG9zID0gKG9iaikgPT4ge1xuICAgIHZhciBjdXJ0b3AgPSAtNzA7XG4gICAgaWYgKG9iai5vZmZzZXRQYXJlbnQpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY3VydG9wICs9IG9iai5vZmZzZXRUb3A7XG4gICAgICAgIH0gd2hpbGUgKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpO1xuICAgICAgICByZXR1cm4gW2N1cnRvcF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGVwb2NoVG9Nb21lbnQgPSAoYXRpbWUpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICBhdGltZSA9IGF0aW1lICogMTAwMDtcbiAgICByZXR1cm4gbW9tZW50KGF0aW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlcG9jaFRvTW9tZW50VGltZVpvbmUgPSAoYXRpbWUsIHRpbWVfem9uZSkgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIGF0aW1lID0gYXRpbWUgKiAxMDAwO1xuICAgIHJldHVybiBtb21lbnQoYXRpbWUpLnR6KHRpbWVfem9uZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RXBvY2ggPSAoYXRpbWUsIGZvcm1hdCA9ICdNL0QvWVlZWSBoOm1tIGEnKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgcmV0dXJuIGVwb2NoVG9Nb21lbnQoYXRpbWUpLmZvcm1hdChmb3JtYXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlTG9jYXRpb25Ib3VyID0gKGhvdXIpID0+IHtcbiAgICBsZXQgcGFyc2VkSG91ciA9IGhvdXIudG9TdHJpbmcoKTtcbiAgICBpZihwYXJzZWRIb3VyLmxlbmd0aCA8IDQpIHBhcnNlZEhvdXIgPSBgMCR7cGFyc2VkSG91cn1gO1xuICAgIHBhcnNlZEhvdXIgPSBwYXJzZWRIb3VyLm1hdGNoKC8uezJ9L2cpO1xuICAgIHBhcnNlZEhvdXIgPSBwYXJzZWRIb3VyLmpvaW4oJzonKTtcbiAgICByZXR1cm4gcGFyc2VkSG91cjtcbn1cblxuZXhwb3J0IGNvbnN0IG9iamVjdFRvUXVlcnlTdHJpbmcgPSAob2JqKSA9PiB7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoc3RyICE9IFwiXCIpIHtcbiAgICAgICAgICAgIHN0ciArPSBcIiZcIjtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0ga2V5ICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmFja1VSTCA9ICgpID0+IHtcbiAgICBsZXQgdXJsICAgICAgPSBVUkkod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGxldCBxdWVyeSAgICA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgbGV0IGZyYWdtZW50ID0gdXJsLmZyYWdtZW50KCk7XG4gICAgbGV0IGJhY2tVcmwgID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiBudWxsO1xuICAgIGlmKGZyYWdtZW50ICE9IG51bGwgJiYgZnJhZ21lbnQgIT0gJycpe1xuICAgICAgICBiYWNrVXJsICs9IGAjJHtmcmFnbWVudH1gO1xuICAgIH1cbiAgICByZXR1cm4gYmFja1VybDtcbn07XG5cbmV4cG9ydCBjb25zdCB0b1NsdWcgPSAodGV4dCkgPT57XG4gICAgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csJ18nKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEF1dGhDYWxsYmFjayA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9jYWxsYmFja2A7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRMb2NhdGlvbiA9ICgpID0+IHtcbiAgICBsZXQgbG9jYXRpb24gPSAnJztcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG9uIGlmcmFtZVxuICAgICAgICBpZiAod2luZG93LnRvcClcbiAgICAgICAgICAgIGxvY2F0aW9uID0gd2luZG93LnRvcC5sb2NhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9yaWdpbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBhdGhOYW1lID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudEhyZWYgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkVXNlckdyb3VwcyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LkFMTE9XRURfVVNFUl9HUk9VUFMgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQVBJQmFzZVVybCA9IChyZWxhdGl2ZVVybCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5BUElfQkFTRV9VUkx9JHtyZWxhdGl2ZVVybH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbGBgO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dE9uTG9jYWxTdG9yYWdlID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5LCByZW1vdmVJdCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCB2YWwgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgaWYocmVtb3ZlSXQpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGdldEZyb21Mb2NhbFN0b3JhZ2UgcmVtb3Zpbmcga2V5ICR7a2V5fWApO1xuICAgICAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5KSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmNsZWFyaW5nX3Nlc3Npb25fc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSA9ICh2YWwpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSA9IHZhbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXJMYW5ndWFnZSA9ICgpID0+IHtcbiAgICBsZXQgbGFuZ3VhZ2UgPSAnZW4nO1xuICAgIGlmKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxhbmd1YWdlID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlc1swXSkgfHwgbmF2aWdhdG9yLmxhbmd1YWdlIHx8IG5hdmlnYXRvci51c2VyTGFuZ3VhZ2U7XG4gICAgfVxuICAgIHJldHVybiBsYW5ndWFnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0Vycm9yID0gKGVycm9ycykgPT4ge1xuICAgIGlmKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdEVycm9yID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICAgICAgY29uc3QgZmlyc3ROb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlyc3RFcnJvcik7XG4gICAgICAgIGlmIChmaXJzdE5vZGUpIHdpbmRvdy5zY3JvbGxUbygwLCBmaW5kRWxlbWVudFBvcyhmaXJzdE5vZGUpKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaGFzRXJyb3JzID0gKGZpZWxkLCBlcnJvcnMpID0+IHtcbiAgICBpZihmaWVsZCBpbiBlcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yc1tmaWVsZF07XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFsbG93RXF1YWwgPSAob2JqZWN0MSwgb2JqZWN0MikgPT4ge1xuICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMob2JqZWN0MSk7XG4gICAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyhvYmplY3QyKTtcblxuICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IG9mIGtleXMxKSB7XG4gICAgICAgIGlmIChvYmplY3QxW2tleV0gIT09IG9iamVjdDJba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgYXJyYXlzRXF1YWwgPSAoYTEsIGEyKSA9PlxuICAgIGExLmxlbmd0aCA9PT0gYTIubGVuZ3RoICYmIGExLmV2ZXJ5KChvLCBpZHgpID0+IHNoYWxsb3dFcXVhbChvLCBhMltpZHhdKSk7XG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKG9iaikgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGJhc2U2NFVSTEVuY29kZSA9IChzdHIpID0+IHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgICAgICAucmVwbGFjZSgvPS9nLCAnJylcbn1cblxuZXhwb3J0IGNvbnN0IHJldHJ5UHJvbWlzZSA9IGFzeW5jIChcbiAgICBjYixcbiAgICBtYXhOdW1iZXJPZlJldHJpZXMgPSAzXG4pID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heE51bWJlck9mUmV0cmllczsgaSsrKSB7XG4gICAgICAgIGlmIChhd2FpdCBjYigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVTZXJ2aWNlVXJsID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuVElNRUlOVEVSVkFMU0lOQ0UxOTcwX0FQSV9VUkwgfHwgcHJvY2Vzcy5lbnYuVElNRUlOVEVSVkFMU0lOQ0UxOTcwX0FQSV9VUkw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV2ZW50TG9jYXRpb24gPSAoZXZlbnQsIHN1bW1pdFZlbnVlQ291bnQsIHN1bW1pdFNob3dMb2NEYXRlID0gbnVsbCwgbm93VXRjID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IHNob3VsZFNob3dWZW51ZXMgPSAoc3VtbWl0U2hvd0xvY0RhdGUgJiYgbm93VXRjKSA/IHN1bW1pdFNob3dMb2NEYXRlICogMTAwMCA8IG5vd1V0YyA6IHRydWU7XG4gICAgY29uc3QgbG9jYXRpb25OYW1lID0gW107XG4gICAgY29uc3QgeyBsb2NhdGlvbiB9ID0gZXZlbnQ7XG4gICAgXG4gICAgaWYgKCFzaG91bGRTaG93VmVudWVzKSByZXR1cm4gJ1RCQSc7XG4gICAgXG4gICAgaWYgKCFsb2NhdGlvbikgcmV0dXJuICdUQkEnO1xuICAgIFxuICAgIGlmIChzdW1taXRWZW51ZUNvdW50ID4gMSAmJiBsb2NhdGlvbi52ZW51ZT8ubmFtZSkgbG9jYXRpb25OYW1lLnB1c2gobG9jYXRpb24udmVudWUubmFtZSk7XG4gICAgaWYgKGxvY2F0aW9uLmZsb29yPy5uYW1lKSBsb2NhdGlvbk5hbWUucHVzaChsb2NhdGlvbi5mbG9vci5uYW1lKTtcbiAgICBpZiAobG9jYXRpb24ubmFtZSkgbG9jYXRpb25OYW1lLnB1c2gobG9jYXRpb24ubmFtZSk7XG4gICAgXG4gICAgcmV0dXJuIGxvY2F0aW9uTmFtZS5sZW5ndGggPiAwID8gbG9jYXRpb25OYW1lLmpvaW4oJyAtICcpIDogJ1RCQSc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZlbnRIb3N0cyA9IChldmVudCkgPT4ge1xuICAgIGxldCBob3N0cyA9IFtdO1xuICAgIGlmIChldmVudC5zcGVha2Vycz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBob3N0cyA9IFsuLi5ldmVudC5zcGVha2Vyc107XG4gICAgfVxuICAgIGlmIChldmVudC5tb2RlcmF0b3IpIGhvc3RzLnB1c2goZXZlbnQubW9kZXJhdG9yKTtcbiAgICBcbiAgICByZXR1cm4gaG9zdHM7XG59O1xuXG5jb25zdCBsb2FkSW1hZ2UgPSBhc3luYyB1cmwgPT4ge1xuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpXG4gICAgaW1nLnNyYyA9IHVybFxuICAgIGltZy5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnXG4gICAgXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1nKVxuICAgICAgICBpbWcub25lcnJvciA9IHJlamVjdFxuICAgIH0pXG59XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0U1ZHdG9JbWcgPSBhc3luYyAoc3ZnVXJsKSA9PiB7XG4gICAgY29uc3QgaW1nID0gYXdhaXQgbG9hZEltYWdlKHN2Z1VybClcbiAgICBjb25zdCBuZXdXaWR0aCA9IDEwMFxuICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGguZmxvb3IoaW1nLm5hdHVyYWxIZWlnaHQgKiAxMDAgLyBpbWcubmF0dXJhbFdpZHRoKVxuICAgIFxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gICAgY2FudmFzLndpZHRoID0gbmV3V2lkdGhcbiAgICBjYW52YXMuaGVpZ2h0ID0gbmV3SGVpZ2h0XG4gICAgY2FudmFzLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltZywgMCwgMCwgbmV3V2lkdGgsIG5ld0hlaWdodClcbiAgICBcbiAgICBjb25zdCB1cmwgPSBhd2FpdCBjYW52YXMudG9EYXRhVVJMKGBpbWFnZS9wbmdgLCAxLjApXG4gICAgY29uc29sZS5sb2codXJsLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcbiAgICByZXR1cm4ge3VybCwgd2lkdGg6IG5ld1dpZHRoLCBoZWlnaHQ6IG5ld0hlaWdodH1cbn1cbiIsImV4cG9ydCBjb25zdCBDaGVja0JveFF1ZXN0aW9uVHlwZSA9ICdDaGVja0JveCc7XG5leHBvcnQgY29uc3QgQ29tYm9Cb3hRdWVzdGlvblR5cGUgPSAnQ29tYm9Cb3gnXG5leHBvcnQgY29uc3QgQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlID0gJ0NoZWNrQm94TGlzdCc7XG5leHBvcnQgY29uc3QgUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlID0gJ1JhZGlvQnV0dG9uTGlzdCc7XG5leHBvcnQgY29uc3QgQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUgPSBbQ29tYm9Cb3hRdWVzdGlvblR5cGUsIENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSwgUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlXTtcbmV4cG9ydCBjb25zdCBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQgPSAnQW5kJztcbmV4cG9ydCBjb25zdCBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9PciA9ICdPcic7XG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbCA9ICdFcXVhbCc7XG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbCA9ICdOb3RFcXVhbCc7XG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eV9WaXNpYmxlID0gJ1Zpc2libGUnO1xuZXhwb3J0IGNvbnN0IE1haW5RdWVzdGlvbkNsYXNzVHlwZSA9ICdNYWluUXVlc3Rpb24nO1xuaW1wb3J0IHt0b1NsdWd9IGZyb20gXCIuL21ldGhvZHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlc3Rpb25zU2V0IHtcblxuICAgIGNvbnN0cnVjdG9yKHF1ZXN0aW9ucywgYW5zd2VycyA9IFtdKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gcXVlc3Rpb25zO1xuICAgICAgICB0aGlzLm9yaWdpbmFsQW5zd2VycyA9IGFuc3dlcnNcbiAgICAgICAgdGhpcy5hbnN3ZXJzID0gW107XG4gICAgICAgIC8vIG1hcCBhbnN3ZXJzIHRvIGFzc29jaWF0ZSBhcnJheVxuICAgICAgICBmb3IgKGxldCBhIG9mIHRoaXMub3JpZ2luYWxBbnN3ZXJzKVxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2EucXVlc3Rpb25faWRdID0gYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5TmFtZSA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkID0ge31cbiAgICAgICAgLy8gYXNzb2NpYXRpdmUgYXJyYXkgKCBydWxlIGlkICwgcnVsZSk7XG4gICAgICAgIHRoaXMucnVsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbnMoKTtcbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWVbdG9TbHVnKHEubmFtZSldID0gcTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5SWRbcGFyc2VJbnQocS5pZCldID0gcTtcbiAgICAgICAgaWYocS5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCByIG9mIHEuc3ViX3F1ZXN0aW9uX3J1bGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ydWxlc1twYXJzZUludChyLmlkKV0gPSByO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIF9wYXJzZVF1ZXN0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgcSBvZiB0aGlzLnF1ZXN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbihxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hbGxvd3NWYWx1ZXMgPSAocSkgPT4ge1xuICAgICAgICByZXR1cm4gQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUuaW5jbHVkZXMocS50eXBlKTtcbiAgICB9XG5cbiAgICBfYWxsb3dzVmFsdWUgPSAocSwgYW5zd2VyKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGFuc3dlci52YWx1ZS5zcGxpdCgnLCcpLm1hcCh2ID0+IHBhcnNlSW50KHYpKTtcbiAgICAgICAgZm9yIChsZXQgYXYgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghcS52YWx1ZXMubWFwKGUgPT4gZS5pZCkuaW5jbHVkZXMoYXYpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfZ2V0QW5zd2VyRm9yID0gKHEpID0+IHtcbiAgICAgICAgbGV0IGlkID0gTnVtYmVyLmlzSW50ZWdlcihxKSA/IHEgOiBxLmlkO1xuICAgICAgICBsZXQgYSA9IHRoaXMuYW5zd2Vyc1tpZF0gfHwgbnVsbDtcbiAgICAgICAgcmV0dXJuIGEgPyBhIDogbnVsbDtcbiAgICB9XG5cbiAgICBfaGFzVmFsdWUgPSAoYW5zd2VyKSA9PiB7XG4gICAgICAgIHJldHVybiBhbnN3ZXIudmFsdWUgIT09ICcnO1xuICAgIH1cblxuICAgIF9hbnN3ZXJDb250YWlucyA9IChhbnN3ZXIsIHZhbCkgPT4ge1xuICAgICAgICByZXR1cm4gYW5zd2VyLnZhbHVlLnNwbGl0KCcsJykuaW5jbHVkZXModmFsKTtcbiAgICB9XG5cbiAgICBfaXNTdWJRdWVzdGlvblZpc2libGUgPSAocnVsZSkgPT4ge1xuICAgICAgICBsZXQgaW5pdGlhbENvbmRpdGlvbiA9IHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBwYXJlbnRRdWVzdGlvbkFuc3dlciA9IHRoaXMuX2dldEFuc3dlckZvcihydWxlLnBhcmVudF9xdWVzdGlvbl9pZCk7XG4gICAgICAgIGlmICghcGFyZW50UXVlc3Rpb25BbnN3ZXIpIHtcbiAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFuc3dlclZhbHVlIG9mIHJ1bGUuYW5zd2VyX3ZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uICYmIHRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gfHwgdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFuc3dlclZhbHVlIG9mIHJ1bGUuYW5zd2VyX3ZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uICYmICF0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uIHx8ICF0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5hbCB2aXNpYmlsaXR5IGNoZWNrXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHkgPT09IFZpc2liaWxpdHlfVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGluaXRpYWxDb25kaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90IHZpc2libGVcbiAgICAgICAgcmV0dXJuICFpbml0aWFsQ29uZGl0aW9uO1xuICAgIH1cblxuICAgIF9pc0Fuc3dlcmVkID0gKHEpID0+IHtcbiAgICAgICAgY29uc3QgYW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyRm9yKHEpO1xuXG4gICAgICAgIGlmIChxLmNsYXNzID09PSBNYWluUXVlc3Rpb25DbGFzc1R5cGUpIHtcbiAgICAgICAgICAgIGlmICghcS5tYW5kYXRvcnkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhbnN3ZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGFzVmFsdWUoYW5zd2VyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FsbG93c1ZhbHVlcyhxKSAmJiAhdGhpcy5fYWxsb3dzVmFsdWUocSwgYW5zd2VyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIHBhcmVudCBydWxlcyAuLi5cbiAgICAgICAgZm9yIChsZXQgcnVsZUlkIG9mIHEucGFyZW50X3J1bGVzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzU3ViUXVlc3Rpb25WaXNpYmxlKHRoaXMucnVsZXNbcnVsZUlkXSkpIC8vIGlmIHF1ZXN0aW9uIGlzIG5vdCB2aXNpYmxlIHNraXAgaXRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghcS5tYW5kYXRvcnkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhbnN3ZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGFzVmFsdWUoYW5zd2VyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FsbG93c1ZhbHVlcyhxKSAmJiAhdGhpcy5fYWxsb3dzVmFsdWUocSwgYW5zd2VyKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9jaGVja1F1ZXN0aW9uID0gKHEpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHRoaXMuX2lzQW5zd2VyZWQocSk7XG4gICAgICAgIGlmKHEuaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgcnVsZSBvZiBxLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlY3Vyc2l2ZSBhbGwgdGhlIHRyZWUgdGlsbCBsZWF2ZXMgLi4uXG4gICAgICAgICAgICAgICAgcmVzID0gcmVzICYmIHRoaXMuX2NoZWNrUXVlc3Rpb24ocnVsZS5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIF9mb3JtYXRRdWVzdGlvbkFuc3dlciA9IChxdWVzdGlvbikgPT4ge1xuICAgICAgICBsZXQgcmVzID0ge307XG4gICAgICAgIGNvbnN0IHNsdWcgPSB0b1NsdWcocXVlc3Rpb24ubmFtZSk7XG4gICAgICAgIGxldCB1c2VyQW5zd2VyID0gdGhpcy5vcmlnaW5hbEFuc3dlcnMuZmluZChhID0+IGEucXVlc3Rpb25faWQgPT09IHF1ZXN0aW9uLmlkKT8udmFsdWU7XG4gICAgICAgIGlmKCF1c2VyQW5zd2VyICYmIHF1ZXN0aW9uPy52YWx1ZXM/Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgLy8gY2hlY2sgZGVmYXVsdCB2YWx1ZVxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbCA9IHF1ZXN0aW9uLnZhbHVlcy5maW5kKHYgPT4gdi5pc19kZWZhdWx0KTtcbiAgICAgICAgICAgIGlmKGRlZmF1bHRWYWwpIHVzZXJBbnN3ZXIgPSBkZWZhdWx0VmFsLmlkLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodXNlckFuc3dlcikge1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IENoZWNrQm94UXVlc3Rpb25UeXBlKSB1c2VyQW5zd2VyID0gdXNlckFuc3dlciA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogISF1c2VyQW5zd2VyO1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSB8fCBxdWVzdGlvbi50eXBlID09PSBDb21ib0JveFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHBhcnNlSW50KHVzZXJBbnN3ZXIpO1xuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnR5cGUgPT09IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXIuc3BsaXQoJywnKS5tYXAoYW5zVmFsID0+IHBhcnNlSW50KGFuc1ZhbCkpIHx8IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzW3NsdWddID0gIHVzZXJBbnN3ZXIgfHwgJyc7XG4gICAgICAgIGlmKHF1ZXN0aW9uLnR5cGUgPT09IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSAmJiByZXNbc2x1Z10gPT09ICcnKSByZXNbc2x1Z10gPSBbXVxuICAgICAgICBpZihxdWVzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHF1ZXN0aW9uLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlY3Vyc2l2ZSBhbGwgdGhlIHRyZWUgdGlsbCBsZWF2ZXMgLi4uXG4gICAgICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgcmVzID0gey4uLnJlcywgLi4ucmVzMX07XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZm9ybWF0QW5zd2VycyA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzMSA9IHRoaXMuX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyKHEpO1xuICAgICAgICAgICAgcmVzID0gey4uLnJlcywuLi5yZXMxfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY29tcGxldGVkID0gKCkgPT4ge1xuICAgICAgICBsZXQgcmVzID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgcSBvZiB0aGlzLnF1ZXN0aW9ucykge1xuICAgICAgICAgICAgcmVzID0gcmVzICYmIHRoaXMuX2NoZWNrUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBnZXRRdWVzdGlvbkJ5TmFtZSA9IChuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHNsdWcgPSB0b1NsdWcobmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CeU5hbWVbbmFtZV0gfHwgdGhpcy5xdWVzdGlvbkJ5TmFtZVtzbHVnXSAgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBnZXRRdWVzdGlvbkJ5SWQgPSAoaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CeUlkW3BhcnNlSW50KGlkKV0gfHwgbnVsbDtcbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vbWVudC10aW1lem9uZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWZpbmFsLWZvcm1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVyaWpzXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFQgZnJvbSBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCI7XG5pbXBvcnQgRXh0cmFRdWVzdGlvbnNGb3JtIGZyb20gXCIuLi9leHRyYS1xdWVzdGlvbnNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNsYXNzIEZyZWVUZXh0U2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLm9uU2VhcmNoQ2xpY2sgID0gdGhpcy5vblNlYXJjaENsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25DbGVhckNsaWNrICAgPSB0aGlzLm9uQ2xlYXJDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uS2V5UHJlc3NlZCAgID0gdGhpcy5vbktleVByZXNzZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSAgICAgICA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uU2VhcmNoQ2xpY2soZXYpe1xuICAgICAgICBsZXQgeyBwcmV2ZW50RXZlbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZihwcmV2ZW50RXZlbnRzKXtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb0ZpbHRlcmluZyh0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICBvbkNsZWFyQ2xpY2soZXYpe1xuICAgICAgICBsZXQgeyBwcmV2ZW50RXZlbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZihwcmV2ZW50RXZlbnRzKXtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb0ZpbHRlcmluZygnJyk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiAnJ30pO1xuICAgIH1cblxuICAgIGRvRmlsdGVyaW5nKHRlcm0pe1xuICAgICAgICB0aGlzLnByb3BzLm9uU2VhcmNoKHRlcm0udHJpbSgpKTtcbiAgICB9XG5cbiAgICBvbktleVByZXNzZWQoZXZlbnQpe1xuICAgICAgICB2YXIgY29kZSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG4gICAgICAgIGlmKGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLmRvRmlsdGVyaW5nKHRoaXMuc3RhdGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoZXZlbnQpe1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSlcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IHt2YWx1ZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIHJldHVybihcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IHNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e3RoaXMub25LZXlQcmVzc2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImlucHV0LWdyb3VwLWJ0blwiIHN0eWxlPXt7d2lkdGg6IDUgKyclJ319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17dGhpcy5vblNlYXJjaENsaWNrfSBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiB0aXRsZT17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnNlYXJjaFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXNlYXJjaFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXt0aGlzLm9uQ2xlYXJDbGlja30gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0XCIgdGl0bGU9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5jbGVhclwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgIH1cbn1cbkZyZWVUZXh0U2VhcmNoLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBwcmV2ZW50RXZlbnRzOiBmYWxzZSxcbiAgICBvbkNoYW5nZTogbnVsbCxcbn1cblxuRnJlZVRleHRTZWFyY2gucHJvcFR5cGVzID0ge1xuICAgIHByZXZlbnRFdmVudHM6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgRnJlZVRleHRTZWFyY2g7XG4iXSwibmFtZXMiOlsiUXVlc3Rpb25UeXBlX1RleHQiLCJRdWVzdGlvblR5cGVfVGV4dEFyZWEiLCJRdWVzdGlvblR5cGVfQ2hlY2tib3giLCJRdWVzdGlvblR5cGVfUmFkaW9CdXR0b25MaXN0IiwiUXVlc3Rpb25UeXBlX0NvbWJvQm94IiwiUXVlc3Rpb25UeXBlX0NoZWNrQm94TGlzdCIsIlF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3giLCJSZWFjdCIsIkZyYWdtZW50IiwidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiUHJvcFR5cGVzIiwiUmF3SFRNTCIsIklucHV0IiwiRHJvcGRvd24iLCJSYWRpb0xpc3QiLCJDaGVja2JveExpc3QiLCJRdWVzdGlvbnNTZXQiLCJGaWVsZCIsIkZvcm0iLCJ0b1NsdWciLCJJbnB1dEFkYXB0ZXIiLCJpbnB1dCIsIm1ldGEiLCJxdWVzdGlvbiIsImNsYXNzTmFtZSIsImlzRGlzYWJsZWQiLCJpc1JlcXVpcmVkIiwicmVzdCIsIm5hbWUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJSYWRpb0J1dHRvbkxpc3RBZGFwdGVyIiwiRHJvcGRvd25BZGFwdGVyIiwiQ2hlY2tCb3hMaXN0QWRhcHRlciIsIm1heFZhbHVlcyIsInNob3VsZENoYW5nZSIsImV2IiwicXVlc3Rpb25fYW5zd2VycyIsInRhcmdldCIsImxlbmd0aCIsImdldFZhbGlkYXRvciIsInVuZGVmaW5lZCIsIkV4dHJhUXVlc3Rpb25zRm9ybSIsImZvcndhcmRSZWYiLCJleHRyYVF1ZXN0aW9ucyIsInVzZXJBbnN3ZXJzIiwib25BbnN3ZXJDaGFuZ2VzIiwicXVlc3Rpb25Db250YWluZXJDbGFzc05hbWUiLCJxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lIiwicXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lIiwicmVhZE9ubHkiLCJkZWJ1ZyIsImJ1dHRvblRleHQiLCJSZXF1aXJlZEVycm9yTWVzc2FnZSIsIlZhbGlkYXRpb25FcnJvckNsYXNzTmFtZSIsImFsbG93RXh0cmFRdWVzdGlvbnNFZGl0Iiwib25FcnJvciIsImUiLCJjb25zb2xlIiwibG9nIiwic2hvdWxkU2Nyb2xsMkZpcnN0RXJyb3IiLCJyZWYiLCJzdWJtaXQiLCJxdWVzdGlvblJlZiIsImZvcm1SZWYiLCJhbnN3ZXJzIiwic2V0QW5zd2VycyIsImZvcm1hdFVzZXJBbnN3ZXJzIiwiZG9TdWJtaXQiLCJjdXJyZW50IiwiZGlzcGF0Y2hFdmVudCIsIkV2ZW50IiwiY2FuY2VsYWJsZSIsImJ1YmJsZXMiLCJxcyIsImZvcm1hdEFuc3dlcnMiLCJDb25kaXRpb24iLCJ3aGVuIiwicnVsZSIsImNoaWxkcmVuIiwiY2hlY2tWaXNpYmlsaXR5IiwiY2hlY2tSdWxlIiwiRXJyb3IiLCJlcnJvciIsInRvdWNoZWQiLCJ2YWx1ZXMiLCJhbnN3ZXJfdmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwicmVzIiwiYW5zd2VyX3ZhbHVlc19vcGVyYXRvciIsImZvckVhY2giLCJ2IiwiaW5jbHVkZXMiLCJwYXJzZUludCIsInRvU3RyaW5nIiwicnVsZVJlc3VsdCIsInZpc2liaWxpdHkiLCJ2aXNpYmlsaXR5X2NvbmRpdGlvbiIsInN1Yl9xdWVzdGlvbiIsImlkIiwiZ2V0TGFiZWwiLCJxIiwibm9uQnJlYWtpbmdTcGFjZSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImRpdiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsImxhYmVsIiwiaW5uZXJUZXh0IiwidGV4dENvbnRlbnQiLCJsYWJlbFRleHQiLCJtYW5kYXRvcnkiLCJsYWJlbEhUTUwiLCJpc0Fuc3dlcmVkIiwic2x1ZyIsImhhc093blByb3BlcnR5IiwiYW5zd2VyIiwicmVuZGVyUXVlc3Rpb24iLCJxdWVzdGlvblZhbHVlcyIsInR5cGUiLCJlbCIsInN1Yl9xdWVzdGlvbl9ydWxlcyIsIm1hcCIsInIiLCJkaXNwbGF5Iiwib3B0aW9ucyIsInZhbCIsIm1heF9zZWxlY3RlZF92YWx1ZXMiLCJpc1Zpc2libGUiLCJ2YWxpZGF0ZVF1ZXN0aW9uIiwiZXJyb3JzIiwib25TdWJtaXQiLCJ2YWxpZGF0ZSIsIk9iamVjdCIsImtleXMiLCJnZXRFcnJvckZpZWxkcyIsImludmFsaWRGb3JtRmllbGRzIiwiZXJyb3JGaWVsZHMiLCJwdXNoIiwiZ2V0Rmlyc3RFcnJvciIsInNvcnQiLCJhIiwiYiIsIm9yZGVyIiwic2Nyb2xsVG9GaXJzdEVycm9yIiwiZmlyc3RFcnJvciIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsImhhbmRsZVN1Ym1pdCIsImZvcm0iLCJzdWJtaXR0aW5nIiwicHJpc3RpbmUiLCJldmVudCIsImdldFJlZ2lzdGVyZWRGaWVsZHMiLCJmaWx0ZXIiLCJmaWVsZCIsImdldEZpZWxkU3RhdGUiLCJpbnZhbGlkIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hcmdpblRvcCIsInByb3BUeXBlcyIsImFycmF5IiwiZnVuYyIsInN0cmluZyIsImJvb2wiLCJUIiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIm90aGVyVmFsdWUiLCJmaW5kIiwib3AiLCJzdGF0ZSIsIm90aGVyQ2hlY2tlZCIsImhhbmRsZUNoYW5nZSIsImJpbmQiLCJoYW5kbGVPdGhlckNCQ2hhbmdlIiwib3B0aW9uVmFsdWVzIiwiY2hlY2tlZCIsInRoZVZhbCIsImlzTmFOIiwic2V0U3RhdGUiLCJyZW5kZXIiLCJkaXNhYmxlZCIsImFyaWFMYWJlbGxlZEJ5IiwiaW5saW5lIiwiaHRtbCIsImFsbG93T3RoZXIiLCJoYXNfZXJyb3IiLCJzdHlsZSIsInBhZGRpbmdMZWZ0IiwibWFyZ2luTGVmdCIsImZsb2F0IiwidHJhbnNsYXRlIiwid2lkdGgiLCJkZWZhdWx0UHJvcHMiLCJTZWxlY3QiLCJzZWxlY3Rpb24iLCJpc011bHRpIiwiY2xlYXJhYmxlIiwib3ZlcnJpZGVDU1MiLCJpc0NsZWFyYWJsZSIsInRoZVZhbHVlIiwic2VsZWN0Q2xhc3NOYW1lIiwib3B0Iiwic2VsZWN0U3R5bGVzIiwibWVudSIsInN0eWxlcyIsInpJbmRleCIsIm9wdGlvbiIsInNpbXBsZSIsImRlc2NyaXB0aW9uIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwic25hcHNob3QiLCJjb250YWluZXJDbGFzc05hbWUiLCJjbGFzc19uYW1lIiwiY29udGFpbmVyX2NsYXNzX25hbWUiLCJub2RlIiwicmVwbGFjZU5ld0xpbmUiLCJfX2h0bWwiLCJyZXBsYWNlIiwibW9tZW50IiwiVVJJIiwiZmluZEVsZW1lbnRQb3MiLCJvYmoiLCJjdXJ0b3AiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRUb3AiLCJlcG9jaFRvTW9tZW50IiwiYXRpbWUiLCJlcG9jaFRvTW9tZW50VGltZVpvbmUiLCJ0aW1lX3pvbmUiLCJ0eiIsImZvcm1hdEVwb2NoIiwiZm9ybWF0IiwicGFyc2VMb2NhdGlvbkhvdXIiLCJob3VyIiwicGFyc2VkSG91ciIsIm1hdGNoIiwiam9pbiIsIm9iamVjdFRvUXVlcnlTdHJpbmciLCJzdHIiLCJrZXkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJnZXRCYWNrVVJMIiwidXJsIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwicXVlcnkiLCJzZWFyY2giLCJmcmFnbWVudCIsImJhY2tVcmwiLCJ0ZXh0IiwidG9Mb3dlckNhc2UiLCJnZXRBdXRoQ2FsbGJhY2siLCJvcmlnaW4iLCJnZXRDdXJyZW50TG9jYXRpb24iLCJ0b3AiLCJnZXRPcmlnaW4iLCJnZXRDdXJyZW50UGF0aE5hbWUiLCJwYXRobmFtZSIsImdldEN1cnJlbnRIcmVmIiwiZ2V0QWxsb3dlZFVzZXJHcm91cHMiLCJBTExPV0VEX1VTRVJfR1JPVVBTIiwiYnVpbGRBUElCYXNlVXJsIiwicmVsYXRpdmVVcmwiLCJBUElfQkFTRV9VUkwiLCJwdXRPbkxvY2FsU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJnZXRGcm9tTG9jYWxTdG9yYWdlIiwicmVtb3ZlSXQiLCJnZXRJdGVtIiwicmVtb3ZlRnJvbUxvY2FsU3RvcmFnZSIsInJlbW92ZUl0ZW0iLCJpc0NsZWFyaW5nU2Vzc2lvblN0YXRlIiwiY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSIsInNldFNlc3Npb25DbGVhcmluZ1N0YXRlIiwiZ2V0Q3VycmVudFVzZXJMYW5ndWFnZSIsImxhbmd1YWdlIiwibmF2aWdhdG9yIiwibGFuZ3VhZ2VzIiwidXNlckxhbmd1YWdlIiwic2Nyb2xsVG9FcnJvciIsImZpcnN0Tm9kZSIsImdldEVsZW1lbnRCeUlkIiwic2Nyb2xsVG8iLCJoYXNFcnJvcnMiLCJzaGFsbG93RXF1YWwiLCJvYmplY3QxIiwib2JqZWN0MiIsImtleXMxIiwia2V5czIiLCJhcnJheXNFcXVhbCIsImExIiwiYTIiLCJldmVyeSIsIm8iLCJpZHgiLCJpc0VtcHR5IiwiYmFzZTY0VVJMRW5jb2RlIiwicmV0cnlQcm9taXNlIiwiY2IiLCJtYXhOdW1iZXJPZlJldHJpZXMiLCJpIiwiZ2V0VGltZVNlcnZpY2VVcmwiLCJUSU1FSU5URVJWQUxTSU5DRTE5NzBfQVBJX1VSTCIsInByb2Nlc3MiLCJlbnYiLCJnZXRFdmVudExvY2F0aW9uIiwic3VtbWl0VmVudWVDb3VudCIsInN1bW1pdFNob3dMb2NEYXRlIiwibm93VXRjIiwic2hvdWxkU2hvd1ZlbnVlcyIsImxvY2F0aW9uTmFtZSIsInZlbnVlIiwiZmxvb3IiLCJnZXRFdmVudEhvc3RzIiwiaG9zdHMiLCJzcGVha2VycyIsIm1vZGVyYXRvciIsImxvYWRJbWFnZSIsImltZyIsInNyYyIsImNyb3NzT3JpZ2luIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwiY29udmVydFNWR3RvSW1nIiwic3ZnVXJsIiwibmV3V2lkdGgiLCJuZXdIZWlnaHQiLCJNYXRoIiwibmF0dXJhbEhlaWdodCIsIm5hdHVyYWxXaWR0aCIsImNhbnZhcyIsImhlaWdodCIsImdldENvbnRleHQiLCJkcmF3SW1hZ2UiLCJ0b0RhdGFVUkwiLCJDaGVja0JveFF1ZXN0aW9uVHlwZSIsIkNvbWJvQm94UXVlc3Rpb25UeXBlIiwiQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlIiwiUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlIiwiQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9PciIsIlZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsIiwiVmlzaWJpbGl0eV9WaXNpYmxlIiwiTWFpblF1ZXN0aW9uQ2xhc3NUeXBlIiwicXVlc3Rpb25zIiwicXVlc3Rpb25CeU5hbWUiLCJxdWVzdGlvbkJ5SWQiLCJydWxlcyIsIl9wYXJzZVF1ZXN0aW9uIiwic3BsaXQiLCJhdiIsIk51bWJlciIsImlzSW50ZWdlciIsImluaXRpYWxDb25kaXRpb24iLCJwYXJlbnRRdWVzdGlvbkFuc3dlciIsIl9nZXRBbnN3ZXJGb3IiLCJwYXJlbnRfcXVlc3Rpb25faWQiLCJhbnN3ZXJWYWx1ZSIsIl9hbnN3ZXJDb250YWlucyIsImNsYXNzIiwiX2hhc1ZhbHVlIiwiX2FsbG93c1ZhbHVlcyIsIl9hbGxvd3NWYWx1ZSIsInJ1bGVJZCIsInBhcmVudF9ydWxlcyIsIl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSIsIl9pc0Fuc3dlcmVkIiwiX2NoZWNrUXVlc3Rpb24iLCJ1c2VyQW5zd2VyIiwib3JpZ2luYWxBbnN3ZXJzIiwicXVlc3Rpb25faWQiLCJkZWZhdWx0VmFsIiwiaXNfZGVmYXVsdCIsImFuc1ZhbCIsInJlczEiLCJfZm9ybWF0UXVlc3Rpb25BbnN3ZXIiLCJfcGFyc2VRdWVzdGlvbnMiLCJGcmVlVGV4dFNlYXJjaCIsIm9uU2VhcmNoQ2xpY2siLCJvbkNsZWFyQ2xpY2siLCJvbktleVByZXNzZWQiLCJwcmV2ZW50RXZlbnRzIiwicHJldmVudERlZmF1bHQiLCJkb0ZpbHRlcmluZyIsInRlcm0iLCJvblNlYXJjaCIsInRyaW0iLCJjb2RlIiwia2V5Q29kZSIsIndoaWNoIl0sInNvdXJjZVJvb3QiOiIifQ==
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("openstack-uicore-foundation",[],t):"object"==typeof exports?exports["openstack-uicore-foundation"]=t():e["openstack-uicore-foundation"]=t()}(this,(()=>(()=>{"use strict";var e={3932:(e,t,a)=>{var r=a(8213),n=a.n(r),s=a(3838),l=a.n(s),i=a(6689),o=a.n(i),u=a(580),c=a.n(u),d=a(418),m=a(1833),h=a(401),p=a(7027),b=a(2230),g=a(1995);const v=require("react-final-form");var f=a(6793);const y=["input","meta","question","className","isDisabled","isRequired"],_=["input","meta","question","isDisabled","isRequired"],C=["input","meta","question","isDisabled","isRequired"],E=["input","meta","question","isDisabled","isRequired","maxValues"],q=e=>{let{input:t,meta:a,question:r,className:s,isDisabled:i,isRequired:u}=e,c=l()(e,y);return o().createElement(m.default,n()({},t,c,{containerClassName:s,name:(0,f.toSlug)(r.name),ariaLabelledBy:`${(0,f.toSlug)(r.name)} label`,id:(0,f.toSlug)(r.name),value:t.value,disabled:i,required:u,onChange:t.onChange,placeholder:r.placeholder}))},w=e=>{let{input:t,meta:a,question:r,isDisabled:s,isRequired:i}=e,u=l()(e,_);return o().createElement(p.default,n()({},t,u,{name:(0,f.toSlug)(r.name),ariaLabelledBy:`${(0,f.toSlug)(r.name)} label`,id:(0,f.toSlug)(r.name),overrideCSS:!0,value:t.value,disabled:s,required:i,onChange:t.onChange}))},N=e=>{let{input:t,meta:a,question:r,isDisabled:s,isRequired:i}=e,u=l()(e,C);return o().createElement(h.default,n()({},t,u,{name:(0,f.toSlug)(r.name),ariaLabelledBy:`${(0,f.toSlug)(r.name)} label`,id:(0,f.toSlug)(r.name),overrideCSS:!0,className:"ddl-extra-questions-container",classNamePrefix:"ddl-extra-questions",value:t.value,disabled:s,required:i,onChange:t.onChange}))},S=e=>{let{input:t,meta:a,question:r,isDisabled:s,isRequired:i,maxValues:u}=e,c=l()(e,E);return o().createElement(b.default,n()({},t,c,{id:(0,f.toSlug)(r.name),name:(0,f.toSlug)(r.name),ariaLabelledBy:`${(0,f.toSlug)(r.name)} label`,value:t.value,disabled:s,required:i,onChange:e=>{const a=e.target.value;return u>0&&a.length>u?null:t.onChange(e)}}))},k=e=>e?e=>e?void 0:"Required":()=>{},x=o().forwardRef((({extraQuestions:e,userAnswers:t,onAnswerChanges:a,className:r="questions-form",questionContainerClassName:n="question-container",questionLabelContainerClassName:s="question-label-container",questionControlContainerClassName:l="question-control-container",readOnly:u=!1,debug:c=!1,buttonText:m="Submit",RequiredErrorMessage:h="Required",ValidationErrorClassName:p="extra-question-error",allowExtraQuestionsEdit:b=!0,onError:y=(e=>console.log("form errors: ",e)),shouldScroll2FirstError:_=!0},C)=>{let E=null;const x=(0,i.useRef)({}),O=(0,i.useRef)(null),[P,L]=(0,i.useState)({});(0,i.useEffect)((()=>{B()}),[e]),(0,i.useImperativeHandle)(C,(()=>({doSubmit(){O.current.dispatchEvent(new Event("submit",{cancelable:!0,bubbles:!0}))}})));const B=()=>{const a=new g.default(e,t);L(a.formatAnswers())},j=({when:e,rule:t,children:a})=>o().createElement(v.Field,{name:e,subscription:{value:!0}},(({input:{value:e}})=>R(t,$(e,t),a))),F=({name:e})=>o().createElement(v.Field,{name:e,subscription:{error:!0,touched:!0}},(({meta:{error:e,touched:t}})=>e&&t?o().createElement("div",{className:p},e):null)),$=(e,t)=>{let a=t.answer_values;if(Array.isArray(e)){if(!e.length)return!1;let r="And"===t.answer_values_operator;return a.forEach((a=>{r="And"===t.answer_values_operator?r&&e.includes(parseInt(a)):r||e.includes(parseInt(a))})),r}return a.includes(e.toString())},R=(e,t,a)=>"Visible"===e.visibility?"Equal"===e.visibility_condition?t?a:(delete x.current[e.sub_question.id],null):t?(delete x.current[e.sub_question.id],null):a:"Equal"===e.visibility_condition?t?(delete x.current[e.sub_question.id],null):a:t?a:(delete x.current[e.sub_question.id],null),A=e=>{const t=String.fromCharCode(160),a=document.createElement("div");a.innerHTML=e.label;const r=a.innerText||a.textContent||"",n=e.mandatory?`${r}${t}<b>*</b>`:r;return`<label id="${(0,f.toSlug)(e.name)} label" htmlFor="${(0,f.toSlug)(e.name)}">\n ${n}\n </label>`},D=e=>{let t=e.values;const a=!b&&((e,t)=>{const a=(0,f.toSlug)(e.name);if(!t.hasOwnProperty(a))return!1;const r=t[a];return Array.isArray(r)||"string"==typeof r?r.length>0:"number"==typeof r?r>0:"boolean"==typeof r&&r})(e,P);var r,u,c;if("Text"===e.type)return o().createElement(i.Fragment,{key:(0,f.toSlug)(e.name)},o().createElement("div",{ref:t=>x.current[e.id]=t,className:n},o().createElement(d.default,{replaceNewLine:!0,className:s},A(e)),o().createElement("div",{className:l},o().createElement(v.Field,{name:(0,f.toSlug)(e.name),question:e,isDisabled:a,isRequired:e.mandatory,validate:k(e.mandatory),component:q}),o().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(r=e.sub_question_rules)||void 0===r?void 0:r.length)>0&&e.sub_question_rules.map((t=>o().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))));if("TextArea"===e.type)return o().createElement(i.Fragment,{key:(0,f.toSlug)(e.name)},o().createElement("div",{ref:t=>x.current[e.id]=t,className:n},o().createElement(d.default,{replaceNewLine:!0,className:s},A(e)),o().createElement("div",{className:l},o().createElement(v.Field,{validate:k(e.mandatory),name:(0,f.toSlug)(e.name),id:(0,f.toSlug)(e.name),disabled:a,required:e.mandatory,component:"textarea"}),o().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(u=e.sub_question_rules)||void 0===u?void 0:u.length)>0&&e.sub_question_rules.map((t=>o().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))));if("CheckBox"===e.type)return o().createElement(i.Fragment,{key:(0,f.toSlug)(e.name)},o().createElement("div",{ref:t=>x.current[e.id]=t,style:{display:"flex"},className:n},o().createElement("div",{className:l},o().createElement("div",{className:"form-check abc-checkbox"},o().createElement(v.Field,{name:(0,f.toSlug)(e.name),id:(0,f.toSlug)(e.name),validate:k(e.mandatory),disabled:a,required:e.mandatory,type:"checkbox",className:"form-check-input",component:"input"}),o().createElement("label",{className:"form-check-label",htmlFor:(0,f.toSlug)(e.name)}))),o().createElement(d.default,{replaceNewLine:!0,className:`eq-checkbox-label ${s}`},A(e))),o().createElement(F,{name:(0,f.toSlug)(e.name)}),(null===(c=e.sub_question_rules)||void 0===c?void 0:c.length)>0&&e.sub_question_rules.map((t=>o().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))));if("RadioButtonList"===e.type){var m;const r=t.map((e=>({label:e.label,value:e.id})));return o().createElement(i.Fragment,{key:(0,f.toSlug)(e.name)},o().createElement("div",{key:(0,f.toSlug)(e.name),ref:t=>x.current[e.id]=t,className:n},o().createElement(d.default,{replaceNewLine:!0,className:s},A(e)),o().createElement("div",{className:l},o().createElement(v.Field,{name:(0,f.toSlug)(e.name),options:r,question:e,validate:k(e.mandatory),isDisabled:a,isRequired:e.mandatory,component:w}),o().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(m=e.sub_question_rules)||void 0===m?void 0:m.length)>0&&e.sub_question_rules.map((t=>o().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))))}if("ComboBox"===e.type||"CountryComboBox"===e.type){var h;const r=t.map((e=>({label:e.label,value:e.id})));return o().createElement(i.Fragment,{key:(0,f.toSlug)(e.name)},o().createElement("div",{ref:t=>x.current[e.id]=t,className:n},o().createElement(d.default,{replaceNewLine:!0,className:s},A(e)),o().createElement("div",{className:l},o().createElement(v.Field,{name:(0,f.toSlug)(e.name),options:r,question:e,validate:k(e.mandatory),isDisabled:a,isRequired:e.mandatory,component:N}),o().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(h=e.sub_question_rules)||void 0===h?void 0:h.length)>0&&e.sub_question_rules.map((t=>o().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))))}if("CheckBoxList"===e.type){var p;const r=t.map((e=>({label:e.label,value:e.id})));return o().createElement(i.Fragment,{key:(0,f.toSlug)(e.name)},o().createElement("div",{ref:t=>x.current[e.id]=t,className:n},o().createElement(d.default,{replaceNewLine:!0,className:s},A(e)),o().createElement("div",{className:l},o().createElement(v.Field,{name:(0,f.toSlug)(e.name),className:l,validate:k(e.mandatory),options:r,question:e,maxValues:e.max_selected_values,isDisabled:a,isRequired:e.mandatory,component:S}),o().createElement(F,{name:(0,f.toSlug)(e.name)}))),(null===(p=e.sub_question_rules)||void 0===p?void 0:p.length)>0&&e.sub_question_rules.map((t=>o().createElement(j,{key:t.id,when:(0,f.toSlug)(e.name),rule:t},D(t.sub_question)))))}return null},V=(e,t,a)=>{var r;if(e.mandatory&&(e=>!!x.current[e.id])(e)){const r=(0,f.toSlug)(e.name);t.hasOwnProperty((0,f.toSlug)(r))&&""!==t[(0,f.toSlug)(r)]&&0!==t[r].length||(a[r]=h)}null===(r=e.sub_question_rules)||void 0===r||r.forEach((e=>{V(e.sub_question,t,a)}))};if(!Object.keys(P).length)return null;const Q=(e,t,a)=>{var r;t.includes((0,f.toSlug)(e.name))&&a.push(e),null===(r=e.sub_question_rules)||void 0===r||r.forEach((e=>{Q(e.sub_question,t,a)}))},I=t=>{const a=[];return e.forEach((e=>{Q(e,t,a)})),a.sort(((e,t)=>e.order>t.order))[0]};return Object.keys(P).length?o().createElement("div",{className:r},o().createElement(v.Form,{validate:t=>{const a={};return e.forEach((e=>{V(e,t,a)})),a},onSubmit:e=>{a(e)},initialValues:P},(({handleSubmit:t,form:a,submitting:r,pristine:n,values:s})=>(E=t,o().createElement("form",{onSubmit:e=>{const r=a.getRegisteredFields().filter((e=>a.getFieldState(e).invalid));if(r.length>0){const e=I(r);y(r,x.current[e.id]),_&&(e=>{const t=I(e);x.current[t.id].scrollIntoView({behavior:"smooth",block:"center"})})(r)}t(e)},ref:O},u?o().createElement("fieldset",{disabled:"disabled"},e.map((e=>D(e)))):e.map((e=>D(e))),c&&o().createElement("pre",null,JSON.stringify(s,0,2)))))),!C&&o().createElement("button",{type:"submit",onClick:e=>{E(e)},style:{marginTop:10}},m)):null}));x.propTypes={extraQuestions:c().array.isRequired,userAnswers:c().array.isRequired,onAnswerChanges:c().func.isRequired,className:c().string,debug:c().bool,buttonText:c().string,questionContainerClassName:c().string,questionLabelContainerClassName:c().string,questionControlContainerClassName:c().string,RequiredErrorMessage:c().string,ValidationErrorClassName:c().string,allowExtraQuestionsEdit:c().bool,shouldScroll2FirstError:c().bool}},2230:(e,t,a)=>{a.d(t,{default:()=>h});var r=a(3838),n=a.n(r),s=a(580),l=a.n(s),i=a(6689),o=a.n(i),u=a(4656),c=a.n(u),d=a(418);const m=["onChange","value","className","options","id","children","error","disabled","name","ariaLabelledBy"];class h extends o().Component{constructor(e){super(e);let t=!!e.value&&e.value.find((t=>!e.options.map((e=>e.value)).includes(t)));this.state={otherChecked:!!t},this.handleChange=this.handleChange.bind(this),this.handleOtherCBChange=this.handleOtherCBChange.bind(this)}handleChange(e){let t=this.props.options.map((e=>e.value)),a=this.props.value?[...this.props.value]:[];if("checkbox"===e.target.type)if(e.target.checked){const t=isNaN(e.target.value)?e.target.value:parseInt(e.target.value);a.push(t)}else a=a.filter((t=>t!=e.target.value));else a=a.filter((e=>t.includes(e))),a.push(e.target.value);let r={target:{id:this.props.id,value:a,type:"checkboxlist"}};this.props.onChange(r)}handleOtherCBChange(e){this.setState({otherChecked:e.target.checked})}render(){let e,t=this.props,{onChange:a,value:r,className:s,options:l,id:i,children:u,error:h,disabled:p,name:b,ariaLabelledBy:g}=t,{otherChecked:v}=(n()(t,m),this.state),f=this.props.hasOwnProperty("inline"),y=this.props.hasOwnProperty("html"),_=this.props.hasOwnProperty("allowOther"),C=!!r&&r.find((e=>!l.map((e=>e.value)).includes(e))),E=this.props.hasOwnProperty("error")&&""!==h,q=this.props.hasOwnProperty("disabled")&&1==p;return e=f?{paddingLeft:"22px",marginLeft:"20px",float:"left"}:{paddingLeft:"22px",marginTop:"7px"},o().createElement("div",{id:`chl_wrapper_${i}`,"aria-labelledby":g},o().createElement("div",{className:"checkboxes-div"+(E?" error":"")},l.map((t=>{let a=!!r&&r.includes(t.value);return o().createElement("div",{className:"form-check abc-checkbox",key:"radio_key_"+t.value,style:e},o().createElement("input",{type:"checkbox",id:`cb_${i}_${t.value}`,name:b||i,checked:a,disabled:q,onChange:this.handleChange,className:"form-check-input",value:t.value}),o().createElement("label",{className:"form-check-label",htmlFor:`cb_${i}_${t.value}`},y&&o().createElement(d.default,null,t.label),!y&&t.label))})),_&&o().createElement("div",{className:"form-check abc-checkbox",style:e},o().createElement("input",{type:"checkbox",id:"cb_other"+i,checked:v,disabled:q,onChange:this.handleOtherCBChange,className:"form-check-input",value:"other"}),o().createElement("label",{className:"form-check-label",htmlFor:"cb_other"+i},c().translate("general.other"))),_&&v&&o().createElement("div",{style:{paddingLeft:"22px",width:"50%"}},o().createElement("input",{className:"form-control",disabled:q,onChange:this.handleChange,value:C}))),E&&o().createElement("p",{className:"error-label"},h))}}h.defaultProps={ariaLabelledBy:null},h.propTypes={id:l().string.isRequired}},401:(e,t,a)=>{a.d(t,{default:()=>g});var r=a(8213),n=a.n(r),s=a(8779),l=a.n(s),i=a(3838),o=a.n(i),u=a(6689),c=a.n(u),d=a(1929),m=a.n(d);const h=["onChange","value","className","error","clearable","disabled","overrideCSS","ariaLabelledBy"];function p(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function b(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?p(Object(a),!0).forEach((function(t){l()(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):p(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}class g extends c().Component{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}handleChange(e){let t=null;t=this.props.isMulti?e?e.map((e=>e.value)):null:e?e.value:null;let a={target:{id:this.props.id,value:t,type:"dropdown"}};this.props.onChange(a)}render(){let e=this.props,{onChange:t,value:a,className:r,error:s,clearable:l,disabled:i,overrideCSS:u,ariaLabelledBy:d}=e,p=o()(e,h),g=this.props.hasOwnProperty("error")&&""!=s,v=this.props.hasOwnProperty("clearable"),f=this.props.hasOwnProperty("disabled")&&1==i,y=null,_=r;this.props.hasOwnProperty("overrideCSS")&&0!=u||(_="dropdown "+r+" "+(g?"error":"")),y=this.props.isMulti?this.props.options.filter((e=>a.includes(e.value))):a instanceof Object||null==a?a:this.props.options.find((e=>e.value==a));const C={menu:e=>b(b({},e),{},{zIndex:999})};return c().createElement("div",null,c().createElement(m(),n()({className:_,value:y,onChange:this.handleChange,isClearable:v,isDisabled:f,styles:C,"aria-labelledby":d},p)),g&&c().createElement("p",{className:"error-label"},s))}}g.defaultProps={ariaLabelledBy:null}},7027:(e,t,a)=>{a.d(t,{default:()=>d});var r=a(3838),n=a.n(r),s=a(6689),l=a.n(s),i=a(418),o=a(580),u=a.n(o);const c=["onChange","value","className","error","ariaLabelledBy","disabled","options","id","name"];class d extends l().Component{constructor(e){super(e),this.state={value:e.value},this.handleChange=this.handleChange.bind(this)}handleChange(e){let t={target:{id:this.props.id,value:e.target.value,type:"radio"}};this.props.onChange(t)}getLabel(e,t,a,r,n){return a?l().createElement("label",{className:"form-check-label",htmlFor:`radio_${t}_${e.value}`,style:{display:"inline-block"}},n&&l().createElement(i.default,null,e.label),!n&&e.label):r?l().createElement("label",{className:"form-check-label",htmlFor:`radio_${t}_${e.value}`},e.label):l().createElement("label",{className:"form-check-label",htmlFor:`radio_${t}_${e.value}`,style:{display:"inline-block"}},l().createElement("h4",{style:{marginTop:"0px"}},e.label),l().createElement(i.default,null,e.description))}render(){let e,t=this.props,{onChange:a,value:r,className:s,error:i,ariaLabelledBy:o,disabled:u,options:d,id:m,name:h}=t,p=(n()(t,c),this.props.hasOwnProperty("error")&&""!=i),b=this.props.hasOwnProperty("inline"),g=this.props.hasOwnProperty("simple"),v=this.props.hasOwnProperty("html"),f=this.props.hasOwnProperty("disabled")&&1==u;return e=b?{paddingLeft:"22px",marginLeft:"20px",float:"left"}:{paddingLeft:"22px"},l().createElement("div",{id:`rl_wrapper_${m}`,"aria-labelledby":o},d.map((t=>{let a=t.value==r;return l().createElement("div",{className:"form-check abc-radio",key:`radio_key_${m}_${t.value}`,style:e},l().createElement("input",{className:"form-check-input",type:"radio",id:`radio_${m}_${t.value}`,value:t.value,checked:a,onChange:this.handleChange,disabled:f,name:h||`radio_${m}`}),this.getLabel(t,m,b,g,v))})),p&&l().createElement("p",{className:"error-label"},i))}}d.defaultProps={ariaLabelledBy:null},d.propTypes={id:u().string.isRequired}},1833:(e,t,a)=>{a.d(t,{default:()=>c});var r=a(8213),n=a.n(r),s=a(3838),l=a.n(s),i=a(6689),o=a.n(i);const u=["onChange","value","className","error","ariaLabelledBy","containerClassName"];class c extends o().Component{constructor(e){super(e),this.handleChange=this.handleChange.bind(this)}componentDidUpdate(e,t,a){this.props.value!==e.value&&(this.input.value=this.props.value)}handleChange(e){this.props.onChange(e)}render(){let e=this.props,{onChange:t,value:a,className:r,error:s,ariaLabelledBy:i,containerClassName:c}=e,d=l()(e,u),m=this.props.hasOwnProperty("error")&&""!==s,h=this.props.hasOwnProperty("className")?r:"form-control",p=this.props.hasOwnProperty("containerClassName")?c:"container-form-control";return o().createElement("div",{className:p},o().createElement("input",n()({className:`${h} ${m?"error":""}`,ref:e=>{this.input=e},defaultValue:a,"aria-labelledby":i,onChange:this.handleChange},d)),m&&o().createElement("p",{className:"error-label"},s))}}c.defaultProps={ariaLabelledBy:null}},418:(e,t,a)=>{a.d(t,{default:()=>s});var r=a(6689),n=a.n(r);const s=({children:e,replaceNewLine:t=!1,className:a=""})=>n().createElement("span",{className:a,dangerouslySetInnerHTML:{__html:t?null==e?void 0:e.replace(/\n/g,"<br />"):e}})},6793:(e,t,a)=>{a.d(t,{toSlug:()=>r});a(8362),a(6530);const r=e=>(e=e.toLowerCase()).replace(/[^a-zA-Z0-9]+/g,"_")},1995:(e,t,a)=>{a.d(t,{default:()=>p});var r=a(8779),n=a.n(r),s=a(6793);function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){n()(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}const o="ComboBox",u="CheckBoxList",c="RadioButtonList",d=[o,u,c],m="And",h="Equal";class p{constructor(e,t=[]){n()(this,"_parseQuestion",(e=>{if(this.questionByName[(0,s.toSlug)(e.name)]=e,this.questionById[parseInt(e.id)]=e,e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules)this.rules[parseInt(t.id)]=t,this._parseQuestion(t.sub_question)})),n()(this,"_parseQuestions",(()=>{for(let e of this.questions)this._parseQuestion(e)})),n()(this,"_allowsValues",(e=>d.includes(e.type))),n()(this,"_allowsValue",((e,t)=>{let a=t.value.split(",").map((e=>parseInt(e)));for(let t of a)if(!e.values.map((e=>e.id)).includes(t))return!1;return!0})),n()(this,"_getAnswerFor",(e=>{let t=Number.isInteger(e)?e:e.id,a=this.answers[t]||null;return a||null})),n()(this,"_hasValue",(e=>""!==e.value)),n()(this,"_answerContains",((e,t)=>e.value.split(",").includes(t))),n()(this,"_isSubQuestionVisible",(e=>{let t=e.answer_values_operator===m;const a=this._getAnswerFor(e.parent_question_id);if(a)switch(e.visibility_condition){case h:for(let r of e.answer_values)t=e.answer_values_operator===m?t&&this._answerContains(a,r):t||this._answerContains(a,r);break;case"NotEqual":for(let r of e.answer_values)t=e.answer_values_operator===m?t&&!this._answerContains(a,r):t||!this._answerContains(a,r)}else t=e.visibility_condition!==h;return"Visible"===e.visibility?t:!t})),n()(this,"_isAnswered",(e=>{const t=this._getAnswerFor(e);if("MainQuestion"===e.class)return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));for(let a of e.parent_rules)if(this._isSubQuestionVisible(this.rules[a]))return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));return!0})),n()(this,"_checkQuestion",(e=>{let t=this._isAnswered(e);if(e.hasOwnProperty("sub_question_rules"))for(let a of e.sub_question_rules)t=t&&this._checkQuestion(a.sub_question);return t})),n()(this,"_formatQuestionAnswer",(e=>{var t,a;let r={};const n=(0,s.toSlug)(e.name);let l=null===(t=this.originalAnswers.find((t=>t.question_id===e.id)))||void 0===t?void 0:t.value;if(!l&&(null==e||null===(a=e.values)||void 0===a?void 0:a.length)>0){const t=e.values.find((e=>e.is_default));t&&(l=t.id.toString())}if(l&&("CheckBox"===e.type&&(l="false"!==l&&!!l),e.type!==c&&e.type!==o||(l=parseInt(l)),e.type===u&&(l=l.split(",").map((e=>parseInt(e)))||[])),r[n]=l||"",e.type===u&&""===r[n]&&(r[n]=[]),e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules){let e=this._formatQuestionAnswer(t.sub_question);r=i(i({},r),e)}return r})),n()(this,"formatAnswers",(()=>{let e={};return this.questions.forEach((t=>{let a=this._formatQuestionAnswer(t);e=i(i({},e),a)})),e})),n()(this,"completed",(()=>{let e=!0;for(let t of this.questions)e=e&&this._checkQuestion(t);return e})),n()(this,"getQuestionByName",(e=>{const t=(0,s.toSlug)(e);return this.questionByName[e]||this.questionByName[t]||null})),n()(this,"getQuestionById",(e=>this.questionById[parseInt(e)]||null)),this.questions=e,this.originalAnswers=t,this.answers=[];for(let e of this.originalAnswers)this.answers[e.question_id]=e;this.questionByName={},this.questionById={},this.rules={},this._parseQuestions()}}},8779:e=>{e.exports=require("@babel/runtime/helpers/defineProperty")},8213:e=>{e.exports=require("@babel/runtime/helpers/extends")},3838:e=>{e.exports=require("@babel/runtime/helpers/objectWithoutProperties")},4656:e=>{e.exports=require("i18n-react/dist/i18n-react")},8362:e=>{e.exports=require("moment-timezone")},580:e=>{e.exports=require("prop-types")},6689:e=>{e.exports=require("react")},1929:e=>{e.exports=require("react-select")},6530:e=>{e.exports=require("urijs")}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,a),s.exports}(()=>{a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t}})(),(()=>{a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}})(),(()=>{a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})();var r={};return(()=>{a.r(r),a.d(r,{default:()=>u});var e=a(6689),t=a.n(e),n=a(4656),s=a.n(n),l=(a(3932),a(580)),i=a.n(l);class o extends t().Component{constructor(e){super(e),this.onSearchClick=this.onSearchClick.bind(this),this.onClearClick=this.onClearClick.bind(this),this.onKeyPressed=this.onKeyPressed.bind(this),this.onChange=this.onChange.bind(this),this.state={value:e.value}}onSearchClick(e){let{preventEvents:t}=this.props;t&&e.preventDefault(),this.doFiltering(this.state.value)}onClearClick(e){let{preventEvents:t}=this.props;t&&e.preventDefault(),this.doFiltering(""),this.setState({value:""})}doFiltering(e){this.props.onSearch(e.trim())}onKeyPressed(e){13===(e.keyCode||e.which)&&this.doFiltering(this.state.value)}onChange(e){this.setState({value:e.target.value}),this.props.onChange&&this.props.onChange(e.target.value)}render(){let{value:e}=this.state;return t().createElement("div",{className:"row search-container"},t().createElement("div",{className:"col-md-12"},t().createElement("div",{className:"input-group"},t().createElement("input",{type:"text",value:e,className:"form-control",placeholder:this.props.placeholder,onKeyPress:this.onKeyPressed,onChange:this.onChange}),t().createElement("span",{className:"input-group-btn",style:{width:"5%"}},t().createElement("button",{onClick:this.onSearchClick,className:"btn btn-default",title:s().translate("general.search")},t().createElement("i",{className:"fa fa-search"})),t().createElement("button",{onClick:this.onClearClick,className:"btn btn-default",title:s().translate("general.clear")},t().createElement("i",{className:"fa fa-times"}))))))}}o.defaultProps={preventEvents:!1,onChange:null},o.propTypes={preventEvents:i().bool,onChange:i().func};const u=o})(),r})()));
2
+ //# sourceMappingURL=free-text-search.js.map