merchi_checkout 1.2.5 → 1.2.7

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,16 @@
1
1
  'use client';
2
2
 
3
- import React from 'react';
4
- import { FaFilePdf } from 'react-icons/fa';
3
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4
+ 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."); }
5
+ 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); }
6
+ 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; }
7
+ 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; } }
8
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
9
+ import React, { useState } from 'react';
10
+ import { FaFilePdf, FaRegImage } from 'react-icons/fa';
5
11
  import { formatCurrency, currencyTotalCostShowIncTax } from './currency';
6
12
  import { isInstructionsType, isProductSupplierMOD, isSelectable, FieldType } from '../utils';
13
+ import { estimateAreaCosts, formatAreaSummary, localePrefersImperial } from '../area';
7
14
  import { useMerchiCheckboutContext } from './MerchiCheckoutProvider';
8
15
  import { SummaryAmountRow, SummaryFieldRow } from './CheckoutSummaryFields';
9
16
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -16,6 +23,37 @@ function formatCost(product, cost) {
16
23
  showCodeIfNoSymbol: false
17
24
  });
18
25
  }
26
+ function parseCostAmount(value) {
27
+ var amount = parseFloat(value);
28
+ return Number.isFinite(amount) && amount > 0 ? amount : 0;
29
+ }
30
+
31
+ /** Match product-form wording: "+ $X once off" / "+ $Y per unit". */
32
+ function formatOnceOffUnitCostDetail(product, onceOffCost, unitCost) {
33
+ var currency = (product === null || product === void 0 ? void 0 : product.currency) || 'AUD';
34
+ var parts = [];
35
+ var onceOff = parseCostAmount(onceOffCost);
36
+ var unit = parseCostAmount(unitCost);
37
+ if (onceOff) {
38
+ parts.push(" + ".concat(formatCurrency(onceOff, {
39
+ currency: currency,
40
+ showCodeIfNoSymbol: false
41
+ }), " once off"));
42
+ }
43
+ if (unit) {
44
+ parts.push(" + ".concat(formatCurrency(unit, {
45
+ currency: currency,
46
+ showCodeIfNoSymbol: false
47
+ }), " per unit"));
48
+ }
49
+ return parts.join('');
50
+ }
51
+ function optionOnceOff(option) {
52
+ return parseCostAmount(option === null || option === void 0 ? void 0 : option.onceOffCost) || parseCostAmount(option === null || option === void 0 ? void 0 : option.variationCost) || 0;
53
+ }
54
+ function optionUnit(option) {
55
+ return parseCostAmount(option === null || option === void 0 ? void 0 : option.unitCost) || parseCostAmount(option === null || option === void 0 ? void 0 : option.variationUnitCost) || 0;
56
+ }
19
57
 
20
58
  /** Product setup fee shown next to unit price, matching product-form wording. */
21
59
  function productSetupSuffix(product) {
@@ -37,9 +75,24 @@ function isImageFile(file) {
37
75
  var name = ((file === null || file === void 0 ? void 0 : file.name) || '').toLowerCase();
38
76
  return /\.(jpe?g|png|gif|webp|svg|bmp)$/.test(name);
39
77
  }
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) || '';
78
+ function absolutizeFileUrl(raw, urlApi) {
79
+ var url = (raw || '').trim();
80
+ if (!url || url === 'undefined' || url === 'null') return '';
81
+ if (/^(https?:|blob:|data:)/i.test(url)) return url;
82
+ if (!urlApi) return url;
83
+ try {
84
+ var base = new URL(urlApi);
85
+ return new URL(url, "".concat(base.origin, "/")).href;
86
+ } catch (_unused) {
87
+ return url;
88
+ }
89
+ }
90
+ function resolveFileUrl(file, urlApi) {
91
+ return absolutizeFileUrl((file === null || file === void 0 ? void 0 : file.viewUrl) || (file === null || file === void 0 ? void 0 : file.downloadUrl) || '', urlApi);
92
+ }
93
+ function optionImageUrl(option, urlApi) {
94
+ var _option$linkedFile, _option$linkedFile2;
95
+ 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
96
  }
44
97
  function findMatchingOption(option) {
45
98
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
@@ -60,24 +113,71 @@ function resolveOptionColour(option) {
60
113
  function resolveOptionImageUrl(option) {
61
114
  var selectableOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
62
115
  var fieldOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
63
- var direct = optionImageUrl(option);
116
+ var urlApi = arguments.length > 3 ? arguments[3] : undefined;
117
+ var direct = optionImageUrl(option, urlApi);
64
118
  if (direct) return direct;
65
- var fromSelectable = optionImageUrl(findMatchingOption(option, selectableOptions));
119
+ var fromSelectable = optionImageUrl(findMatchingOption(option, selectableOptions), urlApi);
66
120
  if (fromSelectable) return fromSelectable;
67
- return optionImageUrl(findMatchingOption(option, fieldOptions));
121
+ return optionImageUrl(findMatchingOption(option, fieldOptions), urlApi);
68
122
  }
69
123
  function formatOptionCost(product, option, sellerProductEditable) {
70
- if (!(option !== null && option !== void 0 && option.totalCost) || sellerProductEditable) return null;
71
- return " + ".concat(formatCost(product, option.totalCost));
124
+ if (sellerProductEditable || !option) return null;
125
+ var onceOffUnit = formatOnceOffUnitCostDetail(product, optionOnceOff(option), optionUnit(option));
126
+ if (onceOffUnit) return onceOffUnit;
127
+ if (option.totalCost) {
128
+ return " + ".concat(formatCost(product, option.totalCost));
129
+ }
130
+ return null;
72
131
  }
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) || '';
132
+ function variationCostDetail(product, variation, sellerProductEditable) {
133
+ var _variation$onceOffCos, _variation$unitCost;
134
+ var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
135
+ _ref$includeSelectedO = _ref.includeSelectedOptionCosts,
136
+ includeSelectedOptionCosts = _ref$includeSelectedO === void 0 ? true : _ref$includeSelectedO,
137
+ _ref$fieldCostsOnly = _ref.fieldCostsOnly,
138
+ fieldCostsOnly = _ref$fieldCostsOnly === void 0 ? false : _ref$fieldCostsOnly;
139
+ if (sellerProductEditable) return '';
140
+ var field = (variation === null || variation === void 0 ? void 0 : variation.variationField) || {};
141
+ var fieldType = Number(field.fieldType);
142
+ if (fieldType === FieldType.AREA) {
143
+ var areaCosts = estimateAreaCosts(field, variation === null || variation === void 0 ? void 0 : variation.value);
144
+ if (areaCosts) {
145
+ return formatOnceOffUnitCostDetail(product, areaCosts.onceOffCost, areaCosts.unitCost);
146
+ }
147
+ }
148
+ if (fieldCostsOnly) {
149
+ return formatOnceOffUnitCostDetail(product, field.variationCost, field.variationUnitCost);
150
+ }
151
+ var selected = Array.isArray(variation === null || variation === void 0 ? void 0 : variation.selectedOptions) ? variation.selectedOptions : [];
152
+ if (includeSelectedOptionCosts && selected.length) {
153
+ var fieldOnce = fieldType === FieldType.COLOUR_EXTRACT ? parseCostAmount(field.variationCost) : 0;
154
+ var fieldUnit = fieldType === FieldType.COLOUR_EXTRACT ? parseCostAmount(field.variationUnitCost) : 0;
155
+ return formatOnceOffUnitCostDetail(product, fieldOnce + selected.reduce(function (sum, option) {
156
+ return sum + optionOnceOff(option);
157
+ }, 0), fieldUnit + selected.reduce(function (sum, option) {
158
+ return sum + optionUnit(option);
159
+ }, 0));
160
+ }
161
+ 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);
162
+ if (onceOffUnit) return onceOffUnit;
163
+ if (variation !== null && variation !== void 0 && variation.cost) {
164
+ return " + ".concat(formatCost(product, variation.cost));
165
+ }
166
+ return '';
167
+ }
168
+ function VariationFilePreview(_ref2) {
169
+ var file = _ref2.file,
170
+ urlApi = _ref2.urlApi;
171
+ var fileUrl = resolveFileUrl(file, urlApi);
76
172
  var fileName = (file === null || file === void 0 ? void 0 : file.name) || 'File';
173
+ var _useState = useState(false),
174
+ _useState2 = _slicedToArray(_useState, 2),
175
+ imageFailed = _useState2[0],
176
+ setImageFailed = _useState2[1];
77
177
  if (isPdf(file)) {
78
178
  return /*#__PURE__*/_jsxs("a", {
79
179
  className: "merchi-checkout-summary-file-link",
80
- href: fileUrl,
180
+ href: fileUrl || undefined,
81
181
  target: "_blank",
82
182
  rel: "noopener noreferrer",
83
183
  title: fileName,
@@ -88,12 +188,26 @@ function VariationFilePreview(_ref) {
88
188
  })]
89
189
  });
90
190
  }
91
- if (isImageFile(file) && fileUrl) {
191
+ if (isImageFile(file) && fileUrl && !imageFailed) {
92
192
  return /*#__PURE__*/_jsx("img", {
93
193
  className: "modal-merchi-checkout-job-info-content-img",
94
194
  src: fileUrl,
95
195
  alt: fileName,
96
- title: fileName
196
+ title: fileName,
197
+ onError: function onError() {
198
+ return setImageFailed(true);
199
+ }
200
+ });
201
+ }
202
+ if (isImageFile(file)) {
203
+ return /*#__PURE__*/_jsxs("span", {
204
+ className: "merchi-checkout-summary-file-fallback",
205
+ title: fileName,
206
+ children: [/*#__PURE__*/_jsx(FaRegImage, {
207
+ "aria-hidden": true
208
+ }), /*#__PURE__*/_jsx("span", {
209
+ children: fileName
210
+ })]
97
211
  });
98
212
  }
99
213
  if (fileUrl) {
@@ -110,15 +224,16 @@ function VariationFilePreview(_ref) {
110
224
  children: fileName
111
225
  });
112
226
  }
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;
227
+ function VariationInfoBody(_ref3) {
228
+ var costDetail = _ref3.costDetail,
229
+ name = _ref3.name,
230
+ product = _ref3.product,
231
+ value = _ref3.value,
232
+ files = _ref3.files,
233
+ type = _ref3.type,
234
+ urlApi = _ref3.urlApi;
120
235
  var isColourPicker = type === FieldType.COLOUR_PICKER;
121
- var isFileUpload = type === FieldType.FILE_UPLOAD;
236
+ var isFileUpload = type === FieldType.FILE_UPLOAD || type === FieldType.COLOUR_EXTRACT;
122
237
  var hasFiles = Boolean(files === null || files === void 0 ? void 0 : files.length);
123
238
  var displayValue = isColourPicker || isFileUpload && hasFiles ? null : value;
124
239
  return /*#__PURE__*/_jsxs("div", {
@@ -132,7 +247,8 @@ function VariationInfoBody(_ref2) {
132
247
  className: "merchi-checkout-summary-file-previews",
133
248
  children: files.map(function (file, index) {
134
249
  return /*#__PURE__*/_jsx(VariationFilePreview, {
135
- file: file
250
+ file: file,
251
+ urlApi: urlApi
136
252
  }, file.viewUrl || file.id || "".concat(name, "-file-").concat(index));
137
253
  })
138
254
  }), isColourPicker && value && /*#__PURE__*/_jsxs("div", {
@@ -145,13 +261,15 @@ function VariationInfoBody(_ref2) {
145
261
  }), /*#__PURE__*/_jsx("span", {
146
262
  children: value
147
263
  })]
148
- }), displayValue && displayValue, cost ? " + ".concat(formatCost(product, cost)) : '', !hasFiles && !value && '-']
264
+ }), displayValue && displayValue, costDetail || '', !hasFiles && !value && !costDetail && '-']
149
265
  })]
150
266
  });
151
267
  }
152
- function VariationInfo(_ref3) {
153
- var product = _ref3.product,
154
- variation = _ref3.variation;
268
+ function VariationInfo(_ref4) {
269
+ var product = _ref4.product,
270
+ variation = _ref4.variation;
271
+ var _useMerchiCheckboutCo = useMerchiCheckboutContext(),
272
+ urlApi = _useMerchiCheckboutCo.urlApi;
155
273
  var selectedOptions = variation.selectedOptions,
156
274
  variationField = variation.variationField,
157
275
  variationFiles = variation.variationFiles,
@@ -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;
283
+ var isColourExtract = fieldType === FieldType.COLOUR_EXTRACT;
165
284
  var options = selectedOptions;
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
  })]
@@ -269,12 +429,12 @@ function formatTurnaroundDeadline(userDeadline) {
269
429
  day: 'numeric'
270
430
  });
271
431
  }
272
- function TurnaroundOptionLabel(_ref6) {
432
+ function TurnaroundOptionLabel(_ref7) {
273
433
  var _option$value3, _option$value4;
274
- var option = _ref6.option,
275
- variationField = _ref6.variationField,
276
- product = _ref6.product,
277
- sellerProductEditable = _ref6.sellerProductEditable;
434
+ var option = _ref7.option,
435
+ variationField = _ref7.variationField,
436
+ product = _ref7.product,
437
+ sellerProductEditable = _ref7.sellerProductEditable;
278
438
  var days = parseInt(String((_option$value3 = option === null || option === void 0 ? void 0 : option.value) !== null && _option$value3 !== void 0 ? _option$value3 : ''), 10) || 0;
279
439
  var deadline = formatTurnaroundDeadline(option === null || option === void 0 ? void 0 : option.userDeadline);
280
440
  var shippingTimeIncluded = Boolean(variationField === null || variationField === void 0 ? void 0 : variationField.shippingTimeIncluded);
@@ -291,24 +451,24 @@ function TurnaroundOptionLabel(_ref6) {
291
451
  }), cost || '']
292
452
  });
293
453
  }
294
- function VariationOptionsInfoBody(_ref7) {
454
+ function VariationOptionsInfoBody(_ref8) {
295
455
  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;
456
+ var name = _ref8.name,
457
+ selectedOptions = _ref8.selectedOptions,
458
+ sellerProductEditable = _ref8.sellerProductEditable,
459
+ product = _ref8.product,
460
+ fieldType = _ref8.fieldType,
461
+ variation = _ref8.variation,
462
+ _ref8$selectableOptio = _ref8.selectableOptions,
463
+ selectableOptions = _ref8$selectableOptio === void 0 ? [] : _ref8$selectableOptio,
464
+ _ref8$fieldOptions = _ref8.fieldOptions,
465
+ fieldOptions = _ref8$fieldOptions === void 0 ? [] : _ref8$fieldOptions;
306
466
  var isTurnaroundTime = fieldType === FieldType.TURNAROUND_TIME;
307
467
  var firstOption = isTurnaroundTime ? resolveTurnaroundSelectedOption({
308
468
  selectedOptions: selectedOptions,
309
469
  value: variation === null || variation === void 0 ? void 0 : variation.value
310
470
  }, selectableOptions, fieldOptions) : selectedOptions[0];
311
- var isColourSelect = fieldType === FieldType.COLOUR_SELECT;
471
+ var isColourSelect = fieldType === FieldType.COLOUR_SELECT || fieldType === FieldType.COLOUR_EXTRACT;
312
472
  var isImageSelect = fieldType === FieldType.IMAGE_SELECT;
313
473
  var variationField = (_variation$variationF = variation === null || variation === void 0 ? void 0 : variation.variationField) !== null && _variation$variationF !== void 0 ? _variation$variationF : {};
314
474
  function renderOptionLabel(o) {
@@ -325,7 +485,9 @@ function VariationOptionsInfoBody(_ref7) {
325
485
  return /*#__PURE__*/_jsx(ColourSelectOption, {
326
486
  option: o,
327
487
  selectableOptions: selectableOptions,
328
- fieldOptions: fieldOptions
488
+ fieldOptions: fieldOptions,
489
+ product: product,
490
+ sellerProductEditable: sellerProductEditable
329
491
  });
330
492
  }
331
493
  if (isImageSelect) {
@@ -377,11 +539,11 @@ function VariationOptionsInfoBody(_ref7) {
377
539
  })
378
540
  });
379
541
  }
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;
542
+ function VariationsInfo(_ref9) {
543
+ var product = _ref9.product,
544
+ quantity = _ref9.quantity,
545
+ _ref9$variations = _ref9.variations,
546
+ variations = _ref9$variations === void 0 ? [] : _ref9$variations;
385
547
  return /*#__PURE__*/_jsx("div", {
386
548
  className: "merchi-checkout-summary-variations",
387
549
  children: variations.map(function (v, i) {
@@ -393,11 +555,11 @@ function VariationsInfo(_ref8) {
393
555
  })
394
556
  });
395
557
  }
396
- function VariationGroupInfo(_ref9) {
397
- var group = _ref9.group,
398
- index = _ref9.index,
399
- product = _ref9.product,
400
- showSetupOnUnitPrice = _ref9.showSetupOnUnitPrice;
558
+ function VariationGroupInfo(_ref10) {
559
+ var group = _ref10.group,
560
+ index = _ref10.index,
561
+ product = _ref10.product,
562
+ showSetupOnUnitPrice = _ref10.showSetupOnUnitPrice;
401
563
  var isResell = isProductSupplierMOD(product);
402
564
  var quantity = group.quantity,
403
565
  variations = group.variations;
@@ -429,8 +591,8 @@ function VariationGroupInfo(_ref9) {
429
591
  });
430
592
  }
431
593
  export default function JobInfoContent() {
432
- var _useMerchiCheckboutCo = useMerchiCheckboutContext(),
433
- job = _useMerchiCheckboutCo.job;
594
+ var _useMerchiCheckboutCo3 = useMerchiCheckboutContext(),
595
+ job = _useMerchiCheckboutCo3.job;
434
596
  var product = job.product,
435
597
  _job$quantity = job.quantity,
436
598
  quantity = _job$quantity === void 0 ? 0 : _job$quantity,
@@ -520,4 +682,4 @@ export default function JobInfoContent() {
520
682
  })]
