merchi_checkout 1.2.6 → 1.2.8

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.
@@ -1,9 +1,17 @@
1
1
  'use client';
2
2
 
3
- import React from 'react';
4
- import { FaFilePdf } from 'react-icons/fa';
3
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
5
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
7
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
8
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
9
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
10
+ import React, { useState } from 'react';
11
+ import { FaFilePdf, FaRegImage } from 'react-icons/fa';
5
12
  import { formatCurrency, currencyTotalCostShowIncTax } from './currency';
6
13
  import { isInstructionsType, isProductSupplierMOD, isSelectable, FieldType } from '../utils';
14
+ import { estimateAreaCosts, formatAreaSummary, localePrefersImperial } from '../area';
7
15
  import { useMerchiCheckboutContext } from './MerchiCheckoutProvider';
8
16
  import { SummaryAmountRow, SummaryFieldRow } from './CheckoutSummaryFields';
9
17
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -16,6 +24,37 @@ function formatCost(product, cost) {
16
24
  showCodeIfNoSymbol: false
17
25
  });
18
26
  }
27
+ function parseCostAmount(value) {
28
+ var amount = parseFloat(value);
29
+ return Number.isFinite(amount) && amount > 0 ? amount : 0;
30
+ }
31
+
32
+ /** Match product-form wording: "+ $X once off" / "+ $Y per unit". */
33
+ function formatOnceOffUnitCostDetail(product, onceOffCost, unitCost) {
34
+ var currency = (product === null || product === void 0 ? void 0 : product.currency) || 'AUD';
35
+ var parts = [];
36
+ var onceOff = parseCostAmount(onceOffCost);
37
+ var unit = parseCostAmount(unitCost);
38
+ if (onceOff) {
39
+ parts.push(" + ".concat(formatCurrency(onceOff, {
40
+ currency: currency,
41
+ showCodeIfNoSymbol: false
42
+ }), " once off"));
43
+ }
44
+ if (unit) {
45
+ parts.push(" + ".concat(formatCurrency(unit, {
46
+ currency: currency,
47
+ showCodeIfNoSymbol: false
48
+ }), " per unit"));
49
+ }
50
+ return parts.join('');
51
+ }
52
+ function optionOnceOff(option) {
53
+ return parseCostAmount(option === null || option === void 0 ? void 0 : option.onceOffCost) || parseCostAmount(option === null || option === void 0 ? void 0 : option.variationCost) || 0;
54
+ }
55
+ function optionUnit(option) {
56
+ return parseCostAmount(option === null || option === void 0 ? void 0 : option.unitCost) || parseCostAmount(option === null || option === void 0 ? void 0 : option.variationUnitCost) || 0;
57
+ }
19
58
 
20
59
  /** Product setup fee shown next to unit price, matching product-form wording. */
21
60
  function productSetupSuffix(product) {
@@ -37,9 +76,24 @@ function isImageFile(file) {
37
76
  var name = ((file === null || file === void 0 ? void 0 : file.name) || '').toLowerCase();
38
77
  return /\.(jpe?g|png|gif|webp|svg|bmp)$/.test(name);
39
78
  }
40
- function optionImageUrl(option) {
41
- var _option$linkedFile;
42
- return (option === null || option === void 0 || (_option$linkedFile = option.linkedFile) === null || _option$linkedFile === void 0 ? void 0 : _option$linkedFile.viewUrl) || '';
79
+ function absolutizeFileUrl(raw, urlApi) {
80
+ var url = (raw || '').trim();
81
+ if (!url || url === 'undefined' || url === 'null') return '';
82
+ if (/^(https?:|blob:|data:)/i.test(url)) return url;
83
+ if (!urlApi) return url;
84
+ try {
85
+ var base = new URL(urlApi);
86
+ return new URL(url, "".concat(base.origin, "/")).href;
87
+ } catch (_unused) {
88
+ return url;
89
+ }
90
+ }
91
+ function resolveFileUrl(file, urlApi) {
92
+ return absolutizeFileUrl((file === null || file === void 0 ? void 0 : file.viewUrl) || (file === null || file === void 0 ? void 0 : file.downloadUrl) || '', urlApi);
93
+ }
94
+ function optionImageUrl(option, urlApi) {
95
+ var _option$linkedFile, _option$linkedFile2;
96
+ return absolutizeFileUrl((option === null || option === void 0 || (_option$linkedFile = option.linkedFile) === null || _option$linkedFile === void 0 ? void 0 : _option$linkedFile.viewUrl) || (option === null || option === void 0 || (_option$linkedFile2 = option.linkedFile) === null || _option$linkedFile2 === void 0 ? void 0 : _option$linkedFile2.downloadUrl) || '', urlApi);
43
97
  }
44
98
  function findMatchingOption(option) {
45
99
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
@@ -60,24 +114,71 @@ function resolveOptionColour(option) {
60
114
  function resolveOptionImageUrl(option) {
61
115
  var selectableOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
62
116
  var fieldOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
63
- var direct = optionImageUrl(option);
117
+ var urlApi = arguments.length > 3 ? arguments[3] : undefined;
118
+ var direct = optionImageUrl(option, urlApi);
64
119
  if (direct) return direct;
65
- var fromSelectable = optionImageUrl(findMatchingOption(option, selectableOptions));
120
+ var fromSelectable = optionImageUrl(findMatchingOption(option, selectableOptions), urlApi);
66
121
  if (fromSelectable) return fromSelectable;
67
- return optionImageUrl(findMatchingOption(option, fieldOptions));
122
+ return optionImageUrl(findMatchingOption(option, fieldOptions), urlApi);
68
123
  }
69
124
  function formatOptionCost(product, option, sellerProductEditable) {
70
- if (!(option !== null && option !== void 0 && option.totalCost) || sellerProductEditable) return null;
71
- return " + ".concat(formatCost(product, option.totalCost));
125
+ if (sellerProductEditable || !option) return null;
126
+ var onceOffUnit = formatOnceOffUnitCostDetail(product, optionOnceOff(option), optionUnit(option));
127
+ if (onceOffUnit) return onceOffUnit;
128
+ if (option.totalCost) {
129
+ return " + ".concat(formatCost(product, option.totalCost));
130
+ }
131
+ return null;
132
+ }
133
+ function variationCostDetail(product, variation, sellerProductEditable) {
134
+ var _variation$onceOffCos, _variation$unitCost;
135
+ var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
136
+ _ref$includeSelectedO = _ref.includeSelectedOptionCosts,
137
+ includeSelectedOptionCosts = _ref$includeSelectedO === void 0 ? true : _ref$includeSelectedO,
138
+ _ref$fieldCostsOnly = _ref.fieldCostsOnly,
139
+ fieldCostsOnly = _ref$fieldCostsOnly === void 0 ? false : _ref$fieldCostsOnly;
140
+ if (sellerProductEditable) return '';
141
+ var field = (variation === null || variation === void 0 ? void 0 : variation.variationField) || {};
142
+ var fieldType = Number(field.fieldType);
143
+ if (fieldType === FieldType.AREA) {
144
+ var areaCosts = estimateAreaCosts(field, variation === null || variation === void 0 ? void 0 : variation.value);
145
+ if (areaCosts) {
146
+ return formatOnceOffUnitCostDetail(product, areaCosts.onceOffCost, areaCosts.unitCost);
147
+ }
148
+ }
149
+ if (fieldCostsOnly) {
150
+ return formatOnceOffUnitCostDetail(product, field.variationCost, field.variationUnitCost);
151
+ }
152
+ var selected = Array.isArray(variation === null || variation === void 0 ? void 0 : variation.selectedOptions) ? variation.selectedOptions : [];
153
+ if (includeSelectedOptionCosts && selected.length) {
154
+ var fieldOnce = fieldType === FieldType.COLOUR_EXTRACT ? parseCostAmount(field.variationCost) : 0;
155
+ var fieldUnit = fieldType === FieldType.COLOUR_EXTRACT ? parseCostAmount(field.variationUnitCost) : 0;
156
+ return formatOnceOffUnitCostDetail(product, fieldOnce + selected.reduce(function (sum, option) {
157
+ return sum + optionOnceOff(option);
158
+ }, 0), fieldUnit + selected.reduce(function (sum, option) {
159
+ return sum + optionUnit(option);
160
+ }, 0));
161
+ }
162
+ var onceOffUnit = formatOnceOffUnitCostDetail(product, (_variation$onceOffCos = variation === null || variation === void 0 ? void 0 : variation.onceOffCost) !== null && _variation$onceOffCos !== void 0 ? _variation$onceOffCos : field.variationCost, (_variation$unitCost = variation === null || variation === void 0 ? void 0 : variation.unitCost) !== null && _variation$unitCost !== void 0 ? _variation$unitCost : field.variationUnitCost);
163
+ if (onceOffUnit) return onceOffUnit;
164
+ if (variation !== null && variation !== void 0 && variation.cost) {
165
+ return " + ".concat(formatCost(product, variation.cost));
166
+ }
167
+ return '';
72
168
  }
73
- function VariationFilePreview(_ref) {
74
- var file = _ref.file;
75
- var fileUrl = (file === null || file === void 0 ? void 0 : file.viewUrl) || (file === null || file === void 0 ? void 0 : file.downloadUrl) || '';
169
+ function VariationFilePreview(_ref2) {
170
+ var file = _ref2.file,
171
+ urlApi = _ref2.urlApi;
172
+ var fileUrl = resolveFileUrl(file, urlApi);
76
173
  var fileName = (file === null || file === void 0 ? void 0 : file.name) || 'File';
174
+ var _useState = useState(false),
175
+ _useState2 = _slicedToArray(_useState, 2),
176
+ imageFailed = _useState2[0],
177
+ setImageFailed = _useState2[1];
77
178
  if (isPdf(file)) {
78
179
  return /*#__PURE__*/_jsxs("a", {
79
180
  className: "merchi-checkout-summary-file-link",
80
- href: fileUrl,
181
+ href: fileUrl || undefined,
81
182
  target: "_blank",
82
183
  rel: "noopener noreferrer",
83
184
  title: fileName,
@@ -88,12 +189,26 @@ function VariationFilePreview(_ref) {
88
189
  })]
89
190
  });
90
191
  }
91
- if (isImageFile(file) && fileUrl) {
192
+ if (isImageFile(file) && fileUrl && !imageFailed) {
92
193
  return /*#__PURE__*/_jsx("img", {
93
194
  className: "modal-merchi-checkout-job-info-content-img",
94
195
  src: fileUrl,
95
196
  alt: fileName,
96
- title: fileName
197
+ title: fileName,
198
+ onError: function onError() {
199
+ return setImageFailed(true);
200
+ }
201
+ });
202
+ }
203
+ if (isImageFile(file)) {
204
+ return /*#__PURE__*/_jsxs("span", {
205
+ className: "merchi-checkout-summary-file-fallback",
206
+ title: fileName,
207
+ children: [/*#__PURE__*/_jsx(FaRegImage, {
208
+ "aria-hidden": true
209
+ }), /*#__PURE__*/_jsx("span", {
210
+ children: fileName
211
+ })]
97
212
  });
98
213
  }
99
214
  if (fileUrl) {
@@ -110,15 +225,16 @@ function VariationFilePreview(_ref) {
110
225
  children: fileName
111
226
  });
112
227
  }
113
- function VariationInfoBody(_ref2) {
114
- var cost = _ref2.cost,
115
- name = _ref2.name,
116
- product = _ref2.product,
117
- value = _ref2.value,
118
- files = _ref2.files,
119
- type = _ref2.type;
228
+ function VariationInfoBody(_ref3) {
229
+ var costDetail = _ref3.costDetail,
230
+ name = _ref3.name,
231
+ product = _ref3.product,
232
+ value = _ref3.value,
233
+ files = _ref3.files,
234
+ type = _ref3.type,
235
+ urlApi = _ref3.urlApi;
120
236
  var isColourPicker = type === FieldType.COLOUR_PICKER;
121
- var isFileUpload = type === FieldType.FILE_UPLOAD;
237
+ var isFileUpload = type === FieldType.FILE_UPLOAD || type === FieldType.COLOUR_EXTRACT;
122
238
  var hasFiles = Boolean(files === null || files === void 0 ? void 0 : files.length);
123
239
  var displayValue = isColourPicker || isFileUpload && hasFiles ? null : value;
124
240
  return /*#__PURE__*/_jsxs("div", {
@@ -132,7 +248,8 @@ function VariationInfoBody(_ref2) {
132
248
  className: "merchi-checkout-summary-file-previews",
133
249
  children: files.map(function (file, index) {
134
250
  return /*#__PURE__*/_jsx(VariationFilePreview, {
135
- file: file
251
+ file: file,
252
+ urlApi: urlApi
136
253
  }, file.viewUrl || file.id || "".concat(name, "-file-").concat(index));
137
254
  })
138
255
  }), isColourPicker && value && /*#__PURE__*/_jsxs("div", {
@@ -145,15 +262,16 @@ function VariationInfoBody(_ref2) {
145
262
  }), /*#__PURE__*/_jsx("span", {
146
263
  children: value
147
264
  })]
148
- }), displayValue && displayValue, cost ? " + ".concat(formatCost(product, cost)) : '', !hasFiles && !value && '-']
265
+ }), displayValue && displayValue, costDetail || '', !hasFiles && !value && !costDetail && '-']
149
266
  })]
150
267
  });
151
268
  }
