@payloadcms/db-postgres 0.7.1 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. package/dist/count.d.ts +3 -0
  2. package/dist/count.d.ts.map +1 -0
  3. package/dist/count.js +68 -0
  4. package/dist/create.d.ts.map +1 -1
  5. package/dist/create.js +7 -9
  6. package/dist/createGlobal.d.ts +1 -1
  7. package/dist/createGlobal.d.ts.map +1 -1
  8. package/dist/createGlobal.js +8 -10
  9. package/dist/createGlobalVersion.d.ts +1 -1
  10. package/dist/createGlobalVersion.d.ts.map +1 -1
  11. package/dist/createGlobalVersion.js +12 -14
  12. package/dist/createVersion.d.ts.map +1 -1
  13. package/dist/createVersion.js +22 -19
  14. package/dist/deleteMany.js +6 -8
  15. package/dist/deleteOne.d.ts.map +1 -1
  16. package/dist/deleteOne.js +6 -3
  17. package/dist/deleteVersions.d.ts.map +1 -1
  18. package/dist/deleteVersions.js +7 -8
  19. package/dist/find/buildFindManyArgs.js +3 -3
  20. package/dist/find/findMany.js +2 -2
  21. package/dist/find/traverseFields.d.ts.map +1 -1
  22. package/dist/find/traverseFields.js +23 -11
  23. package/dist/find.d.ts.map +1 -1
  24. package/dist/find.js +10 -11
  25. package/dist/findGlobal.d.ts.map +1 -1
  26. package/dist/findGlobal.js +7 -9
  27. package/dist/findGlobalVersions.d.ts.map +1 -1
  28. package/dist/findGlobalVersions.js +7 -8
  29. package/dist/findOne.d.ts +1 -1
  30. package/dist/findOne.d.ts.map +1 -1
  31. package/dist/findOne.js +9 -10
  32. package/dist/findVersions.d.ts.map +1 -1
  33. package/dist/findVersions.js +7 -8
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +7 -1
  36. package/dist/init.d.ts.map +1 -1
  37. package/dist/init.js +28 -15
  38. package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
  39. package/dist/queries/getTableColumnFromPath.js +148 -42
  40. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  41. package/dist/queries/sanitizeQueryValue.js +5 -2
  42. package/dist/queryDrafts.d.ts.map +1 -1
  43. package/dist/queryDrafts.js +7 -8
  44. package/dist/schema/build.d.ts +2 -1
  45. package/dist/schema/build.d.ts.map +1 -1
  46. package/dist/schema/build.js +19 -14
  47. package/dist/schema/getTableName.d.ts +32 -0
  48. package/dist/schema/getTableName.d.ts.map +1 -0
  49. package/dist/schema/getTableName.js +43 -0
  50. package/dist/schema/traverseFields.d.ts +2 -1
  51. package/dist/schema/traverseFields.d.ts.map +1 -1
  52. package/dist/schema/traverseFields.js +54 -18
  53. package/dist/schema/validateExistingBlockIsIdentical.d.ts +2 -1
  54. package/dist/schema/validateExistingBlockIsIdentical.d.ts.map +1 -1
  55. package/dist/schema/validateExistingBlockIsIdentical.js +14 -8
  56. package/dist/transform/write/blocks.d.ts +2 -2
  57. package/dist/transform/write/blocks.d.ts.map +1 -1
  58. package/dist/transform/write/blocks.js +4 -4
  59. package/dist/transform/write/traverseFields.d.ts +2 -2
  60. package/dist/transform/write/traverseFields.d.ts.map +1 -1
  61. package/dist/transform/write/traverseFields.js +34 -25
  62. package/dist/types.d.ts +13 -0
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/update.d.ts.map +1 -1
  65. package/dist/update.js +7 -4
  66. package/dist/updateGlobal.d.ts +1 -1
  67. package/dist/updateGlobal.d.ts.map +1 -1
  68. package/dist/updateGlobal.js +9 -11
  69. package/dist/updateGlobalVersion.d.ts.map +1 -1
  70. package/dist/updateGlobalVersion.js +9 -5
  71. package/dist/updateVersion.d.ts.map +1 -1
  72. package/dist/updateVersion.js +9 -5
  73. package/dist/upsertRow/index.d.ts.map +1 -1
  74. package/dist/upsertRow/index.js +7 -6
  75. package/dist/upsertRow/insertArrays.d.ts.map +1 -1
  76. package/dist/upsertRow/insertArrays.js +3 -3
  77. package/dist/upsertRow/types.d.ts +1 -1
  78. package/dist/upsertRow/types.d.ts.map +1 -1
  79. package/package.json +3 -3
@@ -16,6 +16,7 @@ const _tosnakecase = /*#__PURE__*/ _interop_require_default(require("to-snake-ca
16
16
  const _hasLocalesTable = require("../utilities/hasLocalesTable");
17
17
  const _build = require("./build");
18
18
  const _createIndex = require("./createIndex");
19
+ const _getTableName = require("./getTableName");
19
20
  const _idToUUID = require("./idToUUID");
20
21
  const _parentIDColumnMap = require("./parentIDColumnMap");
21
22
  const _validateExistingBlockIsIdentical = require("./validateExistingBlockIsIdentical");
@@ -24,7 +25,8 @@ function _interop_require_default(obj) {
24
25
  default: obj
25
26
  };
26
27
  }
27
- const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts, columnPrefix, columns, disableNotNull, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName })=>{
28
+ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts, columnPrefix, columns, disableNotNull, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, versions })=>{
29
+ const throwValidationError = true;
28
30
  let hasLocalizedField = false;
29
31
  let hasLocalizedRelationshipField = false;
30
32
  let hasManyTextField = false;
@@ -143,7 +145,14 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
143
145
  case 'radio':
144
146
  case 'select':
145
147
  {
146
- const enumName = `enum_${newTableName}_${(0, _tosnakecase.default)(field.name)}`;
148
+ const enumName = (0, _getTableName.getTableName)({
149
+ adapter,
150
+ config: field,
151
+ parentTableName: newTableName,
152
+ prefix: `enum_${newTableName}_`,
153
+ target: 'enumName',
154
+ throwValidationError
155
+ });
147
156
  adapter.enums[enumName] = (0, _pgcore.pgEnum)(enumName, field.options.map((option)=>{
148
157
  if ((0, _types.optionIsObject)(option)) {
149
158
  return option.value;
@@ -151,7 +160,13 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
151
160
  return option;
152
161
  }));
153
162
  if (field.type === 'select' && field.hasMany) {
154
- const selectTableName = `${newTableName}_${(0, _tosnakecase.default)(field.name)}`;
163
+ const selectTableName = (0, _getTableName.getTableName)({
164
+ adapter,
165
+ config: field,
166
+ parentTableName: newTableName,
167
+ prefix: `${newTableName}_`,
168
+ throwValidationError
169
+ });
155
170
  const baseColumns = {
156
171
  order: (0, _pgcore.integer)('order').notNull(),
157
172
  parent: _parentIDColumnMap.parentIDColumnMap[parentIDColType]('parent_id').references(()=>adapter.tables[parentTableName].id, {
@@ -177,7 +192,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
177
192
  disableNotNull,
178
193
  disableUnique,
179
194
  fields: [],
180
- tableName: selectTableName
195
+ tableName: selectTableName,
196
+ versions
181
197
  });
182
198
  relationsToBuild.set(fieldName, selectTableName);
183
199
  const selectTableRelations = (0, _drizzleorm.relations)(adapter.tables[selectTableName], ({ one })=>{
@@ -207,7 +223,13 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
207
223
  case 'array':
208
224
  {
209
225
  const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
210
- const arrayTableName = `${newTableName}_${(0, _tosnakecase.default)(field.name)}`;
226
+ const arrayTableName = (0, _getTableName.getTableName)({
227
+ adapter,
228
+ config: field,
229
+ parentTableName: newTableName,
230
+ prefix: `${newTableName}_`,
231
+ throwValidationError
232
+ });
211
233
  const baseColumns = {
212
234
  _order: (0, _pgcore.integer)('_order').notNull(),
213
235
  _parentID: _parentIDColumnMap.parentIDColumnMap[parentIDColType]('_parent_id').references(()=>adapter.tables[parentTableName].id, {
@@ -233,7 +255,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
233
255
  rootRelationships: relationships,
234
256
  rootTableIDColType,
235
257
  rootTableName,
236
- tableName: arrayTableName
258
+ tableName: arrayTableName,
259
+ versions
237
260
  });
238
261
  if (subHasManyTextField) {
239
262
  if (!hasManyTextField || subHasManyTextField === 'index') hasManyTextField = subHasManyTextField;
@@ -254,7 +277,7 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
254
277
  })
255
278
  };
256
279
  if ((0, _hasLocalesTable.hasLocalesTable)(field.fields)) {
257
- result._locales = many(adapter.tables[`${arrayTableName}_locales`]);
280
+ result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`]);
258
281
  }
259
282
  subRelationsToBuild.forEach((val, key)=>{
260
283
  result[key] = many(adapter.tables[val]);
@@ -268,7 +291,13 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
268
291
  {
269
292
  const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
270
293
  field.blocks.forEach((block)=>{
271
- const blockTableName = `${rootTableName}_blocks_${(0, _tosnakecase.default)(block.slug)}`;
294
+ const blockTableName = (0, _getTableName.getTableName)({
295
+ adapter,
296
+ config: block,
297
+ parentTableName: rootTableName,
298
+ prefix: `${rootTableName}_blocks_`,
299
+ throwValidationError
300
+ });
272
301
  if (!adapter.tables[blockTableName]) {
273
302
  const baseColumns = {
274
303
  _order: (0, _pgcore.integer)('_order').notNull(),
@@ -297,7 +326,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
297
326
  rootRelationships: relationships,
298
327
  rootTableIDColType,
299
328
  rootTableName,
300
- tableName: blockTableName
329
+ tableName: blockTableName,
330
+ versions
301
331
  });
302
332
  if (subHasManyTextField) {
303
333
  if (!hasManyTextField || subHasManyTextField === 'index') hasManyTextField = subHasManyTextField;
@@ -317,7 +347,7 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
317
347
  })
318
348
  };
319
349
  if ((0, _hasLocalesTable.hasLocalesTable)(block.fields)) {
320
- result._locales = many(adapter.tables[`${blockTableName}_locales`]);
350
+ result._locales = many(adapter.tables[`${blockTableName}${adapter.localesSuffix}`]);
321
351
  }
322
352
  subRelationsToBuild.forEach((val, key)=>{
323
353
  result[key] = many(adapter.tables[val]);
@@ -325,14 +355,16 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
325
355
  return result;
326
356
  });
327
357
  adapter.relations[`relations_${blockTableName}`] = blockTableRelations;
328
- } else if (process.env.NODE_ENV !== 'production') {
358
+ } else if (process.env.NODE_ENV !== 'production' && !versions) {
329
359
  (0, _validateExistingBlockIsIdentical.validateExistingBlockIsIdentical)({
330
360
  block,
331
361
  localized: field.localized,
332
362
  rootTableName,
333
- table: adapter.tables[blockTableName]
363
+ table: adapter.tables[blockTableName],
364
+ tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`]
334
365
  });
335
366
  }
367
+ adapter.blockTableNames[`${rootTableName}.${(0, _tosnakecase.default)(block.slug)}`] = blockTableName;
336
368
  rootRelationsToBuild.set(`_blocks_${block.slug}`, blockTableName);
337
369
  });
338
370
  break;
@@ -362,7 +394,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
362
394
  relationships,
363
395
  rootRelationsToBuild,
364
396
  rootTableIDColType,
365
- rootTableName
397
+ rootTableName,
398
+ versions
366
399
  });
367
400
  if (groupHasLocalizedField) hasLocalizedField = true;
368
401
  if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
@@ -394,7 +427,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
394
427
  relationships,
395
428
  rootRelationsToBuild,
396
429
  rootTableIDColType,
397
- rootTableName
430
+ rootTableName,
431
+ versions
398
432
  });
399
433
  if (groupHasLocalizedField) hasLocalizedField = true;
400
434
  if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
@@ -431,7 +465,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
431
465
  relationships,
432
466
  rootRelationsToBuild,
433
467
  rootTableIDColType,
434
- rootTableName
468
+ rootTableName,
469
+ versions
435
470
  });
436
471
  if (tabHasLocalizedField) hasLocalizedField = true;
