@kando-env/kando-ui 1.2.55 → 1.2.57

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 (33) hide show
  1. package/lib/Router.js +3 -3
  2. package/lib/Widgets/Map/edges/Edge.js +1 -1
  3. package/lib/hooks/useUserTimeZone.js +36 -0
  4. package/lib/i18n/en.json +5 -2
  5. package/lib/i18n/he.json +3 -1
  6. package/lib/macros/getVersion.js +1 -1
  7. package/lib/pages/ImportGisPage/ValidationResponse.js +2 -2
  8. package/lib/pages/SamplingsPage/NewSamplingAction.js +2 -2
  9. package/lib/pages/SamplingsPage/SamplingActionDropdown.js +19 -24
  10. package/lib/pages/SamplingsPage/SamplingMobileModal.js +79 -51
  11. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +2 -2
  12. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +317 -0
  13. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +114 -250
  14. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +198 -0
  15. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +200 -0
  16. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +14 -10
  17. package/lib/pages/SamplingsPage/SamplingProperties/style.module.scss +100 -0
  18. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +11 -18
  19. package/lib/pages/SamplingsPage/SamplingsMobileList.js +3 -2
  20. package/lib/pages/SamplingsPage/SamplingsPage.js +19 -2
  21. package/lib/pages/SamplingsPage/samplingsPageUtils.js +18 -4
  22. package/lib/pages/SamplingsPage/style.module.scss +37 -2
  23. package/lib/pages/SamplingsPage/table.styles.scss +1 -0
  24. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +4 -3
  25. package/lib/ui-kit/DropDown/DropDown.js +2 -4
  26. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +1 -1
  27. package/lib/ui-kit/KandoTable/KandoTable.js +4 -2
  28. package/lib/ui-kit/KandoTable/style.module.scss +5 -0
  29. package/lib/ui-kit/MobileInput/MobileInput.js +4 -4
  30. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +11 -5
  31. package/package.json +1 -1
  32. package/lib/pages/SamplingsPage/SamplingProperties/SamplingMobileProperties.js +0 -200
  33. package/lib/pages/SamplingsPage/SamplingProperties/bootstrap.overrides.scss +0 -7
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.SamplingProperties = void 0;
11
+
12
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
15
+
16
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _axios = _interopRequireDefault(require("axios"));
21
+
22
+ var _moment = _interopRequireDefault(require("moment"));
23
+
24
+ var _reactDeviceDetect = require("react-device-detect");
25
+
26
+ var _formik = require("formik");
27
+
28
+ var _reactRouterDom = require("react-router-dom");
29
+
30
+ var _reactRedux = require("react-redux");
31
+
32
+ var _Layout = _interopRequireDefault(require("ui-kit/Layout/Layout"));
33
+
34
+ var _i18n = _interopRequireDefault(require("utilities/i18n"));
35
+
36
+ var _useQueryURL = _interopRequireDefault(require("hooks/useQueryURL"));
37
+
38
+ var _Spinner = require("components/Spinner/Spinner");
39
+
40
+ var _urls = require("utilities/urls");
41
+
42
+ var _samplingsPageUtils = require("../samplingsPageUtils");
43
+
44
+ var _SamplingPropertiesForm = require("./SamplingPropertiesForm");
45
+
46
+ var _SamplingPropertiesHead = require("./SamplingPropertiesHead");
47
+
48
+ var _SamplingPropertiesHeadMobile = require("./SamplingPropertiesHeadMobile");
49
+
50
+ var _samplingPropertiesUtils = require("./samplingPropertiesUtils");
51
+
52
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
53
+
54
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
55
+
56
+ /*
57
+ * Properties and Cancelling forms.
58
+ **/
59
+ var SamplingProperties = function SamplingProperties() {
60
+ var _useState = (0, _react.useState)((0, _moment.default)(Date.now()).format('DD/MM/YYYY hh:mm')),
61
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
62
+ collectionTime = _useState2[0],
63
+ setCollectionTime = _useState2[1];
64
+
65
+ var _useState3 = (0, _react.useState)([]),
66
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
67
+ photos = _useState4[0],
68
+ setPhotos = _useState4[1];
69
+
70
+ var _useState5 = (0, _react.useState)([]),
71
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
72
+ photosToDelete = _useState6[0],
73
+ setPhotosToDelete = _useState6[1];
74
+
75
+ var _useState7 = (0, _react.useState)(_i18n.default.t('buttons.save')),
76
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
77
+ savingMsg = _useState8[0],
78
+ setSavingMsg = _useState8[1];
79
+
80
+ var _useState9 = (0, _react.useState)(false),
81
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
82
+ samplingUpdated = _useState10[0],
83
+ setSamplingUpdated = _useState10[1];
84
+
85
+ var _useState11 = (0, _react.useState)(undefined),
86
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
87
+ samplingPlan = _useState12[0],
88
+ setSamplingPlan = _useState12[1];
89
+
90
+ var history = (0, _reactRouterDom.useHistory)();
91
+ var query = (0, _useQueryURL.default)();
92
+ var waterAuthorityIdFromUrl = parseInt(query.get('water_authority_id') || '0');
93
+ var navContext = (0, _reactRedux.useSelector)(function (state) {
94
+ return state.nav_context_data.navContext;
95
+ });
96
+ var userInfo = (0, _reactRedux.useSelector)(function (state) {
97
+ return state.permissions.user_info;
98
+ });
99
+ var dateFormat = userInfo.date_time_format === 'us' ? 'MMM d, yyyy hh:mm aa' : 'd/MM/yyyy HH:mm';
100
+
101
+ var _useState13 = (0, _react.useState)(),
102
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
103
+ pageType = _useState14[0],
104
+ setPageType = _useState14[1];
105
+
106
+ var _useState15 = (0, _react.useState)(),
107
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
108
+ samplingProperties = _useState16[0],
109
+ setSamplingProperties = _useState16[1];
110
+
111
+ var validationSchema = pageType === 'collect' ? _samplingPropertiesUtils.propertiesValidationSchema : _samplingPropertiesUtils.cancellationValidationSchema;
112
+ var formik = (0, _formik.useFormik)({
113
+ enableReinitialize: true,
114
+ initialValues: _samplingPropertiesUtils.samplingProperty,
115
+ validationSchema: validationSchema,
116
+ validateOnChange: false,
117
+ validateOnBlur: true,
118
+ onSubmit: function onSubmit(values) {
119
+ handleSubmit(values);
120
+ }
121
+ });
122
+
123
+ var handleClose = function handleClose() {
124
+ var samplingsListRoute = (0, _urls.urls)({
125
+ locale: navContext.locale,
126
+ waterAuthorityId: waterAuthorityIdFromUrl
127
+ }).samplingsPage.samplingsListRoute.url;
128
+ history.push(samplingsListRoute);
129
+ };
130
+
131
+ var handleSubmit = function handleSubmit(values) {
132
+ setSavingMsg(_i18n.default.t('buttons.saving'));
133
+ values.pictures_attributes = photos;
134
+ var saveFormData = formDataBuilder(values);
135
+ updateOrCreate(saveFormData);
136
+ };
137
+
138
+ var setOriginalSaveMessageWithTimeout = function setOriginalSaveMessageWithTimeout() {
139
+ setTimeout(function () {
140
+ setSavingMsg(_i18n.default.t('buttons.save'));
141
+ }, 3000);
142
+ };
143
+
144
+ var formDataBuilder = function formDataBuilder(values) {
145
+ var formData = new FormData();
146
+
147
+ for (var key in values) {
148
+ if (key !== 'pictures_attributes') {
149
+ var value = values[key] === null ? '' : values[key];
150
+ formData.append("sampling[".concat(key, "]"), value);
151
+ }
152
+ }
153
+
154
+ var uniquePhotosToDelete = (0, _toConsumableArray2.default)(new Set(photosToDelete));
155
+ uniquePhotosToDelete.length !== 0 && uniquePhotosToDelete.forEach(function (id, index) {
156
+ formData.append("sampling[pictures_attributes][".concat(index, "][id]"), JSON.stringify(id));
157
+ formData.append("sampling[pictures_attributes][".concat(index, "][_destroy]"), 'true');
158
+ });
159
+ return formData;
160
+ };
161
+
162
+ var updateOrCreate = function updateOrCreate(formData) {
163
+ var _samplingProperties$s;
164
+
165
+ var updateOrCreateSuccess = function updateOrCreateSuccess(msg) {
166
+ setSavingMsg(_i18n.default.t(msg));
167
+ setSamplingUpdated(true);
168
+ setOriginalSaveMessageWithTimeout();
169
+ handleClose();
170
+ };
171
+
172
+ if ((samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s = samplingProperties.sampling) === null || _samplingProperties$s === void 0 ? void 0 : _samplingProperties$s.id) === null) {
173
+ // create
174
+ formData.append("sampling[date]", collectionTime);
175
+
176
+ _axios.default.post((0, _urls.urls)().samplingProperties.createSampling.url, formData).then(function () {
177
+ updateOrCreateSuccess('buttons.created');
178
+ }).catch(function () {
179
+ setSavingMsg(_i18n.default.t('buttons.error'));
180
+ setOriginalSaveMessageWithTimeout();
181
+ });
182
+ } else {
183
+ var _samplingProperties$s2;
184
+
185
+ // update
186
+ _axios.default.put((0, _urls.urls)({
187
+ samplingId: samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s2 = samplingProperties.sampling) === null || _samplingProperties$s2 === void 0 ? void 0 : _samplingProperties$s2.id
188
+ }).samplingProperties.updateSampling.url, formData).then(function () {
189
+ updateOrCreateSuccess('buttons.updated');
190
+ }).catch(function () {
191
+ setSavingMsg(_i18n.default.t('buttons.error'));
192
+ setOriginalSaveMessageWithTimeout();
193
+ });
194
+ }
195
+ };
196
+
197
+ var detectPageType = function detectPageType(samplingProperties, collectionTimeServer, op) {
198
+ var _pageType;
199
+
200
+ if (op === 'edit') {
201
+ _pageType = samplingProperties.sampling.is_canceled ? 'cancel' : 'collect';
202
+
203
+ if (collectionTimeServer) {
204
+ setCollectionTime(new Date(collectionTimeServer));
205
+ } else {
206
+ setCollectionTime(new Date());
207
+ }
208
+ } else if (op === _samplingsPageUtils.COLLECT_SAMPLING_OP) {
209
+ setCollectionTime(new Date());
210
+ _pageType = 'collect';
211
+ } else if (op === _samplingsPageUtils.CANCEL_SAMPLING_OP) {
212
+ setCollectionTime(new Date(collectionTimeServer));
213
+ _pageType = 'cancel';
214
+ }
215
+
216
+ return _pageType;
217
+ };
218
+
219
+ var isPropertiesPage = pageType === 'edit';
220
+
221
+ var _useParams = (0, _reactRouterDom.useParams)(),
222
+ sampleId = _useParams.sampleId;
223
+
224
+ var fetchSamplingProperties = function fetchSamplingProperties() {
225
+ var samplingId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sampleId;
226
+ var op = arguments.length > 1 ? arguments[1] : undefined;
227
+
228
+ _axios.default.get((0, _urls.urls)({
229
+ samplingId: samplingId
230
+ }).samplingProperties.fetchSampling.url).then(function (res) {
231
+ var samplingRes = res.data;
232
+ var samplingProperties = samplingRes.sampling_properties;
233
+ var collectionTimeServer = samplingProperties.sampling.collection_time;
234
+
235
+ var _pageType = detectPageType(samplingProperties, collectionTimeServer, op);
236
+
237
+ setPageType(_pageType);
238
+ var isCanceled = _pageType === 'cancel' ? true : _pageType === 'collect' ? false : samplingProperties.sampling.is_canceled || false;
239
+ var pageCollectionTime = _pageType === 'collect' ? collectionTime : samplingProperties.sampling.collection_time;
240
+ var sam = samplingProperties.sampling;
241
+ formik.setValues({
242
+ lab_id: sam.lab_id,
243
+ collection_time: pageCollectionTime,
244
+ pump_sampling_volume: sam.pump_sampling_volume,
245
+ pump_battery_level: sam.pump_battery_level,
246
+ description: sam.description,
247
+ kando_rep: sam.kando_rep,
248
+ sampling_plan_id: sam.sampling_plan_id,
249
+ cancellation_reason: sam.cancellation_reason || '',
250
+ is_canceled: isCanceled
251
+ });
252
+ setSamplingProperties(samplingProperties);
253
+ setSamplingPlan(samplingRes.sampling_plan);
254
+ });
255
+ };
256
+
257
+ var getUrlQueryOp = function getUrlQueryOp() {
258
+ var op = query.get('op'); // if not present then default op is 'collecting'
259
+
260
+ if ([undefined, null, ''].includes(op)) {
261
+ return _samplingsPageUtils.COLLECT_SAMPLING_OP;
262
+ }
263
+
264
+ return op;
265
+ };
266
+
267
+ (0, _react.useEffect)(function () {
268
+ fetchSamplingProperties(sampleId, getUrlQueryOp());
269
+ }, [samplingUpdated]);
270
+
271
+ if (!samplingPlan || !samplingProperties) {
272
+ return /*#__PURE__*/_react.default.createElement(_Spinner.Spinner, null);
273
+ }
274
+
275
+ return /*#__PURE__*/_react.default.createElement("form", {
276
+ onSubmit: formik.handleSubmit
277
+ }, /*#__PURE__*/_react.default.createElement(_Layout.default, null, /*#__PURE__*/_react.default.createElement(SamplingPropertiesStyle, null, !_reactDeviceDetect.isMobile && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesHead.SamplingPropertiesHead, {
278
+ samplingProperties: samplingProperties,
279
+ sampling: samplingPlan,
280
+ formik: formik,
281
+ pageType: pageType,
282
+ collectionDate: collectionTime,
283
+ setCollectionDate: setCollectionTime,
284
+ setSamplingUpdated: setSamplingUpdated,
285
+ isDatePickerDisabled: isPropertiesPage,
286
+ dateFormat: dateFormat
287
+ }), _reactDeviceDetect.isMobile && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesHeadMobile.SamplingPropertiesHeadMobile, {
288
+ samplingProperties: samplingProperties,
289
+ sampling: samplingPlan,
290
+ formik: formik,
291
+ pageType: pageType,
292
+ collectionDate: collectionTime,
293
+ setCollectionDate: setCollectionTime,
294
+ setSamplingUpdated: setSamplingUpdated,
295
+ isDatePickerDisabled: isPropertiesPage,
296
+ dateFormat: dateFormat
297
+ }), samplingProperties !== undefined && pageType !== undefined && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesForm.SamplingPropertiesForm, {
298
+ samplingProperties: samplingProperties,
299
+ sampling: samplingPlan,
300
+ pageType: pageType,
301
+ setSamplingUpdated: setSamplingUpdated,
302
+ savingMsg: savingMsg,
303
+ handleClose: handleClose,
304
+ setPhotosToDelete: setPhotosToDelete,
305
+ setPhotos: setPhotos,
306
+ photos: photos,
307
+ formik: formik
308
+ }))));
309
+ };
310
+
311
+ exports.SamplingProperties = SamplingProperties;
312
+
313
+ var SamplingPropertiesStyle = _styledComponents.default.div.withConfig({
314
+ displayName: "SamplingProperties__SamplingPropertiesStyle",
315
+ componentId: "sc-opklsf-0"
316
+ })(["", " ", ""], !_reactDeviceDetect.isMobile ? 'width: 830px;' : '', !_reactDeviceDetect.isMobile ? 'margin: 100px auto;' : '');
317
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWdlcy9TYW1wbGluZ3NQYWdlL1NhbXBsaW5nUHJvcGVydGllcy9TYW1wbGluZ1Byb3BlcnRpZXMudHN4Il0sIm5hbWVzIjpbIlNhbXBsaW5nUHJvcGVydGllcyIsIkRhdGUiLCJub3ciLCJmb3JtYXQiLCJjb2xsZWN0aW9uVGltZSIsInNldENvbGxlY3Rpb25UaW1lIiwicGhvdG9zIiwic2V0UGhvdG9zIiwicGhvdG9zVG9EZWxldGUiLCJzZXRQaG90b3NUb0RlbGV0ZSIsImkxOG4iLCJ0Iiwic2F2aW5nTXNnIiwic2V0U2F2aW5nTXNnIiwic2FtcGxpbmdVcGRhdGVkIiwic2V0U2FtcGxpbmdVcGRhdGVkIiwidW5kZWZpbmVkIiwic2FtcGxpbmdQbGFuIiwic2V0U2FtcGxpbmdQbGFuIiwiaGlzdG9yeSIsInF1ZXJ5Iiwid2F0ZXJBdXRob3JpdHlJZEZyb21VcmwiLCJwYXJzZUludCIsImdldCIsIm5hdkNvbnRleHQiLCJzdGF0ZSIsIm5hdl9jb250ZXh0X2RhdGEiLCJ1c2VySW5mbyIsInBlcm1pc3Npb25zIiwidXNlcl9pbmZvIiwiZGF0ZUZvcm1hdCIsImRhdGVfdGltZV9mb3JtYXQiLCJwYWdlVHlwZSIsInNldFBhZ2VUeXBlIiwic2FtcGxpbmdQcm9wZXJ0aWVzIiwic2V0U2FtcGxpbmdQcm9wZXJ0aWVzIiwidmFsaWRhdGlvblNjaGVtYSIsInByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hIiwiY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYSIsImZvcm1payIsImVuYWJsZVJlaW5pdGlhbGl6ZSIsImluaXRpYWxWYWx1ZXMiLCJzYW1wbGluZ1Byb3BlcnR5IiwidmFsaWRhdGVPbkNoYW5nZSIsInZhbGlkYXRlT25CbHVyIiwib25TdWJtaXQiLCJ2YWx1ZXMiLCJoYW5kbGVTdWJtaXQiLCJoYW5kbGVDbG9zZSIsInNhbXBsaW5nc0xpc3RSb3V0ZSIsImxvY2FsZSIsIndhdGVyQXV0aG9yaXR5SWQiLCJzYW1wbGluZ3NQYWdlIiwidXJsIiwicHVzaCIsInBpY3R1cmVzX2F0dHJpYnV0ZXMiLCJzYXZlRm9ybURhdGEiLCJmb3JtRGF0YUJ1aWxkZXIiLCJ1cGRhdGVPckNyZWF0ZSIsInNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCIsInNldFRpbWVvdXQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwia2V5IiwidmFsdWUiLCJhcHBlbmQiLCJ1bmlxdWVQaG90b3NUb0RlbGV0ZSIsIlNldCIsImxlbmd0aCIsImZvckVhY2giLCJpZCIsImluZGV4IiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZU9yQ3JlYXRlU3VjY2VzcyIsIm1zZyIsInNhbXBsaW5nIiwiYXhpb3MiLCJwb3N0IiwiY3JlYXRlU2FtcGxpbmciLCJ0aGVuIiwiY2F0Y2giLCJwdXQiLCJzYW1wbGluZ0lkIiwidXBkYXRlU2FtcGxpbmciLCJkZXRlY3RQYWdlVHlwZSIsImNvbGxlY3Rpb25UaW1lU2VydmVyIiwib3AiLCJfcGFnZVR5cGUiLCJpc19jYW5jZWxlZCIsIkNPTExFQ1RfU0FNUExJTkdfT1AiLCJDQU5DRUxfU0FNUExJTkdfT1AiLCJpc1Byb3BlcnRpZXNQYWdlIiwic2FtcGxlSWQiLCJmZXRjaFNhbXBsaW5nUHJvcGVydGllcyIsImZldGNoU2FtcGxpbmciLCJyZXMiLCJzYW1wbGluZ1JlcyIsImRhdGEiLCJzYW1wbGluZ19wcm9wZXJ0aWVzIiwiY29sbGVjdGlvbl90aW1lIiwiaXNDYW5jZWxlZCIsInBhZ2VDb2xsZWN0aW9uVGltZSIsInNhbSIsInNldFZhbHVlcyIsImxhYl9pZCIsInB1bXBfc2FtcGxpbmdfdm9sdW1lIiwicHVtcF9iYXR0ZXJ5X2xldmVsIiwiZGVzY3JpcHRpb24iLCJrYW5kb19yZXAiLCJzYW1wbGluZ19wbGFuX2lkIiwiY2FuY2VsbGF0aW9uX3JlYXNvbiIsInNhbXBsaW5nX3BsYW4iLCJnZXRVcmxRdWVyeU9wIiwiaW5jbHVkZXMiLCJpc01vYmlsZSIsIlNhbXBsaW5nUHJvcGVydGllc1N0eWxlIiwic3R5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QSxrQkFBa0IsRUFBRWpCLGtCQUp0QjtBQUtFLElBQUEsU0FBUyxFQUFFSCxTQUxiO0FBTUUsSUFBQSxXQUFXLEVBQUVvQyxXQU5mO0FBT0UsSUFBQSxpQkFBaUIsRUFBRXZDLGlCQVByQjtBQVFFLElBQUEsU0FBUyxFQUFFRixTQVJiO0FBU0UsSUFBQSxNQUFNLEVBQUVELE1BVFY7QUFVRSxJQUFBLE1BQU0sRUFBRWlDO0FBVlYsSUE5QkosQ0FERixDQURGLENBREY7QUFrREQsQ0F6UU07Ozs7QUEyUVAsSUFBTTZFLHVCQUF1QixHQUFHQywwQkFBT0MsR0FBVjtBQUFBO0FBQUE7QUFBQSxrQkFDekIsQ0FBQ0gsMkJBQUQsR0FBWSxlQUFaLEdBQThCLEVBREwsRUFFekIsQ0FBQ0EsMkJBQUQsR0FBWSxxQkFBWixHQUFvQyxFQUZYLENBQTdCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFByb3BlcnRpZXMgYW5kIENhbmNlbGxpbmcgZm9ybXMuXG4gKiovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cy9tYWNybyc7XG5pbXBvcnQgeyBGb3JtaWtDb25maWcgfSBmcm9tICdmb3JtaWsvZGlzdC90eXBlcyc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJ3JlYWN0LWRldmljZS1kZXRlY3QnO1xuaW1wb3J0IHsgdXNlRm9ybWlrIH0gZnJvbSAnZm9ybWlrJztcbmltcG9ydCB7IHVzZUhpc3RvcnksIHVzZVBhcmFtcyB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBMYXlvdXQgZnJvbSAnc3JjL3VpLWtpdC9MYXlvdXQvTGF5b3V0JztcbmltcG9ydCBpMThuIGZyb20gJ3NyYy91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgdXNlUXVlcnlVUkwgZnJvbSAnc3JjL2hvb2tzL3VzZVF1ZXJ5VVJMJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICdzcmMvY29tcG9uZW50cy9TcGlubmVyL1NwaW5uZXInO1xuaW1wb3J0IHsgYXBwUmVkdWNlciB9IGZyb20gJ3NyYy9zdG9yZS9yb290UmVkdWNlcic7XG5pbXBvcnQgeyB1cmxzIH0gZnJvbSAnc3JjL3V0aWxpdGllcy91cmxzJztcblxuaW1wb3J0IHtcbiAgQ0FOQ0VMX1NBTVBMSU5HX09QLFxuICBDT0xMRUNUX1NBTVBMSU5HX09QLFxuICBTYW1wbGluZ0ZldGNoRGF0YSxcbn0gZnJvbSAnLi4vc2FtcGxpbmdzUGFnZVV0aWxzJztcbmltcG9ydCB7IFNhbXBsaW5nUHJvcGVydGllc0Zvcm0gfSBmcm9tICcuL1NhbXBsaW5nUHJvcGVydGllc0Zvcm0nO1xuaW1wb3J0IHsgU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZCB9IGZyb20gJy4vU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZCc7XG5pbXBvcnQgeyBTYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlIH0gZnJvbSAnLi9TYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlJztcbmltcG9ydCB7XG4gIGNhbmNlbGxhdGlvblZhbGlkYXRpb25TY2hlbWEsXG4gIHByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hLFxuICBUU2FtcGxpbmdQcm9wZXJ0aWVzLFxuICBzYW1wbGluZ1Byb3BlcnR5LFxuICBGb3JtVHlwZSxcbn0gZnJvbSAnLi9zYW1wbGluZ1Byb3BlcnRpZXNVdGlscyc7XG5cbmV4cG9ydCBjb25zdCBTYW1wbGluZ1Byb3BlcnRpZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBbY29sbGVjdGlvblRpbWUsIHNldENvbGxlY3Rpb25UaW1lXSA9IHVzZVN0YXRlPHN0cmluZyB8IERhdGUgfCBudWxsPihcbiAgICBtb21lbnQoRGF0ZS5ub3coKSkuZm9ybWF0KCdERC9NTS9ZWVlZIGhoOm1tJyksXG4gICk7XG4gIGNvbnN0IFtwaG90b3MsIHNldFBob3Rvc10gPSB1c2VTdGF0ZTxzdHJpbmcgfCBCbG9iIHwgYW55PihbXSk7XG4gIGNvbnN0IFtwaG90b3NUb0RlbGV0ZSwgc2V0UGhvdG9zVG9EZWxldGVdID0gdXNlU3RhdGU8bnVtYmVyW10+KFtdKTtcbiAgY29uc3QgW3NhdmluZ01zZywgc2V0U2F2aW5nTXNnXSA9IHVzZVN0YXRlPHN0cmluZz4oaTE4bi50KCdidXR0b25zLnNhdmUnKSk7XG4gIGNvbnN0IFtzYW1wbGluZ1VwZGF0ZWQsIHNldFNhbXBsaW5nVXBkYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzYW1wbGluZ1BsYW4sIHNldFNhbXBsaW5nUGxhbl0gPSB1c2VTdGF0ZTxcbiAgICBTYW1wbGluZ0ZldGNoRGF0YSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIGNvbnN0IHF1ZXJ5ID0gdXNlUXVlcnlVUkwoKTtcbiAgY29uc3Qgd2F0ZXJBdXRob3JpdHlJZEZyb21VcmwgPSBwYXJzZUludChcbiAgICBxdWVyeS5nZXQoJ3dhdGVyX2F1dGhvcml0eV9pZCcpIHx8ICcwJyxcbiAgKTtcbiAgY29uc3QgbmF2Q29udGV4dCA9IHVzZVNlbGVjdG9yKFxuICAgIChzdGF0ZTogUmV0dXJuVHlwZTx0eXBlb2YgYXBwUmVkdWNlcj4pID0+IHN0YXRlLm5hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dCxcbiAgKTtcblxuICBjb25zdCB1c2VySW5mbyA9IHVzZVNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUucGVybWlzc2lvbnMudXNlcl9pbmZvKTtcbiAgY29uc3QgZGF0ZUZvcm1hdCA9XG4gICAgdXNlckluZm8uZGF0ZV90aW1lX2Zvcm1hdCA9PT0gJ3VzJ1xuICAgICAgPyAnTU1NIGQsIHl5eXkgaGg6bW0gYWEnXG4gICAgICA6ICdkL01NL3l5eXkgSEg6bW0nO1xuICBjb25zdCBbcGFnZVR5cGUsIHNldFBhZ2VUeXBlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KCk7XG4gIGNvbnN0IFtzYW1wbGluZ1Byb3BlcnRpZXMsIHNldFNhbXBsaW5nUHJvcGVydGllc10gPVxuICAgIHVzZVN0YXRlPFRTYW1wbGluZ1Byb3BlcnRpZXM+KCk7XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPVxuICAgIHBhZ2VUeXBlID09PSAnY29sbGVjdCdcbiAgICAgID8gcHJvcGVydGllc1ZhbGlkYXRpb25TY2hlbWFcbiAgICAgIDogY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYTtcblxuICBjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWs8Rm9ybWlrQ29uZmlnPEZvcm1UeXBlPj4oe1xuICAgIGVuYWJsZVJlaW5pdGlhbGl6ZTogdHJ1ZSxcbiAgICBpbml0aWFsVmFsdWVzOiBzYW1wbGluZ1Byb3BlcnR5LFxuICAgIHZhbGlkYXRpb25TY2hlbWE6IHZhbGlkYXRpb25TY2hlbWEsXG4gICAgdmFsaWRhdGVPbkNoYW5nZTogZmFsc2UsXG4gICAgdmFsaWRhdGVPbkJsdXI6IHRydWUsXG4gICAgb25TdWJtaXQ6ICh2YWx1ZXMpID0+IHtcbiAgICAgIGhhbmRsZVN1Ym1pdCh2YWx1ZXMpO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIGNvbnN0IHNhbXBsaW5nc0xpc3RSb3V0ZSA9IHVybHMoe1xuICAgICAgbG9jYWxlOiBuYXZDb250ZXh0LmxvY2FsZSxcbiAgICAgIHdhdGVyQXV0aG9yaXR5SWQ6IHdhdGVyQXV0aG9yaXR5SWRGcm9tVXJsLFxuICAgIH0pLnNhbXBsaW5nc1BhZ2Uuc2FtcGxpbmdzTGlzdFJvdXRlLnVybDtcbiAgICBoaXN0b3J5LnB1c2goc2FtcGxpbmdzTGlzdFJvdXRlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAodmFsdWVzKSA9PiB7XG4gICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5zYXZpbmcnKSk7XG4gICAgdmFsdWVzLnBpY3R1cmVzX2F0dHJpYnV0ZXMgPSBwaG90b3M7XG4gICAgY29uc3Qgc2F2ZUZvcm1EYXRhID0gZm9ybURhdGFCdWlsZGVyKHZhbHVlcyk7XG4gICAgdXBkYXRlT3JDcmVhdGUoc2F2ZUZvcm1EYXRhKTtcbiAgfTtcblxuICBjb25zdCBzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLnNhdmUnKSk7XG4gICAgfSwgMzAwMCk7XG4gIH07XG5cbiAgY29uc3QgZm9ybURhdGFCdWlsZGVyID0gKHZhbHVlcykgPT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICBpZiAoa2V5ICE9PSAncGljdHVyZXNfYXR0cmlidXRlcycpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNba2V5XSA9PT0gbnVsbCA/ICcnIDogdmFsdWVzW2tleV07XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChgc2FtcGxpbmdbJHtrZXl9XWAsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHVuaXF1ZVBob3Rvc1RvRGVsZXRlID0gWy4uLm5ldyBTZXQocGhvdG9zVG9EZWxldGUpXTtcbiAgICB1bmlxdWVQaG90b3NUb0RlbGV0ZS5sZW5ndGggIT09IDAgJiZcbiAgICAgIHVuaXF1ZVBob3Rvc1RvRGVsZXRlLmZvckVhY2goKGlkLCBpbmRleCkgPT4ge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgYHNhbXBsaW5nW3BpY3R1cmVzX2F0dHJpYnV0ZXNdWyR7aW5kZXh9XVtpZF1gLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGlkKSxcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgIGBzYW1wbGluZ1twaWN0dXJlc19hdHRyaWJ1dGVzXVske2luZGV4fV1bX2Rlc3Ryb3ldYCxcbiAgICAgICAgICAndHJ1ZScsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlT3JDcmVhdGUgPSAoZm9ybURhdGEpID0+IHtcbiAgICBjb25zdCB1cGRhdGVPckNyZWF0ZVN1Y2Nlc3MgPSAobXNnKSA9PiB7XG4gICAgICBzZXRTYXZpbmdNc2coaTE4bi50KG1zZykpO1xuICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkKHRydWUpO1xuICAgICAgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0KCk7XG4gICAgICBoYW5kbGVDbG9zZSgpO1xuICAgIH07XG5cbiAgICBpZiAoc2FtcGxpbmdQcm9wZXJ0aWVzPy5zYW1wbGluZz8uaWQgPT09IG51bGwpIHtcbiAgICAgIC8vIGNyZWF0ZVxuICAgICAgZm9ybURhdGEuYXBwZW5kKGBzYW1wbGluZ1tkYXRlXWAsIGNvbGxlY3Rpb25UaW1lKTtcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wb3N0KHVybHMoKS5zYW1wbGluZ1Byb3BlcnRpZXMuY3JlYXRlU2FtcGxpbmcudXJsLCBmb3JtRGF0YSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZU9yQ3JlYXRlU3VjY2VzcygnYnV0dG9ucy5jcmVhdGVkJyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5lcnJvcicpKTtcbiAgICAgICAgICBzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQoKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVwZGF0ZVxuICAgICAgYXhpb3NcbiAgICAgICAgLnB1dChcbiAgICAgICAgICB1cmxzKHsgc2FtcGxpbmdJZDogc2FtcGxpbmdQcm9wZXJ0aWVzPy5zYW1wbGluZz8uaWQgfSlcbiAgICAgICAgICAgIC5zYW1wbGluZ1Byb3BlcnRpZXMudXBkYXRlU2FtcGxpbmcudXJsLFxuICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICApXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB1cGRhdGVPckNyZWF0ZVN1Y2Nlc3MoJ2J1dHRvbnMudXBkYXRlZCcpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuZXJyb3InKSk7XG4gICAgICAgICAgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZXRlY3RQYWdlVHlwZSA9IChzYW1wbGluZ1Byb3BlcnRpZXMsIGNvbGxlY3Rpb25UaW1lU2VydmVyLCBvcCkgPT4ge1xuICAgIGxldCBfcGFnZVR5cGU7XG4gICAgaWYgKG9wID09PSAnZWRpdCcpIHtcbiAgICAgIF9wYWdlVHlwZSA9IHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZy5pc19jYW5jZWxlZFxuICAgICAgICA/ICdjYW5jZWwnXG4gICAgICAgIDogJ2NvbGxlY3QnO1xuICAgICAgaWYgKGNvbGxlY3Rpb25UaW1lU2VydmVyKSB7XG4gICAgICAgIHNldENvbGxlY3Rpb25UaW1lKG5ldyBEYXRlKGNvbGxlY3Rpb25UaW1lU2VydmVyKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2xsZWN0aW9uVGltZShuZXcgRGF0ZSgpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wID09PSBDT0xMRUNUX1NBTVBMSU5HX09QKSB7XG4gICAgICBzZXRDb2xsZWN0aW9uVGltZShuZXcgRGF0ZSgpKTtcbiAgICAgIF9wYWdlVHlwZSA9ICdjb2xsZWN0JztcbiAgICB9IGVsc2UgaWYgKG9wID09PSBDQU5DRUxfU0FNUExJTkdfT1ApIHtcbiAgICAgIHNldENvbGxlY3Rpb25UaW1lKG5ldyBEYXRlKGNvbGxlY3Rpb25UaW1lU2VydmVyKSk7XG4gICAgICBfcGFnZVR5cGUgPSAnY2FuY2VsJztcbiAgICB9XG4gICAgcmV0dXJuIF9wYWdlVHlwZTtcbiAgfTtcblxuICBjb25zdCBpc1Byb3BlcnRpZXNQYWdlID0gcGFnZVR5cGUgPT09ICdlZGl0JztcblxuICBjb25zdCB7IHNhbXBsZUlkIH0gPSB1c2VQYXJhbXMoKTtcblxuICBjb25zdCBmZXRjaFNhbXBsaW5nUHJvcGVydGllcyA9IChzYW1wbGluZ0lkID0gc2FtcGxlSWQsIG9wKSA9PiB7XG4gICAgYXhpb3NcbiAgICAgIC5nZXQoXG4gICAgICAgIHVybHMoeyBzYW1wbGluZ0lkOiBzYW1wbGluZ0lkIH0pLnNhbXBsaW5nUHJvcGVydGllcy5mZXRjaFNhbXBsaW5nLnVybCxcbiAgICAgIClcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc2FtcGxpbmdSZXMgPSByZXMuZGF0YTtcbiAgICAgICAgY29uc3Qgc2FtcGxpbmdQcm9wZXJ0aWVzID0gc2FtcGxpbmdSZXMuc2FtcGxpbmdfcHJvcGVydGllcztcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblRpbWVTZXJ2ZXIgPVxuICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZy5jb2xsZWN0aW9uX3RpbWU7XG5cbiAgICAgICAgY29uc3QgX3BhZ2VUeXBlID0gZGV0ZWN0UGFnZVR5cGUoXG4gICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzLFxuICAgICAgICAgIGNvbGxlY3Rpb25UaW1lU2VydmVyLFxuICAgICAgICAgIG9wLFxuICAgICAgICApO1xuICAgICAgICBzZXRQYWdlVHlwZShfcGFnZVR5cGUpO1xuXG4gICAgICAgIGNvbnN0IGlzQ2FuY2VsZWQgPVxuICAgICAgICAgIF9wYWdlVHlwZSA9PT0gJ2NhbmNlbCdcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBfcGFnZVR5cGUgPT09ICdjb2xsZWN0J1xuICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgOiBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuaXNfY2FuY2VsZWQgfHwgZmFsc2U7XG5cbiAgICAgICAgY29uc3QgcGFnZUNvbGxlY3Rpb25UaW1lID1cbiAgICAgICAgICBfcGFnZVR5cGUgPT09ICdjb2xsZWN0J1xuICAgICAgICAgICAgPyBjb2xsZWN0aW9uVGltZVxuICAgICAgICAgICAgOiBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuY29sbGVjdGlvbl90aW1lO1xuXG4gICAgICAgIGNvbnN0IHNhbSA9IHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZztcbiAgICAgICAgZm9ybWlrLnNldFZhbHVlcyh7XG4gICAgICAgICAgbGFiX2lkOiBzYW0ubGFiX2lkLFxuICAgICAgICAgIGNvbGxlY3Rpb25fdGltZTogcGFnZUNvbGxlY3Rpb25UaW1lLFxuICAgICAgICAgIHB1bXBfc2FtcGxpbmdfdm9sdW1lOiBzYW0ucHVtcF9zYW1wbGluZ192b2x1bWUsXG4gICAgICAgICAgcHVtcF9iYXR0ZXJ5X2xldmVsOiBzYW0ucHVtcF9iYXR0ZXJ5X2xldmVsLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBzYW0uZGVzY3JpcHRpb24sXG4gICAgICAgICAga2FuZG9fcmVwOiBzYW0ua2FuZG9fcmVwLFxuICAgICAgICAgIHNhbXBsaW5nX3BsYW5faWQ6IHNhbS5zYW1wbGluZ19wbGFuX2lkLFxuICAgICAgICAgIGNhbmNlbGxhdGlvbl9yZWFzb246IHNhbS5jYW5jZWxsYXRpb25fcmVhc29uIHx8ICcnLFxuICAgICAgICAgIGlzX2NhbmNlbGVkOiBpc0NhbmNlbGVkLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2FtcGxpbmdQcm9wZXJ0aWVzKHNhbXBsaW5nUHJvcGVydGllcyk7XG4gICAgICAgIHNldFNhbXBsaW5nUGxhbihzYW1wbGluZ1Jlcy5zYW1wbGluZ19wbGFuKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGdldFVybFF1ZXJ5T3AgPSAoKSA9PiB7XG4gICAgbGV0IG9wID0gcXVlcnkuZ2V0KCdvcCcpO1xuICAgIC8vIGlmIG5vdCBwcmVzZW50IHRoZW4gZGVmYXVsdCBvcCBpcyAnY29sbGVjdGluZydcbiAgICBpZiAoW3VuZGVmaW5lZCwgbnVsbCwgJyddLmluY2x1ZGVzKG9wKSkge1xuICAgICAgcmV0dXJuIENPTExFQ1RfU0FNUExJTkdfT1A7XG4gICAgfVxuICAgIHJldHVybiBvcDtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoU2FtcGxpbmdQcm9wZXJ0aWVzKHNhbXBsZUlkLCBnZXRVcmxRdWVyeU9wKCkpO1xuICB9LCBbc2FtcGxpbmdVcGRhdGVkXSk7XG5cbiAgaWYgKCFzYW1wbGluZ1BsYW4gfHwgIXNhbXBsaW5nUHJvcGVydGllcykge1xuICAgIHJldHVybiA8U3Bpbm5lciAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGZvcm0gb25TdWJtaXQ9e2Zvcm1pay5oYW5kbGVTdWJtaXR9PlxuICAgICAgPExheW91dD5cbiAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc1N0eWxlPlxuICAgICAgICAgIHshaXNNb2JpbGUgJiYgKFxuICAgICAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc0hlYWRcbiAgICAgICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzPXtzYW1wbGluZ1Byb3BlcnRpZXN9XG4gICAgICAgICAgICAgIHNhbXBsaW5nPXtzYW1wbGluZ1BsYW59XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgICBwYWdlVHlwZT17cGFnZVR5cGV9XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25EYXRlPXtjb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0Q29sbGVjdGlvbkRhdGU9e3NldENvbGxlY3Rpb25UaW1lfVxuICAgICAgICAgICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQ9e3NldFNhbXBsaW5nVXBkYXRlZH1cbiAgICAgICAgICAgICAgaXNEYXRlUGlja2VyRGlzYWJsZWQ9e2lzUHJvcGVydGllc1BhZ2V9XG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2RhdGVGb3JtYXR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7aXNNb2JpbGUgJiYgKFxuICAgICAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc0hlYWRNb2JpbGVcbiAgICAgICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzPXtzYW1wbGluZ1Byb3BlcnRpZXN9XG4gICAgICAgICAgICAgIHNhbXBsaW5nPXtzYW1wbGluZ1BsYW59XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgICBwYWdlVHlwZT17cGFnZVR5cGV9XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25EYXRlPXtjb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0Q29sbGVjdGlvbkRhdGU9e3NldENvbGxlY3Rpb25UaW1lfVxuICAgICAgICAgICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQ9e3NldFNhbXBsaW5nVXBkYXRlZH1cbiAgICAgICAgICAgICAgaXNEYXRlUGlja2VyRGlzYWJsZWQ9e2lzUHJvcGVydGllc1BhZ2V9XG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2RhdGVGb3JtYXR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7c2FtcGxpbmdQcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQgJiYgcGFnZVR5cGUgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzRm9ybVxuICAgICAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXM9e3NhbXBsaW5nUHJvcGVydGllc31cbiAgICAgICAgICAgICAgc2FtcGxpbmc9e3NhbXBsaW5nUGxhbn1cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlfVxuICAgICAgICAgICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQ9e3NldFNhbXBsaW5nVXBkYXRlZH1cbiAgICAgICAgICAgICAgc2F2aW5nTXNnPXtzYXZpbmdNc2d9XG4gICAgICAgICAgICAgIGhhbmRsZUNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgICAgICAgICAgc2V0UGhvdG9zVG9EZWxldGU9e3NldFBob3Rvc1RvRGVsZXRlfVxuICAgICAgICAgICAgICBzZXRQaG90b3M9e3NldFBob3Rvc31cbiAgICAgICAgICAgICAgcGhvdG9zPXtwaG90b3N9XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NhbXBsaW5nUHJvcGVydGllc1N0eWxlPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9mb3JtPlxuICApO1xufTtcblxuY29uc3QgU2FtcGxpbmdQcm9wZXJ0aWVzU3R5bGUgPSBzdHlsZWQuZGl2YFxuICAkeyFpc01vYmlsZSA/ICd3aWR0aDogODMwcHg7JyA6ICcnfVxuICAkeyFpc01vYmlsZSA/ICdtYXJnaW46IDEwMHB4IGF1dG87JyA6ICcnfVxuYDtcbiJdfQ==