152
- function VariationInfo(_ref3) {
153
- var product = _ref3.product,
154
- variation = _ref3.variation;
155
- var selectedOptions = variation.selectedOptions,
156
- variationField = variation.variationField,
269
+ function VariationInfo(_ref4) {
270
+ var product = _ref4.product,
271
+ variation = _ref4.variation;
272
+ var _useMerchiCheckboutCo = useMerchiCheckboutContext(),
273
+ urlApi = _useMerchiCheckboutCo.urlApi;
274
+ var variationField = variation.variationField,
157
275
  variationFiles = variation.variationFiles,
158
276
  selectableOptions = variation.selectableOptions;
159
277
  var fieldType = variationField.fieldType,
@@ -162,11 +280,38 @@ function VariationInfo(_ref3) {
162
280
  fieldOptions = _variationField$optio === void 0 ? [] : _variationField$optio;
163
281
  var isVariationSelectable = isSelectable(fieldType);
164
282
  var isTurnaroundTime = fieldType === FieldType.TURNAROUND_TIME;
165
- var options = selectedOptions;
283
+ var isColourExtract = fieldType === FieldType.COLOUR_EXTRACT;
284
+ var options = resolveSelectableSelectedOptions(variation, selectableOptions, fieldOptions);
166
285
  var useSelectableDisplay = isVariationSelectable && (Boolean(options === null || options === void 0 ? void 0 : options.length) || isTurnaroundTime && variation.value);
167
286
  return /*#__PURE__*/_jsx("div", {
168
287
  className: "merchi-checkout-summary-variation",
169
- children: useSelectableDisplay ? /*#__PURE__*/_jsx(VariationOptionsInfoBody, {
288
+ children: isColourExtract ? /*#__PURE__*/_jsxs(_Fragment, {
289
+ children: [/*#__PURE__*/_jsx(VariationInfoBody, {
290
+ name: variationField.name,
291
+ type: fieldType,
292
+ value: null,
293
+ files: variationFiles,
294
+ product: product,
295
+ urlApi: urlApi,
296
+ costDetail: variationCostDetail(product, variation, sellerProductEditable,
297
+ // Options list shows each colour cost; keep field base cost here.
298
+ options !== null && options !== void 0 && options.length ? {
299
+ fieldCostsOnly: true
300
+ } : {
301
+ includeSelectedOptionCosts: false
302
+ })
303
+ }), options !== null && options !== void 0 && options.length ? /*#__PURE__*/_jsx(VariationOptionsInfoBody, {
304
+ name: "".concat(variationField.name, " colours"),
305
+ fieldType: fieldType,
306
+ value: variation.value,
307
+ product: product,
308
+ selectedOptions: options,
309
+ variation: variation,
310
+ selectableOptions: selectableOptions,
311
+ fieldOptions: fieldOptions,
312
+ sellerProductEditable: sellerProductEditable
313
+ }) : null]
314
+ }) : useSelectableDisplay ? /*#__PURE__*/_jsx(VariationOptionsInfoBody, {
170
315
  name: variationField.name,
171
316
  fieldType: fieldType,
172
317
  value: variation.value,
@@ -180,20 +325,26 @@ function VariationInfo(_ref3) {
180
325
  }) : /*#__PURE__*/_jsx(VariationInfoBody, {
181
326
  name: variationField.name,
182
327
  type: variationField.fieldType,
183
- value: variation.value,
328
+ value: fieldType === FieldType.AREA && variation.value ? formatAreaSummary(variation.value, localePrefersImperial() ? 'imperial' : 'metric', variationField.areaUnit || 'mm') || variation.value : variation.value,
184
329
  files: variationFiles,
185
330
  product: product,
186
- cost: sellerProductEditable ? 0 : variation.cost
331
+ urlApi: urlApi,
332
+ costDetail: variationCostDetail(product, variation, sellerProductEditable, {
333
+ includeSelectedOptionCosts: false
334
+ })
187
335
  })
188
336
  });
189
337
  }
190
- function ColourSelectOption(_ref4) {
338
+ function ColourSelectOption(_ref5) {
191
339
  var _option$value;
192
- var option = _ref4.option,
193
- selectableOptions = _ref4.selectableOptions,
194
- fieldOptions = _ref4.fieldOptions;
340
+ var option = _ref5.option,
341
+ selectableOptions = _ref5.selectableOptions,
342
+ fieldOptions = _ref5.fieldOptions,
343
+ product = _ref5.product,
344
+ sellerProductEditable = _ref5.sellerProductEditable;
195
345
  var label = (option === null || option === void 0 || (_option$value = option.value) === null || _option$value === void 0 ? void 0 : _option$value.trim()) || '';
196
346
  var hex = resolveOptionColour(option, selectableOptions, fieldOptions);
347
+ var cost = formatOptionCost(product, option, Boolean(sellerProductEditable));
197
348
  return /*#__PURE__*/_jsxs("span", {
198
349
  className: "merchi-checkout-summary-colour-option",
199
350
  children: [hex && /*#__PURE__*/_jsx("span", {
@@ -201,28 +352,37 @@ function ColourSelectOption(_ref4) {
201
352
  backgroundColor: hex
202
353
  },
203
354
  className: "color-indicator"
204
- }), /*#__PURE__*/_jsx("span", {
205
- children: label || hex || '–'
355
+ }), /*#__PURE__*/_jsxs("span", {
356
+ children: [label || hex || '–', cost || '']
206
357
  })]
207
358
  });
208
359
  }
209
- function ImageSelectOption(_ref5) {
360
+ function ImageSelectOption(_ref6) {
210
361
  var _option$value2;
211
- var option = _ref5.option,
212
- selectableOptions = _ref5.selectableOptions,
213
- fieldOptions = _ref5.fieldOptions,
214
- product = _ref5.product,
215
- sellerProductEditable = _ref5.sellerProductEditable;
216
- var imageUrl = resolveOptionImageUrl(option, selectableOptions, fieldOptions);
362
+ var option = _ref6.option,
363
+ selectableOptions = _ref6.selectableOptions,
364
+ fieldOptions = _ref6.fieldOptions,
365
+ product = _ref6.product,
366
+ sellerProductEditable = _ref6.sellerProductEditable;
367
+ var _useMerchiCheckboutCo2 = useMerchiCheckboutContext(),
368
+ urlApi = _useMerchiCheckboutCo2.urlApi;
369
+ var imageUrl = resolveOptionImageUrl(option, selectableOptions, fieldOptions, urlApi);
217
370
  var label = (option === null || option === void 0 || (_option$value2 = option.value) === null || _option$value2 === void 0 ? void 0 : _option$value2.trim()) || '';
218
371
  var cost = formatOptionCost(product, option, sellerProductEditable);
372
+ var _useState3 = useState(false),
373
+ _useState4 = _slicedToArray(_useState3, 2),
374
+ imageFailed = _useState4[0],
375
+ setImageFailed = _useState4[1];
219
376
  return /*#__PURE__*/_jsxs("span", {
220
377
  className: "merchi-checkout-summary-image-select-option",
221
- children: [imageUrl ? /*#__PURE__*/_jsx("img", {
378
+ children: [imageUrl && !imageFailed ? /*#__PURE__*/_jsx("img", {
222
379
  className: "modal-merchi-checkout-job-info-content-img",
223
380
  src: imageUrl,
224
381
  alt: label || 'Selected option',
225
- title: label || undefined
382
+ title: label || undefined,
383
+ onError: function onError() {
384
+ return setImageFailed(true);
385
+ }
226
386
  }) : null, /*#__PURE__*/_jsxs("span", {
227
387
  children: [label || '–', cost || '']
228
388
  })]
@@ -232,27 +392,72 @@ function getOptionId(option) {
232
392
  var _option$optionId;
233
393
  return (_option$optionId = option === null || option === void 0 ? void 0 : option.optionId) !== null && _option$optionId !== void 0 ? _option$optionId : option === null || option === void 0 ? void 0 : option.id;
234
394
  }
395
+ function splitSelectedOptionIds(value) {
396
+ if (Array.isArray(value)) {
397
+ return value.map(String).filter(Boolean);
398
+ }
399
+ if (value == null || value === '') return [];
400
+ return String(value).split(',').map(function (part) {
401
+ return part.trim();
402
+ }).filter(Boolean);
403
+ }
404
+ function resolveSelectableSelectedOptions(variation) {
405
+ var _variation$variationF;
406
+ var selectableOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
407
+ var fieldOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
408
+ var fieldType = variation === null || variation === void 0 || (_variation$variationF = variation.variationField) === null || _variation$variationF === void 0 ? void 0 : _variation$variationF.fieldType;
409
+ if (fieldType === FieldType.COLOUR_EXTRACT) {
410
+ return (variation === null || variation === void 0 ? void 0 : variation.selectedOptions) || [];
411
+ }
412
+ var selectedIds = splitSelectedOptionIds(variation === null || variation === void 0 ? void 0 : variation.value);
413
+ if (selectedIds.length > 0) {
414
+ var pools = [selectableOptions, fieldOptions];
415
+ var resolved = [];
416
+ var _iterator = _createForOfIteratorHelper(selectedIds),
417
+ _step;
418
+ try {
419
+ var _loop = function _loop() {
420
+ var id = _step.value;
421
+ for (var _i = 0, _pools = pools; _i < _pools.length; _i++) {
422
+ var pool = _pools[_i];
423
+ var match = pool.find(function (option) {
424
+ return String(getOptionId(option)) === id;
425
+ });
426
+ if (match) {
427
+ resolved.push(match);
428
+ break;
429
+ }
430
+ }
431
+ };
432
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
433
+ _loop();
434
+ }
435
+ } catch (err) {
436
+ _iterator.e(err);
437
+ } finally {
438
+ _iterator.f();
439
+ }
440
+ if (resolved.length > 0) {
441
+ return resolved;
442
+ }
443
+ }
444
+ return (variation === null || variation === void 0 ? void 0 : variation.selectedOptions) || [];
445
+ }
235
446
  function resolveTurnaroundSelectedOption(variation) {
236
447
  var selectableOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
237
448
  var fieldOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
238
- var _variation$selectedOp = variation.selectedOptions,
239
- selectedOptions = _variation$selectedOp === void 0 ? [] : _variation$selectedOp,
240
- value = variation.value;
241
- if (selectedOptions.length > 0) {
242
- return selectedOptions[0];
449
+ var resolved = resolveSelectableSelectedOptions(variation, selectableOptions, fieldOptions);
450
+ if (resolved.length > 0) {
451
+ return resolved[0];
243
452
  }
244
- var valueStr = value != null && value !== '' ? String(value).trim() : '';
453
+ var valueStr = (variation === null || variation === void 0 ? void 0 : variation.value) != null && (variation === null || variation === void 0 ? void 0 : variation.value) !== '' ? String(variation.value).trim() : '';
245
454
  if (!valueStr) return null;
246
455
  var pools = [selectableOptions, fieldOptions];
247
- for (var _i = 0, _pools = pools; _i < _pools.length; _i++) {
248
- var pool = _pools[_i];
249
- var byId = pool.find(function (o) {
250
- return String(getOptionId(o)) === valueStr;
251
- });
252
- if (byId) return byId;
253
- var byValue = pool.find(function (o) {
254
- var _o$value;
255
- return String((_o$value = o.value) !== null && _o$value !== void 0 ? _o$value : '') === valueStr;
456
+ for (var _i2 = 0, _pools2 = pools; _i2 < _pools2.length; _i2++) {
457
+ var pool = _pools2[_i2];
458
+ var byValue = pool.find(function (option) {
459
+ var _option$value3;
460
+ return String((_option$value3 = option.value) !== null && _option$value3 !== void 0 ? _option$value3 : '') === valueStr;
256
461
  });
257
462
  if (byValue) return byValue;
258
463
  }
@@ -269,13 +474,13 @@ function formatTurnaroundDeadline(userDeadline) {
269
474
  day: 'numeric'
270
475
  });
271
476
  }
272
- function TurnaroundOptionLabel(_ref6) {
273
- var _option$value3, _option$value4;
274
- var option = _ref6.option,
275
- variationField = _ref6.variationField,
276
- product = _ref6.product,
277
- sellerProductEditable = _ref6.sellerProductEditable;
278
- var days = parseInt(String((_option$value3 = option === null || option === void 0 ? void 0 : option.value) !== null && _option$value3 !== void 0 ? _option$value3 : ''), 10) || 0;
477
+ function TurnaroundOptionLabel(_ref7) {
478
+ var _option$value4, _option$value5;
479
+ var option = _ref7.option,
480
+ variationField = _ref7.variationField,
481
+ product = _ref7.product,
482
+ sellerProductEditable = _ref7.sellerProductEditable;
483
+ var days = parseInt(String((_option$value4 = option === null || option === void 0 ? void 0 : option.value) !== null && _option$value4 !== void 0 ? _option$value4 : ''), 10) || 0;
279
484
  var deadline = formatTurnaroundDeadline(option === null || option === void 0 ? void 0 : option.userDeadline);
280
485
  var shippingTimeIncluded = Boolean(variationField === null || variationField === void 0 ? void 0 : variationField.shippingTimeIncluded);
281
486
  var deadlineLabel = shippingTimeIncluded ? 'Delivery by' : 'Produced by';
@@ -284,35 +489,35 @@ function TurnaroundOptionLabel(_ref6) {
284
489
  className: "merchi-checkout-summary-turnaround-value",
285
490
  children: [/*#__PURE__*/_jsx("span", {
286
491
  className: "merchi-checkout-summary-turnaround-days",
287
- children: days > 0 ? "".concat(days, " business day").concat(days !== 1 ? 's' : '') : (option === null || option === void 0 || (_option$value4 = option.value) === null || _option$value4 === void 0 ? void 0 : _option$value4.trim()) || '–'
492
+ children: days > 0 ? "".concat(days, " business day").concat(days !== 1 ? 's' : '') : (option === null || option === void 0 || (_option$value5 = option.value) === null || _option$value5 === void 0 ? void 0 : _option$value5.trim()) || '–'
288
493
  }), deadline && /*#__PURE__*/_jsxs("span", {
289
494
  className: "merchi-checkout-summary-turnaround-deadline",
290
495
  children: [deadlineLabel, " ", deadline]
291
496
  }), cost || '']
292
497
  });
293
498
  }
294
- function VariationOptionsInfoBody(_ref7) {
295
- var _variation$variationF;
296
- var name = _ref7.name,
297
- selectedOptions = _ref7.selectedOptions,
298
- sellerProductEditable = _ref7.sellerProductEditable,
299
- product = _ref7.product,
300
- fieldType = _ref7.fieldType,
301
- variation = _ref7.variation,
302
- _ref7$selectableOptio = _ref7.selectableOptions,
303
- selectableOptions = _ref7$selectableOptio === void 0 ? [] : _ref7$selectableOptio,
304
- _ref7$fieldOptions = _ref7.fieldOptions,
305
- fieldOptions = _ref7$fieldOptions === void 0 ? [] : _ref7$fieldOptions;
499
+ function VariationOptionsInfoBody(_ref8) {
500
+ var _variation$variationF2;
501
+ var name = _ref8.name,
502
+ selectedOptions = _ref8.selectedOptions,
503
+ sellerProductEditable = _ref8.sellerProductEditable,
504
+ product = _ref8.product,
505
+ fieldType = _ref8.fieldType,
506
+ variation = _ref8.variation,
507
+ _ref8$selectableOptio = _ref8.selectableOptions,
508
+ selectableOptions = _ref8$selectableOptio === void 0 ? [] : _ref8$selectableOptio,
509
+ _ref8$fieldOptions = _ref8.fieldOptions,
510
+ fieldOptions = _ref8$fieldOptions === void 0 ? [] : _ref8$fieldOptions;
306
511
  var isTurnaroundTime = fieldType === FieldType.TURNAROUND_TIME;
307
512
  var firstOption = isTurnaroundTime ? resolveTurnaroundSelectedOption({
308
513
  selectedOptions: selectedOptions,
309
514
  value: variation === null || variation === void 0 ? void 0 : variation.value
310
515
  }, selectableOptions, fieldOptions) : selectedOptions[0];
311
- var isColourSelect = fieldType === FieldType.COLOUR_SELECT;
516
+ var isColourSelect = fieldType === FieldType.COLOUR_SELECT || fieldType === FieldType.COLOUR_EXTRACT;
312
517
  var isImageSelect = fieldType === FieldType.IMAGE_SELECT;
313
- var variationField = (_variation$variationF = variation === null || variation === void 0 ? void 0 : variation.variationField) !== null && _variation$variationF !== void 0 ? _variation$variationF : {};
518
+ var variationField = (_variation$variationF2 = variation === null || variation === void 0 ? void 0 : variation.variationField) !== null && _variation$variationF2 !== void 0 ? _variation$variationF2 : {};
314
519
  function renderOptionLabel(o) {
315
- var _o$value2;
520
+ var _o$value;
316
521
  if (isTurnaroundTime) {
317
522
  return /*#__PURE__*/_jsx(TurnaroundOptionLabel, {
318
523
  option: o,
@@ -325,7 +530,9 @@ function VariationOptionsInfoBody(_ref7) {
325
530
  return /*#__PURE__*/_jsx(ColourSelectOption, {
326
531
  option: o,
327
532
  selectableOptions: selectableOptions,
328
- fieldOptions: fieldOptions
533
+ fieldOptions: fieldOptions,
534
+ product: product,
535
+ sellerProductEditable: sellerProductEditable
329
536
  });
330
537
  }
331
538
  if (isImageSelect) {
@@ -338,7 +545,7 @@ function VariationOptionsInfoBody(_ref7) {
338
545
  });
339
546
  }
340
547
  return /*#__PURE__*/_jsxs(_Fragment, {
341
- children: [((_o$value2 = o.value) === null || _o$value2 === void 0 ? void 0 : _o$value2.trim()) || '–', formatOptionCost(product, o, sellerProductEditable) || '']
548
+ children: [((_o$value = o.value) === null || _o$value === void 0 ? void 0 : _o$value.trim()) || '–', formatOptionCost(product, o, sellerProductEditable) || '']
342
549
  });
343
550
  }
344
551
  return /*#__PURE__*/_jsx(_Fragment, {
@@ -377,11 +584,11 @@ function VariationOptionsInfoBody(_ref7) {
377
584
  })
378
585
  });
379
586
  }
380
- function VariationsInfo(_ref8) {
381
- var product = _ref8.product,
382
- quantity = _ref8.quantity,
383
- _ref8$variations = _ref8.variations,
384
- variations = _ref8$variations === void 0 ? [] : _ref8$variations;
587
+ function VariationsInfo(_ref9) {
588
+ var product = _ref9.product,
589
+ quantity = _ref9.quantity,
590
+ _ref9$variations = _ref9.variations,
591
+ variations = _ref9$variations === void 0 ? [] : _ref9$variations;
385
592
  return /*#__PURE__*/_jsx("div", {
386
593
  className: "merchi-checkout-summary-variations",
387
594
  children: variations.map(function (v, i) {
@@ -393,11 +600,11 @@ function VariationsInfo(_ref8) {
393
600
  })
394
601
  });
395
602
  }
396
- function VariationGroupInfo(_ref9) {
397
- var group = _ref9.group,
398
- index = _ref9.index,
399
- product = _ref9.product,
400
- showSetupOnUnitPrice = _ref9.showSetupOnUnitPrice;
603
+ function VariationGroupInfo(_ref10) {
604
+ var group = _ref10.group,
605
+ index = _ref10.index,
606
+ product = _ref10.product,
607
+ showSetupOnUnitPrice = _ref10.showSetupOnUnitPrice;
401
608
  var isResell = isProductSupplierMOD(product);
402
609
  var quantity = group.quantity,
403
610
  variations = group.variations;
@@ -429,8 +636,8 @@ function VariationGroupInfo(_ref9) {
429
636
  });
430
637
  }
431
638
  export default function JobInfoContent() {
432
- var _useMerchiCheckboutCo = useMerchiCheckboutContext(),
433
- job = _useMerchiCheckboutCo.job;
639
+ var _useMerchiCheckboutCo3 = useMerchiCheckboutContext(),
640
+ job = _useMerchiCheckboutCo3.job;
434
641
  var product = job.product,
435
642
  _job$quantity = job.quantity,
436
643
  quantity = _job$quantity === void 0 ? 0 : _job$quantity,
@@ -520,4 +727,4 @@ export default function JobInfoContent() {
520
727
  })]
521
728
  });
522
729
  }
523
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkZhRmlsZVBkZiIsImZvcm1hdEN1cnJlbmN5IiwiY3VycmVuY3lUb3RhbENvc3RTaG93SW5jVGF4IiwiaXNJbnN0cnVjdGlvbnNUeXBlIiwiaXNQcm9kdWN0U3VwcGxpZXJNT0QiLCJpc1NlbGVjdGFibGUiLCJGaWVsZFR5cGUiLCJ1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0IiwiU3VtbWFyeUFtb3VudFJvdyIsIlN1bW1hcnlGaWVsZFJvdyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImZvcm1hdENvc3QiLCJwcm9kdWN0IiwiY29zdCIsImN1cnJlbmN5Iiwic2hvd0NvZGVJZk5vU3ltYm9sIiwicHJvZHVjdFNldHVwU3VmZml4Iiwic2V0dXBQcmljZSIsIk51bWJlciIsImxhYmVsIiwic2V0dXBQZXJHcm91cCIsImNvbmNhdCIsImZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cCIsInVuaXRQcmljZSIsImlzUGRmIiwiZmlsZSIsIm1pbWV0eXBlIiwiaXNJbWFnZUZpbGUiLCJzdGFydHNXaXRoIiwibmFtZSIsInRvTG93ZXJDYXNlIiwidGVzdCIsIm9wdGlvbkltYWdlVXJsIiwib3B0aW9uIiwiX29wdGlvbiRsaW5rZWRGaWxlIiwibGlua2VkRmlsZSIsInZpZXdVcmwiLCJmaW5kTWF0Y2hpbmdPcHRpb24iLCJvcHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZmluZCIsIm8iLCJTdHJpbmciLCJvcHRpb25JZCIsInJlc29sdmVPcHRpb25Db2xvdXIiLCJfb3B0aW9uJGNvbG91ciIsIl9maW5kTWF0Y2hpbmdPcHRpb24iLCJfZmluZE1hdGNoaW5nT3B0aW9uMiIsInNlbGVjdGFibGVPcHRpb25zIiwiZmllbGRPcHRpb25zIiwiZGlyZWN0IiwiY29sb3VyIiwidHJpbSIsImZyb21TZWxlY3RhYmxlIiwicmVzb2x2ZU9wdGlvbkltYWdlVXJsIiwiZm9ybWF0T3B0aW9uQ29zdCIsInNlbGxlclByb2R1Y3RFZGl0YWJsZSIsInRvdGFsQ29zdCIsIlZhcmlhdGlvbkZpbGVQcmV2aWV3IiwiX3JlZiIsImZpbGVVcmwiLCJkb3dubG9hZFVybCIsImZpbGVOYW1lIiwiY2xhc3NOYW1lIiwiaHJlZiIsInRhcmdldCIsInJlbCIsInRpdGxlIiwiY2hpbGRyZW4iLCJzcmMiLCJhbHQiLCJWYXJpYXRpb25JbmZvQm9keSIsIl9yZWYyIiwidmFsdWUiLCJmaWxlcyIsInR5cGUiLCJpc0NvbG91clBpY2tlciIsIkNPTE9VUl9QSUNLRVIiLCJpc0ZpbGVVcGxvYWQiLCJGSUxFX1VQTE9BRCIsImhhc0ZpbGVzIiwiQm9vbGVhbiIsImRpc3BsYXlWYWx1ZSIsIm1hcCIsImluZGV4IiwiaWQiLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsIlZhcmlhdGlvbkluZm8iLCJfcmVmMyIsInZhcmlhdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInZhcmlhdGlvbkZpZWxkIiwidmFyaWF0aW9uRmlsZXMiLCJmaWVsZFR5cGUiLCJfdmFyaWF0aW9uRmllbGQkb3B0aW8iLCJpc1ZhcmlhdGlvblNlbGVjdGFibGUiLCJpc1R1cm5hcm91bmRUaW1lIiwiVFVSTkFST1VORF9USU1FIiwidXNlU2VsZWN0YWJsZURpc3BsYXkiLCJWYXJpYXRpb25PcHRpb25zSW5mb0JvZHkiLCJDb2xvdXJTZWxlY3RPcHRpb24iLCJfcmVmNCIsIl9vcHRpb24kdmFsdWUiLCJoZXgiLCJJbWFnZVNlbGVjdE9wdGlvbiIsIl9yZWY1IiwiX29wdGlvbiR2YWx1ZTIiLCJpbWFnZVVybCIsImdldE9wdGlvbklkIiwiX29wdGlvbiRvcHRpb25JZCIsInJlc29sdmVUdXJuYXJvdW5kU2VsZWN0ZWRPcHRpb24iLCJfdmFyaWF0aW9uJHNlbGVjdGVkT3AiLCJ2YWx1ZVN0ciIsInBvb2xzIiwiX2kiLCJfcG9vbHMiLCJwb29sIiwiYnlJZCIsImJ5VmFsdWUiLCJfbyR2YWx1ZSIsImZvcm1hdFR1cm5hcm91bmREZWFkbGluZSIsInVzZXJEZWFkbGluZSIsInNlY29uZHMiLCJpc0Zpbml0ZSIsIkRhdGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJ3ZWVrZGF5IiwieWVhciIsIm1vbnRoIiwiZGF5IiwiVHVybmFyb3VuZE9wdGlvbkxhYmVsIiwiX3JlZjYiLCJfb3B0aW9uJHZhbHVlMyIsIl9vcHRpb24kdmFsdWU0IiwiZGF5cyIsInBhcnNlSW50IiwiZGVhZGxpbmUiLCJzaGlwcGluZ1RpbWVJbmNsdWRlZCIsImRlYWRsaW5lTGFiZWwiLCJfcmVmNyIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsIl9yZWY3JHNlbGVjdGFibGVPcHRpbyIsIl9yZWY3JGZpZWxkT3B0aW9ucyIsImZpcnN0T3B0aW9uIiwiaXNDb2xvdXJTZWxlY3QiLCJDT0xPVVJfU0VMRUNUIiwiaXNJbWFnZVNlbGVjdCIsIklNQUdFX1NFTEVDVCIsInJlbmRlck9wdGlvbkxhYmVsIiwiX28kdmFsdWUyIiwiaSIsIl9vJG9wdGlvbklkIiwiVmFyaWF0aW9uc0luZm8iLCJfcmVmOCIsInF1YW50aXR5IiwiX3JlZjgkdmFyaWF0aW9ucyIsInZhcmlhdGlvbnMiLCJ2IiwiVmFyaWF0aW9uR3JvdXBJbmZvIiwiX3JlZjkiLCJncm91cCIsInNob3dTZXR1cE9uVW5pdFByaWNlIiwiaXNSZXNlbGwiLCJ2aXNpYmxlVmFyaWF0aW9ucyIsImZpbHRlciIsIl92JHZhcmlhdGlvbkZpZWxkIiwiY29zdExhYmVsIiwidW5pdFByaWNlVmFsdWUiLCJncm91cENvc3QiLCJKb2JJbmZvQ29udGVudCIsIl91c2VNZXJjaGlDaGVja2JvdXRDbyIsImpvYiIsIl9qb2IkcXVhbnRpdHkiLCJfam9iJHZhcmlhdGlvbnMiLCJfam9iJHZhcmlhdGlvbnNHcm91cHMiLCJ2YXJpYXRpb25zR3JvdXBzIiwibmVlZHNTaGlwcGluZyIsImhhc0dyb3VwcyIsImpvYkxldmVsVmFyaWF0aW9ucyIsIl92JHZhcmlhdGlvbkZpZWxkMiIsInRvdGFsUXVhbnRpdHkiLCJyZWR1Y2UiLCJzdW0iLCJnIiwiaGFzU2V0dXBQcmljZSIsImFtb3VudCIsImxhYmVsRXh0cmEiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9Kb2JJbmZvQ29udGVudC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBGYUZpbGVQZGYgfSBmcm9tICdyZWFjdC1pY29ucy9mYSc7XHJcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5LCBjdXJyZW5jeVRvdGFsQ29zdFNob3dJbmNUYXggfSBmcm9tICcuL2N1cnJlbmN5JztcclxuaW1wb3J0IHtcclxuICBpc0luc3RydWN0aW9uc1R5cGUsXHJcbiAgaXNQcm9kdWN0U3VwcGxpZXJNT0QsXHJcbiAgaXNTZWxlY3RhYmxlLFxyXG4gIEZpZWxkVHlwZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IHVzZU1lcmNoaUNoZWNrYm91dENvbnRleHQgfSBmcm9tICcuL01lcmNoaUNoZWNrb3V0UHJvdmlkZXInO1xyXG5pbXBvcnQge1xyXG4gIFN1bW1hcnlBbW91bnRSb3csXHJcbiAgU3VtbWFyeUZpZWxkUm93LFxyXG59IGZyb20gJy4vQ2hlY2tvdXRTdW1tYXJ5RmllbGRzJztcclxuXHJcbmZ1bmN0aW9uIGZvcm1hdENvc3QocHJvZHVjdDogYW55LCBjb3N0OiBudW1iZXIpIHtcclxuICBjb25zdCBjdXJyZW5jeSA9IHByb2R1Y3QuY3VycmVuY3kgPyBwcm9kdWN0LmN1cnJlbmN5IDogJ0FVRCc7XHJcbiAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KGNvc3QsIHtcclxuICAgIGN1cnJlbmN5LFxyXG4gICAgc2hvd0NvZGVJZk5vU3ltYm9sOiBmYWxzZSxcclxuICB9KTtcclxufVxyXG5cclxuLyoqIFByb2R1Y3Qgc2V0dXAgZmVlIHNob3duIG5leHQgdG8gdW5pdCBwcmljZSwgbWF0Y2hpbmcgcHJvZHVjdC1mb3JtIHdvcmRpbmcuICovXHJcbmZ1bmN0aW9uIHByb2R1Y3RTZXR1cFN1ZmZpeChwcm9kdWN0OiBhbnkpIHtcclxuICBjb25zdCBzZXR1cFByaWNlID0gTnVtYmVyKHByb2R1Y3Q/LnNldHVwUHJpY2UpO1xyXG4gIGlmICghc2V0dXBQcmljZSkgcmV0dXJuICcnO1xyXG4gIGNvbnN0IGxhYmVsID0gcHJvZHVjdC5zZXR1cFBlckdyb3VwID8gJ3NldHVwIHBlciBncm91cCcgOiAnc2V0dXAnO1xyXG4gIHJldHVybiBgICsgJHtmb3JtYXRDb3N0KHByb2R1Y3QsIHNldHVwUHJpY2UpfSAke2xhYmVsfWA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cChwcm9kdWN0OiBhbnkpIHtcclxuICByZXR1cm4gYCR7Zm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdD8udW5pdFByaWNlKSB8fCAwKX0ke3Byb2R1Y3RTZXR1cFN1ZmZpeChwcm9kdWN0KX1gO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1BkZihmaWxlOiBhbnkpIHtcclxuICBjb25zdCBtaW1ldHlwZSA9IGZpbGU/Lm1pbWV0eXBlIHx8ICcnO1xyXG4gIHJldHVybiBtaW1ldHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgbWltZXR5cGUgPT09ICdhcHBsaWNhdGlvbi94LXBkZic7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSW1hZ2VGaWxlKGZpbGU6IGFueSkge1xyXG4gIGNvbnN0IG1pbWV0eXBlID0gZmlsZT8ubWltZXR5cGUgfHwgJyc7XHJcbiAgaWYgKG1pbWV0eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSByZXR1cm4gdHJ1ZTtcclxuICBjb25zdCBuYW1lID0gKGZpbGU/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XHJcbiAgcmV0dXJuIC9cXC4oanBlP2d8cG5nfGdpZnx3ZWJwfHN2Z3xibXApJC8udGVzdChuYW1lKTtcclxufVxyXG5cclxuZnVuY3Rpb24gb3B0aW9uSW1hZ2VVcmwob3B0aW9uOiBhbnkpIHtcclxuICByZXR1cm4gb3B0aW9uPy5saW5rZWRGaWxlPy52aWV3VXJsIHx8ICcnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdPcHRpb24ob3B0aW9uOiBhbnksIG9wdGlvbnM6IGFueVtdID0gW10pIHtcclxuICByZXR1cm4gb3B0aW9ucy5maW5kKChvKSA9PiBTdHJpbmcoby5vcHRpb25JZCkgPT09IFN0cmluZyhvcHRpb24/Lm9wdGlvbklkKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVPcHRpb25Db2xvdXIoXHJcbiAgb3B0aW9uOiBhbnksXHJcbiAgc2VsZWN0YWJsZU9wdGlvbnM6IGFueVtdID0gW10sXHJcbiAgZmllbGRPcHRpb25zOiBhbnlbXSA9IFtdXHJcbikge1xyXG4gIGNvbnN0IGRpcmVjdCA9IG9wdGlvbj8uY29sb3VyPy50cmltKCk7XHJcbiAgaWYgKGRpcmVjdCkgcmV0dXJuIGRpcmVjdDtcclxuICBjb25zdCBmcm9tU2VsZWN0YWJsZSA9IGZpbmRNYXRjaGluZ09wdGlvbihvcHRpb24sIHNlbGVjdGFibGVPcHRpb25zKT8uY29sb3VyPy50cmltKCk7XHJcbiAgaWYgKGZyb21TZWxlY3RhYmxlKSByZXR1cm4gZnJvbVNlbGVjdGFibGU7XHJcbiAgcmV0dXJuIGZpbmRNYXRjaGluZ09wdGlvbihvcHRpb24sIGZpZWxkT3B0aW9ucyk/LmNvbG91cj8udHJpbSgpIHx8ICcnO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlT3B0aW9uSW1hZ2VVcmwoXHJcbiAgb3B0aW9uOiBhbnksXHJcbiAgc2VsZWN0YWJsZU9wdGlvbnM6IGFueVtdID0gW10sXHJcbiAgZmllbGRPcHRpb25zOiBhbnlbXSA9IFtdXHJcbikge1xyXG4gIGNvbnN0IGRpcmVjdCA9IG9wdGlvbkltYWdlVXJsKG9wdGlvbik7XHJcbiAgaWYgKGRpcmVjdCkgcmV0dXJuIGRpcmVjdDtcclxuICBjb25zdCBmcm9tU2VsZWN0YWJsZSA9IG9wdGlvbkltYWdlVXJsKFxyXG4gICAgZmluZE1hdGNoaW5nT3B0aW9uKG9wdGlvbiwgc2VsZWN0YWJsZU9wdGlvbnMpXHJcbiAgKTtcclxuICBpZiAoZnJvbVNlbGVjdGFibGUpIHJldHVybiBmcm9tU2VsZWN0YWJsZTtcclxuICByZXR1cm4gb3B0aW9uSW1hZ2VVcmwoZmluZE1hdGNoaW5nT3B0aW9uKG9wdGlvbiwgZmllbGRPcHRpb25zKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdE9wdGlvbkNvc3QoXHJcbiAgcHJvZHVjdDogYW55LFxyXG4gIG9wdGlvbjogYW55LFxyXG4gIHNlbGxlclByb2R1Y3RFZGl0YWJsZTogYm9vbGVhblxyXG4pIHtcclxuICBpZiAoIW9wdGlvbj8udG90YWxDb3N0IHx8IHNlbGxlclByb2R1Y3RFZGl0YWJsZSkgcmV0dXJuIG51bGw7XHJcbiAgcmV0dXJuIGAgKyAke2Zvcm1hdENvc3QocHJvZHVjdCwgb3B0aW9uLnRvdGFsQ29zdCl9YDtcclxufVxyXG5cclxuZnVuY3Rpb24gVmFyaWF0aW9uRmlsZVByZXZpZXcoeyBmaWxlIH06IHsgZmlsZTogYW55IH0pIHtcclxuICBjb25zdCBmaWxlVXJsID0gZmlsZT8udmlld1VybCB8fCBmaWxlPy5kb3dubG9hZFVybCB8fCAnJztcclxuICBjb25zdCBmaWxlTmFtZSA9IGZpbGU/Lm5hbWUgfHwgJ0ZpbGUnO1xyXG5cclxuICBpZiAoaXNQZGYoZmlsZSkpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxhXHJcbiAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1maWxlLWxpbmsnXHJcbiAgICAgICAgaHJlZj17ZmlsZVVybH1cclxuICAgICAgICB0YXJnZXQ9J19ibGFuaydcclxuICAgICAgICByZWw9J25vb3BlbmVyIG5vcmVmZXJyZXInXHJcbiAgICAgICAgdGl0bGU9e2ZpbGVOYW1lfVxyXG4gICAgICA+XHJcbiAgICAgICAgPEZhRmlsZVBkZiBhcmlhLWhpZGRlbiAvPlxyXG4gICAgICAgIDxzcGFuPntmaWxlTmFtZX08L3NwYW4+XHJcbiAgICAgIDwvYT5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoaXNJbWFnZUZpbGUoZmlsZSkgJiYgZmlsZVVybCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGltZ1xyXG4gICAgICAgIGNsYXNzTmFtZT0nbW9kYWwtbWVyY2hpLWNoZWNrb3V0LWpvYi1pbmZvLWNvbnRlbnQtaW1nJ1xyXG4gICAgICAgIHNyYz17ZmlsZVVybH1cclxuICAgICAgICBhbHQ9e2ZpbGVOYW1lfVxyXG4gICAgICAgIHRpdGxlPXtmaWxlTmFtZX1cclxuICAgICAgLz5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoZmlsZVVybCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGFcclxuICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWZpbGUtbGluaydcclxuICAgICAgICBocmVmPXtmaWxlVXJsfVxyXG4gICAgICAgIHRhcmdldD0nX2JsYW5rJ1xyXG4gICAgICAgIHJlbD0nbm9vcGVuZXIgbm9yZWZlcnJlcidcclxuICAgICAgICB0aXRsZT17ZmlsZU5hbWV9XHJcbiAgICAgID5cclxuICAgICAgICB7ZmlsZU5hbWV9XHJcbiAgICAgIDwvYT5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gPHNwYW4+e2ZpbGVOYW1lfTwvc3Bhbj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFZhcmlhdGlvbkluZm9Cb2R5KHsgY29zdCwgbmFtZSwgcHJvZHVjdCwgdmFsdWUsIGZpbGVzLCB0eXBlIH06IGFueSkge1xyXG4gIGNvbnN0IGlzQ29sb3VyUGlja2VyID0gdHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9QSUNLRVI7XHJcbiAgY29uc3QgaXNGaWxlVXBsb2FkID0gdHlwZSA9PT0gRmllbGRUeXBlLkZJTEVfVVBMT0FEO1xyXG4gIGNvbnN0IGhhc0ZpbGVzID0gQm9vbGVhbihmaWxlcz8ubGVuZ3RoKTtcclxuICBjb25zdCBkaXNwbGF5VmFsdWUgPSBpc0NvbG91clBpY2tlciB8fCAoaXNGaWxlVXBsb2FkICYmIGhhc0ZpbGVzKSA/IG51bGwgOiB2YWx1ZTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tcm93Jz5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1sYWJlbCc+e25hbWV9PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUnPlxyXG4gICAgICAgIHtoYXNGaWxlcyAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktZmlsZS1wcmV2aWV3cyc+XHJcbiAgICAgICAgICAgIHtmaWxlcy5tYXAoKGZpbGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gKFxyXG4gICAgICAgICAgICAgIDxWYXJpYXRpb25GaWxlUHJldmlld1xyXG4gICAgICAgICAgICAgICAga2V5PXtmaWxlLnZpZXdVcmwgfHwgZmlsZS5pZCB8fCBgJHtuYW1lfS1maWxlLSR7aW5kZXh9YH1cclxuICAgICAgICAgICAgICAgIGZpbGU9e2ZpbGV9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHtpc0NvbG91clBpY2tlciAmJiB2YWx1ZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktY29sb3VyLXZhbHVlJz5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IHZhbHVlIH19XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdjb2xvci1pbmRpY2F0b3InXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxzcGFuPnt2YWx1ZX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHtkaXNwbGF5VmFsdWUgJiYgZGlzcGxheVZhbHVlfVxyXG4gICAgICAgIHtjb3N0ID8gYCArICR7Zm9ybWF0Q29zdChwcm9kdWN0LCBjb3N0KX1gIDogJyd9XHJcbiAgICAgICAgeyFoYXNGaWxlcyAmJiAhdmFsdWUgJiYgJy0nfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFZhcmlhdGlvbkluZm8oeyBwcm9kdWN0LCB2YXJpYXRpb24gfTogYW55KSB7XHJcbiAgY29uc3QgeyBzZWxlY3RlZE9wdGlvbnMsIHZhcmlhdGlvbkZpZWxkLCB2YXJpYXRpb25GaWxlcywgc2VsZWN0YWJsZU9wdGlvbnMgfSA9XHJcbiAgICB2YXJpYXRpb247XHJcbiAgY29uc3QgeyBmaWVsZFR5cGUsIHNlbGxlclByb2R1Y3RFZGl0YWJsZSwgb3B0aW9uczogZmllbGRPcHRpb25zID0gW10gfSA9XHJcbiAgICB2YXJpYXRpb25GaWVsZDtcclxuICBjb25zdCBpc1ZhcmlhdGlvblNlbGVjdGFibGUgPSBpc1NlbGVjdGFibGUoZmllbGRUeXBlKTtcclxuICBjb25zdCBpc1R1cm5hcm91bmRUaW1lID0gZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVFVSTkFST1VORF9USU1FO1xyXG4gIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3RlZE9wdGlvbnM7XHJcbiAgY29uc3QgdXNlU2VsZWN0YWJsZURpc3BsYXkgPVxyXG4gICAgaXNWYXJpYXRpb25TZWxlY3RhYmxlICYmXHJcbiAgICAoQm9vbGVhbihvcHRpb25zPy5sZW5ndGgpIHx8IChpc1R1cm5hcm91bmRUaW1lICYmIHZhcmlhdGlvbi52YWx1ZSkpO1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uJz5cclxuICAgICAge3VzZVNlbGVjdGFibGVEaXNwbGF5ID8gKFxyXG4gICAgICAgIDxWYXJpYXRpb25PcHRpb25zSW5mb0JvZHlcclxuICAgICAgICAgIG5hbWU9e3ZhcmlhdGlvbkZpZWxkLm5hbWV9XHJcbiAgICAgICAgICBmaWVsZFR5cGU9e2ZpZWxkVHlwZX1cclxuICAgICAgICAgIHZhbHVlPXt2YXJpYXRpb24udmFsdWV9XHJcbiAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxyXG4gICAgICAgICAgZmlsZXM9e3ZhcmlhdGlvbkZpbGVzfVxyXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zPXtvcHRpb25zfVxyXG4gICAgICAgICAgdmFyaWF0aW9uPXt2YXJpYXRpb259XHJcbiAgICAgICAgICBzZWxlY3RhYmxlT3B0aW9ucz17c2VsZWN0YWJsZU9wdGlvbnN9XHJcbiAgICAgICAgICBmaWVsZE9wdGlvbnM9e2ZpZWxkT3B0aW9uc31cclxuICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZT17c2VsbGVyUHJvZHVjdEVkaXRhYmxlfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICkgOiAoXHJcbiAgICAgICAgPFZhcmlhdGlvbkluZm9Cb2R5XHJcbiAgICAgICAgICBuYW1lPXt2YXJpYXRpb25GaWVsZC5uYW1lfVxyXG4gICAgICAgICAgdHlwZT17dmFyaWF0aW9uRmllbGQuZmllbGRUeXBlfVxyXG4gICAgICAgICAgdmFsdWU9e3ZhcmlhdGlvbi52YWx1ZX1cclxuICAgICAgICAgIGZpbGVzPXt2YXJpYXRpb25GaWxlc31cclxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XHJcbiAgICAgICAgICBjb3N0PXtzZWxsZXJQcm9kdWN0RWRpdGFibGUgPyAwIDogdmFyaWF0aW9uLmNvc3R9XHJcbiAgICAgICAgLz5cclxuICAgICAgKX1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIENvbG91clNlbGVjdE9wdGlvbih7XHJcbiAgb3B0aW9uLFxyXG4gIHNlbGVjdGFibGVPcHRpb25zLFxyXG4gIGZpZWxkT3B0aW9ucyxcclxufToge1xyXG4gIG9wdGlvbjogYW55O1xyXG4gIHNlbGVjdGFibGVPcHRpb25zPzogYW55W107XHJcbiAgZmllbGRPcHRpb25zPzogYW55W107XHJcbn0pIHtcclxuICBjb25zdCBsYWJlbCA9IG9wdGlvbj8udmFsdWU/LnRyaW0oKSB8fCAnJztcclxuICBjb25zdCBoZXggPSByZXNvbHZlT3B0aW9uQ29sb3VyKG9wdGlvbiwgc2VsZWN0YWJsZU9wdGlvbnMsIGZpZWxkT3B0aW9ucyk7XHJcbiAgcmV0dXJuIChcclxuICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktY29sb3VyLW9wdGlvbic+XHJcbiAgICAgIHtoZXggJiYgKFxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGhleCB9fVxyXG4gICAgICAgICAgY2xhc3NOYW1lPSdjb2xvci1pbmRpY2F0b3InXHJcbiAgICAgICAgLz5cclxuICAgICAgKX1cclxuICAgICAgPHNwYW4+e2xhYmVsIHx8IGhleCB8fCAn4oCTJ308L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gSW1hZ2VTZWxlY3RPcHRpb24oe1xyXG4gIG9wdGlvbixcclxuICBzZWxlY3RhYmxlT3B0aW9ucyxcclxuICBmaWVsZE9wdGlvbnMsXHJcbiAgcHJvZHVjdCxcclxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGUsXHJcbn06IHtcclxuICBvcHRpb246IGFueTtcclxuICBzZWxlY3RhYmxlT3B0aW9ucz86IGFueVtdO1xyXG4gIGZpZWxkT3B0aW9ucz86IGFueVtdO1xyXG4gIHByb2R1Y3Q6IGFueTtcclxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGU6IGJvb2xlYW47XHJcbn0pIHtcclxuICBjb25zdCBpbWFnZVVybCA9IHJlc29sdmVPcHRpb25JbWFnZVVybChvcHRpb24sIHNlbGVjdGFibGVPcHRpb25zLCBmaWVsZE9wdGlvbnMpO1xyXG4gIGNvbnN0IGxhYmVsID0gb3B0aW9uPy52YWx1ZT8udHJpbSgpIHx8ICcnO1xyXG4gIGNvbnN0IGNvc3QgPSBmb3JtYXRPcHRpb25Db3N0KHByb2R1Y3QsIG9wdGlvbiwgc2VsbGVyUHJvZHVjdEVkaXRhYmxlKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktaW1hZ2Utc2VsZWN0LW9wdGlvbic+XHJcbiAgICAgIHtpbWFnZVVybCA/IChcclxuICAgICAgICA8aW1nXHJcbiAgICAgICAgICBjbGFzc05hbWU9J21vZGFsLW1lcmNoaS1jaGVja291dC1qb2ItaW5mby1jb250ZW50LWltZydcclxuICAgICAgICAgIHNyYz17aW1hZ2VVcmx9XHJcbiAgICAgICAgICBhbHQ9e2xhYmVsIHx8ICdTZWxlY3RlZCBvcHRpb24nfVxyXG4gICAgICAgICAgdGl0bGU9e2xhYmVsIHx8IHVuZGVmaW5lZH1cclxuICAgICAgICAvPlxyXG4gICAgICApIDogbnVsbH1cclxuICAgICAgPHNwYW4+e2xhYmVsIHx8ICfigJMnfXtjb3N0IHx8ICcnfTwvc3Bhbj5cclxuICAgIDwvc3Bhbj5cclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPcHRpb25JZChvcHRpb246IGFueSkge1xyXG4gIHJldHVybiBvcHRpb24/Lm9wdGlvbklkID8/IG9wdGlvbj8uaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVUdXJuYXJvdW5kU2VsZWN0ZWRPcHRpb24oXHJcbiAgdmFyaWF0aW9uOiBhbnksXHJcbiAgc2VsZWN0YWJsZU9wdGlvbnM6IGFueVtdID0gW10sXHJcbiAgZmllbGRPcHRpb25zOiBhbnlbXSA9IFtdXHJcbikge1xyXG4gIGNvbnN0IHsgc2VsZWN0ZWRPcHRpb25zID0gW10sIHZhbHVlIH0gPSB2YXJpYXRpb247XHJcbiAgaWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zWzBdO1xyXG4gIH1cclxuICBjb25zdCB2YWx1ZVN0ciA9IHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnID8gU3RyaW5nKHZhbHVlKS50cmltKCkgOiAnJztcclxuICBpZiAoIXZhbHVlU3RyKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgY29uc3QgcG9vbHMgPSBbc2VsZWN0YWJsZU9wdGlvbnMsIGZpZWxkT3B0aW9uc107XHJcbiAgZm9yIChjb25zdCBwb29sIG9mIHBvb2xzKSB7XHJcbiAgICBjb25zdCBieUlkID0gcG9vbC5maW5kKFxyXG4gICAgICAobzogYW55KSA9PiBTdHJpbmcoZ2V0T3B0aW9uSWQobykpID09PSB2YWx1ZVN0clxyXG4gICAgKTtcclxuICAgIGlmIChieUlkKSByZXR1cm4gYnlJZDtcclxuICAgIGNvbnN0IGJ5VmFsdWUgPSBwb29sLmZpbmQoXHJcbiAgICAgIChvOiBhbnkpID0+IFN0cmluZyhvLnZhbHVlID8/ICcnKSA9PT0gdmFsdWVTdHJcclxuICAgICk7XHJcbiAgICBpZiAoYnlWYWx1ZSkgcmV0dXJuIGJ5VmFsdWU7XHJcbiAgfVxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRUdXJuYXJvdW5kRGVhZGxpbmUodXNlckRlYWRsaW5lOiBhbnkpIHtcclxuICBpZiAoIXVzZXJEZWFkbGluZSkgcmV0dXJuIG51bGw7XHJcbiAgY29uc3Qgc2Vjb25kcyA9IE51bWJlcih1c2VyRGVhZGxpbmUpO1xyXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHNlY29uZHMpIHx8IHNlY29uZHMgPD0gMCkgcmV0dXJuIG51bGw7XHJcbiAgcmV0dXJuIG5ldyBEYXRlKHNlY29uZHMgKiAxMDAwKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLUFVJywge1xyXG4gICAgd2Vla2RheTogJ2xvbmcnLFxyXG4gICAgeWVhcjogJ251bWVyaWMnLFxyXG4gICAgbW9udGg6ICdsb25nJyxcclxuICAgIGRheTogJ251bWVyaWMnLFxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBUdXJuYXJvdW5kT3B0aW9uTGFiZWwoe1xyXG4gIG9wdGlvbixcclxuICB2YXJpYXRpb25GaWVsZCxcclxuICBwcm9kdWN0LFxyXG4gIHNlbGxlclByb2R1Y3RFZGl0YWJsZSxcclxufToge1xyXG4gIG9wdGlvbjogYW55O1xyXG4gIHZhcmlhdGlvbkZpZWxkOiBhbnk7XHJcbiAgcHJvZHVjdDogYW55O1xyXG4gIHNlbGxlclByb2R1Y3RFZGl0YWJsZTogYm9vbGVhbjtcclxufSkge1xyXG4gIGNvbnN0IGRheXMgPSBwYXJzZUludChTdHJpbmcob3B0aW9uPy52YWx1ZSA/PyAnJyksIDEwKSB8fCAwO1xyXG4gIGNvbnN0IGRlYWRsaW5lID0gZm9ybWF0VHVybmFyb3VuZERlYWRsaW5lKG9wdGlvbj8udXNlckRlYWRsaW5lKTtcclxuICBjb25zdCBzaGlwcGluZ1RpbWVJbmNsdWRlZCA9IEJvb2xlYW4odmFyaWF0aW9uRmllbGQ/LnNoaXBwaW5nVGltZUluY2x1ZGVkKTtcclxuICBjb25zdCBkZWFkbGluZUxhYmVsID0gc2hpcHBpbmdUaW1lSW5jbHVkZWQgPyAnRGVsaXZlcnkgYnknIDogJ1Byb2R1Y2VkIGJ5JztcclxuICBjb25zdCBjb3N0ID0gZm9ybWF0T3B0aW9uQ29zdChwcm9kdWN0LCBvcHRpb24sIHNlbGxlclByb2R1Y3RFZGl0YWJsZSk7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8c3BhbiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXR1cm5hcm91bmQtdmFsdWUnPlxyXG4gICAgICA8c3BhbiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXR1cm5hcm91bmQtZGF5cyc+XHJcbiAgICAgICAge2RheXMgPiAwXHJcbiAgICAgICAgICA/IGAke2RheXN9IGJ1c2luZXNzIGRheSR7ZGF5cyAhPT0gMSA/ICdzJyA6ICcnfWBcclxuICAgICAgICAgIDogKG9wdGlvbj8udmFsdWU/LnRyaW0oKSB8fCAn4oCTJyl9XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAge2RlYWRsaW5lICYmIChcclxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXR1cm5hcm91bmQtZGVhZGxpbmUnPlxyXG4gICAgICAgICAge2RlYWRsaW5lTGFiZWx9IHtkZWFkbGluZX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICl9XHJcbiAgICAgIHtjb3N0IHx8ICcnfVxyXG4gICAgPC9zcGFuPlxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFZhcmlhdGlvbk9wdGlvbnNJbmZvQm9keSh7XHJcbiAgbmFtZSxcclxuICBzZWxlY3RlZE9wdGlvbnMsXHJcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxyXG4gIHByb2R1Y3QsXHJcbiAgZmllbGRUeXBlLFxyXG4gIHZhcmlhdGlvbixcclxuICBzZWxlY3RhYmxlT3B0aW9ucyA9IFtdLFxyXG4gIGZpZWxkT3B0aW9ucyA9IFtdLFxyXG59OiBhbnkpIHtcclxuICBjb25zdCBpc1R1cm5hcm91bmRUaW1lID0gZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVFVSTkFST1VORF9USU1FO1xyXG4gIGNvbnN0IGZpcnN0T3B0aW9uID0gaXNUdXJuYXJvdW5kVGltZVxyXG4gICAgPyByZXNvbHZlVHVybmFyb3VuZFNlbGVjdGVkT3B0aW9uKFxyXG4gICAgICAgIHsgc2VsZWN0ZWRPcHRpb25zLCB2YWx1ZTogdmFyaWF0aW9uPy52YWx1ZSB9LFxyXG4gICAgICAgIHNlbGVjdGFibGVPcHRpb25zLFxyXG4gICAgICAgIGZpZWxkT3B0aW9uc1xyXG4gICAgICApXHJcbiAgICA6IHNlbGVjdGVkT3B0aW9uc1swXTtcclxuICBjb25zdCBpc0NvbG91clNlbGVjdCA9IGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9TRUxFQ1Q7XHJcbiAgY29uc3QgaXNJbWFnZVNlbGVjdCA9IGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLklNQUdFX1NFTEVDVDtcclxuICBjb25zdCB2YXJpYXRpb25GaWVsZCA9IHZhcmlhdGlvbj8udmFyaWF0aW9uRmllbGQgPz8ge307XHJcblxyXG4gIGZ1bmN0aW9uIHJlbmRlck9wdGlvbkxhYmVsKG86IGFueSkge1xyXG4gICAgaWYgKGlzVHVybmFyb3VuZFRpbWUpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8VHVybmFyb3VuZE9wdGlvbkxhYmVsXHJcbiAgICAgICAgICBvcHRpb249e299XHJcbiAgICAgICAgICB2YXJpYXRpb25GaWVsZD17dmFyaWF0aW9uRmllbGR9XHJcbiAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxyXG4gICAgICAgICAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlPXtzZWxsZXJQcm9kdWN0RWRpdGFibGV9XHJcbiAgICAgICAgLz5cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChpc0NvbG91clNlbGVjdCkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxDb2xvdXJTZWxlY3RPcHRpb25cclxuICAgICAgICAgIG9wdGlvbj17b31cclxuICAgICAgICAgIHNlbGVjdGFibGVPcHRpb25zPXtzZWxlY3RhYmxlT3B0aW9uc31cclxuICAgICAgICAgIGZpZWxkT3B0aW9ucz17ZmllbGRPcHRpb25zfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNJbWFnZVNlbGVjdCkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxJbWFnZVNlbGVjdE9wdGlvblxyXG4gICAgICAgICAgb3B0aW9uPXtvfVxyXG4gICAgICAgICAgc2VsZWN0YWJsZU9wdGlvbnM9e3NlbGVjdGFibGVPcHRpb25zfVxyXG4gICAgICAgICAgZmllbGRPcHRpb25zPXtmaWVsZE9wdGlvbnN9XHJcbiAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxyXG4gICAgICAgICAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlPXtzZWxsZXJQcm9kdWN0RWRpdGFibGV9XHJcbiAgICAgICAgLz5cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge28udmFsdWU/LnRyaW0oKSB8fCAn4oCTJ31cclxuICAgICAgICB7Zm9ybWF0T3B0aW9uQ29zdChwcm9kdWN0LCBvLCBzZWxsZXJQcm9kdWN0RWRpdGFibGUpIHx8ICcnfVxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAge3NlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAxICYmICFpc1R1cm5hcm91bmRUaW1lID8gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tcm93Jz5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tbGFiZWwnPntuYW1lfTwvZGl2PlxyXG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXZhbHVlIGxpc3QtdW5zdHlsZWQgbS0wJz5cclxuICAgICAgICAgICAge3NlbGVjdGVkT3B0aW9ucy5tYXAoKG86IGFueSwgaTogbnVtYmVyKSA9PiAoXHJcbiAgICAgICAgICAgICAgPGxpIGtleT17YCR7aX0tb3B0aW9uLWtleS0ke28ub3B0aW9uSWQgPz8gaX1gfT5cclxuICAgICAgICAgICAgICAgIHtyZW5kZXJPcHRpb25MYWJlbChvKX1cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICApKX1cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICkgOiBmaXJzdE9wdGlvbiA/IChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXJvdyc+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUnPlxyXG4gICAgICAgICAgICB7cmVuZGVyT3B0aW9uTGFiZWwoZmlyc3RPcHRpb24pfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICkgOiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1yb3cnPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1sYWJlbCc+e25hbWV9PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXZhbHVlJz4tPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcbiAgICA8Lz5cclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBWYXJpYXRpb25zSW5mbyh7IHByb2R1Y3QsIHF1YW50aXR5LCB2YXJpYXRpb25zID0gW10gfTogYW55KSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb25zJz5cclxuICAgICAge3ZhcmlhdGlvbnMubWFwKCh2OiBhbnksIGk6IG51bWJlcikgPT5cclxuICAgICAgICAhaXNJbnN0cnVjdGlvbnNUeXBlKHYudmFyaWF0aW9uRmllbGQuZmllbGRUeXBlKSA/IChcclxuICAgICAgICAgIDxWYXJpYXRpb25JbmZvXHJcbiAgICAgICAgICAgIHF1YW50aXR5PXtxdWFudGl0eX1cclxuICAgICAgICAgICAgdmFyaWF0aW9uPXt2fVxyXG4gICAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxyXG4gICAgICAgICAgICBrZXk9e2l9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICkgOiBudWxsXHJcbiAgICAgICl9XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBWYXJpYXRpb25Hcm91cEluZm8oe1xyXG4gIGdyb3VwLFxyXG4gIGluZGV4LFxyXG4gIHByb2R1Y3QsXHJcbiAgc2hvd1NldHVwT25Vbml0UHJpY2UsXHJcbn06IGFueSkge1xyXG4gIGNvbnN0IGlzUmVzZWxsID0gaXNQcm9kdWN0U3VwcGxpZXJNT0QocHJvZHVjdCk7XHJcbiAgY29uc3QgeyBxdWFudGl0eSwgdmFyaWF0aW9ucyB9ID0gZ3JvdXA7XHJcbiAgY29uc3QgdmlzaWJsZVZhcmlhdGlvbnMgPSAodmFyaWF0aW9ucyA/PyBbXSkuZmlsdGVyKFxyXG4gICAgKHY6IGFueSkgPT4gIWlzSW5zdHJ1Y3Rpb25zVHlwZSh2Py52YXJpYXRpb25GaWVsZD8uZmllbGRUeXBlKVxyXG4gICk7XHJcbiAgY29uc3QgY29zdExhYmVsID0gaXNSZXNlbGwgPyAnVW5pdCBDb3N0JyA6ICdHcm91cCBDb3N0JztcclxuICBjb25zdCB1bml0UHJpY2VWYWx1ZSA9IHNob3dTZXR1cE9uVW5pdFByaWNlXHJcbiAgICA/IGZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cChwcm9kdWN0KVxyXG4gICAgOiBmb3JtYXRDb3N0KHByb2R1Y3QsIE51bWJlcihwcm9kdWN0Py51bml0UHJpY2UpIHx8IDApO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPHNlY3Rpb24gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1ncm91cCc+XHJcbiAgICAgIDxzdHJvbmcgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1vcmRlci1kZXRhaWwtdGl0bGUnPlxyXG4gICAgICAgIEdyb3VwIHtpbmRleCArIDF9IEluZm9ybWF0aW9uXHJcbiAgICAgIDwvc3Ryb25nPlxyXG4gICAgICB7IWlzUmVzZWxsICYmIHF1YW50aXR5ID4gMCAmJiAoXHJcbiAgICAgICAgPFN1bW1hcnlGaWVsZFJvdyBsYWJlbD0nUXVhbnRpdHknIHZhbHVlPXtxdWFudGl0eX0gLz5cclxuICAgICAgKX1cclxuICAgICAgPFN1bW1hcnlGaWVsZFJvdyBsYWJlbD0nVW5pdCBQcmljZScgdmFsdWU9e3VuaXRQcmljZVZhbHVlfSAvPlxyXG4gICAgICB7dmlzaWJsZVZhcmlhdGlvbnMubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgPFZhcmlhdGlvbnNJbmZvXHJcbiAgICAgICAgICBxdWFudGl0eT17cXVhbnRpdHl9XHJcbiAgICAgICAgICB2YXJpYXRpb25zPXt2YXJpYXRpb25zfVxyXG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cclxuICAgICAgICAvPlxyXG4gICAgICApfVxyXG4gICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktZ3JvdXAtY29zdCc+XHJcbiAgICAgICAge2Nvc3RMYWJlbH06IHtmb3JtYXRDb3N0KHByb2R1Y3QsIGdyb3VwLmdyb3VwQ29zdCl9XHJcbiAgICAgIDwvc3Ryb25nPlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEpvYkluZm9Db250ZW50KCkge1xyXG4gIGNvbnN0IHsgam9iIH0gPSB1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0KCk7XHJcbiAgY29uc3QgeyBwcm9kdWN0LCBxdWFudGl0eSA9IDAsIHZhcmlhdGlvbnMgPSBbXSwgdmFyaWF0aW9uc0dyb3VwcyA9IFtdIH0gPSBqb2I7XHJcbiAgY29uc3QgeyBuZWVkc1NoaXBwaW5nIH0gPSBwcm9kdWN0O1xyXG4gIGNvbnN0IHRvdGFsQ29zdCA9IGN1cnJlbmN5VG90YWxDb3N0U2hvd0luY1RheChqb2IpO1xyXG4gIGNvbnN0IGlzUmVzZWxsID0gaXNQcm9kdWN0U3VwcGxpZXJNT0QocHJvZHVjdCk7XHJcbiAgY29uc3QgaGFzR3JvdXBzID0gdmFyaWF0aW9uc0dyb3Vwcy5sZW5ndGggPiAwO1xyXG4gIGNvbnN0IGpvYkxldmVsVmFyaWF0aW9ucyA9ICh2YXJpYXRpb25zID8/IFtdKS5maWx0ZXIoXHJcbiAgICAodjogYW55KSA9PiAhaXNJbnN0cnVjdGlvbnNUeXBlKHY/LnZhcmlhdGlvbkZpZWxkPy5maWVsZFR5cGUpXHJcbiAgKTtcclxuICBjb25zdCB0b3RhbFF1YW50aXR5ID0gaGFzR3JvdXBzXHJcbiAgICA/IHZhcmlhdGlvbnNHcm91cHMucmVkdWNlKFxyXG4gICAgICAgIChzdW06IG51bWJlciwgZzogYW55KSA9PiBzdW0gKyAoTnVtYmVyKGcucXVhbnRpdHkpIHx8IDApLFxyXG4gICAgICAgIDBcclxuICAgICAgKVxyXG4gICAgOiBOdW1iZXIocXVhbnRpdHkpIHx8IDA7XHJcbiAgY29uc3Qgc2V0dXBQZXJHcm91cCA9IEJvb2xlYW4ocHJvZHVjdD8uc2V0dXBQZXJHcm91cCk7XHJcbiAgY29uc3QgaGFzU2V0dXBQcmljZSA9IE51bWJlcihwcm9kdWN0Py5zZXR1cFByaWNlKSA+IDA7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT0nbW9kYWwtbWVyY2hpLWNoZWNrb3V0LWpvYi1pbmZvLWNvbnRlbnQgbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnknPlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktc2VjdGlvbi10aXRsZSc+e3Byb2R1Y3QubmFtZX08L2Rpdj5cclxuICAgICAge2hhc0dyb3VwcyAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWdyb3Vwcyc+XHJcbiAgICAgICAgICB7dmFyaWF0aW9uc0dyb3Vwcy5tYXAoKGc6IGFueSwgaTogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICBnLnF1YW50aXR5ID8gKFxyXG4gICAgICAgICAgICAgIDxWYXJpYXRpb25Hcm91cEluZm9cclxuICAgICAgICAgICAgICAgIGdyb3VwPXtnfVxyXG4gICAgICAgICAgICAgICAga2V5PXtgJHtpfS1qb2ItaW5mby1jb250ZW50YH1cclxuICAgICAgICAgICAgICAgIGluZGV4PXtpfVxyXG4gICAgICAgICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cclxuICAgICAgICAgICAgICAgIHNob3dTZXR1cE9uVW5pdFByaWNlPXtzZXR1cFBlckdyb3VwfVxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICkgOiBudWxsXHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgICB7IWhhc0dyb3VwcyAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXN0YW5kYWxvbmUnPlxyXG4gICAgICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LW9yZGVyLWRldGFpbC10aXRsZSc+XHJcbiAgICAgICAgICAgIE9yZGVyIEluZm9ybWF0aW9uXHJcbiAgICAgICAgICA8L3N0cm9uZz5cclxuICAgICAgICAgIHtxdWFudGl0eSA+IDAgJiYgKFxyXG4gICAgICAgICAgICA8U3VtbWFyeUZpZWxkUm93IGxhYmVsPSdRdWFudGl0eScgdmFsdWU9e3F1YW50aXR5fSAvPlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICAgIDxTdW1tYXJ5RmllbGRSb3dcclxuICAgICAgICAgICAgbGFiZWw9J1VuaXQgUHJpY2UnXHJcbiAgICAgICAgICAgIHZhbHVlPXtmb3JtYXRVbml0UHJpY2VXaXRoU2V0dXAocHJvZHVjdCl9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAge2pvYkxldmVsVmFyaWF0aW9ucy5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgICAgPFZhcmlhdGlvbnNJbmZvXHJcbiAgICAgICAgICAgICAgcXVhbnRpdHk9e3F1YW50aXR5fVxyXG4gICAgICAgICAgICAgIHZhcmlhdGlvbnM9e3ZhcmlhdGlvbnN9XHJcbiAgICAgICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcbiAgICAgIHtoYXNHcm91cHMgJiYgam9iTGV2ZWxWYXJpYXRpb25zLmxlbmd0aCA+IDAgJiYgKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1zdGFuZGFsb25lJz5cclxuICAgICAgICAgIDxzdHJvbmcgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1vcmRlci1kZXRhaWwtdGl0bGUnPlxyXG4gICAgICAgICAgICBPcmRlciBJbmZvcm1hdGlvblxyXG4gICAgICAgICAgPC9zdHJvbmc+XHJcbiAgICAgICAgICA8VmFyaWF0aW9uc0luZm9cclxuICAgICAgICAgICAgcXVhbnRpdHk9e3F1YW50aXR5fVxyXG4gICAgICAgICAgICB2YXJpYXRpb25zPXt2YXJpYXRpb25zfVxyXG4gICAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKX1cclxuICAgICAgeyFpc1Jlc2VsbCAmJiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXRvdGFsJz5cclxuICAgICAgICAgIHt0b3RhbFF1YW50aXR5ID4gMCAmJiAoXHJcbiAgICAgICAgICAgIDxTdW1tYXJ5QW1vdW50Um93XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS10b3RhbC1xdWFudGl0eSdcclxuICAgICAgICAgICAgICBsYWJlbD0nVG90YWwgUXVhbnRpdHknXHJcbiAgICAgICAgICAgICAgYW1vdW50PXt0b3RhbFF1YW50aXR5fVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICAgIHtoYXNHcm91cHMgJiYgaGFzU2V0dXBQcmljZSAmJiAhc2V0dXBQZXJHcm91cCAmJiAoXHJcbiAgICAgICAgICAgIDxTdW1tYXJ5QW1vdW50Um93XHJcbiAgICAgICAgICAgICAgbGFiZWw9J1NldHVwJ1xyXG4gICAgICAgICAgICAgIGFtb3VudD17Zm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdC5zZXR1cFByaWNlKSl9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgICAgPFN1bW1hcnlBbW91bnRSb3dcclxuICAgICAgICAgICAgbGFiZWw9J1RvdGFsIE9yZGVyIENvc3QnXHJcbiAgICAgICAgICAgIGxhYmVsRXh0cmE9e1xyXG4gICAgICAgICAgICAgIG5lZWRzU2hpcHBpbmcgPyAoXHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS10b3RhbC1ub3RlJz4gZXggU2hpcG1lbnQ8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICkgOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbW91bnQ9e3RvdGFsQ29zdH1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcbiAgICAgIHshIShpc1Jlc2VsbCAmJiAhaGFzR3JvdXBzKSAmJiAoXHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxzdHJvbmcgY2xhc3NOYW1lPSdtYi0wJz5cclxuICAgICAgICAgICAge2lzUmVzZWxsID8gJ0FwcHJveGltYXRlIFVuaXQnIDogJ1RvdGFsJ30gQ29zdFxyXG4gICAgICAgICAgPC9zdHJvbmc+eycgJ31cclxuICAgICAgICAgIDxzdHJvbmcgY2xhc3NOYW1lPSdtYi0wIGQtYmxvY2snPnt0b3RhbENvc3R9PC9zdHJvbmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFDWixPQUFPQSxLQUFLLE1BQU0sT0FBTztBQUN6QixT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
730
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm8iLCJhbGxvd0FycmF5TGlrZSIsIml0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJpIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZSIsIl9lIiwiZiIsIlR5cGVFcnJvciIsIm5vcm1hbENvbXBsZXRpb24iLCJkaWRFcnIiLCJlcnIiLCJjYWxsIiwic3RlcCIsIm5leHQiLCJfZTIiLCJfc2xpY2VkVG9BcnJheSIsImFyciIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsImxlbiIsImFycjIiLCJyIiwibCIsInQiLCJ1IiwiYSIsInB1c2giLCJSZWFjdCIsInVzZVN0YXRlIiwiRmFGaWxlUGRmIiwiRmFSZWdJbWFnZSIsImZvcm1hdEN1cnJlbmN5IiwiY3VycmVuY3lUb3RhbENvc3RTaG93SW5jVGF4IiwiaXNJbnN0cnVjdGlvbnNUeXBlIiwiaXNQcm9kdWN0U3VwcGxpZXJNT0QiLCJpc1NlbGVjdGFibGUiLCJGaWVsZFR5cGUiLCJlc3RpbWF0ZUFyZWFDb3N0cyIsImZvcm1hdEFyZWFTdW1tYXJ5IiwibG9jYWxlUHJlZmVyc0ltcGVyaWFsIiwidXNlTWVyY2hpQ2hlY2tib3V0Q29udGV4dCIsIlN1bW1hcnlBbW91bnRSb3ciLCJTdW1tYXJ5RmllbGRSb3ciLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJmb3JtYXRDb3N0IiwicHJvZHVjdCIsImNvc3QiLCJjdXJyZW5jeSIsInNob3dDb2RlSWZOb1N5bWJvbCIsInBhcnNlQ29zdEFtb3VudCIsImFtb3VudCIsInBhcnNlRmxvYXQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImZvcm1hdE9uY2VPZmZVbml0Q29zdERldGFpbCIsIm9uY2VPZmZDb3N0IiwidW5pdENvc3QiLCJwYXJ0cyIsIm9uY2VPZmYiLCJ1bml0IiwiY29uY2F0Iiwiam9pbiIsIm9wdGlvbk9uY2VPZmYiLCJvcHRpb24iLCJ2YXJpYXRpb25Db3N0Iiwib3B0aW9uVW5pdCIsInZhcmlhdGlvblVuaXRDb3N0IiwicHJvZHVjdFNldHVwU3VmZml4Iiwic2V0dXBQcmljZSIsImxhYmVsIiwic2V0dXBQZXJHcm91cCIsImZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cCIsInVuaXRQcmljZSIsImlzUGRmIiwiZmlsZSIsIm1pbWV0eXBlIiwiaXNJbWFnZUZpbGUiLCJzdGFydHNXaXRoIiwidG9Mb3dlckNhc2UiLCJhYnNvbHV0aXplRmlsZVVybCIsInJhdyIsInVybEFwaSIsInVybCIsInRyaW0iLCJiYXNlIiwiVVJMIiwib3JpZ2luIiwiaHJlZiIsIl91bnVzZWQiLCJyZXNvbHZlRmlsZVVybCIsInZpZXdVcmwiLCJkb3dubG9hZFVybCIsIm9wdGlvbkltYWdlVXJsIiwiX29wdGlvbiRsaW5rZWRGaWxlIiwiX29wdGlvbiRsaW5rZWRGaWxlMiIsImxpbmtlZEZpbGUiLCJmaW5kTWF0Y2hpbmdPcHRpb24iLCJvcHRpb25zIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZmluZCIsIlN0cmluZyIsIm9wdGlvbklkIiwicmVzb2x2ZU9wdGlvbkNvbG91ciIsIl9vcHRpb24kY29sb3VyIiwiX2ZpbmRNYXRjaGluZ09wdGlvbiIsIl9maW5kTWF0Y2hpbmdPcHRpb24yIiwic2VsZWN0YWJsZU9wdGlvbnMiLCJmaWVsZE9wdGlvbnMiLCJkaXJlY3QiLCJjb2xvdXIiLCJmcm9tU2VsZWN0YWJsZSIsInJlc29sdmVPcHRpb25JbWFnZVVybCIsImZvcm1hdE9wdGlvbkNvc3QiLCJzZWxsZXJQcm9kdWN0RWRpdGFibGUiLCJvbmNlT2ZmVW5pdCIsInRvdGFsQ29zdCIsInZhcmlhdGlvbkNvc3REZXRhaWwiLCJ2YXJpYXRpb24iLCJfdmFyaWF0aW9uJG9uY2VPZmZDb3MiLCJfdmFyaWF0aW9uJHVuaXRDb3N0IiwiX3JlZiIsIl9yZWYkaW5jbHVkZVNlbGVjdGVkTyIsImluY2x1ZGVTZWxlY3RlZE9wdGlvbkNvc3RzIiwiX3JlZiRmaWVsZENvc3RzT25seSIsImZpZWxkQ29zdHNPbmx5IiwiZmllbGQiLCJ2YXJpYXRpb25GaWVsZCIsImZpZWxkVHlwZSIsIkFSRUEiLCJhcmVhQ29zdHMiLCJzZWxlY3RlZCIsInNlbGVjdGVkT3B0aW9ucyIsImZpZWxkT25jZSIsIkNPTE9VUl9FWFRSQUNUIiwiZmllbGRVbml0IiwicmVkdWNlIiwic3VtIiwiVmFyaWF0aW9uRmlsZVByZXZpZXciLCJfcmVmMiIsImZpbGVVcmwiLCJmaWxlTmFtZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJpbWFnZUZhaWxlZCIsInNldEltYWdlRmFpbGVkIiwiY2xhc3NOYW1lIiwidGFyZ2V0IiwicmVsIiwidGl0bGUiLCJjaGlsZHJlbiIsInNyYyIsImFsdCIsIm9uRXJyb3IiLCJWYXJpYXRpb25JbmZvQm9keSIsIl9yZWYzIiwiY29zdERldGFpbCIsImZpbGVzIiwidHlwZSIsImlzQ29sb3VyUGlja2VyIiwiQ09MT1VSX1BJQ0tFUiIsImlzRmlsZVVwbG9hZCIsIkZJTEVfVVBMT0FEIiwiaGFzRmlsZXMiLCJCb29sZWFuIiwiZGlzcGxheVZhbHVlIiwibWFwIiwiaW5kZXgiLCJpZCIsInN0eWxlIiwiYmFja2dyb3VuZENvbG9yIiwiVmFyaWF0aW9uSW5mbyIsIl9yZWY0IiwiX3VzZU1lcmNoaUNoZWNrYm91dENvIiwidmFyaWF0aW9uRmlsZXMiLCJfdmFyaWF0aW9uRmllbGQkb3B0aW8iLCJpc1ZhcmlhdGlvblNlbGVjdGFibGUiLCJpc1R1cm5hcm91bmRUaW1lIiwiVFVSTkFST1VORF9USU1FIiwiaXNDb2xvdXJFeHRyYWN0IiwicmVzb2x2ZVNlbGVjdGFibGVTZWxlY3RlZE9wdGlvbnMiLCJ1c2VTZWxlY3RhYmxlRGlzcGxheSIsIlZhcmlhdGlvbk9wdGlvbnNJbmZvQm9keSIsImFyZWFVbml0IiwiQ29sb3VyU2VsZWN0T3B0aW9uIiwiX3JlZjUiLCJfb3B0aW9uJHZhbHVlIiwiaGV4IiwiSW1hZ2VTZWxlY3RPcHRpb24iLCJfcmVmNiIsIl9vcHRpb24kdmFsdWUyIiwiX3VzZU1lcmNoaUNoZWNrYm91dENvMiIsImltYWdlVXJsIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJnZXRPcHRpb25JZCIsIl9vcHRpb24kb3B0aW9uSWQiLCJzcGxpdFNlbGVjdGVkT3B0aW9uSWRzIiwiZmlsdGVyIiwic3BsaXQiLCJwYXJ0IiwiX3ZhcmlhdGlvbiR2YXJpYXRpb25GIiwic2VsZWN0ZWRJZHMiLCJwb29scyIsInJlc29sdmVkIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJfbG9vcCIsIl9pIiwiX3Bvb2xzIiwicG9vbCIsIm1hdGNoIiwicmVzb2x2ZVR1cm5hcm91bmRTZWxlY3RlZE9wdGlvbiIsInZhbHVlU3RyIiwiX2kyIiwiX3Bvb2xzMiIsImJ5VmFsdWUiLCJfb3B0aW9uJHZhbHVlMyIsImZvcm1hdFR1cm5hcm91bmREZWFkbGluZSIsInVzZXJEZWFkbGluZSIsInNlY29uZHMiLCJEYXRlIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwid2Vla2RheSIsInllYXIiLCJtb250aCIsImRheSIsIlR1cm5hcm91bmRPcHRpb25MYWJlbCIsIl9yZWY3IiwiX29wdGlvbiR2YWx1ZTQiLCJfb3B0aW9uJHZhbHVlNSIsImRheXMiLCJwYXJzZUludCIsImRlYWRsaW5lIiwic2hpcHBpbmdUaW1lSW5jbHVkZWQiLCJkZWFkbGluZUxhYmVsIiwiX3JlZjgiLCJfdmFyaWF0aW9uJHZhcmlhdGlvbkYyIiwiX3JlZjgkc2VsZWN0YWJsZU9wdGlvIiwiX3JlZjgkZmllbGRPcHRpb25zIiwiZmlyc3RPcHRpb24iLCJpc0NvbG91clNlbGVjdCIsIkNPTE9VUl9TRUxFQ1QiLCJpc0ltYWdlU2VsZWN0IiwiSU1BR0VfU0VMRUNUIiwicmVuZGVyT3B0aW9uTGFiZWwiLCJfbyR2YWx1ZSIsIl9vJG9wdGlvbklkIiwiVmFyaWF0aW9uc0luZm8iLCJfcmVmOSIsInF1YW50aXR5IiwiX3JlZjkkdmFyaWF0aW9ucyIsInZhcmlhdGlvbnMiLCJ2IiwiVmFyaWF0aW9uR3JvdXBJbmZvIiwiX3JlZjEwIiwiZ3JvdXAiLCJzaG93U2V0dXBPblVuaXRQcmljZSIsImlzUmVzZWxsIiwidmlzaWJsZVZhcmlhdGlvbnMiLCJfdiR2YXJpYXRpb25GaWVsZCIsImNvc3RMYWJlbCIsInVuaXRQcmljZVZhbHVlIiwiZ3JvdXBDb3N0IiwiSm9iSW5mb0NvbnRlbnQiLCJfdXNlTWVyY2hpQ2hlY2tib3V0Q28zIiwiam9iIiwiX2pvYiRxdWFudGl0eSIsIl9qb2IkdmFyaWF0aW9ucyIsIl9qb2IkdmFyaWF0aW9uc0dyb3VwcyIsInZhcmlhdGlvbnNHcm91cHMiLCJuZWVkc1NoaXBwaW5nIiwiaGFzR3JvdXBzIiwiam9iTGV2ZWxWYXJpYXRpb25zIiwiX3YkdmFyaWF0aW9uRmllbGQyIiwidG90YWxRdWFudGl0eSIsImciLCJoYXNTZXR1cFByaWNlIiwibGFiZWxFeHRyYSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL0pvYkluZm9Db250ZW50LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgRmFGaWxlUGRmLCBGYVJlZ0ltYWdlIH0gZnJvbSAncmVhY3QtaWNvbnMvZmEnO1xyXG5pbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSwgY3VycmVuY3lUb3RhbENvc3RTaG93SW5jVGF4IH0gZnJvbSAnLi9jdXJyZW5jeSc7XHJcbmltcG9ydCB7XHJcbiAgaXNJbnN0cnVjdGlvbnNUeXBlLFxyXG4gIGlzUHJvZHVjdFN1cHBsaWVyTU9ELFxyXG4gIGlzU2VsZWN0YWJsZSxcclxuICBGaWVsZFR5cGUsXHJcbn0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIGVzdGltYXRlQXJlYUNvc3RzLFxyXG4gIGZvcm1hdEFyZWFTdW1tYXJ5LFxyXG4gIGxvY2FsZVByZWZlcnNJbXBlcmlhbCxcclxufSBmcm9tICcuLi9hcmVhJztcclxuaW1wb3J0IHsgdXNlTWVyY2hpQ2hlY2tib3V0Q29udGV4dCB9IGZyb20gJy4vTWVyY2hpQ2hlY2tvdXRQcm92aWRlcic7XHJcbmltcG9ydCB7XHJcbiAgU3VtbWFyeUFtb3VudFJvdyxcclxuICBTdW1tYXJ5RmllbGRSb3csXHJcbn0gZnJvbSAnLi9DaGVja291dFN1bW1hcnlGaWVsZHMnO1xyXG5cclxuZnVuY3Rpb24gZm9ybWF0Q29zdChwcm9kdWN0OiBhbnksIGNvc3Q6IG51bWJlcikge1xyXG4gIGNvbnN0IGN1cnJlbmN5ID0gcHJvZHVjdC5jdXJyZW5jeSA/IHByb2R1Y3QuY3VycmVuY3kgOiAnQVVEJztcclxuICByZXR1cm4gZm9ybWF0Q3VycmVuY3koY29zdCwge1xyXG4gICAgY3VycmVuY3ksXHJcbiAgICBzaG93Q29kZUlmTm9TeW1ib2w6IGZhbHNlLFxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNvc3RBbW91bnQodmFsdWU6IGFueSk6IG51bWJlciB7XHJcbiAgY29uc3QgYW1vdW50ID0gcGFyc2VGbG9hdCh2YWx1ZSk7XHJcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShhbW91bnQpICYmIGFtb3VudCA+IDAgPyBhbW91bnQgOiAwO1xyXG59XHJcblxyXG4vKiogTWF0Y2ggcHJvZHVjdC1mb3JtIHdvcmRpbmc6IFwiKyAkWCBvbmNlIG9mZlwiIC8gXCIrICRZIHBlciB1bml0XCIuICovXHJcbmZ1bmN0aW9uIGZvcm1hdE9uY2VPZmZVbml0Q29zdERldGFpbChcclxuICBwcm9kdWN0OiBhbnksXHJcbiAgb25jZU9mZkNvc3Q6IGFueSxcclxuICB1bml0Q29zdDogYW55XHJcbikge1xyXG4gIGNvbnN0IGN1cnJlbmN5ID0gcHJvZHVjdD8uY3VycmVuY3kgfHwgJ0FVRCc7XHJcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XHJcbiAgY29uc3Qgb25jZU9mZiA9IHBhcnNlQ29zdEFtb3VudChvbmNlT2ZmQ29zdCk7XHJcbiAgY29uc3QgdW5pdCA9IHBhcnNlQ29zdEFtb3VudCh1bml0Q29zdCk7XHJcbiAgaWYgKG9uY2VPZmYpIHtcclxuICAgIHBhcnRzLnB1c2goXHJcbiAgICAgIGAgKyAke2Zvcm1hdEN1cnJlbmN5KG9uY2VPZmYsIHsgY3VycmVuY3ksIHNob3dDb2RlSWZOb1N5bWJvbDogZmFsc2UgfSl9IG9uY2Ugb2ZmYFxyXG4gICAgKTtcclxuICB9XHJcbiAgaWYgKHVuaXQpIHtcclxuICAgIHBhcnRzLnB1c2goXHJcbiAgICAgIGAgKyAke2Zvcm1hdEN1cnJlbmN5KHVuaXQsIHsgY3VycmVuY3ksIHNob3dDb2RlSWZOb1N5bWJvbDogZmFsc2UgfSl9IHBlciB1bml0YFxyXG4gICAgKTtcclxuICB9XHJcbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBvcHRpb25PbmNlT2ZmKG9wdGlvbjogYW55KTogbnVtYmVyIHtcclxuICByZXR1cm4gKFxyXG4gICAgcGFyc2VDb3N0QW1vdW50KG9wdGlvbj8ub25jZU9mZkNvc3QpIHx8XHJcbiAgICBwYXJzZUNvc3RBbW91bnQob3B0aW9uPy52YXJpYXRpb25Db3N0KSB8fFxyXG4gICAgMFxyXG4gICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9wdGlvblVuaXQob3B0aW9uOiBhbnkpOiBudW1iZXIge1xyXG4gIHJldHVybiAoXHJcbiAgICBwYXJzZUNvc3RBbW91bnQob3B0aW9uPy51bml0Q29zdCkgfHxcclxuICAgIHBhcnNlQ29zdEFtb3VudChvcHRpb24/LnZhcmlhdGlvblVuaXRDb3N0KSB8fFxyXG4gICAgMFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKiBQcm9kdWN0IHNldHVwIGZlZSBzaG93biBuZXh0IHRvIHVuaXQgcHJpY2UsIG1hdGNoaW5nIHByb2R1Y3QtZm9ybSB3b3JkaW5nLiAqL1xyXG5mdW5jdGlvbiBwcm9kdWN0U2V0dXBTdWZmaXgocHJvZHVjdDogYW55KSB7XHJcbiAgY29uc3Qgc2V0dXBQcmljZSA9IE51bWJlcihwcm9kdWN0Py5zZXR1cFByaWNlKTtcclxuICBpZiAoIXNldHVwUHJpY2UpIHJldHVybiAnJztcclxuICBjb25zdCBsYWJlbCA9IHByb2R1Y3Quc2V0dXBQZXJHcm91cCA/ICdzZXR1cCBwZXIgZ3JvdXAnIDogJ3NldHVwJztcclxuICByZXR1cm4gYCArICR7Zm9ybWF0Q29zdChwcm9kdWN0LCBzZXR1cFByaWNlKX0gJHtsYWJlbH1gO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRVbml0UHJpY2VXaXRoU2V0dXAocHJvZHVjdDogYW55KSB7XHJcbiAgcmV0dXJuIGAke2Zvcm1hdENvc3QocHJvZHVjdCwgTnVtYmVyKHByb2R1Y3Q/LnVuaXRQcmljZSkgfHwgMCl9JHtwcm9kdWN0U2V0dXBTdWZmaXgocHJvZHVjdCl9YDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNQZGYoZmlsZTogYW55KSB7XHJcbiAgY29uc3QgbWltZXR5cGUgPSBmaWxlPy5taW1ldHlwZSB8fCAnJztcclxuICByZXR1cm4gbWltZXR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8IG1pbWV0eXBlID09PSAnYXBwbGljYXRpb24veC1wZGYnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0ltYWdlRmlsZShmaWxlOiBhbnkpIHtcclxuICBjb25zdCBtaW1ldHlwZSA9IGZpbGU/Lm1pbWV0eXBlIHx8ICcnO1xyXG4gIGlmIChtaW1ldHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIHRydWU7XHJcbiAgY29uc3QgbmFtZSA9IChmaWxlPy5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gIHJldHVybiAvXFwuKGpwZT9nfHBuZ3xnaWZ8d2VicHxzdmd8Ym1wKSQvLnRlc3QobmFtZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFic29sdXRpemVGaWxlVXJsKHJhdzogc3RyaW5nLCB1cmxBcGk/OiBzdHJpbmcpIHtcclxuICBjb25zdCB1cmwgPSAocmF3IHx8ICcnKS50cmltKCk7XHJcbiAgaWYgKCF1cmwgfHwgdXJsID09PSAndW5kZWZpbmVkJyB8fCB1cmwgPT09ICdudWxsJykgcmV0dXJuICcnO1xyXG4gIGlmICgvXihodHRwcz86fGJsb2I6fGRhdGE6KS9pLnRlc3QodXJsKSkgcmV0dXJuIHVybDtcclxuICBpZiAoIXVybEFwaSkgcmV0dXJuIHVybDtcclxuICB0cnkge1xyXG4gICAgY29uc3QgYmFzZSA9IG5ldyBVUkwodXJsQXBpKTtcclxuICAgIHJldHVybiBuZXcgVVJMKHVybCwgYCR7YmFzZS5vcmlnaW59L2ApLmhyZWY7XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZUZpbGVVcmwoZmlsZTogYW55LCB1cmxBcGk/OiBzdHJpbmcpIHtcclxuICByZXR1cm4gYWJzb2x1dGl6ZUZpbGVVcmwoXHJcbiAgICBmaWxlPy52aWV3VXJsIHx8IGZpbGU/LmRvd25sb2FkVXJsIHx8ICcnLFxyXG4gICAgdXJsQXBpXHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gb3B0aW9uSW1hZ2VVcmwob3B0aW9uOiBhbnksIHVybEFwaT86IHN0cmluZykge1xyXG4gIHJldHVybiBhYnNvbHV0aXplRmlsZVVybChcclxuICAgIG9wdGlvbj8ubGlua2VkRmlsZT8udmlld1VybCB8fCBvcHRpb24/LmxpbmtlZEZpbGU/LmRvd25sb2FkVXJsIHx8ICcnLFxyXG4gICAgdXJsQXBpXHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmluZE1hdGNoaW5nT3B0aW9uKG9wdGlvbjogYW55LCBvcHRpb25zOiBhbnlbXSA9IFtdKSB7XHJcbiAgcmV0dXJuIG9wdGlvbnMuZmluZCgobykgPT4gU3RyaW5nKG8ub3B0aW9uSWQpID09PSBTdHJpbmcob3B0aW9uPy5vcHRpb25JZCkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlT3B0aW9uQ29sb3VyKFxyXG4gIG9wdGlvbjogYW55LFxyXG4gIHNlbGVjdGFibGVPcHRpb25zOiBhbnlbXSA9IFtdLFxyXG4gIGZpZWxkT3B0aW9uczogYW55W10gPSBbXVxyXG4pIHtcclxuICBjb25zdCBkaXJlY3QgPSBvcHRpb24/LmNvbG91cj8udHJpbSgpO1xyXG4gIGlmIChkaXJlY3QpIHJldHVybiBkaXJlY3Q7XHJcbiAgY29uc3QgZnJvbVNlbGVjdGFibGUgPSBmaW5kTWF0Y2hpbmdPcHRpb24ob3B0aW9uLCBzZWxlY3RhYmxlT3B0aW9ucyk/LmNvbG91cj8udHJpbSgpO1xyXG4gIGlmIChmcm9tU2VsZWN0YWJsZSkgcmV0dXJuIGZyb21TZWxlY3RhYmxlO1xyXG4gIHJldHVybiBmaW5kTWF0Y2hpbmdPcHRpb24ob3B0aW9uLCBmaWVsZE9wdGlvbnMpPy5jb2xvdXI/LnRyaW0oKSB8fCAnJztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZU9wdGlvbkltYWdlVXJsKFxyXG4gIG9wdGlvbjogYW55LFxyXG4gIHNlbGVjdGFibGVPcHRpb25zOiBhbnlbXSA9IFtdLFxyXG4gIGZpZWxkT3B0aW9uczogYW55W10gPSBbXSxcclxuICB1cmxBcGk/OiBzdHJpbmdcclxuKSB7XHJcbiAgY29uc3QgZGlyZWN0ID0gb3B0aW9uSW1hZ2VVcmwob3B0aW9uLCB1cmxBcGkpO1xyXG4gIGlmIChkaXJlY3QpIHJldHVybiBkaXJlY3Q7XHJcbiAgY29uc3QgZnJvbVNlbGVjdGFibGUgPSBvcHRpb25JbWFnZVVybChcclxuICAgIGZpbmRNYXRjaGluZ09wdGlvbihvcHRpb24sIHNlbGVjdGFibGVPcHRpb25zKSxcclxuICAgIHVybEFwaVxyXG4gICk7XHJcbiAgaWYgKGZyb21TZWxlY3RhYmxlKSByZXR1cm4gZnJvbVNlbGVjdGFibGU7XHJcbiAgcmV0dXJuIG9wdGlvbkltYWdlVXJsKGZpbmRNYXRjaGluZ09wdGlvbihvcHRpb24sIGZpZWxkT3B0aW9ucyksIHVybEFwaSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdE9wdGlvbkNvc3QoXHJcbiAgcHJvZHVjdDogYW55LFxyXG4gIG9wdGlvbjogYW55LFxyXG4gIHNlbGxlclByb2R1Y3RFZGl0YWJsZTogYm9vbGVhblxyXG4pIHtcclxuICBpZiAoc2VsbGVyUHJvZHVjdEVkaXRhYmxlIHx8ICFvcHRpb24pIHJldHVybiBudWxsO1xyXG4gIGNvbnN0IG9uY2VPZmZVbml0ID0gZm9ybWF0T25jZU9mZlVuaXRDb3N0RGV0YWlsKFxyXG4gICAgcHJvZHVjdCxcclxuICAgIG9wdGlvbk9uY2VPZmYob3B0aW9uKSxcclxuICAgIG9wdGlvblVuaXQob3B0aW9uKVxyXG4gICk7XHJcbiAgaWYgKG9uY2VPZmZVbml0KSByZXR1cm4gb25jZU9mZlVuaXQ7XHJcbiAgaWYgKG9wdGlvbi50b3RhbENvc3QpIHtcclxuICAgIHJldHVybiBgICsgJHtmb3JtYXRDb3N0KHByb2R1Y3QsIG9wdGlvbi50b3RhbENvc3QpfWA7XHJcbiAgfVxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiB2YXJpYXRpb25Db3N0RGV0YWlsKFxyXG4gIHByb2R1Y3Q6IGFueSxcclxuICB2YXJpYXRpb246IGFueSxcclxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGU6IGJvb2xlYW4sXHJcbiAge1xyXG4gICAgaW5jbHVkZVNlbGVjdGVkT3B0aW9uQ29zdHMgPSB0cnVlLFxyXG4gICAgZmllbGRDb3N0c09ubHkgPSBmYWxzZSxcclxuICB9OiB7XHJcbiAgICBpbmNsdWRlU2VsZWN0ZWRPcHRpb25Db3N0cz86IGJvb2xlYW47XHJcbiAgICBmaWVsZENvc3RzT25seT86IGJvb2xlYW47XHJcbiAgfSA9IHt9XHJcbikge1xyXG4gIGlmIChzZWxsZXJQcm9kdWN0RWRpdGFibGUpIHJldHVybiAnJztcclxuXHJcbiAgY29uc3QgZmllbGQgPSB2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkIHx8IHt9O1xyXG4gIGNvbnN0IGZpZWxkVHlwZSA9IE51bWJlcihmaWVsZC5maWVsZFR5cGUpO1xyXG5cclxuICBpZiAoZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQVJFQSkge1xyXG4gICAgY29uc3QgYXJlYUNvc3RzID0gZXN0aW1hdGVBcmVhQ29zdHMoZmllbGQsIHZhcmlhdGlvbj8udmFsdWUpO1xyXG4gICAgaWYgKGFyZWFDb3N0cykge1xyXG4gICAgICByZXR1cm4gZm9ybWF0T25jZU9mZlVuaXRDb3N0RGV0YWlsKFxyXG4gICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgYXJlYUNvc3RzLm9uY2VPZmZDb3N0LFxyXG4gICAgICAgIGFyZWFDb3N0cy51bml0Q29zdFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKGZpZWxkQ29zdHNPbmx5KSB7XHJcbiAgICByZXR1cm4gZm9ybWF0T25jZU9mZlVuaXRDb3N0RGV0YWlsKFxyXG4gICAgICBwcm9kdWN0LFxyXG4gICAgICBmaWVsZC52YXJpYXRpb25Db3N0LFxyXG4gICAgICBmaWVsZC52YXJpYXRpb25Vbml0Q29zdFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHNlbGVjdGVkID0gQXJyYXkuaXNBcnJheSh2YXJpYXRpb24/LnNlbGVjdGVkT3B0aW9ucylcclxuICAgID8gdmFyaWF0aW9uLnNlbGVjdGVkT3B0aW9uc1xyXG4gICAgOiBbXTtcclxuICBpZiAoaW5jbHVkZVNlbGVjdGVkT3B0aW9uQ29zdHMgJiYgc2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICBjb25zdCBmaWVsZE9uY2UgPVxyXG4gICAgICBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfRVhUUkFDVFxyXG4gICAgICAgID8gcGFyc2VDb3N0QW1vdW50KGZpZWxkLnZhcmlhdGlvbkNvc3QpXHJcbiAgICAgICAgOiAwO1xyXG4gICAgY29uc3QgZmllbGRVbml0ID1cclxuICAgICAgZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQ09MT1VSX0VYVFJBQ1RcclxuICAgICAgICA/IHBhcnNlQ29zdEFtb3VudChmaWVsZC52YXJpYXRpb25Vbml0Q29zdClcclxuICAgICAgICA6IDA7XHJcbiAgICByZXR1cm4gZm9ybWF0T25jZU9mZlVuaXRDb3N0RGV0YWlsKFxyXG4gICAgICBwcm9kdWN0LFxyXG4gICAgICBmaWVsZE9uY2UgK1xyXG4gICAgICAgIHNlbGVjdGVkLnJlZHVjZShcclxuICAgICAgICAgIChzdW06IG51bWJlciwgb3B0aW9uOiBhbnkpID0+IHN1bSArIG9wdGlvbk9uY2VPZmYob3B0aW9uKSxcclxuICAgICAgICAgIDBcclxuICAgICAgICApLFxyXG4gICAgICBmaWVsZFVuaXQgK1xyXG4gICAgICAgIHNlbGVjdGVkLnJlZHVjZShcclxuICAgICAgICAgIChzdW06IG51bWJlciwgb3B0aW9uOiBhbnkpID0+IHN1bSArIG9wdGlvblVuaXQob3B0aW9uKSxcclxuICAgICAgICAgIDBcclxuICAgICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgb25jZU9mZlVuaXQgPSBmb3JtYXRPbmNlT2ZmVW5pdENvc3REZXRhaWwoXHJcbiAgICBwcm9kdWN0LFxyXG4gICAgdmFyaWF0aW9uPy5vbmNlT2ZmQ29zdCA/PyBmaWVsZC52YXJpYXRpb25Db3N0LFxyXG4gICAgdmFyaWF0aW9uPy51bml0Q29zdCA/PyBmaWVsZC52YXJpYXRpb25Vbml0Q29zdFxyXG4gICk7XHJcbiAgaWYgKG9uY2VPZmZVbml0KSByZXR1cm4gb25jZU9mZlVuaXQ7XHJcbiAgaWYgKHZhcmlhdGlvbj8uY29zdCkge1xyXG4gICAgcmV0dXJuIGAgKyAke2Zvcm1hdENvc3QocHJvZHVjdCwgdmFyaWF0aW9uLmNvc3QpfWA7XHJcbiAgfVxyXG4gIHJldHVybiAnJztcclxufVxyXG5cclxuZnVuY3Rpb24gVmFyaWF0aW9uRmlsZVByZXZpZXcoe1xyXG4gIGZpbGUsXHJcbiAgdXJsQXBpLFxyXG59OiB7XHJcbiAgZmlsZTogYW55O1xyXG4gIHVybEFwaT86IHN0cmluZztcclxufSkge1xyXG4gIGNvbnN0IGZpbGVVcmwgPSByZXNvbHZlRmlsZVVybChmaWxlLCB1cmxBcGkpO1xyXG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZT8ubmFtZSB8fCAnRmlsZSc7XHJcbiAgY29uc3QgW2ltYWdlRmFpbGVkLCBzZXRJbWFnZUZhaWxlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcblxyXG4gIGlmIChpc1BkZihmaWxlKSkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGFcclxuICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWZpbGUtbGluaydcclxuICAgICAgICBocmVmPXtmaWxlVXJsIHx8IHVuZGVmaW5lZH1cclxuICAgICAgICB0YXJnZXQ9J19ibGFuaydcclxuICAgICAgICByZWw9J25vb3BlbmVyIG5vcmVmZXJyZXInXHJcbiAgICAgICAgdGl0bGU9e2ZpbGVOYW1lfVxyXG4gICAgICA+XHJcbiAgICAgICAgPEZhRmlsZVBkZiBhcmlhLWhpZGRlbiAvPlxyXG4gICAgICAgIDxzcGFuPntmaWxlTmFtZX08L3NwYW4+XHJcbiAgICAgIDwvYT5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoaXNJbWFnZUZpbGUoZmlsZSkgJiYgZmlsZVVybCAmJiAhaW1hZ2VGYWlsZWQpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxpbWdcclxuICAgICAgICBjbGFzc05hbWU9J21vZGFsLW1lcmNoaS1jaGVja291dC1qb2ItaW5mby1jb250ZW50LWltZydcclxuICAgICAgICBzcmM9e2ZpbGVVcmx9XHJcbiAgICAgICAgYWx0PXtmaWxlTmFtZX1cclxuICAgICAgICB0aXRsZT17ZmlsZU5hbWV9XHJcbiAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0SW1hZ2VGYWlsZWQodHJ1ZSl9XHJcbiAgICAgIC8+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzSW1hZ2VGaWxlKGZpbGUpKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8c3BhblxyXG4gICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktZmlsZS1mYWxsYmFjaydcclxuICAgICAgICB0aXRsZT17ZmlsZU5hbWV9XHJcbiAgICAgID5cclxuICAgICAgICA8RmFSZWdJbWFnZSBhcmlhLWhpZGRlbiAvPlxyXG4gICAgICAgIDxzcGFuPntmaWxlTmFtZX08L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoZmlsZVVybCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGFcclxuICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWZpbGUtbGluaydcclxuICAgICAgICBocmVmPXtmaWxlVXJsfVxyXG4gICAgICAgIHRhcmdldD0nX2JsYW5rJ1xyXG4gICAgICAgIHJlbD0nbm9vcGVuZXIgbm9yZWZlcnJlcidcclxuICAgICAgICB0aXRsZT17ZmlsZU5hbWV9XHJcbiAgICAgID5cclxuICAgICAgICB7ZmlsZU5hbWV9XHJcbiAgICAgIDwvYT5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gPHNwYW4+e2ZpbGVOYW1lfTwvc3Bhbj47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFZhcmlhdGlvbkluZm9Cb2R5KHtcclxuICBjb3N0RGV0YWlsLFxyXG4gIG5hbWUsXHJcbiAgcHJvZHVjdCxcclxuICB2YWx1ZSxcclxuICBmaWxlcyxcclxuICB0eXBlLFxyXG4gIHVybEFwaSxcclxufTogYW55KSB7XHJcbiAgY29uc3QgaXNDb2xvdXJQaWNrZXIgPSB0eXBlID09PSBGaWVsZFR5cGUuQ09MT1VSX1BJQ0tFUjtcclxuICBjb25zdCBpc0ZpbGVVcGxvYWQgPVxyXG4gICAgdHlwZSA9PT0gRmllbGRUeXBlLkZJTEVfVVBMT0FEIHx8IHR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfRVhUUkFDVDtcclxuICBjb25zdCBoYXNGaWxlcyA9IEJvb2xlYW4oZmlsZXM/Lmxlbmd0aCk7XHJcbiAgY29uc3QgZGlzcGxheVZhbHVlID0gaXNDb2xvdXJQaWNrZXIgfHwgKGlzRmlsZVVwbG9hZCAmJiBoYXNGaWxlcykgPyBudWxsIDogdmFsdWU7XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXJvdyc+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tbGFiZWwnPntuYW1lfTwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXZhbHVlJz5cclxuICAgICAgICB7aGFzRmlsZXMgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWZpbGUtcHJldmlld3MnPlxyXG4gICAgICAgICAgICB7ZmlsZXMubWFwKChmaWxlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IChcclxuICAgICAgICAgICAgICA8VmFyaWF0aW9uRmlsZVByZXZpZXdcclxuICAgICAgICAgICAgICAgIGtleT17ZmlsZS52aWV3VXJsIHx8IGZpbGUuaWQgfHwgYCR7bmFtZX0tZmlsZS0ke2luZGV4fWB9XHJcbiAgICAgICAgICAgICAgICBmaWxlPXtmaWxlfVxyXG4gICAgICAgICAgICAgICAgdXJsQXBpPXt1cmxBcGl9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHtpc0NvbG91clBpY2tlciAmJiB2YWx1ZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktY29sb3VyLXZhbHVlJz5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IHZhbHVlIH19XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdjb2xvci1pbmRpY2F0b3InXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxzcGFuPnt2YWx1ZX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHtkaXNwbGF5VmFsdWUgJiYgZGlzcGxheVZhbHVlfVxyXG4gICAgICAgIHtjb3N0RGV0YWlsIHx8ICcnfVxyXG4gICAgICAgIHshaGFzRmlsZXMgJiYgIXZhbHVlICYmICFjb3N0RGV0YWlsICYmICctJ31cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBWYXJpYXRpb25JbmZvKHsgcHJvZHVjdCwgdmFyaWF0aW9uIH06IGFueSkge1xyXG4gIGNvbnN0IHsgdXJsQXBpIH0gPSB1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0KCk7XHJcbiAgY29uc3QgeyB2YXJpYXRpb25GaWVsZCwgdmFyaWF0aW9uRmlsZXMsIHNlbGVjdGFibGVPcHRpb25zIH0gPSB2YXJpYXRpb247XHJcbiAgY29uc3QgeyBmaWVsZFR5cGUsIHNlbGxlclByb2R1Y3RFZGl0YWJsZSwgb3B0aW9uczogZmllbGRPcHRpb25zID0gW10gfSA9XHJcbiAgICB2YXJpYXRpb25GaWVsZDtcclxuICBjb25zdCBpc1ZhcmlhdGlvblNlbGVjdGFibGUgPSBpc1NlbGVjdGFibGUoZmllbGRUeXBlKTtcclxuICBjb25zdCBpc1R1cm5hcm91bmRUaW1lID0gZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVFVSTkFST1VORF9USU1FO1xyXG4gIGNvbnN0IGlzQ29sb3VyRXh0cmFjdCA9IGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9FWFRSQUNUO1xyXG4gIGNvbnN0IG9wdGlvbnMgPSByZXNvbHZlU2VsZWN0YWJsZVNlbGVjdGVkT3B0aW9ucyhcclxuICAgIHZhcmlhdGlvbixcclxuICAgIHNlbGVjdGFibGVPcHRpb25zLFxyXG4gICAgZmllbGRPcHRpb25zXHJcbiAgKTtcclxuICBjb25zdCB1c2VTZWxlY3RhYmxlRGlzcGxheSA9XHJcbiAgICBpc1ZhcmlhdGlvblNlbGVjdGFibGUgJiZcclxuICAgIChCb29sZWFuKG9wdGlvbnM/Lmxlbmd0aCkgfHwgKGlzVHVybmFyb3VuZFRpbWUgJiYgdmFyaWF0aW9uLnZhbHVlKSk7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24nPlxyXG4gICAgICB7aXNDb2xvdXJFeHRyYWN0ID8gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICA8VmFyaWF0aW9uSW5mb0JvZHlcclxuICAgICAgICAgICAgbmFtZT17dmFyaWF0aW9uRmllbGQubmFtZX1cclxuICAgICAgICAgICAgdHlwZT17ZmllbGRUeXBlfVxyXG4gICAgICAgICAgICB2YWx1ZT17bnVsbH1cclxuICAgICAgICAgICAgZmlsZXM9e3ZhcmlhdGlvbkZpbGVzfVxyXG4gICAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxyXG4gICAgICAgICAgICB1cmxBcGk9e3VybEFwaX1cclxuICAgICAgICAgICAgY29zdERldGFpbD17dmFyaWF0aW9uQ29zdERldGFpbChcclxuICAgICAgICAgICAgICBwcm9kdWN0LFxyXG4gICAgICAgICAgICAgIHZhcmlhdGlvbixcclxuICAgICAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGUsXHJcbiAgICAgICAgICAgICAgLy8gT3B0aW9ucyBsaXN0IHNob3dzIGVhY2ggY29sb3VyIGNvc3Q7IGtlZXAgZmllbGQgYmFzZSBjb3N0IGhlcmUuXHJcbiAgICAgICAgICAgICAgb3B0aW9ucz8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHsgZmllbGRDb3N0c09ubHk6IHRydWUgfVxyXG4gICAgICAgICAgICAgICAgOiB7IGluY2x1ZGVTZWxlY3RlZE9wdGlvbkNvc3RzOiBmYWxzZSB9XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAge29wdGlvbnM/Lmxlbmd0aCA/IChcclxuICAgICAgICAgICAgPFZhcmlhdGlvbk9wdGlvbnNJbmZvQm9keVxyXG4gICAgICAgICAgICAgIG5hbWU9e2Ake3ZhcmlhdGlvbkZpZWxkLm5hbWV9IGNvbG91cnNgfVxyXG4gICAgICAgICAgICAgIGZpZWxkVHlwZT17ZmllbGRUeXBlfVxyXG4gICAgICAgICAgICAgIHZhbHVlPXt2YXJpYXRpb24udmFsdWV9XHJcbiAgICAgICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cclxuICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM9e29wdGlvbnN9XHJcbiAgICAgICAgICAgICAgdmFyaWF0aW9uPXt2YXJpYXRpb259XHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZU9wdGlvbnM9e3NlbGVjdGFibGVPcHRpb25zfVxyXG4gICAgICAgICAgICAgIGZpZWxkT3B0aW9ucz17ZmllbGRPcHRpb25zfVxyXG4gICAgICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZT17c2VsbGVyUHJvZHVjdEVkaXRhYmxlfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgKSA6IG51bGx9XHJcbiAgICAgICAgPC8+XHJcbiAgICAgICkgOiB1c2VTZWxlY3RhYmxlRGlzcGxheSA/IChcclxuICAgICAgICA8VmFyaWF0aW9uT3B0aW9uc0luZm9Cb2R5XHJcbiAgICAgICAgICBuYW1lPXt2YXJpYXRpb25GaWVsZC5uYW1lfVxyXG4gICAgICAgICAgZmllbGRUeXBlPXtmaWVsZFR5cGV9XHJcbiAgICAgICAgICB2YWx1ZT17dmFyaWF0aW9uLnZhbHVlfVxyXG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cclxuICAgICAgICAgIGZpbGVzPXt2YXJpYXRpb25GaWxlc31cclxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucz17b3B0aW9uc31cclxuICAgICAgICAgIHZhcmlhdGlvbj17dmFyaWF0aW9ufVxyXG4gICAgICAgICAgc2VsZWN0YWJsZU9wdGlvbnM9e3NlbGVjdGFibGVPcHRpb25zfVxyXG4gICAgICAgICAgZmllbGRPcHRpb25zPXtmaWVsZE9wdGlvbnN9XHJcbiAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGU9e3NlbGxlclByb2R1Y3RFZGl0YWJsZX1cclxuICAgICAgICAvPlxyXG4gICAgICApIDogKFxyXG4gICAgICAgIDxWYXJpYXRpb25JbmZvQm9keVxyXG4gICAgICAgICAgbmFtZT17dmFyaWF0aW9uRmllbGQubmFtZX1cclxuICAgICAgICAgIHR5cGU9e3ZhcmlhdGlvbkZpZWxkLmZpZWxkVHlwZX1cclxuICAgICAgICAgIHZhbHVlPXtcclxuICAgICAgICAgICAgZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQVJFQSAmJiB2YXJpYXRpb24udmFsdWVcclxuICAgICAgICAgICAgICA/IGZvcm1hdEFyZWFTdW1tYXJ5KFxyXG4gICAgICAgICAgICAgICAgICB2YXJpYXRpb24udmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgIGxvY2FsZVByZWZlcnNJbXBlcmlhbCgpID8gJ2ltcGVyaWFsJyA6ICdtZXRyaWMnLFxyXG4gICAgICAgICAgICAgICAgICB2YXJpYXRpb25GaWVsZC5hcmVhVW5pdCB8fCAnbW0nXHJcbiAgICAgICAgICAgICAgICApIHx8IHZhcmlhdGlvbi52YWx1ZVxyXG4gICAgICAgICAgICAgIDogdmFyaWF0aW9uLnZhbHVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmaWxlcz17dmFyaWF0aW9uRmlsZXN9XHJcbiAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxyXG4gICAgICAgICAgdXJsQXBpPXt1cmxBcGl9XHJcbiAgICAgICAgICBjb3N0RGV0YWlsPXt2YXJpYXRpb25Db3N0RGV0YWlsKFxyXG4gICAgICAgICAgICBwcm9kdWN0LFxyXG4gICAgICAgICAgICB2YXJpYXRpb24sXHJcbiAgICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZSxcclxuICAgICAgICAgICAgeyBpbmNsdWRlU2VsZWN0ZWRPcHRpb25Db3N0czogZmFsc2UgfVxyXG4gICAgICAgICAgKX1cclxuICAgICAgICAvPlxyXG4gICAgICApfVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gQ29sb3VyU2VsZWN0T3B0aW9uKHtcclxuICBvcHRpb24sXHJcbiAgc2VsZWN0YWJsZU9wdGlvbnMsXHJcbiAgZmllbGRPcHRpb25zLFxyXG4gIHByb2R1Y3QsXHJcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxyXG59OiB7XHJcbiAgb3B0aW9uOiBhbnk7XHJcbiAgc2VsZWN0YWJsZU9wdGlvbnM/OiBhbnlbXTtcclxuICBmaWVsZE9wdGlvbnM/OiBhbnlbXTtcclxuICBwcm9kdWN0PzogYW55O1xyXG4gIHNlbGxlclByb2R1Y3RFZGl0YWJsZT86IGJvb2xlYW47XHJcbn0pIHtcclxuICBjb25zdCBsYWJlbCA9IG9wdGlvbj8udmFsdWU/LnRyaW0oKSB8fCAnJztcclxuICBjb25zdCBoZXggPSByZXNvbHZlT3B0aW9uQ29sb3VyKG9wdGlvbiwgc2VsZWN0YWJsZU9wdGlvbnMsIGZpZWxkT3B0aW9ucyk7XHJcbiAgY29uc3QgY29zdCA9IGZvcm1hdE9wdGlvbkNvc3QoXHJcbiAgICBwcm9kdWN0LFxyXG4gICAgb3B0aW9uLFxyXG4gICAgQm9vbGVhbihzZWxsZXJQcm9kdWN0RWRpdGFibGUpXHJcbiAgKTtcclxuICByZXR1cm4gKFxyXG4gICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1jb2xvdXItb3B0aW9uJz5cclxuICAgICAge2hleCAmJiAoXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogaGV4IH19XHJcbiAgICAgICAgICBjbGFzc05hbWU9J2NvbG9yLWluZGljYXRvcidcclxuICAgICAgICAvPlxyXG4gICAgICApfVxyXG4gICAgICA8c3Bhbj5cclxuICAgICAgICB7bGFiZWwgfHwgaGV4IHx8ICfigJMnfVxyXG4gICAgICAgIHtjb3N0IHx8ICcnfVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gSW1hZ2VTZWxlY3RPcHRpb24oe1xyXG4gIG9wdGlvbixcclxuICBzZWxlY3RhYmxlT3B0aW9ucyxcclxuICBmaWVsZE9wdGlvbnMsXHJcbiAgcHJvZHVjdCxcclxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGUsXHJcbn06IHtcclxuICBvcHRpb246IGFueTtcclxuICBzZWxlY3RhYmxlT3B0aW9ucz86IGFueVtdO1xyXG4gIGZpZWxkT3B0aW9ucz86IGFueVtdO1xyXG4gIHByb2R1Y3Q6IGFueTtcclxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGU6IGJvb2xlYW47XHJcbn0pIHtcclxuICBjb25zdCB7IHVybEFwaSB9ID0gdXNlTWVyY2hpQ2hlY2tib3V0Q29udGV4dCgpO1xyXG4gIGNvbnN0IGltYWdlVXJsID0gcmVzb2x2ZU9wdGlvbkltYWdlVXJsKFxyXG4gICAgb3B0aW9uLFxyXG4gICAgc2VsZWN0YWJsZU9wdGlvbnMsXHJcbiAgICBmaWVsZE9wdGlvbnMsXHJcbiAgICB1cmxBcGlcclxuICApO1xyXG4gIGNvbnN0IGxhYmVsID0gb3B0aW9uPy52YWx1ZT8udHJpbSgpIHx8ICcnO1xyXG4gIGNvbnN0IGNvc3QgPSBmb3JtYXRPcHRpb25Db3N0KHByb2R1Y3QsIG9wdGlvbiwgc2VsbGVyUHJvZHVjdEVkaXRhYmxlKTtcclxuICBjb25zdCBbaW1hZ2VGYWlsZWQsIHNldEltYWdlRmFpbGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktaW1hZ2Utc2VsZWN0LW9wdGlvbic+XHJcbiAgICAgIHtpbWFnZVVybCAmJiAhaW1hZ2VGYWlsZWQgPyAoXHJcbiAgICAgICAgPGltZ1xyXG4gICAgICAgICAgY2xhc3NOYW1lPSdtb2RhbC1tZXJjaGktY2hlY2tvdXQtam9iLWluZm8tY29udGVudC1pbWcnXHJcbiAgICAgICAgICBzcmM9e2ltYWdlVXJsfVxyXG4gICAgICAgICAgYWx0PXtsYWJlbCB8fCAnU2VsZWN0ZWQgb3B0aW9uJ31cclxuICAgICAgICAgIHRpdGxlPXtsYWJlbCB8fCB1bmRlZmluZWR9XHJcbiAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRJbWFnZUZhaWxlZCh0cnVlKX1cclxuICAgICAgICAvPlxyXG4gICAgICApIDogbnVsbH1cclxuICAgICAgPHNwYW4+XHJcbiAgICAgICAge2xhYmVsIHx8ICfigJMnfVxyXG4gICAgICAgIHtjb3N0IHx8ICcnfVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0T3B0aW9uSWQob3B0aW9uOiBhbnkpIHtcclxuICByZXR1cm4gb3B0aW9uPy5vcHRpb25JZCA/PyBvcHRpb24/LmlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzcGxpdFNlbGVjdGVkT3B0aW9uSWRzKHZhbHVlOiBhbnkpOiBzdHJpbmdbXSB7XHJcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICByZXR1cm4gdmFsdWUubWFwKFN0cmluZykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gIH1cclxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBbXTtcclxuICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgLnNwbGl0KCcsJylcclxuICAgIC5tYXAoKHBhcnQpID0+IHBhcnQudHJpbSgpKVxyXG4gICAgLmZpbHRlcihCb29sZWFuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZVNlbGVjdGFibGVTZWxlY3RlZE9wdGlvbnMoXHJcbiAgdmFyaWF0aW9uOiBhbnksXHJcbiAgc2VsZWN0YWJsZU9wdGlvbnM6IGFueVtdID0gW10sXHJcbiAgZmllbGRPcHRpb25zOiBhbnlbXSA9IFtdXHJcbik6IGFueVtdIHtcclxuICBjb25zdCBmaWVsZFR5cGUgPSB2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkPy5maWVsZFR5cGU7XHJcbiAgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9FWFRSQUNUKSB7XHJcbiAgICByZXR1cm4gdmFyaWF0aW9uPy5zZWxlY3RlZE9wdGlvbnMgfHwgW107XHJcbiAgfVxyXG5cclxuICBjb25zdCBzZWxlY3RlZElkcyA9IHNwbGl0U2VsZWN0ZWRPcHRpb25JZHModmFyaWF0aW9uPy52YWx1ZSk7XHJcbiAgaWYgKHNlbGVjdGVkSWRzLmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IHBvb2xzID0gW3NlbGVjdGFibGVPcHRpb25zLCBmaWVsZE9wdGlvbnNdO1xyXG4gICAgY29uc3QgcmVzb2x2ZWQ6IGFueVtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGVkSWRzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgcG9vbCBvZiBwb29scykge1xyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gcG9vbC5maW5kKChvcHRpb246IGFueSkgPT4gU3RyaW5nKGdldE9wdGlvbklkKG9wdGlvbikpID09PSBpZCk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICByZXNvbHZlZC5wdXNoKG1hdGNoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlc29sdmVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHJlc29sdmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHZhcmlhdGlvbj8uc2VsZWN0ZWRPcHRpb25zIHx8IFtdO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlVHVybmFyb3VuZFNlbGVjdGVkT3B0aW9uKFxyXG4gIHZhcmlhdGlvbjogYW55LFxyXG4gIHNlbGVjdGFibGVPcHRpb25zOiBhbnlbXSA9IFtdLFxyXG4gIGZpZWxkT3B0aW9uczogYW55W10gPSBbXVxyXG4pIHtcclxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVTZWxlY3RhYmxlU2VsZWN0ZWRPcHRpb25zKFxyXG4gICAgdmFyaWF0aW9uLFxyXG4gICAgc2VsZWN0YWJsZU9wdGlvbnMsXHJcbiAgICBmaWVsZE9wdGlvbnNcclxuICApO1xyXG4gIGlmIChyZXNvbHZlZC5sZW5ndGggPiAwKSB7XHJcbiAgICByZXR1cm4gcmVzb2x2ZWRbMF07XHJcbiAgfVxyXG5cclxuICBjb25zdCB2YWx1ZVN0ciA9XHJcbiAgICB2YXJpYXRpb24/LnZhbHVlICE9IG51bGwgJiYgdmFyaWF0aW9uPy52YWx1ZSAhPT0gJydcclxuICAgICAgPyBTdHJpbmcodmFyaWF0aW9uLnZhbHVlKS50cmltKClcclxuICAgICAgOiAnJztcclxuICBpZiAoIXZhbHVlU3RyKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgY29uc3QgcG9vbHMgPSBbc2VsZWN0YWJsZU9wdGlvbnMsIGZpZWxkT3B0aW9uc107XHJcbiAgZm9yIChjb25zdCBwb29sIG9mIHBvb2xzKSB7XHJcbiAgICBjb25zdCBieVZhbHVlID0gcG9vbC5maW5kKFxyXG4gICAgICAob3B0aW9uOiBhbnkpID0+IFN0cmluZyhvcHRpb24udmFsdWUgPz8gJycpID09PSB2YWx1ZVN0clxyXG4gICAgKTtcclxuICAgIGlmIChieVZhbHVlKSByZXR1cm4gYnlWYWx1ZTtcclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1hdFR1cm5hcm91bmREZWFkbGluZSh1c2VyRGVhZGxpbmU6IGFueSkge1xyXG4gIGlmICghdXNlckRlYWRsaW5lKSByZXR1cm4gbnVsbDtcclxuICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHVzZXJEZWFkbGluZSk7XHJcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2Vjb25kcykgfHwgc2Vjb25kcyA8PSAwKSByZXR1cm4gbnVsbDtcclxuICByZXR1cm4gbmV3IERhdGUoc2Vjb25kcyAqIDEwMDApLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tQVUnLCB7XHJcbiAgICB3ZWVrZGF5OiAnbG9uZycsXHJcbiAgICB5ZWFyOiAnbnVtZXJpYycsXHJcbiAgICBtb250aDogJ2xvbmcnLFxyXG4gICAgZGF5OiAnbnVtZXJpYycsXHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFR1cm5hcm91bmRPcHRpb25MYWJlbCh7XHJcbiAgb3B0aW9uLFxyXG4gIHZhcmlhdGlvbkZpZWxkLFxyXG4gIHByb2R1Y3QsXHJcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxyXG59OiB7XHJcbiAgb3B0aW9uOiBhbnk7XHJcbiAgdmFyaWF0aW9uRmllbGQ6IGFueTtcclxuICBwcm9kdWN0OiBhbnk7XHJcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlOiBib29sZWFuO1xyXG59KSB7XHJcbiAgY29uc3QgZGF5cyA9IHBhcnNlSW50KFN0cmluZyhvcHRpb24/LnZhbHVlID8/ICcnKSwgMTApIHx8IDA7XHJcbiAgY29uc3QgZGVhZGxpbmUgPSBmb3JtYXRUdXJuYXJvdW5kRGVhZGxpbmUob3B0aW9uPy51c2VyRGVhZGxpbmUpO1xyXG4gIGNvbnN0IHNoaXBwaW5nVGltZUluY2x1ZGVkID0gQm9vbGVhbih2YXJpYXRpb25GaWVsZD8uc2hpcHBpbmdUaW1lSW5jbHVkZWQpO1xyXG4gIGNvbnN0IGRlYWRsaW5lTGFiZWwgPSBzaGlwcGluZ1RpbWVJbmNsdWRlZCA/ICdEZWxpdmVyeSBieScgOiAnUHJvZHVjZWQgYnknO1xyXG4gIGNvbnN0IGNvc3QgPSBmb3JtYXRPcHRpb25Db3N0KHByb2R1Y3QsIG9wdGlvbiwgc2VsbGVyUHJvZHVjdEVkaXRhYmxlKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdHVybmFyb3VuZC12YWx1ZSc+XHJcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdHVybmFyb3VuZC1kYXlzJz5cclxuICAgICAgICB7ZGF5cyA+IDBcclxuICAgICAgICAgID8gYCR7ZGF5c30gYnVzaW5lc3MgZGF5JHtkYXlzICE9PSAxID8gJ3MnIDogJyd9YFxyXG4gICAgICAgICAgOiAob3B0aW9uPy52YWx1ZT8udHJpbSgpIHx8ICfigJMnKX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICB7ZGVhZGxpbmUgJiYgKFxyXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdHVybmFyb3VuZC1kZWFkbGluZSc+XHJcbiAgICAgICAgICB7ZGVhZGxpbmVMYWJlbH0ge2RlYWRsaW5lfVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgKX1cclxuICAgICAge2Nvc3QgfHwgJyd9XHJcbiAgICA8L3NwYW4+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gVmFyaWF0aW9uT3B0aW9uc0luZm9Cb2R5KHtcclxuICBuYW1lLFxyXG4gIHNlbGVjdGVkT3B0aW9ucyxcclxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGUsXHJcbiAgcHJvZHVjdCxcclxuICBmaWVsZFR5cGUsXHJcbiAgdmFyaWF0aW9uLFxyXG4gIHNlbGVjdGFibGVPcHRpb25zID0gW10sXHJcbiAgZmllbGRPcHRpb25zID0gW10sXHJcbn06IGFueSkge1xyXG4gIGNvbnN0IGlzVHVybmFyb3VuZFRpbWUgPSBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5UVVJOQVJPVU5EX1RJTUU7XHJcbiAgY29uc3QgZmlyc3RPcHRpb24gPSBpc1R1cm5hcm91bmRUaW1lXHJcbiAgICA/IHJlc29sdmVUdXJuYXJvdW5kU2VsZWN0ZWRPcHRpb24oXHJcbiAgICAgICAgeyBzZWxlY3RlZE9wdGlvbnMsIHZhbHVlOiB2YXJpYXRpb24/LnZhbHVlIH0sXHJcbiAgICAgICAgc2VsZWN0YWJsZU9wdGlvbnMsXHJcbiAgICAgICAgZmllbGRPcHRpb25zXHJcbiAgICAgIClcclxuICAgIDogc2VsZWN0ZWRPcHRpb25zWzBdO1xyXG4gIGNvbnN0IGlzQ29sb3VyU2VsZWN0ID1cclxuICAgIGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9TRUxFQ1QgfHxcclxuICAgIGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9FWFRSQUNUO1xyXG4gIGNvbnN0IGlzSW1hZ2VTZWxlY3QgPSBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5JTUFHRV9TRUxFQ1Q7XHJcbiAgY29uc3QgdmFyaWF0aW9uRmllbGQgPSB2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkID8/IHt9O1xyXG5cclxuICBmdW5jdGlvbiByZW5kZXJPcHRpb25MYWJlbChvOiBhbnkpIHtcclxuICAgIGlmIChpc1R1cm5hcm91bmRUaW1lKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPFR1cm5hcm91bmRPcHRpb25MYWJlbFxyXG4gICAgICAgICAgb3B0aW9uPXtvfVxyXG4gICAgICAgICAgdmFyaWF0aW9uRmllbGQ9e3ZhcmlhdGlvbkZpZWxkfVxyXG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cclxuICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZT17c2VsbGVyUHJvZHVjdEVkaXRhYmxlfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNDb2xvdXJTZWxlY3QpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8Q29sb3VyU2VsZWN0T3B0aW9uXHJcbiAgICAgICAgICBvcHRpb249e299XHJcbiAgICAgICAgICBzZWxlY3RhYmxlT3B0aW9ucz17c2VsZWN0YWJsZU9wdGlvbnN9XHJcbiAgICAgICAgICBmaWVsZE9wdGlvbnM9e2ZpZWxkT3B0aW9uc31cclxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XHJcbiAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGU9e3NlbGxlclByb2R1Y3RFZGl0YWJsZX1cclxuICAgICAgICAvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzSW1hZ2VTZWxlY3QpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8SW1hZ2VTZWxlY3RPcHRpb25cclxuICAgICAgICAgIG9wdGlvbj17b31cclxuICAgICAgICAgIHNlbGVjdGFibGVPcHRpb25zPXtzZWxlY3RhYmxlT3B0aW9uc31cclxuICAgICAgICAgIGZpZWxkT3B0aW9ucz17ZmllbGRPcHRpb25zfVxyXG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cclxuICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZT17c2VsbGVyUHJvZHVjdEVkaXRhYmxlfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIHtvLnZhbHVlPy50cmltKCkgfHwgJ+KAkyd9XHJcbiAgICAgICAge2Zvcm1hdE9wdGlvbkNvc3QocHJvZHVjdCwgbywgc2VsbGVyUHJvZHVjdEVkaXRhYmxlKSB8fCAnJ31cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDw+XHJcbiAgICAgIHtzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMSAmJiAhaXNUdXJuYXJvdW5kVGltZSA/IChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXJvdyc+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cclxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi12YWx1ZSBsaXN0LXVuc3R5bGVkIG0tMCc+XHJcbiAgICAgICAgICAgIHtzZWxlY3RlZE9wdGlvbnMubWFwKChvOiBhbnksIGk6IG51bWJlcikgPT4gKFxyXG4gICAgICAgICAgICAgIDxsaSBrZXk9e2Ake2l9LW9wdGlvbi1rZXktJHtvLm9wdGlvbklkID8/IGl9YH0+XHJcbiAgICAgICAgICAgICAgICB7cmVuZGVyT3B0aW9uTGFiZWwobyl9XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApIDogZmlyc3RPcHRpb24gPyAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1yb3cnPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1sYWJlbCc+e25hbWV9PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXZhbHVlJz5cclxuICAgICAgICAgICAge3JlbmRlck9wdGlvbkxhYmVsKGZpcnN0T3B0aW9uKX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApIDogKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tcm93Jz5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tbGFiZWwnPntuYW1lfTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi12YWx1ZSc+LTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgPC8+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gVmFyaWF0aW9uc0luZm8oeyBwcm9kdWN0LCBxdWFudGl0eSwgdmFyaWF0aW9ucyA9IFtdIH06IGFueSkge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9ucyc+XHJcbiAgICAgIHt2YXJpYXRpb25zLm1hcCgodjogYW55LCBpOiBudW1iZXIpID0+XHJcbiAgICAgICAgIWlzSW5zdHJ1Y3Rpb25zVHlwZSh2LnZhcmlhdGlvbkZpZWxkLmZpZWxkVHlwZSkgPyAoXHJcbiAgICAgICAgICA8VmFyaWF0aW9uSW5mb1xyXG4gICAgICAgICAgICBxdWFudGl0eT17cXVhbnRpdHl9XHJcbiAgICAgICAgICAgIHZhcmlhdGlvbj17dn1cclxuICAgICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cclxuICAgICAgICAgICAga2V5PXtpfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApIDogbnVsbFxyXG4gICAgICApfVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gVmFyaWF0aW9uR3JvdXBJbmZvKHtcclxuICBncm91cCxcclxuICBpbmRleCxcclxuICBwcm9kdWN0LFxyXG4gIHNob3dTZXR1cE9uVW5pdFByaWNlLFxyXG59OiBhbnkpIHtcclxuICBjb25zdCBpc1Jlc2VsbCA9IGlzUHJvZHVjdFN1cHBsaWVyTU9EKHByb2R1Y3QpO1xyXG4gIGNvbnN0IHsgcXVhbnRpdHksIHZhcmlhdGlvbnMgfSA9IGdyb3VwO1xyXG4gIGNvbnN0IHZpc2libGVWYXJpYXRpb25zID0gKHZhcmlhdGlvbnMgPz8gW10pLmZpbHRlcihcclxuICAgICh2OiBhbnkpID0+ICFpc0luc3RydWN0aW9uc1R5cGUodj8udmFyaWF0aW9uRmllbGQ/LmZpZWxkVHlwZSlcclxuICApO1xyXG4gIGNvbnN0IGNvc3RMYWJlbCA9IGlzUmVzZWxsID8gJ1VuaXQgQ29zdCcgOiAnR3JvdXAgQ29zdCc7XHJcbiAgY29uc3QgdW5pdFByaWNlVmFsdWUgPSBzaG93U2V0dXBPblVuaXRQcmljZVxyXG4gICAgPyBmb3JtYXRVbml0UHJpY2VXaXRoU2V0dXAocHJvZHVjdClcclxuICAgIDogZm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdD8udW5pdFByaWNlKSB8fCAwKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxzZWN0aW9uIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktZ3JvdXAnPlxyXG4gICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktb3JkZXItZGV0YWlsLXRpdGxlJz5cclxuICAgICAgICBHcm91cCB7aW5kZXggKyAxfSBJbmZvcm1hdGlvblxyXG4gICAgICA8L3N0cm9uZz5cclxuICAgICAgeyFpc1Jlc2VsbCAmJiBxdWFudGl0eSA+IDAgJiYgKFxyXG4gICAgICAgIDxTdW1tYXJ5RmllbGRSb3cgbGFiZWw9J1F1YW50aXR5JyB2YWx1ZT17cXVhbnRpdHl9IC8+XHJcbiAgICAgICl9XHJcbiAgICAgIDxTdW1tYXJ5RmllbGRSb3cgbGFiZWw9J1VuaXQgUHJpY2UnIHZhbHVlPXt1bml0UHJpY2VWYWx1ZX0gLz5cclxuICAgICAge3Zpc2libGVWYXJpYXRpb25zLmxlbmd0aCA+IDAgJiYgKFxyXG4gICAgICAgIDxWYXJpYXRpb25zSW5mb1xyXG4gICAgICAgICAgcXVhbnRpdHk9e3F1YW50aXR5fVxyXG4gICAgICAgICAgdmFyaWF0aW9ucz17dmFyaWF0aW9uc31cclxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XHJcbiAgICAgICAgLz5cclxuICAgICAgKX1cclxuICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWdyb3VwLWNvc3QnPlxyXG4gICAgICAgIHtjb3N0TGFiZWx9OiB7Zm9ybWF0Q29zdChwcm9kdWN0LCBncm91cC5ncm91cENvc3QpfVxyXG4gICAgICA8L3N0cm9uZz5cclxuICAgIDwvc2VjdGlvbj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBKb2JJbmZvQ29udGVudCgpIHtcclxuICBjb25zdCB7IGpvYiB9ID0gdXNlTWVyY2hpQ2hlY2tib3V0Q29udGV4dCgpO1xyXG4gIGNvbnN0IHsgcHJvZHVjdCwgcXVhbnRpdHkgPSAwLCB2YXJpYXRpb25zID0gW10sIHZhcmlhdGlvbnNHcm91cHMgPSBbXSB9ID0gam9iO1xyXG4gIGNvbnN0IHsgbmVlZHNTaGlwcGluZyB9ID0gcHJvZHVjdDtcclxuICBjb25zdCB0b3RhbENvc3QgPSBjdXJyZW5jeVRvdGFsQ29zdFNob3dJbmNUYXgoam9iKTtcclxuICBjb25zdCBpc1Jlc2VsbCA9IGlzUHJvZHVjdFN1cHBsaWVyTU9EKHByb2R1Y3QpO1xyXG4gIGNvbnN0IGhhc0dyb3VwcyA9IHZhcmlhdGlvbnNHcm91cHMubGVuZ3RoID4gMDtcclxuICBjb25zdCBqb2JMZXZlbFZhcmlhdGlvbnMgPSAodmFyaWF0aW9ucyA/PyBbXSkuZmlsdGVyKFxyXG4gICAgKHY6IGFueSkgPT4gIWlzSW5zdHJ1Y3Rpb25zVHlwZSh2Py52YXJpYXRpb25GaWVsZD8uZmllbGRUeXBlKVxyXG4gICk7XHJcbiAgY29uc3QgdG90YWxRdWFudGl0eSA9IGhhc0dyb3Vwc1xyXG4gICAgPyB2YXJpYXRpb25zR3JvdXBzLnJlZHVjZShcclxuICAgICAgICAoc3VtOiBudW1iZXIsIGc6IGFueSkgPT4gc3VtICsgKE51bWJlcihnLnF1YW50aXR5KSB8fCAwKSxcclxuICAgICAgICAwXHJcbiAgICAgIClcclxuICAgIDogTnVtYmVyKHF1YW50aXR5KSB8fCAwO1xyXG4gIGNvbnN0IHNldHVwUGVyR3JvdXAgPSBCb29sZWFuKHByb2R1Y3Q/LnNldHVwUGVyR3JvdXApO1xyXG4gIGNvbnN0IGhhc1NldHVwUHJpY2UgPSBOdW1iZXIocHJvZHVjdD8uc2V0dXBQcmljZSkgPiAwO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLW1lcmNoaS1jaGVja291dC1qb2ItaW5mby1jb250ZW50IG1lcmNoaS1jaGVja291dC1zdW1tYXJ5Jz5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXNlY3Rpb24tdGl0bGUnPntwcm9kdWN0Lm5hbWV9PC9kaXY+XHJcbiAgICAgIHtoYXNHcm91cHMgJiYgKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1ncm91cHMnPlxyXG4gICAgICAgICAge3ZhcmlhdGlvbnNHcm91cHMubWFwKChnOiBhbnksIGk6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgZy5xdWFudGl0eSA/IChcclxuICAgICAgICAgICAgICA8VmFyaWF0aW9uR3JvdXBJbmZvXHJcbiAgICAgICAgICAgICAgICBncm91cD17Z31cclxuICAgICAgICAgICAgICAgIGtleT17YCR7aX0tam9iLWluZm8tY29udGVudGB9XHJcbiAgICAgICAgICAgICAgICBpbmRleD17aX1cclxuICAgICAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XHJcbiAgICAgICAgICAgICAgICBzaG93U2V0dXBPblVuaXRQcmljZT17c2V0dXBQZXJHcm91cH1cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICApIDogbnVsbFxyXG4gICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKX1cclxuICAgICAgeyFoYXNHcm91cHMgJiYgKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1zdGFuZGFsb25lJz5cclxuICAgICAgICAgIDxzdHJvbmcgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1vcmRlci1kZXRhaWwtdGl0bGUnPlxyXG4gICAgICAgICAgICBPcmRlciBJbmZvcm1hdGlvblxyXG4gICAgICAgICAgPC9zdHJvbmc+XHJcbiAgICAgICAgICB7cXVhbnRpdHkgPiAwICYmIChcclxuICAgICAgICAgICAgPFN1bW1hcnlGaWVsZFJvdyBsYWJlbD0nUXVhbnRpdHknIHZhbHVlPXtxdWFudGl0eX0gLz5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgICA8U3VtbWFyeUZpZWxkUm93XHJcbiAgICAgICAgICAgIGxhYmVsPSdVbml0IFByaWNlJ1xyXG4gICAgICAgICAgICB2YWx1ZT17Zm9ybWF0VW5pdFByaWNlV2l0aFNldHVwKHByb2R1Y3QpfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIHtqb2JMZXZlbFZhcmlhdGlvbnMubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICAgIDxWYXJpYXRpb25zSW5mb1xyXG4gICAgICAgICAgICAgIHF1YW50aXR5PXtxdWFudGl0eX1cclxuICAgICAgICAgICAgICB2YXJpYXRpb25zPXt2YXJpYXRpb25zfVxyXG4gICAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgICB7aGFzR3JvdXBzICYmIGpvYkxldmVsVmFyaWF0aW9ucy5sZW5ndGggPiAwICYmIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktc3RhbmRhbG9uZSc+XHJcbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktb3JkZXItZGV0YWlsLXRpdGxlJz5cclxuICAgICAgICAgICAgT3JkZXIgSW5mb3JtYXRpb25cclxuICAgICAgICAgIDwvc3Ryb25nPlxyXG4gICAgICAgICAgPFZhcmlhdGlvbnNJbmZvXHJcbiAgICAgICAgICAgIHF1YW50aXR5PXtxdWFudGl0eX1cclxuICAgICAgICAgICAgdmFyaWF0aW9ucz17dmFyaWF0aW9uc31cclxuICAgICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcbiAgICAgIHshaXNSZXNlbGwgJiYgKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS10b3RhbCc+XHJcbiAgICAgICAgICB7dG90YWxRdWFudGl0eSA+IDAgJiYgKFxyXG4gICAgICAgICAgICA8U3VtbWFyeUFtb3VudFJvd1xyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdG90YWwtcXVhbnRpdHknXHJcbiAgICAgICAgICAgICAgbGFiZWw9J1RvdGFsIFF1YW50aXR5J1xyXG4gICAgICAgICAgICAgIGFtb3VudD17dG90YWxRdWFudGl0eX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgICB7aGFzR3JvdXBzICYmIGhhc1NldHVwUHJpY2UgJiYgIXNldHVwUGVyR3JvdXAgJiYgKFxyXG4gICAgICAgICAgICA8U3VtbWFyeUFtb3VudFJvd1xyXG4gICAgICAgICAgICAgIGxhYmVsPSdTZXR1cCdcclxuICAgICAgICAgICAgICBhbW91bnQ9e2Zvcm1hdENvc3QocHJvZHVjdCwgTnVtYmVyKHByb2R1Y3Quc2V0dXBQcmljZSkpfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICAgIDxTdW1tYXJ5QW1vdW50Um93XHJcbiAgICAgICAgICAgIGxhYmVsPSdUb3RhbCBPcmRlciBDb3N0J1xyXG4gICAgICAgICAgICBsYWJlbEV4dHJhPXtcclxuICAgICAgICAgICAgICBuZWVkc1NoaXBwaW5nID8gKFxyXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdG90YWwtbm90ZSc+IGV4IFNoaXBtZW50PC9zbWFsbD5cclxuICAgICAgICAgICAgICApIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYW1vdW50PXt0b3RhbENvc3R9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgICB7ISEoaXNSZXNlbGwgJiYgIWhhc0dyb3VwcykgJiYgKFxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWItMCc+XHJcbiAgICAgICAgICAgIHtpc1Jlc2VsbCA/ICdBcHByb3hpbWF0ZSBVbml0JyA6ICdUb3RhbCd9IENvc3RcclxuICAgICAgICAgIDwvc3Ryb25nPnsnICd9XHJcbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWItMCBkLWJsb2NrJz57dG90YWxDb3N0fTwvc3Ryb25nPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG4iXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7O0FBQUMsU0FBQUEsMkJBQUFDLENBQUEsRUFBQUMsY0FBQSxRQUFBQyxFQUFBLFVBQUFDLE1BQUEsb0JBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLEVBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsRUFBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLGNBQUEsSUFBQUQsQ0FBQSxXQUFBQSxDQUFBLENBQUFRLE1BQUEscUJBQUFOLEVBQUEsRUFBQUYsQ0FBQSxHQUFBRSxFQUFBLE1BQUFPLENBQUEsVUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsUUFBQUgsQ0FBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsV0FBQUssSUFBQSxtQkFBQUEsSUFBQSxTQUFBQyxLQUFBLEVBQUFkLENBQUEsQ0FBQVMsQ0FBQSxVQUFBTSxDQUFBLFdBQUFBLEVBQUFDLEVBQUEsVUFBQUEsRUFBQSxLQUFBQyxDQUFBLEVBQUFQLENBQUEsZ0JBQUFRLFNBQUEsaUpBQUFDLGdCQUFBLFNBQUFDLE1BQUEsVUFBQUMsR0FBQSxXQUFBVixDQUFBLFdBQUFBLEVBQUEsSUFBQVQsRUFBQSxHQUFBQSxFQUFBLENBQUFvQixJQUFBLENBQUF0QixDQUFBLE1BQUFZLENBQUEsV0FBQUEsRUFBQSxRQUFBVyxJQUFBLEdB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