437
472
  if (tabHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
@@ -460,13 +495,14 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
460
495
  indexes,
461
496
  localesColumns,
462
497
  localesIndexes,
463
- newTableName: parentTableName,
498
+ newTableName,
464
499
  parentTableName,
465
500
  relationsToBuild,
466
501
  relationships,
467
502
  rootRelationsToBuild,
468
503
  rootTableIDColType,
469
- rootTableName
504
+ rootTableName,
505
+ versions
470
506
  });
471
507
  if (rowHasLocalizedField) hasLocalizedField = true;
472
508
  if (rowHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
@@ -505,4 +541,4 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
505
541
  };
506
542
  };
507
543
 
508
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIFBnTnVtZXJpY0J1aWxkZXIsXG4gIFBnVVVJREJ1aWxkZXIsXG4gIFBnVmFyY2hhckJ1aWxkZXIsXG4gIGJvb2xlYW4sXG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBqc29uYixcbiAgbnVtZXJpYyxcbiAgcGdFbnVtLFxuICB0ZXh0LFxuICB0aW1lc3RhbXAsXG4gIHZhcmNoYXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgb3B0aW9uSXNPYmplY3QgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbnMsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IGhhc0xvY2FsZXNUYWJsZSB9IGZyb20gJy4uL3V0aWxpdGllcy9oYXNMb2NhbGVzVGFibGUnXG5pbXBvcnQgeyBidWlsZFRhYmxlIH0gZnJvbSAnLi9idWlsZCdcbmltcG9ydCB7IGNyZWF0ZUluZGV4IH0gZnJvbSAnLi9jcmVhdGVJbmRleCdcbmltcG9ydCB7IGlkVG9VVUlEIH0gZnJvbSAnLi9pZFRvVVVJRCdcbmltcG9ydCB7IHBhcmVudElEQ29sdW1uTWFwIH0gZnJvbSAnLi9wYXJlbnRJRENvbHVtbk1hcCdcbmltcG9ydCB7IHZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIH0gZnJvbSAnLi92YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCdcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYnVpbGROdW1iZXJzOiBib29sZWFuXG4gIGJ1aWxkUmVsYXRpb25zaGlwczogYm9vbGVhblxuICBidWlsZFRleHRzOiBib29sZWFuXG4gIGNvbHVtblByZWZpeD86IHN0cmluZ1xuICBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGRpc2FibGVOb3ROdWxsOiBib29sZWFuXG4gIGRpc2FibGVVbmlxdWU/OiBib29sZWFuXG4gIGZpZWxkUHJlZml4Pzogc3RyaW5nXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBmb3JjZUxvY2FsaXplZD86IGJvb2xlYW5cbiAgaW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+XG4gIGxvY2FsZXNDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGxvY2FsZXNJbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlcj5cbiAgbmV3VGFibGVOYW1lOiBzdHJpbmdcbiAgcGFyZW50VGFibGVOYW1lOiBzdHJpbmdcbiAgcmVsYXRpb25zVG9CdWlsZDogTWFwPHN0cmluZywgc3RyaW5nPlxuICByZWxhdGlvbnNoaXBzOiBTZXQ8c3RyaW5nPlxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFRhYmxlSURDb2xUeXBlOiBzdHJpbmdcbiAgcm9vdFRhYmxlTmFtZTogc3RyaW5nXG59XG5cbnR5cGUgUmVzdWx0ID0ge1xuICBoYXNMb2NhbGl6ZWRGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQ6IGJvb2xlYW5cbiAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogYm9vbGVhblxuICBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuXG4gIGhhc01hbnlUZXh0RmllbGQ6ICdpbmRleCcgfCBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCB0cmF2ZXJzZUZpZWxkcyA9ICh7XG4gIGFkYXB0ZXIsXG4gIGJ1aWxkTnVtYmVycyxcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBidWlsZFRleHRzLFxuICBjb2x1bW5QcmVmaXgsXG4gIGNvbHVtbnMsXG4gIGRpc2FibGVOb3ROdWxsLFxuICBkaXNhYmxlVW5pcXVlID0gZmFsc2UsXG4gIGZpZWxkUHJlZml4LFxuICBmaWVsZHMsXG4gIGZvcmNlTG9jYWxpemVkLFxuICBpbmRleGVzLFxuICBsb2NhbGVzQ29sdW1ucyxcbiAgbG9jYWxlc0luZGV4ZXMsXG4gIG5ld1RhYmxlTmFtZSxcbiAgcGFyZW50VGFibGVOYW1lLFxuICByZWxhdGlvbnNUb0J1aWxkLFxuICByZWxhdGlvbnNoaXBzLFxuICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGxldCBoYXNMb2NhbGl6ZWRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55VGV4dEZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhbiA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gZmFsc2VcblxuICBsZXQgcGFyZW50SURDb2xUeXBlOiBJRFR5cGUgPSAnaW50ZWdlcidcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ1VVSURCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAndXVpZCdcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ051bWVyaWNCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAnbnVtZXJpYydcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ1ZhcmNoYXJCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAndmFyY2hhcidcblxuICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICBpZiAoJ25hbWUnIGluIGZpZWxkICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpIHJldHVyblxuICAgIGxldCBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgICBsZXQgZmllbGROYW1lOiBzdHJpbmdcblxuICAgIGxldCB0YXJnZXRUYWJsZSA9IGNvbHVtbnNcbiAgICBsZXQgdGFyZ2V0SW5kZXhlcyA9IGluZGV4ZXNcblxuICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgY29sdW1uTmFtZSA9IGAke2NvbHVtblByZWZpeCB8fCAnJ30ke2ZpZWxkLm5hbWVbMF0gPT09ICdfJyA/ICdfJyA6ICcnfSR7dG9TbmFrZUNhc2UoXG4gICAgICAgIGZpZWxkLm5hbWUsXG4gICAgICApfWBcbiAgICAgIGZpZWxkTmFtZSA9IGAke2ZpZWxkUHJlZml4Py5yZXBsYWNlKCcuJywgJ18nKSB8fCAnJ30ke2ZpZWxkLm5hbWV9YFxuXG4gICAgICAvLyBJZiBmaWVsZCBpcyBsb2NhbGl6ZWQsXG4gICAgICAvLyBhZGQgdGhlIGNvbHVtbiB0byB0aGUgbG9jYWxlIHRhYmxlIGluc3RlYWQgb2YgbWFpbiB0YWJsZVxuICAgICAgaWYgKGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uICYmIChmaWVsZC5sb2NhbGl6ZWQgfHwgZm9yY2VMb2NhbGl6ZWQpKSB7XG4gICAgICAgIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICB0YXJnZXRUYWJsZSA9IGxvY2FsZXNDb2x1bW5zXG4gICAgICAgIHRhcmdldEluZGV4ZXMgPSBsb2NhbGVzSW5kZXhlc1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChmaWVsZC51bmlxdWUgfHwgZmllbGQuaW5kZXgpICYmXG4gICAgICAgICFbJ2FycmF5JywgJ2Jsb2NrcycsICdncm91cCcsICdwb2ludCcsICdyZWxhdGlvbnNoaXAnLCAndXBsb2FkJ10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiZcbiAgICAgICAgISgnaGFzTWFueScgaW4gZmllbGQgJiYgZmllbGQuaGFzTWFueSA9PT0gdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1bmlxdWUgPSBkaXNhYmxlVW5pcXVlICE9PSB0cnVlICYmIGZpZWxkLnVuaXF1ZVxuICAgICAgICBpZiAodW5pcXVlKSB7XG4gICAgICAgICAgY29uc3QgY29uc3RyYWludFZhbHVlID0gYCR7ZmllbGRQcmVmaXggfHwgJyd9JHtmaWVsZC5uYW1lfWBcbiAgICAgICAgICBpZiAoIWFkYXB0ZXIuZmllbGRDb25zdHJhaW50cz8uW3Jvb3RUYWJsZU5hbWVdKSB7XG4gICAgICAgICAgICBhZGFwdGVyLmZpZWxkQ29uc3RyYWludHNbcm9vdFRhYmxlTmFtZV0gPSB7fVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZGFwdGVyLmZpZWxkQ29uc3RyYWludHNbcm9vdFRhYmxlTmFtZV1bYCR7Y29sdW1uTmFtZX1faWR4YF0gPSBjb25zdHJhaW50VmFsdWVcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRJbmRleGVzW2Ake25ld1RhYmxlTmFtZX1fJHtmaWVsZC5uYW1lfUlkeGBdID0gY3JlYXRlSW5kZXgoe1xuICAgICAgICAgIG5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHVuaXF1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSAnaW5kZXgnXG4gICAgICAgICAgfSBlbHNlIGlmICghaGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgICAgICAgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQudW5pcXVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICdVbmlxdWUgaXMgbm90IHN1cHBvcnRlZCBpbiBQb3N0Z3JlcyBmb3IgaGFzTWFueSB0ZXh0IGZpZWxkcy4nLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gdmFyY2hhcihjb2x1bW5OYW1lKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdlbWFpbCc6XG4gICAgICBjYXNlICdjb2RlJzpcbiAgICAgIGNhc2UgJ3RleHRhcmVhJzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gdmFyY2hhcihjb2x1bW5OYW1lKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkID0gJ2luZGV4J1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC51bmlxdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgJ1VuaXF1ZSBpcyBub3Qgc3VwcG9ydGVkIGluIFBvc3RncmVzIGZvciBoYXNNYW55IG51bWJlciBmaWVsZHMuJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IG51bWVyaWMoY29sdW1uTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyaWNoVGV4dCc6XG4gICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0ganNvbmIoY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZGF0ZSc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHRpbWVzdGFtcChjb2x1bW5OYW1lLCB7XG4gICAgICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICAgICAgcHJlY2lzaW9uOiAzLFxuICAgICAgICAgIHdpdGhUaW1lem9uZTogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncG9pbnQnOiB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgIGNhc2UgJ3NlbGVjdCc6IHtcbiAgICAgICAgY29uc3QgZW51bU5hbWUgPSBgZW51bV8ke25ld1RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG5cbiAgICAgICAgYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0gPSBwZ0VudW0oXG4gICAgICAgICAgZW51bU5hbWUsXG4gICAgICAgICAgZmllbGQub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbklzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfSkgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmIGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZU5hbWUgPSBgJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuICAgICAgICAgIGNvbnN0IGJhc2VDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgICAgICAgb3JkZXI6IGludGVnZXIoJ29yZGVyJykubm90TnVsbCgpLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRJRENvbHVtbk1hcFtwYXJlbnRJRENvbFR5cGVdKCdwYXJlbnRfaWQnKVxuICAgICAgICAgICAgICAucmVmZXJlbmNlcygoKSA9PiBhZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgICAgICAgIHZhbHVlOiBhZGFwdGVyLmVudW1zW2VudW1OYW1lXSgndmFsdWUnKSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBiYXNlRXh0cmFDb25maWc6IFJlY29yZDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgICA+ID0ge1xuICAgICAgICAgICAgb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleChgJHtzZWxlY3RUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMub3JkZXIpLFxuICAgICAgICAgICAgcGFyZW50SWR4OiAoY29scykgPT4gaW5kZXgoYCR7c2VsZWN0VGFibGVOYW1lfV9wYXJlbnRfaWR4YCkub24oY29scy5wYXJlbnQpLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGJhc2VDb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJykubm90TnVsbCgpXG4gICAgICAgICAgICBiYXNlRXh0cmFDb25maWcubG9jYWxlSWR4ID0gKGNvbHMpID0+XG4gICAgICAgICAgICAgIGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fbG9jYWxlX2lkeGApLm9uKGNvbHMubG9jYWxlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLnZhbHVlID0gKGNvbHMpID0+IGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fdmFsdWVfaWR4YCkub24oY29scy52YWx1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWlsZFRhYmxlKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICAgIGRpc2FibGVOb3ROdWxsLFxuICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgIGZpZWxkczogW10sXG4gICAgICAgICAgICB0YWJsZU5hbWU6IHNlbGVjdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBzZWxlY3RUYWJsZU5hbWUpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1tzZWxlY3RUYWJsZU5hbWVdLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW3NlbGVjdFRhYmxlTmFtZV0ucGFyZW50XSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbl8ke3NlbGVjdFRhYmxlTmFtZX1gXSA9IHNlbGVjdFRhYmxlUmVsYXRpb25zXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdKGZpZWxkTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGJvb2xlYW4oY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZU5hbWUgPSBgJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICBfb3JkZXI6IGludGVnZXIoJ19vcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICBfcGFyZW50SUQ6IHBhcmVudElEQ29sdW1uTWFwW3BhcmVudElEQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgPiA9IHtcbiAgICAgICAgICBfb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleChgJHthcnJheVRhYmxlTmFtZX1fb3JkZXJfaWR4YCkub24oY29scy5fb3JkZXIpLFxuICAgICAgICAgIF9wYXJlbnRJRElkeDogKGNvbHMpID0+IGluZGV4KGAke2FycmF5VGFibGVOYW1lfV9wYXJlbnRfaWRfaWR4YCkub24oY29scy5fcGFyZW50SUQpLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGJhc2VDb2x1bW5zLl9sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ19sb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgaW5kZXgoYCR7YXJyYXlUYWJsZU5hbWV9X2xvY2FsZV9pZHhgKS5vbihjb2xzLl9sb2NhbGUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBzdWJIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogc3ViSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkOiBzdWJSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICB9ID0gYnVpbGRUYWJsZSh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZHM6IGRpc2FibGVVbmlxdWUgPyBpZFRvVVVJRChmaWVsZC5maWVsZHMpIDogZmllbGQuZmllbGRzLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogYXJyYXlUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHN1Ykhhc01hbnlUZXh0RmllbGQpIHtcbiAgICAgICAgICBpZiAoIWhhc01hbnlUZXh0RmllbGQgfHwgc3ViSGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSBzdWJIYXNNYW55VGV4dEZpZWxkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1Ykhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgICAgIGlmICghaGFzTWFueU51bWJlckZpZWxkIHx8IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHN1Ykhhc01hbnlOdW1iZXJGaWVsZFxuICAgICAgICB9XG5cbiAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBhcnJheVRhYmxlTmFtZSlcblxuICAgICAgICBjb25zdCBhcnJheVRhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKGFkYXB0ZXIudGFibGVzW2FycmF5VGFibGVOYW1lXSwgKHsgbWFueSwgb25lIH0pID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgICAgX3BhcmVudElEOiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICBmaWVsZHM6IFthZGFwdGVyLnRhYmxlc1thcnJheVRhYmxlTmFtZV0uX3BhcmVudElEXSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhhc0xvY2FsZXNUYWJsZShmaWVsZC5maWVsZHMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGFkYXB0ZXIudGFibGVzW2Ake2FycmF5VGFibGVOYW1lfV9sb2NhbGVzYF0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3ViUmVsYXRpb25zVG9CdWlsZC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtYW55KGFkYXB0ZXIudGFibGVzW3ZhbF0pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcblxuICAgICAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7YXJyYXlUYWJsZU5hbWV9YF0gPSBhcnJheVRhYmxlUmVsYXRpb25zXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYmxvY2tzJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuXG4gICAgICAgIGZpZWxkLmJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgIGNvbnN0IGJsb2NrVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fYmxvY2tzXyR7dG9TbmFrZUNhc2UoYmxvY2suc2x1Zyl9YFxuICAgICAgICAgIGlmICghYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVyOiBpbnRlZ2VyKCdfb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXJlbnRJRDogcGFyZW50SURDb2x1bW5NYXBbcm9vdFRhYmxlSURDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0uaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXRoOiB0ZXh0KCdfcGF0aCcpLm5vdE51bGwoKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXIgfCBVbmlxdWVDb25zdHJhaW50QnVpbGRlclxuICAgICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVySWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMuX29yZGVyKSxcbiAgICAgICAgICAgICAgX3BhcmVudElESWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X3BhcmVudF9pZF9pZHhgKS5vbihjb2xzLl9wYXJlbnRJRCksXG4gICAgICAgICAgICAgIF9wYXRoSWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X3BhdGhfaWR4YCkub24oY29scy5fcGF0aCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgICAgYmFzZUNvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgICAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgICAgIGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5fbG9jYWxlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogc3ViSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkOiBzdWJIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkOiBzdWJSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgfSA9IGJ1aWxkVGFibGUoe1xuICAgICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLFxuICAgICAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgICAgZmllbGRzOiBkaXNhYmxlVW5pcXVlID8gaWRUb1VVSUQoYmxvY2suZmllbGRzKSA6IGJsb2NrLmZpZWxkcyxcbiAgICAgICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogYmxvY2tUYWJsZU5hbWUsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAoc3ViSGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgICAgICAgICBpZiAoIWhhc01hbnlUZXh0RmllbGQgfHwgc3ViSGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkID0gc3ViSGFzTWFueVRleHRGaWVsZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3ViSGFzTWFueU51bWJlckZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTWFueU51bWJlckZpZWxkIHx8IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQgPSBzdWJIYXNNYW55TnVtYmVyRmllbGRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmxvY2tUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICAoeyBtYW55LCBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVsYXRpb248c3RyaW5nPj4gPSB7XG4gICAgICAgICAgICAgICAgICBfcGFyZW50SUQ6IG9uZShhZGFwdGVyLnRhYmxlc1tyb290VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IFthZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0uX3BhcmVudElEXSxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNMb2NhbGVzVGFibGUoYmxvY2suZmllbGRzKSkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0Ll9sb2NhbGVzID0gbWFueShhZGFwdGVyLnRhYmxlc1tgJHtibG9ja1RhYmxlTmFtZX1fbG9jYWxlc2BdKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN1YlJlbGF0aW9uc1RvQnVpbGQuZm9yRWFjaCgodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbWFueShhZGFwdGVyLnRhYmxlc1t2YWxdKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtibG9ja1RhYmxlTmFtZX1gXSA9IGJsb2NrVGFibGVSZWxhdGlvbnNcbiAgICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsKHtcbiAgICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAgIGxvY2FsaXplZDogZmllbGQubG9jYWxpemVkLFxuICAgICAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZC5zZXQoYF9ibG9ja3NfJHtibG9jay5zbHVnfWAsIGJsb2NrVGFibGVOYW1lKVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYic6XG4gICAgICBjYXNlICdncm91cCc6IHtcbiAgICAgICAgaWYgKCEoJ25hbWUnIGluIGZpZWxkKSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZmllbGRQcmVmaXgsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNNYW55VGV4dEZpZWxkKSBoYXNNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogZ3JvdXBIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYnVpbGROdW1iZXJzLFxuICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICBidWlsZFRleHRzLFxuICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uTmFtZX1fYCxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGRpc2FibGVOb3ROdWxsOiBkaXNhYmxlTm90TnVsbEZyb21IZXJlLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgZmllbGRQcmVmaXg6IGAke2ZpZWxkTmFtZX0uYCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZDogZmllbGQubG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lOiBgJHtwYXJlbnRUYWJsZU5hbWV9XyR7Y29sdW1uTmFtZX1gLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc01hbnlOdW1iZXJGaWVsZCkgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndGFicyc6IHtcbiAgICAgICAgY29uc3QgZGlzYWJsZU5vdE51bGxGcm9tSGVyZSA9IEJvb2xlYW4oZmllbGQuYWRtaW4/LmNvbmRpdGlvbikgfHwgZGlzYWJsZU5vdE51bGxcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IHRhYkhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogdGFiSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IHRhYkhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogdGFiSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHRhYkhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7IC4uLnRhYiwgdHlwZTogJ3RhYicgfSkpLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncm93JzpcbiAgICAgIGNhc2UgJ2NvbGxhcHNpYmxlJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IHJvd0hhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogcm93SGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IHJvd0hhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogcm93SGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHJvd0hhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZCxcbiAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgIGxvY2FsZXNJbmRleGVzLFxuICAgICAgICAgIG5ld1RhYmxlTmFtZTogcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgZmllbGQucmVsYXRpb25Uby5mb3JFYWNoKChyZWxhdGlvbikgPT4gcmVsYXRpb25zaGlwcy5hZGQocmVsYXRpb24pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbGF0aW9uc2hpcHMuYWRkKGZpZWxkLnJlbGF0aW9uVG8pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBmaWVsZC5hZG1pbiAmJiBmaWVsZC5hZG1pbi5jb25kaXRpb25cblxuICAgIGlmIChcbiAgICAgICFkaXNhYmxlTm90TnVsbCAmJlxuICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSAmJlxuICAgICAgJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJlxuICAgICAgZmllbGQucmVxdWlyZWQgJiZcbiAgICAgICFjb25kaXRpb25cbiAgICApIHtcbiAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0ubm90TnVsbCgpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgaGFzTG9jYWxpemVkRmllbGQsXG4gICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgaGFzTWFueU51bWJlckZpZWxkLFxuICAgIGhhc01hbnlUZXh0RmllbGQsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ0cmF2ZXJzZUZpZWxkcyIsImFkYXB0ZXIiLCJidWlsZE51bWJlcnMiLCJidWlsZFJlbGF0aW9uc2hpcHMiLCJidWlsZFRleHRzIiwiY29sdW1uUHJlZml4IiwiY29sdW1ucyIsImRpc2FibGVOb3ROdWxsIiwiZGlzYWJsZVVuaXF1ZSIsImZpZWxkUHJlZml4IiwiZmllbGRzIiwiZm9yY2VMb2NhbGl6ZWQiLCJpbmRleGVzIiwibG9jYWxlc0NvbHVtbnMiLCJsb2NhbGVzSW5kZXhlcyIsIm5ld1RhYmxlTmFtZSIsInBhcmVudFRhYmxlTmFtZSIsInJlbGF0aW9uc1RvQnVpbGQiLCJyZWxhdGlvbnNoaXBzIiwicm9vdFJlbGF0aW9uc1RvQnVpbGQiLCJyb290VGFibGVJRENvbFR5cGUiLCJyb290VGFibGVOYW1lIiwiaGFzTG9jYWxpemVkRmllbGQiLCJoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImhhc01hbnlUZXh0RmllbGQiLCJoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwiaGFzTWFueU51bWJlckZpZWxkIiwiaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwicGFyZW50SURDb2xUeXBlIiwiaWQiLCJQZ1VVSURCdWlsZGVyIiwiUGdOdW1lcmljQnVpbGRlciIsIlBnVmFyY2hhckJ1aWxkZXIiLCJmb3JFYWNoIiwiZmllbGQiLCJuYW1lIiwiY29sdW1uTmFtZSIsImZpZWxkTmFtZSIsInRhcmdldFRhYmxlIiwidGFyZ2V0SW5kZXhlcyIsImZpZWxkQWZmZWN0c0RhdGEiLCJ0b1NuYWtlQ2FzZSIsInJlcGxhY2UiLCJwYXlsb2FkIiwiY29uZmlnIiwibG9jYWxpemF0aW9uIiwibG9jYWxpemVkIiwidW5pcXVlIiwiaW5kZXgiLCJpbmNsdWRlcyIsInR5cGUiLCJoYXNNYW55IiwiY29uc3RyYWludFZhbHVlIiwiZmllbGRDb25zdHJhaW50cyIsImNyZWF0ZUluZGV4IiwidGFibGVOYW1lIiwiSW52YWxpZENvbmZpZ3VyYXRpb24iLCJ2YXJjaGFyIiwibnVtZXJpYyIsImpzb25iIiwidGltZXN0YW1wIiwibW9kZSIsInByZWNpc2lvbiIsIndpdGhUaW1lem9uZSIsImVudW1OYW1lIiwiZW51bXMiLCJwZ0VudW0iLCJvcHRpb25zIiwibWFwIiwib3B0aW9uIiwib3B0aW9uSXNPYmplY3QiLCJ2YWx1ZSIsInNlbGVjdFRhYmxlTmFtZSIsImJhc2VDb2x1bW5zIiwib3JkZXIiLCJpbnRlZ2VyIiwibm90TnVsbCIsInBhcmVudCIsInBhcmVudElEQ29sdW1uTWFwIiwicmVmZXJlbmNlcyIsInRhYmxlcyIsIm9uRGVsZXRlIiwiYmFzZUV4dHJhQ29uZmlnIiwib3JkZXJJZHgiLCJjb2xzIiwib24iLCJwYXJlbnRJZHgiLCJsb2NhbGUiLCJlbnVtX19sb2NhbGVzIiwibG9jYWxlSWR4IiwiYnVpbGRUYWJsZSIsInNldCIsInNlbGVjdFRhYmxlUmVsYXRpb25zIiwicmVsYXRpb25zIiwib25lIiwicmVzdWx0IiwiYm9vbGVhbiIsImRpc2FibGVOb3ROdWxsRnJvbUhlcmUiLCJCb29sZWFuIiwiYWRtaW4iLCJjb25kaXRpb24iLCJhcnJheVRhYmxlTmFtZSIsIl9vcmRlciIsIl9wYXJlbnRJRCIsIl9vcmRlcklkeCIsIl9wYXJlbnRJRElkeCIsIl9sb2NhbGUiLCJfbG9jYWxlSWR4Iiwic3ViSGFzTWFueU51bWJlckZpZWxkIiwic3ViSGFzTWFueVRleHRGaWVsZCIsInN1YlJlbGF0aW9uc1RvQnVpbGQiLCJpZFRvVVVJRCIsInJvb3RSZWxhdGlvbnNoaXBzIiwiYXJyYXlUYWJsZVJlbGF0aW9ucyIsIm1hbnkiLCJoYXNMb2NhbGVzVGFibGUiLCJfbG9jYWxlcyIsInZhbCIsImtleSIsImJsb2NrcyIsImJsb2NrIiwiYmxvY2tUYWJsZU5hbWUiLCJzbHVnIiwiX3BhdGgiLCJ0ZXh0IiwiX3BhdGhJZHgiLCJibG9ja1RhYmxlUmVsYXRpb25zIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwidmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwiLCJ0YWJsZSIsImdyb3VwSGFzTG9jYWxpemVkRmllbGQiLCJncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJncm91cEhhc01hbnlOdW1iZXJGaWVsZCIsImdyb3VwSGFzTWFueVRleHRGaWVsZCIsInRhYkhhc0xvY2FsaXplZEZpZWxkIiwidGFiSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwidGFiSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsInRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwidGFiSGFzTWFueU51bWJlckZpZWxkIiwidGFiSGFzTWFueVRleHRGaWVsZCIsInRhYnMiLCJ0YWIiLCJyb3dIYXNMb2NhbGl6ZWRGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQiLCJyb3dIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsInJvd0hhc01hbnlOdW1iZXJGaWVsZCIsInJvd0hhc01hbnlUZXh0RmllbGQiLCJBcnJheSIsImlzQXJyYXkiLCJyZWxhdGlvblRvIiwicmVsYXRpb24iLCJhZGQiLCJyZXF1aXJlZCJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQWtFdkJBOzs7ZUFBQUE7Ozs0QkE3RGE7d0JBY25CO3dCQUM4Qjt1QkFDWTtvRUFDekI7aUNBSVE7dUJBQ0w7NkJBQ0M7MEJBQ0g7bUNBQ1M7a0RBQ2U7Ozs7OztBQW1DMUMsTUFBTUEsaUJBQWlCLENBQUMsRUFDN0JDLE9BQU8sRUFDUEMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxPQUFPLEVBQ1BDLGNBQWMsRUFDZEMsZ0JBQWdCLEtBQUssRUFDckJDLFdBQVcsRUFDWEMsTUFBTSxFQUNOQyxjQUFjLEVBQ2RDLE9BQU8sRUFDUEMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLFlBQVksRUFDWkMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGFBQWEsRUFDYkMsb0JBQW9CLEVB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
544
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIFBnTnVtZXJpY0J1aWxkZXIsXG4gIFBnVVVJREJ1aWxkZXIsXG4gIFBnVmFyY2hhckJ1aWxkZXIsXG4gIGJvb2xlYW4sXG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBqc29uYixcbiAgbnVtZXJpYyxcbiAgcGdFbnVtLFxuICB0ZXh0LFxuICB0aW1lc3RhbXAsXG4gIHZhcmNoYXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgb3B0aW9uSXNPYmplY3QgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbnMsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IGhhc0xvY2FsZXNUYWJsZSB9IGZyb20gJy4uL3V0aWxpdGllcy9oYXNMb2NhbGVzVGFibGUnXG5pbXBvcnQgeyBidWlsZFRhYmxlIH0gZnJvbSAnLi9idWlsZCdcbmltcG9ydCB7IGNyZWF0ZUluZGV4IH0gZnJvbSAnLi9jcmVhdGVJbmRleCdcbmltcG9ydCB7IGdldFRhYmxlTmFtZSB9IGZyb20gJy4vZ2V0VGFibGVOYW1lJ1xuaW1wb3J0IHsgaWRUb1VVSUQgfSBmcm9tICcuL2lkVG9VVUlEJ1xuaW1wb3J0IHsgcGFyZW50SURDb2x1bW5NYXAgfSBmcm9tICcuL3BhcmVudElEQ29sdW1uTWFwJ1xuaW1wb3J0IHsgdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwgfSBmcm9tICcuL3ZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlclxuICBidWlsZE51bWJlcnM6IGJvb2xlYW5cbiAgYnVpbGRSZWxhdGlvbnNoaXBzOiBib29sZWFuXG4gIGJ1aWxkVGV4dHM6IGJvb2xlYW5cbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj5cbiAgZGlzYWJsZU5vdE51bGw6IGJvb2xlYW5cbiAgZGlzYWJsZVVuaXF1ZT86IGJvb2xlYW5cbiAgZmllbGRQcmVmaXg/OiBzdHJpbmdcbiAgZmllbGRzOiAoRmllbGQgfCBUYWJBc0ZpZWxkKVtdXG4gIGZvcmNlTG9jYWxpemVkPzogYm9vbGVhblxuICBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlcj5cbiAgbG9jYWxlc0NvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj5cbiAgbG9jYWxlc0luZGV4ZXM6IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyPlxuICBuZXdUYWJsZU5hbWU6IHN0cmluZ1xuICBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZ1xuICByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gIHJlbGF0aW9uc2hpcHM6IFNldDxzdHJpbmc+XG4gIHJvb3RSZWxhdGlvbnNUb0J1aWxkPzogTWFwPHN0cmluZywgc3RyaW5nPlxuICByb290VGFibGVJRENvbFR5cGU6IHN0cmluZ1xuICByb290VGFibGVOYW1lOiBzdHJpbmdcbiAgdmVyc2lvbnM6IGJvb2xlYW5cbn1cblxudHlwZSBSZXN1bHQgPSB7XG4gIGhhc0xvY2FsaXplZEZpZWxkOiBib29sZWFuXG4gIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkOiBib29sZWFuXG4gIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBib29sZWFuXG4gIGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW5cbiAgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlRmllbGRzID0gKHtcbiAgYWRhcHRlcixcbiAgYnVpbGROdW1iZXJzLFxuICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gIGJ1aWxkVGV4dHMsXG4gIGNvbHVtblByZWZpeCxcbiAgY29sdW1ucyxcbiAgZGlzYWJsZU5vdE51bGwsXG4gIGRpc2FibGVVbmlxdWUgPSBmYWxzZSxcbiAgZmllbGRQcmVmaXgsXG4gIGZpZWxkcyxcbiAgZm9yY2VMb2NhbGl6ZWQsXG4gIGluZGV4ZXMsXG4gIGxvY2FsZXNDb2x1bW5zLFxuICBsb2NhbGVzSW5kZXhlcyxcbiAgbmV3VGFibGVOYW1lLFxuICBwYXJlbnRUYWJsZU5hbWUsXG4gIHJlbGF0aW9uc1RvQnVpbGQsXG4gIHJlbGF0aW9uc2hpcHMsXG4gIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICByb290VGFibGVJRENvbFR5cGUsXG4gIHJvb3RUYWJsZU5hbWUsXG4gIHZlcnNpb25zLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGNvbnN0IHRocm93VmFsaWRhdGlvbkVycm9yID0gdHJ1ZVxuICBsZXQgaGFzTG9jYWxpemVkRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgbGV0IHBhcmVudElEQ29sVHlwZTogSURUeXBlID0gJ2ludGVnZXInXG4gIGlmIChjb2x1bW5zLmlkIGluc3RhbmNlb2YgUGdVVUlEQnVpbGRlcikgcGFyZW50SURDb2xUeXBlID0gJ3V1aWQnXG4gIGlmIChjb2x1bW5zLmlkIGluc3RhbmNlb2YgUGdOdW1lcmljQnVpbGRlcikgcGFyZW50SURDb2xUeXBlID0gJ251bWVyaWMnXG4gIGlmIChjb2x1bW5zLmlkIGluc3RhbmNlb2YgUGdWYXJjaGFyQnVpbGRlcikgcGFyZW50SURDb2xUeXBlID0gJ3ZhcmNoYXInXG5cbiAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgaWYgKCduYW1lJyBpbiBmaWVsZCAmJiBmaWVsZC5uYW1lID09PSAnaWQnKSByZXR1cm5cbiAgICBsZXQgY29sdW1uTmFtZTogc3RyaW5nXG4gICAgbGV0IGZpZWxkTmFtZTogc3RyaW5nXG5cbiAgICBsZXQgdGFyZ2V0VGFibGUgPSBjb2x1bW5zXG4gICAgbGV0IHRhcmdldEluZGV4ZXMgPSBpbmRleGVzXG5cbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgIGNvbHVtbk5hbWUgPSBgJHtjb2x1bW5QcmVmaXggfHwgJyd9JHtmaWVsZC5uYW1lWzBdID09PSAnXycgPyAnXycgOiAnJ30ke3RvU25ha2VDYXNlKFxuICAgICAgICBmaWVsZC5uYW1lLFxuICAgICAgKX1gXG4gICAgICBmaWVsZE5hbWUgPSBgJHtmaWVsZFByZWZpeD8ucmVwbGFjZSgnLicsICdfJykgfHwgJyd9JHtmaWVsZC5uYW1lfWBcblxuICAgICAgLy8gSWYgZmllbGQgaXMgbG9jYWxpemVkLFxuICAgICAgLy8gYWRkIHRoZSBjb2x1bW4gdG8gdGhlIGxvY2FsZSB0YWJsZSBpbnN0ZWFkIG9mIG1haW4gdGFibGVcbiAgICAgIGlmIChhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbiAmJiAoZmllbGQubG9jYWxpemVkIHx8IGZvcmNlTG9jYWxpemVkKSkge1xuICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgdGFyZ2V0VGFibGUgPSBsb2NhbGVzQ29sdW1uc1xuICAgICAgICB0YXJnZXRJbmRleGVzID0gbG9jYWxlc0luZGV4ZXNcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAoZmllbGQudW5pcXVlIHx8IGZpZWxkLmluZGV4KSAmJlxuICAgICAgICAhWydhcnJheScsICdibG9ja3MnLCAnZ3JvdXAnLCAncG9pbnQnLCAncmVsYXRpb25zaGlwJywgJ3VwbG9hZCddLmluY2x1ZGVzKGZpZWxkLnR5cGUpICYmXG4gICAgICAgICEoJ2hhc01hbnknIGluIGZpZWxkICYmIGZpZWxkLmhhc01hbnkgPT09IHRydWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdW5pcXVlID0gZGlzYWJsZVVuaXF1ZSAhPT0gdHJ1ZSAmJiBmaWVsZC51bmlxdWVcbiAgICAgICAgaWYgKHVuaXF1ZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnRWYWx1ZSA9IGAke2ZpZWxkUHJlZml4IHx8ICcnfSR7ZmllbGQubmFtZX1gXG4gICAgICAgICAgaWYgKCFhZGFwdGVyLmZpZWxkQ29uc3RyYWludHM/Lltyb290VGFibGVOYW1lXSkge1xuICAgICAgICAgICAgYWRhcHRlci5maWVsZENvbnN0cmFpbnRzW3Jvb3RUYWJsZU5hbWVdID0ge31cbiAgICAgICAgICB9XG4gICAgICAgICAgYWRhcHRlci5maWVsZENvbnN0cmFpbnRzW3Jvb3RUYWJsZU5hbWVdW2Ake2NvbHVtbk5hbWV9X2lkeGBdID0gY29uc3RyYWludFZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0SW5kZXhlc1tgJHtuZXdUYWJsZU5hbWV9XyR7ZmllbGQubmFtZX1JZHhgXSA9IGNyZWF0ZUluZGV4KHtcbiAgICAgICAgICBuYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB1bmlxdWUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmluZGV4KSB7XG4gICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkID0gJ2luZGV4J1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc01hbnlUZXh0RmllbGQpIHtcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLnVuaXF1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAnVW5pcXVlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUG9zdGdyZXMgZm9yIGhhc01hbnkgdGV4dCBmaWVsZHMuJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHZhcmNoYXIoY29sdW1uTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgY2FzZSAnY29kZSc6XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHZhcmNoYXIoY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnbnVtYmVyJzoge1xuICAgICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9ICdpbmRleCdcbiAgICAgICAgICB9IGVsc2UgaWYgKCFoYXNNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQudW5pcXVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICdVbmlxdWUgaXMgbm90IHN1cHBvcnRlZCBpbiBQb3N0Z3JlcyBmb3IgaGFzTWFueSBudW1iZXIgZmllbGRzLicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSBudW1lcmljKGNvbHVtbk5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmljaFRleHQnOlxuICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGpzb25iKGNvbHVtbk5hbWUpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSB0aW1lc3RhbXAoY29sdW1uTmFtZSwge1xuICAgICAgICAgIG1vZGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHByZWNpc2lvbjogMyxcbiAgICAgICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3BvaW50Jzoge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICAgIGNvbnN0IGVudW1OYW1lID0gZ2V0VGFibGVOYW1lKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGNvbmZpZzogZmllbGQsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lOiBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgcHJlZml4OiBgZW51bV8ke25ld1RhYmxlTmFtZX1fYCxcbiAgICAgICAgICB0YXJnZXQ6ICdlbnVtTmFtZScsXG4gICAgICAgICAgdGhyb3dWYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0gPSBwZ0VudW0oXG4gICAgICAgICAgZW51bU5hbWUsXG4gICAgICAgICAgZmllbGQub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbklzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfSkgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmIGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZU5hbWUgPSBnZXRUYWJsZU5hbWUoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGNvbmZpZzogZmllbGQsXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICAgIHByZWZpeDogYCR7bmV3VGFibGVOYW1lfV9gLFxuICAgICAgICAgICAgdGhyb3dWYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50SURDb2x1bW5NYXBbcGFyZW50SURDb2xUeXBlXSgncGFyZW50X2lkJylcbiAgICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgICAgICB2YWx1ZTogYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0oJ3ZhbHVlJyksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlciB8IFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyXG4gICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgIG9yZGVySWR4OiAoY29scykgPT4gaW5kZXgoYCR7c2VsZWN0VGFibGVOYW1lfV9vcmRlcl9pZHhgKS5vbihjb2xzLm9yZGVyKSxcbiAgICAgICAgICAgIHBhcmVudElkeDogKGNvbHMpID0+IGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fcGFyZW50X2lkeGApLm9uKGNvbHMucGFyZW50KSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkKSB7XG4gICAgICAgICAgICBiYXNlQ29sdW1ucy5sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ2xvY2FsZScpLm5vdE51bGwoKVxuICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLmxvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgICBpbmRleChgJHtzZWxlY3RUYWJsZU5hbWV9X2xvY2FsZV9pZHhgKS5vbihjb2xzLmxvY2FsZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy52YWx1ZSA9IChjb2xzKSA9PiBpbmRleChgJHtzZWxlY3RUYWJsZU5hbWV9X3ZhbHVlX2lkeGApLm9uKGNvbHMudmFsdWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnVpbGRUYWJsZSh7XG4gICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgYmFzZUNvbHVtbnMsXG4gICAgICAgICAgICBiYXNlRXh0cmFDb25maWcsXG4gICAgICAgICAgICBkaXNhYmxlTm90TnVsbCxcbiAgICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgICBmaWVsZHM6IFtdLFxuICAgICAgICAgICAgdGFibGVOYW1lOiBzZWxlY3RUYWJsZU5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9ucyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBzZWxlY3RUYWJsZU5hbWUpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1tzZWxlY3RUYWJsZU5hbWVdLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW3NlbGVjdFRhYmxlTmFtZV0ucGFyZW50XSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbl8ke3NlbGVjdFRhYmxlTmFtZX1gXSA9IHNlbGVjdFRhYmxlUmVsYXRpb25zXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdKGZpZWxkTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGJvb2xlYW4oY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZU5hbWUgPSBnZXRUYWJsZU5hbWUoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgY29uZmlnOiBmaWVsZCxcbiAgICAgICAgICBwYXJlbnRUYWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICBwcmVmaXg6IGAke25ld1RhYmxlTmFtZX1fYCxcbiAgICAgICAgICB0aHJvd1ZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYmFzZUNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgICAgX29yZGVyOiBpbnRlZ2VyKCdfb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICAgICAgX3BhcmVudElEOiBwYXJlbnRJRENvbHVtbk1hcFtwYXJlbnRJRENvbFR5cGVdKCdfcGFyZW50X2lkJylcbiAgICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0uaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhc2VFeHRyYUNvbmZpZzogUmVjb3JkPFxuICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlciB8IFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyXG4gICAgICAgID4gPSB7XG4gICAgICAgICAgX29yZGVySWR4OiAoY29scykgPT4gaW5kZXgoYCR7YXJyYXlUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMuX29yZGVyKSxcbiAgICAgICAgICBfcGFyZW50SURJZHg6IChjb2xzKSA9PiBpbmRleChgJHthcnJheVRhYmxlTmFtZX1fcGFyZW50X2lkX2lkeGApLm9uKGNvbHMuX3BhcmVudElEKSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICBiYXNlQ29sdW1ucy5fbG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdfbG9jYWxlJykubm90TnVsbCgpXG4gICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLl9sb2NhbGVJZHggPSAoY29scykgPT5cbiAgICAgICAgICAgIGluZGV4KGAke2FycmF5VGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5fbG9jYWxlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogc3ViSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHN1Ykhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZDogc3ViUmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgfSA9IGJ1aWxkVGFibGUoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYmFzZUNvbHVtbnMsXG4gICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLFxuICAgICAgICAgIGRpc2FibGVOb3ROdWxsOiBkaXNhYmxlTm90TnVsbEZyb21IZXJlLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgZmllbGRzOiBkaXNhYmxlVW5pcXVlID8gaWRUb1VVSUQoZmllbGQuZmllbGRzKSA6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290UmVsYXRpb25zaGlwczogcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWU6IGFycmF5VGFibGVOYW1lLFxuICAgICAgICAgIHZlcnNpb25zLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChzdWJIYXNNYW55VGV4dEZpZWxkKSB7XG4gICAgICAgICAgaWYgKCFoYXNNYW55VGV4dEZpZWxkIHx8IHN1Ykhhc01hbnlUZXh0RmllbGQgPT09ICdpbmRleCcpXG4gICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkID0gc3ViSGFzTWFueVRleHRGaWVsZFxuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJIYXNNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgICBpZiAoIWhhc01hbnlOdW1iZXJGaWVsZCB8fCBzdWJIYXNNYW55TnVtYmVyRmllbGQgPT09ICdpbmRleCcpXG4gICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQgPSBzdWJIYXNNYW55TnVtYmVyRmllbGRcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbGF0aW9uc1RvQnVpbGQuc2V0KGZpZWxkTmFtZSwgYXJyYXlUYWJsZU5hbWUpXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1thcnJheVRhYmxlTmFtZV0sICh7IG1hbnksIG9uZSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgIF9wYXJlbnRJRDogb25lKGFkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0sIHtcbiAgICAgICAgICAgICAgZmllbGRzOiBbYWRhcHRlci50YWJsZXNbYXJyYXlUYWJsZU5hbWVdLl9wYXJlbnRJRF0sXG4gICAgICAgICAgICAgIHJlZmVyZW5jZXM6IFthZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChoYXNMb2NhbGVzVGFibGUoZmllbGQuZmllbGRzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll9sb2NhbGVzID0gbWFueShhZGFwdGVyLnRhYmxlc1tgJHthcnJheVRhYmxlTmFtZX0ke2FkYXB0ZXIubG9jYWxlc1N1ZmZpeH1gXSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdWJSZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9KVxuXG4gICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHthcnJheVRhYmxlTmFtZX1gXSA9IGFycmF5VGFibGVSZWxhdGlvbnNcblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgZmllbGQuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tUYWJsZU5hbWUgPSBnZXRUYWJsZU5hbWUoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGNvbmZpZzogYmxvY2ssXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWU6IHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICBwcmVmaXg6IGAke3Jvb3RUYWJsZU5hbWV9X2Jsb2Nrc19gLFxuICAgICAgICAgICAgdGhyb3dWYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWFkYXB0ZXIudGFibGVzW2Jsb2NrVGFibGVOYW1lXSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZUNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgICAgICAgIF9vcmRlcjogaW50ZWdlcignX29yZGVyJykubm90TnVsbCgpLFxuICAgICAgICAgICAgICBfcGFyZW50SUQ6IHBhcmVudElEQ29sdW1uTWFwW3Jvb3RUYWJsZUlEQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICAgICAgICBfcGF0aDogdGV4dCgnX3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VFeHRyYUNvbmZpZzogUmVjb3JkPFxuICAgICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgICAgID4gPSB7XG4gICAgICAgICAgICAgIF9vcmRlcklkeDogKGNvbHMpID0+IGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9vcmRlcl9pZHhgKS5vbihjb2xzLl9vcmRlciksXG4gICAgICAgICAgICAgIF9wYXJlbnRJRElkeDogKGNvbHMpID0+IGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9wYXJlbnRfaWRfaWR4YCkub24oY29scy5fcGFyZW50SUQpLFxuICAgICAgICAgICAgICBfcGF0aElkeDogKGNvbHMpID0+IGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9wYXRoX2lkeGApLm9uKGNvbHMuX3BhdGgpLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgICAgIGJhc2VDb2x1bW5zLl9sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ19sb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLl9sb2NhbGVJZHggPSAoY29scykgPT5cbiAgICAgICAgICAgICAgICBpbmRleChgJHtibG9ja1RhYmxlTmFtZX1fbG9jYWxlX2lkeGApLm9uKGNvbHMuX2xvY2FsZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQ6IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogc3ViSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICAgICAgcmVsYXRpb25zVG9CdWlsZDogc3ViUmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICAgIH0gPSBidWlsZFRhYmxlKHtcbiAgICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgICAgYmFzZUNvbHVtbnMsXG4gICAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgICAgIGZpZWxkczogZGlzYWJsZVVuaXF1ZSA/IGlkVG9VVUlEKGJsb2NrLmZpZWxkcykgOiBibG9jay5maWVsZHMsXG4gICAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgICByb290UmVsYXRpb25zaGlwczogcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgICAgICB0YWJsZU5hbWU6IGJsb2NrVGFibGVOYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9ucyxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChzdWJIYXNNYW55VGV4dEZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTWFueVRleHRGaWVsZCB8fCBzdWJIYXNNYW55VGV4dEZpZWxkID09PSAnaW5kZXgnKVxuICAgICAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSBzdWJIYXNNYW55VGV4dEZpZWxkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdWJIYXNNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgICAgaWYgKCFoYXNNYW55TnVtYmVyRmllbGQgfHwgc3ViSGFzTWFueU51bWJlckZpZWxkID09PSAnaW5kZXgnKVxuICAgICAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHN1Ykhhc01hbnlOdW1iZXJGaWVsZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBibG9ja1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICh7IG1hbnksIG9uZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgICAgIF9wYXJlbnRJRDogb25lKGFkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW2Jsb2NrVGFibGVOYW1lXS5fcGFyZW50SURdLFxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc0xvY2FsZXNUYWJsZShibG9jay5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KFxuICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tgJHtibG9ja1RhYmxlTmFtZX0ke2FkYXB0ZXIubG9jYWxlc1N1ZmZpeH1gXSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdWJSZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7YmxvY2tUYWJsZU5hbWV9YF0gPSBibG9ja1RhYmxlUmVsYXRpb25zXG4gICAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF2ZXJzaW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwoe1xuICAgICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgICAgbG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHRhYmxlTG9jYWxlczogYWRhcHRlci50YWJsZXNbYCR7YmxvY2tUYWJsZU5hbWV9JHthZGFwdGVyLmxvY2FsZXNTdWZmaXh9YF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZGFwdGVyLmJsb2NrVGFibGVOYW1lc1tgJHtyb290VGFibGVOYW1lfS4ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBdID0gYmxvY2tUYWJsZU5hbWVcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZC5zZXQoYF9ibG9ja3NfJHtibG9jay5zbHVnfWAsIGJsb2NrVGFibGVOYW1lKVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYic6XG4gICAgICBjYXNlICdncm91cCc6IHtcbiAgICAgICAgaWYgKCEoJ25hbWUnIGluIGZpZWxkKSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZmllbGRQcmVmaXgsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgIHZlcnNpb25zLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCkgaGFzTG9jYWxpemVkRmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzYWJsZU5vdE51bGxGcm9tSGVyZSA9IEJvb2xlYW4oZmllbGQuYWRtaW4/LmNvbmRpdGlvbikgfHwgZGlzYWJsZU5vdE51bGxcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkOiBncm91cEhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4OiBgJHtjb2x1bW5OYW1lfV9gLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeDogYCR7ZmllbGROYW1lfS5gLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQsXG4gICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICAgICAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICAgICAgICBuZXdUYWJsZU5hbWU6IGAke3BhcmVudFRhYmxlTmFtZX1fJHtjb2x1bW5OYW1lfWAsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB2ZXJzaW9ucyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCkgaGFzTG9jYWxpemVkRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTWFueVRleHRGaWVsZCkgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZDogdGFiSGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiB0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogdGFiSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogdGFiSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiB0YWJIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogdGFiSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgYnVpbGRUZXh0cyxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkUHJlZml4LFxuICAgICAgICAgIGZpZWxkczogZmllbGQudGFicy5tYXAoKHRhYikgPT4gKHsgLi4udGFiLCB0eXBlOiAndGFiJyB9KSksXG4gICAgICAgICAgZm9yY2VMb2NhbGl6ZWQsXG4gICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICAgICAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB2ZXJzaW9ucyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGFiSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTWFueVRleHRGaWVsZCkgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgY2FzZSAnY29sbGFwc2libGUnOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZDogcm93SGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiByb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogcm93SGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogcm93SGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiByb3dIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogcm93SGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgYnVpbGRUZXh0cyxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkUHJlZml4LFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgdmVyc2lvbnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgZmllbGQucmVsYXRpb25Uby5mb3JFYWNoKChyZWxhdGlvbikgPT4gcmVsYXRpb25zaGlwcy5hZGQocmVsYXRpb24pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbGF0aW9uc2hpcHMuYWRkKGZpZWxkLnJlbGF0aW9uVG8pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBmaWVsZC5hZG1pbiAmJiBmaWVsZC5hZG1pbi5jb25kaXRpb25cblxuICAgIGlmIChcbiAgICAgICFkaXNhYmxlTm90TnVsbCAmJlxuICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSAmJlxuICAgICAgJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJlxuICAgICAgZmllbGQucmVxdWlyZWQgJiZcbiAgICAgICFjb25kaXRpb25cbiAgICApIHtcbiAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0ubm90TnVsbCgpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgaGFzTG9jYWxpemVkRmllbGQsXG4gICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgaGFzTWFueU51bWJlckZpZWxkLFxuICAgIGhhc01hbnlUZXh0RmllbGQsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ0cmF2ZXJzZUZpZWxkcyIsImFkYXB0ZXIiLCJidWlsZE51bWJlcnMiLCJidWlsZFJlbGF0aW9uc2hpcHMiLCJidWlsZFRleHRzIiwiY29sdW1uUHJlZml4IiwiY29sdW1ucyIsImRpc2FibGVOb3ROdWxsIiwiZGlzYWJsZVVuaXF1ZSIsImZpZWxkUHJlZml4IiwiZmllbGRzIiwiZm9yY2VMb2NhbGl6ZWQiLCJpbmRleGVzIiwibG9jYWxlc0NvbHVtbnMiLCJsb2NhbGVzSW5kZXhlcyIsIm5ld1RhYmxlTmFtZSIsInBhcmVudFRhYmxlTmFtZSIsInJlbGF0aW9uc1RvQnVpbGQiLCJyZWxhdGlvbnNoaXBzIiwicm9vdFJlbGF0aW9uc1RvQnVpbGQiLCJyb290VGFibGVJRENvbFR5cGUiLCJyb290VGFibGVOYW1lIiwidmVyc2lvbnMiLCJ0aHJvd1ZhbGlkYXRpb25FcnJvciIsImhhc0xvY2FsaXplZEZpZWxkIiwiaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJoYXNNYW55VGV4dEZpZWxkIiwiaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImhhc01hbnlOdW1iZXJGaWVsZCIsImhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInBhcmVudElEQ29sVHlwZSIsImlkIiwiUGdVVUlEQnVpbGRlciIsIlBnTnVtZXJpY0J1aWxkZXIiLCJQZ1ZhcmNoYXJCdWlsZGVyIiwiZm9yRWFjaCIsImZpZWxkIiwibmFtZSIsImNvbHVtbk5hbWUiLCJmaWVsZE5hbWUiLCJ0YXJnZXRUYWJsZSIsInRhcmdldEluZGV4ZXMiLCJmaWVsZEFmZmVjdHNEYXRhIiwidG9TbmFrZUNhc2UiLCJyZXBsYWNlIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsImxvY2FsaXplZCIsInVuaXF1ZSIsImluZGV4IiwiaW5jbHVkZXMiLCJ0eXBlIiwiaGFzTWFueSIsImNvbnN0cmFpbnRWYWx1ZSIsImZpZWxkQ29uc3RyYWludHMiLCJjcmVhdGVJbmRleCIsInRhYmxlTmFtZSIsIkludmFsaWRDb25maWd1cmF0aW9uIiwidmFyY2hhciIsIm51bWVyaWMiLCJqc29uYiIsInRpbWVzdGFtcCIsIm1vZGUiLCJwcmVjaXNpb24iLCJ3aXRoVGltZXpvbmUiLCJlbnVtTmFtZSIsImdldFRhYmxlTmFtZSIsInByZWZpeCIsInRhcmdldCIsImVudW1zIiwicGdFbnVtIiwib3B0aW9ucyIsIm1hcCIsIm9wdGlvbiIsIm9wdGlvbklzT2JqZWN0IiwidmFsdWUiLCJzZWxlY3RUYWJsZU5hbWUiLCJiYXNlQ29sdW1ucyIsIm9yZGVyIiwiaW50ZWdlciIsIm5vdE51bGwiLCJwYXJlbnQiLCJwYXJlbnRJRENvbHVtbk1hcCIsInJlZmVyZW5jZXMiLCJ0YWJsZXMiLCJvbkRlbGV0ZSIsImJhc2VFeHRyYUNvbmZpZyIsIm9yZGVySWR4IiwiY29scyIsIm9uIiwicGFyZW50SWR4IiwibG9jYWxlIiwiZW51bV9fbG9jYWxlcyIsImxvY2FsZUlkeCIsImJ1aWxkVGFibGUiLCJzZXQiLCJzZWxlY3RUYWJsZVJlbGF0aW9ucyIsInJlbGF0aW9ucyIsIm9uZSIsInJlc3VsdCIsImJvb2xlYW4iLCJkaXNhYmxlTm90TnVsbEZyb21IZXJlIiwiQm9vbGVhbiIsImFkbWluIiwiY29uZGl0aW9uIiwiYXJyYXlUYWJsZU5hbWUiLCJfb3JkZXIiLCJfcGFyZW50SUQiLCJfb3JkZXJJZHgiLCJfcGFyZW50SURJZHgiLCJfbG9jYWxlIiwiX2xvY2FsZUlkeCIsInN1Ykhhc01hbnlOdW1iZXJGaWVsZCIsInN1Ykhhc01hbnlUZXh0RmllbGQiLCJzdWJSZWxhdGlvbnNUb0J1aWxkIiwiaWRUb1VVSUQiLCJyb290UmVsYXRpb25zaGlwcyIsImFycmF5VGFibGVSZWxhdGlvbnMiLCJtYW55IiwiaGFzTG9jYWxlc1RhYmxlIiwiX2xvY2FsZXMiLCJsb2NhbGVzU3VmZml4IiwidmFsIiwia2V5IiwiYmxvY2tzIiwiYmxvY2siLCJibG9ja1RhYmxlTmFtZSIsIl9wYXRoIiwidGV4dCIsIl9wYXRoSWR4IiwiYmxvY2tUYWJsZVJlbGF0aW9ucyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIiwidGFibGUiLCJ0YWJsZUxvY2FsZXMiLCJibG9ja1RhYmxlTmFtZXMiLCJzbHVnIiwiZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwiZ3JvdXBIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwiZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImdyb3VwSGFzTWFueU51bWJlckZpZWxkIiwiZ3JvdXBIYXNNYW55VGV4dEZpZWxkIiwidGFiSGFzTG9jYWxpemVkRmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwidGFiSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJ0YWJIYXNNYW55TnVtYmVyRmllbGQiLCJ0YWJIYXNNYW55VGV4dEZpZWxkIiwidGFicyIsInRhYiIsInJvd0hhc0xvY2FsaXplZEZpZWxkIiwicm93SGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwicm93SGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsInJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwicm93SGFzTWFueU51bWJlckZpZWxkIiwicm93SGFzTWFueVRleHRGaWVsZCIsIkFycmF5IiwiaXNBcnJheSIsInJlbGF0aW9uVG8iLCJyZWxhdGlvbiIsImFkZCIsInJlcXVpcmVkIl0sIm1h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
@@ -5,7 +5,8 @@ type Args = {
5
5
  localized: boolean;
6
6
  rootTableName: string;
7
7
  table: GenericTable;
8
+ tableLocales?: GenericTable;
8
9
  };
