@merchi/checkout 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +196 -0
  2. package/lib/actions/confirm.d.ts +2 -0
  3. package/lib/actions/confirm.js +85 -0
  4. package/lib/actions/customer.d.ts +2 -0
  5. package/lib/actions/customer.js +53 -0
  6. package/lib/actions/domain.d.ts +2 -0
  7. package/lib/actions/domain.js +65 -0
  8. package/lib/actions/files.d.ts +1 -0
  9. package/lib/actions/files.js +35 -0
  10. package/lib/actions/helpers.d.ts +19 -0
  11. package/lib/actions/helpers.js +125 -0
  12. package/lib/actions/invoice.d.ts +3 -0
  13. package/lib/actions/invoice.js +113 -0
  14. package/lib/area.d.ts +77 -0
  15. package/lib/area.js +298 -0
  16. package/lib/assets/merchi-monster-loader.gif +0 -0
  17. package/lib/checkoutSession.d.ts +32 -0
  18. package/lib/checkoutSession.js +151 -0
  19. package/lib/components/Alerts.d.ts +3 -0
  20. package/lib/components/Alerts.js +88 -0
  21. package/lib/components/CancelOrderConfirmModal.d.ts +10 -0
  22. package/lib/components/CancelOrderConfirmModal.js +50 -0
  23. package/lib/components/CheckoutSummaryFields.d.ts +11 -0
  24. package/lib/components/CheckoutSummaryFields.js +38 -0
  25. package/lib/components/Collapse.d.ts +3 -0
  26. package/lib/components/Collapse.js +34 -0
  27. package/lib/components/CustomerCheckoutMethodTabs.d.ts +6 -0
  28. package/lib/components/CustomerCheckoutMethodTabs.js +90 -0
  29. package/lib/components/DiscountInputGroup.d.ts +2 -0
  30. package/lib/components/DiscountInputGroup.js +256 -0
  31. package/lib/components/DraftImageUploaded.d.ts +8 -0
  32. package/lib/components/DraftImageUploaded.js +53 -0
  33. package/lib/components/FooterButtons.d.ts +11 -0
  34. package/lib/components/FooterButtons.js +28 -0
  35. package/lib/components/InvoiceInfo.d.ts +6 -0
  36. package/lib/components/InvoiceInfo.js +37 -0
  37. package/lib/components/JobInfoContent.d.ts +2 -0
  38. package/lib/components/JobInfoContent.js +728 -0
  39. package/lib/components/MerchiCheckout.d.ts +46 -0
  40. package/lib/components/MerchiCheckout.js +49 -0
  41. package/lib/components/MerchiCheckoutProvider.d.ts +167 -0
  42. package/lib/components/MerchiCheckoutProvider.js +569 -0
  43. package/lib/components/MerchiCheckoutTabs.d.ts +2 -0
  44. package/lib/components/MerchiCheckoutTabs.js +50 -0
  45. package/lib/components/TabPane.d.ts +7 -0
  46. package/lib/components/TabPane.js +21 -0
  47. package/lib/components/TabPaneAddress.d.ts +3 -0
  48. package/lib/components/TabPaneAddress.js +28 -0
  49. package/lib/components/TabPaneConfirm.d.ts +11 -0
  50. package/lib/components/TabPaneConfirm.js +288 -0
  51. package/lib/components/TabPaneContainer.d.ts +6 -0
  52. package/lib/components/TabPaneContainer.js +13 -0
  53. package/lib/components/TabPaneCustomer.d.ts +5 -0
  54. package/lib/components/TabPaneCustomer.js +93 -0
  55. package/lib/components/TabPaneNewDomain.d.ts +3 -0
  56. package/lib/components/TabPaneNewDomain.js +39 -0
  57. package/lib/components/TabPanePayment.d.ts +3 -0
  58. package/lib/components/TabPanePayment.js +99 -0
  59. package/lib/components/TabPaneSubmitted.d.ts +3 -0
  60. package/lib/components/TabPaneSubmitted.js +90 -0
  61. package/lib/components/TitleStep.d.ts +6 -0
  62. package/lib/components/TitleStep.js +24 -0
  63. package/lib/components/buttons/ButtonInvoiceDownload.d.ts +3 -0
  64. package/lib/components/buttons/ButtonInvoiceDownload.js +91 -0
  65. package/lib/components/buttons/ButtonNext.d.ts +10 -0
  66. package/lib/components/buttons/ButtonNext.js +48 -0
  67. package/lib/components/buttons/ButtonPrevious.d.ts +7 -0
  68. package/lib/components/buttons/ButtonPrevious.js +36 -0
  69. package/lib/components/buttons/index.d.ts +3 -0
  70. package/lib/components/buttons/index.js +4 -0
  71. package/lib/components/currency.d.ts +5 -0
  72. package/lib/components/currency.js +223 -0
  73. package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.d.ts +7 -0
  74. package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.js +22 -0
  75. package/lib/components/forms/FormAddresses.d.ts +6 -0
  76. package/lib/components/forms/FormAddresses.js +251 -0
  77. package/lib/components/forms/FormCustomerNew.d.ts +4 -0
  78. package/lib/components/forms/FormCustomerNew.js +197 -0
  79. package/lib/components/forms/FormCustomerReturning.d.ts +3 -0
  80. package/lib/components/forms/FormCustomerReturning.js +147 -0
  81. package/lib/components/forms/FormDomainNew.d.ts +2 -0
  82. package/lib/components/forms/FormDomainNew.js +152 -0
  83. package/lib/components/forms/FormWhatsappCustomer.d.ts +4 -0
  84. package/lib/components/forms/FormWhatsappCustomer.js +217 -0
  85. package/lib/components/forms/InputAcceptUserTermsAndConditions.d.ts +7 -0
  86. package/lib/components/forms/InputAcceptUserTermsAndConditions.js +38 -0
  87. package/lib/components/forms/InputCheckStoreName.d.ts +7 -0
  88. package/lib/components/forms/InputCheckStoreName.js +168 -0
  89. package/lib/components/forms/InputError.d.ts +8 -0
  90. package/lib/components/forms/InputError.js +19 -0
  91. package/lib/components/forms/InputFileUpload.d.ts +12 -0
  92. package/lib/components/forms/InputFileUpload.js +191 -0
  93. package/lib/components/forms/InputSelect.d.ts +14 -0
  94. package/lib/components/forms/InputSelect.js +52 -0
  95. package/lib/components/forms/InputText.d.ts +12 -0
  96. package/lib/components/forms/InputText.js +59 -0
  97. package/lib/components/forms/InputsAddress.d.ts +12 -0
  98. package/lib/components/forms/InputsAddress.js +533 -0
  99. package/lib/components/forms/index.d.ts +5 -0
  100. package/lib/components/forms/index.js +6 -0
  101. package/lib/components/lists/ListShipmentQuoteOptions.d.ts +9 -0
  102. package/lib/components/lists/ListShipmentQuoteOptions.js +145 -0
  103. package/lib/components/lists/index.d.ts +2 -0
  104. package/lib/components/lists/index.js +3 -0
  105. package/lib/fonts/nunito-bold-webfont.woff +0 -0
  106. package/lib/fonts/nunito-bold-webfont.woff2 +0 -0
  107. package/lib/fonts/nunito-regular-webfont.woff +0 -0
  108. package/lib/fonts/nunito-regular-webfont.woff2 +0 -0
  109. package/lib/index.d.ts +3 -0
  110. package/lib/index.js +4 -0
  111. package/lib/merchi_source.d.ts +2 -0
  112. package/lib/merchi_source.js +31 -0
  113. package/lib/styles/globals.css +2546 -0
  114. package/lib/styles/globals.css.map +1 -0
  115. package/lib/styles/globals.scss +2763 -0
  116. package/lib/tabs_utils.d.ts +31 -0
  117. package/lib/tabs_utils.js +104 -0
  118. package/lib/types.d.ts +43 -0
  119. package/lib/types.js +40 -0
  120. package/lib/utils.d.ts +68 -0
  121. package/lib/utils.js +560 -0
  122. package/package.json +96 -0