521
683
  });
522
684
  }
523
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkZhRmlsZVBkZiIsImZvcm1hdEN1cnJlbmN5IiwiY3VycmVuY3lUb3RhbENvc3RTaG93SW5jVGF4IiwiaXNJbnN0cnVjdGlvbnNUeXBlIiwiaXNQcm9kdWN0U3VwcGxpZXJNT0QiLCJpc1NlbGVjdGFibGUiLCJGaWVsZFR5cGUiLCJ1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0IiwiU3VtbWFyeUFtb3VudFJvdyIsIlN1bW1hcnlGaWVsZFJvdyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImZvcm1hdENvc3QiLCJwcm9kdWN0IiwiY29zdCIsImN1cnJlbmN5Iiwic2hvd0NvZGVJZk5vU3ltYm9sIiwicHJvZHVjdFNldHVwU3VmZml4Iiwic2V0dXBQcmljZSIsIk51bWJlciIsImxhYmVsIiwic2V0dXBQZXJHcm91cCIsImNvbmNhdCIsImZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cCIsInVuaXRQcmljZSIsImlzUGRmIiwiZmlsZSIsIm1pbWV0eXBlIiwiaXNJbWFnZUZpbGUiLCJzdGFydHNXaXRoIiwibmFtZSIsInRvTG93ZXJDYXNlIiwidGVzdCIsIm9wdGlvbkltYWdlVXJsIiwib3B0aW9uIiwiX29wdGlvbiRsaW5rZWRGaWxlIiwibGlua2VkRmlsZSIsInZpZXdVcmwiLCJmaW5kTWF0Y2hpbmdPcHRpb24iLCJvcHRpb25zIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZmluZCIsIm8iLCJTdHJpbmciLCJvcHRpb25JZCIsInJlc29sdmVPcHRpb25Db2xvdXIiLCJfb3B0aW9uJGNvbG91ciIsIl9maW5kTWF0Y2hpbmdPcHRpb24iLCJfZmluZE1hdGNoaW5nT3B0aW9uMiIsInNlbGVjdGFibGVPcHRpb25zIiwiZmllbGRPcHRpb25zIiwiZGlyZWN0IiwiY29sb3VyIiwidHJpbSIsImZyb21TZWxlY3RhYmxlIiwicmVzb2x2ZU9wdGlvbkltYWdlVXJsIiwiZm9ybWF0T3B0aW9uQ29zdCIsInNlbGxlclByb2R1Y3RFZGl0YWJsZSIsInRvdGFsQ29zdCIsIlZhcmlhdGlvbkZpbGVQcmV2aWV3IiwiX3JlZiIsImZpbGVVcmwiLCJkb3dubG9hZFVybCIsImZpbGVOYW1lIiwiY2xhc3NOYW1lIiwiaHJlZiIsInRhcmdldCIsInJlbCIsInRpdGxlIiwiY2hpbGRyZW4iLCJzcmMiLCJhbHQiLCJWYXJpYXRpb25JbmZvQm9keSIsIl9yZWYyIiwidmFsdWUiLCJmaWxlcyIsInR5cGUiLCJpc0NvbG91clBpY2tlciIsIkNPTE9VUl9QSUNLRVIiLCJpc0ZpbGVVcGxvYWQiLCJGSUxFX1VQTE9BRCIsImhhc0ZpbGVzIiwiQm9vbGVhbiIsImRpc3BsYXlWYWx1ZSIsIm1hcCIsImluZGV4IiwiaWQiLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsIlZhcmlhdGlvbkluZm8iLCJfcmVmMyIsInZhcmlhdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInZhcmlhdGlvbkZpZWxkIiwidmFyaWF0aW9uRmlsZXMiLCJmaWVsZFR5cGUiLCJfdmFyaWF0aW9uRmllbGQkb3B0aW8iLCJpc1ZhcmlhdGlvblNlbGVjdGFibGUiLCJpc1R1cm5hcm91bmRUaW1lIiwiVFVSTkFST1VORF9USU1FIiwidXNlU2VsZWN0YWJsZURpc3BsYXkiLCJWYXJpYXRpb25PcHRpb25zSW5mb0JvZHkiLCJDb2xvdXJTZWxlY3RPcHRpb24iLCJfcmVmNCIsIl9vcHRpb24kdmFsdWUiLCJoZXgiLCJJbWFnZVNlbGVjdE9wdGlvbiIsIl9yZWY1IiwiX29wdGlvbiR2YWx1ZTIiLCJpbWFnZVVybCIsImdldE9wdGlvbklkIiwiX29wdGlvbiRvcHRpb25JZCIsInJlc29sdmVUdXJuYXJvdW5kU2VsZWN0ZWRPcHRpb24iLCJfdmFyaWF0aW9uJHNlbGVjdGVkT3AiLCJ2YWx1ZVN0ciIsInBvb2xzIiwiX2kiLCJfcG9vbHMiLCJwb29sIiwiYnlJZCIsImJ5VmFsdWUiLCJfbyR2YWx1ZSIsImZvcm1hdFR1cm5hcm91bmREZWFkbGluZSIsInVzZXJEZWFkbGluZSIsInNlY29uZHMiLCJpc0Zpbml0ZSIsIkRhdGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJ3ZWVrZGF5IiwieWVhciIsIm1vbnRoIiwiZGF5IiwiVHVybmFyb3VuZE9wdGlvbkxhYmVsIiwiX3JlZjYiLCJfb3B0aW9uJHZhbHVlMyIsIl9vcHRpb24kdmFsdWU0IiwiZGF5cyIsInBhcnNlSW50IiwiZGVhZGxpbmUiLCJzaGlwcGluZ1RpbWVJbmNsdWRlZCIsImRlYWRsaW5lTGFiZWwiLCJfcmVmNyIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsIl9yZWY3JHNlbGVjdGFibGVPcHRpbyIsIl9yZWY3JGZpZWxkT3B0aW9ucyIsImZpcnN0T3B0aW9uIiwiaXNDb2xvdXJTZWxlY3QiLCJDT0xPVVJfU0VMRUNUIiwiaXNJbWFnZVNlbGVjdCIsIklNQUdFX1NFTEVDVCIsInJlbmRlck9wdGlvbkxhYmVsIiwiX28kdmFsdWUyIiwiaSIsIl9vJG9wdGlvbklkIiwiVmFyaWF0aW9uc0luZm8iLCJfcmVmOCIsInF1YW50aXR5IiwiX3JlZjgkdmFyaWF0aW9ucyIsInZhcmlhdGlvbnMiLCJ2IiwiVmFyaWF0aW9uR3JvdXBJbmZvIiwiX3JlZjkiLCJncm91cCIsInNob3dTZXR1cE9uVW5pdFByaWNlIiwiaXNSZXNlbGwiLCJ2aXNpYmxlVmFyaWF0aW9ucyIsImZpbHRlciIsIl92JHZhcmlhdGlvbkZpZWxkIiwiY29zdExhYmVsIiwidW5pdFByaWNlVmFsdWUiLCJncm91cENvc3QiLCJKb2JJbmZvQ29udGVudCIsIl91c2VNZXJjaGlDaGVja2JvdXRDbyIsImpvYiIsIl9qb2IkcXVhbnRpdHkiLCJfam9iJHZhcmlhdGlvbnMiLCJfam9iJHZhcmlhdGlvbnNHcm91cHMiLCJ2YXJpYXRpb25zR3JvdXBzIiwibmVlZHNTaGlwcGluZyIsImhhc0dyb3VwcyIsImpvYkxldmVsVmFyaWF0aW9ucyIsIl92JHZhcmlhdGlvbkZpZWxkMiIsInRvdGFsUXVhbnRpdHkiLCJyZWR1Y2UiLCJzdW0iLCJnIiwiaGFzU2V0dXBQcmljZSIsImFtb3VudCIsImxhYmVsRXh0cmEiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9Kb2JJbmZvQ29udGVudC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZhRmlsZVBkZiB9IGZyb20gJ3JlYWN0LWljb25zL2ZhJztcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5LCBjdXJyZW5jeVRvdGFsQ29zdFNob3dJbmNUYXggfSBmcm9tICcuL2N1cnJlbmN5JztcbmltcG9ydCB7XG4gIGlzSW5zdHJ1Y3Rpb25zVHlwZSxcbiAgaXNQcm9kdWN0U3VwcGxpZXJNT0QsXG4gIGlzU2VsZWN0YWJsZSxcbiAgRmllbGRUeXBlLFxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyB1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0IH0gZnJvbSAnLi9NZXJjaGlDaGVja291dFByb3ZpZGVyJztcbmltcG9ydCB7XG4gIFN1bW1hcnlBbW91bnRSb3csXG4gIFN1bW1hcnlGaWVsZFJvdyxcbn0gZnJvbSAnLi9DaGVja291dFN1bW1hcnlGaWVsZHMnO1xuXG5mdW5jdGlvbiBmb3JtYXRDb3N0KHByb2R1Y3Q6IGFueSwgY29zdDogbnVtYmVyKSB7XG4gIGNvbnN0IGN1cnJlbmN5ID0gcHJvZHVjdC5jdXJyZW5jeSA/IHByb2R1Y3QuY3VycmVuY3kgOiAnQVVEJztcbiAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KGNvc3QsIHtcbiAgICBjdXJyZW5jeSxcbiAgICBzaG93Q29kZUlmTm9TeW1ib2w6IGZhbHNlLFxuICB9KTtcbn1cblxuLyoqIFByb2R1Y3Qgc2V0dXAgZmVlIHNob3duIG5leHQgdG8gdW5pdCBwcmljZSwgbWF0Y2hpbmcgcHJvZHVjdC1mb3JtIHdvcmRpbmcuICovXG5mdW5jdGlvbiBwcm9kdWN0U2V0dXBTdWZmaXgocHJvZHVjdDogYW55KSB7XG4gIGNvbnN0IHNldHVwUHJpY2UgPSBOdW1iZXIocHJvZHVjdD8uc2V0dXBQcmljZSk7XG4gIGlmICghc2V0dXBQcmljZSkgcmV0dXJuICcnO1xuICBjb25zdCBsYWJlbCA9IHByb2R1Y3Quc2V0dXBQZXJHcm91cCA/ICdzZXR1cCBwZXIgZ3JvdXAnIDogJ3NldHVwJztcbiAgcmV0dXJuIGAgKyAke2Zvcm1hdENvc3QocHJvZHVjdCwgc2V0dXBQcmljZSl9ICR7bGFiZWx9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5pdFByaWNlV2l0aFNldHVwKHByb2R1Y3Q6IGFueSkge1xuICByZXR1cm4gYCR7Zm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdD8udW5pdFByaWNlKSB8fCAwKX0ke3Byb2R1Y3RTZXR1cFN1ZmZpeChwcm9kdWN0KX1gO1xufVxuXG5mdW5jdGlvbiBpc1BkZihmaWxlOiBhbnkpIHtcbiAgY29uc3QgbWltZXR5cGUgPSBmaWxlPy5taW1ldHlwZSB8fCAnJztcbiAgcmV0dXJuIG1pbWV0eXBlID09PSAnYXBwbGljYXRpb24vcGRmJyB8fCBtaW1ldHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3gtcGRmJztcbn1cblxuZnVuY3Rpb24gaXNJbWFnZUZpbGUoZmlsZTogYW55KSB7XG4gIGNvbnN0IG1pbWV0eXBlID0gZmlsZT8ubWltZXR5cGUgfHwgJyc7XG4gIGlmIChtaW1ldHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IG5hbWUgPSAoZmlsZT8ubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIC9cXC4oanBlP2d8cG5nfGdpZnx3ZWJwfHN2Z3xibXApJC8udGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uSW1hZ2VVcmwob3B0aW9uOiBhbnkpIHtcbiAgcmV0dXJuIG9wdGlvbj8ubGlua2VkRmlsZT8udmlld1VybCB8fCAnJztcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nT3B0aW9uKG9wdGlvbjogYW55LCBvcHRpb25zOiBhbnlbXSA9IFtdKSB7XG4gIHJldHVybiBvcHRpb25zLmZpbmQoKG8pID0+IFN0cmluZyhvLm9wdGlvbklkKSA9PT0gU3RyaW5nKG9wdGlvbj8ub3B0aW9uSWQpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU9wdGlvbkNvbG91cihcbiAgb3B0aW9uOiBhbnksXG4gIHNlbGVjdGFibGVPcHRpb25zOiBhbnlbXSA9IFtdLFxuICBmaWVsZE9wdGlvbnM6IGFueVtdID0gW11cbikge1xuICBjb25zdCBkaXJlY3QgPSBvcHRpb24/LmNvbG91cj8udHJpbSgpO1xuICBpZiAoZGlyZWN0KSByZXR1cm4gZGlyZWN0O1xuICBjb25zdCBmcm9tU2VsZWN0YWJsZSA9IGZpbmRNYXRjaGluZ09wdGlvbihvcHRpb24sIHNlbGVjdGFibGVPcHRpb25zKT8uY29sb3VyPy50cmltKCk7XG4gIGlmIChmcm9tU2VsZWN0YWJsZSkgcmV0dXJuIGZyb21TZWxlY3RhYmxlO1xuICByZXR1cm4gZmluZE1hdGNoaW5nT3B0aW9uKG9wdGlvbiwgZmllbGRPcHRpb25zKT8uY29sb3VyPy50cmltKCkgfHwgJyc7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVPcHRpb25JbWFnZVVybChcbiAgb3B0aW9uOiBhbnksXG4gIHNlbGVjdGFibGVPcHRpb25zOiBhbnlbXSA9IFtdLFxuICBmaWVsZE9wdGlvbnM6IGFueVtdID0gW11cbikge1xuICBjb25zdCBkaXJlY3QgPSBvcHRpb25JbWFnZVVybChvcHRpb24pO1xuICBpZiAoZGlyZWN0KSByZXR1cm4gZGlyZWN0O1xuICBjb25zdCBmcm9tU2VsZWN0YWJsZSA9IG9wdGlvbkltYWdlVXJsKFxuICAgIGZpbmRNYXRjaGluZ09wdGlvbihvcHRpb24sIHNlbGVjdGFibGVPcHRpb25zKVxuICApO1xuICBpZiAoZnJvbVNlbGVjdGFibGUpIHJldHVybiBmcm9tU2VsZWN0YWJsZTtcbiAgcmV0dXJuIG9wdGlvbkltYWdlVXJsKGZpbmRNYXRjaGluZ09wdGlvbihvcHRpb24sIGZpZWxkT3B0aW9ucykpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRPcHRpb25Db3N0KFxuICBwcm9kdWN0OiBhbnksXG4gIG9wdGlvbjogYW55LFxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGU6IGJvb2xlYW5cbikge1xuICBpZiAoIW9wdGlvbj8udG90YWxDb3N0IHx8IHNlbGxlclByb2R1Y3RFZGl0YWJsZSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBgICsgJHtmb3JtYXRDb3N0KHByb2R1Y3QsIG9wdGlvbi50b3RhbENvc3QpfWA7XG59XG5cbmZ1bmN0aW9uIFZhcmlhdGlvbkZpbGVQcmV2aWV3KHsgZmlsZSB9OiB7IGZpbGU6IGFueSB9KSB7XG4gIGNvbnN0IGZpbGVVcmwgPSBmaWxlPy52aWV3VXJsIHx8IGZpbGU/LmRvd25sb2FkVXJsIHx8ICcnO1xuICBjb25zdCBmaWxlTmFtZSA9IGZpbGU/Lm5hbWUgfHwgJ0ZpbGUnO1xuXG4gIGlmIChpc1BkZihmaWxlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8YVxuICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWZpbGUtbGluaydcbiAgICAgICAgaHJlZj17ZmlsZVVybH1cbiAgICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICAgIHJlbD0nbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgICAgdGl0bGU9e2ZpbGVOYW1lfVxuICAgICAgPlxuICAgICAgICA8RmFGaWxlUGRmIGFyaWEtaGlkZGVuIC8+XG4gICAgICAgIDxzcGFuPntmaWxlTmFtZX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc0ltYWdlRmlsZShmaWxlKSAmJiBmaWxlVXJsKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3NOYW1lPSdtb2RhbC1tZXJjaGktY2hlY2tvdXQtam9iLWluZm8tY29udGVudC1pbWcnXG4gICAgICAgIHNyYz17ZmlsZVVybH1cbiAgICAgICAgYWx0PXtmaWxlTmFtZX1cbiAgICAgICAgdGl0bGU9e2ZpbGVOYW1lfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgaWYgKGZpbGVVcmwpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGFcbiAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1maWxlLWxpbmsnXG4gICAgICAgIGhyZWY9e2ZpbGVVcmx9XG4gICAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgICByZWw9J25vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICAgIHRpdGxlPXtmaWxlTmFtZX1cbiAgICAgID5cbiAgICAgICAge2ZpbGVOYW1lfVxuICAgICAgPC9hPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gPHNwYW4+e2ZpbGVOYW1lfTwvc3Bhbj47XG59XG5cbmZ1bmN0aW9uIFZhcmlhdGlvbkluZm9Cb2R5KHsgY29zdCwgbmFtZSwgcHJvZHVjdCwgdmFsdWUsIGZpbGVzLCB0eXBlIH06IGFueSkge1xuICBjb25zdCBpc0NvbG91clBpY2tlciA9IHR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfUElDS0VSO1xuICBjb25zdCBpc0ZpbGVVcGxvYWQgPSB0eXBlID09PSBGaWVsZFR5cGUuRklMRV9VUExPQUQ7XG4gIGNvbnN0IGhhc0ZpbGVzID0gQm9vbGVhbihmaWxlcz8ubGVuZ3RoKTtcbiAgY29uc3QgZGlzcGxheVZhbHVlID0gaXNDb2xvdXJQaWNrZXIgfHwgKGlzRmlsZVVwbG9hZCAmJiBoYXNGaWxlcykgPyBudWxsIDogdmFsdWU7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXJvdyc+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUnPlxuICAgICAgICB7aGFzRmlsZXMgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1maWxlLXByZXZpZXdzJz5cbiAgICAgICAgICAgIHtmaWxlcy5tYXAoKGZpbGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICA8VmFyaWF0aW9uRmlsZVByZXZpZXdcbiAgICAgICAgICAgICAgICBrZXk9e2ZpbGUudmlld1VybCB8fCBmaWxlLmlkIHx8IGAke25hbWV9LWZpbGUtJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgIGZpbGU9e2ZpbGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge2lzQ29sb3VyUGlja2VyICYmIHZhbHVlICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktY29sb3VyLXZhbHVlJz5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogdmFsdWUgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPSdjb2xvci1pbmRpY2F0b3InXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+e3ZhbHVlfTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAge2Rpc3BsYXlWYWx1ZSAmJiBkaXNwbGF5VmFsdWV9XG4gICAgICAgIHtjb3N0ID8gYCArICR7Zm9ybWF0Q29zdChwcm9kdWN0LCBjb3N0KX1gIDogJyd9XG4gICAgICAgIHshaGFzRmlsZXMgJiYgIXZhbHVlICYmICctJ31cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBWYXJpYXRpb25JbmZvKHsgcHJvZHVjdCwgdmFyaWF0aW9uIH06IGFueSkge1xuICBjb25zdCB7IHNlbGVjdGVkT3B0aW9ucywgdmFyaWF0aW9uRmllbGQsIHZhcmlhdGlvbkZpbGVzLCBzZWxlY3RhYmxlT3B0aW9ucyB9ID1cbiAgICB2YXJpYXRpb247XG4gIGNvbnN0IHsgZmllbGRUeXBlLCBzZWxsZXJQcm9kdWN0RWRpdGFibGUsIG9wdGlvbnM6IGZpZWxkT3B0aW9ucyA9IFtdIH0gPVxuICAgIHZhcmlhdGlvbkZpZWxkO1xuICBjb25zdCBpc1ZhcmlhdGlvblNlbGVjdGFibGUgPSBpc1NlbGVjdGFibGUoZmllbGRUeXBlKTtcbiAgY29uc3QgaXNUdXJuYXJvdW5kVGltZSA9IGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLlRVUk5BUk9VTkRfVElNRTtcbiAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdGVkT3B0aW9ucztcbiAgY29uc3QgdXNlU2VsZWN0YWJsZURpc3BsYXkgPVxuICAgIGlzVmFyaWF0aW9uU2VsZWN0YWJsZSAmJlxuICAgIChCb29sZWFuKG9wdGlvbnM/Lmxlbmd0aCkgfHwgKGlzVHVybmFyb3VuZFRpbWUgJiYgdmFyaWF0aW9uLnZhbHVlKSk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbic+XG4gICAgICB7dXNlU2VsZWN0YWJsZURpc3BsYXkgPyAoXG4gICAgICAgIDxWYXJpYXRpb25PcHRpb25zSW5mb0JvZHlcbiAgICAgICAgICBuYW1lPXt2YXJpYXRpb25GaWVsZC5uYW1lfVxuICAgICAgICAgIGZpZWxkVHlwZT17ZmllbGRUeXBlfVxuICAgICAgICAgIHZhbHVlPXt2YXJpYXRpb24udmFsdWV9XG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cbiAgICAgICAgICBmaWxlcz17dmFyaWF0aW9uRmlsZXN9XG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgIHZhcmlhdGlvbj17dmFyaWF0aW9ufVxuICAgICAgICAgIHNlbGVjdGFibGVPcHRpb25zPXtzZWxlY3RhYmxlT3B0aW9uc31cbiAgICAgICAgICBmaWVsZE9wdGlvbnM9e2ZpZWxkT3B0aW9uc31cbiAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGU9e3NlbGxlclByb2R1Y3RFZGl0YWJsZX1cbiAgICAgICAgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxWYXJpYXRpb25JbmZvQm9keVxuICAgICAgICAgIG5hbWU9e3ZhcmlhdGlvbkZpZWxkLm5hbWV9XG4gICAgICAgICAgdHlwZT17dmFyaWF0aW9uRmllbGQuZmllbGRUeXBlfVxuICAgICAgICAgIHZhbHVlPXt2YXJpYXRpb24udmFsdWV9XG4gICAgICAgICAgZmlsZXM9e3ZhcmlhdGlvbkZpbGVzfVxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgY29zdD17c2VsbGVyUHJvZHVjdEVkaXRhYmxlID8gMCA6IHZhcmlhdGlvbi5jb3N0fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQ29sb3VyU2VsZWN0T3B0aW9uKHtcbiAgb3B0aW9uLFxuICBzZWxlY3RhYmxlT3B0aW9ucyxcbiAgZmllbGRPcHRpb25zLFxufToge1xuICBvcHRpb246IGFueTtcbiAgc2VsZWN0YWJsZU9wdGlvbnM/OiBhbnlbXTtcbiAgZmllbGRPcHRpb25zPzogYW55W107XG59KSB7XG4gIGNvbnN0IGxhYmVsID0gb3B0aW9uPy52YWx1ZT8udHJpbSgpIHx8ICcnO1xuICBjb25zdCBoZXggPSByZXNvbHZlT3B0aW9uQ29sb3VyKG9wdGlvbiwgc2VsZWN0YWJsZU9wdGlvbnMsIGZpZWxkT3B0aW9ucyk7XG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1jb2xvdXItb3B0aW9uJz5cbiAgICAgIHtoZXggJiYgKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogaGV4IH19XG4gICAgICAgICAgY2xhc3NOYW1lPSdjb2xvci1pbmRpY2F0b3InXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPHNwYW4+e2xhYmVsIHx8IGhleCB8fCAn4oCTJ308L3NwYW4+XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBJbWFnZVNlbGVjdE9wdGlvbih7XG4gIG9wdGlvbixcbiAgc2VsZWN0YWJsZU9wdGlvbnMsXG4gIGZpZWxkT3B0aW9ucyxcbiAgcHJvZHVjdCxcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxufToge1xuICBvcHRpb246IGFueTtcbiAgc2VsZWN0YWJsZU9wdGlvbnM/OiBhbnlbXTtcbiAgZmllbGRPcHRpb25zPzogYW55W107XG4gIHByb2R1Y3Q6IGFueTtcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlOiBib29sZWFuO1xufSkge1xuICBjb25zdCBpbWFnZVVybCA9IHJlc29sdmVPcHRpb25JbWFnZVVybChvcHRpb24sIHNlbGVjdGFibGVPcHRpb25zLCBmaWVsZE9wdGlvbnMpO1xuICBjb25zdCBsYWJlbCA9IG9wdGlvbj8udmFsdWU/LnRyaW0oKSB8fCAnJztcbiAgY29uc3QgY29zdCA9IGZvcm1hdE9wdGlvbkNvc3QocHJvZHVjdCwgb3B0aW9uLCBzZWxsZXJQcm9kdWN0RWRpdGFibGUpO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1pbWFnZS1zZWxlY3Qtb3B0aW9uJz5cbiAgICAgIHtpbWFnZVVybCA/IChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT0nbW9kYWwtbWVyY2hpLWNoZWNrb3V0LWpvYi1pbmZvLWNvbnRlbnQtaW1nJ1xuICAgICAgICAgIHNyYz17aW1hZ2VVcmx9XG4gICAgICAgICAgYWx0PXtsYWJlbCB8fCAnU2VsZWN0ZWQgb3B0aW9uJ31cbiAgICAgICAgICB0aXRsZT17bGFiZWwgfHwgdW5kZWZpbmVkfVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8c3Bhbj57bGFiZWwgfHwgJ+KAkyd9e2Nvc3QgfHwgJyd9PC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3B0aW9uSWQob3B0aW9uOiBhbnkpIHtcbiAgcmV0dXJuIG9wdGlvbj8ub3B0aW9uSWQgPz8gb3B0aW9uPy5pZDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVR1cm5hcm91bmRTZWxlY3RlZE9wdGlvbihcbiAgdmFyaWF0aW9uOiBhbnksXG4gIHNlbGVjdGFibGVPcHRpb25zOiBhbnlbXSA9IFtdLFxuICBmaWVsZE9wdGlvbnM6IGFueVtdID0gW11cbikge1xuICBjb25zdCB7IHNlbGVjdGVkT3B0aW9ucyA9IFtdLCB2YWx1ZSB9ID0gdmFyaWF0aW9uO1xuICBpZiAoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zWzBdO1xuICB9XG4gIGNvbnN0IHZhbHVlU3RyID0gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycgPyBTdHJpbmcodmFsdWUpLnRyaW0oKSA6ICcnO1xuICBpZiAoIXZhbHVlU3RyKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBwb29scyA9IFtzZWxlY3RhYmxlT3B0aW9ucywgZmllbGRPcHRpb25zXTtcbiAgZm9yIChjb25zdCBwb29sIG9mIHBvb2xzKSB7XG4gICAgY29uc3QgYnlJZCA9IHBvb2wuZmluZChcbiAgICAgIChvOiBhbnkpID0+IFN0cmluZyhnZXRPcHRpb25JZChvKSkgPT09IHZhbHVlU3RyXG4gICAgKTtcbiAgICBpZiAoYnlJZCkgcmV0dXJuIGJ5SWQ7XG4gICAgY29uc3QgYnlWYWx1ZSA9IHBvb2wuZmluZChcbiAgICAgIChvOiBhbnkpID0+IFN0cmluZyhvLnZhbHVlID8/ICcnKSA9PT0gdmFsdWVTdHJcbiAgICApO1xuICAgIGlmIChieVZhbHVlKSByZXR1cm4gYnlWYWx1ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VHVybmFyb3VuZERlYWRsaW5lKHVzZXJEZWFkbGluZTogYW55KSB7XG4gIGlmICghdXNlckRlYWRsaW5lKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qgc2Vjb25kcyA9IE51bWJlcih1c2VyRGVhZGxpbmUpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShzZWNvbmRzKSB8fCBzZWNvbmRzIDw9IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gbmV3IERhdGUoc2Vjb25kcyAqIDEwMDApLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tQVUnLCB7XG4gICAgd2Vla2RheTogJ2xvbmcnLFxuICAgIHllYXI6ICdudW1lcmljJyxcbiAgICBtb250aDogJ2xvbmcnLFxuICAgIGRheTogJ251bWVyaWMnLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gVHVybmFyb3VuZE9wdGlvbkxhYmVsKHtcbiAgb3B0aW9uLFxuICB2YXJpYXRpb25GaWVsZCxcbiAgcHJvZHVjdCxcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxufToge1xuICBvcHRpb246IGFueTtcbiAgdmFyaWF0aW9uRmllbGQ6IGFueTtcbiAgcHJvZHVjdDogYW55O1xuICBzZWxsZXJQcm9kdWN0RWRpdGFibGU6IGJvb2xlYW47XG59KSB7XG4gIGNvbnN0IGRheXMgPSBwYXJzZUludChTdHJpbmcob3B0aW9uPy52YWx1ZSA/PyAnJyksIDEwKSB8fCAwO1xuICBjb25zdCBkZWFkbGluZSA9IGZvcm1hdFR1cm5hcm91bmREZWFkbGluZShvcHRpb24/LnVzZXJEZWFkbGluZSk7XG4gIGNvbnN0IHNoaXBwaW5nVGltZUluY2x1ZGVkID0gQm9vbGVhbih2YXJpYXRpb25GaWVsZD8uc2hpcHBpbmdUaW1lSW5jbHVkZWQpO1xuICBjb25zdCBkZWFkbGluZUxhYmVsID0gc2hpcHBpbmdUaW1lSW5jbHVkZWQgPyAnRGVsaXZlcnkgYnknIDogJ1Byb2R1Y2VkIGJ5JztcbiAgY29uc3QgY29zdCA9IGZvcm1hdE9wdGlvbkNvc3QocHJvZHVjdCwgb3B0aW9uLCBzZWxsZXJQcm9kdWN0RWRpdGFibGUpO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS10dXJuYXJvdW5kLXZhbHVlJz5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdHVybmFyb3VuZC1kYXlzJz5cbiAgICAgICAge2RheXMgPiAwXG4gICAgICAgICAgPyBgJHtkYXlzfSBidXNpbmVzcyBkYXkke2RheXMgIT09IDEgPyAncycgOiAnJ31gXG4gICAgICAgICAgOiAob3B0aW9uPy52YWx1ZT8udHJpbSgpIHx8ICfigJMnKX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtkZWFkbGluZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdHVybmFyb3VuZC1kZWFkbGluZSc+XG4gICAgICAgICAge2RlYWRsaW5lTGFiZWx9IHtkZWFkbGluZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIHtjb3N0IHx8ICcnfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVmFyaWF0aW9uT3B0aW9uc0luZm9Cb2R5KHtcbiAgbmFtZSxcbiAgc2VsZWN0ZWRPcHRpb25zLFxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGUsXG4gIHByb2R1Y3QsXG4gIGZpZWxkVHlwZSxcbiAgdmFyaWF0aW9uLFxuICBzZWxlY3RhYmxlT3B0aW9ucyA9IFtdLFxuICBmaWVsZE9wdGlvbnMgPSBbXSxcbn06IGFueSkge1xuICBjb25zdCBpc1R1cm5hcm91bmRUaW1lID0gZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVFVSTkFST1VORF9USU1FO1xuICBjb25zdCBmaXJzdE9wdGlvbiA9IGlzVHVybmFyb3VuZFRpbWVcbiAgICA/IHJlc29sdmVUdXJuYXJvdW5kU2VsZWN0ZWRPcHRpb24oXG4gICAgICAgIHsgc2VsZWN0ZWRPcHRpb25zLCB2YWx1ZTogdmFyaWF0aW9uPy52YWx1ZSB9LFxuICAgICAgICBzZWxlY3RhYmxlT3B0aW9ucyxcbiAgICAgICAgZmllbGRPcHRpb25zXG4gICAgICApXG4gICAgOiBzZWxlY3RlZE9wdGlvbnNbMF07XG4gIGNvbnN0IGlzQ29sb3VyU2VsZWN0ID0gZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQ09MT1VSX1NFTEVDVDtcbiAgY29uc3QgaXNJbWFnZVNlbGVjdCA9IGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLklNQUdFX1NFTEVDVDtcbiAgY29uc3QgdmFyaWF0aW9uRmllbGQgPSB2YXJpYXRpb24/LnZhcmlhdGlvbkZpZWxkID8/IHt9O1xuXG4gIGZ1bmN0aW9uIHJlbmRlck9wdGlvbkxhYmVsKG86IGFueSkge1xuICAgIGlmIChpc1R1cm5hcm91bmRUaW1lKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VHVybmFyb3VuZE9wdGlvbkxhYmVsXG4gICAgICAgICAgb3B0aW9uPXtvfVxuICAgICAgICAgIHZhcmlhdGlvbkZpZWxkPXt2YXJpYXRpb25GaWVsZH1cbiAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxuICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZT17c2VsbGVyUHJvZHVjdEVkaXRhYmxlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzQ29sb3VyU2VsZWN0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q29sb3VyU2VsZWN0T3B0aW9uXG4gICAgICAgICAgb3B0aW9uPXtvfVxuICAgICAgICAgIHNlbGVjdGFibGVPcHRpb25zPXtzZWxlY3RhYmxlT3B0aW9uc31cbiAgICAgICAgICBmaWVsZE9wdGlvbnM9e2ZpZWxkT3B0aW9uc31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0ltYWdlU2VsZWN0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8SW1hZ2VTZWxlY3RPcHRpb25cbiAgICAgICAgICBvcHRpb249e299XG4gICAgICAgICAgc2VsZWN0YWJsZU9wdGlvbnM9e3NlbGVjdGFibGVPcHRpb25zfVxuICAgICAgICAgIGZpZWxkT3B0aW9ucz17ZmllbGRPcHRpb25zfVxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlPXtzZWxsZXJQcm9kdWN0RWRpdGFibGV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge28udmFsdWU/LnRyaW0oKSB8fCAn4oCTJ31cbiAgICAgICAge2Zvcm1hdE9wdGlvbkNvc3QocHJvZHVjdCwgbywgc2VsbGVyUHJvZHVjdEVkaXRhYmxlKSB8fCAnJ31cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDEgJiYgIWlzVHVybmFyb3VuZFRpbWUgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tcm93Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUgbGlzdC11bnN0eWxlZCBtLTAnPlxuICAgICAgICAgICAge3NlbGVjdGVkT3B0aW9ucy5tYXAoKG86IGFueSwgaTogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgIDxsaSBrZXk9e2Ake2l9LW9wdGlvbi1rZXktJHtvLm9wdGlvbklkID8/IGl9YH0+XG4gICAgICAgICAgICAgICAge3JlbmRlck9wdGlvbkxhYmVsKG8pfVxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogZmlyc3RPcHRpb24gPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tcm93Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXZhbHVlJz5cbiAgICAgICAgICAgIHtyZW5kZXJPcHRpb25MYWJlbChmaXJzdE9wdGlvbil9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1yb3cnPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tbGFiZWwnPntuYW1lfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUnPi08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBWYXJpYXRpb25zSW5mbyh7IHByb2R1Y3QsIHF1YW50aXR5LCB2YXJpYXRpb25zID0gW10gfTogYW55KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbnMnPlxuICAgICAge3ZhcmlhdGlvbnMubWFwKCh2OiBhbnksIGk6IG51bWJlcikgPT5cbiAgICAgICAgIWlzSW5zdHJ1Y3Rpb25zVHlwZSh2LnZhcmlhdGlvbkZpZWxkLmZpZWxkVHlwZSkgPyAoXG4gICAgICAgICAgPFZhcmlhdGlvbkluZm9cbiAgICAgICAgICAgIHF1YW50aXR5PXtxdWFudGl0eX1cbiAgICAgICAgICAgIHZhcmlhdGlvbj17dn1cbiAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGxcbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFZhcmlhdGlvbkdyb3VwSW5mbyh7XG4gIGdyb3VwLFxuICBpbmRleCxcbiAgcHJvZHVjdCxcbiAgc2hvd1NldHVwT25Vbml0UHJpY2UsXG59OiBhbnkpIHtcbiAgY29uc3QgaXNSZXNlbGwgPSBpc1Byb2R1Y3RTdXBwbGllck1PRChwcm9kdWN0KTtcbiAgY29uc3QgeyBxdWFudGl0eSwgdmFyaWF0aW9ucyB9ID0gZ3JvdXA7XG4gIGNvbnN0IHZpc2libGVWYXJpYXRpb25zID0gKHZhcmlhdGlvbnMgPz8gW10pLmZpbHRlcihcbiAgICAodjogYW55KSA9PiAhaXNJbnN0cnVjdGlvbnNUeXBlKHY/LnZhcmlhdGlvbkZpZWxkPy5maWVsZFR5cGUpXG4gICk7XG4gIGNvbnN0IGNvc3RMYWJlbCA9IGlzUmVzZWxsID8gJ1VuaXQgQ29zdCcgOiAnR3JvdXAgQ29zdCc7XG4gIGNvbnN0IHVuaXRQcmljZVZhbHVlID0gc2hvd1NldHVwT25Vbml0UHJpY2VcbiAgICA/IGZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cChwcm9kdWN0KVxuICAgIDogZm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdD8udW5pdFByaWNlKSB8fCAwKTtcblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktZ3JvdXAnPlxuICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LW9yZGVyLWRldGFpbC10aXRsZSc+XG4gICAgICAgIEdyb3VwIHtpbmRleCArIDF9IEluZm9ybWF0aW9uXG4gICAgICA8L3N0cm9uZz5cbiAgICAgIHshaXNSZXNlbGwgJiYgcXVhbnRpdHkgPiAwICYmIChcbiAgICAgICAgPFN1bW1hcnlGaWVsZFJvdyBsYWJlbD0nUXVhbnRpdHknIHZhbHVlPXtxdWFudGl0eX0gLz5cbiAgICAgICl9XG4gICAgICA8U3VtbWFyeUZpZWxkUm93IGxhYmVsPSdVbml0IFByaWNlJyB2YWx1ZT17dW5pdFByaWNlVmFsdWV9IC8+XG4gICAgICB7dmlzaWJsZVZhcmlhdGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxWYXJpYXRpb25zSW5mb1xuICAgICAgICAgIHF1YW50aXR5PXtxdWFudGl0eX1cbiAgICAgICAgICB2YXJpYXRpb25zPXt2YXJpYXRpb25zfVxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWdyb3VwLWNvc3QnPlxuICAgICAgICB7Y29zdExhYmVsfToge2Zvcm1hdENvc3QocHJvZHVjdCwgZ3JvdXAuZ3JvdXBDb3N0KX1cbiAgICAgIDwvc3Ryb25nPlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSm9iSW5mb0NvbnRlbnQoKSB7XG4gIGNvbnN0IHsgam9iIH0gPSB1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0KCk7XG4gIGNvbnN0IHsgcHJvZHVjdCwgcXVhbnRpdHkgPSAwLCB2YXJpYXRpb25zID0gW10sIHZhcmlhdGlvbnNHcm91cHMgPSBbXSB9ID0gam9iO1xuICBjb25zdCB7IG5lZWRzU2hpcHBpbmcgfSA9IHByb2R1Y3Q7XG4gIGNvbnN0IHRvdGFsQ29zdCA9IGN1cnJlbmN5VG90YWxDb3N0U2hvd0luY1RheChqb2IpO1xuICBjb25zdCBpc1Jlc2VsbCA9IGlzUHJvZHVjdFN1cHBsaWVyTU9EKHByb2R1Y3QpO1xuICBjb25zdCBoYXNHcm91cHMgPSB2YXJpYXRpb25zR3JvdXBzLmxlbmd0aCA+IDA7XG4gIGNvbnN0IGpvYkxldmVsVmFyaWF0aW9ucyA9ICh2YXJpYXRpb25zID8/IFtdKS5maWx0ZXIoXG4gICAgKHY6IGFueSkgPT4gIWlzSW5zdHJ1Y3Rpb25zVHlwZSh2Py52YXJpYXRpb25GaWVsZD8uZmllbGRUeXBlKVxuICApO1xuICBjb25zdCB0b3RhbFF1YW50aXR5ID0gaGFzR3JvdXBzXG4gICAgPyB2YXJpYXRpb25zR3JvdXBzLnJlZHVjZShcbiAgICAgICAgKHN1bTogbnVtYmVyLCBnOiBhbnkpID0+IHN1bSArIChOdW1iZXIoZy5xdWFudGl0eSkgfHwgMCksXG4gICAgICAgIDBcbiAgICAgIClcbiAgICA6IE51bWJlcihxdWFudGl0eSkgfHwgMDtcbiAgY29uc3Qgc2V0dXBQZXJHcm91cCA9IEJvb2xlYW4ocHJvZHVjdD8uc2V0dXBQZXJHcm91cCk7XG4gIGNvbnN0IGhhc1NldHVwUHJpY2UgPSBOdW1iZXIocHJvZHVjdD8uc2V0dXBQcmljZSkgPiAwO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLW1lcmNoaS1jaGVja291dC1qb2ItaW5mby1jb250ZW50IG1lcmNoaS1jaGVja291dC1zdW1tYXJ5Jz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1zZWN0aW9uLXRpdGxlJz57cHJvZHVjdC5uYW1lfTwvZGl2PlxuICAgICAge2hhc0dyb3VwcyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1ncm91cHMnPlxuICAgICAgICAgIHt2YXJpYXRpb25zR3JvdXBzLm1hcCgoZzogYW55LCBpOiBudW1iZXIpID0+XG4gICAgICAgICAgICBnLnF1YW50aXR5ID8gKFxuICAgICAgICAgICAgICA8VmFyaWF0aW9uR3JvdXBJbmZvXG4gICAgICAgICAgICAgICAgZ3JvdXA9e2d9XG4gICAgICAgICAgICAgICAga2V5PXtgJHtpfS1qb2ItaW5mby1jb250ZW50YH1cbiAgICAgICAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxuICAgICAgICAgICAgICAgIHNob3dTZXR1cE9uVW5pdFByaWNlPXtzZXR1cFBlckdyb3VwfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7IWhhc0dyb3VwcyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1zdGFuZGFsb25lJz5cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktb3JkZXItZGV0YWlsLXRpdGxlJz5cbiAgICAgICAgICAgIE9yZGVyIEluZm9ybWF0aW9uXG4gICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAge3F1YW50aXR5ID4gMCAmJiAoXG4gICAgICAgICAgICA8U3VtbWFyeUZpZWxkUm93IGxhYmVsPSdRdWFudGl0eScgdmFsdWU9e3F1YW50aXR5fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPFN1bW1hcnlGaWVsZFJvd1xuICAgICAgICAgICAgbGFiZWw9J1VuaXQgUHJpY2UnXG4gICAgICAgICAgICB2YWx1ZT17Zm9ybWF0VW5pdFByaWNlV2l0aFNldHVwKHByb2R1Y3QpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2pvYkxldmVsVmFyaWF0aW9ucy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxWYXJpYXRpb25zSW5mb1xuICAgICAgICAgICAgICBxdWFudGl0eT17cXVhbnRpdHl9XG4gICAgICAgICAgICAgIHZhcmlhdGlvbnM9e3ZhcmlhdGlvbnN9XG4gICAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtoYXNHcm91cHMgJiYgam9iTGV2ZWxWYXJpYXRpb25zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktc3RhbmRhbG9uZSc+XG4gICAgICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LW9yZGVyLWRldGFpbC10aXRsZSc+XG4gICAgICAgICAgICBPcmRlciBJbmZvcm1hdGlvblxuICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgIDxWYXJpYXRpb25zSW5mb1xuICAgICAgICAgICAgcXVhbnRpdHk9e3F1YW50aXR5fVxuICAgICAgICAgICAgdmFyaWF0aW9ucz17dmFyaWF0aW9uc31cbiAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgeyFpc1Jlc2VsbCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS10b3RhbCc+XG4gICAgICAgICAge3RvdGFsUXVhbnRpdHkgPiAwICYmIChcbiAgICAgICAgICAgIDxTdW1tYXJ5QW1vdW50Um93XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdG90YWwtcXVhbnRpdHknXG4gICAgICAgICAgICAgIGxhYmVsPSdUb3RhbCBRdWFudGl0eSdcbiAgICAgICAgICAgICAgYW1vdW50PXt0b3RhbFF1YW50aXR5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoYXNHcm91cHMgJiYgaGFzU2V0dXBQcmljZSAmJiAhc2V0dXBQZXJHcm91cCAmJiAoXG4gICAgICAgICAgICA8U3VtbWFyeUFtb3VudFJvd1xuICAgICAgICAgICAgICBsYWJlbD0nU2V0dXAnXG4gICAgICAgICAgICAgIGFtb3VudD17Zm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdC5zZXR1cFByaWNlKSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPFN1bW1hcnlBbW91bnRSb3dcbiAgICAgICAgICAgIGxhYmVsPSdUb3RhbCBPcmRlciBDb3N0J1xuICAgICAgICAgICAgbGFiZWxFeHRyYT17XG4gICAgICAgICAgICAgIG5lZWRzU2hpcHBpbmcgPyAoXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdG90YWwtbm90ZSc+IGV4IFNoaXBtZW50PC9zbWFsbD5cbiAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW1vdW50PXt0b3RhbENvc3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgeyEhKGlzUmVzZWxsICYmICFoYXNHcm91cHMpICYmIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWItMCc+XG4gICAgICAgICAgICB7aXNSZXNlbGwgPyAnQXBwcm94aW1hdGUgVW5pdCcgOiAnVG90YWwnfSBDb3N0XG4gICAgICAgICAgPC9zdHJvbmc+eycgJ31cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWItMCBkLWJsb2NrJz57dG90YWxDb3N0fTwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7O0FBQ1osT0FBT0EsS0FBSyxNQUFNLE9BQU87QUFDekIsU0FBU0MsU0FBUyxRQUFRLGdCQUFnQjtBQUMxQyxTQUFTQyxjQUFjLEVBQUVDLDJCQUEyQixRQUFRLFlBQVk7QUFDeEUsU0FDRUMsa0JBQWtCLEVBQ2xCQyxvQkFBb0IsRUFDcEJDLFlBQVksRUFDWkMsU0FBUyxRQUNKLFVBQVU7QUFDakIsU0FBU0MseUJBQXlCLFFBQVEsMEJBQTBCO0FBQ3BFLFNBQ0VDLGdCQUFnQixFQUNoQkMsZUFBZSxRQUNWLHlCQUF5QjtBQUFDLFNBQUFDLEdBQUEsSUFBQUMsSUFBQTtBQUFBLFNBQUFDLElBQUEsSUFBQUMsS0FBQTtBQUFBLFNBQUFDLFFBQUEsSUFBQUMsU0FBQTtBQUVqQyxTQUFTQyxVQUFVQSxD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
685
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsImFyciIsImkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibyIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwibiIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbiIsImxlbmd0aCIsImFycjIiLCJyIiwibCIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsImUiLCJ1IiwiYSIsImYiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJSZWFjdCIsInVzZVN0YXRlIiwiRmFGaWxlUGRmIiwiRmFSZWdJbWFnZSIsImZvcm1hdEN1cnJlbmN5IiwiY3VycmVuY3lUb3RhbENvc3RTaG93SW5jVGF4IiwiaXNJbnN0cnVjdGlvbnNUeXBlIiwiaXNQcm9kdWN0U3VwcGxpZXJNT0QiLCJpc1NlbGVjdGFibGUiLCJGaWVsZFR5cGUiLCJlc3RpbWF0ZUFyZWFDb3N0cyIsImZvcm1hdEFyZWFTdW1tYXJ5IiwibG9jYWxlUHJlZmVyc0ltcGVyaWFsIiwidXNlTWVyY2hpQ2hlY2tib3V0Q29udGV4dCIsIlN1bW1hcnlBbW91bnRSb3ciLCJTdW1tYXJ5RmllbGRSb3ciLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJmb3JtYXRDb3N0IiwicHJvZHVjdCIsImNvc3QiLCJjdXJyZW5jeSIsInNob3dDb2RlSWZOb1N5bWJvbCIsInBhcnNlQ29zdEFtb3VudCIsImFtb3VudCIsInBhcnNlRmxvYXQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImZvcm1hdE9uY2VPZmZVbml0Q29zdERldGFpbCIsIm9uY2VPZmZDb3N0IiwidW5pdENvc3QiLCJwYXJ0cyIsIm9uY2VPZmYiLCJ1bml0IiwiY29uY2F0Iiwiam9pbiIsIm9wdGlvbk9uY2VPZmYiLCJvcHRpb24iLCJ2YXJpYXRpb25Db3N0Iiwib3B0aW9uVW5pdCIsInZhcmlhdGlvblVuaXRDb3N0IiwicHJvZHVjdFNldHVwU3VmZml4Iiwic2V0dXBQcmljZSIsImxhYmVsIiwic2V0dXBQZXJHcm91cCIsImZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cCIsInVuaXRQcmljZSIsImlzUGRmIiwiZmlsZSIsIm1pbWV0eXBlIiwiaXNJbWFnZUZpbGUiLCJzdGFydHNXaXRoIiwidG9Mb3dlckNhc2UiLCJhYnNvbHV0aXplRmlsZVVybCIsInJhdyIsInVybEFwaSIsInVybCIsInRyaW0iLCJiYXNlIiwiVVJMIiwib3JpZ2luIiwiaHJlZiIsIl91bnVzZWQiLCJyZXNvbHZlRmlsZVVybCIsInZpZXdVcmwiLCJkb3dubG9hZFVybCIsIm9wdGlvbkltYWdlVXJsIiwiX29wdGlvbiRsaW5rZWRGaWxlIiwiX29wdGlvbiRsaW5rZWRGaWxlMiIsImxpbmtlZEZpbGUiLCJmaW5kTWF0Y2hpbmdPcHRpb24iLCJvcHRpb25zIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZmluZCIsIlN0cmluZyIsIm9wdGlvbklkIiwicmVzb2x2ZU9wdGlvbkNvbG91ciIsIl9vcHRpb24kY29sb3VyIiwiX2ZpbmRNYXRjaGluZ09wdGlvbiIsIl9maW5kTWF0Y2hpbmdPcHRpb24yIiwic2VsZWN0YWJsZU9wdGlvbnMiLCJmaWVsZE9wdGlvbnMiLCJkaXJlY3QiLCJjb2xvdXIiLCJmcm9tU2VsZWN0YWJsZSIsInJlc29sdmVPcHRpb25JbWFnZVVybCIsImZvcm1hdE9wdGlvbkNvc3QiLCJzZWxsZXJQcm9kdWN0RWRpdGFibGUiLCJvbmNlT2ZmVW5pdCIsInRvdGFsQ29zdCIsInZhcmlhdGlvbkNvc3REZXRhaWwiLCJ2YXJpYXRpb24iLCJfdmFyaWF0aW9uJG9uY2VPZmZDb3MiLCJfdmFyaWF0aW9uJHVuaXRDb3N0IiwiX3JlZiIsIl9yZWYkaW5jbHVkZVNlbGVjdGVkTyIsImluY2x1ZGVTZWxlY3RlZE9wdGlvbkNvc3RzIiwiX3JlZiRmaWVsZENvc3RzT25seSIsImZpZWxkQ29zdHNPbmx5IiwiZmllbGQiLCJ2YXJpYXRpb25GaWVsZCIsImZpZWxkVHlwZSIsIkFSRUEiLCJhcmVhQ29zdHMiLCJzZWxlY3RlZCIsInNlbGVjdGVkT3B0aW9ucyIsImZpZWxkT25jZSIsIkNPTE9VUl9FWFRSQUNUIiwiZmllbGRVbml0IiwicmVkdWNlIiwic3VtIiwiVmFyaWF0aW9uRmlsZVByZXZpZXciLCJfcmVmMiIsImZpbGVVcmwiLCJmaWxlTmFtZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJpbWFnZUZhaWxlZCIsInNldEltYWdlRmFpbGVkIiwiY2xhc3NOYW1lIiwidGFyZ2V0IiwicmVsIiwidGl0bGUiLCJjaGlsZHJlbiIsInNyYyIsImFsdCIsIm9uRXJyb3IiLCJWYXJpYXRpb25JbmZvQm9keSIsIl9yZWYzIiwiY29zdERldGFpbCIsImZpbGVzIiwidHlwZSIsImlzQ29sb3VyUGlja2VyIiwiQ09MT1VSX1BJQ0tFUiIsImlzRmlsZVVwbG9hZCIsIkZJTEVfVVBMT0FEIiwiaGFzRmlsZXMiLCJCb29sZWFuIiwiZGlzcGxheVZhbHVlIiwibWFwIiwiaW5kZXgiLCJpZCIsInN0eWxlIiwiYmFja2dyb3VuZENvbG9yIiwiVmFyaWF0aW9uSW5mbyIsIl9yZWY0IiwiX3VzZU1lcmNoaUNoZWNrYm91dENvIiwidmFyaWF0aW9uRmlsZXMiLCJfdmFyaWF0aW9uRmllbGQkb3B0aW8iLCJpc1ZhcmlhdGlvblNlbGVjdGFibGUiLCJpc1R1cm5hcm91bmRUaW1lIiwiVFVSTkFST1VORF9USU1FIiwiaXNDb2xvdXJFeHRyYWN0IiwidXNlU2VsZWN0YWJsZURpc3BsYXkiLCJWYXJpYXRpb25PcHRpb25zSW5mb0JvZHkiLCJhcmVhVW5pdCIsIkNvbG91clNlbGVjdE9wdGlvbiIsIl9yZWY1IiwiX29wdGlvbiR2YWx1ZSIsImhleCIsIkltYWdlU2VsZWN0T3B0aW9uIiwiX3JlZjYiLCJfb3B0aW9uJHZhbHVlMiIsIl91c2VNZXJjaGlDaGVja2JvdXRDbzIiLCJpbWFnZVVybCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZ2V0T3B0aW9uSWQiLCJfb3B0aW9uJG9wdGlvbklkIiwicmVzb2x2ZVR1cm5hcm91bmRTZWxlY3RlZE9wdGlvbiIsIl92YXJpYXRpb24kc2VsZWN0ZWRPcCIsInZhbHVlU3RyIiwicG9vbHMiLCJfaSIsIl9wb29scyIsInBvb2wiLCJieUlkIiwiYnlWYWx1ZSIsIl9vJHZhbHVlIiwiZm9ybWF0VHVybmFyb3VuZERlYWRsaW5lIiwidXNlckRlYWRsaW5lIiwic2Vjb25kcyIsIkRhdGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJ3ZWVrZGF5IiwieWVhciIsIm1vbnRoIiwiZGF5IiwiVHVybmFyb3VuZE9wdGlvbkxhYmVsIiwiX3JlZjciLCJfb3B0aW9uJHZhbHVlMyIsIl9vcHRpb24kdmFsdWU0IiwiZGF5cyIsInBhcnNlSW50IiwiZGVhZGxpbmUiLCJzaGlwcGluZ1RpbWVJbmNsdWRlZCIsImRlYWRsaW5lTGFiZWwiLCJfcmVmOCIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsIl9yZWY4JHNlbGVjdGFibGVPcHRpbyIsIl9yZWY4JGZpZWxkT3B0aW9ucyIsImZpcnN0T3B0aW9uIiwiaXNDb2xvdXJTZWxlY3QiLCJDT0xPVVJfU0VMRUNUIiwiaXNJbWFnZVNlbGVjdCIsIklNQUdFX1NFTEVDVCIsInJlbmRlck9wdGlvbkxhYmVsIiwiX28kdmFsdWUyIiwiX28kb3B0aW9uSWQiLCJWYXJpYXRpb25zSW5mbyIsIl9yZWY5IiwicXVhbnRpdHkiLCJfcmVmOSR2YXJpYXRpb25zIiwidmFyaWF0aW9ucyIsInYiLCJWYXJpYXRpb25Hcm91cEluZm8iLCJfcmVmMTAiLCJncm91cCIsInNob3dTZXR1cE9uVW5pdFByaWNlIiwiaXNSZXNlbGwiLCJ2aXNpYmxlVmFyaWF0aW9ucyIsImZpbHRlciIsIl92JHZhcmlhdGlvbkZpZWxkIiwiY29zdExhYmVsIiwidW5pdFByaWNlVmFsdWUiLCJncm91cENvc3QiLCJKb2JJbmZvQ29udGVudCIsIl91c2VNZXJjaGlDaGVja2JvdXRDbzMiLCJqb2IiLCJfam9iJHF1YW50aXR5IiwiX2pvYiR2YXJpYXRpb25zIiwiX2pvYiR2YXJpYXRpb25zR3JvdXBzIiwidmFyaWF0aW9uc0dyb3VwcyIsIm5lZWRzU2hpcHBpbmciLCJoYXNHcm91cHMiLCJqb2JMZXZlbFZhcmlhdGlvbnMiLCJfdiR2YXJpYXRpb25GaWVsZDIiLCJ0b3RhbFF1YW50aXR5IiwiZyIsImhhc1NldHVwUHJpY2UiLCJsYWJlbEV4dHJhIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvSm9iSW5mb0NvbnRlbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZhRmlsZVBkZiwgRmFSZWdJbWFnZSB9IGZyb20gJ3JlYWN0LWljb25zL2ZhJztcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5LCBjdXJyZW5jeVRvdGFsQ29zdFNob3dJbmNUYXggfSBmcm9tICcuL2N1cnJlbmN5JztcbmltcG9ydCB7XG4gIGlzSW5zdHJ1Y3Rpb25zVHlwZSxcbiAgaXNQcm9kdWN0U3VwcGxpZXJNT0QsXG4gIGlzU2VsZWN0YWJsZSxcbiAgRmllbGRUeXBlLFxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBlc3RpbWF0ZUFyZWFDb3N0cyxcbiAgZm9ybWF0QXJlYVN1bW1hcnksXG4gIGxvY2FsZVByZWZlcnNJbXBlcmlhbCxcbn0gZnJvbSAnLi4vYXJlYSc7XG5pbXBvcnQgeyB1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0IH0gZnJvbSAnLi9NZXJjaGlDaGVja291dFByb3ZpZGVyJztcbmltcG9ydCB7XG4gIFN1bW1hcnlBbW91bnRSb3csXG4gIFN1bW1hcnlGaWVsZFJvdyxcbn0gZnJvbSAnLi9DaGVja291dFN1bW1hcnlGaWVsZHMnO1xuXG5mdW5jdGlvbiBmb3JtYXRDb3N0KHByb2R1Y3Q6IGFueSwgY29zdDogbnVtYmVyKSB7XG4gIGNvbnN0IGN1cnJlbmN5ID0gcHJvZHVjdC5jdXJyZW5jeSA/IHByb2R1Y3QuY3VycmVuY3kgOiAnQVVEJztcbiAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KGNvc3QsIHtcbiAgICBjdXJyZW5jeSxcbiAgICBzaG93Q29kZUlmTm9TeW1ib2w6IGZhbHNlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb3N0QW1vdW50KHZhbHVlOiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBhbW91bnQgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShhbW91bnQpICYmIGFtb3VudCA+IDAgPyBhbW91bnQgOiAwO1xufVxuXG4vKiogTWF0Y2ggcHJvZHVjdC1mb3JtIHdvcmRpbmc6IFwiKyAkWCBvbmNlIG9mZlwiIC8gXCIrICRZIHBlciB1bml0XCIuICovXG5mdW5jdGlvbiBmb3JtYXRPbmNlT2ZmVW5pdENvc3REZXRhaWwoXG4gIHByb2R1Y3Q6IGFueSxcbiAgb25jZU9mZkNvc3Q6IGFueSxcbiAgdW5pdENvc3Q6IGFueVxuKSB7XG4gIGNvbnN0IGN1cnJlbmN5ID0gcHJvZHVjdD8uY3VycmVuY3kgfHwgJ0FVRCc7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBvbmNlT2ZmID0gcGFyc2VDb3N0QW1vdW50KG9uY2VPZmZDb3N0KTtcbiAgY29uc3QgdW5pdCA9IHBhcnNlQ29zdEFtb3VudCh1bml0Q29zdCk7XG4gIGlmIChvbmNlT2ZmKSB7XG4gICAgcGFydHMucHVzaChcbiAgICAgIGAgKyAke2Zvcm1hdEN1cnJlbmN5KG9uY2VPZmYsIHsgY3VycmVuY3ksIHNob3dDb2RlSWZOb1N5bWJvbDogZmFsc2UgfSl9IG9uY2Ugb2ZmYFxuICAgICk7XG4gIH1cbiAgaWYgKHVuaXQpIHtcbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgYCArICR7Zm9ybWF0Q3VycmVuY3kodW5pdCwgeyBjdXJyZW5jeSwgc2hvd0NvZGVJZk5vU3ltYm9sOiBmYWxzZSB9KX0gcGVyIHVuaXRgXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFydHMuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIG9wdGlvbk9uY2VPZmYob3B0aW9uOiBhbnkpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIHBhcnNlQ29zdEFtb3VudChvcHRpb24/Lm9uY2VPZmZDb3N0KSB8fFxuICAgIHBhcnNlQ29zdEFtb3VudChvcHRpb24/LnZhcmlhdGlvbkNvc3QpIHx8XG4gICAgMFxuICApO1xufVxuXG5mdW5jdGlvbiBvcHRpb25Vbml0KG9wdGlvbjogYW55KTogbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICBwYXJzZUNvc3RBbW91bnQob3B0aW9uPy51bml0Q29zdCkgfHxcbiAgICBwYXJzZUNvc3RBbW91bnQob3B0aW9uPy52YXJpYXRpb25Vbml0Q29zdCkgfHxcbiAgICAwXG4gICk7XG59XG5cbi8qKiBQcm9kdWN0IHNldHVwIGZlZSBzaG93biBuZXh0IHRvIHVuaXQgcHJpY2UsIG1hdGNoaW5nIHByb2R1Y3QtZm9ybSB3b3JkaW5nLiAqL1xuZnVuY3Rpb24gcHJvZHVjdFNldHVwU3VmZml4KHByb2R1Y3Q6IGFueSkge1xuICBjb25zdCBzZXR1cFByaWNlID0gTnVtYmVyKHByb2R1Y3Q/LnNldHVwUHJpY2UpO1xuICBpZiAoIXNldHVwUHJpY2UpIHJldHVybiAnJztcbiAgY29uc3QgbGFiZWwgPSBwcm9kdWN0LnNldHVwUGVyR3JvdXAgPyAnc2V0dXAgcGVyIGdyb3VwJyA6ICdzZXR1cCc7XG4gIHJldHVybiBgICsgJHtmb3JtYXRDb3N0KHByb2R1Y3QsIHNldHVwUHJpY2UpfSAke2xhYmVsfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cChwcm9kdWN0OiBhbnkpIHtcbiAgcmV0dXJuIGAke2Zvcm1hdENvc3QocHJvZHVjdCwgTnVtYmVyKHByb2R1Y3Q/LnVuaXRQcmljZSkgfHwgMCl9JHtwcm9kdWN0U2V0dXBTdWZmaXgocHJvZHVjdCl9YDtcbn1cblxuZnVuY3Rpb24gaXNQZGYoZmlsZTogYW55KSB7XG4gIGNvbnN0IG1pbWV0eXBlID0gZmlsZT8ubWltZXR5cGUgfHwgJyc7XG4gIHJldHVybiBtaW1ldHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgbWltZXR5cGUgPT09ICdhcHBsaWNhdGlvbi94LXBkZic7XG59XG5cbmZ1bmN0aW9uIGlzSW1hZ2VGaWxlKGZpbGU6IGFueSkge1xuICBjb25zdCBtaW1ldHlwZSA9IGZpbGU/Lm1pbWV0eXBlIHx8ICcnO1xuICBpZiAobWltZXR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHJldHVybiB0cnVlO1xuICBjb25zdCBuYW1lID0gKGZpbGU/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAvXFwuKGpwZT9nfHBuZ3xnaWZ8d2VicHxzdmd8Ym1wKSQvLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIGFic29sdXRpemVGaWxlVXJsKHJhdzogc3RyaW5nLCB1cmxBcGk/OiBzdHJpbmcpIHtcbiAgY29uc3QgdXJsID0gKHJhdyB8fCAnJykudHJpbSgpO1xuICBpZiAoIXVybCB8fCB1cmwgPT09ICd1bmRlZmluZWQnIHx8IHVybCA9PT0gJ251bGwnKSByZXR1cm4gJyc7XG4gIGlmICgvXihodHRwcz86fGJsb2I6fGRhdGE6KS9pLnRlc3QodXJsKSkgcmV0dXJuIHVybDtcbiAgaWYgKCF1cmxBcGkpIHJldHVybiB1cmw7XG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZSA9IG5ldyBVUkwodXJsQXBpKTtcbiAgICByZXR1cm4gbmV3IFVSTCh1cmwsIGAke2Jhc2Uub3JpZ2lufS9gKS5ocmVmO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVGaWxlVXJsKGZpbGU6IGFueSwgdXJsQXBpPzogc3RyaW5nKSB7XG4gIHJldHVybiBhYnNvbHV0aXplRmlsZVVybChcbiAgICBmaWxlPy52aWV3VXJsIHx8IGZpbGU/LmRvd25sb2FkVXJsIHx8ICcnLFxuICAgIHVybEFwaVxuICApO1xufVxuXG5mdW5jdGlvbiBvcHRpb25JbWFnZVVybChvcHRpb246IGFueSwgdXJsQXBpPzogc3RyaW5nKSB7XG4gIHJldHVybiBhYnNvbHV0aXplRmlsZVVybChcbiAgICBvcHRpb24/LmxpbmtlZEZpbGU/LnZpZXdVcmwgfHwgb3B0aW9uPy5saW5rZWRGaWxlPy5kb3dubG9hZFVybCB8fCAnJyxcbiAgICB1cmxBcGlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoaW5nT3B0aW9uKG9wdGlvbjogYW55LCBvcHRpb25zOiBhbnlbXSA9IFtdKSB7XG4gIHJldHVybiBvcHRpb25zLmZpbmQoKG8pID0+IFN0cmluZyhvLm9wdGlvbklkKSA9PT0gU3RyaW5nKG9wdGlvbj8ub3B0aW9uSWQpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU9wdGlvbkNvbG91cihcbiAgb3B0aW9uOiBhbnksXG4gIHNlbGVjdGFibGVPcHRpb25zOiBhbnlbXSA9IFtdLFxuICBmaWVsZE9wdGlvbnM6IGFueVtdID0gW11cbikge1xuICBjb25zdCBkaXJlY3QgPSBvcHRpb24/LmNvbG91cj8udHJpbSgpO1xuICBpZiAoZGlyZWN0KSByZXR1cm4gZGlyZWN0O1xuICBjb25zdCBmcm9tU2VsZWN0YWJsZSA9IGZpbmRNYXRjaGluZ09wdGlvbihvcHRpb24sIHNlbGVjdGFibGVPcHRpb25zKT8uY29sb3VyPy50cmltKCk7XG4gIGlmIChmcm9tU2VsZWN0YWJsZSkgcmV0dXJuIGZyb21TZWxlY3RhYmxlO1xuICByZXR1cm4gZmluZE1hdGNoaW5nT3B0aW9uKG9wdGlvbiwgZmllbGRPcHRpb25zKT8uY29sb3VyPy50cmltKCkgfHwgJyc7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVPcHRpb25JbWFnZVVybChcbiAgb3B0aW9uOiBhbnksXG4gIHNlbGVjdGFibGVPcHRpb25zOiBhbnlbXSA9IFtdLFxuICBmaWVsZE9wdGlvbnM6IGFueVtdID0gW10sXG4gIHVybEFwaT86IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGRpcmVjdCA9IG9wdGlvbkltYWdlVXJsKG9wdGlvbiwgdXJsQXBpKTtcbiAgaWYgKGRpcmVjdCkgcmV0dXJuIGRpcmVjdDtcbiAgY29uc3QgZnJvbVNlbGVjdGFibGUgPSBvcHRpb25JbWFnZVVybChcbiAgICBmaW5kTWF0Y2hpbmdPcHRpb24ob3B0aW9uLCBzZWxlY3RhYmxlT3B0aW9ucyksXG4gICAgdXJsQXBpXG4gICk7XG4gIGlmIChmcm9tU2VsZWN0YWJsZSkgcmV0dXJuIGZyb21TZWxlY3RhYmxlO1xuICByZXR1cm4gb3B0aW9uSW1hZ2VVcmwoZmluZE1hdGNoaW5nT3B0aW9uKG9wdGlvbiwgZmllbGRPcHRpb25zKSwgdXJsQXBpKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0T3B0aW9uQ29zdChcbiAgcHJvZHVjdDogYW55LFxuICBvcHRpb246IGFueSxcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlOiBib29sZWFuXG4pIHtcbiAgaWYgKHNlbGxlclByb2R1Y3RFZGl0YWJsZSB8fCAhb3B0aW9uKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qgb25jZU9mZlVuaXQgPSBmb3JtYXRPbmNlT2ZmVW5pdENvc3REZXRhaWwoXG4gICAgcHJvZHVjdCxcbiAgICBvcHRpb25PbmNlT2ZmKG9wdGlvbiksXG4gICAgb3B0aW9uVW5pdChvcHRpb24pXG4gICk7XG4gIGlmIChvbmNlT2ZmVW5pdCkgcmV0dXJuIG9uY2VPZmZVbml0O1xuICBpZiAob3B0aW9uLnRvdGFsQ29zdCkge1xuICAgIHJldHVybiBgICsgJHtmb3JtYXRDb3N0KHByb2R1Y3QsIG9wdGlvbi50b3RhbENvc3QpfWA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHZhcmlhdGlvbkNvc3REZXRhaWwoXG4gIHByb2R1Y3Q6IGFueSxcbiAgdmFyaWF0aW9uOiBhbnksXG4gIHNlbGxlclByb2R1Y3RFZGl0YWJsZTogYm9vbGVhbixcbiAge1xuICAgIGluY2x1ZGVTZWxlY3RlZE9wdGlvbkNvc3RzID0gdHJ1ZSxcbiAgICBmaWVsZENvc3RzT25seSA9IGZhbHNlLFxuICB9OiB7XG4gICAgaW5jbHVkZVNlbGVjdGVkT3B0aW9uQ29zdHM/OiBib29sZWFuO1xuICAgIGZpZWxkQ29zdHNPbmx5PzogYm9vbGVhbjtcbiAgfSA9IHt9XG4pIHtcbiAgaWYgKHNlbGxlclByb2R1Y3RFZGl0YWJsZSkgcmV0dXJuICcnO1xuXG4gIGNvbnN0IGZpZWxkID0gdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZCB8fCB7fTtcbiAgY29uc3QgZmllbGRUeXBlID0gTnVtYmVyKGZpZWxkLmZpZWxkVHlwZSk7XG5cbiAgaWYgKGZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkFSRUEpIHtcbiAgICBjb25zdCBhcmVhQ29zdHMgPSBlc3RpbWF0ZUFyZWFDb3N0cyhmaWVsZCwgdmFyaWF0aW9uPy52YWx1ZSk7XG4gICAgaWYgKGFyZWFDb3N0cykge1xuICAgICAgcmV0dXJuIGZvcm1hdE9uY2VPZmZVbml0Q29zdERldGFpbChcbiAgICAgICAgcHJvZHVjdCxcbiAgICAgICAgYXJlYUNvc3RzLm9uY2VPZmZDb3N0LFxuICAgICAgICBhcmVhQ29zdHMudW5pdENvc3RcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZpZWxkQ29zdHNPbmx5KSB7XG4gICAgcmV0dXJuIGZvcm1hdE9uY2VPZmZVbml0Q29zdERldGFpbChcbiAgICAgIHByb2R1Y3QsXG4gICAgICBmaWVsZC52YXJpYXRpb25Db3N0LFxuICAgICAgZmllbGQudmFyaWF0aW9uVW5pdENvc3RcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSBBcnJheS5pc0FycmF5KHZhcmlhdGlvbj8uc2VsZWN0ZWRPcHRpb25zKVxuICAgID8gdmFyaWF0aW9uLnNlbGVjdGVkT3B0aW9uc1xuICAgIDogW107XG4gIGlmIChpbmNsdWRlU2VsZWN0ZWRPcHRpb25Db3N0cyAmJiBzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICBjb25zdCBmaWVsZE9uY2UgPVxuICAgICAgZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQ09MT1VSX0VYVFJBQ1RcbiAgICAgICAgPyBwYXJzZUNvc3RBbW91bnQoZmllbGQudmFyaWF0aW9uQ29zdClcbiAgICAgICAgOiAwO1xuICAgIGNvbnN0IGZpZWxkVW5pdCA9XG4gICAgICBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfRVhUUkFDVFxuICAgICAgICA/IHBhcnNlQ29zdEFtb3VudChmaWVsZC52YXJpYXRpb25Vbml0Q29zdClcbiAgICAgICAgOiAwO1xuICAgIHJldHVybiBmb3JtYXRPbmNlT2ZmVW5pdENvc3REZXRhaWwoXG4gICAgICBwcm9kdWN0LFxuICAgICAgZmllbGRPbmNlICtcbiAgICAgICAgc2VsZWN0ZWQucmVkdWNlKFxuICAgICAgICAgIChzdW06IG51bWJlciwgb3B0aW9uOiBhbnkpID0+IHN1bSArIG9wdGlvbk9uY2VPZmYob3B0aW9uKSxcbiAgICAgICAgICAwXG4gICAgICAgICksXG4gICAgICBmaWVsZFVuaXQgK1xuICAgICAgICBzZWxlY3RlZC5yZWR1Y2UoXG4gICAgICAgICAgKHN1bTogbnVtYmVyLCBvcHRpb246IGFueSkgPT4gc3VtICsgb3B0aW9uVW5pdChvcHRpb24pLFxuICAgICAgICAgIDBcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBvbmNlT2ZmVW5pdCA9IGZvcm1hdE9uY2VPZmZVbml0Q29zdERldGFpbChcbiAgICBwcm9kdWN0LFxuICAgIHZhcmlhdGlvbj8ub25jZU9mZkNvc3QgPz8gZmllbGQudmFyaWF0aW9uQ29zdCxcbiAgICB2YXJpYXRpb24/LnVuaXRDb3N0ID8/IGZpZWxkLnZhcmlhdGlvblVuaXRDb3N0XG4gICk7XG4gIGlmIChvbmNlT2ZmVW5pdCkgcmV0dXJuIG9uY2VPZmZVbml0O1xuICBpZiAodmFyaWF0aW9uPy5jb3N0KSB7XG4gICAgcmV0dXJuIGAgKyAke2Zvcm1hdENvc3QocHJvZHVjdCwgdmFyaWF0aW9uLmNvc3QpfWA7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBWYXJpYXRpb25GaWxlUHJldmlldyh7XG4gIGZpbGUsXG4gIHVybEFwaSxcbn06IHtcbiAgZmlsZTogYW55O1xuICB1cmxBcGk/OiBzdHJpbmc7XG59KSB7XG4gIGNvbnN0IGZpbGVVcmwgPSByZXNvbHZlRmlsZVVybChmaWxlLCB1cmxBcGkpO1xuICBjb25zdCBmaWxlTmFtZSA9IGZpbGU/Lm5hbWUgfHwgJ0ZpbGUnO1xuICBjb25zdCBbaW1hZ2VGYWlsZWQsIHNldEltYWdlRmFpbGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBpZiAoaXNQZGYoZmlsZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGFcbiAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1maWxlLWxpbmsnXG4gICAgICAgIGhyZWY9e2ZpbGVVcmwgfHwgdW5kZWZpbmVkfVxuICAgICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgICAgcmVsPSdub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgICB0aXRsZT17ZmlsZU5hbWV9XG4gICAgICA+XG4gICAgICAgIDxGYUZpbGVQZGYgYXJpYS1oaWRkZW4gLz5cbiAgICAgICAgPHNwYW4+e2ZpbGVOYW1lfTwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICApO1xuICB9XG5cbiAgaWYgKGlzSW1hZ2VGaWxlKGZpbGUpICYmIGZpbGVVcmwgJiYgIWltYWdlRmFpbGVkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxpbWdcbiAgICAgICAgY2xhc3NOYW1lPSdtb2RhbC1tZXJjaGktY2hlY2tvdXQtam9iLWluZm8tY29udGVudC1pbWcnXG4gICAgICAgIHNyYz17ZmlsZVVybH1cbiAgICAgICAgYWx0PXtmaWxlTmFtZX1cbiAgICAgICAgdGl0bGU9e2ZpbGVOYW1lfVxuICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRJbWFnZUZhaWxlZCh0cnVlKX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc0ltYWdlRmlsZShmaWxlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWZpbGUtZmFsbGJhY2snXG4gICAgICAgIHRpdGxlPXtmaWxlTmFtZX1cbiAgICAgID5cbiAgICAgICAgPEZhUmVnSW1hZ2UgYXJpYS1oaWRkZW4gLz5cbiAgICAgICAgPHNwYW4+e2ZpbGVOYW1lfTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG5cbiAgaWYgKGZpbGVVcmwpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGFcbiAgICAgICAgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1maWxlLWxpbmsnXG4gICAgICAgIGhyZWY9e2ZpbGVVcmx9XG4gICAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgICByZWw9J25vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICAgIHRpdGxlPXtmaWxlTmFtZX1cbiAgICAgID5cbiAgICAgICAge2ZpbGVOYW1lfVxuICAgICAgPC9hPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gPHNwYW4+e2ZpbGVOYW1lfTwvc3Bhbj47XG59XG5cbmZ1bmN0aW9uIFZhcmlhdGlvbkluZm9Cb2R5KHtcbiAgY29zdERldGFpbCxcbiAgbmFtZSxcbiAgcHJvZHVjdCxcbiAgdmFsdWUsXG4gIGZpbGVzLFxuICB0eXBlLFxuICB1cmxBcGksXG59OiBhbnkpIHtcbiAgY29uc3QgaXNDb2xvdXJQaWNrZXIgPSB0eXBlID09PSBGaWVsZFR5cGUuQ09MT1VSX1BJQ0tFUjtcbiAgY29uc3QgaXNGaWxlVXBsb2FkID1cbiAgICB0eXBlID09PSBGaWVsZFR5cGUuRklMRV9VUExPQUQgfHwgdHlwZSA9PT0gRmllbGRUeXBlLkNPTE9VUl9FWFRSQUNUO1xuICBjb25zdCBoYXNGaWxlcyA9IEJvb2xlYW4oZmlsZXM/Lmxlbmd0aCk7XG4gIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGlzQ29sb3VyUGlja2VyIHx8IChpc0ZpbGVVcGxvYWQgJiYgaGFzRmlsZXMpID8gbnVsbCA6IHZhbHVlO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1yb3cnPlxuICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1sYWJlbCc+e25hbWV9PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXZhbHVlJz5cbiAgICAgICAge2hhc0ZpbGVzICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktZmlsZS1wcmV2aWV3cyc+XG4gICAgICAgICAgICB7ZmlsZXMubWFwKChmaWxlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgPFZhcmlhdGlvbkZpbGVQcmV2aWV3XG4gICAgICAgICAgICAgICAga2V5PXtmaWxlLnZpZXdVcmwgfHwgZmlsZS5pZCB8fCBgJHtuYW1lfS1maWxlLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBmaWxlPXtmaWxlfVxuICAgICAgICAgICAgICAgIHVybEFwaT17dXJsQXBpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtpc0NvbG91clBpY2tlciAmJiB2YWx1ZSAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWNvbG91ci12YWx1ZSc+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IHZhbHVlIH19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT0nY29sb3ItaW5kaWNhdG9yJ1xuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPnt2YWx1ZX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtkaXNwbGF5VmFsdWUgJiYgZGlzcGxheVZhbHVlfVxuICAgICAgICB7Y29zdERldGFpbCB8fCAnJ31cbiAgICAgICAgeyFoYXNGaWxlcyAmJiAhdmFsdWUgJiYgIWNvc3REZXRhaWwgJiYgJy0nfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFZhcmlhdGlvbkluZm8oeyBwcm9kdWN0LCB2YXJpYXRpb24gfTogYW55KSB7XG4gIGNvbnN0IHsgdXJsQXBpIH0gPSB1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0KCk7XG4gIGNvbnN0IHsgc2VsZWN0ZWRPcHRpb25zLCB2YXJpYXRpb25GaWVsZCwgdmFyaWF0aW9uRmlsZXMsIHNlbGVjdGFibGVPcHRpb25zIH0gPVxuICAgIHZhcmlhdGlvbjtcbiAgY29uc3QgeyBmaWVsZFR5cGUsIHNlbGxlclByb2R1Y3RFZGl0YWJsZSwgb3B0aW9uczogZmllbGRPcHRpb25zID0gW10gfSA9XG4gICAgdmFyaWF0aW9uRmllbGQ7XG4gIGNvbnN0IGlzVmFyaWF0aW9uU2VsZWN0YWJsZSA9IGlzU2VsZWN0YWJsZShmaWVsZFR5cGUpO1xuICBjb25zdCBpc1R1cm5hcm91bmRUaW1lID0gZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVFVSTkFST1VORF9USU1FO1xuICBjb25zdCBpc0NvbG91ckV4dHJhY3QgPSBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfRVhUUkFDVDtcbiAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdGVkT3B0aW9ucztcbiAgY29uc3QgdXNlU2VsZWN0YWJsZURpc3BsYXkgPVxuICAgIGlzVmFyaWF0aW9uU2VsZWN0YWJsZSAmJlxuICAgIChCb29sZWFuKG9wdGlvbnM/Lmxlbmd0aCkgfHwgKGlzVHVybmFyb3VuZFRpbWUgJiYgdmFyaWF0aW9uLnZhbHVlKSk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbic+XG4gICAgICB7aXNDb2xvdXJFeHRyYWN0ID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxWYXJpYXRpb25JbmZvQm9keVxuICAgICAgICAgICAgbmFtZT17dmFyaWF0aW9uRmllbGQubmFtZX1cbiAgICAgICAgICAgIHR5cGU9e2ZpZWxkVHlwZX1cbiAgICAgICAgICAgIHZhbHVlPXtudWxsfVxuICAgICAgICAgICAgZmlsZXM9e3ZhcmlhdGlvbkZpbGVzfVxuICAgICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cbiAgICAgICAgICAgIHVybEFwaT17dXJsQXBpfVxuICAgICAgICAgICAgY29zdERldGFpbD17dmFyaWF0aW9uQ29zdERldGFpbChcbiAgICAgICAgICAgICAgcHJvZHVjdCxcbiAgICAgICAgICAgICAgdmFyaWF0aW9uLFxuICAgICAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGUsXG4gICAgICAgICAgICAgIC8vIE9wdGlvbnMgbGlzdCBzaG93cyBlYWNoIGNvbG91ciBjb3N0OyBrZWVwIGZpZWxkIGJhc2UgY29zdCBoZXJlLlxuICAgICAgICAgICAgICBvcHRpb25zPy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IHsgZmllbGRDb3N0c09ubHk6IHRydWUgfVxuICAgICAgICAgICAgICAgIDogeyBpbmNsdWRlU2VsZWN0ZWRPcHRpb25Db3N0czogZmFsc2UgfVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtvcHRpb25zPy5sZW5ndGggPyAoXG4gICAgICAgICAgICA8VmFyaWF0aW9uT3B0aW9uc0luZm9Cb2R5XG4gICAgICAgICAgICAgIG5hbWU9e2Ake3ZhcmlhdGlvbkZpZWxkLm5hbWV9IGNvbG91cnNgfVxuICAgICAgICAgICAgICBmaWVsZFR5cGU9e2ZpZWxkVHlwZX1cbiAgICAgICAgICAgICAgdmFsdWU9e3ZhcmlhdGlvbi52YWx1ZX1cbiAgICAgICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICB2YXJpYXRpb249e3ZhcmlhdGlvbn1cbiAgICAgICAgICAgICAgc2VsZWN0YWJsZU9wdGlvbnM9e3NlbGVjdGFibGVPcHRpb25zfVxuICAgICAgICAgICAgICBmaWVsZE9wdGlvbnM9e2ZpZWxkT3B0aW9uc31cbiAgICAgICAgICAgICAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlPXtzZWxsZXJQcm9kdWN0RWRpdGFibGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICkgOiB1c2VTZWxlY3RhYmxlRGlzcGxheSA/IChcbiAgICAgICAgPFZhcmlhdGlvbk9wdGlvbnNJbmZvQm9keVxuICAgICAgICAgIG5hbWU9e3ZhcmlhdGlvbkZpZWxkLm5hbWV9XG4gICAgICAgICAgZmllbGRUeXBlPXtmaWVsZFR5cGV9XG4gICAgICAgICAgdmFsdWU9e3ZhcmlhdGlvbi52YWx1ZX1cbiAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxuICAgICAgICAgIGZpbGVzPXt2YXJpYXRpb25GaWxlc31cbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgdmFyaWF0aW9uPXt2YXJpYXRpb259XG4gICAgICAgICAgc2VsZWN0YWJsZU9wdGlvbnM9e3NlbGVjdGFibGVPcHRpb25zfVxuICAgICAgICAgIGZpZWxkT3B0aW9ucz17ZmllbGRPcHRpb25zfVxuICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZT17c2VsbGVyUHJvZHVjdEVkaXRhYmxlfVxuICAgICAgICAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPFZhcmlhdGlvbkluZm9Cb2R5XG4gICAgICAgICAgbmFtZT17dmFyaWF0aW9uRmllbGQubmFtZX1cbiAgICAgICAgICB0eXBlPXt2YXJpYXRpb25GaWVsZC5maWVsZFR5cGV9XG4gICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQVJFQSAmJiB2YXJpYXRpb24udmFsdWVcbiAgICAgICAgICAgICAgPyBmb3JtYXRBcmVhU3VtbWFyeShcbiAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIGxvY2FsZVByZWZlcnNJbXBlcmlhbCgpID8gJ2ltcGVyaWFsJyA6ICdtZXRyaWMnLFxuICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uRmllbGQuYXJlYVVuaXQgfHwgJ21tJ1xuICAgICAgICAgICAgICAgICkgfHwgdmFyaWF0aW9uLnZhbHVlXG4gICAgICAgICAgICAgIDogdmFyaWF0aW9uLnZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbGVzPXt2YXJpYXRpb25GaWxlc31cbiAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxuICAgICAgICAgIHVybEFwaT17dXJsQXBpfVxuICAgICAgICAgIGNvc3REZXRhaWw9e3ZhcmlhdGlvbkNvc3REZXRhaWwoXG4gICAgICAgICAgICBwcm9kdWN0LFxuICAgICAgICAgICAgdmFyaWF0aW9uLFxuICAgICAgICAgICAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxuICAgICAgICAgICAgeyBpbmNsdWRlU2VsZWN0ZWRPcHRpb25Db3N0czogZmFsc2UgfVxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBDb2xvdXJTZWxlY3RPcHRpb24oe1xuICBvcHRpb24sXG4gIHNlbGVjdGFibGVPcHRpb25zLFxuICBmaWVsZE9wdGlvbnMsXG4gIHByb2R1Y3QsXG4gIHNlbGxlclByb2R1Y3RFZGl0YWJsZSxcbn06IHtcbiAgb3B0aW9uOiBhbnk7XG4gIHNlbGVjdGFibGVPcHRpb25zPzogYW55W107XG4gIGZpZWxkT3B0aW9ucz86IGFueVtdO1xuICBwcm9kdWN0PzogYW55O1xuICBzZWxsZXJQcm9kdWN0RWRpdGFibGU/OiBib29sZWFuO1xufSkge1xuICBjb25zdCBsYWJlbCA9IG9wdGlvbj8udmFsdWU/LnRyaW0oKSB8fCAnJztcbiAgY29uc3QgaGV4ID0gcmVzb2x2ZU9wdGlvbkNvbG91cihvcHRpb24sIHNlbGVjdGFibGVPcHRpb25zLCBmaWVsZE9wdGlvbnMpO1xuICBjb25zdCBjb3N0ID0gZm9ybWF0T3B0aW9uQ29zdChcbiAgICBwcm9kdWN0LFxuICAgIG9wdGlvbixcbiAgICBCb29sZWFuKHNlbGxlclByb2R1Y3RFZGl0YWJsZSlcbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8c3BhbiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWNvbG91ci1vcHRpb24nPlxuICAgICAge2hleCAmJiAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBoZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9J2NvbG9yLWluZGljYXRvcidcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8c3Bhbj5cbiAgICAgICAge2xhYmVsIHx8IGhleCB8fCAn4oCTJ31cbiAgICAgICAge2Nvc3QgfHwgJyd9XG4gICAgICA8L3NwYW4+XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBJbWFnZVNlbGVjdE9wdGlvbih7XG4gIG9wdGlvbixcbiAgc2VsZWN0YWJsZU9wdGlvbnMsXG4gIGZpZWxkT3B0aW9ucyxcbiAgcHJvZHVjdCxcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxufToge1xuICBvcHRpb246IGFueTtcbiAgc2VsZWN0YWJsZU9wdGlvbnM/OiBhbnlbXTtcbiAgZmllbGRPcHRpb25zPzogYW55W107XG4gIHByb2R1Y3Q6IGFueTtcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlOiBib29sZWFuO1xufSkge1xuICBjb25zdCB7IHVybEFwaSB9ID0gdXNlTWVyY2hpQ2hlY2tib3V0Q29udGV4dCgpO1xuICBjb25zdCBpbWFnZVVybCA9IHJlc29sdmVPcHRpb25JbWFnZVVybChcbiAgICBvcHRpb24sXG4gICAgc2VsZWN0YWJsZU9wdGlvbnMsXG4gICAgZmllbGRPcHRpb25zLFxuICAgIHVybEFwaVxuICApO1xuICBjb25zdCBsYWJlbCA9IG9wdGlvbj8udmFsdWU/LnRyaW0oKSB8fCAnJztcbiAgY29uc3QgY29zdCA9IGZvcm1hdE9wdGlvbkNvc3QocHJvZHVjdCwgb3B0aW9uLCBzZWxsZXJQcm9kdWN0RWRpdGFibGUpO1xuICBjb25zdCBbaW1hZ2VGYWlsZWQsIHNldEltYWdlRmFpbGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktaW1hZ2Utc2VsZWN0LW9wdGlvbic+XG4gICAgICB7aW1hZ2VVcmwgJiYgIWltYWdlRmFpbGVkID8gKFxuICAgICAgICA8aW1nXG4gICAgICAgICAgY2xhc3NOYW1lPSdtb2RhbC1tZXJjaGktY2hlY2tvdXQtam9iLWluZm8tY29udGVudC1pbWcnXG4gICAgICAgICAgc3JjPXtpbWFnZVVybH1cbiAgICAgICAgICBhbHQ9e2xhYmVsIHx8ICdTZWxlY3RlZCBvcHRpb24nfVxuICAgICAgICAgIHRpdGxlPXtsYWJlbCB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0SW1hZ2VGYWlsZWQodHJ1ZSl9XG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxzcGFuPlxuICAgICAgICB7bGFiZWwgfHwgJ+KAkyd9XG4gICAgICAgIHtjb3N0IHx8ICcnfVxuICAgICAgPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3B0aW9uSWQob3B0aW9uOiBhbnkpIHtcbiAgcmV0dXJuIG9wdGlvbj8ub3B0aW9uSWQgPz8gb3B0aW9uPy5pZDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVR1cm5hcm91bmRTZWxlY3RlZE9wdGlvbihcbiAgdmFyaWF0aW9uOiBhbnksXG4gIHNlbGVjdGFibGVPcHRpb25zOiBhbnlbXSA9IFtdLFxuICBmaWVsZE9wdGlvbnM6IGFueVtdID0gW11cbikge1xuICBjb25zdCB7IHNlbGVjdGVkT3B0aW9ucyA9IFtdLCB2YWx1ZSB9ID0gdmFyaWF0aW9uO1xuICBpZiAoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zWzBdO1xuICB9XG4gIGNvbnN0IHZhbHVlU3RyID0gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycgPyBTdHJpbmcodmFsdWUpLnRyaW0oKSA6ICcnO1xuICBpZiAoIXZhbHVlU3RyKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBwb29scyA9IFtzZWxlY3RhYmxlT3B0aW9ucywgZmllbGRPcHRpb25zXTtcbiAgZm9yIChjb25zdCBwb29sIG9mIHBvb2xzKSB7XG4gICAgY29uc3QgYnlJZCA9IHBvb2wuZmluZChcbiAgICAgIChvOiBhbnkpID0+IFN0cmluZyhnZXRPcHRpb25JZChvKSkgPT09IHZhbHVlU3RyXG4gICAgKTtcbiAgICBpZiAoYnlJZCkgcmV0dXJuIGJ5SWQ7XG4gICAgY29uc3QgYnlWYWx1ZSA9IHBvb2wuZmluZChcbiAgICAgIChvOiBhbnkpID0+IFN0cmluZyhvLnZhbHVlID8/ICcnKSA9PT0gdmFsdWVTdHJcbiAgICApO1xuICAgIGlmIChieVZhbHVlKSByZXR1cm4gYnlWYWx1ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VHVybmFyb3VuZERlYWRsaW5lKHVzZXJEZWFkbGluZTogYW55KSB7XG4gIGlmICghdXNlckRlYWRsaW5lKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qgc2Vjb25kcyA9IE51bWJlcih1c2VyRGVhZGxpbmUpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShzZWNvbmRzKSB8fCBzZWNvbmRzIDw9IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gbmV3IERhdGUoc2Vjb25kcyAqIDEwMDApLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tQVUnLCB7XG4gICAgd2Vla2RheTogJ2xvbmcnLFxuICAgIHllYXI6ICdudW1lcmljJyxcbiAgICBtb250aDogJ2xvbmcnLFxuICAgIGRheTogJ251bWVyaWMnLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gVHVybmFyb3VuZE9wdGlvbkxhYmVsKHtcbiAgb3B0aW9uLFxuICB2YXJpYXRpb25GaWVsZCxcbiAgcHJvZHVjdCxcbiAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlLFxufToge1xuICBvcHRpb246IGFueTtcbiAgdmFyaWF0aW9uRmllbGQ6IGFueTtcbiAgcHJvZHVjdDogYW55O1xuICBzZWxsZXJQcm9kdWN0RWRpdGFibGU6IGJvb2xlYW47XG59KSB7XG4gIGNvbnN0IGRheXMgPSBwYXJzZUludChTdHJpbmcob3B0aW9uPy52YWx1ZSA/PyAnJyksIDEwKSB8fCAwO1xuICBjb25zdCBkZWFkbGluZSA9IGZvcm1hdFR1cm5hcm91bmREZWFkbGluZShvcHRpb24/LnVzZXJEZWFkbGluZSk7XG4gIGNvbnN0IHNoaXBwaW5nVGltZUluY2x1ZGVkID0gQm9vbGVhbih2YXJpYXRpb25GaWVsZD8uc2hpcHBpbmdUaW1lSW5jbHVkZWQpO1xuICBjb25zdCBkZWFkbGluZUxhYmVsID0gc2hpcHBpbmdUaW1lSW5jbHVkZWQgPyAnRGVsaXZlcnkgYnknIDogJ1Byb2R1Y2VkIGJ5JztcbiAgY29uc3QgY29zdCA9IGZvcm1hdE9wdGlvbkNvc3QocHJvZHVjdCwgb3B0aW9uLCBzZWxsZXJQcm9kdWN0RWRpdGFibGUpO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS10dXJuYXJvdW5kLXZhbHVlJz5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdHVybmFyb3VuZC1kYXlzJz5cbiAgICAgICAge2RheXMgPiAwXG4gICAgICAgICAgPyBgJHtkYXlzfSBidXNpbmVzcyBkYXkke2RheXMgIT09IDEgPyAncycgOiAnJ31gXG4gICAgICAgICAgOiAob3B0aW9uPy52YWx1ZT8udHJpbSgpIHx8ICfigJMnKX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHtkZWFkbGluZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdHVybmFyb3VuZC1kZWFkbGluZSc+XG4gICAgICAgICAge2RlYWRsaW5lTGFiZWx9IHtkZWFkbGluZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIHtjb3N0IHx8ICcnfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVmFyaWF0aW9uT3B0aW9uc0luZm9Cb2R5KHtcbiAgbmFtZSxcbiAgc2VsZWN0ZWRPcHRpb25zLFxuICBzZWxsZXJQcm9kdWN0RWRpdGFibGUsXG4gIHByb2R1Y3QsXG4gIGZpZWxkVHlwZSxcbiAgdmFyaWF0aW9uLFxuICBzZWxlY3RhYmxlT3B0aW9ucyA9IFtdLFxuICBmaWVsZE9wdGlvbnMgPSBbXSxcbn06IGFueSkge1xuICBjb25zdCBpc1R1cm5hcm91bmRUaW1lID0gZmllbGRUeXBlID09PSBGaWVsZFR5cGUuVFVSTkFST1VORF9USU1FO1xuICBjb25zdCBmaXJzdE9wdGlvbiA9IGlzVHVybmFyb3VuZFRpbWVcbiAgICA/IHJlc29sdmVUdXJuYXJvdW5kU2VsZWN0ZWRPcHRpb24oXG4gICAgICAgIHsgc2VsZWN0ZWRPcHRpb25zLCB2YWx1ZTogdmFyaWF0aW9uPy52YWx1ZSB9LFxuICAgICAgICBzZWxlY3RhYmxlT3B0aW9ucyxcbiAgICAgICAgZmllbGRPcHRpb25zXG4gICAgICApXG4gICAgOiBzZWxlY3RlZE9wdGlvbnNbMF07XG4gIGNvbnN0IGlzQ29sb3VyU2VsZWN0ID1cbiAgICBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5DT0xPVVJfU0VMRUNUIHx8XG4gICAgZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQ09MT1VSX0VYVFJBQ1Q7XG4gIGNvbnN0IGlzSW1hZ2VTZWxlY3QgPSBmaWVsZFR5cGUgPT09IEZpZWxkVHlwZS5JTUFHRV9TRUxFQ1Q7XG4gIGNvbnN0IHZhcmlhdGlvbkZpZWxkID0gdmFyaWF0aW9uPy52YXJpYXRpb25GaWVsZCA/PyB7fTtcblxuICBmdW5jdGlvbiByZW5kZXJPcHRpb25MYWJlbChvOiBhbnkpIHtcbiAgICBpZiAoaXNUdXJuYXJvdW5kVGltZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFR1cm5hcm91bmRPcHRpb25MYWJlbFxuICAgICAgICAgIG9wdGlvbj17b31cbiAgICAgICAgICB2YXJpYXRpb25GaWVsZD17dmFyaWF0aW9uRmllbGR9XG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cbiAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGU9e3NlbGxlclByb2R1Y3RFZGl0YWJsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0NvbG91clNlbGVjdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbG91clNlbGVjdE9wdGlvblxuICAgICAgICAgIG9wdGlvbj17b31cbiAgICAgICAgICBzZWxlY3RhYmxlT3B0aW9ucz17c2VsZWN0YWJsZU9wdGlvbnN9XG4gICAgICAgICAgZmllbGRPcHRpb25zPXtmaWVsZE9wdGlvbnN9XG4gICAgICAgICAgcHJvZHVjdD17cHJvZHVjdH1cbiAgICAgICAgICBzZWxsZXJQcm9kdWN0RWRpdGFibGU9e3NlbGxlclByb2R1Y3RFZGl0YWJsZX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0ltYWdlU2VsZWN0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8SW1hZ2VTZWxlY3RPcHRpb25cbiAgICAgICAgICBvcHRpb249e299XG4gICAgICAgICAgc2VsZWN0YWJsZU9wdGlvbnM9e3NlbGVjdGFibGVPcHRpb25zfVxuICAgICAgICAgIGZpZWxkT3B0aW9ucz17ZmllbGRPcHRpb25zfVxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgc2VsbGVyUHJvZHVjdEVkaXRhYmxlPXtzZWxsZXJQcm9kdWN0RWRpdGFibGV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge28udmFsdWU/LnRyaW0oKSB8fCAn4oCTJ31cbiAgICAgICAge2Zvcm1hdE9wdGlvbkNvc3QocHJvZHVjdCwgbywgc2VsbGVyUHJvZHVjdEVkaXRhYmxlKSB8fCAnJ31cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDEgJiYgIWlzVHVybmFyb3VuZFRpbWUgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tcm93Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUgbGlzdC11bnN0eWxlZCBtLTAnPlxuICAgICAgICAgICAge3NlbGVjdGVkT3B0aW9ucy5tYXAoKG86IGFueSwgaTogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgIDxsaSBrZXk9e2Ake2l9LW9wdGlvbi1rZXktJHtvLm9wdGlvbklkID8/IGl9YH0+XG4gICAgICAgICAgICAgICAge3JlbmRlck9wdGlvbkxhYmVsKG8pfVxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogZmlyc3RPcHRpb24gPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tcm93Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLWxhYmVsJz57bmFtZX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdmFyaWF0aW9uLXZhbHVlJz5cbiAgICAgICAgICAgIHtyZW5kZXJPcHRpb25MYWJlbChmaXJzdE9wdGlvbil9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbi1yb3cnPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tbGFiZWwnPntuYW1lfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS12YXJpYXRpb24tdmFsdWUnPi08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBWYXJpYXRpb25zSW5mbyh7IHByb2R1Y3QsIHF1YW50aXR5LCB2YXJpYXRpb25zID0gW10gfTogYW55KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LXZhcmlhdGlvbnMnPlxuICAgICAge3ZhcmlhdGlvbnMubWFwKCh2OiBhbnksIGk6IG51bWJlcikgPT5cbiAgICAgICAgIWlzSW5zdHJ1Y3Rpb25zVHlwZSh2LnZhcmlhdGlvbkZpZWxkLmZpZWxkVHlwZSkgPyAoXG4gICAgICAgICAgPFZhcmlhdGlvbkluZm9cbiAgICAgICAgICAgIHF1YW50aXR5PXtxdWFudGl0eX1cbiAgICAgICAgICAgIHZhcmlhdGlvbj17dn1cbiAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGxcbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFZhcmlhdGlvbkdyb3VwSW5mbyh7XG4gIGdyb3VwLFxuICBpbmRleCxcbiAgcHJvZHVjdCxcbiAgc2hvd1NldHVwT25Vbml0UHJpY2UsXG59OiBhbnkpIHtcbiAgY29uc3QgaXNSZXNlbGwgPSBpc1Byb2R1Y3RTdXBwbGllck1PRChwcm9kdWN0KTtcbiAgY29uc3QgeyBxdWFudGl0eSwgdmFyaWF0aW9ucyB9ID0gZ3JvdXA7XG4gIGNvbnN0IHZpc2libGVWYXJpYXRpb25zID0gKHZhcmlhdGlvbnMgPz8gW10pLmZpbHRlcihcbiAgICAodjogYW55KSA9PiAhaXNJbnN0cnVjdGlvbnNUeXBlKHY/LnZhcmlhdGlvbkZpZWxkPy5maWVsZFR5cGUpXG4gICk7XG4gIGNvbnN0IGNvc3RMYWJlbCA9IGlzUmVzZWxsID8gJ1VuaXQgQ29zdCcgOiAnR3JvdXAgQ29zdCc7XG4gIGNvbnN0IHVuaXRQcmljZVZhbHVlID0gc2hvd1NldHVwT25Vbml0UHJpY2VcbiAgICA/IGZvcm1hdFVuaXRQcmljZVdpdGhTZXR1cChwcm9kdWN0KVxuICAgIDogZm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdD8udW5pdFByaWNlKSB8fCAwKTtcblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktZ3JvdXAnPlxuICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LW9yZGVyLWRldGFpbC10aXRsZSc+XG4gICAgICAgIEdyb3VwIHtpbmRleCArIDF9IEluZm9ybWF0aW9uXG4gICAgICA8L3N0cm9uZz5cbiAgICAgIHshaXNSZXNlbGwgJiYgcXVhbnRpdHkgPiAwICYmIChcbiAgICAgICAgPFN1bW1hcnlGaWVsZFJvdyBsYWJlbD0nUXVhbnRpdHknIHZhbHVlPXtxdWFudGl0eX0gLz5cbiAgICAgICl9XG4gICAgICA8U3VtbWFyeUZpZWxkUm93IGxhYmVsPSdVbml0IFByaWNlJyB2YWx1ZT17dW5pdFByaWNlVmFsdWV9IC8+XG4gICAgICB7dmlzaWJsZVZhcmlhdGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxWYXJpYXRpb25zSW5mb1xuICAgICAgICAgIHF1YW50aXR5PXtxdWFudGl0eX1cbiAgICAgICAgICB2YXJpYXRpb25zPXt2YXJpYXRpb25zfVxuICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LWdyb3VwLWNvc3QnPlxuICAgICAgICB7Y29zdExhYmVsfToge2Zvcm1hdENvc3QocHJvZHVjdCwgZ3JvdXAuZ3JvdXBDb3N0KX1cbiAgICAgIDwvc3Ryb25nPlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSm9iSW5mb0NvbnRlbnQoKSB7XG4gIGNvbnN0IHsgam9iIH0gPSB1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0KCk7XG4gIGNvbnN0IHsgcHJvZHVjdCwgcXVhbnRpdHkgPSAwLCB2YXJpYXRpb25zID0gW10sIHZhcmlhdGlvbnNHcm91cHMgPSBbXSB9ID0gam9iO1xuICBjb25zdCB7IG5lZWRzU2hpcHBpbmcgfSA9IHByb2R1Y3Q7XG4gIGNvbnN0IHRvdGFsQ29zdCA9IGN1cnJlbmN5VG90YWxDb3N0U2hvd0luY1RheChqb2IpO1xuICBjb25zdCBpc1Jlc2VsbCA9IGlzUHJvZHVjdFN1cHBsaWVyTU9EKHByb2R1Y3QpO1xuICBjb25zdCBoYXNHcm91cHMgPSB2YXJpYXRpb25zR3JvdXBzLmxlbmd0aCA+IDA7XG4gIGNvbnN0IGpvYkxldmVsVmFyaWF0aW9ucyA9ICh2YXJpYXRpb25zID8/IFtdKS5maWx0ZXIoXG4gICAgKHY6IGFueSkgPT4gIWlzSW5zdHJ1Y3Rpb25zVHlwZSh2Py52YXJpYXRpb25GaWVsZD8uZmllbGRUeXBlKVxuICApO1xuICBjb25zdCB0b3RhbFF1YW50aXR5ID0gaGFzR3JvdXBzXG4gICAgPyB2YXJpYXRpb25zR3JvdXBzLnJlZHVjZShcbiAgICAgICAgKHN1bTogbnVtYmVyLCBnOiBhbnkpID0+IHN1bSArIChOdW1iZXIoZy5xdWFudGl0eSkgfHwgMCksXG4gICAgICAgIDBcbiAgICAgIClcbiAgICA6IE51bWJlcihxdWFudGl0eSkgfHwgMDtcbiAgY29uc3Qgc2V0dXBQZXJHcm91cCA9IEJvb2xlYW4ocHJvZHVjdD8uc2V0dXBQZXJHcm91cCk7XG4gIGNvbnN0IGhhc1NldHVwUHJpY2UgPSBOdW1iZXIocHJvZHVjdD8uc2V0dXBQcmljZSkgPiAwO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J21vZGFsLW1lcmNoaS1jaGVja291dC1qb2ItaW5mby1jb250ZW50IG1lcmNoaS1jaGVja291dC1zdW1tYXJ5Jz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1zZWN0aW9uLXRpdGxlJz57cHJvZHVjdC5uYW1lfTwvZGl2PlxuICAgICAge2hhc0dyb3VwcyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1ncm91cHMnPlxuICAgICAgICAgIHt2YXJpYXRpb25zR3JvdXBzLm1hcCgoZzogYW55LCBpOiBudW1iZXIpID0+XG4gICAgICAgICAgICBnLnF1YW50aXR5ID8gKFxuICAgICAgICAgICAgICA8VmFyaWF0aW9uR3JvdXBJbmZvXG4gICAgICAgICAgICAgICAgZ3JvdXA9e2d9XG4gICAgICAgICAgICAgICAga2V5PXtgJHtpfS1qb2ItaW5mby1jb250ZW50YH1cbiAgICAgICAgICAgICAgICBpbmRleD17aX1cbiAgICAgICAgICAgICAgICBwcm9kdWN0PXtwcm9kdWN0fVxuICAgICAgICAgICAgICAgIHNob3dTZXR1cE9uVW5pdFByaWNlPXtzZXR1cFBlckdyb3VwfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7IWhhc0dyb3VwcyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS1zdGFuZGFsb25lJz5cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktb3JkZXItZGV0YWlsLXRpdGxlJz5cbiAgICAgICAgICAgIE9yZGVyIEluZm9ybWF0aW9uXG4gICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAge3F1YW50aXR5ID4gMCAmJiAoXG4gICAgICAgICAgICA8U3VtbWFyeUZpZWxkUm93IGxhYmVsPSdRdWFudGl0eScgdmFsdWU9e3F1YW50aXR5fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPFN1bW1hcnlGaWVsZFJvd1xuICAgICAgICAgICAgbGFiZWw9J1VuaXQgUHJpY2UnXG4gICAgICAgICAgICB2YWx1ZT17Zm9ybWF0VW5pdFByaWNlV2l0aFNldHVwKHByb2R1Y3QpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2pvYkxldmVsVmFyaWF0aW9ucy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxWYXJpYXRpb25zSW5mb1xuICAgICAgICAgICAgICBxdWFudGl0eT17cXVhbnRpdHl9XG4gICAgICAgICAgICAgIHZhcmlhdGlvbnM9e3ZhcmlhdGlvbnN9XG4gICAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtoYXNHcm91cHMgJiYgam9iTGV2ZWxWYXJpYXRpb25zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktc3RhbmRhbG9uZSc+XG4gICAgICAgICAgPHN0cm9uZyBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1zdW1tYXJ5LW9yZGVyLWRldGFpbC10aXRsZSc+XG4gICAgICAgICAgICBPcmRlciBJbmZvcm1hdGlvblxuICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgIDxWYXJpYXRpb25zSW5mb1xuICAgICAgICAgICAgcXVhbnRpdHk9e3F1YW50aXR5fVxuICAgICAgICAgICAgdmFyaWF0aW9ucz17dmFyaWF0aW9uc31cbiAgICAgICAgICAgIHByb2R1Y3Q9e3Byb2R1Y3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgeyFpc1Jlc2VsbCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtc3VtbWFyeS10b3RhbCc+XG4gICAgICAgICAge3RvdGFsUXVhbnRpdHkgPiAwICYmIChcbiAgICAgICAgICAgIDxTdW1tYXJ5QW1vdW50Um93XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdG90YWwtcXVhbnRpdHknXG4gICAgICAgICAgICAgIGxhYmVsPSdUb3RhbCBRdWFudGl0eSdcbiAgICAgICAgICAgICAgYW1vdW50PXt0b3RhbFF1YW50aXR5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoYXNHcm91cHMgJiYgaGFzU2V0dXBQcmljZSAmJiAhc2V0dXBQZXJHcm91cCAmJiAoXG4gICAgICAgICAgICA8U3VtbWFyeUFtb3VudFJvd1xuICAgICAgICAgICAgICBsYWJlbD0nU2V0dXAnXG4gICAgICAgICAgICAgIGFtb3VudD17Zm9ybWF0Q29zdChwcm9kdWN0LCBOdW1iZXIocHJvZHVjdC5zZXR1cFByaWNlKSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPFN1bW1hcnlBbW91bnRSb3dcbiAgICAgICAgICAgIGxhYmVsPSdUb3RhbCBPcmRlciBDb3N0J1xuICAgICAgICAgICAgbGFiZWxFeHRyYT17XG4gICAgICAgICAgICAgIG5lZWRzU2hpcHBpbmcgPyAoXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LXN1bW1hcnktdG90YWwtbm90ZSc+IGV4IFNoaXBtZW50PC9zbWFsbD5cbiAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW1vdW50PXt0b3RhbENvc3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgeyEhKGlzUmVzZWxsICYmICFoYXNHcm91cHMpICYmIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWItMCc+XG4gICAgICAgICAgICB7aXNSZXNlbGwgPyAnQXBwcm94aW1hdGUgVW5pdCcgOiAnVG90YWwnfSBDb3N0XG4gICAgICAgICAgPC9zdHJvbmc+eycgJ31cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzTmFtZT0nbWItMCBkLWJsb2NrJz57dG90YWxDb3N0fTwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7O0FBQUMsU0FBQUEsZUFBQUMsR0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsR0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxHQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosR0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBRyxDQUFBLEVBQUFDLE1BQUEsU0FBQUQsQ0FBQSxxQkFBQUEsQ0FBQSxzQkFBQUUsaUJBQUEsQ0FBQUYsQ0FBQSxFQUFBQyxNQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLENBQUFDLFFBQUEsQ0FBQUMsSUFBQSxDQUFBUCxDQUFBLEVBQUFRLEtB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