9
- export declare const validateExistingBlockIsIdentical: ({ block, localized, rootTableName, table, }: Args) => void;
10
+ export declare const validateExistingBlockIsIdentical: ({ block, localized, rootTableName, table, tableLocales, }: Args) => void;
10
11
  export {};
11
12
  //# sourceMappingURL=validateExistingBlockIsIdentical.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validateExistingBlockIsIdentical.d.ts","sourceRoot":"","sources":["../../src/schema/validateExistingBlockIsIdentical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,eAAe,CAAA;AAKjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;CACpB,CAAA;AAyCD,eAAO,MAAM,gCAAgC,gDAK1C,IAAI,KAAG,IAwBT,CAAA"}
1
+ {"version":3,"file":"validateExistingBlockIsIdentical.d.ts","sourceRoot":"","sources":["../../src/schema/validateExistingBlockIsIdentical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,eAAe,CAAA;AAKjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;IACnB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAkDD,eAAO,MAAM,gCAAgC,8DAM1C,IAAI,KAAG,IA8BT,CAAA"}
@@ -22,7 +22,7 @@ const getFlattenedFieldNames = (fields, prefix = '')=>{
22
22
  return fieldsToUse;
23
23
  }
24
24
  if ((0, _types.fieldHasSubFields)(field)) {
25
- fieldPrefix = 'name' in field ? `${prefix}${field.name}.` : prefix;
25
+ fieldPrefix = 'name' in field ? `${prefix}${field.name}_` : prefix;
26
26
  return [
27
27
  ...fieldsToUse,
28
28
  ...getFlattenedFieldNames(field.fields, fieldPrefix)
@@ -32,7 +32,7 @@ const getFlattenedFieldNames = (fields, prefix = '')=>{
32
32
  return [
33
33
  ...fieldsToUse,
34
34
  ...field.tabs.reduce((tabFields, tab)=>{
35
- fieldPrefix = 'name' in tab ? `${prefix}.${tab.name}` : prefix;
35
+ fieldPrefix = 'name' in tab ? `${prefix}_${tab.name}` : prefix;
36
36
  return [
37
37
  ...tabFields,
38
38
  ...(0, _types.tabHasName)(tab) ? [
@@ -48,16 +48,22 @@ const getFlattenedFieldNames = (fields, prefix = '')=>{
48
48
  if ((0, _types.fieldAffectsData)(field)) {
49
49
  return [
50
50
  ...fieldsToUse,
51
- `${fieldPrefix?.replace('.', '_') || ''}${field.name}`
51
+ {
52
+ name: `${fieldPrefix}${field.name}`,
53
+ localized: field.localized
54
+ }
52
55
  ];
53
56
  }
54
57
  return fieldsToUse;
55
58
  }, []);
56
59
  };
57
- const validateExistingBlockIsIdentical = ({ block, localized, rootTableName, table })=>{
60
+ const validateExistingBlockIsIdentical = ({ block, localized, rootTableName, table, tableLocales })=>{
58
61
  const fieldNames = getFlattenedFieldNames(block.fields);
59
62
  const missingField = // ensure every field from the config is in the matching table
60
- fieldNames.find((name)=>Object.keys(table).indexOf(name) === -1) || // ensure every table column is matched for every field from the config
63
+ fieldNames.find(({ name, localized })=>{
64
+ const fieldTable = localized && tableLocales ? tableLocales : table;
65
+ return Object.keys(fieldTable).indexOf(name) === -1;
66
+ }) || // ensure every table column is matched for every field from the config
61
67
  Object.keys(table).find((fieldName)=>{
62
68
  if (![
63
69
  '_locale',
@@ -66,15 +72,15 @@ const validateExistingBlockIsIdentical = ({ block, localized, rootTableName, tab
66
72
  '_path',
67
73
  '_uuid'
68
74
  ].includes(fieldName)) {
69
- return fieldNames.indexOf(fieldName) === -1;
75
+ return fieldNames.findIndex((field)=>field.name) === -1;
70
76
  }
71
77
  });
72
78
  if (missingField) {
73
- throw new _errors.InvalidConfiguration(`The table ${rootTableName} has multiple blocks with slug ${block.slug}, but the schemas do not match. One block includes the field ${missingField}, while the other block does not.`);
79
+ throw new _errors.InvalidConfiguration(`The table ${rootTableName} has multiple blocks with slug ${block.slug}, but the schemas do not match. One block includes the field ${typeof missingField === 'string' ? missingField : missingField.name}, while the other block does not.`);
74
80
  }
75
81
  if (Boolean(localized) !== Boolean(table._locale)) {
76
82
  throw new _errors.InvalidConfiguration(`The table ${rootTableName} has multiple blocks with slug ${block.slug}, but the schemas do not match. One is localized, but another is not. Block schemas of the same name must match exactly.`);
77
83
  }
78
84
  };
79
85
 
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCbG9jaywgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgZmllbGRIYXNTdWJGaWVsZHMsIHRhYkhhc05hbWUgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNUYWJsZSB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGJsb2NrOiBCbG9ja1xuICBsb2NhbGl6ZWQ6IGJvb2xlYW5cbiAgcm9vdFRhYmxlTmFtZTogc3RyaW5nXG4gIHRhYmxlOiBHZW5lcmljVGFibGVcbn1cblxuY29uc3QgZ2V0RmxhdHRlbmVkRmllbGROYW1lcyA9IChmaWVsZHM6IEZpZWxkW10sIHByZWZpeDogc3RyaW5nID0gJycpOiBzdHJpbmdbXSA9PiB7XG4gIHJldHVybiBmaWVsZHMucmVkdWNlKChmaWVsZHNUb1VzZSwgZmllbGQpID0+IHtcbiAgICBsZXQgZmllbGRQcmVmaXggPSBwcmVmaXhcblxuICAgIGlmIChcbiAgICAgIFsnYXJyYXknLCAnYmxvY2tzJywgJ3JlbGF0aW9uc2hpcCcsICd1cGxvYWQnXS5pbmNsdWRlcyhmaWVsZC50eXBlKSB8fFxuICAgICAgKCdoYXNNYW55JyBpbiBmaWVsZCAmJiBmaWVsZC5oYXNNYW55ID09PSB0cnVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZpZWxkc1RvVXNlXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkSGFzU3ViRmllbGRzKGZpZWxkKSkge1xuICAgICAgZmllbGRQcmVmaXggPSAnbmFtZScgaW4gZmllbGQgPyBgJHtwcmVmaXh9JHtmaWVsZC5uYW1lfS5gIDogcHJlZml4XG4gICAgICByZXR1cm4gWy4uLmZpZWxkc1RvVXNlLCAuLi5nZXRGbGF0dGVuZWRGaWVsZE5hbWVzKGZpZWxkLmZpZWxkcywgZmllbGRQcmVmaXgpXVxuICAgIH1cblxuICAgIGlmIChmaWVsZC50eXBlID09PSAndGFicycpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmZpZWxkc1RvVXNlLFxuICAgICAgICAuLi5maWVsZC50YWJzLnJlZHVjZSgodGFiRmllbGRzLCB0YWIpID0+IHtcbiAgICAgICAgICBmaWVsZFByZWZpeCA9ICduYW1lJyBpbiB0YWIgPyBgJHtwcmVmaXh9LiR7dGFiLm5hbWV9YCA6IHByZWZpeFxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi50YWJGaWVsZHMsXG4gICAgICAgICAgICAuLi4odGFiSGFzTmFtZSh0YWIpXG4gICAgICAgICAgICAgID8gW3sgLi4udGFiLCB0eXBlOiAndGFiJyB9XVxuICAgICAgICAgICAgICA6IGdldEZsYXR0ZW5lZEZpZWxkTmFtZXModGFiLmZpZWxkcywgZmllbGRQcmVmaXgpKSxcbiAgICAgICAgICBdXG4gICAgICAgIH0sIFtdKSxcbiAgICAgIF1cbiAgICB9XG5cbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgIHJldHVybiBbLi4uZmllbGRzVG9Vc2UsIGAke2ZpZWxkUHJlZml4Py5yZXBsYWNlKCcuJywgJ18nKSB8fCAnJ30ke2ZpZWxkLm5hbWV9YF1cbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGRzVG9Vc2VcbiAgfSwgW10pXG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCA9ICh7XG4gIGJsb2NrLFxuICBsb2NhbGl6ZWQsXG4gIHJvb3RUYWJsZU5hbWUsXG4gIHRhYmxlLFxufTogQXJncyk6IHZvaWQgPT4ge1xuICBjb25zdCBmaWVsZE5hbWVzID0gZ2V0RmxhdHRlbmVkRmllbGROYW1lcyhibG9jay5maWVsZHMpXG5cbiAgY29uc3QgbWlzc2luZ0ZpZWxkID1cbiAgICAvLyBlbnN1cmUgZXZlcnkgZmllbGQgZnJvbSB0aGUgY29uZmlnIGlzIGluIHRoZSBtYXRjaGluZyB0YWJsZVxuICAgIGZpZWxkTmFtZXMuZmluZCgobmFtZSkgPT4gT2JqZWN0LmtleXModGFibGUpLmluZGV4T2YobmFtZSkgPT09IC0xKSB8fFxuICAgIC8vIGVuc3VyZSBldmVyeSB0YWJsZSBjb2x1bW4gaXMgbWF0Y2hlZCBmb3IgZXZlcnkgZmllbGQgZnJvbSB0aGUgY29uZmlnXG4gICAgT2JqZWN0LmtleXModGFibGUpLmZpbmQoKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgaWYgKCFbJ19sb2NhbGUnLCAnX29yZGVyJywgJ19wYXJlbnRJRCcsICdfcGF0aCcsICdfdXVpZCddLmluY2x1ZGVzKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkTmFtZXMuaW5kZXhPZihmaWVsZE5hbWUpID09PSAtMVxuICAgICAgfVxuICAgIH0pXG5cbiAgaWYgKG1pc3NpbmdGaWVsZCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQ29uZmlndXJhdGlvbihcbiAgICAgIGBUaGUgdGFibGUgJHtyb290VGFibGVOYW1lfSBoYXMgbXVsdGlwbGUgYmxvY2tzIHdpdGggc2x1ZyAke2Jsb2NrLnNsdWd9LCBidXQgdGhlIHNjaGVtYXMgZG8gbm90IG1hdGNoLiBPbmUgYmxvY2sgaW5jbHVkZXMgdGhlIGZpZWxkICR7bWlzc2luZ0ZpZWxkfSwgd2hpbGUgdGhlIG90aGVyIGJsb2NrIGRvZXMgbm90LmAsXG4gICAgKVxuICB9XG5cbiAgaWYgKEJvb2xlYW4obG9jYWxpemVkKSAhPT0gQm9vbGVhbih0YWJsZS5fbG9jYWxlKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQ29uZmlndXJhdGlvbihcbiAgICAgIGBUaGUgdGFibGUgJHtyb290VGFibGVOYW1lfSBoYXMgbXVsdGlwbGUgYmxvY2tzIHdpdGggc2x1ZyAke2Jsb2NrLnNsdWd9LCBidXQgdGhlIHNjaGVtYXMgZG8gbm90IG1hdGNoLiBPbmUgaXMgbG9jYWxpemVkLCBidXQgYW5vdGhlciBpcyBub3QuIEJsb2NrIHNjaGVtYXMgb2YgdGhlIHNhbWUgbmFtZSBtdXN0IG1hdGNoIGV4YWN0bHkuYCxcbiAgICApXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCIsImdldEZsYXR0ZW5lZEZpZWxkTmFtZXMiLCJmaWVsZHMiLCJwcmVmaXgiLCJyZWR1Y2UiLCJmaWVsZHNUb1VzZSIsImZpZWxkIiwiZmllbGRQcmVmaXgiLCJpbmNsdWRlcyIsInR5cGUiLCJoYXNNYW55IiwiZmllbGRIYXNTdWJGaWVsZHMiLCJuYW1lIiwidGFicyIsInRhYkZpZWxkcyIsInRhYiIsInRhYkhhc05hbWUiLCJmaWVsZEFmZmVjdHNEYXRhIiwicmVwbGFjZSIsImJsb2NrIiwibG9jYWxpemVkIiwicm9vdFRhYmxlTmFtZSIsInRhYmxlIiwiZmllbGROYW1lcyIsIm1pc3NpbmdGaWVsZCIsImZpbmQiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhPZiIsImZpZWxkTmFtZSIsIkludmFsaWRDb25maWd1cmF0aW9uIiwic2x1ZyIsIkJvb2xlYW4iLCJfbG9jYWxlIl0sIm1hcHBpbmdzIjoiOzs7OytCQXFEYUE7OztlQUFBQTs7O3dCQW5Ed0I7dUJBQzJCO0FBV2hFLE1BQU1DLHlCQUF5QixDQUFDQyxRQUFpQkMsU0FBaUIsRUFBRTtJQUNsRSxPQUFPRCxPQUFPRSxNQUFNLENBQUMsQ0FBQ0MsYUFBYUM7UUFDakMsSUFBSUMsY0FBY0o7UUFFbEIsSUFDRTtZQUFDO1lBQVM7WUFBVTtZQUFnQjtTQUFTLENBQUNLLFFBQVEsQ0FBQ0YsTUFBTUcsSUFBSSxLQUNoRSxhQUFhSCxTQUFTQSxNQUFNSSxPQUFPLEtBQUssTUFDekM7WUFDQSxPQUFPTDtRQUNUO1FBRUEsSUFBSU0sSUFBQUEsd0JBQWlCLEVBQUNMLFFBQVE7WUFDNUJDLGNBQWMsVUFBVUQsUUFBUSxDQUFDLEVBQUVILE9BQU8sRUFBRUcsTUFBTU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHVDtZQUM1RCxPQUFPO21CQUFJRTttQkFBZ0JKLHVCQUF1QkssTUFBTUosTUFBTSxFQUFFSzthQUFhO1FBQy9FO1FBRUEsSUFBSUQsTUFBTUcsSUFBSSxLQUFLLFFBQVE7WUFDekIsT0FBTzttQkFDRko7bUJBQ0FDLE1BQU1PLElBQUksQ0FBQ1QsTUFBTSxDQUFDLENBQUNVLFdBQVdDO29CQUMvQlIsY0FBYyxVQUFVUSxNQUFNLENBQUMsRUFBRVosT0FBTyxDQUFDLEVBQUVZLElBQUlILElBQUksQ0FBQyxDQUFDLEdBQUdUO29CQUN4RCxPQUFPOzJCQUNGVzsyQkFDQ0UsSUFBQUEsaUJBQVUsRUFBQ0QsT0FDWDs0QkFBQztnQ0FBRSxHQUFHQSxHQUFHO2dDQUFFTixNQUFNOzRCQUFNO3lCQUFFLEdBQ3pCUix1QkFBdUJjLElBQUliLE1BQU0sRUFBRUs7cUJBQ3hDO2dCQUNILEdBQUcsRUFBRTthQUNOO1FBQ0g7UUFFQSxJQUFJVSxJQUFBQSx1QkFBZ0IsRUFBQ1gsUUFBUTtZQUMzQixPQUFPO21CQUFJRDtnQkFBYSxDQUFDLEVBQUVFLGFBQWFXLFFBQVEsS0FBSyxRQUFRLEdBQUcsRUFBRVosTUFBTU0sSUFBSSxDQUFDLENBQUM7YUFBQztRQUNqRjtRQUVBLE9BQU9QO0lBQ1QsR0FBRyxFQUFFO0FBQ1A7QUFFTyxNQUFNTCxtQ0FBbUMsQ0FBQyxFQUMvQ21CLEtBQUssRUFDTEMsU0FBUyxFQUNUQyxhQUFhLEVBQ2JDLEtBQUssRUFDQTtJQUNMLE1BQU1DLGFBQWF0Qix1QkFBdUJrQixNQUFNakIsTUFBTTtJQUV0RCxNQUFNc0IsZUFDSiw4REFBOEQ7SUFDOURELFdBQVdFLElBQUksQ0FBQyxDQUFDYixPQUFTYyxPQUFPQyxJQUFJLENBQUNMLE9BQU9NLE9BQU8sQ0FBQ2hCLFVBQVUsQ0FBQyxNQUNoRSx1RUFBdUU7SUFDdkVjLE9BQU9DLElBQUksQ0FBQ0wsT0FBT0csSUFBSSxDQUFDLENBQUNJO1FBQ3ZCLElBQUksQ0FBQztZQUFDO1lBQVc7WUFBVTtZQUFhO1lBQVM7U0FBUSxDQUFDckIsUUFBUSxDQUFDcUIsWUFBWTtZQUM3RSxPQUFPTixXQUFXSyxPQUFPLENBQUNDLGVBQWUsQ0FBQztRQUM1QztJQUNGO0lBRUYsSUFBSUwsY0FBYztRQUNoQixNQUFNLElBQUlNLDRCQUFvQixDQUM1QixDQUFDLFVBQVUsRUFBRVQsY0FBYywrQkFBK0IsRUFBRUYsTUFBTVksSUFBSSxDQUFDLDZEQUE2RCxFQUFFUCxhQUFhLGlDQUFpQyxDQUFDO0lBRXpMO0lBRUEsSUFBSVEsUUFBUVosZUFBZVksUUFBUVYsTUFBTVcsT0FBTyxHQUFHO1FBQ2pELE1BQU0sSUFBSUgsNEJBQW9CLENBQzVCLENBQUMsVUFBVSxFQUFFVCxjQUFjLCtCQUErQixFQUFFRixNQUFNWSxJQUFJLENBQUMsd0hBQXdILENBQUM7SUFFcE07QUFDRiJ9
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCbG9jaywgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgZmllbGRIYXNTdWJGaWVsZHMsIHRhYkhhc05hbWUgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNUYWJsZSB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGJsb2NrOiBCbG9ja1xuICBsb2NhbGl6ZWQ6IGJvb2xlYW5cbiAgcm9vdFRhYmxlTmFtZTogc3RyaW5nXG4gIHRhYmxlOiBHZW5lcmljVGFibGVcbiAgdGFibGVMb2NhbGVzPzogR2VuZXJpY1RhYmxlXG59XG5cbmNvbnN0IGdldEZsYXR0ZW5lZEZpZWxkTmFtZXMgPSAoXG4gIGZpZWxkczogRmllbGRbXSxcbiAgcHJlZml4OiBzdHJpbmcgPSAnJyxcbik6IHsgbG9jYWxpemVkPzogYm9vbGVhbjsgbmFtZTogc3RyaW5nIH1bXSA9PiB7XG4gIHJldHVybiBmaWVsZHMucmVkdWNlKChmaWVsZHNUb1VzZSwgZmllbGQpID0+IHtcbiAgICBsZXQgZmllbGRQcmVmaXggPSBwcmVmaXhcblxuICAgIGlmIChcbiAgICAgIFsnYXJyYXknLCAnYmxvY2tzJywgJ3JlbGF0aW9uc2hpcCcsICd1cGxvYWQnXS5pbmNsdWRlcyhmaWVsZC50eXBlKSB8fFxuICAgICAgKCdoYXNNYW55JyBpbiBmaWVsZCAmJiBmaWVsZC5oYXNNYW55ID09PSB0cnVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZpZWxkc1RvVXNlXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkSGFzU3ViRmllbGRzKGZpZWxkKSkge1xuICAgICAgZmllbGRQcmVmaXggPSAnbmFtZScgaW4gZmllbGQgPyBgJHtwcmVmaXh9JHtmaWVsZC5uYW1lfV9gIDogcHJlZml4XG4gICAgICByZXR1cm4gWy4uLmZpZWxkc1RvVXNlLCAuLi5nZXRGbGF0dGVuZWRGaWVsZE5hbWVzKGZpZWxkLmZpZWxkcywgZmllbGRQcmVmaXgpXVxuICAgIH1cblxuICAgIGlmIChmaWVsZC50eXBlID09PSAndGFicycpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmZpZWxkc1RvVXNlLFxuICAgICAgICAuLi5maWVsZC50YWJzLnJlZHVjZSgodGFiRmllbGRzLCB0YWIpID0+IHtcbiAgICAgICAgICBmaWVsZFByZWZpeCA9ICduYW1lJyBpbiB0YWIgPyBgJHtwcmVmaXh9XyR7dGFiLm5hbWV9YCA6IHByZWZpeFxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi50YWJGaWVsZHMsXG4gICAgICAgICAgICAuLi4odGFiSGFzTmFtZSh0YWIpXG4gICAgICAgICAgICAgID8gW3sgLi4udGFiLCB0eXBlOiAndGFiJyB9XVxuICAgICAgICAgICAgICA6IGdldEZsYXR0ZW5lZEZpZWxkTmFtZXModGFiLmZpZWxkcywgZmllbGRQcmVmaXgpKSxcbiAgICAgICAgICBdXG4gICAgICAgIH0sIFtdKSxcbiAgICAgIF1cbiAgICB9XG5cbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmZpZWxkc1RvVXNlLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYCR7ZmllbGRQcmVmaXh9JHtmaWVsZC5uYW1lfWAsXG4gICAgICAgICAgbG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkc1RvVXNlXG4gIH0sIFtdKVxufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwgPSAoe1xuICBibG9jayxcbiAgbG9jYWxpemVkLFxuICByb290VGFibGVOYW1lLFxuICB0YWJsZSxcbiAgdGFibGVMb2NhbGVzLFxufTogQXJncyk6IHZvaWQgPT4ge1xuICBjb25zdCBmaWVsZE5hbWVzID0gZ2V0RmxhdHRlbmVkRmllbGROYW1lcyhibG9jay5maWVsZHMpXG4gIGNvbnN0IG1pc3NpbmdGaWVsZCA9XG4gICAgLy8gZW5zdXJlIGV2ZXJ5IGZpZWxkIGZyb20gdGhlIGNvbmZpZyBpcyBpbiB0aGUgbWF0Y2hpbmcgdGFibGVcbiAgICBmaWVsZE5hbWVzLmZpbmQoKHsgbmFtZSwgbG9jYWxpemVkIH0pID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkVGFibGUgPSBsb2NhbGl6ZWQgJiYgdGFibGVMb2NhbGVzID8gdGFibGVMb2NhbGVzIDogdGFibGVcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWVsZFRhYmxlKS5pbmRleE9mKG5hbWUpID09PSAtMVxuICAgIH0pIHx8XG4gICAgLy8gZW5zdXJlIGV2ZXJ5IHRhYmxlIGNvbHVtbiBpcyBtYXRjaGVkIGZvciBldmVyeSBmaWVsZCBmcm9tIHRoZSBjb25maWdcbiAgICBPYmplY3Qua2V5cyh0YWJsZSkuZmluZCgoZmllbGROYW1lKSA9PiB7XG4gICAgICBpZiAoIVsnX2xvY2FsZScsICdfb3JkZXInLCAnX3BhcmVudElEJywgJ19wYXRoJywgJ191dWlkJ10uaW5jbHVkZXMoZmllbGROYW1lKSkge1xuICAgICAgICByZXR1cm4gZmllbGROYW1lcy5maW5kSW5kZXgoKGZpZWxkKSA9PiBmaWVsZC5uYW1lKSA9PT0gLTFcbiAgICAgIH1cbiAgICB9KVxuXG4gIGlmIChtaXNzaW5nRmllbGQpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICBgVGhlIHRhYmxlICR7cm9vdFRhYmxlTmFtZX0gaGFzIG11bHRpcGxlIGJsb2NrcyB3aXRoIHNsdWcgJHtcbiAgICAgICAgYmxvY2suc2x1Z1xuICAgICAgfSwgYnV0IHRoZSBzY2hlbWFzIGRvIG5vdCBtYXRjaC4gT25lIGJsb2NrIGluY2x1ZGVzIHRoZSBmaWVsZCAke1xuICAgICAgICB0eXBlb2YgbWlzc2luZ0ZpZWxkID09PSAnc3RyaW5nJyA/IG1pc3NpbmdGaWVsZCA6IG1pc3NpbmdGaWVsZC5uYW1lXG4gICAgICB9LCB3aGlsZSB0aGUgb3RoZXIgYmxvY2sgZG9lcyBub3QuYCxcbiAgICApXG4gIH1cblxuICBpZiAoQm9vbGVhbihsb2NhbGl6ZWQpICE9PSBCb29sZWFuKHRhYmxlLl9sb2NhbGUpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRDb25maWd1cmF0aW9uKFxuICAgICAgYFRoZSB0YWJsZSAke3Jvb3RUYWJsZU5hbWV9IGhhcyBtdWx0aXBsZSBibG9ja3Mgd2l0aCBzbHVnICR7YmxvY2suc2x1Z30sIGJ1dCB0aGUgc2NoZW1hcyBkbyBub3QgbWF0Y2guIE9uZSBpcyBsb2NhbGl6ZWQsIGJ1dCBhbm90aGVyIGlzIG5vdC4gQmxvY2sgc2NoZW1hcyBvZiB0aGUgc2FtZSBuYW1lIG11c3QgbWF0Y2ggZXhhY3RseS5gLFxuICAgIClcbiAgfVxufVxuIl0sIm5hbWVzIjpbInZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIiwiZ2V0RmxhdHRlbmVkRmllbGROYW1lcyIsImZpZWxkcyIsInByZWZpeCIsInJlZHVjZSIsImZpZWxkc1RvVXNlIiwiZmllbGQiLCJmaWVsZFByZWZpeCIsImluY2x1ZGVzIiwidHlwZSIsImhhc01hbnkiLCJmaWVsZEhhc1N1YkZpZWxkcyIsIm5hbWUiLCJ0YWJzIiwidGFiRmllbGRzIiwidGFiIiwidGFiSGFzTmFtZSIsImZpZWxkQWZmZWN0c0RhdGEiLCJsb2NhbGl6ZWQiLCJibG9jayIsInJvb3RUYWJsZU5hbWUiLCJ0YWJsZSIsInRhYmxlTG9jYWxlcyIsImZpZWxkTmFtZXMiLCJtaXNzaW5nRmllbGQiLCJmaW5kIiwiZmllbGRUYWJsZSIsIk9iamVjdCIsImtleXMiLCJpbmRleE9mIiwiZmllbGROYW1lIiwiZmlu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
@@ -11,7 +11,6 @@ type Args = {
11
11
  data: Record<string, unknown>[];
12
12
  field: BlockField;
13
13
  locale?: string;
14
- texts: Record<string, unknown>[];
15
14
  numbers: Record<string, unknown>[];
16
15
  path: string;
17
16
  relationships: Record<string, unknown>[];
@@ -19,7 +18,8 @@ type Args = {
19
18
  selects: {
20
19
  [tableName: string]: Record<string, unknown>[];
21
20
  };
21
+ texts: Record<string, unknown>[];
22
22
  };
23
- export declare const transformBlocks: ({ adapter, baseTableName, blocks, blocksToDelete, data, field, locale, texts, numbers, path, relationships, relationshipsToDelete, selects, }: Args) => void;
23
+ export declare const transformBlocks: ({ adapter, baseTableName, blocks, blocksToDelete, data, field, locale, numbers, path, relationships, relationshipsToDelete, selects, texts, }: Args) => void;
24
24
  export {};
25
25
  //# sourceMappingURL=blocks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../src/transform/write/blocks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAIrE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,CAAA;IACD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACxC,qBAAqB,EAAE,oBAAoB,EAAE,CAAA;IAC7C,OAAO,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAC/C,CAAA;CACF,CAAA;AACD,eAAO,MAAM,eAAe,kJAczB,IAAI,SAyDN,CAAA"}
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../src/transform/write/blocks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAIrE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,CAAA;IACD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACxC,qBAAqB,EAAE,oBAAoB,EAAE,CAAA;IAC7C,OAAO,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAC/C,CAAA;IACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACjC,CAAA;AACD,eAAO,MAAM,eAAe,kJAczB,IAAI,SAyDN,CAAA"}