package/lib/utils.js ADDED
@@ -0,0 +1,560 @@
1
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
2
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
3
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
4
+ import { ProductType, Role } from './types';
5
+ export var isoCountries = {
6
+ AF: "Afghanistan",
7
+ AX: "Aland Islands",
8
+ AL: "Albania",
9
+ DZ: "Algeria",
10
+ AS: "American Samoa",
11
+ AD: "Andorra",
12
+ AO: "Angola",
13
+ AI: "Anguilla",
14
+ AQ: "Antarctica",
15
+ AG: "Antigua And Barbuda",
16
+ AR: "Argentina",
17
+ AM: "Armenia",
18
+ AW: "Aruba",
19
+ AU: "Australia",
20
+ AT: "Austria",
21
+ AZ: "Azerbaijan",
22
+ BS: "Bahamas",
23
+ BH: "Bahrain",
24
+ BD: "Bangladesh",
25
+ BB: "Barbados",
26
+ BY: "Belarus",
27
+ BE: "Belgium",
28
+ BZ: "Belize",
29
+ BJ: "Benin",
30
+ BM: "Bermuda",
31
+ BT: "Bhutan",
32
+ BO: "Bolivia",
33
+ BA: "Bosnia And Herzegovina",
34
+ BW: "Botswana",
35
+ BV: "Bouvet Island",
36
+ BR: "Brazil",
37
+ IO: "British Indian Ocean Territory",
38
+ BN: "Brunei Darussalam",
39
+ BG: "Bulgaria",
40
+ BF: "Burkina Faso",
41
+ BI: "Burundi",
42
+ KH: "Cambodia",
43
+ CM: "Cameroon",
44
+ CA: "Canada",
45
+ CV: "Cape Verde",
46
+ KY: "Cayman Islands",
47
+ CF: "Central African Republic",
48
+ TD: "Chad",
49
+ CL: "Chile",
50
+ CN: "China",
51
+ CX: "Christmas Island",
52
+ CC: "Cocos (Keeling) Islands",
53
+ CO: "Colombia",
54
+ KM: "Comoros",
55
+ CG: "Congo",
56
+ CD: "Congo, Democratic Republic",
57
+ CK: "Cook Islands",
58
+ CR: "Costa Rica",
59
+ CI: "Cote D'Ivoire",
60
+ HR: "Croatia",
61
+ CU: "Cuba",
62
+ CY: "Cyprus",
63
+ CZ: "Czech Republic",
64
+ DK: "Denmark",
65
+ DJ: "Djibouti",
66
+ DM: "Dominica",
67
+ DO: "Dominican Republic",
68
+ EC: "Ecuador",
69
+ EG: "Egypt",
70
+ SV: "El Salvador",
71
+ GQ: "Equatorial Guinea",
72
+ ER: "Eritrea",
73
+ EE: "Estonia",
74
+ ET: "Ethiopia",
75
+ FK: "Falkland Islands (Malvinas)",
76
+ FO: "Faroe Islands",
77
+ FJ: "Fiji",
78
+ FI: "Finland",
79
+ FR: "France",
80
+ GF: "French Guiana",
81
+ PF: "French Polynesia",
82
+ TF: "French Southern Territories",
83
+ GA: "Gabon",
84
+ GM: "Gambia",
85
+ GE: "Georgia",
86
+ DE: "Germany",
87
+ GH: "Ghana",
88
+ GI: "Gibraltar",
89
+ GR: "Greece",
90
+ GL: "Greenland",
91
+ GD: "Grenada",
92
+ GP: "Guadeloupe",
93
+ GU: "Guam",
94
+ GT: "Guatemala",
95
+ GG: "Guernsey",
96
+ GN: "Guinea",
97
+ GW: "Guinea-Bissau",
98
+ GY: "Guyana",
99
+ HT: "Haiti",
100
+ HM: "Heard Island & Mcdonald Islands",
101
+ VA: "Holy See (Vatican City State)",
102
+ HN: "Honduras",
103
+ HK: "Hong Kong",
104
+ HU: "Hungary",
105
+ IS: "Iceland",
106
+ IN: "India",
107
+ ID: "Indonesia",
108
+ IR: "Iran, Islamic Republic Of",
109
+ IQ: "Iraq",
110
+ IE: "Ireland",
111
+ IM: "Isle Of Man",
112
+ IL: "Israel",
113
+ IT: "Italy",
114
+ JM: "Jamaica",
115
+ JP: "Japan",
116
+ JE: "Jersey",
117
+ JO: "Jordan",
118
+ KZ: "Kazakhstan",
119
+ KE: "Kenya",
120
+ KI: "Kiribati",
121
+ KR: "Korea",
122
+ KW: "Kuwait",
123
+ KG: "Kyrgyzstan",
124
+ LA: "Lao People's Democratic Republic",
125
+ LV: "Latvia",
126
+ LB: "Lebanon",
127
+ LS: "Lesotho",
128
+ LR: "Liberia",
129
+ LY: "Libyan Arab Jamahiriya",
130
+ LI: "Liechtenstein",
131
+ LT: "Lithuania",
132
+ LU: "Luxembourg",
133
+ MO: "Macao",
134
+ MK: "Macedonia",
135
+ MG: "Madagascar",
136
+ MW: "Malawi",
137
+ MY: "Malaysia",
138
+ MV: "Maldives",
139
+ ML: "Mali",
140
+ MT: "Malta",
141
+ MH: "Marshall Islands",
142
+ MQ: "Martinique",
143
+ MR: "Mauritania",
144
+ MU: "Mauritius",
145
+ YT: "Mayotte",
146
+ MX: "Mexico",
147
+ FM: "Micronesia, Federated States Of",
148
+ MD: "Moldova",
149
+ MC: "Monaco",
150
+ MN: "Mongolia",
151
+ ME: "Montenegro",
152
+ MS: "Montserrat",
153
+ MA: "Morocco",
154
+ MZ: "Mozambique",
155
+ MM: "Myanmar",
156
+ NA: "Namibia",
157
+ NR: "Nauru",
158
+ NP: "Nepal",
159
+ NL: "Netherlands",
160
+ AN: "Netherlands Antilles",
161
+ NC: "New Caledonia",
162
+ NZ: "New Zealand",
163
+ NI: "Nicaragua",
164
+ NE: "Niger",
165
+ NG: "Nigeria",
166
+ NU: "Niue",
167
+ NF: "Norfolk Island",
168
+ MP: "Northern Mariana Islands",
169
+ NO: "Norway",
170
+ OM: "Oman",
171
+ PK: "Pakistan",
172
+ PW: "Palau",
173
+ PS: "Palestinian Territory, Occupied",
174
+ PA: "Panama",
175
+ PG: "Papua New Guinea",
176
+ PY: "Paraguay",
177
+ PE: "Peru",
178
+ PH: "Philippines",
179
+ PN: "Pitcairn",
180
+ PL: "Poland",
181
+ PT: "Portugal",
182
+ PR: "Puerto Rico",
183
+ QA: "Qatar",
184
+ RE: "Reunion",
185
+ RO: "Romania",
186
+ RU: "Russian Federation",
187
+ RW: "Rwanda",
188
+ BL: "Saint Barthelemy",
189
+ SH: "Saint Helena",
190
+ KN: "Saint Kitts And Nevis",
191
+ LC: "Saint Lucia",
192
+ MF: "Saint Martin",
193
+ PM: "Saint Pierre And Miquelon",
194
+ VC: "Saint Vincent And Grenadines",
195
+ WS: "Samoa",
196
+ SM: "San Marino",
197
+ ST: "Sao Tome And Principe",
198
+ SA: "Saudi Arabia",
199
+ SN: "Senegal",
200
+ RS: "Serbia",
201
+ SC: "Seychelles",
202
+ SL: "Sierra Leone",
203
+ SG: "Singapore",
204
+ SK: "Slovakia",
205
+ SI: "Slovenia",
206
+ SB: "Solomon Islands",
207
+ SO: "Somalia",
208
+ ZA: "South Africa",
209
+ GS: "South Georgia And Sandwich Isl.",
210
+ ES: "Spain",
211
+ LK: "Sri Lanka",
212
+ SD: "Sudan",
213
+ SR: "Suriname",
214
+ SJ: "Svalbard And Jan Mayen",
215
+ SZ: "Swaziland",
216
+ SE: "Sweden",
217
+ CH: "Switzerland",
218
+ SY: "Syrian Arab Republic",
219
+ TW: "Taiwan",
220
+ TJ: "Tajikistan",
221
+ TZ: "Tanzania",
222
+ TH: "Thailand",
223
+ TL: "Timor-Leste",
224
+ TG: "Togo",
225
+ TK: "Tokelau",
226
+ TO: "Tonga",
227
+ TT: "Trinidad And Tobago",
228
+ TN: "Tunisia",
229
+ TR: "Turkey",
230
+ TM: "Turkmenistan",
231
+ TC: "Turks And Caicos Islands",
232
+ TV: "Tuvalu",
233
+ UG: "Uganda",
234
+ UA: "Ukraine",
235
+ AE: "United Arab Emirates",
236
+ GB: "United Kingdom",
237
+ US: "United States",
238
+ UM: "United States Outlying Islands",
239
+ UY: "Uruguay",
240
+ UZ: "Uzbekistan",
241
+ VU: "Vanuatu",
242
+ VE: "Venezuela",
243
+ VN: "Viet Nam",
244
+ VG: "Virgin Islands, British",
245
+ VI: "Virgin Islands, U.S.",
246
+ WF: "Wallis And Futuna",
247
+ EH: "Western Sahara",
248
+ YE: "Yemen",
249
+ ZM: "Zambia",
250
+ ZW: "Zimbabwe"
251
+ };
252
+ export function userDomainsByRoles(user, roles) {
253
+ var eD = user && user.enrolledDomains ? user.enrolledDomains : [];
254
+ var domains = [];
255
+ var i = 0;
256
+ for (i; i < eD.length; i++) {
257
+ var e = eD[i];
258
+ if (roles.includes(e.role)) {
259
+ domains.push(e.domain);
260
+ }
261
+ }
262
+ return domains;
263
+ }
264
+ export function userAdminDomains(user) {
265
+ return userDomainsByRoles(user, [Role.ADMIN, Role.MANAGER]);
266
+ }
267
+ export function isProductSupplierMOD(product) {
268
+ var productType = product && product.productType;
269
+ return product && [String(ProductType.SUPPLIER_MOD), String(ProductType.SUPPLIER_RESELL_MOD)].includes(String(productType));
270
+ }
271
+ export function isUserRegistered(user) {
272
+ var id = user ? user.id : null;
273
+ return id !== undefined && id !== null && id > 0;
274
+ }
275
+ export function isRegisteredAndHasStore(user) {
276
+ var id = user ? user.id : null;
277
+ return id !== undefined && id !== null && id > 0 && user.hasStore;
278
+ }
279
+ var supportedNumbers = {
280
+ AU: 'Australia (+61)',
281
+ AE: 'United Arab Emirates (+971)',
282
+ BH: 'Bahrain (+973)',
283
+ CN: 'China (+86)',
284
+ DK: 'Denmark (+45)',
285
+ ES: 'Spain (+34)',
286
+ FR: 'France (+33)',
287
+ GB: 'United Kingdom (+44)',
288
+ HK: 'Hong Kong (+852)',
289
+ ID: 'Indonesia (+62)',
290
+ IN: 'India (+91)',
291
+ IT: 'Italy (+39)',
292
+ KR: 'South Korea (+82)',
293
+ NC: 'New Caledonia (+687)',
294
+ NZ: 'New Zealand (+64)',
295
+ OM: 'Oman (+968)',
296
+ PH: 'Philippines (+63)',
297
+ PT: 'Portugal (+351)',
298
+ QA: 'Qatar (+974)',
299
+ SE: 'Sweden (+46)',
300
+ SG: 'Singapore (+65)',
301
+ TH: 'Thailand (+66)',
302
+ US: 'United States (+1)',
303
+ ZA: 'South Africa (+27)'
304
+ };
305
+ export var phoneOptions = Object.keys(supportedNumbers).map(function (key) {
306
+ return {
307
+ value: key,
308
+ label: supportedNumbers[key]
309
+ };
310
+ });
311
+ export var addressComponentsSettingsBackend = {
312
+ administrative_area_level_1: 'shortName',
313
+ administrative_area_level_2: 'shortName',
314
+ country: 'shortName',
315
+ establishment: 'longName',
316
+ floor: 'shortName',
317
+ locality: 'longName',
318
+ postal_code: 'shortName',
319
+ premise: 'shortName',
320
+ room: 'longName',
321
+ route: 'shortName',
322
+ street_number: 'shortName',
323
+ sublocality: 'longName',
324
+ subpremise: 'shortName'
325
+ };
326
+ export function googlePlacesResultAsNewAddress(placeDetails) {
327
+ var addressComponents = (placeDetails === null || placeDetails === void 0 ? void 0 : placeDetails.addressComponents) || [];
328
+ var name = (placeDetails === null || placeDetails === void 0 ? void 0 : placeDetails.name) || '';
329
+ var address = {
330
+ city: '',
331
+ country: '',
332
+ lineOne: name ? name : '',
333
+ lineTwo: '',
334
+ postcode: '',
335
+ state: ''
336
+ };
337
+ if (addressComponents && addressComponents.length > 0) {
338
+ for (var i = 0; i < addressComponents.length; i++) {
339
+ var addrComponent = addressComponents[i];
340
+ var addrTypes = addrComponent.types;
341
+
342
+ // Find the first relevant type that we have a setting for
343
+ var addrType = null;
344
+ var componentSetting = null;
345
+ var _iterator = _createForOfIteratorHelper(addrTypes),
346
+ _step;
347
+ try {
348
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
349
+ var type = _step.value;
350
+ if (addressComponentsSettingsBackend[type]) {
351
+ addrType = type;
352
+ componentSetting = addressComponentsSettingsBackend[type];
353
+ break;
354
+ }
355
+ }
356
+ } catch (err) {
357
+ _iterator.e(err);
358
+ } finally {
359
+ _iterator.f();
360
+ }
361
+ if (componentSetting && addrType) {
362
+ var addressVal = addrComponent[componentSetting];
363
+ switch (addrType) {
364
+ case 'establishment':
365
+ case 'room':
366
+ case 'floor':
367
+ case 'street_number':
368
+ case 'premise':
369
+ case 'subpremise':
370
+ case 'route':
371
+ var oldLineOne = address.lineOne;
372
+ address.lineOne = oldLineOne.includes(addressVal) ? oldLineOne : "".concat(oldLineOne, " ").concat(addressVal).trim();
373
+ break;
374
+ case 'locality':
375
+ case 'sublocality':
376
+ var oldCity = address.city ? "".concat(address.city, " ") : '';
377
+ address.city = (oldCity + addressVal).trim();
378
+ break;
379
+ case 'administrative_area_level_1':
380
+ address.state = addressVal;
381
+ break;
382
+ case 'administrative_area_level_2':
383
+ break;
384
+ case 'country':
385
+ address.country = addressVal;
386
+ break;
387
+ case 'postal_code':
388
+ address.postcode = addressVal;
389
+ break;
390
+ default:
391
+ break;
392
+ }
393
+ }
394
+ }
395
+
396
+ // Clean up line one if it's empty and we have a formatted address
397
+ if (!address.lineOne.trim() && placeDetails !== null && placeDetails !== void 0 && placeDetails.formattedAddress) {
398
+ // Try to extract street address from formatted address
399
+ var parts = placeDetails.formattedAddress.split(',');
400
+ if (parts.length > 0) {
401
+ address.lineOne = parts[0].trim();
402
+ }
403
+ }
404
+ return address;
405
+ }
406
+ return null;
407
+ }
408
+ export function addressInOneLine(address) {
409
+ var a = address ? address : {};
410
+ var city = a.city,
411
+ country = a.country,
412
+ lineOne = a.lineOne,
413
+ lineTwo = a.lineTwo,
414
+ postcode = a.postcode,
415
+ state = a.state;
416
+ var l1 = lineOne ? "".concat(lineOne, " ") : '';
417
+ var l2 = lineTwo ? "".concat(lineTwo, " ") : '';
418
+ var c = city ? "".concat(city, " ") : '';
419
+ var s = state ? "".concat(state, " ") : '';
420
+ var p = postcode ? "".concat(postcode, " ") : '';
421
+ var countryFull = country ? isoCountries[country] : '';
422
+ return l1 + l2 + c + s + p + countryFull;
423
+ }
424
+ export var FieldType = /*#__PURE__*/function (FieldType) {
425
+ FieldType[FieldType["TEXT_INPUT"] = 1] = "TEXT_INPUT";
426
+ FieldType[FieldType["SELECT"] = 2] = "SELECT";
427
+ FieldType[FieldType["FILE_UPLOAD"] = 3] = "FILE_UPLOAD";
428
+ FieldType[FieldType["TEXT_AREA"] = 4] = "TEXT_AREA";
429
+ FieldType[FieldType["NUMBER_INPUT"] = 5] = "NUMBER_INPUT";
430
+ FieldType[FieldType["CHECKBOX"] = 6] = "CHECKBOX";
431
+ FieldType[FieldType["RADIO"] = 7] = "RADIO";
432
+ FieldType[FieldType["FIELD_INSTRUCTIONS"] = 8] = "FIELD_INSTRUCTIONS";
433
+ FieldType[FieldType["IMAGE_SELECT"] = 9] = "IMAGE_SELECT";
434
+ FieldType[FieldType["COLOUR_PICKER"] = 10] = "COLOUR_PICKER";
435
+ FieldType[FieldType["COLOUR_SELECT"] = 11] = "COLOUR_SELECT";
436
+ FieldType[FieldType["TURNAROUND_TIME"] = 12] = "TURNAROUND_TIME";
437
+ FieldType[FieldType["COLOUR_EXTRACT"] = 13] = "COLOUR_EXTRACT";
438
+ FieldType[FieldType["AREA"] = 14] = "AREA";
439
+ return FieldType;
440
+ }({});
441
+ export function isSelectable(fieldType) {
442
+ return [FieldType.SELECT, FieldType.CHECKBOX, FieldType.RADIO, FieldType.IMAGE_SELECT, FieldType.COLOUR_SELECT, FieldType.TURNAROUND_TIME, FieldType.COLOUR_EXTRACT].includes(fieldType);
443
+ }
444
+ export function isInstructionsType(fieldType) {
445
+ return String(FieldType.FIELD_INSTRUCTIONS) === String(fieldType);
446
+ }
447
+ export var countryDefaultDict = function countryDefaultDict(currency) {
448
+ return {
449
+ currency: currency
450
+ };
451
+ };
452
+ export var supportedCountryDefaults = {
453
+ AE: countryDefaultDict('USD'),
454
+ AU: countryDefaultDict('AUD'),
455
+ BH: countryDefaultDict('USD'),
456
+ CH: countryDefaultDict('CNY'),
457
+ DK: countryDefaultDict('EUR'),
458
+ ES: countryDefaultDict('EUR'),
459
+ FR: countryDefaultDict('EUR'),
460
+ GB: countryDefaultDict('GBP'),
461
+ HK: countryDefaultDict('HKD'),
462
+ ID: countryDefaultDict('USD'),
463
+ IN: countryDefaultDict('INR'),
464
+ IT: countryDefaultDict('EUR'),
465
+ KR: countryDefaultDict('USD'),
466
+ NC: countryDefaultDict('USD'),
467
+ NZ: countryDefaultDict('NZD'),
468
+ OM: countryDefaultDict('USD'),
469
+ PH: countryDefaultDict('USD'),
470
+ PT: countryDefaultDict('EUR'),
471
+ QA: countryDefaultDict('USD'),
472
+ SE: countryDefaultDict('USD'),
473
+ SG: countryDefaultDict('SGD'),
474
+ TH: countryDefaultDict('USD'),
475
+ US: countryDefaultDict('USD'),
476
+ ZA: countryDefaultDict('USD')
477
+ };
478
+ export var supportedCountryDefaultsWithDefault = function supportedCountryDefaultsWithDefault(countryCode) {
479
+ var defaultCountryValues = supportedCountryDefaults[countryCode];
480
+ return defaultCountryValues ? defaultCountryValues : supportedCountryDefaults.AU;
481
+ };
482
+ function isFileRef(value) {
483
+ return value != null && value.id != null && value.id !== '';
484
+ }
485
+ export function cleanClientFiles() {
486
+ var clientFiles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
487
+ return clientFiles.map(function (clientFile) {
488
+ if (!clientFile) return undefined;
489
+ if (isFileRef(clientFile.file)) return clientFile.file;
490
+ if (isFileRef(clientFile)) return {
491
+ id: clientFile.id
492
+ };
493
+ return undefined;
494
+ }).filter(function (file) {
495
+ return file != null;
496
+ });
497
+ }
498
+ export function appendClientToOwnDraft(job) {
499
+ var ownDrafts = job.ownDrafts;
500
+ if (job.ownDrafts && job.ownDrafts.length) {
501
+ job.ownDrafts[0].designer = job.client;
502
+ }
503
+ return job;
504
+ }
505
+ /**
506
+ * Decode/normalize a redirect base URL from embed script params.
507
+ * Handles percent-encoding, legacy %27 wrappers, and trailing junk.
508
+ */
509
+ export function normalizeRedirectBaseUrl(url) {
510
+ var clean = String(url || '').trim().replace(/%27/g, '').replace(/%91/g, '').replace(/%92/g, '').replace(/%93/g, '').replace(/%94/g, '').replace(/^['"]+|['"]+$/g, '');
511
+
512
+ // Fully decode so encoded absolute URLs are not treated as relative paths.
513
+ for (var i = 0; i < 2; i++) {
514
+ try {
515
+ if (!/%[0-9A-Fa-f]{2}/.test(clean)) break;
516
+ var decoded = decodeURIComponent(clean);
517
+ if (decoded === clean) break;
518
+ clean = decoded;
519
+ } catch (_unused) {
520
+ break;
521
+ }
522
+ }
523
+ return clean;
524
+ }
525
+ export function getClientEmail(client) {
526
+ var _client$emailAddresse;
527
+ var email = client === null || client === void 0 || (_client$emailAddresse = client.emailAddresses) === null || _client$emailAddresse === void 0 || (_client$emailAddresse = _client$emailAddresse[0]) === null || _client$emailAddresse === void 0 ? void 0 : _client$emailAddresse.emailAddress;
528
+ return typeof email === 'string' && email.trim() ? email.trim() : undefined;
529
+ }
530
+
531
+ /**
532
+ * Build the post-checkout/quote redirect URL with proper query separators.
533
+ * Always safe when the base URL omits a trailing "?" / "&".
534
+ */
535
+ export function buildSuccessRedirectUrl(url, redirectWithValue, value) {
536
+ var extras = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
537
+ var base = normalizeRedirectBaseUrl(url);
538
+ if (!base) return base;
539
+ var target = new URL(base, typeof window !== 'undefined' ? window.location.href : 'https://placeholder.invalid/');
540
+ if (redirectWithValue && value !== undefined && value !== null && value !== '') {
541
+ target.searchParams.set('merchiValue', String(value));
542
+ }
543
+ if (extras.invoiceId !== undefined && extras.invoiceId !== null && extras.invoiceId !== '') {
544
+ target.searchParams.set('invoiceId', String(extras.invoiceId));
545
+ }
546
+ if (extras.email) {
547
+ target.searchParams.set('email', String(extras.email));
548
+ }
549
+
550
+ // Preserve protocol-relative redirect targets (//example.com/...).
551
+ if (base.startsWith('//')) {
552
+ return "//".concat(target.host).concat(target.pathname).concat(target.search).concat(target.hash);
553
+ }
554
+ return target.toString();
555
+ }
556
+ export function redirectOnSuccess(url, redirectWithValue, value) {
557
+ var extras = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
558
+ window.location.href = buildSuccessRedirectUrl(url, redirectWithValue, value, extras);
559
+ }
560
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9kdWN0VHlwZSIsIlJvbGUiLCJpc29Db3VudHJpZXMiLCJBRiIsIkFYIiwiQUwiLCJEWiIsIkFTIiwiQUQiLCJBTyIsIkFJIiwiQVEiLCJBRyIsIkFSIiwiQU0iLCJBVyIsIkFVIiwiQVQiLCJBWiIsIkJTIiwiQkgiLCJCRCIsIkJCIiwiQlkiLCJCRSIsIkJaIiwiQkoiLCJCTSIsIkJUIiwiQk8iLCJCQSIsIkJXIiwiQlYiLCJCUiIsIklPIiwiQk4iLCJCRyIsIkJGIiwiQkkiLCJLSCIsIkNNIiwiQ0EiLCJDViIsIktZIiwiQ0YiLCJURCIsIkNMIiwiQ04iLCJDWCIsIkNDIiwiQ08iLCJLTSIsIkNHIiwiQ0QiLCJDSyIsIkNSIiwiQ0kiLCJIUiIsIkNVIiwiQ1kiLCJDWiIsIkRLIiwiREoiLCJETSIsIkRPIiwiRUMiLCJFRyIsIlNWIiwiR1EiLCJFUiIsIkVFIiwiRVQiLCJGSyIsIkZPIiwiRkoiLCJGSSIsIkZSIiwiR0YiLCJQRiIsIlRGIiwiR0EiLCJHTSIsIkdFIiwiREUiLCJHSCIsIkdJIiwiR1IiLCJHTCIsIkdEIiwiR1AiLCJHVSIsIkdUIiwiR0ciLCJHTiIsIkdXIiwiR1kiLCJIVCIsIkhNIiwiVkEiLCJITiIsIkhLIiwiSFUiLCJJUyIsIklOIiwiSUQiLCJJUiIsIklRIiwiSUUiLCJJTSIsIklMIiwiSVQiLCJKTSIsIkpQIiwiSkUiLCJKTyIsIktaIiwiS0UiLCJLSSIsIktSIiwiS1ciLCJLRyIsIkxBIiwiTFYiLCJMQiIsIkxTIiwiTFIiLCJMWSIsIkxJIiwiTFQiLCJMVSIsIk1PIiwiTUsiLCJNRyIsIk1XIiwiTVkiLCJNViIsIk1MIiwiTVQiLCJNSCIsIk1RIiwiTVIiLCJNVSIsIllUIiwiTVgiLCJGTSIsIk1EIiwiTUMiLCJNTiIsIk1FIiwiTVMiLCJNQSIsIk1aIiwiTU0iLCJOQSIsIk5SIiwiTlAiLCJOTCIsIkFOIiwiTkMiLCJOWiIsIk5JIiwiTkUiLCJORyIsIk5VIiwiTkYiLCJNUCIsIk5PIiwiT00iLCJQSyIsIlBXIiwiUFMiLCJQQSIsIlBHIiwiUFkiLCJQRSIsIlBIIiwiUE4iLCJQTCIsIlBUIiwiUFIiLCJRQSIsIlJFIiwiUk8iLCJSVSIsIlJXIiwiQkwiLCJTSCIsIktOIiwiTEMiLCJNRiIsIlBNIiwiVkMiLCJXUyIsIlNNIiwiU1QiLCJTQSIsIlNOIiwiUlMiLCJTQyIsIlNMIiwiU0ciLCJTSyIsIlNJIiwiU0IiLCJTTyIsIlpBIiwiR1MiLCJFUyIsIkxLIiwiU0QiLCJTUiIsIlNKIiwiU1oiLCJTRSIsIkNIIiwiU1kiLCJUVyIsIlRKIiwiVFoiLCJUSCIsIlRMIiwiVEciLCJUSyIsIlRPIiwiVFQiLCJUTiIsIlRSIiwiVE0iLCJUQyIsIlRWIiwiVUciLCJVQSIsIkFFIiwiR0IiLCJVUyIsIlVNIiwiVVkiLCJVWiIsIlZVIiwiVkUiLCJWTiIsIlZHIiwiVkkiLCJXRiIsIkVIIiwiWUUiLCJaTSIsIlpXIiwidXNlckRvbWFpbnNCeVJvbGVzIiwidXNlciIsInJvbGVzIiwiZUQiLCJlbnJvbGxlZERvbWFpbnMiLCJkb21haW5zIiwiaSIsImxlbmd0aCIsImUiLCJpbmNsdWRlcyIsInJvbGUiLCJwdXNoIiwiZG9tYWluIiwidXNlckFkbWluRG9tYWlucyIsIkFETUlOIiwiTUFOQUdFUiIsImlzUHJvZHVjdFN1cHBsaWVyTU9EIiwicHJvZHVjdCIsInByb2R1Y3RUeXBlIiwiU3RyaW5nIiwiU1VQUExJRVJfTU9EIiwiU1VQUExJRVJfUkVTRUxMX01PRCIsImlzVXNlclJlZ2lzdGVyZWQiLCJpZCIsInVuZGVmaW5lZCIsImlzUmVnaXN0ZXJlZEFuZEhhc1N0b3JlIiwiaGFzU3RvcmUiLCJzdXBwb3J0ZWROdW1iZXJzIiwicGhvbmVPcHRpb25zIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImtleSIsInZhbHVlIiwibGFiZWwiLCJhZGRyZXNzQ29tcG9uZW50c1NldHRpbmdzQmFja2VuZCIsImFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMSIsImFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMiIsImNvdW50cnkiLCJlc3RhYmxpc2htZW50IiwiZmxvb3IiLCJsb2NhbGl0eSIsInBvc3RhbF9jb2RlIiwicHJlbWlzZSIsInJvb20iLCJyb3V0ZSIsInN0cmVldF9udW1iZXIiLCJzdWJsb2NhbGl0eSIsInN1YnByZW1pc2UiLCJnb29nbGVQbGFjZXNSZXN1bHRBc05ld0FkZHJlc3MiLCJwbGFjZURldGFpbHMiLCJhZGRyZXNzQ29tcG9uZW50cyIsIm5hbWUiLCJhZGRyZXNzIiwiY2l0eSIsImxpbmVPbmUiLCJsaW5lVHdvIiwicG9zdGNvZGUiLCJzdGF0ZSIsImFkZHJDb21wb25lbnQiLCJhZGRyVHlwZXMiLCJ0eXBlcyIsImFkZHJUeXBlIiwiY29tcG9uZW50U2V0dGluZyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJ0eXBlIiwiZXJyIiwiZiIsImFkZHJlc3NWYWwiLCJvbGRMaW5lT25lIiwiY29uY2F0IiwidHJpbSIsIm9sZENpdHkiLCJmb3JtYXR0ZWRBZGRyZXNzIiwicGFydHMiLCJzcGxpdCIsImFkZHJlc3NJbk9uZUxpbmUiLCJhIiwibDEiLCJsMiIsImMiLCJwIiwiY291bnRyeUZ1bGwiLCJGaWVsZFR5cGUiLCJpc1NlbGVjdGFibGUiLCJmaWVsZFR5cGUiLCJTRUxFQ1QiLCJDSEVDS0JPWCIsIlJBRElPIiwiSU1BR0VfU0VMRUNUIiwiQ09MT1VSX1NFTEVDVCIsIlRVUk5BUk9VTkRfVElNRSIsIkNPTE9VUl9FWFRSQUNUIiwiaXNJbnN0cnVjdGlvbnNUeXBlIiwiRklFTERfSU5TVFJVQ1RJT05TIiwiY291bnRyeURlZmF1bHREaWN0IiwiY3VycmVuY3kiLCJzdXBwb3J0ZWRDb3VudHJ5RGVmYXVsdHMiLCJzdXBwb3J0ZWRDb3VudHJ5RGVmYXVsdHNXaXRoRGVmYXVsdCIsImNvdW50cnlDb2RlIiwiZGVmYXVsdENvdW50cnlWYWx1ZXMiLCJpc0ZpbGVSZWYiLCJjbGVhbkNsaWVudEZpbGVzIiwiY2xpZW50RmlsZXMiLCJhcmd1bWVudHMiLCJjbGllbnRGaWxlIiwiZmlsZSIsImZpbHRlciIsImFwcGVuZENsaWVudFRvT3duRHJhZnQiLCJqb2IiLCJvd25EcmFmdHMiLCJkZXNpZ25lciIsImNsaWVudCIsIm5vcm1hbGl6ZVJlZGlyZWN0QmFzZVVybCIsInVybCIsImNsZWFuIiwicmVwbGFjZSIsInRlc3QiLCJkZWNvZGVkIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiX3VudXNlZCIsImdldENsaWVudEVtYWlsIiwiX2NsaWVudCRlbWFpbEFkZHJlc3NlIiwiZW1haWwiLCJlbWFpbEFkZHJlc3NlcyIsImVtYWlsQWRkcmVzcyIsImJ1aWxkU3VjY2Vzc1JlZGlyZWN0VXJsIiwicmVkaXJlY3RXaXRoVmFsdWUiLCJleHRyYXMiLCJiYXNlIiwidGFyZ2V0IiwiVVJMIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwic2VhcmNoUGFyYW1zIiwic2V0IiwiaW52b2ljZUlkIiwic3RhcnRzV2l0aCIsImhvc3QiLCJwYXRobmFtZSIsInNlYXJjaCIsImhhc2giLCJ0b1N0cmluZyIsInJlZGlyZWN0T25TdWNjZXNzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2R1Y3RUeXBlLCBSb2xlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc29Db3VudHJpZXM6IGFueSA9IHtcbiAgQUY6IFwiQWZnaGFuaXN0YW5cIixcbiAgQVg6IFwiQWxhbmQgSXNsYW5kc1wiLFxuICBBTDogXCJBbGJhbmlhXCIsXG4gIERaOiBcIkFsZ2VyaWFcIixcbiAgQVM6IFwiQW1lcmljYW4gU2Ftb2FcIixcbiAgQUQ6IFwiQW5kb3JyYVwiLFxuICBBTzogXCJBbmdvbGFcIixcbiAgQUk6IFwiQW5ndWlsbGFcIixcbiAgQVE6IFwiQW50YXJjdGljYVwiLFxuICBBRzogXCJBbnRpZ3VhIEFuZCBCYXJidWRhXCIsXG4gIEFSOiBcIkFyZ2VudGluYVwiLFxuICBBTTogXCJBcm1lbmlhXCIsXG4gIEFXOiBcIkFydWJhXCIsXG4gIEFVOiBcIkF1c3RyYWxpYVwiLFxuICBBVDogXCJBdXN0cmlhXCIsXG4gIEFaOiBcIkF6ZXJiYWlqYW5cIixcbiAgQlM6IFwiQmFoYW1hc1wiLFxuICBCSDogXCJCYWhyYWluXCIsXG4gIEJEOiBcIkJhbmdsYWRlc2hcIixcbiAgQkI6IFwiQmFyYmFkb3NcIixcbiAgQlk6IFwiQmVsYXJ1c1wiLFxuICBCRTogXCJCZWxnaXVtXCIsXG4gIEJaOiBcIkJlbGl6ZVwiLFxuICBCSjogXCJCZW5pblwiLFxuICBCTTogXCJCZXJtdWRhXCIsXG4gIEJUOiBcIkJodXRhblwiLFxuICBCTzogXCJCb2xpdmlhXCIsXG4gIEJBOiBcIkJvc25pYSBBbmQgSGVyemVnb3ZpbmFcIixcbiAgQlc6IFwiQm90c3dhbmFcIixcbiAgQlY6IFwiQm91dmV0IElzbGFuZFwiLFxuICBCUjogXCJCcmF6aWxcIixcbiAgSU86IFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XCIsXG4gIEJOOiBcIkJydW5laSBEYXJ1c3NhbGFtXCIsXG4gIEJHOiBcIkJ1bGdhcmlhXCIsXG4gIEJGOiBcIkJ1cmtpbmEgRmFzb1wiLFxuICBCSTogXCJCdXJ1bmRpXCIsXG4gIEtIOiBcIkNhbWJvZGlhXCIsXG4gIENNOiBcIkNhbWVyb29uXCIsXG4gIENBOiBcIkNhbmFkYVwiLFxuICBDVjogXCJDYXBlIFZlcmRlXCIsXG4gIEtZOiBcIkNheW1hbiBJc2xhbmRzXCIsXG4gIENGOiBcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1wiLFxuICBURDogXCJDaGFkXCIsXG4gIENMOiBcIkNoaWxlXCIsXG4gIENOOiBcIkNoaW5hXCIsXG4gIENYOiBcIkNocmlzdG1hcyBJc2xhbmRcIixcbiAgQ0M6IFwiQ29jb3MgKEtlZWxpbmcpIElzbGFuZHNcIixcbiAgQ086IFwiQ29sb21iaWFcIixcbiAgS006IFwiQ29tb3Jvc1wiLFxuICBDRzogXCJDb25nb1wiLFxuICBDRDogXCJDb25nbywgRGVtb2NyYXRpYyBSZXB1YmxpY1wiLFxuICBDSzogXCJDb29rIElzbGFuZHNcIixcbiAgQ1I6IFwiQ29zdGEgUmljYVwiLFxuICBDSTogXCJDb3RlIEQnSXZvaXJlXCIsXG4gIEhSOiBcIkNyb2F0aWFcIixcbiAgQ1U6IFwiQ3ViYVwiLFxuICBDWTogXCJDeXBydXNcIixcbiAgQ1o6IFwiQ3plY2ggUmVwdWJsaWNcIixcbiAgREs6IFwiRGVubWFya1wiLFxuICBESjogXCJEamlib3V0aVwiLFxuICBETTogXCJEb21pbmljYVwiLFxuICBETzogXCJEb21pbmljYW4gUmVwdWJsaWNcIixcbiAgRUM6IFwiRWN1YWRvclwiLFxuICBFRzogXCJFZ3lwdFwiLFxuICBTVjogXCJFbCBTYWx2YWRvclwiLFxuICBHUTogXCJFcXVhdG9yaWFsIEd1aW5lYVwiLFxuICBFUjogXCJFcml0cmVhXCIsXG4gIEVFOiBcIkVzdG9uaWFcIixcbiAgRVQ6IFwiRXRoaW9waWFcIixcbiAgRks6IFwiRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpXCIsXG4gIEZPOiBcIkZhcm9lIElzbGFuZHNcIixcbiAgRko6IFwiRmlqaVwiLFxuICBGSTogXCJGaW5sYW5kXCIsXG4gIEZSOiBcIkZyYW5jZVwiLFxuICBHRjogXCJGcmVuY2ggR3VpYW5hXCIsXG4gIFBGOiBcIkZyZW5jaCBQb2x5bmVzaWFcIixcbiAgVEY6IFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXCIsXG4gIEdBOiBcIkdhYm9uXCIsXG4gIEdNOiBcIkdhbWJpYVwiLFxuICBHRTogXCJHZW9yZ2lhXCIsXG4gIERFOiBcIkdlcm1hbnlcIixcbiAgR0g6IFwiR2hhbmFcIixcbiAgR0k6IFwiR2licmFsdGFyXCIsXG4gIEdSOiBcIkdyZWVjZVwiLFxuICBHTDogXCJHcmVlbmxhbmRcIixcbiAgR0Q6IFwiR3JlbmFkYVwiLFxuICBHUDogXCJHdWFkZWxvdXBlXCIsXG4gIEdVOiBcIkd1YW1cIixcbiAgR1Q6IFwiR3VhdGVtYWxhXCIsXG4gIEdHOiBcIkd1ZXJuc2V5XCIsXG4gIEdOOiBcIkd1aW5lYVwiLFxuICBHVzogXCJHdWluZWEtQmlzc2F1XCIsXG4gIEdZOiBcIkd1eWFuYVwiLFxuICBIVDogXCJIYWl0aVwiLFxuICBITTogXCJIZWFyZCBJc2xhbmQgJiBNY2RvbmFsZCBJc2xhbmRzXCIsXG4gIFZBOiBcIkhvbHkgU2VlIChWYXRpY2FuIENpdHkgU3RhdGUpXCIsXG4gIEhOOiBcIkhvbmR1cmFzXCIsXG4gIEhLOiBcIkhvbmcgS29uZ1wiLFxuICBIVTogXCJIdW5nYXJ5XCIsXG4gIElTOiBcIkljZWxhbmRcIixcbiAgSU46IFwiSW5kaWFcIixcbiAgSUQ6IFwiSW5kb25lc2lhXCIsXG4gIElSOiBcIklyYW4sIElzbGFtaWMgUmVwdWJsaWMgT2ZcIixcbiAgSVE6IFwiSXJhcVwiLFxuICBJRTogXCJJcmVsYW5kXCIsXG4gIElNOiBcIklzbGUgT2YgTWFuXCIsXG4gIElMOiBcIklzcmFlbFwiLFxuICBJVDogXCJJdGFseVwiLFxuICBKTTogXCJKYW1haWNhXCIsXG4gIEpQOiBcIkphcGFuXCIsXG4gIEpFOiBcIkplcnNleVwiLFxuICBKTzogXCJKb3JkYW5cIixcbiAgS1o6IFwiS2F6YWtoc3RhblwiLFxuICBLRTogXCJLZW55YVwiLFxuICBLSTogXCJLaXJpYmF0aVwiLFxuICBLUjogXCJLb3JlYVwiLFxuICBLVzogXCJLdXdhaXRcIixcbiAgS0c6IFwiS3lyZ3l6c3RhblwiLFxuICBMQTogXCJMYW8gUGVvcGxlJ3MgRGVtb2NyYXRpYyBSZXB1YmxpY1wiLFxuICBMVjogXCJMYXR2aWFcIixcbiAgTEI6IFwiTGViYW5vblwiLFxuICBMUzogXCJMZXNvdGhvXCIsXG4gIExSOiBcIkxpYmVyaWFcIixcbiAgTFk6IFwiTGlieWFuIEFyYWIgSmFtYWhpcml5YVwiLFxuICBMSTogXCJMaWVjaHRlbnN0ZWluXCIsXG4gIExUOiBcIkxpdGh1YW5pYVwiLFxuICBMVTogXCJMdXhlbWJvdXJnXCIsXG4gIE1POiBcIk1hY2FvXCIsXG4gIE1LOiBcIk1hY2Vkb25pYVwiLFxuICBNRzogXCJNYWRhZ2FzY2FyXCIsXG4gIE1XOiBcIk1hbGF3aVwiLFxuICBNWTogXCJNYWxheXNpYVwiLFxuICBNVjogXCJNYWxkaXZlc1wiLFxuICBNTDogXCJNYWxpXCIsXG4gIE1UOiBcIk1hbHRhXCIsXG4gIE1IOiBcIk1hcnNoYWxsIElzbGFuZHNcIixcbiAgTVE6IFwiTWFydGluaXF1ZVwiLFxuICBNUjogXCJNYXVyaXRhbmlhXCIsXG4gIE1VOiBcIk1hdXJpdGl1c1wiLFxuICBZVDogXCJNYXlvdHRlXCIsXG4gIE1YOiBcIk1leGljb1wiLFxuICBGTTogXCJNaWNyb25lc2lhLCBGZWRlcmF0ZWQgU3RhdGVzIE9mXCIsXG4gIE1EOiBcIk1vbGRvdmFcIixcbiAgTUM6IFwiTW9uYWNvXCIsXG4gIE1OOiBcIk1vbmdvbGlhXCIsXG4gIE1FOiBcIk1vbnRlbmVncm9cIixcbiAgTVM6IFwiTW9udHNlcnJhdFwiLFxuICBNQTogXCJNb3JvY2NvXCIsXG4gIE1aOiBcIk1vemFtYmlxdWVcIixcbiAgTU06IFwiTXlhbm1hclwiLFxuICBOQTogXCJOYW1pYmlhXCIsXG4gIE5SOiBcIk5hdXJ1XCIsXG4gIE5QOiBcIk5lcGFsXCIsXG4gIE5MOiBcIk5ldGhlcmxhbmRzXCIsXG4gIEFOOiBcIk5ldGhlcmxhbmRzIEFudGlsbGVzXCIsXG4gIE5DOiBcIk5ldyBDYWxlZG9uaWFcIixcbiAgTlo6IFwiTmV3IFplYWxhbmRcIixcbiAgTkk6IFwiTmljYXJhZ3VhXCIsXG4gIE5FOiBcIk5pZ2VyXCIsXG4gIE5HOiBcIk5pZ2VyaWFcIixcbiAgTlU6IFwiTml1ZVwiLFxuICBORjogXCJOb3Jmb2xrIElzbGFuZFwiLFxuICBNUDogXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcIixcbiAgTk86IFwiTm9yd2F5XCIsXG4gIE9NOiBcIk9tYW5cIixcbiAgUEs6IFwiUGFraXN0YW5cIixcbiAgUFc6IFwiUGFsYXVcIixcbiAgUFM6IFwiUGFsZXN0aW5pYW4gVGVycml0b3J5LCBPY2N1cGllZFwiLFxuICBQQTogXCJQYW5hbWFcIixcbiAgUEc6IFwiUGFwdWEgTmV3IEd1aW5lYVwiLFxuICBQWTogXCJQYXJhZ3VheVwiLFxuICBQRTogXCJQZXJ1XCIsXG4gIFBIOiBcIlBoaWxpcHBpbmVzXCIsXG4gIFBOOiBcIlBpdGNhaXJuXCIsXG4gIFBMOiBcIlBvbGFuZFwiLFxuICBQVDogXCJQb3J0dWdhbFwiLFxuICBQUjogXCJQdWVydG8gUmljb1wiLFxuICBRQTogXCJRYXRhclwiLFxuICBSRTogXCJSZXVuaW9uXCIsXG4gIFJPOiBcIlJvbWFuaWFcIixcbiAgUlU6IFwiUnVzc2lhbiBGZWRlcmF0aW9uXCIsXG4gIFJXOiBcIlJ3YW5kYVwiLFxuICBCTDogXCJTYWludCBCYXJ0aGVsZW15XCIsXG4gIFNIOiBcIlNhaW50IEhlbGVuYVwiLFxuICBLTjogXCJTYWludCBLaXR0cyBBbmQgTmV2aXNcIixcbiAgTEM6IFwiU2FpbnQgTHVjaWFcIixcbiAgTUY6IFwiU2FpbnQgTWFydGluXCIsXG4gIFBNOiBcIlNhaW50IFBpZXJyZSBBbmQgTWlxdWVsb25cIixcbiAgVkM6IFwiU2FpbnQgVmluY2VudCBBbmQgR3JlbmFkaW5lc1wiLFxuICBXUzogXCJTYW1vYVwiLFxuICBTTTogXCJTYW4gTWFyaW5vXCIsXG4gIFNUOiBcIlNhbyBUb21lIEFuZCBQcmluY2lwZVwiLFxuICBTQTogXCJTYXVkaSBBcmFiaWFcIixcbiAgU046IFwiU2VuZWdhbFwiLFxuICBSUzogXCJTZXJiaWFcIixcbiAgU0M6IFwiU2V5Y2hlbGxlc1wiLFxuICBTTDogXCJTaWVycmEgTGVvbmVcIixcbiAgU0c6IFwiU2luZ2Fwb3JlXCIsXG4gIFNLOiBcIlNsb3Zha2lhXCIsXG4gIFNJOiBcIlNsb3ZlbmlhXCIsXG4gIFNCOiBcIlNvbG9tb24gSXNsYW5kc1wiLFxuICBTTzogXCJTb21hbGlhXCIsXG4gIFpBOiBcIlNvdXRoIEFmcmljYVwiLFxuICBHUzogXCJTb3V0aCBHZW9yZ2lhIEFuZCBTYW5kd2ljaCBJc2wuXCIsXG4gIEVTOiBcIlNwYWluXCIsXG4gIExLOiBcIlNyaSBMYW5rYVwiLFxuICBTRDogXCJTdWRhblwiLFxuICBTUjogXCJTdXJpbmFtZVwiLFxuICBTSjogXCJTdmFsYmFyZCBBbmQgSmFuIE1heWVuXCIsXG4gIFNaOiBcIlN3YXppbGFuZFwiLFxuICBTRTogXCJTd2VkZW5cIixcbiAgQ0g6IFwiU3dpdHplcmxhbmRcIixcbiAgU1k6IFwiU3lyaWFuIEFyYWIgUmVwdWJsaWNcIixcbiAgVFc6IFwiVGFpd2FuXCIsXG4gIFRKOiBcIlRhamlraXN0YW5cIixcbiAgVFo6IFwiVGFuemFuaWFcIixcbiAgVEg6IFwiVGhhaWxhbmRcIixcbiAgVEw6IFwiVGltb3ItTGVzdGVcIixcbiAgVEc6IFwiVG9nb1wiLFxuICBUSzogXCJUb2tlbGF1XCIsXG4gIFRPOiBcIlRvbmdhXCIsXG4gIFRUOiBcIlRyaW5pZGFkIEFuZCBUb2JhZ29cIixcbiAgVE46IFwiVHVuaXNpYVwiLFxuICBUUjogXCJUdXJrZXlcIixcbiAgVE06IFwiVHVya21lbmlzdGFuXCIsXG4gIFRDOiBcIlR1cmtzIEFuZCBDYWljb3MgSXNsYW5kc1wiLFxuICBUVjogXCJUdXZhbHVcIixcbiAgVUc6IFwiVWdhbmRhXCIsXG4gIFVBOiBcIlVrcmFpbmVcIixcbiAgQUU6IFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcIixcbiAgR0I6IFwiVW5pdGVkIEtpbmdkb21cIixcbiAgVVM6IFwiVW5pdGVkIFN0YXRlc1wiLFxuICBVTTogXCJVbml0ZWQgU3RhdGVzIE91dGx5aW5nIElzbGFuZHNcIixcbiAgVVk6IFwiVXJ1Z3VheVwiLFxuICBVWjogXCJVemJla2lzdGFuXCIsXG4gIFZVOiBcIlZhbnVhdHVcIixcbiAgVkU6IFwiVmVuZXp1ZWxhXCIsXG4gIFZOOiBcIlZpZXQgTmFtXCIsXG4gIFZHOiBcIlZpcmdpbiBJc2xhbmRzLCBCcml0aXNoXCIsXG4gIFZJOiBcIlZpcmdpbiBJc2xhbmRzLCBVLlMuXCIsXG4gIFdGOiBcIldhbGxpcyBBbmQgRnV0dW5hXCIsXG4gIEVIOiBcIldlc3Rlcm4gU2FoYXJhXCIsXG4gIFlFOiBcIlllbWVuXCIsXG4gIFpNOiBcIlphbWJpYVwiLFxuICBaVzogXCJaaW1iYWJ3ZVwiXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlckRvbWFpbnNCeVJvbGVzKHVzZXI6IGFueSwgcm9sZXM6IEFycmF5PG51bWJlcj4pIHtcbiAgY29uc3QgZUQgPSB1c2VyICYmIHVzZXIuZW5yb2xsZWREb21haW5zID8gdXNlci5lbnJvbGxlZERvbWFpbnMgOiBbXTtcbiAgY29uc3QgZG9tYWluczogYW55W10gPSBbXTtcbiAgbGV0IGkgPSAwO1xuICBmb3IgKGk7IGkgPCBlRC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGUgPSBlRFtpXTtcbiAgICBpZiAocm9sZXMuaW5jbHVkZXMoZS5yb2xlKSkge1xuICAgICAgZG9tYWlucy5wdXNoKChlIGFzIGFueSkuZG9tYWluKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRvbWFpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VyQWRtaW5Eb21haW5zKHVzZXI6IGFueSkge1xuICByZXR1cm4gdXNlckRvbWFpbnNCeVJvbGVzKHVzZXIsIFtSb2xlLkFETUlOLCBSb2xlLk1BTkFHRVJdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvZHVjdFN1cHBsaWVyTU9EKHByb2R1Y3Q6IGFueSkge1xuICBjb25zdCBwcm9kdWN0VHlwZSA9IHByb2R1Y3QgJiYgcHJvZHVjdC5wcm9kdWN0VHlwZVxuICByZXR1cm4gcHJvZHVjdCAmJiBbXG4gICAgU3RyaW5nKFByb2R1Y3RUeXBlLlNVUFBMSUVSX01PRCksXG4gICAgU3RyaW5nKFByb2R1Y3RUeXBlLlNVUFBMSUVSX1JFU0VMTF9NT0QpXG4gIF0uaW5jbHVkZXMoU3RyaW5nKHByb2R1Y3RUeXBlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VzZXJSZWdpc3RlcmVkKHVzZXI6IGFueSkge1xuICBjb25zdCBpZCA9IHVzZXIgPyB1c2VyLmlkIDogbnVsbDtcbiAgcmV0dXJuIGlkICE9PSB1bmRlZmluZWQgJiYgaWQgIT09IG51bGwgJiYgaWQgPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdpc3RlcmVkQW5kSGFzU3RvcmUodXNlcjogYW55KSB7XG4gIGNvbnN0IGlkID0gdXNlciA/IHVzZXIuaWQgOiBudWxsO1xuICByZXR1cm4gaWQgIT09IHVuZGVmaW5lZCAmJiBpZCAhPT0gbnVsbCAmJiBpZCA+IDAgJiYgdXNlci5oYXNTdG9yZTtcbn1cblxuY29uc3Qgc3VwcG9ydGVkTnVtYmVyczogYW55ID0ge1xuICBBVTogJ0F1c3RyYWxpYSAoKzYxKScsXG4gIEFFOiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMgKCs5NzEpJyxcbiAgQkg6ICdCYWhyYWluICgrOTczKScsXG4gIENOOiAnQ2hpbmEgKCs4NiknLFxuICBESzogJ0Rlbm1hcmsgKCs0NSknLFxuICBFUzogJ1NwYWluICgrMzQpJyxcbiAgRlI6ICdGcmFuY2UgKCszMyknLFxuICBHQjogJ1VuaXRlZCBLaW5nZG9tICgrNDQpJyxcbiAgSEs6ICdIb25nIEtvbmcgKCs4NTIpJyxcbiAgSUQ6ICdJbmRvbmVzaWEgKCs2MiknLFxuICBJTjogJ0luZGlhICgrOTEpJyxcbiAgSVQ6ICdJdGFseSAoKzM5KScsXG4gIEtSOiAnU291dGggS29yZWEgKCs4MiknLFxuICBOQzogJ05ldyBDYWxlZG9uaWEgKCs2ODcpJyxcbiAgTlo6ICdOZXcgWmVhbGFuZCAoKzY0KScsXG4gIE9NOiAnT21hbiAoKzk2OCknLFxuICBQSDogJ1BoaWxpcHBpbmVzICgrNjMpJyxcbiAgUFQ6ICdQb3J0dWdhbCAoKzM1MSknLFxuICBRQTogJ1FhdGFyICgrOTc0KScsXG4gIFNFOiAnU3dlZGVuICgrNDYpJyxcbiAgU0c6ICdTaW5nYXBvcmUgKCs2NSknLFxuICBUSDogJ1RoYWlsYW5kICgrNjYpJyxcbiAgVVM6ICdVbml0ZWQgU3RhdGVzICgrMSknLFxuICBaQTogJ1NvdXRoIEFmcmljYSAoKzI3KScsXG59O1xuXG5leHBvcnQgY29uc3QgcGhvbmVPcHRpb25zID0gT2JqZWN0LmtleXMoc3VwcG9ydGVkTnVtYmVycykubWFwKChrZXkpID0+ICh7XG4gIHZhbHVlOiBrZXksXG4gIGxhYmVsOiBzdXBwb3J0ZWROdW1iZXJzW2tleV0sXG59KSk7XG5cbmV4cG9ydCBjb25zdCBhZGRyZXNzQ29tcG9uZW50c1NldHRpbmdzQmFja2VuZDogYW55ID0ge1xuICBhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzE6ICdzaG9ydE5hbWUnLFxuICBhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzI6ICdzaG9ydE5hbWUnLFxuICBjb3VudHJ5OiAnc2hvcnROYW1lJyxcbiAgZXN0YWJsaXNobWVudDogJ2xvbmdOYW1lJyxcbiAgZmxvb3I6ICdzaG9ydE5hbWUnLFxuICBsb2NhbGl0eTogJ2xvbmdOYW1lJyxcbiAgcG9zdGFsX2NvZGU6ICdzaG9ydE5hbWUnLFxuICBwcmVtaXNlOiAnc2hvcnROYW1lJyxcbiAgcm9vbTogJ2xvbmdOYW1lJyxcbiAgcm91dGU6ICdzaG9ydE5hbWUnLFxuICBzdHJlZXRfbnVtYmVyOiAnc2hvcnROYW1lJyxcbiAgc3VibG9jYWxpdHk6ICdsb25nTmFtZScsXG4gIHN1YnByZW1pc2U6ICdzaG9ydE5hbWUnLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdvb2dsZVBsYWNlc1Jlc3VsdEFzTmV3QWRkcmVzcyhwbGFjZURldGFpbHM6IGFueSkge1xuICBjb25zdCBhZGRyZXNzQ29tcG9uZW50cyA9IHBsYWNlRGV0YWlscz8uYWRkcmVzc0NvbXBvbmVudHMgfHwgW107XG4gIGNvbnN0IG5hbWUgPSBwbGFjZURldGFpbHM/Lm5hbWUgfHwgJyc7XG4gIGNvbnN0IGFkZHJlc3MgPSB7XG4gICAgY2l0eTogJycsXG4gICAgY291bnRyeTogJycsXG4gICAgbGluZU9uZTogbmFtZSA/IG5hbWUgOiAnJyxcbiAgICBsaW5lVHdvOiAnJyxcbiAgICBwb3N0Y29kZTogJycsXG4gICAgc3RhdGU6ICcnLFxuICB9O1xuXG4gIGlmIChhZGRyZXNzQ29tcG9uZW50cyAmJiBhZGRyZXNzQ29tcG9uZW50cy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRyZXNzQ29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYWRkckNvbXBvbmVudCA9IGFkZHJlc3NDb21wb25lbnRzW2ldO1xuICAgICAgY29uc3QgYWRkclR5cGVzID0gYWRkckNvbXBvbmVudC50eXBlcztcbiAgICAgIFxuICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVsZXZhbnQgdHlwZSB0aGF0IHdlIGhhdmUgYSBzZXR0aW5nIGZvclxuICAgICAgbGV0IGFkZHJUeXBlID0gbnVsbDtcbiAgICAgIGxldCBjb21wb25lbnRTZXR0aW5nID0gbnVsbDtcbiAgICAgIFxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIGFkZHJUeXBlcykge1xuICAgICAgICBpZiAoYWRkcmVzc0NvbXBvbmVudHNTZXR0aW5nc0JhY2tlbmRbdHlwZV0pIHtcbiAgICAgICAgICBhZGRyVHlwZSA9IHR5cGU7XG4gICAgICAgICAgY29tcG9uZW50U2V0dGluZyA9IGFkZHJlc3NDb21wb25lbnRzU2V0dGluZ3NCYWNrZW5kW3R5cGVdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnRTZXR0aW5nICYmIGFkZHJUeXBlKSB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NWYWwgPSBhZGRyQ29tcG9uZW50W2NvbXBvbmVudFNldHRpbmddO1xuICAgICAgICBzd2l0Y2ggKGFkZHJUeXBlKSB7XG4gICAgICAgICAgY2FzZSAnZXN0YWJsaXNobWVudCc6XG4gICAgICAgICAgY2FzZSAncm9vbSc6XG4gICAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgIGNhc2UgJ3N0cmVldF9udW1iZXInOlxuICAgICAgICAgIGNhc2UgJ3ByZW1pc2UnOlxuICAgICAgICAgIGNhc2UgJ3N1YnByZW1pc2UnOlxuICAgICAgICAgIGNhc2UgJ3JvdXRlJzpcbiAgICAgICAgICAgIGNvbnN0IG9sZExpbmVPbmUgPSBhZGRyZXNzLmxpbmVPbmU7XG4gICAgICAgICAgICBhZGRyZXNzLmxpbmVPbmUgPSBvbGRMaW5lT25lLmluY2x1ZGVzKGFkZHJlc3NWYWwpID9cbiAgICAgICAgICAgICAgb2xkTGluZU9uZSA6IGAke29sZExpbmVPbmV9ICR7YWRkcmVzc1ZhbH1gLnRyaW0oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xvY2FsaXR5JzpcbiAgICAgICAgICBjYXNlICdzdWJsb2NhbGl0eSc6XG4gICAgICAgICAgICBjb25zdCBvbGRDaXR5ID0gYWRkcmVzcy5jaXR5ID8gYCR7YWRkcmVzcy5jaXR5fSBgIDogJyc7XG4gICAgICAgICAgICBhZGRyZXNzLmNpdHkgPSAob2xkQ2l0eSArIGFkZHJlc3NWYWwpLnRyaW0oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMSc6XG5cbiAgICAgICAgICAgIGFkZHJlc3Muc3RhdGUgPSBhZGRyZXNzVmFsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8yJzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2NvdW50cnknOlxuXG4gICAgICAgICAgICBhZGRyZXNzLmNvdW50cnkgPSBhZGRyZXNzVmFsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncG9zdGFsX2NvZGUnOlxuICAgICAgICAgICAgYWRkcmVzcy5wb3N0Y29kZSA9IGFkZHJlc3NWYWw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBsaW5lIG9uZSBpZiBpdCdzIGVtcHR5IGFuZCB3ZSBoYXZlIGEgZm9ybWF0dGVkIGFkZHJlc3NcbiAgICBpZiAoIWFkZHJlc3MubGluZU9uZS50cmltKCkgJiYgcGxhY2VEZXRhaWxzPy5mb3JtYXR0ZWRBZGRyZXNzKSB7XG4gICAgICAvLyBUcnkgdG8gZXh0cmFjdCBzdHJlZXQgYWRkcmVzcyBmcm9tIGZvcm1hdHRlZCBhZGRyZXNzXG4gICAgICBjb25zdCBwYXJ0cyA9IHBsYWNlRGV0YWlscy5mb3JtYXR0ZWRBZGRyZXNzLnNwbGl0KCcsJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICBhZGRyZXNzLmxpbmVPbmUgPSBwYXJ0c1swXS50cmltKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZHJlc3NJbk9uZUxpbmUoYWRkcmVzczogYW55KSB7XG4gIGNvbnN0IGEgPSBhZGRyZXNzID8gYWRkcmVzcyA6IHt9O1xuICBjb25zdCB7XG4gICAgY2l0eSxcbiAgICBjb3VudHJ5LFxuICAgIGxpbmVPbmUsXG4gICAgbGluZVR3byxcbiAgICBwb3N0Y29kZSxcbiAgICBzdGF0ZVxuICB9ID0gYTtcbiAgY29uc3QgbDEgPSBsaW5lT25lID8gYCR7bGluZU9uZX0gYCA6ICcnO1xuICBjb25zdCBsMiA9IGxpbmVUd28gPyBgJHtsaW5lVHdvfSBgIDogJyc7XG4gIGNvbnN0IGMgPSBjaXR5ID8gYCR7Y2l0eX0gYCA6ICcnO1xuICBjb25zdCBzID0gc3RhdGUgPyBgJHtzdGF0ZX0gYCA6ICcnO1xuICBjb25zdCBwID0gcG9zdGNvZGUgPyBgJHtwb3N0Y29kZX0gYCA6ICcnO1xuICBjb25zdCBjb3VudHJ5RnVsbCA9IGNvdW50cnkgPyBpc29Db3VudHJpZXNbY291bnRyeV0gOiAnJztcbiAgcmV0dXJuIGwxICsgbDIgKyBjICsgcyArIHAgKyBjb3VudHJ5RnVsbDtcbn1cblxuZXhwb3J0IGVudW0gRmllbGRUeXBlIHtcbiAgVEVYVF9JTlBVVCA9IDEsXG4gIFNFTEVDVCA9IDIsXG4gIEZJTEVfVVBMT0FEID0gMyxcbiAgVEVYVF9BUkVBID0gNCxcbiAgTlVNQkVSX0lOUFVUID0gNSxcbiAgQ0hFQ0tCT1ggPSA2LFxuICBSQURJTyA9IDcsXG4gIEZJRUxEX0lOU1RSVUNUSU9OUyA9IDgsXG4gIElNQUdFX1NFTEVDVCA9IDksXG4gIENPTE9VUl9QSUNLRVIgPSAxMCxcbiAgQ09MT1VSX1NFTEVDVCA9IDExLFxuICBUVVJOQVJPVU5EX1RJTUUgPSAxMixcbiAgQ09MT1VSX0VYVFJBQ1QgPSAxMyxcbiAgQVJFQSA9IDE0LFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTZWxlY3RhYmxlKGZpZWxkVHlwZTogbnVtYmVyKSB7XG4gIHJldHVybiBbXG4gICAgRmllbGRUeXBlLlNFTEVDVCxcbiAgICBGaWVsZFR5cGUuQ0hFQ0tCT1gsXG4gICAgRmllbGRUeXBlLlJBRElPLFxuICAgIEZpZWxkVHlwZS5JTUFHRV9TRUxFQ1QsXG4gICAgRmllbGRUeXBlLkNPTE9VUl9TRUxFQ1QsXG4gICAgRmllbGRUeXBlLlRVUk5BUk9VTkRfVElNRSxcbiAgICBGaWVsZFR5cGUuQ09MT1VSX0VYVFJBQ1QsXG4gIF0uaW5jbHVkZXMoZmllbGRUeXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5zdHJ1Y3Rpb25zVHlwZShmaWVsZFR5cGU6IG51bWJlcikge1xuICByZXR1cm4gU3RyaW5nKEZpZWxkVHlwZS5GSUVMRF9JTlNUUlVDVElPTlMpID09PSBTdHJpbmcoZmllbGRUeXBlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvdW50cnlEZWZhdWx0RGljdCA9IChjdXJyZW5jeTogc3RyaW5nKSA9PiB7XG4gIHJldHVybiB7Y3VycmVuY3k6IGN1cnJlbmN5fTtcbn07XG4gIFxuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZENvdW50cnlEZWZhdWx0czogYW55ID0ge1xuICBBRTogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgQVU6IGNvdW50cnlEZWZhdWx0RGljdCgnQVVEJyksXG4gIEJIOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxuICBDSDogY291bnRyeURlZmF1bHREaWN0KCdDTlknKSxcbiAgREs6IGNvdW50cnlEZWZhdWx0RGljdCgnRVVSJyksXG4gIEVTOiBjb3VudHJ5RGVmYXVsdERpY3QoJ0VVUicpLFxuICBGUjogY291bnRyeURlZmF1bHREaWN0KCdFVVInKSxcbiAgR0I6IGNvdW50cnlEZWZhdWx0RGljdCgnR0JQJyksXG4gIEhLOiBjb3VudHJ5RGVmYXVsdERpY3QoJ0hLRCcpLFxuICBJRDogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgSU46IGNvdW50cnlEZWZhdWx0RGljdCgnSU5SJyksXG4gIElUOiBjb3VudHJ5RGVmYXVsdERpY3QoJ0VVUicpLFxuICBLUjogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgTkM6IGNvdW50cnlEZWZhdWx0RGljdCgnVVNEJyksXG4gIE5aOiBjb3VudHJ5RGVmYXVsdERpY3QoJ05aRCcpLFxuICBPTTogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgUEg6IGNvdW50cnlEZWZhdWx0RGljdCgnVVNEJyksXG4gIFBUOiBjb3VudHJ5RGVmYXVsdERpY3QoJ0VVUicpLFxuICBRQTogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgU0U6IGNvdW50cnlEZWZhdWx0RGljdCgnVVNEJyksXG4gIFNHOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1NHRCcpLFxuICBUSDogY291bnRyeURlZmF1bHREaWN0KCdVU0QnKSxcbiAgVVM6IGNvdW50cnlEZWZhdWx0RGljdCgnVVNEJyksXG4gIFpBOiBjb3VudHJ5RGVmYXVsdERpY3QoJ1VTRCcpLFxufTtcbiAgXG5leHBvcnQgY29uc3Qgc3VwcG9ydGVkQ291bnRyeURlZmF1bHRzV2l0aERlZmF1bHQgPSAoY291bnRyeUNvZGU6IGFueSkgPT4ge1xuICBjb25zdCBkZWZhdWx0Q291bnRyeVZhbHVlcyA9IHN1cHBvcnRlZENvdW50cnlEZWZhdWx0c1tjb3VudHJ5Q29kZV07XG4gIHJldHVybiBkZWZhdWx0Q291bnRyeVZhbHVlcyA/IGRlZmF1bHRDb3VudHJ5VmFsdWVzIDogc3VwcG9ydGVkQ291bnRyeURlZmF1bHRzLkFVO1xufTtcblxuaW50ZXJmYWNlIENsaWVudEZpbGVBbmRPYmplY3RJZCB7XG4gIGZpbGU/OiBhbnk7XG4gIG9iamVjdElkPzogc3RyaW5nO1xuICBpZD86IHN0cmluZyB8IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNGaWxlUmVmKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdmFsdWUuaWQgIT0gbnVsbCAmJiB2YWx1ZS5pZCAhPT0gJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNsaWVudEZpbGVzKGNsaWVudEZpbGVzOiBDbGllbnRGaWxlQW5kT2JqZWN0SWRbXSA9IFtdKSB7XG4gIHJldHVybiBjbGllbnRGaWxlc1xuICAgIC5tYXAoKGNsaWVudEZpbGU6IENsaWVudEZpbGVBbmRPYmplY3RJZCkgPT4ge1xuICAgICAgaWYgKCFjbGllbnRGaWxlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKGlzRmlsZVJlZihjbGllbnRGaWxlLmZpbGUpKSByZXR1cm4gY2xpZW50RmlsZS5maWxlO1xuICAgICAgaWYgKGlzRmlsZVJlZihjbGllbnRGaWxlKSkgcmV0dXJuIHsgaWQ6IGNsaWVudEZpbGUuaWQgfTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSlcbiAgICAuZmlsdGVyKChmaWxlKSA9PiBmaWxlICE9IG51bGwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ2xpZW50VG9Pd25EcmFmdChqb2I6IGFueSkge1xuICBjb25zdCB7IG93bkRyYWZ0cyB9ID0gam9iO1xuICBpZiAoam9iLm93bkRyYWZ0cyAmJiBqb2Iub3duRHJhZnRzLmxlbmd0aCkge1xuICAgIGpvYi5vd25EcmFmdHNbMF0uZGVzaWduZXIgPSBqb2IuY2xpZW50O1xuICB9XG4gIHJldHVybiBqb2I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VjY2Vzc1JlZGlyZWN0RXh0cmFzIHtcbiAgLyoqIEludm9pY2UgaWQgZm9yIHBhaWQgY2hlY2tvdXQsIG9yIGpvYiBpZCBmb3IgcXVvdGUgcmVxdWVzdHMuICovXG4gIGludm9pY2VJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGw7XG4gIGVtYWlsPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBEZWNvZGUvbm9ybWFsaXplIGEgcmVkaXJlY3QgYmFzZSBVUkwgZnJvbSBlbWJlZCBzY3JpcHQgcGFyYW1zLlxuICogSGFuZGxlcyBwZXJjZW50LWVuY29kaW5nLCBsZWdhY3kgJTI3IHdyYXBwZXJzLCBhbmQgdHJhaWxpbmcganVuay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJlZGlyZWN0QmFzZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBjbGVhbiA9IFN0cmluZyh1cmwgfHwgJycpXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC8lMjcvZywgJycpXG4gICAgLnJlcGxhY2UoLyU5MS9nLCAnJylcbiAgICAucmVwbGFjZSgvJTkyL2csICcnKVxuICAgIC5yZXBsYWNlKC8lOTMvZywgJycpXG4gICAgLnJlcGxhY2UoLyU5NC9nLCAnJylcbiAgICAucmVwbGFjZSgvXlsnXCJdK3xbJ1wiXSskL2csICcnKTtcblxuICAvLyBGdWxseSBkZWNvZGUgc28gZW5jb2RlZCBhYnNvbHV0ZSBVUkxzIGFyZSBub3QgdHJlYXRlZCBhcyByZWxhdGl2ZSBwYXRocy5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCEvJVswLTlBLUZhLWZdezJ9Ly50ZXN0KGNsZWFuKSkgYnJlYWs7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KGNsZWFuKTtcbiAgICAgIGlmIChkZWNvZGVkID09PSBjbGVhbikgYnJlYWs7XG4gICAgICBjbGVhbiA9IGRlY29kZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRFbWFpbChjbGllbnQ6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVtYWlsID0gY2xpZW50Py5lbWFpbEFkZHJlc3Nlcz8uWzBdPy5lbWFpbEFkZHJlc3M7XG4gIHJldHVybiB0eXBlb2YgZW1haWwgPT09ICdzdHJpbmcnICYmIGVtYWlsLnRyaW0oKSA/IGVtYWlsLnRyaW0oKSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgcG9zdC1jaGVja291dC9xdW90ZSByZWRpcmVjdCBVUkwgd2l0aCBwcm9wZXIgcXVlcnkgc2VwYXJhdG9ycy5cbiAqIEFsd2F5cyBzYWZlIHdoZW4gdGhlIGJhc2UgVVJMIG9taXRzIGEgdHJhaWxpbmcgXCI/XCIgLyBcIiZcIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3VjY2Vzc1JlZGlyZWN0VXJsKFxuICB1cmw6IHN0cmluZyxcbiAgcmVkaXJlY3RXaXRoVmFsdWU/OiBib29sZWFuLFxuICB2YWx1ZT86IGFueSxcbiAgZXh0cmFzOiBTdWNjZXNzUmVkaXJlY3RFeHRyYXMgPSB7fSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2UgPSBub3JtYWxpemVSZWRpcmVjdEJhc2VVcmwodXJsKTtcbiAgaWYgKCFiYXNlKSByZXR1cm4gYmFzZTtcblxuICBjb25zdCB0YXJnZXQgPSBuZXcgVVJMKFxuICAgIGJhc2UsXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6ICdodHRwczovL3BsYWNlaG9sZGVyLmludmFsaWQvJyxcbiAgKTtcblxuICBpZiAoXG4gICAgcmVkaXJlY3RXaXRoVmFsdWUgJiZcbiAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB2YWx1ZSAhPT0gJydcbiAgKSB7XG4gICAgdGFyZ2V0LnNlYXJjaFBhcmFtcy5zZXQoJ21lcmNoaVZhbHVlJywgU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBpZiAoZXh0cmFzLmludm9pY2VJZCAhPT0gdW5kZWZpbmVkICYmIGV4dHJhcy5pbnZvaWNlSWQgIT09IG51bGwgJiYgZXh0cmFzLmludm9pY2VJZCAhPT0gJycpIHtcbiAgICB0YXJnZXQuc2VhcmNoUGFyYW1zLnNldCgnaW52b2ljZUlkJywgU3RyaW5nKGV4dHJhcy5pbnZvaWNlSWQpKTtcbiAgfVxuXG4gIGlmIChleHRyYXMuZW1haWwpIHtcbiAgICB0YXJnZXQuc2VhcmNoUGFyYW1zLnNldCgnZW1haWwnLCBTdHJpbmcoZXh0cmFzLmVtYWlsKSk7XG4gIH1cblxuICAvLyBQcmVzZXJ2ZSBwcm90b2NvbC1yZWxhdGl2ZSByZWRpcmVjdCB0YXJnZXRzICgvL2V4YW1wbGUuY29tLy4uLikuXG4gIGlmIChiYXNlLnN0YXJ0c1dpdGgoJy8vJykpIHtcbiAgICByZXR1cm4gYC8vJHt0YXJnZXQuaG9zdH0ke3RhcmdldC5wYXRobmFtZX0ke3RhcmdldC5zZWFyY2h9JHt0YXJnZXQuaGFzaH1gO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldC50b1N0cmluZygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkaXJlY3RPblN1Y2Nlc3MoXG4gIHVybDogc3RyaW5nLFxuICByZWRpcmVjdFdpdGhWYWx1ZT86IGJvb2xlYW4sXG4gIHZhbHVlPzogYW55LFxuICBleHRyYXM6IFN1Y2Nlc3NSZWRpcmVjdEV4dHJhcyA9IHt9LFxuKSB7XG4gIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYnVpbGRTdWNjZXNzUmVkaXJlY3RVcmwoXG4gICAgdXJsLFxuICAgIHJlZGlyZWN0V2l0aFZhbHVlLFxuICAgIHZhbHVlLFxuICAgIGV4dHJhcyxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBU0EsV0FBVyxFQUFFQyxJQUFJLFFBQVEsU0FBUztBQUUzQyxPQUFPLElBQU1DLFlBQWlCLEdBQUc7RUFDL0JDLEVBQUUsRUFBRSxhQUFhO0VBQ2pCQyxFQUFFLEVBQUUs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